From ab5b7fef46ef5be80feb4858b73f431265a4a438 Mon Sep 17 00:00:00 2001 From: Jay Graber Date: Wed, 12 Oct 2016 17:02:33 -0700 Subject: [PATCH 001/165] Rm bitcoin dev keys from gitian-downloader, add zcash dev keys --- contrib/gitian-downloader/aschildbach-key.pgp | Bin 1993 -> 0 bytes contrib/gitian-downloader/bluematt-key.pgp | Bin 10324 -> 0 bytes contrib/gitian-downloader/cfields-key.pgp | 52 -- contrib/gitian-downloader/daira.asc | 70 +++ contrib/gitian-downloader/devrandom-key.pgp | Bin 2213 -> 0 bytes contrib/gitian-downloader/fanquake-key.pgp | 63 --- .../gitian-downloader/gavinandresen-key.pgp | Bin 1176 -> 0 bytes contrib/gitian-downloader/jack.asc | 449 ++++++++++++++++++ .../gitian-downloader/jonasschnelli-key.pgp | Bin 2230 -> 0 bytes contrib/gitian-downloader/kevin.asc | 171 +++++++ contrib/gitian-downloader/laanwj-key.pgp | 28 -- .../gitian-downloader/linux-download-config | 42 -- contrib/gitian-downloader/luke-jr-key.pgp | Bin 6518 -> 0 bytes contrib/gitian-downloader/michagogo-key.pgp | 59 --- contrib/gitian-downloader/nathan.asc | 52 ++ contrib/gitian-downloader/sean.asc | 51 ++ contrib/gitian-downloader/simon.asc | 47 ++ contrib/gitian-downloader/sipa-key.pgp | Bin 109468 -> 0 bytes contrib/gitian-downloader/tcatm-key.pgp | Bin 1554 -> 0 bytes .../gitian-downloader/win32-download-config | 42 -- contrib/gitian-downloader/wtogami-key.pgp | 131 ----- 21 files changed, 840 insertions(+), 417 deletions(-) delete mode 100644 contrib/gitian-downloader/aschildbach-key.pgp delete mode 100644 contrib/gitian-downloader/bluematt-key.pgp delete mode 100644 contrib/gitian-downloader/cfields-key.pgp create mode 100644 contrib/gitian-downloader/daira.asc delete mode 100644 contrib/gitian-downloader/devrandom-key.pgp delete mode 100644 contrib/gitian-downloader/fanquake-key.pgp delete mode 100644 contrib/gitian-downloader/gavinandresen-key.pgp create mode 100644 contrib/gitian-downloader/jack.asc delete mode 100644 contrib/gitian-downloader/jonasschnelli-key.pgp create mode 100644 contrib/gitian-downloader/kevin.asc delete mode 100644 contrib/gitian-downloader/laanwj-key.pgp delete mode 100644 contrib/gitian-downloader/linux-download-config delete mode 100644 contrib/gitian-downloader/luke-jr-key.pgp delete mode 100644 contrib/gitian-downloader/michagogo-key.pgp create mode 100644 contrib/gitian-downloader/nathan.asc create mode 100644 contrib/gitian-downloader/sean.asc create mode 100644 contrib/gitian-downloader/simon.asc delete mode 100644 contrib/gitian-downloader/sipa-key.pgp delete mode 100644 contrib/gitian-downloader/tcatm-key.pgp delete mode 100644 contrib/gitian-downloader/win32-download-config delete mode 100644 contrib/gitian-downloader/wtogami-key.pgp diff --git a/contrib/gitian-downloader/aschildbach-key.pgp b/contrib/gitian-downloader/aschildbach-key.pgp deleted file mode 100644 index df06e19fa4b109286dbbb7596c86d31fe0f1052f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1993 zcmbW%c|6mP9|!P{ZOo9Cp&a#Hj+h~m$T7F%D5emFVVEO+2vLrZIm;+aI~)yBmYO18 zM^Wx?Ie!|``qoy?2Z`m_FW=w!_wV2LAJ518db~=7Dj;UV-*xsu0D79G@N`E;@EF_j zZAyT=A6}Me4xPW&Zp@62nvj3y3W>K35PKZFfZuDmXq|S(ah3M;LE0BBZ_%unppxvE z-2O!dq)NG|QA``9kbCfqjX?){@c(@m5Pi`fQaaj3sn`;&V zH>t|DcOj<+8xrBh0DXw{<^xj|wD5hNC~0`1XF_|+KNBp7@MSR!c9sz7ShLc|Gl$|P zf-`KjZaloRozrKUMb*S*npiVtdxtM5_KY4kXlz^|o_0vIwO54ZckOAaXmWSvk-OC- zZjE!KoM37(gDdKmLQ9BqUdGC`f21afPMI`Abvw@3ltID^>pcg`lytE6?2(PL|iOYGZha+T6oFD=EmP47Oc zN{?Sla}(95`+d>k4vU|uH@xk*WqCLnMePprX7IC5WOLYeIVeFFlhIzAO*09I7}1@27zTjV6ZGm2y{pYv_Az9gTea( z(I0a%6MQ$01N0W~)Z8Qv7OBoq9-Iif$!%Js@c~-MeH*O&C%PIs$mN-Gx;<%1KMDGO z`BY2-7MLt}|8vq!kjnbh5L%;WNCBuC@;tH_EH^F>Oni`H8!4j_-Nz!@Lg2sp7ZC>8 z#91uv_Nn;{1yc9-nLeZn&|F^Jy;nM)>Y;Eyh?b~2EcRM= zVX36PXxoGTb?n-fUhFzsd%yL^O>OsZJ^?gyVSH(^Dd~j1j?qCQ$M^G&Jb^ku-!P}d zU;lukJM62bY19RJobOqu|ButYkiF}ySEirR0a=V134k()_^|R^MUZxZrJvnpbQ8BH zx=I9~9uDzXd#zGm+6XCMJW)SwI#$wB_{-V7%dfc{8@yJcW>`jIG5)&9pIcO&R{RR*Y2kKFW7ZXL1d8C7-X(qY_&B7?2zOptv~SYUWk z`{+o@{>>S=@w%tiTR-K`CgmzT>J~?{%=*DI+^Q7||K71;ZUe}q^h+SUSgJK}Nf#eE zlB8O+rmCr%gg5sYdqY$q@n>jQp*CGt5z`ETh;}G0*;J;mU-S>U!y5XA^dlq@h|Y!DG!^|uW(6C*RRUV!zEK@_uaxvlXRU1u1%Q>YD?PRa3J!oSxlHr$o)~YQ(&8r3(_S>uje8k>(j=DJ! zAC8U1=EQr=t4*~Jw-~^;^=)KMw@SJM54rul%c~=lWYfi5KD6;oz00Vo{OwI~@6>5` zmj6fbWB@D-6qP#5^rhmz#`8-N0jrP<(5ZU!j+H=P!F%cTpWH`n49o^A+ zGEuRA>2`AC?-wP=WnzdtnMwaVuv=mfLMDbhXgA+`_ZgSdkO1c_bV&bPE+L~O7*+$H zJY0CO8hO=L)isjminxmFFrL+Psx^W+3Y~sixVJ&!bC@2)+(~Qdn1o-SZl~^G<&9zq zsrbl1D&~hVvpiN#pts$YR5XgIAqX6PyK}K%>&8m-N_zDWp|h4VIkp(&RFQgwgj9s9 zd=Aa;M!cll?VfCWIUTp%dDG2HL~BXa-?D*s*KOD>R@ey2!nb0?HR!un_qG1b$6dwU)^ WIAcG~ygp)$8X5B=5Q?y`6#oH_l8)K{ diff --git a/contrib/gitian-downloader/bluematt-key.pgp b/contrib/gitian-downloader/bluematt-key.pgp deleted file mode 100644 index 2389d4657fb7f5f225f5d76e08841fd6e21d4be9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10324 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 YdwG{wk5UyOo}K#wKU;q@OV7XfKc-z}EdT%j diff --git a/contrib/gitian-downloader/cfields-key.pgp b/contrib/gitian-downloader/cfields-key.pgp deleted file mode 100644 index 6b0bd240b..000000000 --- a/contrib/gitian-downloader/cfields-key.pgp +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.12 (GNU/Linux) - -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 -MrD0ofsytfy1LQ== -=DE4h ------END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/daira.asc b/contrib/gitian-downloader/daira.asc new file mode 100644 index 000000000..e60a2bbcb --- /dev/null +++ b/contrib/gitian-downloader/daira.asc @@ -0,0 +1,70 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: SKS 1.1.5 +Comment: Hostname: pgp.mit.edu + +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 +eCJPlVdlz6Oj1tV2kw== +=E8LJ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/devrandom-key.pgp b/contrib/gitian-downloader/devrandom-key.pgp deleted file mode 100644 index 71898127ba0d6c9976ab7225d8c71ffc6380b0a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2213 zcmV;W2wL}<0u2OBj)Nls5CFeq*<7}>X;w`_QHIEVR4q2Fo2X;O&l+|Y;TUws#9s7$ zd$!N+kn-9yQpQGm&JE9u3t^!EbCB}GvGIX*t@O+-5I>MVonlJZ8CbfC{~;OJRT{mw ztV`wBL19Whs>{tw%bom4`3IkH)k;@IvdgYx#r%JEc4Iv9+y|x~7>q)-Gf7QmO|l0> z%p3{1c(pL4%-D1?*Bj3xD6kLFKan`|{XLUGrvT^QPVUUZXe)nJ{onV!YTP>L2j5i3 znsRJ7QINlj_#3^yyuOHxNQ6O*{udHvBdY*fUBfUHb<-L|1R&8j{$*KW%Pd7K*GRS}do|>CWV)=C?1yl0j#Oc!*3ZLK!X43t)T|FSh`*d9DI{;?& z%fO{fZnQogv6wuA8urEHoI{Z7z^>*7AJRif7biY7r>V5pp?de9km_gnc77F0QHqX_ zBI_EqjvLq$oUH&60RRECCPZa+AW~s&WN&RCJYz8~WMy`8VQyq^Z9r~mW^{RCZ+I?l zWpqA?0yqQ{0RjLb1p-ZugChbP0|pBT2nPcK1{DYb2?`4Y76JnS0v-VZ7k~f?2@sf{ zYcNQm7PX=n5B(jvxHK+fi6yms@Q;H38D5D~IjZ=a*#Auk)kmBND(QJf;rYTta!+9q zs0>2?RrQXb3;SDAnjJp(6{VsaC(BEgPF;n+OOV*l2P$^FJJl&8-;K+5uQbIs(03|0 z6f^JTiR=%A!_z}_Z6DADh-~~5z47oc?rX6guM>&`bq_TdX0Rfl z=38am)5*g+xZ8SKoTdW>1gx@GXj|d|IRBAQSHm7zVf>=^(~O!&JC4qFPN)zuaIQp>fi;T6i?2ghxf$V6r&{^f!XpSL!O=l3Lgw!(vlc<{zg1+ z<*qW?DsO;Tu=D|pm{J9u%;6>*H3hW(Lf7n3j0$zsy)vZMo%U|N-$>={H5@s=c|1X$ z$xND78b{RFJ8i0#6;}%Le>V`v*Ghhzr#c!(rPBg3&uQG#Egxn%h`Xa8e8r}s#;656pc^)9!C#|Yc_-)a~ zH4wQ14FpY&gChYD0JFQe^o}0)cr#z2`px-8SRuN`gxjWHFFG*Vq3!`U>IriQ+Te)0sDl*Q}C}-0-Z# zllWk$l=91f!GdFpWdW{llDrc<9$O3pNpzc2<>Fwt{xj3d_H;`Jl7DS*GcX~%h>u4L zD``9^W`~HzU6c1}Z|>FKe+7{|DRETtDh^JTwH;uM9Z-7Hz{kU-jF+Ai0O)zpx)+W& zvLHTvO*OIb)D0tF(Y#3IJ(!RPtq`A0-G{f;^+V3iE&Fo5L={LIlSW(*!Akx;sVqSw zAe1oCk@$PP@*h=>Xl8&Cv0NT|AY|pb#NsSO#1#US#)iuf=gsa8-9yQ=GB+H`ayluJ z>IQ8Un77!yesp%Xbv)s;Mnl)8w7xGxH){&z>n>$0@ z#21Qej|yd{Y!MYf(C=iw?;iBUunLjODY9v`;C!Wnwm2;`I=}S;Uw-4fo(EN0ymsN283-QAaPcFforDn)}=fHsTQx4>6G$zG{wlV)O5Y|`QGx=mZhBa#LAJt^5rWHwjAyb;G6Gc ztB1Zo*=UaxTiT+?vH>Mp%$2}T8C176(F7Ro8S;cmsre!_3q6oHbQ5zB*^G9#v339E z4i7E&OY%fJ|CR2jpANi}oO@9_U)8t&c5DuTh&aj*$+ZH$2+a;i>~)0$WMQh`W3(nk zvM;bJS>j!x5qx^K=A>j`39c9zcTF@aAG%)PhD5?`e#k!<5KgI~;>-CiJ7FtJeuIF=J{OfmAJwe%7wdp6VenJhZZ)8qOMfh$y<(Csx*nGs+~*m=)#QASGS9Fln9_adQ;CmY n(h-e<^sM=qCBIX6Njz5;XotHkz<0TM5Z~I@{aR97pyn9V^jsJC diff --git a/contrib/gitian-downloader/fanquake-key.pgp b/contrib/gitian-downloader/fanquake-key.pgp deleted file mode 100644 index 9c03ff452..000000000 --- a/contrib/gitian-downloader/fanquake-key.pgp +++ /dev/null @@ -1,63 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG/MacGPG2 v2.0.26 - -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 -XwbdK0Zpx/oDtRHpuDMGKJBV2LWAZYkEbFsmtg== -=3o2I ------END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/gavinandresen-key.pgp b/contrib/gitian-downloader/gavinandresen-key.pgp deleted file mode 100644 index f81f44e874707837c13446858db2fed14ad5c501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1176 zcmV;J1ZVr10ipyd+BPOXG1ZrDpv%iXyY*~=|+SlmVRJ2@d|5G=3lw%C&g;j0KvRW zG0RVD!3nRuh%R)pia&~L1FEOGx;eXR*K` zu*WO05N?XC!C+-X<8ovFvIpC&fxEyfX(2{j!G#JZ7?CU%mrw)$TSGNqq(L>S_EMhm z>C$tB193UkB)z)vhMWgbGCTvPxP}Kfdx0GIl8t06ZPII(&3kQCzEXv7#M)%vPj{EY zcen(gIU`UxU-nd2`Gon+|B_0Ff*@;+F`bIwREZv?xbmc4=-PL2hJnWpib2AUtPbc4=;5Ze((0b7gKoXKi6=Y%XJO zZ9a%*1QQVg044HzfCdW*2nPcK1Qh}Z0|XWV0|5da0Rk6*0162Z zb%-P{zBtpUe6IkY$jlON2g&-~!PtabhH%KRx;RqM0G%3)n>ot_(%$#C+gXU@atMHu zy_C5E4FpWQvb7Kh0Lyf?4-i~4^f3$`ga{Ay5*wreKf>2lV6ywp8d}7ENW=D%ux6^* zfe_#szOQ3V{y*tz7?DrDyfq@LWFCHCr%@-(h(6PCP!Kw9x74URPC$@TblGE?^C!T- zq8)?0%b0~_Ytjnul$QnT9RS<*D5dmu1n$x{uRAV*zh*N+8p9}Ho%Pe)*0 zMnEdZ`oH?%L4~7A1F_aQ|8Rcjri-TI9EL4W#QMcIXrNTVrH)rvOHg%{!T`G$1?>8K zRy|m)M}%VOrUsN$>#AQvZnPq$teX`yY;D;>tsyDHK5Qtj#S?asN{)W{exHw@bhzOU z9^1V{J3(+Kj{pM&2mgPBEamX!SrHwdYa^4uCaz(-f7?+0M)V2mw#6{WkHkn8b1R-^ zYDL+eN?p#i&&iBy&Go@UU6MyD*c7YSQ3wLLX`?CdU~}FpEb`VEVP6+=?&FSbCm=k@ z&d1&vM(f=F5d18_%WVyD>j@@JhkmOlWQELtPqF$CFI z6&Wk2#X|#%!_kOO1Q-zl01pKMOuVwS0vikk2`>HzfB*^!5Os(oFTOa_s4)oupKEmm q7ky6Gg$kN{t|V0xiYY!|8vvlVg5(~9gx$G(luB9`Z;BnEL2B3d)*1@{ diff --git a/contrib/gitian-downloader/jack.asc b/contrib/gitian-downloader/jack.asc new file mode 100644 index 000000000..db9967233 --- /dev/null +++ b/contrib/gitian-downloader/jack.asc @@ -0,0 +1,449 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +HifqTn/z+qdV2A== +=phy7 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/jonasschnelli-key.pgp b/contrib/gitian-downloader/jonasschnelli-key.pgp deleted file mode 100644 index fe44c0fbd4eb3b57ff658f48a1e7af67e2d25dda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2230 zcmV;n2ub&u0u2OIfvhqC5CE%WN{()8WljFyIIC?Fe`=~L1$@XfRpAdye(n)724ct) z68!Ix^DJB;tQbV2^sZ}EHQ24?G^EnKR5B8hs63n(WvFS6 zZiWL;DGwHZDp|40hSA-9F0OMJHJTfjk_shxaiF24;OPc6;bn)7sR?#NogZh_jeBLl z-O0HYa--V}4E%~ykZ@BW3=v@5IJY5F0BAN(*6bD)zHi5^7zdMKkm^O9l?T()Nyq-~ z?FU9ZAoy^MK%ygy%fz|$F*imZc5A~AbCNkt(L z0;lFUiNBDY7Bv2$gwrT@L;<+3_i`Z(X5T)~bJwywpdk~4yGsx-p&l|iq&YMP*Ma| zb!25XE@Nmui2^sI171cw7BiA9G&9`DFnh*^DNqcY=-%1G*KSj zl?*r+QwY3ENEVxht;x-Nrz&`1rk-+zP2gjaXdGhqquKSnUQ|HTcnC{Nbhgm%^5s{* zEpb*oY9Szg*Rdjg+)0chrP`K75n4+_yApz_)kMnzOO9HDs^Xw*ZL3)KiS!LjLuVyu zb2)qP&6rDq%$6=Un7uID&F~N|mPMlg42iR_yQ7;5N%(damikgR0(0)~s!Ou7rH-Mm zUF$ldXLj=V>N2@zvpum?LU?X;Pf@b(-L)m^-?jC6VlqE?WF}YsOWvn6jRMb_V)`X? zS@i$NT2q_|4RgQF1=5yo3Z52&e_ZahTE8|9lNr9cnUb7Fh=v|{?n91V?NS#-^QM8e z)J;Ml`W_g*0Fy_@OrYhdcaRJ6R(EbT6^mSjcj|R?_v@~6ePP~cj)p->wRVqO3xfXR zM2D9zmsZW-Ec}pjme2=S@4Y*tY+-v*O-V9&2EL#YhSci>UH-R|!{9;wjl<_+-VCaAz=1vU_QiyjrUDgMQu|ip^fJ%qZEr0n4 z_-6F7s!bl9{DK^}h~$9lItcnc}%V`@Rw|3N$bOU|K)}QLJhHNc0(+oN@ z(fYjId+<(K6FN(z>7I)|jh}ci*vZupc_PR5m(ecvk(-gK z^{`1>Hrv=Oe&vUL`IDrfn-k6OPpqBAcx| zMjbCF9XgeR4$ud!X%m$k$|i!w;u|u+5FkPB=k{{n?U|wu74lsYvL@@U8=0-`Mq!O_ zd6t1iRl%1Wj7^&rYBjxBXl>*XuTOOYC^^j`MV9^VyqX#MOIO8c;2?E)3zbtv9W@++ zhPF!O(w79^^tqb39tud*Xo~zT*iz&O-rs4>;#d!O&l!M-_Z&-Vt9!y44j{AUXHu5g zN7qjG41g63kXl);s8brp01*KI0f_=71Q-DV01pKMRDrBA0vikk2?N4s000UJ5F&8n z3{odK_KKbl|5CmMG3!7f$Rp*{Zn$`YJu_m|;`xV<$U4G!;olaPUinZ{TxZYzNYQ%b zY7yJl9n0T0hQvSBdRVfKft-Xo#YlaKGC{Tr43~7l&ZvQtt3y2%I!TSdgI81){qYO*#ws zNEtjP5ZO_0Ux)4OG@mu9pnRRt_(tvD5oleA7v5MOpR4(#w$Z`W2{J#?o%R-KX9y0E zmPTq&q#n7yoK!gMltYbQj5 zrU1wd_wNl7&v0gZ>tdNNll5@aTn%s_lwrLYJ&F-k7*E+n*qgJlbf;v@_1{aiDzn-x zqfufHxTu;NL9^sm@^@N0+y@$fr`z=a57+TDi4#Kdy49(&jAi$M+$%c^d)$w(jthJ8 zIhnAh=RIa8IE5hF{dPZyf#|4K55ou{;Y*j)#eJV2)1{SIg%fZN9Dybv804J99R#1? zcPucZnO2*-@^b~}Q}o{}Uicl$2{ut4FDj_AB|T2`3dDUn4eXsDa#&QMr)$zFy6h3M EG2;dUG5`Po diff --git a/contrib/gitian-downloader/kevin.asc b/contrib/gitian-downloader/kevin.asc new file mode 100644 index 000000000..13a39ee7f --- /dev/null +++ b/contrib/gitian-downloader/kevin.asc @@ -0,0 +1,171 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=qSqw +-----END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/laanwj-key.pgp b/contrib/gitian-downloader/laanwj-key.pgp deleted file mode 100644 index 559295109..000000000 --- a/contrib/gitian-downloader/laanwj-key.pgp +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: SKS 1.1.0 - -mQENBE5UtMEBCADOUz2i9l/D8xYINCmfUDnxi+DXvX5LmZ39ZdvsoE+ugO0SRRGdIHEFO2is -0xezX50wXu9aneb+tEqM0BuiLo6VxaXpxrkxHpr6c4jf37SkE/H0qsi/txEUp7337y3+4HMG -lUjiuh802I72p1qusjsKBnmnnR0rwNouTcoDmGUDh7jpKCtzFv+2TR2dRthJn7vmmjq3+bG6 -PYfqoFY1yHrAGT1lrDBULZsQ/NBLI2+J4oo2LYv3GCq8GNnzrovqvTvui50VSROhLrOe58o2 -shE+sjQShAy5wYkPt1R1fQnpfx+5vf+TPnkxVwRb3h5GhCp0YL8XC/BXsd5vM4KlVH2rABEB -AAG0K1dsYWRpbWlyIEouIHZhbiBkZXIgTGFhbiA8bGFhbndqQGdtYWlsLmNvbT6JATgEEwEC -ACIFAk5UtMECGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEHSBCwEjRsmmy6YIAK09 -buNXyYQrJBsX16sXxEhx5QPKyF3uHJDFJv66SdnpvIkNoznsaPiRJkbTANop93FZmaGa6wVn -zGDiz7jPA8Dpxx5aAYPhIT+zPJAdXWM3wJ/Gio9besRNzniai8Lwi5MZ9R/5yFGBobm6/AcN -4sUoqA3NSV2U3I29R0Vwlzo8GVtmyi9ENSi6Oo7AcXNTRt69cxW4nAHkB+amwwDJlcAb31ex -bogYXPhScwqQZixRr+JBkKxBjkTXXnQypT4KI5SegYwQVYfyiZmDP7UHKe/u6pSKKbVphLg8 -xLB5spcXse8/a2+onrbNlw6y8TXiJ++Z54PE7zztWTXf2huakeG5AQ0ETlS0wQEIAMNO3OkP -xoPRKWzBLcI7JRITAW+HNaLTq3uN2+4WxA57DEjbL9EDoAv+7wTkDAL40f0T+xiu6GJcLFjw -GJZu/tYu7+mErHjrdo+K4suCQt7w5EXCBvOLjhW4tyYMzNx8hP+oqzOW9iEC+6VV91+DYeqt -EkJuyVXOI4vzBlTw8uGow8aMMsCq8XVvKUZFTPsjGl197Q5B3A+ZOFCR8xqiqdPjuz6MglVV -oFdDNu3EZn8zkGsQlovXoE9ndVeVzx/XMNmsxFaMYsReUs253RIf1FEfgExID0fg2OnyLCjS -2iFW1RgajS+/saIkKl+N1iuMzJA7wMAM0plhRueOG0MtZSsAEQEAAYkBHwQYAQIACQUCTlS0 -wQIbDAAKCRB0gQsBI0bJpmsDB/4waenn2CvSHXyomykfpwf5lMte1V5LvH3z5R2LY+1NopRv -LSz3iC39x69XWiTbhywDfgafnGPW4pWBOff2/bu5/A6z1Hnan1vyrRRD/hx1uMJ7S6q+bIvZ -iVIg1p0jH6tdIIhwX3cydhdRZHo7e9oSMgOUWsr6Ar59NRo9CENwGPE4U61HXfOnxWdrFWoA -XdwZczBeLxmUy6Vo6sKqv+gE4bqrtAM0sY/MsQ9cU95x+52ox/sq44lQMwd3ZBYUP7B1qbHI -hZSZuch6MLi5scLPeau0ZvCaljiaMeivP5+x0gWPRs0kI+9sZxInbqvrsJ6oOBJM3xYGhtn1 -zZ7qmZR7 -=si/k ------END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/linux-download-config b/contrib/gitian-downloader/linux-download-config deleted file mode 100644 index 4c0377952..000000000 --- a/contrib/gitian-downloader/linux-download-config +++ /dev/null @@ -1,42 +0,0 @@ ---- -name: bitcoin -urls: -- http://bitcoin.org/bitcoin-latest-linux-gitian.zip -rss: -- url: - xpath: //item/link/text() - pattern: bitcoin-\d+.\d+.\d+-linux-gitian.zip -signers: - 0A82509767C7D4A5D14DA2301AE1D35043E08E54: - name: BlueMatt - key: bluematt - BF6273FAEF7CC0BA1F562E50989F6B3048A116B5: - name: Devrandom - key: devrandom - E463A93F5F3117EEDE6C7316BD02942421F4889F: - name: Luke-Jr - key: luke-jr - D762373D24904A3E42F33B08B9A408E71DAAC974: - name: "Pieter Wuille" - key: sipa - 77E72E69DA7EE0A148C06B21B34821D4944DE5F7: - name: tcatm - key: tcatm - 01CDF4627A3B88AAE4A571C87588242FBE38D3A8: - name: "Gavin Andresen" - key: gavinandresen - 71A3B16735405025D447E8F274810B012346C9A6: - name: "Wladimir J. van der Laan" - key: laanwj - AEC1884398647C47413C1C3FB1179EB7347DC10D: - name: "Warren Togami" - key: wtogami - 9692B91BBF0E8D34DFD33B1882C5C009628ECF0C: - name: michagogo - key: michagogo - E944AE667CF960B1004BC32FCA662BE18B877A60: - name: "Andreas Schildbach" - key: aschildbach - C060A6635913D98A3587D7DB1C2491FFEB0EF770: - name: "Cory Fields" - key: "cfields" diff --git a/contrib/gitian-downloader/luke-jr-key.pgp b/contrib/gitian-downloader/luke-jr-key.pgp deleted file mode 100644 index 4406e6d5be02c1e9006c6ecccc1e4c7c0dbad60c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 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'pMIr=Y0zm9x*Gy{hu97sznPEpu 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 aIuiUKpC;|giAK$4lG@Yh1egw&=>8v(vgiE( diff --git a/contrib/gitian-downloader/tcatm-key.pgp b/contrib/gitian-downloader/tcatm-key.pgp deleted file mode 100644 index baaec76b8c656a04beb4a91155dff40658c87bd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1554 zcmaLXdpOez7zgm}=ej6sb1Pa#8IlSy8m4eWF6A1DTv~I_jFQVZ%x!YXHIs5;lv2b&au>j&AO;b^5AaZw zS_2#|)T*hrzK+H*LHsz!|6K?Ku&VUx#NdeA@N5NXFT>aIOjxF zy4whds0=Oq(@2 zz5C0o8+C^w{_b)@?4r`gwi%FXMnpT2F%#BQYsG;hiPIg))5Y|!x1ZJex)A$MiNNX( zq6&=I<&6kZI1wW|8o{H$=I*P|T^9^$R+XKtQ`SnvhEOJ;uhQjn2CWkmj_^7`Aa3c- z8Zs}@d#(_b{reL%xnIYqQg<&4Shq?0ZMJt4#E_eu1;rw?zks%bLEvhXHQt|~VCQuq z&A-#OrVqAfk)-lg}vy7 zYs{BAGW}t+Bct766}J4~uIL-c)@4fnX~wI?{tt{!6ZM`1wc=GKOA;;?`>n3icWB0G zn*||8j}j?7(5Ob(-PQ-uJThqd2@S1uW*w1X-|9A4-%6Qux^GMLljXjQ)sN@kpv?VO z)UkLWhmj->gnz;q!4owp@2yD~e{+z0Gz?Wg#-nKk+Qh}dVfq|kPnBUdp-;hvz)x2t zD?{SnDzor5MGJ>X13OouOQ(XXjf?e%bQ%eENi%61!fX|rVS*-fUgk}jZXdQS*=pu7 zn*l%)vEtxtnsfe78h_1@2}w%6!25|yQBmC1DEcXumbL82v@a7>)Mz3#h|4L`WPlN(+95yvu#{C!>gm(Nv!S*Yv%^(qS9*ha8g`_+-5KMB1k7w}O?nKX_$dgx0zKT> zsK@?(;%%efAn>h*Z*5Z>_ERN@VpIEg)VY;7&-da56_Nt)d)n(s{^moqKbzg#(kvLW z_g3p9;|WwT=QceTow#FuTvuyb#6|7txyOiS%w#V=}?{wnLKuU3K z)LKWy{tfcIT~3<;zL)*5y45%&9BU728+bn0YHD;;MHsu8*-lKYQs(yGsc3#7XH3FF z)6ZNg<)%-4Jo9KihD(yQ2p@45F;h{7b%utDjKt-eDI`%@T2fxC!k6(j540(SjvdEY z&4sPj$l9*nt{0{Ksm2XXNloeRVl7wfZyz{W@(szDaGi^F^8SE`Mg86EWbj@=+3$sw z5CVQYJU~ud2m(0|CjFY5huQFyjG2;4Ye>`;Or>jAW`VBfSSCzgV_T@{G&oZG zMZ&q+CGm;Gb?Vy`__|_oh6ILLkb2J~@O-;TLScpzuRgCrq~`N8>#L#y{$+GFo~DN* zIi%T&4(?=Dgd6kV_SqzM&HYCc@^&t@&q)T@niB6VT*F0pG7n11dnBi@v SyHEabV7`Cld{4j Date: Thu, 13 Oct 2016 16:10:03 -0700 Subject: [PATCH 002/165] Rm bips.md --- doc/bips.md | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 doc/bips.md diff --git a/doc/bips.md b/doc/bips.md deleted file mode 100644 index e8ed0f1de..000000000 --- a/doc/bips.md +++ /dev/null @@ -1,20 +0,0 @@ -*** Warning: This document has not been updated for Zcash and may be inaccurate. *** - -BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.10.0**): - -* [`BIP 11`](https://github.com/bitcoin/bips/blob/master/bip-0011.mediawiki): Multisig outputs are standard since **v0.6.0** ([PR #669](https://github.com/bitcoin/bitcoin/pull/669)). -* [`BIP 13`](https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki): The address format for P2SH addresses has been implemented since **v0.6.0** ([PR #669](https://github.com/bitcoin/bitcoin/pull/669)). -* [`BIP 14`](https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki): The subversion string is being used as User Agent since **v0.6.0** ([PR #669](https://github.com/bitcoin/bitcoin/pull/669)). -* [`BIP 16`](https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki): The pay-to-script-hash evaluation rules have been implemented since **v0.6.0**, and took effect on *April 1st 2012* ([PR #748](https://github.com/bitcoin/bitcoin/pull/748)). -* [`BIP 21`](https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki): The URI format for Bitcoin payments has been implemented since **v0.6.0** ([PR #176](https://github.com/bitcoin/bitcoin/pull/176)). -* [`BIP 22`](https://github.com/bitcoin/bips/blob/master/bip-0022.mediawiki): The 'getblocktemplate' (GBT) RPC protocol for mining has been implemented since **v0.7.0** ([PR #936](https://github.com/bitcoin/bitcoin/pull/936)). -* [`BIP 23`](https://github.com/bitcoin/bips/blob/master/bip-0023.mediawiki): Some extensions to GBT have been implemented since **v0.10.0rc1**, including longpolling and block proposals ([PR #1816](https://github.com/bitcoin/bitcoin/pull/1816)). -* [`BIP 30`](https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki): The evaluation rules to forbid creating new transactions with the same txid as previous not-fully-spent transactions were implemented since **v0.6.0**, and the rule took effect on *March 15th 2012* ([PR #915](https://github.com/bitcoin/bitcoin/pull/915)). -* [`BIP 31`](https://github.com/bitcoin/bips/blob/master/bip-0031.mediawiki): The 'pong' protocol message (and the protocol version bump to 60001) has been implemented since **v0.6.1** ([PR #1081](https://github.com/bitcoin/bitcoin/pull/1081)). -* [`BIP 34`](https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki): The rule that requires blocks to contain their height (number) in the coinbase input, and the introduction of version 2 blocks has been implemented since **v0.7.0**. The rule took effect for version 2 blocks as of *block 224413* (March 5th 2013), and version 1 blocks are no longer allowed since *block 227931* (March 25th 2013) ([PR #1526](https://github.com/bitcoin/bitcoin/pull/1526)). -* [`BIP 35`](https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki): The 'mempool' protocol message (and the protocol version bump to 60002) has been implemented since **v0.7.0** ([PR #1641](https://github.com/bitcoin/bitcoin/pull/1641)). -* [`BIP 37`](https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki): The bloom filtering for transaction relaying, partial merkle trees for blocks, and the protocol version bump to 70001 (enabling low-bandwidth SPV clients) has been implemented since **v0.8.0** ([PR #1795](https://github.com/bitcoin/bitcoin/pull/1795)). -* [`BIP 42`](https://github.com/bitcoin/bips/blob/master/bip-0042.mediawiki): The bug that would have caused the subsidy schedule to resume after block 13440000 was fixed in **v0.9.2** ([PR #3842](https://github.com/bitcoin/bitcoin/pull/3842)). -* [`BIP 61`](https://github.com/bitcoin/bips/blob/master/bip-0061.mediawiki): The 'reject' protocol message (and the protocol version bump to 70002) was added in **v0.9.0** ([PR #3185](https://github.com/bitcoin/bitcoin/pull/3185)). -* [`BIP 66`](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki): The strict DER rules and associated version 3 blocks have been implemented since **v0.10.0** ([PR #5713](https://github.com/bitcoin/bitcoin/pull/5713)). -* [`BIP 70`](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki) [`71`](https://github.com/bitcoin/bips/blob/master/bip-0071.mediawiki) [`72`](https://github.com/bitcoin/bips/blob/master/bip-0072.mediawiki): Payment Protocol support has been available in Bitcoin Core GUI since **v0.9.0** ([PR #5216](https://github.com/bitcoin/bitcoin/pull/5216)). From 2df4f6317f9d53501cb8885d16c79ce7902769d6 Mon Sep 17 00:00:00 2001 From: Jay Graber Date: Thu, 13 Oct 2016 16:16:31 -0700 Subject: [PATCH 003/165] Update files.md for zcash --- doc/files.md | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/doc/files.md b/doc/files.md index 4cadbde04..260d36ef3 100644 --- a/doc/files.md +++ b/doc/files.md @@ -1,28 +1,12 @@ -*** Warning: This document has not been updated for Zcash and may be inaccurate. *** - -* bitcoin.conf: contains configuration settings for bitcoind or bitcoin-qt -* bitcoind.pid: stores the process id of bitcoind while running -* blocks/blk000??.dat: block data (custom, 128 MiB per file); since 0.8.0 -* blocks/rev000??.dat; block undo data (custom); since 0.8.0 (format changed since pre-0.8) -* blocks/index/*; block index (LevelDB); since 0.8.0 -* chainstate/*; block chain state database (LevelDB); since 0.8.0 -* database/*: BDB database environment; only used for wallet since 0.8.0 +* zcash.conf: contains configuration settings for zcashd +* zcashd.pid: stores the process id of zcashd while running +* blocks/blk000??.dat: block data (custom, 128 MiB per file) +* blocks/rev000??.dat; block undo data (custom) +* blocks/index/*; block index (LevelDB) +* chainstate/*; block chain state database (LevelDB) +* database/*: BDB database environment * db.log: wallet database log file -* debug.log: contains debug information and general logging generated by bitcoind or bitcoin-qt -* fee_estimates.dat: stores statistics used to estimate minimum transaction fees and priorities required for confirmation; since 0.10.0 -* peers.dat: peer IP address database (custom format); since 0.7.0 +* debug.log: contains debug information and general logging generated by zcashd +* fee_estimates.dat: stores statistics used to estimate minimum transaction fees and priorities required for confirmation +* peers.dat: peer IP address database (custom format) * wallet.dat: personal wallet (BDB) with keys and transactions - -Only used in pre-0.8.0 ---------------------- -* blktree/*; block chain index (LevelDB); since pre-0.8, replaced by blocks/index/* in 0.8.0 -* coins/*; unspent transaction output database (LevelDB); since pre-0.8, replaced by chainstate/* in 0.8.0 - -Only used before 0.8.0 ---------------------- -* blkindex.dat: block chain index database (BDB); replaced by {chainstate/*,blocks/index/*,blocks/rev000??.dat} in 0.8.0 -* blk000?.dat: block data (custom, 2 GiB per file); replaced by blocks/blk000??.dat in 0.8.0 - -Only used before 0.7.0 ---------------------- -* addr.dat: peer IP address database (BDB); replaced by peers.dat in 0.7.0 From 748f285ae6ffbfd5b71c8c2641c0b3720e580593 Mon Sep 17 00:00:00 2001 From: Jay Graber Date: Thu, 13 Oct 2016 16:22:04 -0700 Subject: [PATCH 004/165] Update dnsseed-policy.md --- doc/dnsseed-policy.md | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/doc/dnsseed-policy.md b/doc/dnsseed-policy.md index deafd0bf7..a423d0220 100644 --- a/doc/dnsseed-policy.md +++ b/doc/dnsseed-policy.md @@ -1,14 +1,12 @@ -*** Warning: This document has not been updated for Zcash and may be inaccurate. *** - Expectations for DNS Seed operators ==================================== -Bitcoin Core attempts to minimize the level of trust in DNS seeds, +Zcash attempts to minimize the level of trust in DNS seeds, but DNS seeds still pose a small amount of risk for the network. As such, DNS seeds must be run by entities which have some minimum -level of trust within the Bitcoin community. +level of trust within the Zcash community. -Other implementations of Bitcoin software may also use the same +Other implementations of Zcash software may also use the same seeds and may be more exposed. In light of this exposure, this document establishes some basic expectations for operating dnsseeds. @@ -18,7 +16,7 @@ and not sell or transfer control of the DNS seed. Any hosting services contracted by the operator are equally expected to uphold these expectations. 1. The DNS seed results must consist exclusively of fairly selected and -functioning Bitcoin nodes from the public network to the best of the +functioning Zcash nodes from the public network to the best of the operator's understanding and capability. 2. For the avoidance of doubt, the results may be randomized but must not @@ -28,7 +26,7 @@ urgent technical necessity and disclosed. 3. The results may not be served with a DNS TTL of less than one minute. 4. Any logging of DNS queries should be only that which is necessary -for the operation of the service or urgent health of the Bitcoin +for the operation of the service or urgent health of the Zcash network and must not be retained longer than necessary nor disclosed to any third party. @@ -44,13 +42,11 @@ details of their operating practices. related to the DNS seed operation. If these expectations cannot be satisfied the operator should -discontinue providing services and contact the active Bitcoin -Core development team as well as posting on -[bitcoin-dev](https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev). +discontinue providing services and contact the active Zcash development team as well as creating an issue in the [Zcash repository](https://github.com/Zcash/zcash). Behavior outside of these expectations may be reasonable in some situations but should be discussed in public in advance. See also ---------- -- [bitcoin-seeder](https://github.com/sipa/bitcoin-seeder) is a reference implementation of a DNS seed. +- [zcash-seeder](https://github.com/zcash/zcash-seeder) is a reference implementation of a DNS seed. From 0fa4dcc01a84f8cca2f18970c72818e3b2c0bec0 Mon Sep 17 00:00:00 2001 From: Jay Graber Date: Thu, 13 Oct 2016 16:22:20 -0700 Subject: [PATCH 005/165] Developer notes still relevant --- doc/developer-notes.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/doc/developer-notes.md b/doc/developer-notes.md index 27e011f76..9cac27467 100644 --- a/doc/developer-notes.md +++ b/doc/developer-notes.md @@ -1,5 +1,3 @@ -*** Warning: This document has not been updated for Zcash and may be inaccurate. *** - Coding ==================== @@ -112,7 +110,7 @@ to see it. **testnet and regtest modes** -Run with the -testnet option to run with "play bitcoins" on the test network, if you +Run with the -testnet option to run with "play zcash" on the test network, if you are testing multi-machine code that needs to operate across the internet. If you are testing something that can run on one machine, run with the -regtest option. @@ -121,7 +119,7 @@ that run in -regtest mode. **DEBUG_LOCKORDER** -Bitcoin Core is a multithreaded application, and deadlocks or other multithreading bugs +Zcash is a multithreaded application, and deadlocks or other multithreading bugs can be very difficult to track down. Compiling with -DDEBUG_LOCKORDER (configure CXXFLAGS="-DDEBUG_LOCKORDER -g") inserts run-time checks to keep track of which locks are held, and adds warnings to the debug.log file if inconsistencies are detected. @@ -170,7 +168,7 @@ Threads - ThreadRPCServer : Remote procedure call handler, listens on port 8232 for connections and services them. -- BitcoinMiner : Generates bitcoins (if wallet is enabled). +- ZcashMiner : Generates zcash (if wallet is enabled). - Shutdown : Does an orderly shutdown of everything. From f7a624299de45a6bcad042ab5f458ffc5e2fa297 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 17 Oct 2016 10:59:07 -0700 Subject: [PATCH 006/165] Update release version number for 1.0.0-rc1 --- configure.ac | 2 +- doc/README.md | 2 +- src/clientversion.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index b1ec277ac..99365afd3 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 1) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 0) -define(_CLIENT_VERSION_BUILD, 1) +define(_CLIENT_VERSION_BUILD, 25) define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50))) define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1))) define(_CLIENT_VERSION_IS_RELEASE, false) diff --git a/doc/README.md b/doc/README.md index 004348832..81f061fd2 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,4 +1,4 @@ -Zcash Core 1.0.0-beta2 +Zcash Core 1.0.0-rc1 ==================== [Zcash](https://z.cash/) is the Zcash client. It downloads and stores the entire history of Zcash transactions; depending on the speed of your computer and network connection, the synchronization process could take a day or more once the blockchain has reached a significant size. diff --git a/src/clientversion.h b/src/clientversion.h index 30059987e..4fddbe192 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -17,7 +17,7 @@ #define CLIENT_VERSION_MAJOR 1 #define CLIENT_VERSION_MINOR 0 #define CLIENT_VERSION_REVISION 0 -#define CLIENT_VERSION_BUILD 1 +#define CLIENT_VERSION_BUILD 25 //! Set to true for release, false for prerelease or test build #define CLIENT_VERSION_IS_RELEASE false From cf8fe19c542231ec0403667a1ae3415aae9f8ebc Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 17 Oct 2016 10:59:51 -0700 Subject: [PATCH 007/165] Update release notes for 1.0.0-rc1 --- doc/release-notes/release-notes-1.0.0-rc1.md | 121 +++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 doc/release-notes/release-notes-1.0.0-rc1.md diff --git a/doc/release-notes/release-notes-1.0.0-rc1.md b/doc/release-notes/release-notes-1.0.0-rc1.md new file mode 100644 index 000000000..4d9763ec7 --- /dev/null +++ b/doc/release-notes/release-notes-1.0.0-rc1.md @@ -0,0 +1,121 @@ +4ZEC (1): + Correct line swap + +Cory Fields (7): + release: add _IO_stdin_used to ignored exports + release: add check-symbols and check-security make targets + release: always link librt for glibc back-compat builds + release: add security/symbol checks to gitian + depends: allow for CONFIG_SITE to be used rather than stealing prefix + gitian: use CONFIG_SITE rather than hijacking the prefix + gitian: create debug packages for linux/windows + +Daira Hopwood (6): + Fix RPC tests to not rely on accounts. + Cosmetics in RPC tests. + Fix blank lines in DEBIAN/copyright license texts. + Move the increment of nWitnessCacheSize to make the later assertions correct. + Add another assertion to narrow down where the bug occurs. + Add another assertion about the witness cache. + +Jack Grigg (25): + Update release process to sign release tags + WriteWitnessCache: Catch errors and abort transaction + Throw an RPC error for all accounts except the default + Update tests for account deprecation + Deprecated -> Unsupported in RPC error + Correct docstring + Add unit tests for WriteWitnessCache + Document CWalletTx::FindMyNotes + Refactor test to clarify expectations + Add unit test that fails when calling FindMyNotes on a locked wallet + Add RPC test showing correct handling of JS txns from blockchain + Break the RPC test by encrypting the mirroring wallet + Delay caching of nullifiers when wallet is locked + Update comments + Only ignore runtime errors caused by failed note decryption + Remaining changes from bitcoin/bitcoin#6854 + [gitian] Don't call "make check-symbols" + Fix Makefiles so "make dist" will run + Render full version correctly in configure.ac + Update libsnark to include determinism fix + Address review comments + Add more asserts to track down the bug + Increment witnesses for new transactions on rescan + Add clear error message for upgrading users + Set CBlockIndex.hashAnchor correctly in ConnectBlock + +Jay Graber (17): + Document wallet reindexing for z_importkey description in payment-api.md + Rm beta 1 release note about encrypted wallets + Note that Coinbase maturity interval does not protect JoinSplits + Refer to Zcash wiki in INSTALL + Rm bitcoin logo + Rm build-unix.md, to keep single copy of build instructions for Zcash on github wiki + Rm Bitcoin-specific documentation + Add note that document is not updated for Zcash to translation policy + Rm doc for disabled REST interface + Change alpha to beta testnet, add zcash hidden service + Improve documentation on connecting to zcash hidden server + Improve documentation on connecting to zcash hidden server + Update tor.md + Distinguish between connecting to 1 vs multiple tor nodes + Revert "Rm Bitcoin-specific documentation" + Mv btc release notes to doc/bitcoin-release-notes + Reword joinsplit anchor paragraph + +Kevin Gallagher (24): + Set wget retry options for fetching parameters + Increases timeout to 30s, wait before retry to 3s + Initial packaging for Debian + Moves zcash-fetch-params to /usr/bin + Adds newline between source and package definition + Adds copyright file back to Debian package + Updates Linux gitian descriptor file for Zcash + Updates trusty -> jessie in Gitian Linux descriptor + Adds distro: debian to gitian-linux.yml + Updates Gitian descriptor for Zcash + Removes Windows and OSX packaging from EXTRA_DIST + Moves V=1 and NO_QT=1 to MAKEOPTS + Include contrib/devtools/split-debug.sh from upstream + Adds faketime to Gitian build dependencies + Inlude crypto/equihash.tcc in list of sources for dist + Adds zcash/Zcash.h to LIBZCASH sources + Adds zcash/Proof.hpp to LIBZCASH_H + Add alertkeys.h to libbitcoin_server_a_SOURCES + Adds files in src/zcash/circuit to libzcash_a_SOURCES + Adds zcbenchmarks.h to libbitcoin_wallet_a_SOURCES + Adds json_test_vectors.h to zcash_gtest_SOURCES + Adds additional licenses to Debian copyright file + Updates Zcash Core developers -> Zcash developers + Adds . to blank lines in Google license + +MarcoFalke (3): + [gitian] Set reference date to something more recent + [gitian] Default reference_datetime to commit author date + [gitian] hardcode datetime for depends + +Sean Bowe (1): + Make 100KB transaction size limit a consensus rule, rather than a standard rule. + +Simon (11): + Add vjoinsplit to JSON output of RPC call gettransaction + Fixes #1478 by ensuring wallet tests have the -datadir environment set appropriately. + Fixes #1491 by updating help message for rpc call z_importkey + Fix incorrect check of number of parameters for z_getnewaddress. + Add tests to verify that all z_* rpc calls return an error if there are too many input parameters. + Rename client identifier from Satoshi to MagicBean (closes #1481) + Use -debug=zrpc for z_* rpc calls (#1504) + Document CWallet::GetFilteredNotes and fix return type which should be void. + Fix test so that the encrypted wallet is output to the test_bitcoin -datadir folder. + Reorder gtests in zcash-gtest. + Return improved error message when trying to spend Coinbase coins (#1373). + +Wladimir J. van der Laan (6): + devtools: add libraries for bitcoin-qt to symbol check + gitian: use trusty for building + gitian: make windows build deterministic + gitian: Need `ca-certificates` and `python` for LXC builds + build: Remove unnecessary executables from gitian release + gitian: Add --disable-bench to config flags for windows + From 1218603f7357c0649545fbf0ea59e47508d4298f Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 17 Oct 2016 11:47:51 -0700 Subject: [PATCH 008/165] Update Debian changelog. --- contrib/DEBIAN/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/DEBIAN/changelog b/contrib/DEBIAN/changelog index b4f30bd47..58ad61481 100644 --- a/contrib/DEBIAN/changelog +++ b/contrib/DEBIAN/changelog @@ -1,5 +1,5 @@ -zcash (1.0.0-rc1) UNRELEASED; urgency=medium +zcash (1.0.0-rc1) jessie; urgency=medium * Initial packaging for Debian. - -- Zcash Company Thu, 13 Oct 2016 20:12:17 -0700 + -- Zcash Company Mon, 17 Oct 2016 11:47:02 -0700 From 0382417fee52bd0b66eceff61180caf05d51367b Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 18 Oct 2016 00:20:47 -0500 Subject: [PATCH 009/165] Implement MappedShuffle for tracking the permutation of an array --- src/Makefile.gtest.include | 1 + src/gtest/test_random.cpp | 34 ++++++++++++++++++++++++++++++++++ src/random.h | 24 ++++++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 src/gtest/test_random.cpp diff --git a/src/Makefile.gtest.include b/src/Makefile.gtest.include index d68c9a98a..d247e3e96 100644 --- a/src/Makefile.gtest.include +++ b/src/Makefile.gtest.include @@ -17,6 +17,7 @@ zcash_gtest_SOURCES = \ gtest/test_noteencryption.cpp \ gtest/test_merkletree.cpp \ gtest/test_pow.cpp \ + gtest/test_random.cpp \ gtest/test_rpc.cpp \ gtest/test_circuit.cpp \ gtest/test_txid.cpp \ diff --git a/src/gtest/test_random.cpp b/src/gtest/test_random.cpp new file mode 100644 index 000000000..e4a2f5c41 --- /dev/null +++ b/src/gtest/test_random.cpp @@ -0,0 +1,34 @@ +#include + +#include "random.h" + +int GenZero(int n) +{ + return 0; +} + +int GenMax(int n) +{ + return n-1; +} + +TEST(Random, MappedShuffle) { + std::vector a {8, 4, 6, 3, 5}; + std::vector m {0, 1, 2, 3, 4}; + + auto a1 = a; + auto m1 = m; + MappedShuffle(a1.begin(), m1.begin(), a1.size(), GenZero); + std::vector ea1 {4, 6, 3, 5, 8}; + std::vector em1 {1, 2, 3, 4, 0}; + EXPECT_EQ(ea1, a1); + EXPECT_EQ(em1, m1); + + auto a2 = a; + auto m2 = m; + MappedShuffle(a2.begin(), m2.begin(), a2.size(), GenMax); + std::vector ea2 {8, 4, 6, 3, 5}; + std::vector em2 {0, 1, 2, 3, 4}; + EXPECT_EQ(ea2, a2); + EXPECT_EQ(em2, m2); +} diff --git a/src/random.h b/src/random.h index 1a2d3e8ee..11be2ee37 100644 --- a/src/random.h +++ b/src/random.h @@ -8,6 +8,7 @@ #include "uint256.h" +#include #include /** @@ -24,6 +25,29 @@ uint64_t GetRand(uint64_t nMax); int GetRandInt(int nMax); uint256 GetRandHash(); +/** + * Rearranges the elements in the range [first,first+len) randomly, assuming + * that gen is a uniform random number generator. Follows the same algorithm as + * std::shuffle in C++11 (a Durstenfeld shuffle). + * + * The elements in the range [mapFirst,mapFirst+len) are rearranged according to + * the same permutation, enabling the permutation to be tracked by the caller. + * + * gen takes an integer n and produces a uniform random output in [0,n). + */ +template +void MappedShuffle(RandomAccessIterator first, + MapRandomAccessIterator mapFirst, + size_t len, + std::function gen) +{ + for (size_t i = len-1; i > 0; --i) { + auto r = gen(i+1); + std::swap(first[i], first[r]); + std::swap(mapFirst[i], mapFirst[r]); + } +} + /** * Seed insecure_rand using the random pool. * @param Deterministic Use a deterministic seed From c87562898d35e94c367f720a139aa9d916f4463a Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 18 Oct 2016 15:24:05 +0100 Subject: [PATCH 010/165] Add link to protocol specification. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e4688b753..a3d416380 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ What is Zcash? Zcash is an implementation of the "Zerocash" protocol. Based on Bitcoin's code, it intends to offer a far higher standard of privacy and anonymity through a sophisticiated zero-knowledge -proving scheme which preserves confidentiality of transaction metadata. +proving scheme which preserves confidentiality of transaction metadata. Technical details are +available in our [Protocol Specification](https://github.com/zcash/zips/raw/master/protocol/protocol.pdf). **Zcash is unfinished and highly experimental.** Use at your own risk. From 7f0aa74666acf962bc37dca21339bb438a2195b1 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 18 Oct 2016 00:22:58 -0500 Subject: [PATCH 011/165] Implement static method for creating a randomized JSDescription --- src/primitives/transaction.cpp | 24 ++++++++++++++++++++++++ src/primitives/transaction.h | 13 +++++++++++++ src/test/transaction_tests.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/src/primitives/transaction.cpp b/src/primitives/transaction.cpp index 1cedd6f27..704b10a5c 100644 --- a/src/primitives/transaction.cpp +++ b/src/primitives/transaction.cpp @@ -6,6 +6,7 @@ #include "primitives/transaction.h" #include "hash.h" +#include "random.h" #include "tinyformat.h" #include "utilstrencodings.h" @@ -41,6 +42,29 @@ JSDescription::JSDescription(ZCJoinSplit& params, ); } +JSDescription JSDescription::Randomized( + ZCJoinSplit& params, + const uint256& pubKeyHash, + const uint256& anchor, + boost::array& inputs, + boost::array& outputs, + boost::array& inputMap, + boost::array& outputMap, + CAmount vpub_old, + CAmount vpub_new, + bool computeProof) +{ + // Randomize the order of the inputs and outputs + inputMap = {0, 1}; + outputMap = {0, 1}; + MappedShuffle(inputs.begin(), inputMap.begin(), ZC_NUM_JS_INPUTS, GetRandInt); + MappedShuffle(outputs.begin(), outputMap.begin(), ZC_NUM_JS_OUTPUTS, GetRandInt); + + return JSDescription( + params, pubKeyHash, anchor, inputs, outputs, + vpub_old, vpub_new, computeProof); +} + bool JSDescription::Verify( ZCJoinSplit& params, const uint256& pubKeyHash diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 2e83773c4..b665033d8 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -78,6 +78,19 @@ public: bool computeProof = true // Set to false in some tests ); + static JSDescription Randomized( + ZCJoinSplit& params, + const uint256& pubKeyHash, + const uint256& rt, + boost::array& inputs, + boost::array& outputs, + boost::array& inputMap, + boost::array& outputMap, + CAmount vpub_old, + CAmount vpub_new, + bool computeProof = true // Set to false in some tests + ); + // Verifies that the JoinSplit proof is correct. bool Verify(ZCJoinSplit& params, const uint256& pubKeyHash) const; diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index c2b0a7017..e7a932a4f 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -368,6 +368,32 @@ BOOST_AUTO_TEST_CASE(test_basic_joinsplit_verification) BOOST_CHECK(!test.Verify(*p, pubKeyHash)); } + { + boost::array inputMap; + boost::array outputMap; + auto jsdesc = JSDescription::Randomized( + *p, pubKeyHash, rt, + inputs, outputs, + inputMap, outputMap, + 0, 0); + BOOST_CHECK(jsdesc.Verify(*p, pubKeyHash)); + + std::set inputSet; + for (size_t i = 0; i < ZC_NUM_JS_INPUTS; i++) { + inputSet.insert(inputMap[i]); + } + std::set expectedInputSet {0, 1}; + BOOST_CHECK(expectedInputSet == inputSet); + + std::set outputSet; + for (size_t i = 0; i < ZC_NUM_JS_OUTPUTS; i++) { + outputSet.insert(outputMap[i]); + } + std::set expectedOutputSet {0, 1}; + BOOST_CHECK(expectedOutputSet == outputSet); + } + + delete p; } From 2eeb6bebdea684903233b23e9ae8b4794e2b3e0a Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 18 Oct 2016 10:41:30 -0500 Subject: [PATCH 012/165] Randomize JoinSplits in z_sendmany --- src/wallet/asyncrpcoperation_sendmany.cpp | 54 ++++++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index e4dfef5a0..ded24e66b 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -29,6 +29,22 @@ using namespace libzcash; +int find_output(Object obj, int n) { + Value outputMapValue = find_value(obj, "outputmap"); + if (outputMapValue.type() != array_type) { + throw JSONRPCError(RPC_WALLET_ERROR, "Missing outputmap for JoinSplit operation"); + } + + Array outputMap = outputMapValue.get_array(); + for (size_t i = 0; i < outputMap.size(); i++) { + if (outputMap[i] == n) { + return i; + } + } + + return -1; +} + AsyncRPCOperation_sendmany::AsyncRPCOperation_sendmany( std::string fromAddress, std::vector tOutputs, @@ -372,6 +388,7 @@ bool AsyncRPCOperation_sendmany::main_impl() { */ Object obj; CAmount jsChange = 0; // this is updated after each joinsplit + int changeOutputIndex = -1; // this is updated after each joinsplit if jsChange > 0 bool minersFeeProcessed = false; if (t_outputs_total > 0) { @@ -429,6 +446,10 @@ bool AsyncRPCOperation_sendmany::main_impl() { } obj = perform_joinsplit(info, outPoints); + + if (jsChange > 0) { + changeOutputIndex = find_output(obj, 1); + } } } @@ -442,9 +463,6 @@ bool AsyncRPCOperation_sendmany::main_impl() { // Keep track of treestate within this transaction boost::unordered_map intermediates; std::vector previousCommitments; - - // NOTE: Randomization of input and output order could break this in future - const int changeOutputIndex = 1; while (zOutputsDeque.size() > 0) { AsyncJoinSplitInfo info; @@ -645,6 +663,10 @@ bool AsyncRPCOperation_sendmany::main_impl() { } obj = perform_joinsplit(info, witnesses, jsAnchor); + + if (jsChange > 0) { + changeOutputIndex = find_output(obj, 1); + } } } @@ -845,11 +867,20 @@ Object AsyncRPCOperation_sendmany::perform_joinsplit( ); // Generate the proof, this can take over a minute. - JSDescription jsdesc(*pzcashParams, + boost::array inputs + {info.vjsin[0], info.vjsin[1]}; + boost::array outputs + {info.vjsout[0], info.vjsout[1]}; + boost::array inputMap; + boost::array outputMap; + JSDescription jsdesc = JSDescription::Randomized( + *pzcashParams, joinSplitPubKey_, anchor, - {info.vjsin[0], info.vjsin[1]}, - {info.vjsout[0], info.vjsout[1]}, + inputs, + outputs, + inputMap, + outputMap, info.vpub_old, info.vpub_new, !this->testmode); @@ -910,10 +941,21 @@ Object AsyncRPCOperation_sendmany::perform_joinsplit( encryptedNote2 = HexStr(ss2.begin(), ss2.end()); } + Array arrInputMap; + Array arrOutputMap; + for (size_t i = 0; i < ZC_NUM_JS_INPUTS; i++) { + arrInputMap.push_back(inputMap[i]); + } + for (size_t i = 0; i < ZC_NUM_JS_OUTPUTS; i++) { + arrOutputMap.push_back(outputMap[i]); + } + Object obj; obj.push_back(Pair("encryptednote1", encryptedNote1)); obj.push_back(Pair("encryptednote2", encryptedNote2)); obj.push_back(Pair("rawtxn", HexStr(ss.begin(), ss.end()))); + obj.push_back(Pair("inputmap", arrInputMap)); + obj.push_back(Pair("outputmap", arrOutputMap)); return obj; } From 3774c944f849be5c5b828c27c1c3375520ea7aa4 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 18 Oct 2016 12:44:56 -0500 Subject: [PATCH 013/165] Refactor test code to better test JSDescription::Randomized() --- src/Makefile.gtest.include | 2 + src/gtest/test_random.cpp | 11 +---- src/gtest/test_transaction.cpp | 85 ++++++++++++++++++++++++++++++++ src/gtest/utils.cpp | 13 +++++ src/primitives/transaction.cpp | 8 +-- src/primitives/transaction.h | 4 +- src/test/transaction_tests.cpp | 28 ----------- src/wallet/gtest/test_wallet.cpp | 2 +- 8 files changed, 110 insertions(+), 43 deletions(-) create mode 100644 src/gtest/test_transaction.cpp create mode 100644 src/gtest/utils.cpp diff --git a/src/Makefile.gtest.include b/src/Makefile.gtest.include index d247e3e96..d635c5b94 100644 --- a/src/Makefile.gtest.include +++ b/src/Makefile.gtest.include @@ -4,6 +4,7 @@ bin_PROGRAMS += zcash-gtest # tool for generating our public parameters zcash_gtest_SOURCES = \ gtest/main.cpp \ + gtest/utils.cpp \ gtest/test_checktransaction.cpp \ gtest/json_test_vectors.cpp \ gtest/json_test_vectors.h \ @@ -19,6 +20,7 @@ zcash_gtest_SOURCES = \ gtest/test_pow.cpp \ gtest/test_random.cpp \ gtest/test_rpc.cpp \ + gtest/test_transaction.cpp \ gtest/test_circuit.cpp \ gtest/test_txid.cpp \ gtest/test_libzcash_utils.cpp \ diff --git a/src/gtest/test_random.cpp b/src/gtest/test_random.cpp index e4a2f5c41..61f81c331 100644 --- a/src/gtest/test_random.cpp +++ b/src/gtest/test_random.cpp @@ -2,15 +2,8 @@ #include "random.h" -int GenZero(int n) -{ - return 0; -} - -int GenMax(int n) -{ - return n-1; -} +extern int GenZero(int n); +extern int GenMax(int n); TEST(Random, MappedShuffle) { std::vector a {8, 4, 6, 3, 5}; diff --git a/src/gtest/test_transaction.cpp b/src/gtest/test_transaction.cpp new file mode 100644 index 000000000..a339f7652 --- /dev/null +++ b/src/gtest/test_transaction.cpp @@ -0,0 +1,85 @@ +#include + +#include "primitives/transaction.h" +#include "zcash/Note.hpp" +#include "zcash/Address.hpp" + +extern ZCJoinSplit* params; +extern int GenZero(int n); +extern int GenMax(int n); + +TEST(Transaction, JSDescriptionRandomized) { + // construct a merkle tree + ZCIncrementalMerkleTree merkleTree; + + libzcash::SpendingKey k = libzcash::SpendingKey::random(); + libzcash::PaymentAddress addr = k.address(); + + libzcash::Note note(addr.a_pk, 100, uint256(), uint256()); + + // commitment from coin + uint256 commitment = note.cm(); + + // insert commitment into the merkle tree + merkleTree.append(commitment); + + // compute the merkle root we will be working with + uint256 rt = merkleTree.root(); + + auto witness = merkleTree.witness(); + + // create JSDescription + uint256 pubKeyHash; + boost::array inputs = { + libzcash::JSInput(witness, note, k), + libzcash::JSInput() // dummy input of zero value + }; + boost::array outputs = { + libzcash::JSOutput(addr, 50), + libzcash::JSOutput(addr, 50) + }; + boost::array inputMap; + boost::array outputMap; + + { + auto jsdesc = JSDescription::Randomized( + *params, pubKeyHash, rt, + inputs, outputs, + inputMap, outputMap, + 0, 0, false); + + std::set inputSet(inputMap.begin(), inputMap.end()); + std::set expectedInputSet {0, 1}; + EXPECT_EQ(expectedInputSet, inputSet); + + std::set outputSet(outputMap.begin(), outputMap.end()); + std::set expectedOutputSet {0, 1}; + EXPECT_EQ(expectedOutputSet, outputSet); + } + + { + auto jsdesc = JSDescription::Randomized( + *params, pubKeyHash, rt, + inputs, outputs, + inputMap, outputMap, + 0, 0, false, GenZero); + + boost::array expectedInputMap {1, 0}; + boost::array expectedOutputMap {1, 0}; + EXPECT_EQ(expectedInputMap, inputMap); + EXPECT_EQ(expectedOutputMap, outputMap); + } + + { + auto jsdesc = JSDescription::Randomized( + *params, pubKeyHash, rt, + inputs, outputs, + inputMap, outputMap, + 0, 0, false, GenMax); + + boost::array expectedInputMap {0, 1}; + boost::array expectedOutputMap {0, 1}; + EXPECT_EQ(expectedInputMap, inputMap); + EXPECT_EQ(expectedOutputMap, outputMap); + } +} diff --git a/src/gtest/utils.cpp b/src/gtest/utils.cpp new file mode 100644 index 000000000..cf025162c --- /dev/null +++ b/src/gtest/utils.cpp @@ -0,0 +1,13 @@ +#include "zcash/JoinSplit.hpp" + +ZCJoinSplit* params = ZCJoinSplit::Unopened(); + +int GenZero(int n) +{ + return 0; +} + +int GenMax(int n) +{ + return n-1; +} diff --git a/src/primitives/transaction.cpp b/src/primitives/transaction.cpp index 704b10a5c..5fc2a39ab 100644 --- a/src/primitives/transaction.cpp +++ b/src/primitives/transaction.cpp @@ -6,7 +6,6 @@ #include "primitives/transaction.h" #include "hash.h" -#include "random.h" #include "tinyformat.h" #include "utilstrencodings.h" @@ -52,13 +51,14 @@ JSDescription JSDescription::Randomized( boost::array& outputMap, CAmount vpub_old, CAmount vpub_new, - bool computeProof) + bool computeProof, + std::function gen) { // Randomize the order of the inputs and outputs inputMap = {0, 1}; outputMap = {0, 1}; - MappedShuffle(inputs.begin(), inputMap.begin(), ZC_NUM_JS_INPUTS, GetRandInt); - MappedShuffle(outputs.begin(), outputMap.begin(), ZC_NUM_JS_OUTPUTS, GetRandInt); + MappedShuffle(inputs.begin(), inputMap.begin(), ZC_NUM_JS_INPUTS, gen); + MappedShuffle(outputs.begin(), outputMap.begin(), ZC_NUM_JS_OUTPUTS, gen); return JSDescription( params, pubKeyHash, anchor, inputs, outputs, diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index b665033d8..9b78436c5 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -7,6 +7,7 @@ #define BITCOIN_PRIMITIVES_TRANSACTION_H #include "amount.h" +#include "random.h" #include "script/script.h" #include "serialize.h" #include "uint256.h" @@ -88,7 +89,8 @@ public: boost::array& outputMap, CAmount vpub_old, CAmount vpub_new, - bool computeProof = true // Set to false in some tests + bool computeProof = true, // Set to false in some tests + std::function gen = GetRandInt ); // Verifies that the JoinSplit proof is correct. diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index e7a932a4f..25efbd292 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -367,34 +367,6 @@ BOOST_AUTO_TEST_CASE(test_basic_joinsplit_verification) test.anchor = GetRandHash(); BOOST_CHECK(!test.Verify(*p, pubKeyHash)); } - - { - boost::array inputMap; - boost::array outputMap; - auto jsdesc = JSDescription::Randomized( - *p, pubKeyHash, rt, - inputs, outputs, - inputMap, outputMap, - 0, 0); - BOOST_CHECK(jsdesc.Verify(*p, pubKeyHash)); - - std::set inputSet; - for (size_t i = 0; i < ZC_NUM_JS_INPUTS; i++) { - inputSet.insert(inputMap[i]); - } - std::set expectedInputSet {0, 1}; - BOOST_CHECK(expectedInputSet == inputSet); - - std::set outputSet; - for (size_t i = 0; i < ZC_NUM_JS_OUTPUTS; i++) { - outputSet.insert(outputMap[i]); - } - std::set expectedOutputSet {0, 1}; - BOOST_CHECK(expectedOutputSet == outputSet); - } - - - delete p; } BOOST_AUTO_TEST_CASE(test_simple_joinsplit_invalidity) diff --git a/src/wallet/gtest/test_wallet.cpp b/src/wallet/gtest/test_wallet.cpp index c1bf5d34c..808aff6c4 100644 --- a/src/wallet/gtest/test_wallet.cpp +++ b/src/wallet/gtest/test_wallet.cpp @@ -13,7 +13,7 @@ using ::testing::Return; -ZCJoinSplit* params = ZCJoinSplit::Unopened(); +extern ZCJoinSplit* params; ACTION(ThrowLogicError) { throw std::logic_error("Boom"); From 328d39d29c009a97c763c28f8ce94184dea287b6 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 18 Oct 2016 13:10:20 -0500 Subject: [PATCH 014/165] Remove stale comment --- src/wallet/asyncrpcoperation_sendmany.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index ded24e66b..4742e2235 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -501,7 +501,6 @@ bool AsyncRPCOperation_sendmany::main_impl() { throw JSONRPCError(RPC_WALLET_ERROR, "Could not find previous JoinSplit anchor"); } - // NOTE: We assume the last commitment, output 1, is the change we want for (const uint256& commitment : prevJoinSplit.commitments) { tree.append(commitment); previousCommitments.push_back(commitment); From 71cc1b58a1abab12dae1966d27b04fcb78fcd412 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 18 Oct 2016 18:10:42 +0100 Subject: [PATCH 015/165] Add tests for IsStandardTx applied to v2 transactions. Signed-off-by: Daira Hopwood --- src/test/transaction_tests.cpp | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index c2b0a7017..438e33178 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -592,4 +592,55 @@ BOOST_AUTO_TEST_CASE(test_IsStandard) BOOST_CHECK(!IsStandardTx(t, reason)); } +BOOST_AUTO_TEST_CASE(test_IsStandardV2) +{ + LOCK(cs_main); + CBasicKeyStore keystore; + CCoinsView coinsDummy; + CCoinsViewCache coins(&coinsDummy); + std::vector dummyTransactions = SetupDummyInputs(keystore, coins); + + CMutableTransaction t; + t.vin.resize(1); + t.vin[0].prevout.hash = dummyTransactions[0].GetHash(); + t.vin[0].prevout.n = 1; + t.vin[0].scriptSig << std::vector(65, 0); + t.vout.resize(1); + t.vout[0].nValue = 90*CENT; + CKey key; + key.MakeNewKey(true); + t.vout[0].scriptPubKey = GetScriptForDestination(key.GetPubKey().GetID()); + + string reason; + // A v2 transaction with no JoinSplits is still standard. + t.nVersion = 2; + BOOST_CHECK(IsStandardTx(t, reason)); + + // ... and with one JoinSplit. + t.vjoinsplit.push_back(JSDescription()); + BOOST_CHECK(IsStandardTx(t, reason)); + + // ... and when that JoinSplit takes from a transparent input. + JSDescription *jsdesc = &t.vjoinsplit[0]; + jsdesc->vpub_old = 10*CENT; + t.vout[0].nValue -= 10*CENT; + BOOST_CHECK(IsStandardTx(t, reason)); + + // A v2 transaction with JoinSplits but no transparent inputs is standard. + jsdesc->vpub_old = 0; + jsdesc->vpub_new = 100*CENT; + t.vout[0].nValue = 90*CENT; + t.vin.resize(0); + BOOST_CHECK(IsStandardTx(t, reason)); + + // v2 transactions can still be non-standard for the same reasons as v1. + t.vout[0].nValue = 501; // dust + BOOST_CHECK(!IsStandardTx(t, reason)); + + // v3 is not standard. + t.nVersion = 3; + t.vout[0].nValue = 90*CENT; + BOOST_CHECK(!IsStandardTx(t, reason)); +} + BOOST_AUTO_TEST_SUITE_END() From e923e3ae0f6e1591d28a991e51c2b1ecae07a215 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 18 Oct 2016 18:14:18 +0100 Subject: [PATCH 016/165] Make v2 transactions standard. This also corrects a rule about admitting large orphan transactions into the mempool, to account for v2-specific fields. Signed-off-by: Daira Hopwood --- src/bitcoin-tx.cpp | 2 +- src/main.cpp | 4 ++-- src/primitives/transaction.cpp | 4 ++-- src/primitives/transaction.h | 4 +++- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp index 319be2991..29fabafd8 100644 --- a/src/bitcoin-tx.cpp +++ b/src/bitcoin-tx.cpp @@ -157,7 +157,7 @@ static void RegisterLoad(const string& strInput) static void MutateTxVersion(CMutableTransaction& tx, const string& cmdVal) { int64_t newVersion = atoi64(cmdVal); - if (newVersion < 1 || newVersion > CTransaction::CURRENT_VERSION) + if (newVersion < CTransaction::MIN_CURRENT_VERSION || newVersion > CTransaction::MAX_CURRENT_VERSION) throw runtime_error("Invalid TX version requested"); tx.nVersion = (int) newVersion; diff --git a/src/main.cpp b/src/main.cpp index 2b09a50d6..7a1336fb7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -564,7 +564,7 @@ bool AddOrphanTx(const CTransaction& tx, NodeId peer) // have been mined or received. // 10,000 orphans, each of which is at most 5,000 bytes big is // at most 500 megabytes of orphans: - unsigned int sz = tx.GetSerializeSize(SER_NETWORK, CTransaction::CURRENT_VERSION); + unsigned int sz = tx.GetSerializeSize(SER_NETWORK, tx.nVersion); if (sz > 5000) { LogPrint("mempool", "ignoring large orphan tx (size: %u, hash: %s)\n", sz, hash.ToString()); @@ -639,7 +639,7 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) bool IsStandardTx(const CTransaction& tx, string& reason) { - if (tx.nVersion > CTransaction::CURRENT_VERSION || tx.nVersion < 1) { + if (tx.nVersion > CTransaction::MAX_CURRENT_VERSION || tx.nVersion < CTransaction::MIN_CURRENT_VERSION) { reason = "version"; return false; } diff --git a/src/primitives/transaction.cpp b/src/primitives/transaction.cpp index 1cedd6f27..e18024327 100644 --- a/src/primitives/transaction.cpp +++ b/src/primitives/transaction.cpp @@ -113,7 +113,7 @@ std::string CTxOut::ToString() const return strprintf("CTxOut(nValue=%d.%08d, scriptPubKey=%s)", nValue / COIN, nValue % COIN, scriptPubKey.ToString().substr(0,30)); } -CMutableTransaction::CMutableTransaction() : nVersion(CTransaction::CURRENT_VERSION), nLockTime(0) {} +CMutableTransaction::CMutableTransaction() : nVersion(CTransaction::MIN_CURRENT_VERSION), nLockTime(0) {} CMutableTransaction::CMutableTransaction(const CTransaction& tx) : nVersion(tx.nVersion), vin(tx.vin), vout(tx.vout), nLockTime(tx.nLockTime), vjoinsplit(tx.vjoinsplit), joinSplitPubKey(tx.joinSplitPubKey), joinSplitSig(tx.joinSplitSig) { @@ -130,7 +130,7 @@ void CTransaction::UpdateHash() const *const_cast(&hash) = SerializeHash(*this); } -CTransaction::CTransaction() : nVersion(CTransaction::CURRENT_VERSION), vin(), vout(), nLockTime(0), vjoinsplit(), joinSplitPubKey(), joinSplitSig() { } +CTransaction::CTransaction() : nVersion(CTransaction::MIN_CURRENT_VERSION), vin(), vout(), nLockTime(0), vjoinsplit(), joinSplitPubKey(), joinSplitSig() { } CTransaction::CTransaction(const CMutableTransaction &tx) : nVersion(tx.nVersion), vin(tx.vin), vout(tx.vout), nLockTime(tx.nLockTime), vjoinsplit(tx.vjoinsplit), joinSplitPubKey(tx.joinSplitPubKey), joinSplitSig(tx.joinSplitSig) diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 2e83773c4..f43a75a88 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -294,7 +294,9 @@ private: public: typedef boost::array joinsplit_sig_t; - static const int32_t CURRENT_VERSION=1; + // Transactions that include a list of JoinSplits are version 2. + static const int32_t MIN_CURRENT_VERSION = 1; + static const int32_t MAX_CURRENT_VERSION = 2; // The local variables are made const to prevent unintended modification // without updating the cached hash value. However, CTransaction is not From 08d6b02d5e9f3ccf34fbdcbc133cbc9cf1989fa9 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 18 Oct 2016 15:52:45 -0500 Subject: [PATCH 017/165] Rename libbitcoinconsensus to libzcashconsensus Closes #1563 --- .gitignore | 2 +- Makefile.am | 2 +- configure.ac | 2 +- ...consensus.pc.in => libzcashconsensus.pc.in | 6 ++-- src/Makefile.am | 22 ++++++------ src/Makefile.gtest.include | 2 +- src/Makefile.test.include | 2 +- ...itcoinconsensus.cpp => zcashconsensus.cpp} | 20 +++++------ .../{bitcoinconsensus.h => zcashconsensus.h} | 36 +++++++++---------- src/test/script_tests.cpp | 4 +-- 10 files changed, 49 insertions(+), 49 deletions(-) rename libbitcoinconsensus.pc.in => libzcashconsensus.pc.in (55%) rename src/script/{bitcoinconsensus.cpp => zcashconsensus.cpp} (78%) rename src/script/{bitcoinconsensus.h => zcashconsensus.h} (57%) diff --git a/.gitignore b/.gitignore index b0dac187c..4b798be87 100644 --- a/.gitignore +++ b/.gitignore @@ -121,4 +121,4 @@ qa/pull-tester/test.*/* /doc/doxygen/ -libbitcoinconsensus.pc +libzcashconsensus.pc diff --git a/Makefile.am b/Makefile.am index 09cd9b92e..7cbd5c69b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,7 +6,7 @@ GZIP_ENV="-9n" if BUILD_BITCOIN_LIBS pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libbitcoinconsensus.pc +pkgconfig_DATA = libzcashconsensus.pc endif BITCOIND_BIN=$(top_builddir)/src/zcashd$(EXEEXT) diff --git a/configure.ac b/configure.ac index 99365afd3..e504af39d 100644 --- a/configure.ac +++ b/configure.ac @@ -754,7 +754,7 @@ AC_MSG_CHECKING([whether to build libraries]) AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes]) if test x$build_bitcoin_libs = xyes; then AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built]) - AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in]) + AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in]) fi AC_MSG_RESULT($build_bitcoin_libs) diff --git a/libbitcoinconsensus.pc.in b/libzcashconsensus.pc.in similarity index 55% rename from libbitcoinconsensus.pc.in rename to libzcashconsensus.pc.in index 3ca1696a3..5cb2d05e3 100644 --- a/libbitcoinconsensus.pc.in +++ b/libzcashconsensus.pc.in @@ -3,9 +3,9 @@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ -Name: Bitcoin Core consensus library -Description: Library for the Bitcoin consensus protocol. +Name: Zcash consensus library +Description: Library for the Zcash consensus protocol. Version: @PACKAGE_VERSION@ -Libs: -L${libdir} -lbitcoinconsensus +Libs: -L${libdir} -lzcashconsensus Cflags: -I${includedir} Requires.private: libcrypto diff --git a/src/Makefile.am b/src/Makefile.am index 9f8a18189..19243ae76 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -52,10 +52,10 @@ EXTRA_LIBRARIES += libbitcoin_wallet.a endif if BUILD_BITCOIN_LIBS -lib_LTLIBRARIES = libbitcoinconsensus.la -LIBBITCOIN_CONSENSUS=libbitcoinconsensus.la +lib_LTLIBRARIES = libzcashconsensus.la +LIBZCASH_CONSENSUS=libzcashconsensus.la else -LIBBITCOIN_CONSENSUS= +LIBZCASH_CONSENSUS= endif bin_PROGRAMS = @@ -440,10 +440,10 @@ libzcash_a_LDFLAGS = $(HARDENED_LDFLAGS) libzcash_a_CPPFLAGS += -DMONTGOMERY_OUTPUT -# bitcoinconsensus library # +# zcashconsensus library # if BUILD_BITCOIN_LIBS -include_HEADERS = script/bitcoinconsensus.h -libbitcoinconsensus_la_SOURCES = \ +include_HEADERS = script/zcashconsensus.h +libzcashconsensus_la_SOURCES = \ crypto/equihash.cpp \ crypto/hmac_sha512.cpp \ crypto/ripemd160.cpp \ @@ -455,19 +455,19 @@ libbitcoinconsensus_la_SOURCES = \ hash.cpp \ primitives/transaction.cpp \ pubkey.cpp \ - script/bitcoinconsensus.cpp \ + script/zcashconsensus.cpp \ script/interpreter.cpp \ script/script.cpp \ uint256.cpp \ utilstrencodings.cpp if GLIBC_BACK_COMPAT - libbitcoinconsensus_la_SOURCES += compat/glibc_compat.cpp + libzcashconsensus_la_SOURCES += compat/glibc_compat.cpp endif -libbitcoinconsensus_la_LDFLAGS = -no-undefined $(RELDFLAGS) -libbitcoinconsensus_la_LIBADD = $(CRYPTO_LIBS) -libbitcoinconsensus_la_CPPFLAGS = $(CRYPTO_CFLAGS) -I$(builddir)/obj -DBUILD_BITCOIN_INTERNAL +libzcashconsensus_la_LDFLAGS = -no-undefined $(RELDFLAGS) +libzcashconsensus_la_LIBADD = $(CRYPTO_LIBS) +libzcashconsensus_la_CPPFLAGS = $(CRYPTO_CFLAGS) -I$(builddir)/obj -DBUILD_BITCOIN_INTERNAL endif # diff --git a/src/Makefile.gtest.include b/src/Makefile.gtest.include index d68c9a98a..e6291efe4 100644 --- a/src/Makefile.gtest.include +++ b/src/Makefile.gtest.include @@ -32,7 +32,7 @@ if ENABLE_WALLET zcash_gtest_LDADD += $(LIBBITCOIN_WALLET) endif -zcash_gtest_LDADD += $(LIBBITCOIN_CONSENSUS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBZCASH) $(LIBZCASH_LIBS) +zcash_gtest_LDADD += $(LIBZCASH_CONSENSUS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBZCASH) $(LIBZCASH_LIBS) zcash_gtest_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static diff --git a/src/Makefile.test.include b/src/Makefile.test.include index f8fd7a334..e29642805 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -103,7 +103,7 @@ if ENABLE_WALLET test_test_bitcoin_LDADD += $(LIBBITCOIN_WALLET) endif -test_test_bitcoin_LDADD += $(LIBBITCOIN_CONSENSUS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBZCASH) $(LIBZCASH_LIBS) +test_test_bitcoin_LDADD += $(LIBZCASH_CONSENSUS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBZCASH) $(LIBZCASH_LIBS) test_test_bitcoin_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static nodist_test_test_bitcoin_SOURCES = $(GENERATED_TEST_FILES) diff --git a/src/script/bitcoinconsensus.cpp b/src/script/zcashconsensus.cpp similarity index 78% rename from src/script/bitcoinconsensus.cpp rename to src/script/zcashconsensus.cpp index b0d5faaf7..d66cf21c0 100644 --- a/src/script/bitcoinconsensus.cpp +++ b/src/script/zcashconsensus.cpp @@ -3,7 +3,7 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "bitcoinconsensus.h" +#include "zcashconsensus.h" #include "primitives/transaction.h" #include "script/interpreter.h" @@ -53,7 +53,7 @@ private: size_t m_remaining; }; -inline int set_error(bitcoinconsensus_error* ret, bitcoinconsensus_error serror) +inline int set_error(zcashconsensus_error* ret, zcashconsensus_error serror) { if (ret) *ret = serror; @@ -62,30 +62,30 @@ inline int set_error(bitcoinconsensus_error* ret, bitcoinconsensus_error serror) } // anon namespace -int bitcoinconsensus_verify_script(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen, +int zcashconsensus_verify_script(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen, const unsigned char *txTo , unsigned int txToLen, - unsigned int nIn, unsigned int flags, bitcoinconsensus_error* err) + unsigned int nIn, unsigned int flags, zcashconsensus_error* err) { try { TxInputStream stream(SER_NETWORK, PROTOCOL_VERSION, txTo, txToLen); CTransaction tx; stream >> tx; if (nIn >= tx.vin.size()) - return set_error(err, bitcoinconsensus_ERR_TX_INDEX); + return set_error(err, zcashconsensus_ERR_TX_INDEX); if (tx.GetSerializeSize(SER_NETWORK, PROTOCOL_VERSION) != txToLen) - return set_error(err, bitcoinconsensus_ERR_TX_SIZE_MISMATCH); + return set_error(err, zcashconsensus_ERR_TX_SIZE_MISMATCH); // Regardless of the verification result, the tx did not error. - set_error(err, bitcoinconsensus_ERR_OK); + set_error(err, zcashconsensus_ERR_OK); return VerifyScript(tx.vin[nIn].scriptSig, CScript(scriptPubKey, scriptPubKey + scriptPubKeyLen), flags, TransactionSignatureChecker(&tx, nIn), NULL); } catch (const std::exception&) { - return set_error(err, bitcoinconsensus_ERR_TX_DESERIALIZE); // Error deserializing + return set_error(err, zcashconsensus_ERR_TX_DESERIALIZE); // Error deserializing } } -unsigned int bitcoinconsensus_version() +unsigned int zcashconsensus_version() { // Just use the API version for now - return BITCOINCONSENSUS_API_VER; + return ZCASHCONSENSUS_API_VER; } diff --git a/src/script/bitcoinconsensus.h b/src/script/zcashconsensus.h similarity index 57% rename from src/script/bitcoinconsensus.h rename to src/script/zcashconsensus.h index a48ff1e18..a68921d90 100644 --- a/src/script/bitcoinconsensus.h +++ b/src/script/zcashconsensus.h @@ -3,8 +3,8 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_BITCOINCONSENSUS_H -#define BITCOIN_BITCOINCONSENSUS_H +#ifndef BITCOIN_ZCASHCONSENSUS_H +#define BITCOIN_ZCASHCONSENSUS_H #if defined(BUILD_BITCOIN_INTERNAL) && defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" @@ -19,7 +19,7 @@ #elif defined(HAVE_FUNC_ATTRIBUTE_VISIBILITY) #define EXPORT_SYMBOL __attribute__ ((visibility ("default"))) #endif -#elif defined(MSC_VER) && !defined(STATIC_LIBBITCOINCONSENSUS) +#elif defined(MSC_VER) && !defined(STATIC_LIBZCASHCONSENSUS) #define EXPORT_SYMBOL __declspec(dllimport) #endif @@ -31,34 +31,34 @@ extern "C" { #endif -#define BITCOINCONSENSUS_API_VER 0 +#define ZCASHCONSENSUS_API_VER 0 -typedef enum bitcoinconsensus_error_t +typedef enum zcashconsensus_error_t { - bitcoinconsensus_ERR_OK = 0, - bitcoinconsensus_ERR_TX_INDEX, - bitcoinconsensus_ERR_TX_SIZE_MISMATCH, - bitcoinconsensus_ERR_TX_DESERIALIZE, -} bitcoinconsensus_error; + zcashconsensus_ERR_OK = 0, + zcashconsensus_ERR_TX_INDEX, + zcashconsensus_ERR_TX_SIZE_MISMATCH, + zcashconsensus_ERR_TX_DESERIALIZE, +} zcashconsensus_error; /** Script verification flags */ enum { - bitcoinconsensus_SCRIPT_FLAGS_VERIFY_NONE = 0, - bitcoinconsensus_SCRIPT_FLAGS_VERIFY_P2SH = (1U << 0), // evaluate P2SH (BIP16) subscripts - bitcoinconsensus_SCRIPT_FLAGS_VERIFY_DERSIG = (1U << 2), // enforce strict DER (BIP66) compliance - bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY = (1U << 9), // enable CHECKLOCKTIMEVERIFY (BIP65) + zcashconsensus_SCRIPT_FLAGS_VERIFY_NONE = 0, + zcashconsensus_SCRIPT_FLAGS_VERIFY_P2SH = (1U << 0), // evaluate P2SH (BIP16) subscripts + zcashconsensus_SCRIPT_FLAGS_VERIFY_DERSIG = (1U << 2), // enforce strict DER (BIP66) compliance + zcashconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY = (1U << 9), // enable CHECKLOCKTIMEVERIFY (BIP65) }; /// Returns 1 if the input nIn of the serialized transaction pointed to by /// txTo correctly spends the scriptPubKey pointed to by scriptPubKey under /// the additional constraints specified by flags. /// If not NULL, err will contain an error/success code for the operation -EXPORT_SYMBOL int bitcoinconsensus_verify_script(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen, +EXPORT_SYMBOL int zcashconsensus_verify_script(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen, const unsigned char *txTo , unsigned int txToLen, - unsigned int nIn, unsigned int flags, bitcoinconsensus_error* err); + unsigned int nIn, unsigned int flags, zcashconsensus_error* err); -EXPORT_SYMBOL unsigned int bitcoinconsensus_version(); +EXPORT_SYMBOL unsigned int zcashconsensus_version(); #ifdef __cplusplus } // extern "C" @@ -66,4 +66,4 @@ EXPORT_SYMBOL unsigned int bitcoinconsensus_version(); #undef EXPORT_SYMBOL -#endif // BITCOIN_BITCOINCONSENSUS_H +#endif // BITCOIN_ZCASHCONSENSUS_H diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp index c0614cca4..cb028dfbb 100644 --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -16,7 +16,7 @@ #include "test/test_bitcoin.h" #if defined(HAVE_CONSENSUS_LIB) -#include "script/bitcoinconsensus.h" +#include "script/zcashconsensus.h" #endif #include @@ -99,7 +99,7 @@ void DoTest(const CScript& scriptPubKey, const CScript& scriptSig, int flags, bo #if defined(HAVE_CONSENSUS_LIB) CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); stream << tx2; - BOOST_CHECK_MESSAGE(bitcoinconsensus_verify_script(begin_ptr(scriptPubKey), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), 0, flags, NULL) == expect,message); + BOOST_CHECK_MESSAGE(zcashconsensus_verify_script(begin_ptr(scriptPubKey), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), 0, flags, NULL) == expect,message); #endif } From 66a89c08df820d0c03db180527682eb4ac726344 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 18 Oct 2016 16:39:03 -0500 Subject: [PATCH 018/165] Rename bitcoin-tx to zcash-tx Closes #1565 --- .gitignore | 2 +- configure.ac | 4 ++-- src/Makefile.am | 18 +++++++++--------- src/bitcoin-tx-res.rc | 10 +++++----- src/bitcoin-tx.cpp | 6 +++--- src/test/data/bitcoin-util-test.json | 20 ++++++++++---------- 6 files changed, 30 insertions(+), 30 deletions(-) diff --git a/.gitignore b/.gitignore index 4b798be87..d6b7961d5 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ src/bitcoin src/zcashd src/zcash-cli src/zcash-gtest -src/bitcoin-tx +src/zcash-tx src/test/test_bitcoin src/qt/test/test_bitcoin-qt diff --git a/configure.ac b/configure.ac index e504af39d..aa479792a 100644 --- a/configure.ac +++ b/configure.ac @@ -179,7 +179,7 @@ CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_ AC_ARG_WITH([utils], [AS_HELP_STRING([--with-utils], - [build bitcoin-cli bitcoin-tx (default=yes)])], + [build zcash-cli zcash-tx (default=yes)])], [build_bitcoin_utils=$withval], [build_bitcoin_utils=yes]) @@ -746,7 +746,7 @@ AC_MSG_CHECKING([whether to build bitcoind]) AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes]) AC_MSG_RESULT($build_bitcoind) -AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)]) +AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)]) AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes]) AC_MSG_RESULT($build_bitcoin_utils) diff --git a/src/Makefile.am b/src/Makefile.am index 19243ae76..f9ef1c15a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -66,7 +66,7 @@ if BUILD_BITCOIND endif if BUILD_BITCOIN_UTILS - bin_PROGRAMS += zcash-cli bitcoin-tx + bin_PROGRAMS += zcash-cli zcash-tx endif LIBZCASH_H = \ @@ -393,17 +393,17 @@ zcash_cli_LDADD = \ $(LIBZCASH_LIBS) # -# bitcoin-tx binary # -bitcoin_tx_SOURCES = bitcoin-tx.cpp -bitcoin_tx_CPPFLAGS = $(BITCOIN_INCLUDES) -bitcoin_tx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) +# zcash-tx binary # +zcash_tx_SOURCES = bitcoin-tx.cpp +zcash_tx_CPPFLAGS = $(BITCOIN_INCLUDES) +zcash_tx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) if TARGET_WINDOWS -bitcoin_tx_SOURCES += bitcoin-tx-res.rc +zcash_tx_SOURCES += bitcoin-tx-res.rc endif -# FIXME: Is libzcash needed for bitcoin_tx? -bitcoin_tx_LDADD = \ +# FIXME: Is libzcash needed for zcash_tx? +zcash_tx_LDADD = \ $(LIBBITCOIN_UNIVALUE) \ $(LIBBITCOIN_COMMON) \ $(LIBBITCOIN_UTIL) \ @@ -412,7 +412,7 @@ bitcoin_tx_LDADD = \ $(LIBBITCOIN_CRYPTO) \ $(LIBZCASH_LIBS) -bitcoin_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS) +zcash_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS) # # zcash protocol primitives # diff --git a/src/bitcoin-tx-res.rc b/src/bitcoin-tx-res.rc index 3e49b820b..bc8d57134 100644 --- a/src/bitcoin-tx-res.rc +++ b/src/bitcoin-tx-res.rc @@ -16,14 +16,14 @@ BEGIN BEGIN BLOCK "040904E4" // U.S. English - multilingual (hex) BEGIN - VALUE "CompanyName", "Bitcoin" - VALUE "FileDescription", "bitcoin-tx (CLI Bitcoin transaction editor utility)" + VALUE "CompanyName", "Zcash" + VALUE "FileDescription", "zcash-tx (CLI Zcash transaction editor utility)" VALUE "FileVersion", VER_FILEVERSION_STR - VALUE "InternalName", "bitcoin-tx" + VALUE "InternalName", "zcash-tx" VALUE "LegalCopyright", COPYRIGHT_STR VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php." - VALUE "OriginalFilename", "bitcoin-tx.exe" - VALUE "ProductName", "bitcoin-tx" + VALUE "OriginalFilename", "zcash-tx.exe" + VALUE "ProductName", "zcash-tx" VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp index 319be2991..eea9ff541 100644 --- a/src/bitcoin-tx.cpp +++ b/src/bitcoin-tx.cpp @@ -44,10 +44,10 @@ static bool AppInitRawTx(int argc, char* argv[]) if (argc<2 || mapArgs.count("-?") || mapArgs.count("-h") || mapArgs.count("-help")) { // First part of help message is specific to this utility - std::string strUsage = _("Bitcoin Core bitcoin-tx utility version") + " " + FormatFullVersion() + "\n\n" + + std::string strUsage = _("Zcash zcash-tx utility version") + " " + FormatFullVersion() + "\n\n" + _("Usage:") + "\n" + - " bitcoin-tx [options] [commands] " + _("Update hex-encoded bitcoin transaction") + "\n" + - " bitcoin-tx [options] -create [commands] " + _("Create hex-encoded bitcoin transaction") + "\n" + + " zcash-tx [options] [commands] " + _("Update hex-encoded zcash transaction") + "\n" + + " zcash-tx [options] -create [commands] " + _("Create hex-encoded zcash transaction") + "\n" + "\n"; fprintf(stdout, "%s", strUsage.c_str()); diff --git a/src/test/data/bitcoin-util-test.json b/src/test/data/bitcoin-util-test.json index ddcff21cb..e30c53759 100644 --- a/src/test/data/bitcoin-util-test.json +++ b/src/test/data/bitcoin-util-test.json @@ -1,39 +1,39 @@ [ - { "exec": "././bitcoin-tx", + { "exec": "././zcash-tx", "args": ["-create"], "output_cmp": "blanktx.hex" }, - { "exec": "./bitcoin-tx", + { "exec": "./zcash-tx", "args": ["-"], "input": "blanktx.hex", "output_cmp": "blanktx.hex" }, - { "exec": "./bitcoin-tx", + { "exec": "./zcash-tx", "args": ["-", "delin=1"], "input": "tx394b54bb.hex", "output_cmp": "tt-delin1-out.hex" }, - { "exec": "./bitcoin-tx", + { "exec": "./zcash-tx", "args": ["-", "delin=31"], "input": "tx394b54bb.hex", "return_code": 1 }, - { "exec": "./bitcoin-tx", + { "exec": "./zcash-tx", "args": ["-", "delout=1"], "input": "tx394b54bb.hex", "output_cmp": "tt-delout1-out.hex" }, - { "exec": "./bitcoin-tx", + { "exec": "./zcash-tx", "args": ["-", "delout=2"], "input": "tx394b54bb.hex", "return_code": 1 }, - { "exec": "./bitcoin-tx", + { "exec": "./zcash-tx", "args": ["-", "locktime=317000"], "input": "tx394b54bb.hex", "output_cmp": "tt-locktime317000-out.hex" }, - { "exec": "./bitcoin-tx", + { "exec": "./zcash-tx", "args": ["-create", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", @@ -43,11 +43,11 @@ "outaddr=4:t1g1aXFye74HKJ24VviTxo3AW4BZbyCni5H"], "output_cmp": "txcreate1.hex" }, - { "exec": "./bitcoin-tx", + { "exec": "./zcash-tx", "args": ["-create", "outscript=0:"], "output_cmp": "txcreate2.hex" }, - { "exec": "./bitcoin-tx", + { "exec": "./zcash-tx", "args": ["-create", "in=4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485:0", From d9d59f5176718f82f31678034bc646079ddb1760 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 18 Oct 2016 17:19:11 -0500 Subject: [PATCH 019/165] Remove the RC 1 block index error message Reverts 85457ddec13bc74bdf68e6739f2258044b06c611 Closes #1548 --- src/chain.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/chain.h b/src/chain.h index e47b38568..2abb23c5a 100644 --- a/src/chain.h +++ b/src/chain.h @@ -324,11 +324,6 @@ public: READWRITE(VARINT(nDataPos)); if (nStatus & BLOCK_HAVE_UNDO) READWRITE(VARINT(nUndoPos)); - uint8_t tag = 0; - READWRITE(tag); - if (ser_action.ForRead() && tag != 0) { - assert(!"For the first time running zcashd after upgrading to v1.0.0-rc1, please use the -reindex option."); - } READWRITE(hashAnchor); // block header From 62c0aa9e58eb0dd9a22a2a83fd01d854d575a184 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 18 Oct 2016 17:47:17 -0500 Subject: [PATCH 020/165] Disable wallet encryption Closes #1552 --- src/wallet/rpcwallet.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 4d6608570..eb76e667d 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -1979,10 +1979,18 @@ Value encryptwallet(const Array& params, bool fHelp) { if (!EnsureWalletIsAvailable(fHelp)) return Value::null; - + + auto fEnableWalletEncryption = GetBoolArg("-developerencryptwallet", false); + + std::string strWalletEncryptionDisabledMsg = ""; + if (!fEnableWalletEncryption) { + strWalletEncryptionDisabledMsg = "\nWARNING: Wallet encryption is DISABLED. This call does nothing.\n"; + } + if (!pwalletMain->IsCrypted() && (fHelp || params.size() != 1)) throw runtime_error( "encryptwallet \"passphrase\"\n" + + strWalletEncryptionDisabledMsg + "\nEncrypts the wallet with 'passphrase'. This is for first time encryption.\n" "After this, any calls that interact with private keys such as sending or signing \n" "will require the passphrase to be set prior the making these calls.\n" @@ -2008,6 +2016,9 @@ Value encryptwallet(const Array& params, bool fHelp) if (fHelp) return true; + if (!fEnableWalletEncryption) { + return false; + } if (pwalletMain->IsCrypted()) throw JSONRPCError(RPC_WALLET_WRONG_ENC_STATE, "Error: running with an encrypted wallet, but encryptwallet was called."); From aa36398b274c8967232c16c9b241a08dd78f64b6 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Wed, 19 Oct 2016 08:49:08 -0500 Subject: [PATCH 021/165] Add more assertions, throw if find_output params are invalid --- src/random.h | 2 ++ src/wallet/asyncrpcoperation_sendmany.cpp | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/random.h b/src/random.h index 11be2ee37..1f6f7fef5 100644 --- a/src/random.h +++ b/src/random.h @@ -43,6 +43,8 @@ void MappedShuffle(RandomAccessIterator first, { for (size_t i = len-1; i > 0; --i) { auto r = gen(i+1); + assert(r >= 0); + assert(r <= i); std::swap(first[i], first[r]); std::swap(mapFirst[i], mapFirst[r]); } diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index 4742e2235..d6f412192 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -36,13 +36,14 @@ int find_output(Object obj, int n) { } Array outputMap = outputMapValue.get_array(); + assert(outputMap.size() == ZC_NUM_JS_OUTPUTS); for (size_t i = 0; i < outputMap.size(); i++) { if (outputMap[i] == n) { return i; } } - return -1; + throw std::logic_error("n is not present in outputmap"); } AsyncRPCOperation_sendmany::AsyncRPCOperation_sendmany( From 850019de423b4e4bc70474bd17722f34a7e6b2fa Mon Sep 17 00:00:00 2001 From: David Mercer Date: Wed, 19 Oct 2016 15:48:52 -0700 Subject: [PATCH 022/165] explicitly pass HOST and BUILD to ./configure --- zcutil/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zcutil/build.sh b/zcutil/build.sh index e259c02cb..968b34889 100755 --- a/zcutil/build.sh +++ b/zcutil/build.sh @@ -37,5 +37,5 @@ PREFIX="$(pwd)/depends/x86_64-unknown-linux-gnu/" make "$@" -C ./depends/ V=1 NO_QT=1 ./autogen.sh -./configure --prefix="${PREFIX}" --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" CXXFLAGS='-fwrapv -fno-strict-aliasing -Werror -g' +./configure --prefix="${PREFIX}" --host=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" CXXFLAGS='-fwrapv -fno-strict-aliasing -Werror -g' make "$@" V=1 From 0ee86d399ec7abac79f48348c86bc7f5e5b93209 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 18 Oct 2016 03:19:09 +0100 Subject: [PATCH 023/165] Changes to build on Alpine Linux. Signed-off-by: Daira Hopwood --- .gitignore | 1 - depends/packages/boost.mk | 5 +++-- depends/patches/boost/include_poll.patch | 11 +++++++++++ src/compat.h | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 depends/patches/boost/include_poll.patch diff --git a/.gitignore b/.gitignore index b0dac187c..7e7c71a95 100644 --- a/.gitignore +++ b/.gitignore @@ -61,7 +61,6 @@ src/qt/test/moc*.cpp *.pyc *.o *.o-* -*.patch .zcash *.a *.pb.cc diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index ee0095d40..7303821be 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -3,7 +3,7 @@ $(package)_version=1_62_0 $(package)_download_path=http://sourceforge.net/projects/boost/files/boost/1.62.0 $(package)_file_name=$(package)_$($(package)_version).tar.bz2 $(package)_sha256_hash=36c96b0f6155c98404091d8ceb48319a28279ca0333fba1ad8611eb90afb2ca0 -$(package)_patches=deprecated_auto_ptr.patch +$(package)_patches=deprecated_auto_ptr.patch include_poll.patch define $(package)_set_vars $(package)_config_opts_release=variant=release @@ -27,7 +27,8 @@ endef define $(package)_preprocess_cmds echo "using $(boost_toolset_$(host_os)) : : $($(package)_cxx) : \"$($(package)_cxxflags) $($(package)_cppflags)\" \"$($(package)_ldflags)\" \"$(boost_archiver_$(host_os))\" \"$(host_STRIP)\" \"$(host_RANLIB)\" \"$(host_WINDRES)\" : ;" > user-config.jam && \ - patch -p1 < $($(package)_patch_dir)/deprecated_auto_ptr.patch + patch -p1 < $($(package)_patch_dir)/deprecated_auto_ptr.patch && \ + patch -p1 < $($(package)_patch_dir)/include_poll.patch endef define $(package)_config_cmds diff --git a/depends/patches/boost/include_poll.patch b/depends/patches/boost/include_poll.patch new file mode 100644 index 000000000..b7e544b5f --- /dev/null +++ b/depends/patches/boost/include_poll.patch @@ -0,0 +1,11 @@ +--- boost_1_62_0-orig/boost/asio/detail/socket_types.hpp 2016-09-21 15:33:21.000000000 +0100 ++++ boost_1_62_0/boost/asio/detail/socket_types.hpp 2016-10-18 03:08:41.712254217 +0100 +@@ -58,7 +58,7 @@ + #else + # include + # if !defined(__SYMBIAN32__) +-# include ++# include + # endif + # include + # include diff --git a/src/compat.h b/src/compat.h index 20c2a2514..feaa544e2 100644 --- a/src/compat.h +++ b/src/compat.h @@ -32,7 +32,7 @@ #include #include #else -#include +#include #include #include #include From b3b1d94a0f757d2803d3b863994d64e0f830a9bc Mon Sep 17 00:00:00 2001 From: Jay Graber Date: Wed, 19 Oct 2016 18:53:24 -0700 Subject: [PATCH 024/165] Document RPC interface security assumptions in security-warnings.md --- doc/security-warnings.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/security-warnings.md b/doc/security-warnings.md index 5b9ede691..42f5e9bc1 100644 --- a/doc/security-warnings.md +++ b/doc/security-warnings.md @@ -44,6 +44,11 @@ The REST interface is a feature inherited from upstream Bitcoin. By default, it is disabled. We do not recommend you enable it until it has undergone a security review. +RPC Interface +--------------- + +If the client knows the RPC password, they have full access to the node. Users should choose a strong RPC password, and refrain from changing the default setting that only allows RPC connections from localhost. A remote host would enable a MITM to execute arbitrary RPC commands. For multi-user services that use one or more zcashd instances on the backend, the parameters passed in by users should be controlled to prevent confused-deputy attacks which could spend from any keys held by that zcashd. + Block Chain Reorganizations ---------------------------- From 1ead1bb0b3567f4ced2e29ed7fc09fafce94f48f Mon Sep 17 00:00:00 2001 From: David Mercer Date: Wed, 19 Oct 2016 19:36:52 -0700 Subject: [PATCH 025/165] allow both HOST and BUILD to be passed in from the zcutil/build.sh --- depends/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/Makefile b/depends/Makefile index 2b2538f95..3d8dd25ca 100644 --- a/depends/Makefile +++ b/depends/Makefile @@ -8,7 +8,7 @@ NO_WALLET ?= NO_UPNP ?= FALLBACK_DOWNLOAD_PATH ?= https://z.cash/depends-sources -BUILD = $(shell ./config.guess) +BUILD ?= $(shell ./config.guess) HOST ?= $(BUILD) PATCHES_PATH = $(BASEDIR)/patches BASEDIR = $(CURDIR) From 33118f63b940c91be64617cee3fef88c58c6d0aa Mon Sep 17 00:00:00 2001 From: David Mercer Date: Wed, 19 Oct 2016 19:37:37 -0700 Subject: [PATCH 026/165] pass in both HOST and BUILD to depends system, needed for deterministic builds --- zcutil/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zcutil/build.sh b/zcutil/build.sh index 968b34889..0000c6201 100755 --- a/zcutil/build.sh +++ b/zcutil/build.sh @@ -35,7 +35,7 @@ fi # BUG: parameterize the platform/host directory: PREFIX="$(pwd)/depends/x86_64-unknown-linux-gnu/" -make "$@" -C ./depends/ V=1 NO_QT=1 +HOST=x86_64-unknown-linux-gnu BUILD=x86_64-unknown-linux-gnu make "$@" -C ./depends/ V=1 NO_QT=1 ./autogen.sh ./configure --prefix="${PREFIX}" --host=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" CXXFLAGS='-fwrapv -fno-strict-aliasing -Werror -g' make "$@" V=1 From ed928f413ed3d2a15f49c22f7c6962d45651d3c6 Mon Sep 17 00:00:00 2001 From: David Mercer Date: Wed, 19 Oct 2016 20:18:03 -0700 Subject: [PATCH 027/165] explicitly pass HOST and BUILD to libgmp ./configure --- depends/packages/libgmp.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/packages/libgmp.mk b/depends/packages/libgmp.mk index cf3dfc0f7..2e55b05f6 100644 --- a/depends/packages/libgmp.mk +++ b/depends/packages/libgmp.mk @@ -7,7 +7,7 @@ $(package)_dependencies= $(package)_config_opts=--enable-cxx --disable-shared define $(package)_config_cmds - $($(package)_autoconf) + $($(package)_autoconf) --host=$(host) --build=$(build) endef define $(package)_build_cmds From ae10ed9c4f6d99b556994dcd6885c02747425f9b Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Thu, 20 Oct 2016 05:33:09 +0100 Subject: [PATCH 028/165] Add Tromp's implementation of Equihash solver (as of tromp/equihash commit 690fc5eff453bc0c1ec66b283395c9df87701e93). Author: John Tromp Signed-off-by: Daira Hopwood --- src/pow/tromp/equi.h | 129 ++++++++ src/pow/tromp/equi_miner.h | 644 ++++++++++++++++++++++++++++++++++++ src/pow/tromp/osx_barrier.h | 70 ++++ 3 files changed, 843 insertions(+) create mode 100644 src/pow/tromp/equi.h create mode 100644 src/pow/tromp/equi_miner.h create mode 100644 src/pow/tromp/osx_barrier.h diff --git a/src/pow/tromp/equi.h b/src/pow/tromp/equi.h new file mode 100644 index 000000000..7a0355a73 --- /dev/null +++ b/src/pow/tromp/equi.h @@ -0,0 +1,129 @@ +// Equihash solver +// Copyright (c) 2016-2016 John Tromp + +#include "blake/blake2.h" +#ifdef __APPLE__ +#include "osx_barrier.h" +#include +#include +#define htole32(x) OSSwapHostToLittleInt32(x) +#else +#include +#endif +#include // for types uint32_t,uint64_t +#include // for functions memset +#include // for function qsort + +typedef uint32_t u32; +typedef unsigned char uchar; + +// algorithm parameters, prefixed with W to reduce include file conflicts + +#ifndef WN +#define WN 200 +#endif + +#ifndef WK +#define WK 9 +#endif + +#define NDIGITS (WK+1) +#define DIGITBITS (WN/(NDIGITS)) + +static const u32 PROOFSIZE = 1<digest_length = HASHOUT; + P->key_length = 0; + P->fanout = 1; + P->depth = 1; + P->leaf_length = 0; + P->node_offset = 0; + P->node_depth = 0; + P->inner_length = 0; + memset(P->reserved, 0, sizeof(P->reserved)); + memset(P->salt, 0, sizeof(P->salt)); + memcpy(P->personal, (const uint8_t *)personal, 16); + blake2b_init_param(ctx, P); + blake2b_update(ctx, (const uchar *)header, headerlen); + uchar nonce[32]; + memset(nonce, 0, 32); + uint32_t le_nonce = htole32(nce); + memcpy(nonce, &le_nonce, 4); + blake2b_update(ctx, nonce, 32); +} + +enum verify_code { POW_OK, POW_DUPLICATE, POW_OUT_OF_ORDER, POW_NONZERO_XOR }; +const char *errstr[] = { "OK", "duplicate index", "indices out of order", "nonzero xor" }; + +void genhash(blake2b_state *ctx, u32 idx, uchar *hash) { + blake2b_state state = *ctx; + u32 leb = htole32(idx / HASHESPERBLAKE); + blake2b_update(&state, (uchar *)&leb, sizeof(u32)); + uchar blakehash[HASHOUT]; + blake2b_final(&state, blakehash, HASHOUT); + memcpy(hash, blakehash + (idx % HASHESPERBLAKE) * WN/8, WN/8); +} + +int verifyrec(blake2b_state *ctx, u32 *indices, uchar *hash, int r) { + if (r == 0) { + genhash(ctx, *indices, hash); + return POW_OK; + } + u32 *indices1 = indices + (1 << (r-1)); + if (*indices >= *indices1) + return POW_OUT_OF_ORDER; + uchar hash0[WN/8], hash1[WN/8]; + int vrf0 = verifyrec(ctx, indices, hash0, r-1); + if (vrf0 != POW_OK) + return vrf0; + int vrf1 = verifyrec(ctx, indices1, hash1, r-1); + if (vrf1 != POW_OK) + return vrf1; + for (int i=0; i < WN/8; i++) + hash[i] = hash0[i] ^ hash1[i]; + int i, b = r * DIGITBITS; + for (i = 0; i < b/8; i++) + if (hash[i]) + return POW_NONZERO_XOR; + if ((b%8) && hash[i] >> (8-(b%8))) + return POW_NONZERO_XOR; + return POW_OK; +} + +int compu32(const void *pa, const void *pb) { + u32 a = *(u32 *)pa, b = *(u32 *)pb; + return a0 the leftmost leaf of its left subtree +// is less than the leftmost leaf of its right subtree + +// The algorithm below solves this by maintaining the trees +// in a graph of K layers, each split into buckets +// with buckets indexed by the first n-RESTBITS bits following +// the i*n 0s, each bucket having 4 * 2^RESTBITS slots, +// twice the number of subtrees expected to land there. + +#include "equi.h" +#include +#include +#include +#include + +typedef uint16_t u16; +typedef uint64_t u64; + +#ifdef ATOMIC +#include +typedef std::atomic au32; +#else +typedef u32 au32; +#endif + +#ifndef RESTBITS +#define RESTBITS 8 +#endif + +// 2_log of number of buckets +#define BUCKBITS (DIGITBITS-RESTBITS) + +#ifndef SAVEMEM +#if RESTBITS == 4 +// can't save memory in such small buckets +#define SAVEMEM 1 +#elif RESTBITS >= 8 +// take advantage of law of large numbers (sum of 2^8 random numbers) +// this reduces (200,9) memory to under 144MB, with negligible discarding +#define SAVEMEM 9/14 +#endif +#endif + +// number of buckets +static const u32 NBUCKETS = 1<> (2 * SLOTBITS - 1); +#else + return bid_s0_s1 >> (2 * SLOTBITS); +#endif + } + u32 slotid0() const { +#ifdef SLOTDIFF + return (bid_s0_s1 >> (SLOTBITS-1)) & SLOTMASK; +#else + return (bid_s0_s1 >> SLOTBITS) & SLOTMASK; +#endif + } + u32 slotid1() const { +#ifdef SLOTDIFF + return (slotid0() + 1 + (bid_s0_s1 & (SLOTMASK>>1))) & SLOTMASK; +#else + return bid_s0_s1 & SLOTMASK; +#endif + } +}; + +union hashunit { + u32 word; + uchar bytes[sizeof(u32)]; +}; + +#define WORDS(bits) ((bits + 31) / 32) +#define HASHWORDS0 WORDS(WN - DIGITBITS + RESTBITS) +#define HASHWORDS1 WORDS(WN - 2*DIGITBITS + RESTBITS) + +struct slot0 { + tree attr; + hashunit hash[HASHWORDS0]; +}; + +struct slot1 { + tree attr; + hashunit hash[HASHWORDS1]; +}; + +// a bucket is NSLOTS treenodes +typedef slot0 bucket0[NSLOTS]; +typedef slot1 bucket1[NSLOTS]; +// the N-bit hash consists of K+1 n-bit "digits" +// each of which corresponds to a layer of NBUCKETS buckets +typedef bucket0 digit0[NBUCKETS]; +typedef bucket1 digit1[NBUCKETS]; + +// size (in bytes) of hash in round 0 <= r < WK +u32 hashsize(const u32 r) { + const u32 hashbits = WN - (r+1) * DIGITBITS + RESTBITS; + return (hashbits + 7) / 8; +} + +u32 hashwords(u32 bytes) { + return (bytes + 3) / 4; +} + +// manages hash and tree data +struct htalloc { + u32 *heap0; + u32 *heap1; + bucket0 *trees0[(WK+1)/2]; + bucket1 *trees1[WK/2]; + u32 alloced; + htalloc() { + alloced = 0; + } + void alloctrees() { +// optimize xenoncat's fixed memory layout, avoiding any waste +// digit trees hashes trees hashes +// 0 0 A A A A A A . . . . . . +// 1 0 A A A A A A 1 B B B B B +// 2 0 2 C C C C C 1 B B B B B +// 3 0 2 C C C C C 1 3 D D D D +// 4 0 2 4 E E E E 1 3 D D D D +// 5 0 2 4 E E E E 1 3 5 F F F +// 6 0 2 4 6 . G G 1 3 5 F F F +// 7 0 2 4 6 . G G 1 3 5 7 H H +// 8 0 2 4 6 8 . I 1 3 5 7 H H + assert(DIGITBITS >= 16); // ensures hashes shorten by 1 unit every 2 digits + heap0 = (u32 *)alloc(1, sizeof(digit0)); + heap1 = (u32 *)alloc(1, sizeof(digit1)); + for (int r=0; r indices[size]) { + for (u32 i=0; i < size; i++) { + const u32 tmp = indices[i]; + indices[i] = indices[size+i]; + indices[size+i] = tmp; + } + } + } + void listindices0(u32 r, const tree t, u32 *indices) { + if (r == 0) { + *indices = t.getindex(); + return; + } + const bucket1 &buck = hta.trees1[--r/2][t.bucketid()]; + const u32 size = 1 << r; + u32 *indices1 = indices + size; + listindices1(r, buck[t.slotid0()].attr, indices); + listindices1(r, buck[t.slotid1()].attr, indices1); + orderindices(indices, size); + } + void listindices1(u32 r, const tree t, u32 *indices) { + const bucket0 &buck = hta.trees0[--r/2][t.bucketid()]; + const u32 size = 1 << r; + u32 *indices1 = indices + size; + listindices0(r, buck[t.slotid0()].attr, indices); + listindices0(r, buck[t.slotid1()].attr, indices1); + orderindices(indices, size); + } + void candidate(const tree t) { + proof prf; + listindices1(WK, t, prf); // assume WK odd + qsort(prf, PROOFSIZE, sizeof(u32), &compu32); + for (u32 i=1; i> (SLOTBITS-6); + binsizes[bsize]++; + } + for (u32 i=0; i < 65; i++) { +#ifdef HIST + printf(" %d:%d", i, binsizes[i]); +#else +#ifdef SPARK + u32 sparks = binsizes[i] / SPARKSCALE; +#else + u32 sparks = 0; + for (u32 bs = binsizes[i]; bs; bs >>= 1) sparks++; + sparks = sparks * 7 / SPARKSCALE; +#endif + printf("\342\226%c", '\201' + sparks); +#endif + } + printf("\n"); +#endif + } + + struct htlayout { + htalloc hta; + u32 prevhashunits; + u32 nexthashunits; + u32 dunits; + u32 prevbo; + u32 nextbo; + + htlayout(equi *eq, u32 r): hta(eq->hta), prevhashunits(0), dunits(0) { + u32 nexthashbytes = hashsize(r); + nexthashunits = hashwords(nexthashbytes); + prevbo = 0; + nextbo = nexthashunits * sizeof(hashunit) - nexthashbytes; // 0-3 + if (r) { + u32 prevhashbytes = hashsize(r-1); + prevhashunits = hashwords(prevhashbytes); + prevbo = prevhashunits * sizeof(hashunit) - prevhashbytes; // 0-3 + dunits = prevhashunits - nexthashunits; + } + } + u32 getxhash0(const slot0* pslot) const { +#if WN == 200 && RESTBITS == 4 + return pslot->hash->bytes[prevbo] >> 4; +#elif WN == 200 && RESTBITS == 8 + return (pslot->hash->bytes[prevbo] & 0xf) << 4 | pslot->hash->bytes[prevbo+1] >> 4; +#elif WN == 200 && RESTBITS == 9 + return (pslot->hash->bytes[prevbo] & 0x1f) << 4 | pslot->hash->bytes[prevbo+1] >> 4; +#elif WN == 144 && RESTBITS == 4 + return pslot->hash->bytes[prevbo] & 0xf; +#else +#error non implemented +#endif + } + u32 getxhash1(const slot1* pslot) const { +#if WN == 200 && RESTBITS == 4 + return pslot->hash->bytes[prevbo] & 0xf; +#elif WN == 200 && RESTBITS == 8 + return pslot->hash->bytes[prevbo]; +#elif WN == 200 && RESTBITS == 9 + return (pslot->hash->bytes[prevbo]&1) << 8 | pslot->hash->bytes[prevbo+1]; +#elif WN == 144 && RESTBITS == 4 + return pslot->hash->bytes[prevbo] & 0xf; +#else +#error non implemented +#endif + } + bool equal(const hashunit *hash0, const hashunit *hash1) const { + return hash0[prevhashunits-1].word == hash1[prevhashunits-1].word; + } + }; + + struct collisiondata { +#ifdef XBITMAP +#if NSLOTS > 64 +#error cant use XBITMAP with more than 64 slots +#endif + u64 xhashmap[NRESTS]; + u64 xmap; +#else +#if RESTBITS <= 6 + typedef uchar xslot; +#else + typedef u16 xslot; +#endif + xslot nxhashslots[NRESTS]; + xslot xhashslots[NRESTS][XFULL]; + xslot *xx; + u32 n0; + u32 n1; +#endif + u32 s0; + + void clear() { +#ifdef XBITMAP + memset(xhashmap, 0, NRESTS * sizeof(u64)); +#else + memset(nxhashslots, 0, NRESTS * sizeof(xslot)); +#endif + } + bool addslot(u32 s1, u32 xh) { +#ifdef XBITMAP + xmap = xhashmap[xh]; + xhashmap[xh] |= (u64)1 << s1; + s0 = -1; + return true; +#else + n1 = (u32)nxhashslots[xh]++; + if (n1 >= XFULL) + return false; + xx = xhashslots[xh]; + xx[n1] = s1; + n0 = 0; + return true; +#endif + } + bool nextcollision() const { +#ifdef XBITMAP + return xmap != 0; +#else + return n0 < n1; +#endif + } + u32 slot() { +#ifdef XBITMAP + const u32 ffs = __builtin_ffsll(xmap); + s0 += ffs; xmap >>= ffs; + return s0; +#else + return (u32)xx[n0++]; +#endif + } + }; + + void digit0(const u32 id) { + uchar hash[HASHOUT]; + blake2b_state state; + htlayout htl(this, 0); + const u32 hashbytes = hashsize(0); + for (u32 block = id; block < NBLOCKS; block += nthreads) { + state = blake_ctx; + u32 leb = htole32(block); + blake2b_update(&state, (uchar *)&leb, sizeof(u32)); + blake2b_final(&state, hash, HASHOUT); + for (u32 i = 0; i> 4; +#elif BUCKBITS == 11 && RESTBITS == 9 + const u32 bucketid = ((u32)ph[0] << 3) | ph[1] >> 5; +#elif BUCKBITS == 20 && RESTBITS == 4 + const u32 bucketid = ((((u32)ph[0] << 8) | ph[1]) << 4) | ph[2] >> 4; +#elif BUCKBITS == 12 && RESTBITS == 4 + const u32 bucketid = ((u32)ph[0] << 4) | ph[1] >> 4; + const u32 xhash = ph[1] & 0xf; +#else +#error not implemented +#endif + const u32 slot = getslot(0, bucketid); + if (slot >= NSLOTS) { + bfull++; + continue; + } + slot0 &s = hta.trees0[0][bucketid][slot]; + s.attr = tree(block * HASHESPERBLAKE + i); + memcpy(s.hash->bytes+htl.nextbo, ph+WN/8-hashbytes, hashbytes); + } + } + } + + void digitodd(const u32 r, const u32 id) { + htlayout htl(this, r); + collisiondata cd; + for (u32 bucketid=id; bucketid < NBUCKETS; bucketid += nthreads) { + cd.clear(); + slot0 *buck = htl.hta.trees0[(r-1)/2][bucketid]; // optimize by updating previous buck?! + u32 bsize = getnslots(r-1, bucketid); // optimize by putting bucketsize with block?! + for (u32 s1 = 0; s1 < bsize; s1++) { + const slot0 *pslot1 = buck + s1; // optimize by updating previous pslot1?! + if (!cd.addslot(s1, htl.getxhash0(pslot1))) { + xfull++; + continue; + } + for (; cd.nextcollision(); ) { + const u32 s0 = cd.slot(); + const slot0 *pslot0 = buck + s0; + if (htl.equal(pslot0->hash, pslot1->hash)) { + hfull++; + continue; + } + u32 xorbucketid; + const uchar *bytes0 = pslot0->hash->bytes, *bytes1 = pslot1->hash->bytes; +#if WN == 200 && BUCKBITS == 12 && RESTBITS == 8 + xorbucketid = (((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) & 0xf) << 8) + | (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]); +#elif WN == 200 && BUCKBITS == 11 && RESTBITS == 9 + xorbucketid = (((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) & 0xf) << 7) + | (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]) >> 1; +#elif WN == 144 && BUCKBITS == 20 && RESTBITS == 4 + xorbucketid = ((((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) << 8) + | (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2])) << 4) + | (bytes0[htl.prevbo+3] ^ bytes1[htl.prevbo+3]) >> 4; +#elif WN == 96 && BUCKBITS == 12 && RESTBITS == 4 + xorbucketid = ((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) << 4) + | (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]) >> 4; +#else +#error not implemented +#endif + const u32 xorslot = getslot(r, xorbucketid); + if (xorslot >= NSLOTS) { + bfull++; + continue; + } + slot1 &xs = htl.hta.trees1[r/2][xorbucketid][xorslot]; + xs.attr = tree(bucketid, s0, s1); + for (u32 i=htl.dunits; i < htl.prevhashunits; i++) + xs.hash[i-htl.dunits].word = pslot0->hash[i].word ^ pslot1->hash[i].word; + } + } + } + } + + void digiteven(const u32 r, const u32 id) { + htlayout htl(this, r); + collisiondata cd; + for (u32 bucketid=id; bucketid < NBUCKETS; bucketid += nthreads) { + cd.clear(); + slot1 *buck = htl.hta.trees1[(r-1)/2][bucketid]; // OPTIMIZE BY UPDATING PREVIOUS + u32 bsize = getnslots(r-1, bucketid); + for (u32 s1 = 0; s1 < bsize; s1++) { + const slot1 *pslot1 = buck + s1; // OPTIMIZE BY UPDATING PREVIOUS + if (!cd.addslot(s1, htl.getxhash1(pslot1))) { + xfull++; + continue; + } + for (; cd.nextcollision(); ) { + const u32 s0 = cd.slot(); + const slot1 *pslot0 = buck + s0; + if (htl.equal(pslot0->hash, pslot1->hash)) { + hfull++; + continue; + } + u32 xorbucketid; + const uchar *bytes0 = pslot0->hash->bytes, *bytes1 = pslot1->hash->bytes; +#if WN == 200 && BUCKBITS == 12 && RESTBITS == 8 + xorbucketid = ((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) << 4) + | (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]) >> 4; +#elif WN == 200 && BUCKBITS == 11 && RESTBITS == 9 + xorbucketid = ((u32)(bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]) << 3) + | (bytes0[htl.prevbo+3] ^ bytes1[htl.prevbo+3]) >> 5; +#elif WN == 144 && BUCKBITS == 20 && RESTBITS == 4 + xorbucketid = ((((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) << 8) + | (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2])) << 4) + | (bytes0[htl.prevbo+3] ^ bytes1[htl.prevbo+3]) >> 4; +#elif WN == 96 && BUCKBITS == 12 && RESTBITS == 4 + xorbucketid = ((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) << 4) + | (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]) >> 4; +#else +#error not implemented +#endif + const u32 xorslot = getslot(r, xorbucketid); + if (xorslot >= NSLOTS) { + bfull++; + continue; + } + slot0 &xs = htl.hta.trees0[r/2][xorbucketid][xorslot]; + xs.attr = tree(bucketid, s0, s1); + for (u32 i=htl.dunits; i < htl.prevhashunits; i++) + xs.hash[i-htl.dunits].word = pslot0->hash[i].word ^ pslot1->hash[i].word; + } + } + } + } + + void digitK(const u32 id) { + collisiondata cd; + htlayout htl(this, WK); +u32 nc = 0; + for (u32 bucketid = id; bucketid < NBUCKETS; bucketid += nthreads) { + cd.clear(); + slot0 *buck = htl.hta.trees0[(WK-1)/2][bucketid]; + u32 bsize = getnslots(WK-1, bucketid); + for (u32 s1 = 0; s1 < bsize; s1++) { + const slot0 *pslot1 = buck + s1; + if (!cd.addslot(s1, htl.getxhash0(pslot1))) // assume WK odd + continue; + for (; cd.nextcollision(); ) { + const u32 s0 = cd.slot(); + if (htl.equal(buck[s0].hash, pslot1->hash)) +nc++, candidate(tree(bucketid, s0, s1)); + } + } + } +printf(" %d candidates ", nc); + } +}; + +typedef struct { + u32 id; + pthread_t thread; + equi *eq; +} thread_ctx; + +void barrier(pthread_barrier_t *barry) { + const int rc = pthread_barrier_wait(barry); + if (rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD) { + printf("Could not wait on barrier\n"); + pthread_exit(NULL); + } +} + +void *worker(void *vp) { + thread_ctx *tp = (thread_ctx *)vp; + equi *eq = tp->eq; + + if (tp->id == 0) + printf("Digit 0\n"); + barrier(&eq->barry); + eq->digit0(tp->id); + barrier(&eq->barry); + if (tp->id == 0) { + eq->xfull = eq->bfull = eq->hfull = 0; + eq->showbsizes(0); + } + barrier(&eq->barry); + for (u32 r = 1; r < WK; r++) { + if (tp->id == 0) + printf("Digit %d", r); + barrier(&eq->barry); + r&1 ? eq->digitodd(r, tp->id) : eq->digiteven(r, tp->id); + barrier(&eq->barry); + if (tp->id == 0) { + printf(" x%d b%d h%d\n", eq->xfull, eq->bfull, eq->hfull); + eq->xfull = eq->bfull = eq->hfull = 0; + eq->showbsizes(r); + } + barrier(&eq->barry); + } + if (tp->id == 0) + printf("Digit %d\n", WK); + eq->digitK(tp->id); + barrier(&eq->barry); + pthread_exit(NULL); + return 0; +} diff --git a/src/pow/tromp/osx_barrier.h b/src/pow/tromp/osx_barrier.h new file mode 100644 index 000000000..da05b3552 --- /dev/null +++ b/src/pow/tromp/osx_barrier.h @@ -0,0 +1,70 @@ +#ifdef __APPLE__ + +#ifndef PTHREAD_BARRIER_H_ +#define PTHREAD_BARRIER_H_ + +#include +#include + +typedef int pthread_barrierattr_t; +#define PTHREAD_BARRIER_SERIAL_THREAD 1 + +typedef struct +{ + pthread_mutex_t mutex; + pthread_cond_t cond; + int count; + int tripCount; +} pthread_barrier_t; + + +int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count) +{ + if(count == 0) + { + errno = EINVAL; + return -1; + } + if(pthread_mutex_init(&barrier->mutex, 0) < 0) + { + return -1; + } + if(pthread_cond_init(&barrier->cond, 0) < 0) + { + pthread_mutex_destroy(&barrier->mutex); + return -1; + } + barrier->tripCount = count; + barrier->count = 0; + + return 0; +} + +int pthread_barrier_destroy(pthread_barrier_t *barrier) +{ + pthread_cond_destroy(&barrier->cond); + pthread_mutex_destroy(&barrier->mutex); + return 0; +} + +int pthread_barrier_wait(pthread_barrier_t *barrier) +{ + pthread_mutex_lock(&barrier->mutex); + ++(barrier->count); + if(barrier->count >= barrier->tripCount) + { + barrier->count = 0; + pthread_cond_broadcast(&barrier->cond); + pthread_mutex_unlock(&barrier->mutex); + return PTHREAD_BARRIER_SERIAL_THREAD; + } + else + { + pthread_cond_wait(&barrier->cond, &(barrier->mutex)); + pthread_mutex_unlock(&barrier->mutex); + return 0; + } +} + +#endif // PTHREAD_BARRIER_H_ +#endif // __APPLE__ From c7aaab7aa3f64aa93f19607c15fc18c019f1419c Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Thu, 20 Oct 2016 06:03:16 +0100 Subject: [PATCH 029/165] Integrate Tromp solver into miner code and remove its dependency on extra BLAKE2b implementation. Signed-off-by: Daira Hopwood --- src/Makefile.am | 10 +++++-- src/miner.cpp | 58 +++++++++++++++++++++++++++++++------- src/pow/tromp/equi.h | 55 ++++++++---------------------------- src/pow/tromp/equi_miner.h | 22 +++++++-------- 4 files changed, 79 insertions(+), 66 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 9f8a18189..4f3deaea7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -243,8 +243,13 @@ libbitcoin_wallet_a_SOURCES = \ $(BITCOIN_CORE_H) \ $(LIBZCASH_H) +EQUIHASH_TROMP_SOURCES = \ + pow/tromp/equi_miner.h \ + pow/tromp/equi.h \ + pow/tromp/osx_barrier.h + # crypto primitives library -crypto_libbitcoin_crypto_a_CPPFLAGS = $(BITCOIN_CONFIG_INCLUDES) +crypto_libbitcoin_crypto_a_CPPFLAGS = $(BITCOIN_CONFIG_INCLUDES) -DEQUIHASH_TROMP_ATOMIC crypto_libbitcoin_crypto_a_SOURCES = \ crypto/common.h \ crypto/equihash.cpp \ @@ -261,7 +266,8 @@ crypto_libbitcoin_crypto_a_SOURCES = \ crypto/sha256.cpp \ crypto/sha256.h \ crypto/sha512.cpp \ - crypto/sha512.h + crypto/sha512.h \ + ${EQUIHASH_TROMP_SOURCES} # univalue JSON library univalue_libbitcoin_univalue_a_SOURCES = \ diff --git a/src/miner.cpp b/src/miner.cpp index 472e91482..5540b0972 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -4,6 +4,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "miner.h" +#include "pow/tromp/equi_miner.h" #include "amount.h" #include "chainparams.h" @@ -453,6 +454,9 @@ void static BitcoinMiner(CWallet *pwallet) unsigned int n = chainparams.EquihashN(); unsigned int k = chainparams.EquihashK(); + std::string solver = GetArg("-equihashsolver", "default"); + LogPrint("pow", "Using Equihash solver \"%s\" with n = %u, k = %u\n", solver, n, k); + std::mutex m_cs; bool cancelSolver = false; boost::signals2::connection c = uiInterface.NotifyBlockTip.connect( @@ -524,8 +528,8 @@ void static BitcoinMiner(CWallet *pwallet) pblock->nNonce.size()); // (x_1, x_2, ...) = A(I, V, n, k) - LogPrint("pow", "Running Equihash solver with nNonce = %s\n", - pblock->nNonce.ToString()); + LogPrint("pow", "Running Equihash solver \"%s\" with nNonce = %s\n", + solver, pblock->nNonce.ToString()); std::function)> validBlock = [&pblock, &hashTarget, &pwallet, &reservekey, &m_cs, &cancelSolver, &chainparams] @@ -559,14 +563,48 @@ void static BitcoinMiner(CWallet *pwallet) std::lock_guard lock{m_cs}; return cancelSolver; }; - try { - // If we find a valid block, we rebuild - if (EhOptimisedSolve(n, k, curr_state, validBlock, cancelled)) - break; - } catch (EhSolverCancelledException&) { - LogPrint("pow", "Equihash solver cancelled\n"); - std::lock_guard lock{m_cs}; - cancelSolver = false; + + if (solver == "tromp") { + // Create solver and initialize it. + equi eq(1); + eq.setstate(&curr_state); + + // Intialization done, start algo driver. + eq.digit0(0); + eq.xfull = eq.bfull = eq.hfull = 0; + eq.showbsizes(0); + for (u32 r = 1; r < WK; r++) { + (r&1) ? eq.digitodd(r, 0) : eq.digiteven(r, 0); + eq.xfull = eq.bfull = eq.hfull = 0; + eq.showbsizes(r); + } + eq.digitK(0); + + // Convert solution indices to byte array (decompress) and pass it to validBlock method. + for (size_t s = 0; s < eq.nsols; s++) { + LogPrint("pow", "Checking solution %d\n", s+1); + std::vector index_vector(PROOFSIZE); + for (size_t i = 0; i < PROOFSIZE; i++) { + index_vector[i] = eq.sols[s][i]; + } + std::vector sol_char = GetMinimalFromIndices(index_vector, DIGITBITS); + + if (validBlock(sol_char)) { + // If we find a POW solution, do not try other solutions + // because they become invalid as we created a new block in blockchain. + break; + } + } + } else { + try { + // If we find a valid block, we rebuild + if (EhOptimisedSolve(n, k, curr_state, validBlock, cancelled)) + break; + } catch (EhSolverCancelledException&) { + LogPrint("pow", "Equihash solver cancelled\n"); + std::lock_guard lock{m_cs}; + cancelSolver = false; + } } // Check for stop or if block needs to be rebuilt diff --git a/src/pow/tromp/equi.h b/src/pow/tromp/equi.h index 7a0355a73..f6d8803c2 100644 --- a/src/pow/tromp/equi.h +++ b/src/pow/tromp/equi.h @@ -1,15 +1,12 @@ // Equihash solver -// Copyright (c) 2016-2016 John Tromp +// Copyright (c) 2016-2016 John Tromp, The Zcash developers -#include "blake/blake2.h" +#include "sodium.h" #ifdef __APPLE__ -#include "osx_barrier.h" -#include -#include -#define htole32(x) OSSwapHostToLittleInt32(x) -#else -#include +#include "pow/tromp/osx_barrier.h" #endif +#include "compat/endian.h" + #include // for types uint32_t,uint64_t #include // for functions memset #include // for function qsort @@ -38,46 +35,20 @@ static const u32 HASHOUT = HASHESPERBLAKE*WN/8; typedef u32 proof[PROOFSIZE]; -void setheader(blake2b_state *ctx, const char *header, const u32 headerlen, u32 nce) { - uint32_t le_N = htole32(WN); - uint32_t le_K = htole32(WK); - uchar personal[] = "ZcashPoW01230123"; - memcpy(personal+8, &le_N, 4); - memcpy(personal+12, &le_K, 4); - blake2b_param P[1]; - P->digest_length = HASHOUT; - P->key_length = 0; - P->fanout = 1; - P->depth = 1; - P->leaf_length = 0; - P->node_offset = 0; - P->node_depth = 0; - P->inner_length = 0; - memset(P->reserved, 0, sizeof(P->reserved)); - memset(P->salt, 0, sizeof(P->salt)); - memcpy(P->personal, (const uint8_t *)personal, 16); - blake2b_init_param(ctx, P); - blake2b_update(ctx, (const uchar *)header, headerlen); - uchar nonce[32]; - memset(nonce, 0, 32); - uint32_t le_nonce = htole32(nce); - memcpy(nonce, &le_nonce, 4); - blake2b_update(ctx, nonce, 32); -} enum verify_code { POW_OK, POW_DUPLICATE, POW_OUT_OF_ORDER, POW_NONZERO_XOR }; const char *errstr[] = { "OK", "duplicate index", "indices out of order", "nonzero xor" }; -void genhash(blake2b_state *ctx, u32 idx, uchar *hash) { - blake2b_state state = *ctx; +void genhash(const crypto_generichash_blake2b_state *ctx, u32 idx, uchar *hash) { + crypto_generichash_blake2b_state state = *ctx; u32 leb = htole32(idx / HASHESPERBLAKE); - blake2b_update(&state, (uchar *)&leb, sizeof(u32)); + crypto_generichash_blake2b_update(&state, (uchar *)&leb, sizeof(u32)); uchar blakehash[HASHOUT]; - blake2b_final(&state, blakehash, HASHOUT); + crypto_generichash_blake2b_final(&state, blakehash, HASHOUT); memcpy(hash, blakehash + (idx % HASHESPERBLAKE) * WN/8, WN/8); } -int verifyrec(blake2b_state *ctx, u32 *indices, uchar *hash, int r) { +int verifyrec(const crypto_generichash_blake2b_state *ctx, u32 *indices, uchar *hash, int r) { if (r == 0) { genhash(ctx, *indices, hash); return POW_OK; @@ -119,11 +90,9 @@ bool duped(proof prf) { } // verify Wagner conditions -int verify(u32 indices[PROOFSIZE], const char *header, const u32 headerlen, const u32 nonce) { +int verify(u32 indices[PROOFSIZE], const crypto_generichash_blake2b_state *ctx) { if (duped(indices)) return POW_DUPLICATE; - blake2b_state ctx; - setheader(&ctx, header, headerlen, nonce); uchar hash[WN/8]; - return verifyrec(&ctx, indices, hash, WK); + return verifyrec(ctx, indices, hash, WK); } diff --git a/src/pow/tromp/equi_miner.h b/src/pow/tromp/equi_miner.h index db2b83098..2f6531fe8 100644 --- a/src/pow/tromp/equi_miner.h +++ b/src/pow/tromp/equi_miner.h @@ -1,5 +1,5 @@ // Equihash solver -// Copyright (c) 2016 John Tromp +// Copyright (c) 2016 John Tromp, The Zcash developers // Fix N, K, such that n = N/(k+1) is integer // Fix M = 2^{n+1} hashes each of length N bits, @@ -18,7 +18,7 @@ // the i*n 0s, each bucket having 4 * 2^RESTBITS slots, // twice the number of subtrees expected to land there. -#include "equi.h" +#include "pow/tromp/equi.h" #include #include #include @@ -27,7 +27,7 @@ typedef uint16_t u16; typedef uint64_t u64; -#ifdef ATOMIC +#ifdef EQUIHASH_TROMP_ATOMIC #include typedef std::atomic au32; #else @@ -204,7 +204,7 @@ u32 min(const u32 a, const u32 b) { } struct equi { - blake2b_state blake_ctx; + crypto_generichash_blake2b_state blake_ctx; htalloc hta; bsizes *nslots; // PUT IN BUCKET STRUCT proof *sols; @@ -228,13 +228,13 @@ struct equi { free(nslots); free(sols); } - void setnonce(const char *header, const u32 headerlen, const u32 nonce) { - setheader(&blake_ctx, header, headerlen, nonce); + void setstate(const crypto_generichash_blake2b_state *ctx) { + blake_ctx = *ctx; memset(nslots, 0, NBUCKETS * sizeof(au32)); // only nslots[0] needs zeroing nsols = 0; } u32 getslot(const u32 r, const u32 bucketi) { -#ifdef ATOMIC +#ifdef EQUIHASH_TROMP_ATOMIC return std::atomic_fetch_add_explicit(&nslots[r&1][bucketi], 1U, std::memory_order_relaxed); #else return nslots[r&1][bucketi]++; @@ -282,7 +282,7 @@ struct equi { for (u32 i=1; i Date: Thu, 20 Oct 2016 07:05:12 +0100 Subject: [PATCH 030/165] Minor edits to dnsseed-policy.md. Signed-off-by: Daira Hopwood --- doc/dnsseed-policy.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/doc/dnsseed-policy.md b/doc/dnsseed-policy.md index a423d0220..90fead217 100644 --- a/doc/dnsseed-policy.md +++ b/doc/dnsseed-policy.md @@ -8,7 +8,7 @@ level of trust within the Zcash community. Other implementations of Zcash software may also use the same seeds and may be more exposed. In light of this exposure, this -document establishes some basic expectations for operating dnsseeds. +document establishes some basic expectations for operating DNS seeds. 0. A DNS seed operating organization or person is expected to follow good host security practices, maintain control of applicable infrastructure, @@ -20,7 +20,7 @@ functioning Zcash nodes from the public network to the best of the operator's understanding and capability. 2. For the avoidance of doubt, the results may be randomized but must not -single-out any group of hosts to receive different results unless due to an +single out any group of hosts to receive different results unless due to an urgent technical necessity and disclosed. 3. The results may not be served with a DNS TTL of less than one minute. @@ -41,12 +41,14 @@ details of their operating practices. 7. A reachable email contact address must be published for inquiries related to the DNS seed operation. -If these expectations cannot be satisfied the operator should -discontinue providing services and contact the active Zcash development team as well as creating an issue in the [Zcash repository](https://github.com/Zcash/zcash). +If these expectations cannot be satisfied the operator should discontinue +providing services and contact the active Zcash development team as well as +creating an issue in the [Zcash repository](https://github.com/zcash/zcash). Behavior outside of these expectations may be reasonable in some situations but should be discussed in public in advance. See also ---------- -- [zcash-seeder](https://github.com/zcash/zcash-seeder) is a reference implementation of a DNS seed. +- [zcash-seeder](https://github.com/zcash/zcash-seeder) is a reference + implementation of a DNS seed. From 878c4b1b507b9bfc8b9210955a56ba536010f62c Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 20 Oct 2016 10:32:20 -0500 Subject: [PATCH 031/165] Clear witness cache when re-witnessing notes Closes #1378 --- src/wallet/gtest/test_wallet.cpp | 8 ++++++++ src/wallet/wallet.cpp | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/wallet/gtest/test_wallet.cpp b/src/wallet/gtest/test_wallet.cpp index c1bf5d34c..44eb86fd7 100644 --- a/src/wallet/gtest/test_wallet.cpp +++ b/src/wallet/gtest/test_wallet.cpp @@ -734,6 +734,14 @@ TEST(wallet_tests, cached_witnesses_chain_tip) { wallet.GetNoteWitnesses(notes, witnesses, anchor4); EXPECT_TRUE((bool) witnesses[0]); EXPECT_EQ(anchor2, anchor4); + + // Incrementing with the same block again should not change the cache + uint256 anchor5; + wallet.IncrementNoteWitnesses(&index2, &block2, tree); + std::vector> witnesses5; + wallet.GetNoteWitnesses(notes, witnesses5, anchor5); + EXPECT_EQ(witnesses, witnesses5); + EXPECT_EQ(anchor4, anchor5); } } diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 1a865a966..21bc1d512 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -699,7 +699,21 @@ void CWallet::IncrementNoteWitnesses(const CBlockIndex* pindex, JSOutPoint jsoutpt {hash, i, j}; if (mapWallet[hash].mapNoteData.count(jsoutpt)) { CNoteData* nd = &(mapWallet[hash].mapNoteData[jsoutpt]); - assert(nd->witnesses.size() == 0); + if (nd->witnesses.size() > 0) { + // We think this can happen because we write out the + // witness cache state after every block increment or + // decrement, but the block index itself is written in + // batches. So if the node crashes in between these two + // operations, it is possible for IncrementNoteWitnesses + // to be called again on previously-cached blocks. This + // doesn't affect existing cached notes because of the + // CNoteData::witnessHeight checks. See #1378 for details. + LogPrintf("Inconsistent witness cache state found for %s\n- Cache size: %d\n- Top: %s\n- New: %s\n", + jsoutpt.ToString(), nd->witnesses.size(), + nd->witnesses.front().root().GetHex(), + tree.witness().root().GetHex()); + nd->witnesses.clear(); + } nd->witnesses.push_front(tree.witness()); // Set height to one less than pindex so it gets incremented nd->witnessHeight = pindex->nHeight - 1; From 1b407cba2b2a29d46397f260e7750461219f7e95 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 20 Oct 2016 11:02:15 -0500 Subject: [PATCH 032/165] Add heights to log output --- src/wallet/wallet.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 21bc1d512..e549e5484 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -708,9 +708,11 @@ void CWallet::IncrementNoteWitnesses(const CBlockIndex* pindex, // to be called again on previously-cached blocks. This // doesn't affect existing cached notes because of the // CNoteData::witnessHeight checks. See #1378 for details. - LogPrintf("Inconsistent witness cache state found for %s\n- Cache size: %d\n- Top: %s\n- New: %s\n", + LogPrintf("Inconsistent witness cache state found for %s\n- Cache size: %d\n- Top (height %d): %s\n- New (height %d): %s\n", jsoutpt.ToString(), nd->witnesses.size(), + nd->witnessHeight, nd->witnesses.front().root().GetHex(), + pindex->nHeight, tree.witness().root().GetHex()); nd->witnesses.clear(); } From a652e4183ec8e0a8041a7f29c85e36557acac327 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Thu, 20 Oct 2016 17:04:52 +0100 Subject: [PATCH 033/165] Avoid boost::posix_time functions that have potential out-of-bounds read bugs. ref #1459 Signed-off-by: Daira Hopwood --- src/utiltime.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/utiltime.cpp b/src/utiltime.cpp index d31628899..a7cdeb114 100644 --- a/src/utiltime.cpp +++ b/src/utiltime.cpp @@ -9,6 +9,7 @@ #include "utiltime.h" +#include #include #include @@ -30,14 +31,14 @@ void SetMockTime(int64_t nMockTimeIn) int64_t GetTimeMillis() { - return (boost::posix_time::microsec_clock::universal_time() - - boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds(); + return std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()).count(); } int64_t GetTimeMicros() { - return (boost::posix_time::microsec_clock::universal_time() - - boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_microseconds(); + return std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()).count(); } void MilliSleep(int64_t n) From 1532cb75f36a3e79a3ee324eb83217922a9bd822 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 20 Oct 2016 12:58:20 -0500 Subject: [PATCH 034/165] Throw an error when encryptwallet is disabled --- src/wallet/rpcwallet.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index eb76e667d..e31619475 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -1984,7 +1984,7 @@ Value encryptwallet(const Array& params, bool fHelp) std::string strWalletEncryptionDisabledMsg = ""; if (!fEnableWalletEncryption) { - strWalletEncryptionDisabledMsg = "\nWARNING: Wallet encryption is DISABLED. This call does nothing.\n"; + strWalletEncryptionDisabledMsg = "\nWARNING: Wallet encryption is DISABLED. This call always fails.\n"; } if (!pwalletMain->IsCrypted() && (fHelp || params.size() != 1)) @@ -2017,7 +2017,7 @@ Value encryptwallet(const Array& params, bool fHelp) if (fHelp) return true; if (!fEnableWalletEncryption) { - return false; + throw JSONRPCError(RPC_WALLET_ENCRYPTION_FAILED, "Error: wallet encryption is disabled."); } if (pwalletMain->IsCrypted()) throw JSONRPCError(RPC_WALLET_WRONG_ENC_STATE, "Error: running with an encrypted wallet, but encryptwallet was called."); From 750d4e07dd4379d0d1a7e3a56b2997401bdbfa7e Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 20 Oct 2016 12:58:51 -0500 Subject: [PATCH 035/165] Document that wallet encryption is disabled --- doc/security-warnings.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/doc/security-warnings.md b/doc/security-warnings.md index c5c340854..a4a4060a3 100644 --- a/doc/security-warnings.md +++ b/doc/security-warnings.md @@ -14,6 +14,25 @@ make proving keys generated on 64-bit systems unusable on 32-bit and big-endian systems. It's unclear if a warning will be issued in this case, or if the proving system will be silently compromised. +Wallet Encryption +----------------- + +Wallet encryption is disabled, for several reasons: + +- Encrypted wallets are unable to correctly detect shielded spends (due to the + nature of unlinkability of JoinSplits) and will incorrectly show much larger + available shielded balances until the next time the wallet is unlocked. + +- While encrypted wallets prevent spending of funds, they do not maintain the + shielding properties of JoinSplits (due to the need to detect spends). That + is, someone with access to an encrypted wallet.dat has full visibility of + your entire transaction graph (other than newly-detected spends, which suffer + from the earlier issue). + +You should use full-disk encryption (or encryption of your home directory) to +protect your wallet at rest, and should assume (even unprivileged) users who are +runnng on your OS can read your wallet.dat file. + Side-Channel Attacks -------------------- From 2da03f897bea8fb35b89bcaca76660ea956935c9 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 11:01:46 -0700 Subject: [PATCH 036/165] Fixes CID 1147436 uninitialized scalar field. --- src/chainparams.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/chainparams.h b/src/chainparams.h index c60baf6e3..853a43e22 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -92,23 +92,23 @@ protected: CMessageHeader::MessageStartChars pchMessageStart; //! Raw pub key bytes for the broadcast alert signing key. std::vector vAlertPubKey; - int nDefaultPort; - int nMinerThreads; - long nMaxTipAge; - uint64_t nPruneAfterHeight; - unsigned int nEquihashN; - unsigned int nEquihashK; + int nDefaultPort = 0; + int nMinerThreads = 0; + long nMaxTipAge = 0; + uint64_t nPruneAfterHeight = 0; + unsigned int nEquihashN = 0; + unsigned int nEquihashK = 0; std::vector vSeeds; std::vector base58Prefixes[MAX_BASE58_TYPES]; std::string strNetworkID; CBlock genesis; std::vector vFixedSeeds; - bool fRequireRPCPassword; - bool fMiningRequiresPeers; - bool fDefaultConsistencyChecks; - bool fRequireStandard; - bool fMineBlocksOnDemand; - bool fTestnetToBeDeprecatedFieldRPC; + bool fRequireRPCPassword = false; + bool fMiningRequiresPeers = false; + bool fDefaultConsistencyChecks = false; + bool fRequireStandard = false; + bool fMineBlocksOnDemand = false; + bool fTestnetToBeDeprecatedFieldRPC = false; Checkpoints::CCheckpointData checkpointData; std::vector vFoundersRewardAddress; }; From 9a4127e74c31f769cc1a505e667beb563c9baa07 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 11:05:30 -0700 Subject: [PATCH 037/165] Fixes CID 1352706 uninitialized scalar field. --- src/chainparamsbase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chainparamsbase.h b/src/chainparamsbase.h index 4369d0aef..33765f0fc 100644 --- a/src/chainparamsbase.h +++ b/src/chainparamsbase.h @@ -29,7 +29,7 @@ public: protected: CBaseChainParams() {} - int nRPCPort; + int nRPCPort = 0; std::string strDataDir; }; From b1c1a32b3a0309bf65aa59e8e43c83c566695ae5 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 11:17:17 -0700 Subject: [PATCH 038/165] Fixes CID 1352698 uninitialized scalar field. --- src/policy/fees.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/policy/fees.h b/src/policy/fees.h index 15577d128..d37d4b184 100644 --- a/src/policy/fees.h +++ b/src/policy/fees.h @@ -66,6 +66,9 @@ class CTxMemPoolEntry; * they've been outstanding. */ +/** Decay of .998 is a half-life of 346 blocks or about 2.4 days */ +static const double DEFAULT_DECAY = .998; + /** * We will instantiate two instances of this class, one to track transactions * that were included in a block due to fee, and one for tx's included due to @@ -105,7 +108,7 @@ private: // Combine the total value with the tx counts to calculate the avg fee/priority per bucket std::string dataTypeString; - double decay; + double decay = DEFAULT_DECAY; // Mempool counts of outstanding transactions // For each bucket X, track the number of transactions in the mempool @@ -179,9 +182,6 @@ public: /** Track confirm delays up to 25 blocks, can't estimate beyond that */ static const unsigned int MAX_BLOCK_CONFIRMS = 25; -/** Decay of .998 is a half-life of 346 blocks or about 2.4 days */ -static const double DEFAULT_DECAY = .998; - /** Require greater than 85% of X fee transactions to be confirmed within Y blocks for X to be big enough */ static const double MIN_SUCCESS_PCT = .85; static const double UNLIKELY_PCT = .5; From b7727d8b3b37bded0144363be5ffebc70b5e9f36 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 11:19:36 -0700 Subject: [PATCH 039/165] Fixes CID 1352687 uninitialized scalar field. --- src/zcash/Note.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zcash/Note.hpp b/src/zcash/Note.hpp index 8cf53e5b4..460e68f9d 100644 --- a/src/zcash/Note.hpp +++ b/src/zcash/Note.hpp @@ -26,7 +26,7 @@ public: class NotePlaintext { public: - uint64_t value; + uint64_t value = 0; uint256 rho; uint256 r; boost::array memo; From 19bec4d9bb43dc5b67e6c05f609ac9a92af1f6b4 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 11:25:36 -0700 Subject: [PATCH 040/165] Fixes CID 1352715 uninitialized scalar field. --- src/zcash/IncrementalMerkleTree.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zcash/IncrementalMerkleTree.hpp b/src/zcash/IncrementalMerkleTree.hpp index 1d023168a..cd21bf651 100644 --- a/src/zcash/IncrementalMerkleTree.hpp +++ b/src/zcash/IncrementalMerkleTree.hpp @@ -163,7 +163,7 @@ private: IncrementalMerkleTree tree; std::vector filled; boost::optional> cursor; - size_t cursor_depth; + size_t cursor_depth = 0; std::deque partial_path() const; IncrementalWitness(IncrementalMerkleTree tree) : tree(tree) {} }; From 78376cacd45b6aef3ccce724871e945b73ab5a7b Mon Sep 17 00:00:00 2001 From: Jay Graber Date: Thu, 20 Oct 2016 11:26:15 -0700 Subject: [PATCH 041/165] Update RPC interfaces warnings language --- doc/security-warnings.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/security-warnings.md b/doc/security-warnings.md index 117aecf90..3f13c938f 100644 --- a/doc/security-warnings.md +++ b/doc/security-warnings.md @@ -47,7 +47,10 @@ security review. RPC Interface --------------- -If the client knows the RPC password, they have full access to the node. Users should choose a strong RPC password, and refrain from changing the default setting that only allows RPC connections from localhost. A remote host would enable a MITM to execute arbitrary RPC commands. For multi-user services that use one or more zcashd instances on the backend, the parameters passed in by users should be controlled to prevent confused-deputy attacks which could spend from any keys held by that zcashd. +Users should choose a strong RPC password. If no RPC username and password are set, zcashd will not start and will print an error message with a suggestion for a strong random password. If the client knows the RPC password, they have at least full access to the node. In addition, certain RPC commands can be misused to overwrite files and/or take over the account that is running zcashd. (In the future we may restrict these commands, but full node access – including the ability to spend from and export keys held by the wallet – would still be possible unless wallet methods are disabled.) + +Users should also refrain from changing the default setting that only allows RPC connections from localhost. Allowing connections from remote hosts would enable a MITM to execute arbitrary RPC commands, which could lead to compromise of the account running zcashd and loss of funds. For multi-user services that use one or more zcashd instances on the backend, the parameters passed in by users should be controlled to prevent confused-deputy attacks which could spend from any keys held by that zcashd. + Block Chain Reorganization: Major Differences ------------------------------------------------- From 43873535d4aa7091945cfdfffcfcf162070b5e06 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 11:28:22 -0700 Subject: [PATCH 042/165] Fixes CID 1352686 uninitialized scalar variable. --- src/txmempool.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/txmempool.h b/src/txmempool.h index a6901fde6..e6fd8e60b 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -92,7 +92,7 @@ private: unsigned int nTransactionsUpdated; CBlockPolicyEstimator* minerPolicyEstimator; - uint64_t totalTxSize; //! sum of all mempool tx' byte sizes + uint64_t totalTxSize = 0; //! sum of all mempool tx' byte sizes public: mutable CCriticalSection cs; From 35cf6ee26d36cb419b4066463209cabd7a2b1ba6 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 20 Oct 2016 13:33:58 -0500 Subject: [PATCH 043/165] Document another wallet encryption concern --- doc/security-warnings.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/security-warnings.md b/doc/security-warnings.md index a4a4060a3..b610364d6 100644 --- a/doc/security-warnings.md +++ b/doc/security-warnings.md @@ -29,6 +29,12 @@ Wallet encryption is disabled, for several reasons: your entire transaction graph (other than newly-detected spends, which suffer from the earlier issue). +- We were concerned about the resistance of the algorithm used to derive wallet + encryption keys (inherited from Bitcoin) to dictionary attacks by a powerful + attacker. If and when we re-enable wallet encryption, it is likely to be with + a modern passphrase-based key derivation algorithm designed for greater + resistance to dictionary attack, such as Argon2i. + You should use full-disk encryption (or encryption of your home directory) to protect your wallet at rest, and should assume (even unprivileged) users who are runnng on your OS can read your wallet.dat file. From 351b38fd5b1b10d26deb659fec3f34671095b477 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 11:35:51 -0700 Subject: [PATCH 044/165] Fixes CID 1352599 unitialized scalar variable --- src/primitives/transaction.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 2e83773c4..9ed8012bf 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -52,7 +52,7 @@ public: // These contain trapdoors, values and other information // that the recipient needs, including a memo field. It // is encrypted using the scheme implemented in crypto/NoteEncryption.cpp - boost::array ciphertexts; + boost::array ciphertexts = {0}; // Random seed uint256 randomSeed; From fed6c83ccf2edb30fe8aaa047353adc102deec89 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 11:40:22 -0700 Subject: [PATCH 045/165] Fixes CID 1352727 uninitialized scalar variable. --- src/primitives/transaction.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 9ed8012bf..5d93de66b 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -307,7 +307,7 @@ public: const uint32_t nLockTime; const std::vector vjoinsplit; const uint256 joinSplitPubKey; - const joinsplit_sig_t joinSplitSig; + const joinsplit_sig_t joinSplitSig = {0}; /** Construct a CTransaction that qualifies as IsNull() */ CTransaction(); From 8ecf6ccfefff0877ec20725313308ca2d5a739ea Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 20 Oct 2016 13:41:00 -0500 Subject: [PATCH 046/165] Improve security documentation --- doc/security-warnings.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/security-warnings.md b/doc/security-warnings.md index b610364d6..2e40e92fe 100644 --- a/doc/security-warnings.md +++ b/doc/security-warnings.md @@ -20,8 +20,11 @@ Wallet Encryption Wallet encryption is disabled, for several reasons: - Encrypted wallets are unable to correctly detect shielded spends (due to the - nature of unlinkability of JoinSplits) and will incorrectly show much larger - available shielded balances until the next time the wallet is unlocked. + nature of unlinkability of JoinSplits) and can incorrectly show larger + available shielded balances until the next time the wallet is unlocked. This + problem was not limited to failing to recognize the spend; it was possible for + the shown balance to increase by the amount of change from a spend, without + deducting the spent amount. - While encrypted wallets prevent spending of funds, they do not maintain the shielding properties of JoinSplits (due to the need to detect spends). That From ccc0f9af4235d0043a272e58b53b6306821f8059 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 11:41:28 -0700 Subject: [PATCH 047/165] Fixes CID 1352714 uninitialized scalar variable. --- src/primitives/transaction.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 5d93de66b..31b057796 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -386,7 +386,7 @@ struct CMutableTransaction uint32_t nLockTime; std::vector vjoinsplit; uint256 joinSplitPubKey; - CTransaction::joinsplit_sig_t joinSplitSig; + CTransaction::joinsplit_sig_t joinSplitSig = {0}; CMutableTransaction(); CMutableTransaction(const CTransaction& tx); From 2b499f4386d458c32b64ebb2e7554d042e787f88 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 20 Oct 2016 14:35:41 -0500 Subject: [PATCH 048/165] Fix RPC tests that require wallet encryption --- qa/rpc-tests/keypool.py | 2 +- qa/rpc-tests/wallet_nullifiers.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/qa/rpc-tests/keypool.py b/qa/rpc-tests/keypool.py index aee29a596..1f8979692 100755 --- a/qa/rpc-tests/keypool.py +++ b/qa/rpc-tests/keypool.py @@ -98,7 +98,7 @@ def main(): os.makedirs(options.tmpdir) initialize_chain(options.tmpdir) - nodes = start_nodes(1, options.tmpdir) + nodes = start_nodes(1, options.tmpdir, extra_args=[['-developerencryptwallet']]) run_test(nodes, options.tmpdir) diff --git a/qa/rpc-tests/wallet_nullifiers.py b/qa/rpc-tests/wallet_nullifiers.py index 7efd70f6a..6d7449138 100755 --- a/qa/rpc-tests/wallet_nullifiers.py +++ b/qa/rpc-tests/wallet_nullifiers.py @@ -10,6 +10,10 @@ from time import * class WalletNullifiersTest (BitcoinTestFramework): + def setup_nodes(self): + return start_nodes(4, self.options.tmpdir, + extra_args=[['-developerencryptwallet']] * 4) + def run_test (self): # add zaddr to node 0 myzaddr0 = self.nodes[0].z_getnewaddress() From d8e06e3f580f799c2774807ac98a5d91890cc1e3 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 20 Oct 2016 14:45:44 -0500 Subject: [PATCH 049/165] Add test that encryptwallet is disabled --- src/test/rpc_wallet_tests.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/rpc_wallet_tests.cpp b/src/test/rpc_wallet_tests.cpp index 68883f2f8..2f674df0f 100644 --- a/src/test/rpc_wallet_tests.cpp +++ b/src/test/rpc_wallet_tests.cpp @@ -1090,6 +1090,9 @@ BOOST_AUTO_TEST_CASE(rpc_wallet_encrypted_wallet_zkeys) Array arr = retValue.get_array(); BOOST_CHECK(arr.size() == n); + // Verify that the wallet encryption RPC is disabled + BOOST_CHECK_THROW(CallRPC("encryptwallet passphrase"), runtime_error); + // Encrypt the wallet (we can't call RPC encryptwallet as that shuts down node) SecureString strWalletPass; strWalletPass.reserve(100); From f91bbeedb752b43f19567559c42db5bdf78d8a75 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Thu, 20 Oct 2016 21:17:02 +0100 Subject: [PATCH 050/165] Add help for -equihashsolver= option. Signed-off-by: Daira Hopwood --- src/init.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/init.cpp b/src/init.cpp index 54d6634a3..37564d951 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -383,6 +383,7 @@ std::string HelpMessage(HelpMessageMode mode) #ifdef ENABLE_WALLET strUsage += HelpMessageOpt("-gen", strprintf(_("Generate coins (default: %u)"), 0)); strUsage += HelpMessageOpt("-genproclimit=", strprintf(_("Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)"), 1)); + strUsage += HelpMessageOpt("-equihashsolver=", _("Specify the Equihash solver to be used if enabled (default: \"default\")")); #endif strUsage += HelpMessageOpt("-help-debug", _("Show all debugging options (usage: --help -help-debug)")); strUsage += HelpMessageOpt("-logips", strprintf(_("Include IP addresses in debug output (default: %u)"), 0)); From 5f0009b2d28fc1ac805b2f89eaa5894b883909df Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Thu, 20 Oct 2016 21:17:34 +0100 Subject: [PATCH 051/165] Assert that the Equihash solver is a supported option. Signed-off-by: Daira Hopwood --- src/miner.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/miner.cpp b/src/miner.cpp index 5540b0972..7693394e7 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -455,6 +455,7 @@ void static BitcoinMiner(CWallet *pwallet) unsigned int k = chainparams.EquihashK(); std::string solver = GetArg("-equihashsolver", "default"); + assert(solver == "tromp" || solver == "default"); LogPrint("pow", "Using Equihash solver \"%s\" with n = %u, k = %u\n", solver, n, k); std::mutex m_cs; @@ -564,6 +565,7 @@ void static BitcoinMiner(CWallet *pwallet) return cancelSolver; }; + // TODO: factor this out into a function with the same API for each solver. if (solver == "tromp") { // Create solver and initialize it. equi eq(1); From e7b1f312f598e8d611392ec1ec0538cc22f445dd Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 15:23:13 -0700 Subject: [PATCH 052/165] Add security warning about logging of z_* calls. --- doc/security-warnings.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/security-warnings.md b/doc/security-warnings.md index c5c340854..2e4cc4ec5 100644 --- a/doc/security-warnings.md +++ b/doc/security-warnings.md @@ -50,3 +50,12 @@ Block Chain Reorganization: Major Differences Users should be aware of new behavior in Zcash that differs significantly from Bitcoin: in the case of a block chain reorganization, Bitcoin's coinbase maturity rule helps to ensure that any reorganization shorter than the maturity interval will not invalidate any of the rolled-back transactions. Zcash keeps Bitcoin's 100-block maturity interval for generation transactions, but because JoinSplits must be anchored within a block, this provides more limited protection against transactions becoming invalidated. In the case of a block chain reorganization for Zcash, all JoinSplits which were anchored within the reorganization interval and any transactions that depend on them will become invalid, rolling back transactions and reverting funds to the original owner. The transaction rebroadcast mechanism inherited from Bitcoin will not successfully rebroadcast transactions depending on invalidated JoinSplits if the anchor needs to change. The creator of an invalidated JoinSplit, as well as the creators of all transactions dependent on it, must rebroadcast the transactions themselves. Receivers of funds from a JoinSplit can mitigate the risk of relying on funds received from transactions that may be rolled back by using a higher minconf (minimum number of confirmations). + +Logging z_* RPC calls +--------------------- + +The option `-debug=zrpc` covers logging of the z_* calls. This will reveal information about private notes which you might prefer not to disclose. For example, when calling `z_sendmany` to create a shielded transaction, input notes are consumed and new output notes are created. + +The option `-debug=zrpcunsafe` covers logging of sensitive information in z_* calls which you would only need for debugging and audit purposes. For example, if you want to examine the memo field of a note being spent. + +Private spending keys for z addresses are never logged. From 446f867b4c0c714d7041a2ebb55b0baff4641f6e Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 15:23:34 -0700 Subject: [PATCH 053/165] Add debug option "zrpcunsafe" to be used when logging more sensitive information such as the memo field of a note. --- src/wallet/asyncrpcoperation_sendmany.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index d6f412192..eaa245857 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -780,7 +780,8 @@ bool AsyncRPCOperation_sendmany::find_unspent_notes() { for (CNotePlaintextEntry & entry : entries) { z_inputs_.push_back(SendManyInputJSOP(entry.jsop, entry.plaintext.note(frompaymentaddress_), CAmount(entry.plaintext.value))); std::string data(entry.plaintext.memo.begin(), entry.plaintext.memo.end()); - LogPrint("zrpc", "%s: found unspent note (txid=%s, vjoinsplit=%d, ciphertext=%d, amount=%s, memo=%s)\n", + if (LogAcceptCategory("zrpcunsafe")) { + LogPrint("zrpcunsafe", "%s: found unspent note (txid=%s, vjoinsplit=%d, ciphertext=%d, amount=%s, memo=%s)\n", getId().substr(0, 10), entry.jsop.hash.ToString().substr(0, 10), entry.jsop.js, @@ -788,6 +789,15 @@ bool AsyncRPCOperation_sendmany::find_unspent_notes() { FormatMoney(entry.plaintext.value, false), HexStr(data).substr(0, 10) ); + } else { + LogPrint("zrpc", "%s: found unspent note (txid=%s, vjoinsplit=%d, ciphertext=%d, amount=%s)\n", + getId().substr(0, 10), + entry.jsop.hash.ToString().substr(0, 10), + entry.jsop.js, + int(entry.jsop.n), // uint8_t + FormatMoney(entry.plaintext.value, false) + ); + } } if (z_inputs_.size() == 0) { From ffd2cb3437e802aa471544589bace2e59bbf0459 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 16:45:02 -0700 Subject: [PATCH 054/165] Closes #1583 by setting up the datadir for the wallet gtest. --- src/wallet/gtest/test_wallet.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/wallet/gtest/test_wallet.cpp b/src/wallet/gtest/test_wallet.cpp index c1bf5d34c..021de7c05 100644 --- a/src/wallet/gtest/test_wallet.cpp +++ b/src/wallet/gtest/test_wallet.cpp @@ -11,6 +11,8 @@ #include "zcash/Note.hpp" #include "zcash/NoteEncryption.hpp" +#include + using ::testing::Return; ZCJoinSplit* params = ZCJoinSplit::Unopened(); @@ -178,6 +180,13 @@ CWalletTx GetValidSpend(const libzcash::SpendingKey& sk, return wtx; } +TEST(wallet_tests, setup_datadir_location_run_as_first_test) { + // Get temporary and unique path for file. + boost::filesystem::path pathTemp = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path(); + boost::filesystem::create_directories(pathTemp); + mapArgs["-datadir"] = pathTemp.string(); +} + TEST(wallet_tests, note_data_serialisation) { auto sk = libzcash::SpendingKey::random(); auto wtx = GetValidReceive(sk, 10, true); From 75407c6872439da88517e1707d243d25565c0291 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 17:03:57 -0700 Subject: [PATCH 055/165] Fix issue where z_sendmany is too strict and does not allow integer based amount e.g. 1 which is the same as 1.0 --- src/wallet/rpcwallet.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 4d6608570..8e80400e2 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -3222,8 +3222,6 @@ Value z_sendmany(const Array& params, bool fHelp) throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, expected object"); const Object& o = output.get_obj(); - RPCTypeCheck(o, boost::assign::map_list_of("address", str_type)("amount", real_type)); - // sanity check, report error if unknown key-value pairs for (const Pair& p : o) { std::string s = p.name_; From 5eed758493dda80b7d70e6b955db87c0248b4b19 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 17:10:25 -0700 Subject: [PATCH 056/165] Update test to use integer amount as well as decimal amount when calling z_sendmany --- qa/rpc-tests/wallet.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qa/rpc-tests/wallet.py b/qa/rpc-tests/wallet.py index b2a2ee321..08d549d92 100755 --- a/qa/rpc-tests/wallet.py +++ b/qa/rpc-tests/wallet.py @@ -240,7 +240,7 @@ class WalletTest (BitcoinTestFramework): # send node 2 taddr to zaddr recipients = [] - recipients.append({"address":myzaddr, "amount":7.0}) + recipients.append({"address":myzaddr, "amount":7}) myopid = self.nodes[2].z_sendmany(mytaddr, recipients) opids = [] @@ -288,7 +288,7 @@ class WalletTest (BitcoinTestFramework): node2balance = self.nodes[2].getbalance() # 16.99790000 recipients = [] - recipients.append({"address":self.nodes[0].getnewaddress(), "amount":1.0}) + recipients.append({"address":self.nodes[0].getnewaddress(), "amount":1}) recipients.append({"address":self.nodes[2].getnewaddress(), "amount":1.0}) myopid = self.nodes[2].z_sendmany(myzaddr, recipients) From 5d985da5c1e56cb331580aa8b67e198ec6c7ce9b Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Fri, 21 Oct 2016 02:34:13 +0100 Subject: [PATCH 057/165] Repair check-security-hardening.sh. Signed-off-by: Daira Hopwood --- qa/zcash/check-security-hardening.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qa/zcash/check-security-hardening.sh b/qa/zcash/check-security-hardening.sh index 8e36cd84d..94a87fea3 100755 --- a/qa/zcash/check-security-hardening.sh +++ b/qa/zcash/check-security-hardening.sh @@ -32,7 +32,7 @@ make -C "$REPOROOT/src" check-security test_rpath_runpath "${REPOROOT}/src/zcashd" test_rpath_runpath "${REPOROOT}/src/zcash-cli" test_rpath_runpath "${REPOROOT}/src/zcash-gtest" -test_rpath_runpath "${REPOROOT}/src/bitcoin-tx" +test_rpath_runpath "${REPOROOT}/src/zcash-tx" test_rpath_runpath "${REPOROOT}/src/test/test_bitcoin" test_rpath_runpath "${REPOROOT}/src/zcash/GenerateParams" @@ -41,6 +41,6 @@ test_rpath_runpath "${REPOROOT}/src/zcash/GenerateParams" test_fortify_source "${REPOROOT}/src/zcashd" test_fortify_source "${REPOROOT}/src/zcash-cli" test_fortify_source "${REPOROOT}/src/zcash-gtest" -test_fortify_source "${REPOROOT}/src/bitcoin-tx" +test_fortify_source "${REPOROOT}/src/zcash-tx" test_fortify_source "${REPOROOT}/src/test/test_bitcoin" test_fortify_source "${REPOROOT}/src/zcash/GenerateParams" From f19cb7b7eeda8ae0a31340795ef7cfbf09557d47 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Fri, 21 Oct 2016 03:14:40 +0100 Subject: [PATCH 058/165] Revert "Avoid boost::posix_time functions that have potential out-of-bounds read bugs. ref #1459" This reverts commit a652e4183ec8e0a8041a7f29c85e36557acac327. --- src/utiltime.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/utiltime.cpp b/src/utiltime.cpp index a7cdeb114..d31628899 100644 --- a/src/utiltime.cpp +++ b/src/utiltime.cpp @@ -9,7 +9,6 @@ #include "utiltime.h" -#include #include #include @@ -31,14 +30,14 @@ void SetMockTime(int64_t nMockTimeIn) int64_t GetTimeMillis() { - return std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()).count(); + return (boost::posix_time::microsec_clock::universal_time() - + boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds(); } int64_t GetTimeMicros() { - return std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()).count(); + return (boost::posix_time::microsec_clock::universal_time() - + boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_microseconds(); } void MilliSleep(int64_t n) From e496b2e391d0ec4504ea752dea21f68132f44f7f Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 29 Jul 2016 17:42:12 +0200 Subject: [PATCH 059/165] net: Ignore `notfound` P2P messages --- src/main.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 2b09a50d6..395bae377 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5082,8 +5082,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } - else - { + else if (strCommand == NetMsgType::NOTFOUND) { + // We do not care about the NOTFOUND message, but logging an Unknown Command + // message would be undesirable as we transmit it ourselves. + } + + else { // Ignore unknown commands for extensibility LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand), pfrom->id); } From a514cb29688a27aaba917ae535f3c75dcd67834b Mon Sep 17 00:00:00 2001 From: Gregory Maxwell Date: Mon, 11 Apr 2016 01:09:34 +0000 Subject: [PATCH 060/165] Only send one GetAddr response per connection. This conserves resources from abusive peers that just send getaddr in a loop. Also makes correlating addr messages against INVs less effective. --- src/main.cpp | 8 ++++++++ src/net.cpp | 1 + src/net.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index 2b09a50d6..0368f56a9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4867,6 +4867,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, // the getaddr message mitigates the attack. else if ((strCommand == "getaddr") && (pfrom->fInbound)) { + // Only send one GetAddr response per connection to reduce resource waste + // and discourage addr stamping of INV announcements. + if (pfrom->fSentAddr) { + LogPrint("net", "Ignoring repeated \"getaddr\". peer=%d\n", pfrom->id); + return true; + } + pfrom->fSentAddr = true; + pfrom->vAddrToSend.clear(); vector vAddr = addrman.GetAddr(); BOOST_FOREACH(const CAddress &addr, vAddr) diff --git a/src/net.cpp b/src/net.cpp index 636e3d5e7..0a96d01f2 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2142,6 +2142,7 @@ CNode::CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn, bool fIn nStartingHeight = -1; fGetAddr = false; fRelayTxes = false; + fSentAddr = false; pfilter = new CBloomFilter(); nPingNonceSent = 0; nPingUsecStart = 0; diff --git a/src/net.h b/src/net.h index 44f14fd43..50fb90dca 100644 --- a/src/net.h +++ b/src/net.h @@ -278,6 +278,7 @@ public: // b) the peer may tell us in its version message that we should not relay tx invs // until it has initialized its bloom filter. bool fRelayTxes; + bool fSentAddr; CSemaphoreGrant grantOutbound; CCriticalSection cs_filter; CBloomFilter* pfilter; From 4c6ea562bd50d00594b9549d29f095fe5c38dfda Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Mon, 25 Apr 2016 12:31:45 +0200 Subject: [PATCH 061/165] Introduce constant for maximum CScript length --- src/script/interpreter.cpp | 2 +- src/script/script.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp index ccc989577..19a6a8f4f 100644 --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -252,7 +252,7 @@ bool EvalScript(vector >& stack, const CScript& script, un vector vfExec; vector altstack; set_error(serror, SCRIPT_ERR_UNKNOWN_ERROR); - if (script.size() > 10000) + if (script.size() > MAX_SCRIPT_SIZE) return set_error(serror, SCRIPT_ERR_SCRIPT_SIZE); int nOpCount = 0; bool fRequireMinimal = (flags & SCRIPT_VERIFY_MINIMALDATA) != 0; diff --git a/src/script/script.h b/src/script/script.h index 79bd61630..8307aed2e 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -19,6 +19,9 @@ static const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520; // bytes +// Maximum script length in bytes +static const int MAX_SCRIPT_SIZE = 10000; + // Threshold for nLockTime: below this value it is interpreted as block number, // otherwise as UNIX timestamp. static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC From 6fc5764eda115e0c6b348cab2cd5653641fb4a43 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Mon, 25 Apr 2016 12:32:01 +0200 Subject: [PATCH 062/165] Treat overly long scriptPubKeys as unspendable --- src/script/script.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/script.h b/src/script/script.h index 8307aed2e..e0e89185f 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -573,7 +573,7 @@ public: */ bool IsUnspendable() const { - return (size() > 0 && *begin() == OP_RETURN); + return (size() > 0 && *begin() == OP_RETURN) || (size() > MAX_SCRIPT_SIZE); } std::string ToString() const; From f588c5edd61f9b7d598f5885344c87300bcce690 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Sun, 24 Apr 2016 16:21:44 +0200 Subject: [PATCH 063/165] Fix OOM bug: UTXO entries with invalid script length --- src/compressor.h | 10 ++++++++-- src/streams.h | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/compressor.h b/src/compressor.h index 4a7209083..fa702f0df 100644 --- a/src/compressor.h +++ b/src/compressor.h @@ -86,8 +86,14 @@ public: return; } nSize -= nSpecialScripts; - script.resize(nSize); - s >> REF(CFlatData(script)); + if (nSize > MAX_SCRIPT_SIZE) { + // Overly long script, replace with a short invalid one + script << OP_RETURN; + s.ignore(nSize); + } else { + script.resize(nSize); + s >> REF(CFlatData(script)); + } } }; diff --git a/src/streams.h b/src/streams.h index 787d8e297..fdba4622f 100644 --- a/src/streams.h +++ b/src/streams.h @@ -406,6 +406,20 @@ public: return (*this); } + CAutoFile& ignore(size_t nSize) + { + if (!file) + throw std::ios_base::failure("CAutoFile::ignore: file handle is NULL"); + unsigned char data[4096]; + while (nSize > 0) { + size_t nNow = std::min(nSize, sizeof(data)); + if (fread(data, 1, nNow, file) != nNow) + throw std::ios_base::failure(feof(file) ? "CAutoFile::ignore: end of file" : "CAutoFile::read: fread failed"); + nSize -= nNow; + } + return (*this); + } + CAutoFile& write(const char* pch, size_t nSize) { if (!file) From e9d221e764be5731a785f063f3b9fce5a3bd4bfa Mon Sep 17 00:00:00 2001 From: Patrick Strateman Date: Sun, 24 Apr 2016 21:59:46 -0700 Subject: [PATCH 064/165] CDataStream::ignore Throw exception instead of assert on negative nSize. Previously disk corruption would cause an assert instead of an exception. --- src/streams.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/streams.h b/src/streams.h index fdba4622f..9b678b3c0 100644 --- a/src/streams.h +++ b/src/streams.h @@ -241,7 +241,9 @@ public: CBaseDataStream& ignore(int nSize) { // Ignore from the beginning of the buffer - assert(nSize >= 0); + if (nSize < 0) { + throw std::ios_base::failure("CDataStream::ignore(): nSize negative"); + } unsigned int nReadPosNext = nReadPos + nSize; if (nReadPosNext >= vch.size()) { From abd22bb674ce2ef584fc875fdb28255f25432a7b Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Mon, 25 Apr 2016 14:05:36 +0200 Subject: [PATCH 065/165] Add tests for CCoins deserialization --- src/test/coins_tests.cpp | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/src/test/coins_tests.cpp b/src/test/coins_tests.cpp index 695a8b05d..029949dd4 100644 --- a/src/test/coins_tests.cpp +++ b/src/test/coins_tests.cpp @@ -4,7 +4,9 @@ #include "coins.h" #include "random.h" +#include "script/standard.h" #include "uint256.h" +#include "utilstrencodings.h" #include "test/test_bitcoin.h" #include "consensus/validation.h" #include "main.h" @@ -524,4 +526,73 @@ BOOST_AUTO_TEST_CASE(coins_coinbase_spends) } } +BOOST_AUTO_TEST_CASE(ccoins_serialization) +{ + // Good example + CDataStream ss1(ParseHex("0104835800816115944e077fe7c803cfa57f29b36bf87c1d358bb85e"), SER_DISK, CLIENT_VERSION); + CCoins cc1; + ss1 >> cc1; + BOOST_CHECK_EQUAL(cc1.nVersion, 1); + BOOST_CHECK_EQUAL(cc1.fCoinBase, false); + BOOST_CHECK_EQUAL(cc1.nHeight, 203998); + BOOST_CHECK_EQUAL(cc1.vout.size(), 2); + BOOST_CHECK_EQUAL(cc1.IsAvailable(0), false); + BOOST_CHECK_EQUAL(cc1.IsAvailable(1), true); + BOOST_CHECK_EQUAL(cc1.vout[1].nValue, 60000000000ULL); + BOOST_CHECK_EQUAL(HexStr(cc1.vout[1].scriptPubKey), HexStr(GetScriptForDestination(CKeyID(uint160(ParseHex("816115944e077fe7c803cfa57f29b36bf87c1d35")))))); + + // Good example + CDataStream ss2(ParseHex("0109044086ef97d5790061b01caab50f1b8e9c50a5057eb43c2d9563a4eebbd123008c988f1a4a4de2161e0f50aac7f17e7f9555caa486af3b"), SER_DISK, CLIENT_VERSION); + CCoins cc2; + ss2 >> cc2; + BOOST_CHECK_EQUAL(cc2.nVersion, 1); + BOOST_CHECK_EQUAL(cc2.fCoinBase, true); + BOOST_CHECK_EQUAL(cc2.nHeight, 120891); + BOOST_CHECK_EQUAL(cc2.vout.size(), 17); + for (int i = 0; i < 17; i++) { + BOOST_CHECK_EQUAL(cc2.IsAvailable(i), i == 4 || i == 16); + } + BOOST_CHECK_EQUAL(cc2.vout[4].nValue, 234925952); + BOOST_CHECK_EQUAL(HexStr(cc2.vout[4].scriptPubKey), HexStr(GetScriptForDestination(CKeyID(uint160(ParseHex("61b01caab50f1b8e9c50a5057eb43c2d9563a4ee")))))); + BOOST_CHECK_EQUAL(cc2.vout[16].nValue, 110397); + BOOST_CHECK_EQUAL(HexStr(cc2.vout[16].scriptPubKey), HexStr(GetScriptForDestination(CKeyID(uint160(ParseHex("8c988f1a4a4de2161e0f50aac7f17e7f9555caa4")))))); + + // Smallest possible example + CDataStream ssx(SER_DISK, CLIENT_VERSION); + BOOST_CHECK_EQUAL(HexStr(ssx.begin(), ssx.end()), ""); + + CDataStream ss3(ParseHex("0002000600"), SER_DISK, CLIENT_VERSION); + CCoins cc3; + ss3 >> cc3; + BOOST_CHECK_EQUAL(cc3.nVersion, 0); + BOOST_CHECK_EQUAL(cc3.fCoinBase, false); + BOOST_CHECK_EQUAL(cc3.nHeight, 0); + BOOST_CHECK_EQUAL(cc3.vout.size(), 1); + BOOST_CHECK_EQUAL(cc3.IsAvailable(0), true); + BOOST_CHECK_EQUAL(cc3.vout[0].nValue, 0); + BOOST_CHECK_EQUAL(cc3.vout[0].scriptPubKey.size(), 0); + + // scriptPubKey that ends beyond the end of the stream + CDataStream ss4(ParseHex("0002000800"), SER_DISK, CLIENT_VERSION); + try { + CCoins cc4; + ss4 >> cc4; + BOOST_CHECK_MESSAGE(false, "We should have thrown"); + } catch (const std::ios_base::failure& e) { + } + + // Very large scriptPubKey (3*10^9 bytes) past the end of the stream + CDataStream tmp(SER_DISK, CLIENT_VERSION); + uint64_t x = 3000000000ULL; + tmp << VARINT(x); + BOOST_CHECK_EQUAL(HexStr(tmp.begin(), tmp.end()), "8a95c0bb00"); + CDataStream ss5(ParseHex("0002008a95c0bb0000"), SER_DISK, CLIENT_VERSION); + try { + CCoins cc5; + ss5 >> cc5; + BOOST_CHECK_MESSAGE(false, "We should have thrown"); + } catch (const std::ios_base::failure& e) { + } +} + BOOST_AUTO_TEST_SUITE_END() From 43f0769cf62e690a7601aefaf62e698417fd243c Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 20 Oct 2016 23:50:19 -0700 Subject: [PATCH 066/165] Fix build problem with coins_tests --- src/test/coins_tests.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/coins_tests.cpp b/src/test/coins_tests.cpp index 029949dd4..8f626d9ab 100644 --- a/src/test/coins_tests.cpp +++ b/src/test/coins_tests.cpp @@ -11,6 +11,7 @@ #include "consensus/validation.h" #include "main.h" #include "undo.h" +#include "pubkey.h" #include #include From f0f838f081a414ba43a1b943f23f46f39b14dbc3 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Fri, 21 Oct 2016 17:20:36 +0100 Subject: [PATCH 067/165] Fix race condition in rpc-tests/wallet_protectcoinbase.py. closes #1597 Signed-off-by: Daira Hopwood --- qa/rpc-tests/wallet_protectcoinbase.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/qa/rpc-tests/wallet_protectcoinbase.py b/qa/rpc-tests/wallet_protectcoinbase.py index 78550e4c1..f32ca6795 100755 --- a/qa/rpc-tests/wallet_protectcoinbase.py +++ b/qa/rpc-tests/wallet_protectcoinbase.py @@ -72,6 +72,7 @@ class Wallet2Test (BitcoinTestFramework): recipients.append({"address":myzaddr, "amount":20.0}) myopid = self.nodes[0].z_sendmany(mytaddr, recipients) self.wait_for_operationd_success(myopid) + self.sync_all() self.nodes[1].generate(1) self.sync_all() @@ -86,6 +87,7 @@ class Wallet2Test (BitcoinTestFramework): recipients.append({"address":mytaddr, "amount":20.0}) myopid = self.nodes[0].z_sendmany(myzaddr, recipients) self.wait_for_operationd_success(myopid) + self.sync_all() self.nodes[1].generate(1) self.sync_all() @@ -116,6 +118,7 @@ class Wallet2Test (BitcoinTestFramework): except JSONRPCException: assert(False) + self.sync_all() self.nodes[1].generate(10) self.sync_all() From deba66ca5551234dc2f9cc7fc750b80cea85746a Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sat, 22 Oct 2016 00:37:14 +0100 Subject: [PATCH 068/165] Fix other potential race conditions similar to ref #1597 in RPC tests. Signed-off-by: Daira Hopwood --- qa/rpc-tests/wallet.py | 11 +++++++++++ qa/rpc-tests/wallet_nullifiers.py | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/qa/rpc-tests/wallet.py b/qa/rpc-tests/wallet.py index b2a2ee321..310ee5e55 100755 --- a/qa/rpc-tests/wallet.py +++ b/qa/rpc-tests/wallet.py @@ -51,6 +51,7 @@ class WalletTest (BitcoinTestFramework): assert_equal(walletinfo['immature_balance'], 0) # Have node0 mine a block, thus it will collect its own fee. + self.sync_all() self.nodes[0].generate(1) self.sync_all() @@ -87,6 +88,7 @@ class WalletTest (BitcoinTestFramework): self.nodes[1].sendrawtransaction(txns_to_send[2]["hex"], True) # Have node1 mine a block to confirm transactions: + self.sync_all() self.nodes[1].generate(1) self.sync_all() @@ -99,6 +101,7 @@ class WalletTest (BitcoinTestFramework): address = self.nodes[0].getnewaddress("") self.nodes[2].settxfee(Decimal('0.001')) txid = self.nodes[2].sendtoaddress(address, 10, "", "", False) + self.sync_all() self.nodes[2].generate(1) self.sync_all() assert_equal(self.nodes[2].getbalance(), Decimal('39.99900000')) @@ -108,6 +111,7 @@ class WalletTest (BitcoinTestFramework): # Send 10 BTC with subtract fee from amount txid = self.nodes[2].sendtoaddress(address, 10, "", "", True) + self.sync_all() self.nodes[2].generate(1) self.sync_all() assert_equal(self.nodes[2].getbalance(), Decimal('29.99900000')) @@ -117,6 +121,7 @@ class WalletTest (BitcoinTestFramework): # Sendmany 10 BTC txid = self.nodes[2].sendmany("", {address: 10}, 0, "", []) + self.sync_all() self.nodes[2].generate(1) self.sync_all() assert_equal(self.nodes[2].getbalance(), Decimal('19.99800000')) @@ -126,6 +131,7 @@ class WalletTest (BitcoinTestFramework): # Sendmany 10 BTC with subtract fee from amount txid = self.nodes[2].sendmany("", {address: 10}, 0, "", [address]) + self.sync_all() self.nodes[2].generate(1) self.sync_all() assert_equal(self.nodes[2].getbalance(), Decimal('9.99800000')) @@ -190,6 +196,7 @@ class WalletTest (BitcoinTestFramework): txIdNotBroadcasted = self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 2); txObjNotBroadcasted = self.nodes[0].gettransaction(txIdNotBroadcasted) + self.sync_all() self.nodes[1].generate(1) #mine a block, tx should not be in there self.sync_all() assert_equal(self.nodes[2].getbalance(), Decimal('9.99800000')); #should not be changed because tx was not broadcasted @@ -197,6 +204,7 @@ class WalletTest (BitcoinTestFramework): #now broadcast from another node, mine a block, sync, and check the balance self.nodes[1].sendrawtransaction(txObjNotBroadcasted['hex']) + self.sync_all() self.nodes[1].generate(1) self.sync_all() txObjNotBroadcasted = self.nodes[0].gettransaction(txIdNotBroadcasted) @@ -225,6 +233,7 @@ class WalletTest (BitcoinTestFramework): # send from node 0 to node 2 taddr mytaddr = self.nodes[2].getnewaddress(); mytxid = self.nodes[0].sendtoaddress(mytaddr, 10.0); + self.sync_all() self.nodes[0].generate(1) self.sync_all() @@ -258,6 +267,7 @@ class WalletTest (BitcoinTestFramework): break assert_equal("success", status) + self.sync_all() self.nodes[2].generate(1) self.sync_all() @@ -304,6 +314,7 @@ class WalletTest (BitcoinTestFramework): break assert_equal("success", status) + self.sync_all() self.nodes[2].generate(1) self.sync_all() diff --git a/qa/rpc-tests/wallet_nullifiers.py b/qa/rpc-tests/wallet_nullifiers.py index 6d7449138..143963e36 100755 --- a/qa/rpc-tests/wallet_nullifiers.py +++ b/qa/rpc-tests/wallet_nullifiers.py @@ -39,6 +39,7 @@ class WalletNullifiersTest (BitcoinTestFramework): mytxid = results[0]["result"]["txid"] break + self.sync_all() self.nodes[0].generate(1) self.sync_all() @@ -79,6 +80,7 @@ class WalletNullifiersTest (BitcoinTestFramework): mytxid = results[0]["result"]["txid"] break + self.sync_all() self.nodes[0].generate(1) self.sync_all() @@ -110,6 +112,7 @@ class WalletNullifiersTest (BitcoinTestFramework): mytxid = results[0]["result"]["txid"] break + self.sync_all() self.nodes[2].generate(1) self.sync_all() @@ -150,6 +153,7 @@ class WalletNullifiersTest (BitcoinTestFramework): mytxid = results[0]["result"]["txid"] break + self.sync_all() self.nodes[1].generate(1) self.sync_all() From 09864abc558ea26cdec0f70927d60b8d1a851a70 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 21 Oct 2016 23:14:00 -0500 Subject: [PATCH 069/165] Revert "Revert "Avoid boost::posix_time functions that have potential out-of-bounds read bugs. ref #1459"" This reverts commit f19cb7b7eeda8ae0a31340795ef7cfbf09557d47. --- src/utiltime.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/utiltime.cpp b/src/utiltime.cpp index d31628899..a7cdeb114 100644 --- a/src/utiltime.cpp +++ b/src/utiltime.cpp @@ -9,6 +9,7 @@ #include "utiltime.h" +#include #include #include @@ -30,14 +31,14 @@ void SetMockTime(int64_t nMockTimeIn) int64_t GetTimeMillis() { - return (boost::posix_time::microsec_clock::universal_time() - - boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds(); + return std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()).count(); } int64_t GetTimeMicros() { - return (boost::posix_time::microsec_clock::universal_time() - - boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_microseconds(); + return std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()).count(); } void MilliSleep(int64_t n) From 53ddbaed16448821857dbf6077f06c3e45c8bcde Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 22 Sep 2016 22:41:45 +1200 Subject: [PATCH 070/165] GBT: Support coinbasetxn instead of coinbasevalue Once a Zcash GBT spec has been written, we can re-enable coinbasevalue. --- src/rpcmining.cpp | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 7f2d01f88..8d6408f56 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -389,10 +389,10 @@ Value getblocktemplate(const Array& params, bool fHelp) " }\n" " ,...\n" " ],\n" - " \"coinbaseaux\" : { (json object) data that should be included in the coinbase's scriptSig content\n" - " \"flags\" : \"flags\" (string) \n" - " },\n" - " \"coinbasevalue\" : n, (numeric) maximum allowable input to coinbase transaction, including the generation award and transaction fees (in Satoshis)\n" +// " \"coinbaseaux\" : { (json object) data that should be included in the coinbase's scriptSig content\n" +// " \"flags\" : \"flags\" (string) \n" +// " },\n" +// " \"coinbasevalue\" : n, (numeric) maximum allowable input to coinbase transaction, including the generation award and transaction fees (in Satoshis)\n" " \"coinbasetxn\" : { ... }, (json object) information for coinbase transaction\n" " \"target\" : \"xxxx\", (string) The hash target\n" " \"mintime\" : xxx, (numeric) The minimum timestamp appropriate for next block time in seconds since epoch (Jan 1 1970 GMT)\n" @@ -415,8 +415,15 @@ Value getblocktemplate(const Array& params, bool fHelp) LOCK(cs_main); + // Wallet is required because we support coinbasetxn + if (pwalletMain == NULL) { + throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Method not found (disabled)"); + } + std::string strMode = "template"; Value lpval = Value::null; + // TODO: Re-enable coinbasevalue once a specification has been written + bool coinbasetxn = true; if (params.size() > 0) { const Object& oparam = params[0].get_obj(); @@ -529,7 +536,7 @@ Value getblocktemplate(const Array& params, bool fHelp) // Clear pindexPrev so future calls make a new block, despite any failures from here on pindexPrev = NULL; - // Store the pindexBest used before CreateNewBlock, to avoid races + // Store the pindexBest used before CreateNewBlockWithKey, to avoid races nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); CBlockIndex* pindexPrevNew = chainActive.Tip(); nStart = GetTime(); @@ -540,12 +547,12 @@ Value getblocktemplate(const Array& params, bool fHelp) delete pblocktemplate; pblocktemplate = NULL; } - CScript scriptDummy = CScript() << OP_TRUE; - pblocktemplate = CreateNewBlock(scriptDummy); + CReserveKey reservekey(pwalletMain); + pblocktemplate = CreateNewBlockWithKey(reservekey); if (!pblocktemplate) throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory"); - // Need to update only after we know CreateNewBlock succeeded + // Need to update only after we know CreateNewBlockWithKey succeeded pindexPrev = pindexPrevNew; } CBlock* pblock = &pblocktemplate->block; // pointer for convenience @@ -556,6 +563,7 @@ Value getblocktemplate(const Array& params, bool fHelp) static const Array aCaps = boost::assign::list_of("proposal"); + Value txCoinbase = Value::null; Array transactions; map setTxIndex; int i = 0; @@ -564,7 +572,7 @@ Value getblocktemplate(const Array& params, bool fHelp) uint256 txHash = tx.GetHash(); setTxIndex[txHash] = i++; - if (tx.IsCoinBase()) + if (tx.IsCoinBase() && !coinbasetxn) continue; Object entry; @@ -585,7 +593,12 @@ Value getblocktemplate(const Array& params, bool fHelp) entry.push_back(Pair("fee", pblocktemplate->vTxFees[index_in_template])); entry.push_back(Pair("sigops", pblocktemplate->vTxSigOps[index_in_template])); - transactions.push_back(entry); + if (tx.IsCoinBase()) { + entry.push_back(Pair("required", true)); + txCoinbase = entry; + } else { + transactions.push_back(entry); + } } Object aux; @@ -606,8 +619,13 @@ Value getblocktemplate(const Array& params, bool fHelp) result.push_back(Pair("version", pblock->nVersion)); result.push_back(Pair("previousblockhash", pblock->hashPrevBlock.GetHex())); result.push_back(Pair("transactions", transactions)); - result.push_back(Pair("coinbaseaux", aux)); - result.push_back(Pair("coinbasevalue", (int64_t)pblock->vtx[0].vout[0].nValue)); + if (coinbasetxn) { + assert(txCoinbase.type() == obj_type); + result.push_back(Pair("coinbasetxn", txCoinbase)); + } else { + result.push_back(Pair("coinbaseaux", aux)); + result.push_back(Pair("coinbasevalue", (int64_t)pblock->vtx[0].vout[0].nValue)); + } result.push_back(Pair("longpollid", chainActive.Tip()->GetBlockHash().GetHex() + i64tostr(nTransactionsUpdatedLast))); result.push_back(Pair("target", hashTarget.GetHex())); result.push_back(Pair("mintime", (int64_t)pindexPrev->GetMedianTimePast()+1)); From 89aa746ca12e36f28dc5f2b693f3e5d3d01c8842 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 23 Sep 2016 00:16:13 +1200 Subject: [PATCH 071/165] GBT: Add informational founders' reward value to coinbasetxn --- src/rpcmining.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 8d6408f56..acdf366a1 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -594,6 +594,11 @@ Value getblocktemplate(const Array& params, bool fHelp) entry.push_back(Pair("sigops", pblocktemplate->vTxSigOps[index_in_template])); if (tx.IsCoinBase()) { + // Show founders' reward if it is required + if (pblock->vtx[0].vout.size() > 1) { + // Correct this if GetBlockTemplate changes the order + entry.push_back(Pair("foundersreward", (int64_t)tx.vout[1].nValue)); + } entry.push_back(Pair("required", true)); txCoinbase = entry; } else { From 1628efedaf6c57e10661104a1ff6586e502658b2 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sat, 1 Oct 2016 17:26:59 +1300 Subject: [PATCH 072/165] GBT: Correct block header in proposals RPC test --- qa/rpc-tests/getblocktemplate_proposals.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/qa/rpc-tests/getblocktemplate_proposals.py b/qa/rpc-tests/getblocktemplate_proposals.py index aca0cd749..0c9e7e4cc 100755 --- a/qa/rpc-tests/getblocktemplate_proposals.py +++ b/qa/rpc-tests/getblocktemplate_proposals.py @@ -71,9 +71,11 @@ def genmrklroot(leaflist): def template_to_bytes(tmpl, txlist): blkver = pack(' Date: Mon, 10 Oct 2016 15:24:00 -0500 Subject: [PATCH 073/165] GBT: Add RPC tests --- qa/pull-tester/rpc-tests.sh | 1 + qa/rpc-tests/getblocktemplate.py | 58 ++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100755 qa/rpc-tests/getblocktemplate.py diff --git a/qa/pull-tester/rpc-tests.sh b/qa/pull-tester/rpc-tests.sh index b44df9d7b..13ddc461f 100755 --- a/qa/pull-tester/rpc-tests.sh +++ b/qa/pull-tester/rpc-tests.sh @@ -31,6 +31,7 @@ testScripts=( 'walletbackup.py' 'zcjoinsplit.py' 'zcjoinsplitdoublespend.py' + 'getblocktemplate.py' ); testScriptsExt=( 'bipdersig-p2p.py' diff --git a/qa/rpc-tests/getblocktemplate.py b/qa/rpc-tests/getblocktemplate.py new file mode 100755 index 000000000..2610e257b --- /dev/null +++ b/qa/rpc-tests/getblocktemplate.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python2 +# Copyright (c) 2016 The Zcash developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +from test_framework.test_framework import BitcoinTestFramework +from test_framework.util import * + + +class GetBlockTemplateTest(BitcoinTestFramework): + ''' + Test getblocktemplate. + ''' + + def setup_chain(self): + print("Initializing test directory "+self.options.tmpdir) + initialize_chain_clean(self.options.tmpdir, 4) + + def setup_network(self, split=False): + self.nodes = start_nodes(2, self.options.tmpdir) + connect_nodes_bi(self.nodes,0,1) + self.is_network_split=False + self.sync_all() + + def run_test(self): + node = self.nodes[0] + node.generate(1) # Mine a block to leave initial block download + + # Test 1: Default to coinbasetxn + tmpl = node.getblocktemplate() + assert('coinbasetxn' in tmpl) + assert('coinbasevalue' not in tmpl) + + # Test 2: Get coinbasetxn if requested + tmpl = node.getblocktemplate({'capabilities': ['coinbasetxn']}) + assert('coinbasetxn' in tmpl) + assert('coinbasevalue' not in tmpl) + + # Test 3: coinbasevalue not supported if requested + tmpl = node.getblocktemplate({'capabilities': ['coinbasevalue']}) + assert('coinbasetxn' in tmpl) + assert('coinbasevalue' not in tmpl) + + # Test 4: coinbasevalue not supported if both requested + tmpl = node.getblocktemplate({'capabilities': ['coinbasetxn', 'coinbasevalue']}) + assert('coinbasetxn' in tmpl) + assert('coinbasevalue' not in tmpl) + + # Test 5: General checks + tmpl = node.getblocktemplate() + assert(len(tmpl['noncerange']) == 8) + + # Test 6: coinbasetxn checks + assert('foundersreward' in tmpl['coinbasetxn']) + assert(tmpl['coinbasetxn']['required']) + +if __name__ == '__main__': + GetBlockTemplateTest().main() From e11e61ddb1357e7fb4abc02e5232f37adc146e5c Mon Sep 17 00:00:00 2001 From: Simon Date: Fri, 21 Oct 2016 09:12:24 -0700 Subject: [PATCH 074/165] Workaround g++ 5.x bug with brace enclosed initializer. http://stackoverflow.com/questions/32912921/whats-wrong-with-this-inline-initialization-of-stdarray/32912976#32912976 --- src/primitives/transaction.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 31b057796..34c5f1eb6 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -52,7 +52,7 @@ public: // These contain trapdoors, values and other information // that the recipient needs, including a memo field. It // is encrypted using the scheme implemented in crypto/NoteEncryption.cpp - boost::array ciphertexts = {0}; + boost::array ciphertexts = {{ {{0}} }}; // Random seed uint256 randomSeed; @@ -307,7 +307,7 @@ public: const uint32_t nLockTime; const std::vector vjoinsplit; const uint256 joinSplitPubKey; - const joinsplit_sig_t joinSplitSig = {0}; + const joinsplit_sig_t joinSplitSig = {{0}}; /** Construct a CTransaction that qualifies as IsNull() */ CTransaction(); @@ -386,7 +386,7 @@ struct CMutableTransaction uint32_t nLockTime; std::vector vjoinsplit; uint256 joinSplitPubKey; - CTransaction::joinsplit_sig_t joinSplitSig = {0}; + CTransaction::joinsplit_sig_t joinSplitSig = {{0}}; CMutableTransaction(); CMutableTransaction(const CTransaction& tx); From 7ac924cdb7bdad2601c46014e488e9190806b38c Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 21 Oct 2016 23:07:50 -0500 Subject: [PATCH 075/165] Disallow v0 transactions as a consensus rule Closes #1557 --- src/consensus/consensus.h | 2 ++ src/gtest/test_checktransaction.cpp | 10 ++++++++++ src/main.cpp | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/src/consensus/consensus.h b/src/consensus/consensus.h index 0d1a3fdde..6472885a8 100644 --- a/src/consensus/consensus.h +++ b/src/consensus/consensus.h @@ -6,6 +6,8 @@ #ifndef BITCOIN_CONSENSUS_CONSENSUS_H #define BITCOIN_CONSENSUS_CONSENSUS_H +/** The minimum allowed transaction version (network rule) */ +static const int32_t MIN_TX_VERSION = 1; /** The maximum allowed size for a serialized block, in bytes (network rule) */ static const unsigned int MAX_BLOCK_SIZE = 2000000; /** The maximum allowed number of signature check operations in a block (network rule) */ diff --git a/src/gtest/test_checktransaction.cpp b/src/gtest/test_checktransaction.cpp index 7dd1b86d2..3849cf367 100644 --- a/src/gtest/test_checktransaction.cpp +++ b/src/gtest/test_checktransaction.cpp @@ -94,6 +94,16 @@ TEST(checktransaction_tests, valid_transaction) { EXPECT_TRUE(CheckTransactionWithoutProofVerification(tx, state)); } +TEST(checktransaction_tests, BadVersionTooLow) { + CMutableTransaction mtx = GetValidTransaction(); + mtx.nVersion = 0; + + CTransaction tx(mtx); + MockCValidationState state; + EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "bad-version-too-low", false)).Times(1); + CheckTransactionWithoutProofVerification(tx, state); +} + TEST(checktransaction_tests, bad_txns_vin_empty) { CMutableTransaction mtx = GetValidTransaction(); mtx.vjoinsplit.resize(0); diff --git a/src/main.cpp b/src/main.cpp index 39bbf8ff7..3b089ede4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -851,6 +851,12 @@ bool CheckTransactionWithoutProofVerification(const CTransaction& tx, CValidatio { // Basic checks that don't depend on any context + // Check transaction version + if (tx.nVersion < MIN_TX_VERSION) { + return state.DoS(100, error("CheckTransaction(): version too low"), + REJECT_INVALID, "bad-version-too-low"); + } + // Transactions can contain empty `vin` and `vout` so long as // `vjoinsplit` is non-empty. if (tx.vin.empty() && tx.vjoinsplit.empty()) From 80f4cdcf8f43743fc428ad704d76f1dab48e5b8f Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 20 Oct 2016 15:26:34 -0500 Subject: [PATCH 076/165] Reject block versions lower than 4 Closes #1556 --- src/Makefile.gtest.include | 1 + src/consensus/consensus.h | 2 ++ src/gtest/test_checkblock.cpp | 31 +++++++++++++++++++++++++++++++ src/main.cpp | 5 +++++ 4 files changed, 39 insertions(+) create mode 100644 src/gtest/test_checkblock.cpp diff --git a/src/Makefile.gtest.include b/src/Makefile.gtest.include index 5ee9c1fe0..8c41ef783 100644 --- a/src/Makefile.gtest.include +++ b/src/Makefile.gtest.include @@ -5,6 +5,7 @@ bin_PROGRAMS += zcash-gtest zcash_gtest_SOURCES = \ gtest/main.cpp \ gtest/utils.cpp \ + gtest/test_checkblock.cpp \ gtest/test_checktransaction.cpp \ gtest/json_test_vectors.cpp \ gtest/json_test_vectors.h \ diff --git a/src/consensus/consensus.h b/src/consensus/consensus.h index 6472885a8..d700666bc 100644 --- a/src/consensus/consensus.h +++ b/src/consensus/consensus.h @@ -6,6 +6,8 @@ #ifndef BITCOIN_CONSENSUS_CONSENSUS_H #define BITCOIN_CONSENSUS_CONSENSUS_H +/** The minimum allowed block version (network rule) */ +static const int32_t MIN_BLOCK_VERSION = 4; /** The minimum allowed transaction version (network rule) */ static const int32_t MIN_TX_VERSION = 1; /** The maximum allowed size for a serialized block, in bytes (network rule) */ diff --git a/src/gtest/test_checkblock.cpp b/src/gtest/test_checkblock.cpp new file mode 100644 index 000000000..be6fde35e --- /dev/null +++ b/src/gtest/test_checkblock.cpp @@ -0,0 +1,31 @@ +#include +#include + +#include "consensus/validation.h" +#include "main.h" + +class MockCValidationState : public CValidationState { +public: + MOCK_METHOD5(DoS, bool(int level, bool ret, + unsigned char chRejectCodeIn, std::string strRejectReasonIn, + bool corruptionIn)); + MOCK_METHOD3(Invalid, bool(bool ret, + unsigned char _chRejectCode, std::string _strRejectReason)); + MOCK_METHOD1(Error, bool(std::string strRejectReasonIn)); + MOCK_CONST_METHOD0(IsValid, bool()); + MOCK_CONST_METHOD0(IsInvalid, bool()); + MOCK_CONST_METHOD0(IsError, bool()); + MOCK_CONST_METHOD1(IsInvalid, bool(int &nDoSOut)); + MOCK_CONST_METHOD0(CorruptionPossible, bool()); + MOCK_CONST_METHOD0(GetRejectCode, unsigned char()); + MOCK_CONST_METHOD0(GetRejectReason, std::string()); +}; + +TEST(CheckBlock, VersionTooLow) { + CBlock block; + block.nVersion = 1; + + MockCValidationState state; + EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "version-too-low", false)).Times(1); + EXPECT_FALSE(CheckBlock(block, state, false, false)); +} diff --git a/src/main.cpp b/src/main.cpp index 3b089ede4..58c6300ff 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2940,6 +2940,11 @@ bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos, unsigne bool CheckBlockHeader(const CBlockHeader& block, CValidationState& state, bool fCheckPOW) { + // Check block version + if (block.nVersion < MIN_BLOCK_VERSION) + return state.DoS(100, error("CheckBlockHeader(): block version too low"), + REJECT_INVALID, "version-too-low"); + // Check Equihash solution is valid if (fCheckPOW && !CheckEquihashSolution(&block, Params())) return state.DoS(100, error("CheckBlockHeader(): Equihash solution invalid"), From 6be6762237602c9f268b58f5919c7397632fa3ac Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 21 Oct 2016 21:19:06 -0500 Subject: [PATCH 077/165] Regenerate genesis blocks with nVersion = 4 Includes parts of #1554 --- src/chainparams.cpp | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 523bd4e04..292c80cc8 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -43,8 +43,7 @@ public: consensus.nMajorityRejectBlockOutdated = 950; consensus.nMajorityWindow = 4000; // TODO generate harder genesis block - //consensus.powLimit = uint256S("00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); - consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); + consensus.powLimit = uint256S("03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); consensus.nPowAveragingWindow = 17; assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); consensus.nPowMaxAdjustDown = 32; // 32% adjustment down @@ -86,22 +85,21 @@ public: txNew.vin.resize(1); txNew.vout.resize(1); txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); - txNew.vout[0].nValue = 50 * COIN; + txNew.vout[0].nValue = 0; txNew.vout[0].scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; genesis.vtx.push_back(txNew); genesis.hashPrevBlock.SetNull(); genesis.hashMerkleRoot = genesis.BuildMerkleTree(); - genesis.nVersion = 1; + genesis.nVersion = 4; genesis.nTime = 1231006505; // TODO generate harder genesis block - //genesis.nBits = 0x1d00ffff; - genesis.nBits = 0x200f0f0f; - genesis.nNonce = uint256S("0x000000000000000000000000000000000000000000000000000000000000000b"); - genesis.nSolution = ParseHex("000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2"); + genesis.nBits = 0x2003ffff; + genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000000"); + genesis.nSolution = ParseHex("0025991209a4a7952e06c65febfd76424b11df202714b3e2083c8598a9083f098459638b2b0d269efcbf0d72d9fdccc92045835652ac372d51d0e23dea6ea31a7625d3c686a5f549aae270912751397f10bfcc89066e50df029f2fe9c72f41dfafc41beca6e9a9c21f2f903f234460610f1c01c54802b8f4edb5611263ae57a50307db731787a281d65046ea7619bc86b515e361e0d4d6e427970b72880952d9d2ab12783498cd5f00b895ab47cecdad71afb53db474875a6c409a863140b73d39d25bb034fa1ce7d4084cba721953de7de0141a1342cbcc28933d52d22624c725ed4a53b0920e29b93a9314e317abe1e1da0af153d8cf05579c2226021a21012872a903d9a5a2e15fade995d2bcdda25c1795cdfc021cf107b3aaf3652b5073de526356de1d09781c6027ec77c9a5f249b98dfd23fb038178aaf229558a30e94e32d9162d073e12ed988e1f1718bb7d00ce6e6b1b2ec8d97719d52e655781cd8279b9644109252b20210f0037696ed1b878cbc8f6b4db95dd1d01c6c53ec18fb4d38526c45a8bd163da81a6df360534b62267ac35a053c7abb5b40ee5a12e2fad1b61940e7269dcf95b12d7eabda16e16c1d5c5e5c015e19723f189a4e5a52161e4c842f4d869028143474fbb5110ee1cf0acf3ad1fecd8e2d58768633b55cb1ab8c518e5a4954ac66fdaffcd93d1f6ab0af4fc885ef15908b1c65a80d31475b868b57c8239676ea288bceae4190781906ecb5dd0fdc3959f0fbe64ea5f3f1f8c030ceafd4feb4c232fd3d4a19711d359051c62ebdb2b2ebc361a34323a25edbe9705f46571c60cfdf327c618a5529a6aea5185578ce1d62543a52141de8e52b819da2ca3dbc89d62db077200df2ceb3160664ff18e1b1cdbbb9cd1e368a3bed50db432202eb204dd186920bfce44c74eaaec7afe4284eab4ce78ef5b78cb9a009092f24ec999f3d7ae71e4dfe559323e5f76d99d3ebf4a663395b39f9657bd831afdab3f9f109ff2f003fe44734054a3c7915dd4a7de4dac7dcfc0f003532a913d2925e0edfd32b043284f66d93911ddd7e591031771fb4bc5d7a058fc519ee7a1a8f87d3a9fea42181da2335e37ddbde6c235425971f81a00743e9c210ffcff2875e8a191d8d2d381efabf801d7887dca33189bce10fb919b214f94a3047eb503d503a61fc76d086d5f1c1d88a663ecbae576f66d6ba1867a3ae1bd28f37c3744e5e72fe022a8eb4349b63edbbddae9291665470af215f63d506b12354a5ff0a332543a8bdf4d3aff12555aa237957939c2be676c4b11233948851823dda4d2d7c421af7241ae8dabf5ce25befb11e62c96c5c13e512bb91cae854e70b3c8fdfc727f117444bafeb9b4dbf637a297b63227cafa7e611c3bd3be507d6e756d6da7116d5eb761f76e0ec62f6a32c8d30176ac03960cd7790d6b218e89a215b86440c88dd40870b853040d8d2510ef918551b86e312f230c475702ee274271d9f9c4f0f880a5c43a9572a1b61dcd290e0d1231c3ea76f5f718a3481674297cd3eaceda2a05868bc0690201d506c8d25137a266daa5d216f7f2067e62db9ba8f841788611cbe5af6bc9532df1fb7b22e3be8e4713f23de2f692b271ffdcf4f43e0838942c9716ae8ea75f97d47ae405967977f6ebdcbc33e408163d8c504e1a6a7828940e44d66b816113fbeb5b24d1f42bd9e0c33523c5d4720fdea6c9a3d634029b1126e96b9945a2ec4c3b98c08b78e262daaad9ceda2e31e99c04507d557cc2077fda6f8cefb0a7df121a17778ea7a336ff17c3132627675d69d69b17da698b2c5756585a731f17c2f97332981efa598c66cfd1f93b61075427e578f57906946ce25a8f1a56c9fffa673fded26154990b27a8a7162e86e427cb50743bb4e8"); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71")); - assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); + assert(consensus.hashGenesisBlock == uint256S("0x00982212b34e545f873e3ce30b0babab7d2acdedc52867b2bee24a182538633f")); + assert(genesis.hashMerkleRoot == uint256S("0xdc6c10ad2a26613ae9b8a156ed9ca15e3e355a994a7e32cd7a4c3d7a478f57d2")); vFixedSeeds.clear(); vSeeds.clear(); @@ -175,7 +173,7 @@ public: consensus.nMajorityEnforceBlockUpgrade = 51; consensus.nMajorityRejectBlockOutdated = 75; consensus.nMajorityWindow = 400; - consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); + consensus.powLimit = uint256S("03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); consensus.fPowAllowMinDifficultyBlocks = true; pchMessageStart[0] = 0x0C; @@ -190,11 +188,11 @@ public: //! Modify the testnet genesis block so the timestamp is valid for a later start. genesis.nTime = 1296688602; - genesis.nBits = 0x200f0f0f; - genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000009"); - genesis.nSolution = ParseHex("003423da3e41f916bf3ff0ee770eb844a240361abe08a8c9d46bd30226e2ad411a4047b6ddc230d173c60537e470e24f764120f5a2778b2a1285b0727bf79a0b085ad67e6266fb38fd72ef17f827315c42f921720248c983d4100e6ebd1c4b5e8762a973bac3bec7f7153b93752ebbb465f0fc9520bcfc30f9abfe303627338fed6ede9cf1b9173a736cf270cf4d9c6999ff4c3a301a78fd50dab6ccca67a0c5c2e41f216a1f3efd049a74bbe6252f9773bc309d3f9e554d996913ce8e1cec672a1fa4ea59726b61ea9e75d5ce9aa5dbfa96179a293810e02787f26de324fe7c88376ff57e29574a55faff7c2946f3e40e451861c32bf67da7377de3136858a18f34fab1bc8da37726ca2c25fc7b312a5427554ec944da81c7e27255d6c94ade9987ff7daedc2d1cc63d7d4cf93e691d13326fb1c7ee72ccdc0b134eb665fc6a9821e6fef6a6d45e4aac6dca6b505a0100ad56ea4f6fa4cdc2f0d1b65f730104a515172e34163bdb422f99d083e6eb860cf6b3f66642c4dbaf0d0fa1dca1b6166f1d1ffaa55a9d6d6df628afbdd14f1622c1c8303259299521a253bc28fcc93676723158067270fc710a09155a1e50c533e9b79ed5edba4ab70a08a9a2fc0eef0ddae050d75776a9804f8d6ad7e30ccb66c6a98d86710ca7a4dfb4feb159484796b9a015c5764aa3509051c87f729b9877ea41f8b470898c01388ed9098b1e006d3c30fc6e7c781072fa3f75d918505ee8ca75840fc62f67c57060666aa42578a2dd022eda62e3f1e447d7364074d34fd60ad9b138f60422afa6cfcb913fd6c213b496144dbfda7bfc7c24540cfe40ad0c0fd5a8c0902127f53d3178ba1b2a87bf1224d53d3a15e49ccdf121ae872a011c996d1b9793153cdcd4c0a7e99f8a35669788551cca2b62769eda24b6b55e2f4e0ac0d30aa50ecf33c6cdb24adfc922006a7bf434ced800fefe814c94c6fc8caa37b372d5088bb31d2f6b11a7a67ad3f70abbac0d5c256b637828de6cc525978cf151a2e50798e0c591787639a030291272c9ced3ab7d682e03f8c7db51f60163baa85315789666ea8c5cd6f789a7f4a5de4f8a9dfefce20f353cec606492fde8eab3e3b487b3a3a57434f8cf252a4b643fc125c8a5948b06744f5dc306aa587bdc85364c7488235c6edddd78763675e50a9637181519be06dd30c4ba0d845f9ba320d01706fd6dd64d1aa3cd4211a4a7d1d3f2c1ef2766d27d5d2cdf8e7f5e3ea309d4f149bb737305df1373a7f5313abe5986f4aa620bec4b0065d48aafac3631de3771f5c4d2f6eec67b09d9c70a3c1969fecdb014cb3c69832b63cc9d6efa378bff0ef95ffacdeb1675bb326e698f022c1a3a2e1c2b0f05e1492a6d2b7552388eca7ee8a2467ef5d4207f65d4e2ae7e33f13eb473954f249d7c20158ae703e1accddd4ea899f026618695ed2949715678a32a153df32c08922fafad68b1895e3b10e143e712940104b3b352369f4fe79bd1f1dbe03ea9909dbcf5862d1f15b3d1557a6191f54c891513cdb3c729bb9ab08c0d4c35a3ed67d517ffe1e2b7a798521aed15ff9822169c0ec860d7b897340bc2ef4c37f7eb73bd7dafef12c4fd4e6f5dd3690305257ae14ed03df5e3327b68467775a90993e613173fa6650ffa2a26e84b3ce79606bf234eda9f4053307f344099e3b10308d3785b8726fd02d8e94c2759bebd05748c3fe7d5fe087dc63608fb77f29708ab167a13f32da251e249a544124ed50c270cfc6986d9d1814273d2f0510d0d2ea335817207db6a4a23ae9b079967b63b25cb3ceea7001b65b879263f5009ac84ab89738a5b8b71fd032beb9f297326f1f5afa630a5198d684514e242f315a4d95fa6802e82799a525bb653b80b4518ec610a5996403b1391"); + genesis.nBits = 0x2003ffff; + genesis.nNonce = uint256S("0x000000000000000000000000000000000000000000000000000000000000001d"); + genesis.nSolution = ParseHex("00206211d02ae0a9f111f32b83725bca34081ff8640a5782bc4e8d60e306a7128f5d48d37e93851c61fc103065cd85a59943a364e38f1dc1b14242af5b21831864c6938faae7d5f1ef23124f514b592fd63ebde70f771709d587887080aec110a1740594bb747fb9ef143722a94b13394bf8a7a256bb471371aa440fd7ed107c058413639c89268353bb609f97b2c7365def1d2a0316b6f89dd317a4312a07a67e59ab04647fcf00015a0d40a5c78a9cc60b22be495713addb8c945adf2830fda88b517900fafa9976917edd7ea673fb12340279b7733d06eb284a48b0b39f8dda397f4779df2934a4a1cc7095f854e9ae74890f39ff3d9cd4745e4a0269ad941f6f195bbdcb929023364c3a2ce33af6715a218b1282a28e2f8c28075525dba772e4e95d63f5093ffbd1b499b0233427b1e21eabcce4c7b65b1f570b564497e9d7c88b0f4d21b09b2e78e74dd99bf2d902b08a50f1dc718bdb7893bee8c490127abb3a91d944145ab08e19e4259470365d8460135643aa5bf4020f566250782b11fba024b2332c596aed96680ef49d444a870eae5ea3218bc5b65a9e481dd70f3eff81c80b56be8aaa109fb555aef367961ef58338cfff8e5f13efc65daf246fc5ab45016b2cdc761932953b46f31c39d2b292971f77bbfe8461d13598876b6bbeef552495b9529a91956b3262741f6b250c4a3247fb656b07c64349c1cdcea7dddf24f28fb97ec69e76d6779125673e0110db2a61af8f72ca9a4114d93e1eee80831f87eecf001de2fb33c716e7ac68281e897ad6d4b737da42c080d4717eb17ee7eb2ae2e3762c11bebde107f84b79e596b6b97237e576a4b95a3f1758bef2ba0cfbb44da9f4b641ddbaa38aa56d88521aca5b8d382749b25b16cc5979c95b82e0115e0cca1fb3726ae637eddb2d3b14616fbff816afa25cba12a9231fedc300a2bff8e446c68752055209a16cf2d16af5363ebb4411a43c0191cffb2f42a8cb4f6b4b1a96cc190f02025719eaf449dc7ac83aa1e8829cdc909efe6922dd065109e407db885f6923833ce1e74a3511a6da28a20f43eba46a21594de3248a9b726bc5eebe76fb592f1955c6bde7cdb04b1d7666824cee2906d9f757a5a716f54a42f6a3fd59b36e92b44dcd5b325295b5cfbd227ba3f03c4a1765df12827484c2b1b8a02586d8c2048bf651e2d474450f96a5bb7c3ac0760392d8c324112e0b90cf652779b116856e0e71a3e33ed47ef2f41cd445781047e86da04a41df294ba208d76a15827e1cebd3329763ff45a9f512dfc43ada1db7bc1b357f120645cfa68f47992c128786526459466c08b3f54e5a3fdcebcf33b981f5b5d88f32df9e1e444bf970c320356f7f8511ae0b6502f519b3d8c41eea4a3a7ca2a0096df56fb5fa09d774ea3524dd9376b2c4f837e300c3411b07238e532d0f93ad16defd9a42737c814704544ab5742fdd21c84bf3f3f4e76201ba6691f639088f10fa409d91351a338672f9f279dad2701efa253807ba27296d851fb007b38476a9d8f242903ee620092a61d3d34357b5249c84453e370c89f53d33d9800dd0834f3d58943d4f12855077e3e3755eb3b38df73f68ae258616ddc9d385a80d09f9a9a21a42126e7b437a4aacfed26cf53c8d480f0e4b6f3b16f3df322303198649ef4d4f8d779a61c705edb7b17d1fdefab118f60e48ce62376d963ad69af5c1ad225c003f55201132b1a2e15e248cf947019a64d2767d99adafa2b71cc1a70698d2b5dd14f8c548e7ebe0be9c82f9435f06c95cd912abae35dae3935e92486eeb25539d733239773d7a55e07aa5ed29781bd246a48ac961bc1bf907f3f2a516d353ed0cc0b1fe3ede9dea60077ba1745272ecd0ade27581e362a684175071d2e8f39af430"); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x0cdf00b25a93ded11d73ebe1728cf7867f18e1f62aca9554b95e0f3026174e33")); + assert(consensus.hashGenesisBlock == uint256S("0x01f4137ae8aced18e017119ec1a5ddd7f29a163e84e5809eb37aa6bd736b86a2")); vFixedSeeds.clear(); vSeeds.clear(); @@ -280,11 +278,11 @@ public: nEquihashK = K; genesis.nTime = 1296688602; genesis.nBits = 0x200f0f0f; - genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000021"); - genesis.nSolution = ParseHex("0f2a976db4c4263da10fd5d38eb1790469cf19bdb4bf93450e09a72fdff17a3454326399"); + genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000009"); + genesis.nSolution = ParseHex("0905111770fb9072e53075375f5d77c379e30bd25270f8778abdca2ee5156f5635b9b391"); consensus.hashGenesisBlock = genesis.GetHash(); nDefaultPort = 18444; - assert(consensus.hashGenesisBlock == uint256S("0x00a215b4fe36f5d2f829d43e587bf10e89e64f9f48a5b6ce18559089e8fd643d")); + assert(consensus.hashGenesisBlock == uint256S("0x0b9d8b1be2041720ab879592c3be0ec7ee79fcb2d1e238f93d3d1afe58d0d867")); nPruneAfterHeight = 1000; vFixedSeeds.clear(); //! Regtest mode doesn't have any fixed seeds. From 8c54e34a683c7d426e64b209cf303464c60862a7 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 21 Oct 2016 22:32:29 -0500 Subject: [PATCH 078/165] Use tromp's solver to regenerate miner tests When using, comment out tromp's solver in miner.cpp to avoid linker errors. --- src/test/miner_tests.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 7b145c833..a1e621cb3 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -10,6 +10,7 @@ #include "uint256.h" #include "util.h" #include "crypto/equihash.h" +//#include "pow/tromp/equi_miner.h" #include "test/test_bitcoin.h" @@ -209,19 +210,37 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) pblock->nNonce.begin(), pblock->nNonce.size()); - // (x_1, x_2, ...) = A(I, V, n, k) + // Create solver and initialize it. + equi eq(1); + eq.setstate(&curr_state); + + // Intialization done, start algo driver. + eq.digit0(0); + eq.xfull = eq.bfull = eq.hfull = 0; + eq.showbsizes(0); + for (u32 r = 1; r < WK; r++) { + (r&1) ? eq.digitodd(r, 0) : eq.digiteven(r, 0); + eq.xfull = eq.bfull = eq.hfull = 0; + eq.showbsizes(r); + } + eq.digitK(0); + + // Convert solution indices to byte array (decompress) and pass it to validBlock method. std::set> solns; - std::function)> validBlock = - [&solns](std::vector soln) { - solns.insert(soln); - return false; - }; - EhOptimisedSolveUncancellable(n, k, curr_state, validBlock); + for (size_t s = 0; s < eq.nsols; s++) { + LogPrint("pow", "Checking solution %d\n", s+1); + std::vector index_vector(PROOFSIZE); + for (size_t i = 0; i < PROOFSIZE; i++) { + index_vector[i] = eq.sols[s][i]; + } + std::vector sol_char = GetMinimalFromIndices(index_vector, DIGITBITS); + solns.insert(sol_char); + } bool ret; for (auto soln : solns) { EhIsValidSolution(n, k, curr_state, soln, ret); - assert(ret); + if (!ret) continue; pblock->nSolution = soln; CValidationState state; From 86d2c904684d3e4855f0d8998a950c9f758a461c Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sat, 22 Oct 2016 00:31:38 -0500 Subject: [PATCH 079/165] Update tests for new genesis blocks --- src/test/miner_tests.cpp | 220 +++++++++++++++++++-------------------- src/test/pow_tests.cpp | 4 +- 2 files changed, 112 insertions(+), 112 deletions(-) diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index a1e621cb3..5b21a3d35 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -23,116 +23,116 @@ struct { const char *nonce_hex; const char *solution_hex; } blockinfo[] = { - {"0000000000000000000000000000000000000000000000000000000000000002", "0062c7093da54f87eead77f84d7fee9e2319dadb6c00641fb26b0d790d3ed9256c1f6c5eb9655ff19c3003f1f0247083fe485a57d0c8b587366de366d46a0a1505131d3ea438b5914d243cfcfcc435b61e7d8fc90df1bcf93e9cefbb9abdf360abc70520e71ecfe98d4cd3dc9378ab29d1cdf0276bdcc0cda308157e88b8450a2a74621e86196f339b591a5bfe9f1cd9b92aea59d14dc794672f9f50635621f65ddc4e09d619e0f2098f33fad34a83766d60e258aebec7d123c13db1bf31280b4caa962b359418c3d3d1dfbe1e26faf5b60d28afe2770d515a5924a51705677df5a5f6b1d7f6753a9c26aed06403a599ed741a3371c1c5cff5b15edd131ba5aa7b4ac8d6e18c22585f2c62c532472da095132d16e68daeb06fc7c99137cfde70be310e16ff05186ff94d2eb6a759caedf4ea3b39e4c79f37dfc6e228e175d314941b45bb37f42c05ebe9c1162efa6f7d0235f8f9ad6bd519c73d951d2631d07b6cac7e01d5042ff8f6f6c9f05ad061c19f361aee3710f4b8c402221ea321208bc45bf0ce76b39b3960ea071533d2c224147cb7d4d51944ac8022adaf5cffa9b7996fafa0100e369be132ca11ee24257113bee1fe1e09f23876347089ea318dd6ebf251a7b567d3401df4dbbf5b1910180bc59985e4d4a9de17098a7e451e65f6d39e6910b59c8092c67ead274b93a4be60363947f35833c50350c17d05454bf51e6ac0f4d310851485362acda31bea66f183c70157b35c52e799ff4a2d8103109b811f4656e45719eedde6505809677157ce6e0355bbc23eb05283739161e6ccd61427c636de6d990473ab7f107e0df94cdd6fb5db2401a91cccc73dffc4353d592842f3af291219f33811736274a9bd98e5c50cb512366b7768e76c8e1bcc7f356f97b9ffc1c1dbf5227647653c27a73c2135f530079098621189e5915ae60f01e24c8f4a5decf4fced803641e9d4a4e735a7cbb00bce7f5fd01b5d698f63c31afb731bad10c6dfbb751d85d56702f1dd69e2e9140626745aea4b147416d12441c61d8ea5fec9e0f314343ec5b95599a694043e11a4877f51cc4d55fcf837c698c11aa2dc4a3ba5ca7b12b748f5728515f3dfca43075db937a6d1ffa8a411f8fcd3f50b9929c1e544390c2a3f378781feca341902279120d59251af33a4d295c3daca84e4d60ed30b332de62746e22eddf4470d01ca3c33385d3c7c6320df44b19e214a9b7bb77b0465f6c79ed68b59b7e20e3d4a379cc8b506d0df45d80479413626fcb26d5c15cd3a7bcd668da78cd2f26bdae279558e99ed482f0f544b535637e6cdd472c3d63e5aed2d215c9e446f1d77843d9c0e961cbe03726d2d9f59df4ed9bd31432a32f677a44df203a9bce44e4f4829e14c200e078577398fe4cfe3017d409158583a7dbb67e693df9f20020262b88013d02f3fd571ca8042d4ae81d05ea3ab05a70992c917cb3cefab32e8dadef8c21ea5f5c29805a0d82ff4c1f4a5239c6320a3a2ac3142b83d004313ff2e3eb297a614d56763ead9507d0f84f49ecdb2066b340ecb4b6853600ce3c15053b591667976b550073d698e9ae00b9501c9c0c35190d2ae20e0989cf321fe73c0f624447b4a9ed2a190f1c7791126cdd4f853df1ee72ce2289fbbe17685f4e3b25a307df5088605337105c3c5be1d08d346550dd50826f46abd250f164b59418f4e7c5e8ad3f4e200a80c296f38b95e31160d86b504f0c829aa9656bf367abfc1d4473e7eeb6138747bb4dc7eeb61681705e0e896ce7517fec5a908fa916da1d159a6c11a87d273f246329deb16a2781f380becd3da019f92da360007eaf185cfec31edf70d74ac1ddf231ac16b59a1d5ecb34647966fdecafb12222f660808b5575e07e1e3863124f8d426587903"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "000450a9d3646c057855f0e659c99134eb7f34e7ba629c5d1ffba1155bc365b6654a74bf79b458d895b113c7cfb3f2ee2b6d9ca3c6cfc1fb80d7a1915f70f75a86eaf3bcb73df1ea17474835cb878e570b5590990f9f2e16404e8c4eec9fd1c623f5b3aa28e61c285b1444ffb531c938a28c41c2eb0364388f7c187c5ec316c95ea3d1563f61d0eafb1c6779cce30bc8fa00201d4e8d0bc453ba9976c2e8e379f044039a38bd8480008292852695463bde2003ac75ab71cb4ea57ff3de028e211f098b05611bb8f644176f48ba1cb7b50c5b052d80729101b1940eb0616da035f4a51c3b5fb4bb077983db3a56d56dfbfd1098ae6576d151be1cb7f00a3c3f26281c53ed2dbaa466e5a920e16126115f4c15060b7fcbd7c609405c517efc6995a5ed045b9d8418425fd6be63c1c1bdd0a61f26f4606afcbe5a8bd11f05ae8a3827049995b913c9482b6e0e6a4bb6a9e801af884a1cc5fe9959515908817f11536228dc9f943646fe084c1e11e9666143dfb267adc1db10dc5ffe0720d2592d4a3b8337b25087bdefdc3b761b3e5aa64723caea331213be9a713474e1c8b2deffad1ef6af16811cafa01ed98f78d4f1723d4a40452a606e6ce92e9e2a9e93cc982ae84267be4474598b1d609db72c309ec28e1d24e96b890833f88f70afb9885773083746490df51b54a815cf37b645c67532d2446d7cc1d90961df0d170b25aeb56768db10612f2a76bf748cee0f0e2b45ba88a0c7a44a841202536da565654d7be22a645d07a29ed747edb8b3082df2aef9de6d38e3ee2d7f3f311e22a3c7c025138543b9cd26a443b7730f11a7928fae0e155ad8df04b2a42a56493b62df744f1ede9ec7c365dbe9532b89fdfef92bbb38b05aef31249ae399596d09c1e86417b3ddf9b5ce2b5b3c63623ee5eebbc85f3827e40a8881556ae79fa115bf4eb000288306d614669b5ba9f8f22f77f15e7b171eb4ba2b6811deaee77ca7ea9925c454e58fda9f44d881df0c36c784cdae346b79c3514b45cee17656673cd2131a675aaed912de8b2910f36659ef1e952aaf7331290d3dea1dd0db130980c531d8524a29dd6c0c37531923cef1463621fab1c85cb50949ef0ff670bfdcf9d714d77c94d549841ed125a1cafa461f58d866f48e57250bcbd6319e8275ea91891256d32e46dfa237fcbd0496b42536d5b373749391de6447d62cd632bed22b0a6e8b67e6737a53f311d65902ce41ff6abe5f2a9009e2d79cfb847c8a91a530feece18130c537db5dee54454dace7f519c1fce5961883dc2036111cd2d4ad17c55d343dca5a7ef18c135391e5fc04fd5adfd76b20237549a30dc915e08ea6d5224e7187be455e64311893d5f7faa8a10fa6e1218ab59a4c9545c39ae28e5a649b75b457c0530942a76357d303369c769afdf901e23945d52ce2558c49621f13170434cfe34ccf32283f53c975160542d779068b2a7eba574f8e7c9d261a8e5230f589b7589bbb43ae0a745ba1ec3a3391412cf6eaeb56d05d9b0a1ae5ff07ffcd09f1f5b43d7a0b330d86b3d298f333d67211f75fdfe5dfd47419c05ae86e3f3d5dfa430c9976a68e397a59c26575ae9d2173e31a2fdd27c977be929e1734f07df1b2d0bb842db61fae741d325371d0e4b291dbf91959135e3e4704966fa8300870a318537088fbbab1d10954508c815c64de0233e97bd58a34f9ce3963e9bed8c5dadd7c11edf72bb24d05f73f8341fa053c44715d776b7d9128efecb5d6e73e9ff52f732f3651f04111599ba2ea0a3b949d4e9cafc5c059c124766cf7a88886368b7936a8a20ca57a0599df035437bf4bb12187070e73943e1e057d5f97ef34ea89d5146e31ca197ca23e2dfa66f7147aad6fd883b043d6b921393b29ca6c7ec550"}, - {"0000000000000000000000000000000000000000000000000000000000000004", "00385c4db642b3a6b7e9217bb499f0f10e9a9ec0443dbdac61d7226133622427bf3a577a36cea05a80b10dafc8c717f9aeebd68672767efd1bef1fcb7952fd248a34ae515021d3354378ae3c741362d144bb827a00654eaea92fc23ba3d8947110747151a83e3daeb835e60ee184cff7e6b8d2938723ed1b12bc5b775091105d812fd48d3e71de8d51570d2318c2850d5ac3952380be0bd9163259a348571627c7759ee36a3c4f2b01d7af2d1d8584233bb2015b19d3196c92d3060ead22b46a661bf4d951fb622b40f874c9e7a2c4bf83470d8791b46e2128c3fd7ad1e460145302a8d75ecab42c7b768df793bdfddb383658987e06eec1171e1501141a3db0e990bf61f05c21755b7df4086257e4da9c5be317097de96ca3d45ce7ccf548b97e7803db9f33351fcfb1b75f2b7f686a858f2acdcef9c2df70528649038455b0949487869be68e27ecad99dc479fdec404f3c4a7ed25ab59cfcee40e666cb20538e4af0f6923e7b55f3e6daa0db41ab46d916455199a2a94e25207ccf29a7cdfa207a0ea1553b650abe6c2449946df14f0050394616cc1a88032ea4b38a751fd7374a5f9080f92c732098fd3e8ce21ac5c99acc09b18ba8ed64145e7336df740ddbf0b843b6ac4c02f55b13aeee933fbed8df90d1f46767b543e91ff0a062988f95e3e5e330db1ad28394daa68e5eda955abd1d22d9f801509c74645dc6a95abb5fbd14d7e5f80cdbac41d83c510b074449def6bd3f9ad44302c6264adc3c72eb4ad2591ab692de9247ba3c663247945bd17930edd0aeb5d5863e152591a8b313e86e0f8ff0f1ad1d278a8e41999aa90d8146ef8e08f56c4634a14e639859f09ba259f4a9472e0fe85809fb429a8e68c3f2cd43fad92242a8783a4cda1396b9ea4340ab3bd1946263f015666e17d5b645f17fbd56027230648a54e1ee41e8e6701cdd9542eaa5b7fde365662f2f062722c6f9bf68f58ddedf120dcfe9b7432f7ff76703556da21580c021465c0baed950637f776b19c322e89a89f8df06fdf21fe04490354d11abcfa02f19450365d17aed8bbff040bcdc5b5d288b977445139d7c14aa8938eedc13206b3514b2ec96ed93fa9573629bf0d335eaabfac7f2d38cfee7f24215bc21cd75fac5cfe4655047ccd4a419045d44250cc71e81dc50422fca1a5b04e2dd6bb07f7f43c44dc6e918f5411081e71dc41cc9e97f8a8176bae192f96ce2f3ed316255fcf2555a11cba9ed426da26fa5652ba9d24cc16452049c97ebdd8fdd3964214ef07aed2c40b140b989e124cf39acc25b89965085fc0db91d8030706e3a566a6ca11dbd234def19a16002c1e805eacc71c47c3d518fe6001e6731eb0792c257e886130490bc19275fbd4de926272407aa2d65600defdc6e1135149bce648d7c60d32b4ac58e9a7048a55e4b742dd8f2dce75e719b1ba261e8894911613bc2a42c36a3d47f3cc29b56f75ce6a798a3f5ba806391db624997943fcdf525a3d39300240a354204808578a9b5293843ebe3171933917bbfdc8fb5bdc660989832befdc1b5df47631a87c2f0570a5b1e70ccf66c30e3a20627ae3b0666ce6a47c659b4943da50a30d62a26116241d3928b2d10e3d26839784033fc1374223433034b49c37fb71f7d2eefefdb2727d74fbc5068c3a4d189976a98f0243c7984be9312efddb4ae40bc3816a1812a93ccfb3232e4271f809858e977ccf0c1c8c0b944e0409989ec65762e7056ad2b978df27309a427b981a22ccec7634bccd683fe542a2db78f40715c976fac62c3700dec813614f163e1a45b79689198d01729053cfeacca0857a203e6766a3aa3d0f6f2cab7600218d2ac8b189d3446be598311dbb0b8d255381eca5bf5b667d1d12761ca2483cd99ca5dcac45"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "00d823706585ca9ab5b9a21706c36b91106d184feb14736e0d7e299ab16aa3f24c3a6b2808959b7ec8cd1157e0b1a3518443ab05a885c3f38b8adfed9ca22d136f5dbd40aa43fb6df3f86609510f7ab2a13ff780010c1ba4f859964acfdbf5edfa309cb62e31fe8fd905347f5b2f830c7727be227255d412354c30398a3905d8b34c864f342152da6444eff3c9c9b2f27b5c8c09352eb717d0f3528d2060e320fde81dca5e9fc343018d6eb44bd34e9da004e11401d4fbf484e1ddbe343d8693bce9956d233a069535c2fa3d7e3ea8541efe01d35ce096d6ae1f3b3542d578589a2a655df4e1d82f576335feccd214ddb4b5458f4eb03e54f136ed5e0512752a1c44c46e45f9e1c1bdfe57621073914ef3198b9cf78586de06a207d95c8650854e95325d6a630e147a5583488e2eed28640823abf9edd12e12bace49ccddfb9addc6656bfdc8272eccfbe6490af6beed03551cddc2562445d3bf33ddc06e4c057d358c6944055758a2230af8b8f26dd169858d8fbe07425667e5057b4a96b20f9e2ba29d71093a6b2f9c43197e767b28a8dd3f89d92c4da96173f4bda9171d201c3b257104ef388a23571269744073676d3659fdacf4d21c84200a3b9c8210e75abdd83301b2371e21aee87bbfaa088e87cd388a220b4b82b3f322b5cd612ff61ae1712abc837f8eb1984bbc5482c88d70a384df738c7c90060c18548348e028e8c2e4f6a9b6c011dd8a52b7110d14186eda19add2dba5c3da49bb718e7963b6d2941058b31e442ba013e3c571f0d575c805295f69fb1d20a49b226ec8ef9afffda668923e67e34d6cbb990f127806c0ba56265774ba51ec6320093a08c116976025d19afeab1ea8159bba338539d7c7cd944d91cc5e1a25049bcddc5b16f5f395219562971e992339961b24e7d9c44a68fdfdd5a442ece4a14f858594b9cbe5029c85a4bb44606ee580b6784fdac08dacbd6d8efc078e0d5d8d688415d394b954e8f4547325267aa986199d1c71810c5265c7c031e41b6ce30d1c1efc599732aac343a22160239c7f36eab7636a3ec73357457e04d456fb6b044516348f925dd4b7100cd2d867228939d624b6a09375196c6fa8c02858cdfa4e939b49bd0a69186f1cedfb5bb4f30443df73a255432315e2864e10fbeba9edf3119ff9d6732148450dbbd6f870e3031e360e33ec34237ad88176a2cb7b222e89b8a67a33b5ad7d1a72ed15c4da44cba2d86ab64dcb1368fc0416bbec2fe92c8bab36676271c0b7a627f31698051a98f598ad0fb4130eb756d971f9426be740bf709e236fa926b25b9fe3cdee028e4f4c60454178ee2a292dc95bb720ce37a0cdfa953b5daa80c6ab1dd7b0db23b8bb23aa5f48874499e6acb2e908b1e46310f97e36e744a1eb93e0a16a21d4c4f76ee9062392de6efa02cb723592c51895fa4552452ee9dd3d1ec8701c010eb5bbc0b5e8b79b75d4339ebf3e57012ebe36a7ff0a575299caca7274b220e5c4ef3becc6fa3fda8d722b6337f67299f2f1312965bd5c6d9de62bcff6e24517b79637c7491ecf32646452ace3202e603dff223d348c85358728aa9f9475e6008c37e3d2463854f121222f44bdff6b7f81ea23e3eb177db3e14d0cdc14e75dee9f2bc035bb3de55a26a50c522306ee33ba0d9c09e21bf260266127ff5bd71ae6d3eb035f0ddf5dab499ddd24d91921d1bf50b4f461f1684d80077fb1290c522cd7af70ab8de3dd432689e0ae11fd37d629f145094e711cb6278fd3a3a52162c004bde196fe49a10a9787a5ad71c4a3ddf5f161deca1ae4c674d9472155d3d670da2f1505efe0379bc8f0c9bab516fd2e0417b56128ea9deaf561da65ad5cd11ebe9b4677266f23e8da179e8b36996773c3191e6eeb7624195245b9"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "004dfdf9b3dc307f825e47ba5bf2a1ca8a371e275c0d23e41fcbdcc34b6fade189f21e0dde27b91cadf01917fd76d1113465d38dc2df30f0549935c639253c4109874032242b21d0e25b1b6c745ef6ca12f7ba2b0058ac23c33b85b7e0a2d2f1637eaa9647c97c47c702a5fc9f4d23081fff74c2ff405c75419fe59ff37822668e5c84f16f0b9244d4e6402dfea5a50c15c68723c48eff28986893464588f7127c52432d055f259400de27289413f320f64131ded93a0d370f399912181a3ff760725094e966b6d4923a57114b24c3bfd28107fd55256a5110ecec2dd4cb3d2ad825405e6c48660ce589eec4cc4381fd627115d89735db263f9b2f870379fa4c7806bea4a82d8442d2e5c80e16b7599e1b1a504f84ed8a1bf6d4990802bbe1f81a979fb97cb11a990c3e12ac93a1a0e0b46381e8483aa5863ddbb61b0073cc2e52a03fafc9022438db91f0adf2d1924e012422b43ac141fe917b03dd29ddbc064e6edd770c230261b1cd13248ecb2123cef5399d6b1b03df1a820fab97057e8c84bb6d2dc304edce010d8a0b53dd363219ae29743071e1dfa8c56954d12a0d82be4d775f08978df8844b60c92ccaa0d7ed4cd9664c261d38dd1ee0490be2a07659e85c43d07f49bc99bf28b178dd28fc1d848e8ed0b7657504e18966f2927a6e5c137c3ca47aabccd7d230e60dc4e1b238314986e8131a960ed55642bf926a0fe2ac70f36f5f7134d0dac994b915c3dd78ac87d816d295628a62d3c2312bf43cdd37172a1fe559d2d9cafeaa3716116ec1babf7a5ae04e1e40994fbb0b142349887218a0f221dcdf17122cae194222cee7969626e424d578cd6020ee184559e97c1c9bcb27e609a34711e6e7471a60457f548bff142d249af16198f54ea5fb43060118cbab21846fb087f7275d6acb7f5bd0f9e3f13cdc44748d237b74bddce900866b986a16fe0d0f8890a105db4df1ac79bed32f10537e93b58b069de36962e2e435fdb19d7dd39c4904e3f3d0f368dedb6c7a43ecbabe1e49ef64df18f019a37fd5f826f81583458414023d3ec5902a38d65e0212ee78ade3d86fc72a245cbbbee9891b6b1f77595f796c60f8da159540e53a27ccfa84f74763ffb41f075508783bee7453bfcb3257ce208b3daca153684533506796f2111a4f65af18041de4bebf53a7bc0e51009a130ee10097ed929e808afa34a0830b1c5a2e511bc32a7dd45af536e9f2636f4f6aa6ad4765119c2700d24fd5900ec06ea74dc0829a42f622b48e18807905f35f4be7076135784d2069c9f257a6606cf850b6062843330d3084d3e6f8c091040a990a6b8837781626ae05c4fae2673783e1b3a9fa27aca281f9783ee10f93e4fb8238c243fc32725e212d22b637917991c23cb02c5dc127de15d8c7898929ef75b2bbfcfb517e01097490e316522cdd5033cfa7e30c0d1082d041080bcd1f7ebc963615e8c8e1a9702bcbb5a1134e60830b638dba2b178fdbca41e11ee0c8b9b97b03fa57b01f88a676ae524991be69238309a8c56961bb30a34901b56dfbf1c34b17c36d18c4acd46fdb098fdcd212024c073ccd83f897cfaf02b423c2b5896e74cbd45604b5d0b68207deeb425546180b62e73ee57b97ed3e2c82ffa05a8df298b4f2b340d9361cd51c9a51d77b0192b7c8db08855c5f56154ef067246bb6abbfefd83ad843d4439fda07ffb748146cf0137ef23fdd5a7b04ff05725e1e0f2cf17ff4bd00f7096d4c841c80b10563289a92589d62d094c0f1752b5b9c5e0723ec7c06b2b64d84637cb3eac1920fa220e819abc4f17daf219bd55ed055dadec49287654cc6caef3a8c5e240e1a8a5cb925ea01c1f860c3c1086f7d96d96fbc3a2a28337bffcde26ee5db48457b63d52cde5a569f7ffe"}, - {"000000000000000000000000000000000000000000000000000000000000000b", "0163e850367ee29bfdb76020d3573a8e33a8ba6e832ed54a8c3b0d603103043405ffb2c9267d545ab753069a96d5a84ba7c7311dd34affce87deef717e04c006aa1b6b41c2cf661d6fc0e5bfc8af5d29d109704c044ed7e69c0d29d96840d501d6592bebaca33fadf74663a277e2a0481951dc877821ea8ac642ef533ed04360e2bb4d953205a7ef97366de335bf4bb21f894a513432ee3c55b424d2bfb62069d121a6717ab8103b04441afa8c08687a79303166922163b2baa255e7c70f1215b552e95ed76cd4c80ea9e85c7a770a9ffcb8085226bf8743aa4efc8cb2402478b9ad65b66f229c3ca2434c52117c899d5394d55cef0235852af675d60f7718a17d6bfea968c562ab71d63d4f55227e46ff176cb7b2e5484bf69ec0d253a79f2956714ab5f9bd1a8c1e0da0ec178fb1f175b59a4c99b2df4b58e8fd2524da9b3c2667df895652e0a35fc7ae3774780db801c7a3339f99bfb32a31e6546c78c0ce142997615a184cf5708691fd1ca51bb2294a7e5a890fbb1a2d6b08a740abec1df633ebfb07b048d8f2aa027d54ebd7482f53fc896ed0dda684665e7cbabeeae45b3ba5d408965abbd7b80aafcd41e09833b25de5b091b812611cba030f22abb6ebe3975683816c102ddf921729e00debacfc6c270611516563ab21c78b36b1d5bd19c1146e2c194bced22a851a460b45532fe9c2025762c805525e7f7cb804dfc88ee383e9f204ee4746f912550ef666e0159f9a3118cad38bc940bc91f579f83730157259fe56125c68d4cdf1cb192d959c93cc99f9403afcce2bdb5b8ac91ac4c4d2d0f1b6c235e75e371405b3b97a5562d26f98ffd70a3d441956be9dd73eaa1b6d4266a7ce04da930f06aa7b4d214de29cb94307090d2509fbc6a0317594941aa02bcee13cb06f984a1c2414c2c48b4ce6e195b3ec1c69a39da26b7a9a64038005d60d2c655fdee1612fe3aecc0981f1ae267044d10b89efd7990f483d4996d8d0cbce8f277717ca18b88a0bf5671273a10ab774eb3f6c9f9fc1de93991d9794e6bf26dc69784b858efc7b815a748c766e7904aca40f0ea2e81f22cd513992d30b8d1b0a19651646f07dee1bb49cb3a79b5c5148fa993f3d1c5b867208c8a8621f42c869279b8402fcfb09b11732ed484c5620e379fd288087c21555f877e9c5cdfe4817c2b804dfecad65b2691db600e1e2342e57cd6e10d269cf1cd48fc80707c3abca1165eafae6a9599b971fb3dc106e455f701598a7fe5fe1520b7bf1ad3fcb566c852a283239139efd574f8e9596082fb4addc92b747be1b4e73b038c84c6252f0b2b0b22fb5d9241d6f63f12cc4e3df9f0c98db739e6635f95fc0caae321be81b3164760412b1c407959e43b10d355835d776dbfb518000462b25287953e242288cae615acaa2b9fa8eab043bee4203ca07e1f5f026e3d079045270ebff6f0c09850e59c6f22df7e43b7135562b0b3652be5ca88b0af38e99afb30c79ff377139b64242813de97ed99f1542e4fd7128287d99dce6201ef6ff6a0bc473d84310654cb28fa08633a37f91f14cafa6f1038f69d5b8300d53170cccdb68ef6ea7a63bfa866a1893f0c86d259221cecc4f371faf2ad3f05bde4871d84c73b8c04081f53e56a6af616b30f8365360ceca38089c4053055d436ae883023f433a6159e3eec2c2249a36e43313333fce35114189a3e08138ccda3b62ed1edb4cf305f7ce8e9098c655bcdae12d5f72fae0e1d5f0ef7d12785ed02f63003b9cc876d110e204fe617738c4ce09616270cf106f972016913cf5b2d46c5d3a465f6012acc930afdd752370123198c7d3d99542df794888143bed9678da473f845d333e83ef6299392c50b40a2ed4b4636e1ba4f9aa04b45bc457e9c5e6335ce0f2"}, - {"0000000000000000000000000000000000000000000000000000000000000007", "0018a73ff2d38063cc0800b77f7a204a5c8e758d120532f2e9628a3f171fc627a27df1423e220292def608e50b69e7ec22d7e6d8c37dee79702de6efba8e3422358b178fccf0a08df0058b64d7cd4d795d315c0a00fdedbf6088c0e57407695f96e52df74e131aee93160f6203eb667da7f01dd5dba549a0097d99faa9cb0401739dbfe6daa744aaa0aa5a1cc3f202295409e304830454125847d8cfc7e162f333a804ae857a32c311f39bc70d0a1ad9d89183b1ff58b2124a985d87352b7de6478993ce12d1aab364dbac031dcf8fdded43228c11f35cb432dde878c307b29d1879b2ef97c4ab2ea71cf39e5b2ee9c6c2565feffcd48e9d74d9dbd31868a255d151b8755e054558cff3784e2dcd746b2930abff7ff49a973bb609432700a7ff513350796a101a7b56f7ded5e019b0e125e694bbad21b7ba946a11378a64db451de7634b3f841b7ec0dbd9bbd0b1fcb1035a4b64a85d21e99673e5cbd1c3f4e7486fdd558c1f67fb5e7d2492675b17a25f2137b13d761f5b742d0540f5dce268edabb0e2eaf9b46572c3187dde5ebc1941cb6f4f470363d197324207c9a63cca049e783b10ab54540d925235799c416deb0f416c843a50fe2b1dce9dd3718ca6e7ff4e263531baa0f9a12151dcf619c46756ff8bb8d56527a537fcda3b39e81794f8ef1bfc03e393a7279b92b3126810b59a1195a40f7d9b0a88cbaf6f0531d5ff72e345dcc07b52edff987aff0b7f06e4b3ec32f7d44be2179d66462989efdd58190d74f9c63730af0deb70f240efba36468bb71a38e65b1ae7bb36a243c9835c566705b3f4fa746777a10c0e2767168054f087b873c61c65ddd046a63ffbbd4023f784907512e298d681f6b7c86f9155b133da773d19086b5f2615fecbc0893295705222e114592933c341305e09c0e1e6fbfb6ce5329ddd4ac96ee6522d38050c914d5176e487eae4118ef68eb03581fb1e8f010f04c8f2b9d2fb9b7756c274a3398e40b10c2ba6700cc987577699132edb39b46ae378370f73a83daa4e3fe5b23926b24d37ffa0e64974384c1e11e87c211f3f447a1ccd6c8fbfdee0740adaa0c39a82bf9954eb3f5d1e8d03b30bffd50924a874e2a5ba32b1be900953588ede5bdb6cdb7d140a41c7e9c416db44dd1f6b7ce80c6b0bb6e47be9e0188166db8052ef1f7c0b94072b19cc738dd781365a413563e94c79bb219b4da907bcb2790ad8b1635ebef0d3423a2cbe77a2f9113f2bc9a4e35f5183d78f479687ece879d5b372f3551d6309e73706d94b1783a498525d51a0e2aad6b7171010a764d13a8c8d916cdb5209885ad265186cadab863671f6dbfa906685b1f484304ce50eb11656ac790718dada2caffa4573f86353e7a4e1374576da7e397a1d7e743e84779e25f667f2536a68f8954621138c08050dd46638d46787d90232033b3fce66458ebac25b9a568d3cda6bbb27c1e10a43c5d5751aff9c7a9ae616d5657474ec8b67777125e3ff68d3b9e68651f7281f05a66ea6cee7a5cf46f53b54e8d0017cac188cef17b84c61a067bfb3f687343e3ed5bb655cebb452ff21d77fa8ecac7c2d6e69338b24bc93927aded6b5471d43ef2a22663157a3f8344fb429e79e81a99698fb347aad217bcfce2ca0b767e458c6f4d606eb5f4b6809c8b5cc00a11e5fce8860dd27d9c03164f65aa59b1818671bf88cac1493ccd1d1d3dd53f204cab576f133c7b9eb6d5fabfd9c5fb576ebf02962ee1e5b4a5b71e1ecae2a21c725fa220ad0e66a4b8752753de2fc179632e3dee18f81efa127211fc5dfba67fa93feae1c4c0d7ca163b87fadaa89130a76190aa60b5a72f4254c7b0b65eb63775fd6935fab3e13873d7d3f0c983bde72b787649697ff41744d9d7b6d9e4c239e265f"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "00475de6890f05596fb1b60e81c2427e0e825434701a29756fea0fe55bffc2f33c78e8752e089cde89440177dd1be899c5b91b67f1e9add977567d8b7449a715e409077f584a26e4bb62d40d3e990d435d6efec30c73f8f7675edf4d9c9074bde935fe76725e7e669a339091b40d795fbbe015351eea6e244f44159cc8251a69b6f53bd0a08967c0137810e7318a8880f8f75a1c8f71977ba04e5dd31e42b041fa0aeea318d67213053b810d9b21ae8d23c4205a537564d95bd1b01fc33899f767e690f76fbfd7d40b2169c97e5644fcb162054ce451f6ce8b0ecc2ec15fd3b1e5d7194d7e960515d70607dd465293f8ecb21ab641dc69426ad1a00a07dc9c1ecbd46831ca34f52b8cb73e9a213d7f4a3529b9fd845b122566aed0597fc34dfad2a1f996de7e22b3f3ac3e19a38d6c3ef85924e4825eee28d865af4fe2cfca9ba321b3d985676c1250b776fcd91866a001c6906e418642fb938c011586f6e7e71959bcb99a07bbbcd8d188680f8dcbd149a7447125bc8213fd4928c1c2956f0f175d180df741b9f1fcb9e6946f4ba82b3acf2d261ab7cbc4cf86c992f23f99b382d4bfba023cdd204999f29ee3b4155ccf5be7097bdc1155a7119abdac134938a68e6967c64a4500234a133c2f330d44c5573eb7b3b5cbb076408fb58f0da77cb1e7c825c621abfa9e5a45d23e55ccbd3c389abe91582b0f078f37357157fde1b45f269c1962a09ab3e73a46550f6fbcfee7446962a86881ded7446449dbecb7dfd60c68e600eba108a3c0a77457f27b8d5fb2349dd65a132cfc2876ee098b99fa016c45fa1e6a0e689b336a092cf5d6c48b00cdb37ea742eb689506e9369c4b563789257425160ccd399fa71987474a25edf272786b0caecca60a4d60d964a2d2f10b63f20e388bdc22111f4c4126769302776128047284e5919df4fc39cdb10092b99930c14a219781f862c44f59aa1c3a11658f54bb3adaf8180ab6e0a4eae57ed8635add0cbccc0801edcb82a1b037799d0402f18cbb38d920d9f881163e997f7917d411d6be11f53c1d2ebf4e1e73d6975701073ffd2f0dcecdfbacb010e0fdc6b42adc93ce3032610f6c3cdbb5dae00caa87b0f50b67590f7c69e71687f93de78c8f33dd58022a979c3cb4ec8f1b94a663161bdbf2f4c9d9bdd8269376c59ca5ccb29a7b460838e730370d53e1859b84204b5c55c725ddbc1bdb093cf573b3dbcac58e6382c19a246dd13f24ae3b7c092cec7f156c88d1b386a13358320450c2322f299923696bd100d3a909228872d524434735452152e9410acdd6c7518ad35f8701a591d7c4a36626737e7b3521dfcba316b94fefeef1157e7056a70f9c0a7fea680b081d5e3bc87db3c1a0c4f4d8c0c5e18680716e6d1e333c9de0daeb8320bc795ffc6cacdab56b76518b04537162ac5d01a5253b71379d35aa737bfede3e3550dba390bda62daf947d98ee186e92166de0df72dc170e0e55f3d64b3cd82307b26b6acd2eb14e7ce09b1be2ba94b88a4edd51c4672fb444388a8fdb959de4048f585b4a8c1f4b36d02085c9998b3aaa9fdad3146154bd363be77e23bd9a772126d04385dc197c4e0c12fdbe719647efe7c54103994bdfe0a523bdfca8b21bf4727fac560ee73842f2642ac9b0b64b2d14c3e8065cd8b230a09c0f37ca0086d1f60ece213936b0ff141d1c8465e05105b377d3d791658ececa5af7d4421661b5cab517dfefd5471246a2b1796e647e1591e7664db3b9629bd54cf0fc282364c98c333046dce059139a3e2ec61b1574f3358364a1dabdd1ac39713d4a2f0c751a060cb3c1863c771be0fbbdfdffffbe85b11d20fdecccad9aa5991fa6229ddbdd926af39fdcc52063b34b312249f3e6cf43b3fdc98ff5565eff88bc"}, - {"0000000000000000000000000000000000000000000000000000000000000006", "002f65e79050cb814bc586095bea05aed26ddd4ae804785a4ccc921dd0b50e329a133f413a00e8dde60d1db99b3c54cb25d92f170425c3cc11c5a26571721a6d4fdee30a9ed0cbd9e9a715cdd15c35effd93031a011e69f94e42a4ea9a9fc20ad4a97fdd8c04f544f31208c584acf06207bce2294844ff587719061979120990818903923dff79d4a75b8148e7f712413a02522e28efe6646c5a5389f316ca5f6f876ebd35f9d9590910f1364d82496f2ca394b1d46de30995ba6d6c290a857e805d68955da1e27a9c6fd856470edb1b6bc21be2343b83d6c4e7850204d6ea273685378371555b33791f392acdcb668f0598c196da1cf6be62fe8baa0be1be1195c8f1fd8efe0a3df17f8f8700715a17ad10d808b652184055ac9619b441ed6b9ee71458d0c71f1cb2434c63cf4dbc0353376e53fee9a81ecf6ce0574f77fa05228073ff4e56081d3e473e43953bfd5c0057adbff7e5104fc89e048e78c53a2604d636b7251f0c6903de6d5f95f6f7454bbabb80eab61296f015180b3be451cfc204e5c492121b90d7e5073a8d6bf92d7483085a51c101a8c7887488d490beed3599f419039da222a2c9f662edf3b2d97e7878f91c6c3f33ee03e19985164bbfff6475b2d1e17e417a41cdb2434517987da2f3204f51f24f3679ff663381e7a5951ed928ffcf5e95ebf0d9c4cc3507c57f383b63825da7ac0426a2c66a4b1bb3cc0d75f87472104a693d37f9790f60d509cfc5517fc31d95656868f36164a0f1f1aa08ec7ff5153c860bf786e1e54ec72c6ab58116762a1b5ee5ae73c84d557bb3c661c03ad9d290b23d81ed1aec7fc9af9ad54b74d861e5150fb7d8e5fbcd253727cbea37d5ea1a0591e3ccf6316c9797de019f3fe11c7332642c88aa89c54ce66f474864ab1ec47b80a63ba1df2c0190740737aa24118052b9611e7f5376ad0166076c15061723b4e930d9ddfb8400debf97b2120eaf1fe90d2c7419975e565751ee0511b33377bf2b0520b8c4dc7805ebc5c542835657e91f45287fcff714155e2a511573db2dba61cf244eae51fa019591f10ad24c20228d1028d922e140d76f785081dec4d4a62c3772f895561b59aec3a73a1b5eec8e93f9f7692e1604513d38fa6da9ec9c0501754d68164fd85eae1d1f492c6e4f21bea580e3d68eaede3707789f5edbf204d4c1159e8fe302b641065e9b5dfdfe233cdaa9980a08b725004e2158e645c0aa47db4ae985e0f3e2e21db7be060eda2f49aa25d55bf83ca6fdd7f8d2d40c3f411700bd173d4d93cf66ce3dba24c6f56bdbdbfd0b42dfa6b945d01f620242361bbc48c9326dbd9a19115299997eab3cf16e91a336819a8af5c51e345d561d3fe6f65f5a0e8cd61db343fb679769c2659619841fe93e7268b2c76dd408e2e4c13411252dc05d7e8103c211fadadd091b6706f1ded51c365086d8f83fcb43ca85d7199eeff3de77753549b96b8e74957e853f0ff67f6f7bd5591bd0cfb16058b79a4aeb931b0c9c7e8b3e9a53635781c496f8704157df963dacbbffec08badc6e3057b6f517bc218690100370c4179bdfd053b2ccfd2b5c62cefbb225e88b307ae326583e897009f1614eedbc3b21ff5dd3c5b3235e4cf33987d31024d23fc0fb778dc3d59a44690f41f481e8e894fc810b52497d67275d399c0ed4d14231b45ab8785c70c90c8625286d0f730e8b1f93d19f7fd754f9d76df5502207be4565d3dcceeaed93fbcf40be85ed6710f8643732ef9920960401d549c49738f45e61d9cf4ed38c116e18cb2f06c12c6b75696ca07e1056f5849c1e041a02659b30ddf6430c14d1f28b15618d7e2e9560e51bd46a34341c8b2bed6093cd4ac7d8e9a0c2ee263d4c894d2801262f0558ce65963be5a4bb59de1e3150"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "0015327fd8e596454cb4b90ce3e3d5174691ddc77407c0c2b601c4bbd4825191f425ab2bf4b211abaf8b0157c099fb472b8322f0e2b2f720a7c992859d83e124bb0b115cd690a3540c55cb19b903da755e7fd28d07e3f97b6f04d32b656086702ece8075ffd09d332311b4514715dd50c3f42a055b0d55849e5bb19822f109e403fab5a2787bc80690c4970a16ac71ad558a3d150957cf8889787f35a5c25f33961aa8c98bd40e8402a9069e2983005edd2410e2dafc3d351013153e9712e9467e32968d27bd667156c58fb66df7881c50c8151ee8fd7f1f7d3b8d5cf1c324156296cd633ae2f4499227dd19b6d3ddd08128013841a4b2249f1528961488e776678fc128a915c41d7ceeb6a5c779fd2daa154632785b5f1dc4fbe1837b50af478354139b649d2b0446047831a60dc1d6d490fdd96721ac3b55f20e58eecc235a1c3db5cc3817532c476d3b672c7fae960086b4b1ef8549b4394a72dfcf69230a3554d986d90b035be1b3caf15c83a9f0c9f164be009dd2b340ff02739ae2d916a481d812a70e89ff45f9db3fde66670e66a2aa542d9a23fa0e926b3e243568c6accf76b503b5e230b5da7ad79a07b35c64bf94234fa8db27551817fcfbb74b8b9b3feea1d6e110cd095a6caeda2805fd2c1fe181d8972742b1a363deb3d0a2d1777d353deec656a1e663616df0356706c812769109d9bcff00968188e169aa7d7a02f4776da7bb4f1a49bded9811f85cdbe8980fb154e87632f871a1fb03179fba13018d8b465c51cca7debe332aa640b6bede6ddcd9749ce24790e4797697f1b8ac454ff131334712fa473e083aadbee0981d0fccf0828c893eaa911ceb2d2f2817a0c4cc9021c0534c14b29fdb2c1abd37329056a8139681bf54492bdaada2324d2654ea5215961b02f63a2aefdf3a53a91fcf9614dc1c5dfede6e49ba5b16003513470408fd0bb3b980989bee0f0df49ed506911961029ce4303ea1b7edd3a854c8d032332f71cc2e00dacb22e98f90cf546b84b35946330d40e678e90e1d4946288b8db6d93726f2e4a041e7a934587dd6360b1eac5e22c8d4e6a97c0234f17595c11bcdba3aa00d5ce76f4e71862fa9c221d7e71c4ee30535ba46ed203ffbb6dfe30e51aaee036be1dfbaca0b681979b247336ede64ad8b53951446b2e2c7c126f4031e89450526122d3105776b05572067b7d942587d0bd6840509f3796723ddaba1a3c044db82d75dd7348bde2ec9080684048684bed67416b2b696f2bc2b1154394409402acf88991439d769fd270e2962d402a29e19e98c0874a1c7cf822410a2f74275c93cb976568456e434303775632238a57fe02986f2acd6b9ab2bfbff8e8823f67e5da41d17afc51df28f21da5d3e858577a3fe3005ad0d00a38563297975437a5605e6af613e94dd018af575761074f74c77f11b3e5e171c7f8da4b08c0feeed146936f43dd9d693032db5121ae2ec7dd420202411da01cecd8fe19705fbc26282f2c912fba51a22515f49089445d0cb40c311fc750e99cba0fe949504fedda8c3c83116534233c4f1fd7242a26337d80417eeb0c6ed1fd591c22353344fc0ab036eafdd55221f152b28c7264d4f8e466206dfa51f89239ccdff533dca6a63e65161f8c908c5fa184b811aba47582e860616205b365c101bd20712de622521ae9e0bbe62e91881772a66897fabd6dce23a04126b26ba737eab490740c43049db1b9718a4e9a11a773a8a8533fdd38a127fa710246e9d358d3014e525bc7909e6ec984a710cc97daec58c2d11c28b798bf472a1db7ae97ec6c30d8b349eb0e9603d863ce6a3a2cc2506670e3fa10e19f320fa8dc9fa1bc89e62db697ae33613769f8b0b2127dc5f8b8c47a0d8d95768cb6586021b8a5b5a54"}, - {"0000000000000000000000000000000000000000000000000000000000000022", "0011bd889605109a6e99934335a8f1dce6783f6ad9088040cefa03ab85ba6a42ec9e47b318be9e8e008b15480aa54c4de99ac9c1426464da4485edb0bc570944047ff6fa53e4f98f253484aded8601b3403cc8421f612f03de539b5186e4a29a0537d9428743d5797d43fdecc0aa5a4917041ff497bddbd2d127a3a9fb6528ff9df82a5384498c2dd2fc0d4ee42f3e3bfeadb0430305dfbdafa8ebc96326d9f879e9165fbd36e811002b15082b752751bc649055ab7d8226173f955d212e8797c250d7d9256c0da56cbc7820056b2476612f00bb3b35aecb8a8cd0b5a309c168e892eac1dcc521012426177faaad5ffaac713d7fc18e3f20261d3295057387220713665cedff918d8b3dee8eea6ddf4455081d0ab6120ad4930e812249a97fe5f8afff9b357426074968bc9e2fe1c331859f866fed35cd9fd6f1a52bce07a83c1b540cf7a46726af7ba29a293b543ada0091533beedecfeb41159044c8301e12ee5ddf2db508c98ec7aaad8297c125f11cd4f735aa0cff36e3a30ee71b4a650c5c733a9f773c3f61e7e6c9dcb9982017d5a164f29aaaecdad6a2bc52b57f5630889b18e7062b57b8ef87abbea2c260b29b65d93bd33e3fc55113060589fe5e51df5c7fd3951fde8281a1e6def6b0064cd3589ae058a3dc41a242614f389d6d962cba3e0c0e72db8d17717550fce2f88b236cd111d379fbd2032b175f6a4d60d3a193c707eaf01c5b162d1bacc40382d9e766890fbca9fae356ef3fd44f06dffb24c407640f2124f2cd8fafc4414edb798dcdb5d77d9091437703e779a19575902e745d75f567852b2c3c104d067efd15beb3bf6ba35732c7b621f1a4b21ef550472bf14fedd8b333e7c70344c87fb2dd6a9b53959c4307576bc7a6975a20e4bdf36bbaa0d8b28729bb8e361a3f645fef695ac5c73d0389a5b325ed19ee37487901054919dea6d24dbd5ac7e3b7cf0f81fa87b1dfaa0616ae769a0a186d33d122f538fa5e92250dfe9d4c14abaed3f3ccb84e93a212060148f0f8cf984a28b93c54be79f7524933787894c2a2f373299c84f75f9c0d6f16e042d442b9c513d3a19be05c4a1cd37c6b051daadb2efbf85685f5df75b1b6d02f1e45ce139ba730b3c5d9652a6f55b926e316752a2779f802d38f2d5155f6078c635287cb4956fc51db4cc676b6d4c1f80b840b8343a93359f691939cf2a3f61173b81c33d2169e0585380b2f8bec70a5973d71c0799f8777559d0d458704240e45a6f38cc2878a5bf087973fbdd162378ed36246de33cfc6b6881b69f278ee36957e84870dc00ae6739351c0b565c2106c215facdfb27c266f347402a1c321708bc4b8639dd87f2144ecbd1c89c726f83aa98297502b242f948e64601587312d3b9fbd28791a62e1e0bab9b7b7f8f199db336ea397b5b2240131fc6bf09c59a3a0bbd6e50942ef5ad561df7c6614defcc22e0d1b67f12ca6c7f36cda12f4bfdb97ab1449dc3a32a21d15334255e731627fe66c56bd380a1f43835ced6aa039fc63a2d02069e44d0d005f41b602dd4057d1d676af7971344410b046cd8f8ab6d0df2b5dbbe4158de00ba61f6c8499fa31876b4b5d31d304be791efce1e745384792790a4b5aa32a26ba04770bbddabc620a8ebdcc0800d7db1e39e78a8abd8c0805a6cac686c85bcb916307a065d4921df635efbbcf1f9555a5aa26e57fe4ce96b4123f817a54937eec7d0ee6450573300af7d6c232097236e4b0e17eca15ad376e16ba5637e43bcfb9548e74b62e5fc4767e2e810db3e11ca5eaa41f7901033335715431a23e6f503a16c86a222e976f578e53449f1929d7dd6d18ccc866138e92d794d4a683af51052aa7797bf980eed0e57b2a818d408e8affa4cc1c53abb6f7c0e55c86adec93"}, - {"0000000000000000000000000000000000000000000000000000000000000010", "00b9bdbf0b0ab915e7a58287cb5b280960f1db28881fa8d4573c56df774f05cc99f1f9c23ff6d03fe18617fffc5adbb62fabcd81726cb35d8ae65f67d582764726eae5301b5ec0e14454dc05f4b451d22579d69301bfd074d6c7dd189cd56a1ddefe2482a1011a42190a6d878fb36ac7b9584fa3932dd2f5859b06f1f0a50affff661ba29a738b9492b50acc5f0540690b3c5c12995dd1dbf05815c196c5e5f3f03da5836a342251037926c9c0e3cb296f6da06a9c7f667d52b136bdcf096d9be0cc6fd47bd2d9938d71dbd3ea7bee7be8e7072f4ffdcc7047eb954362633cd354f658e5d418641d265fbcb4ace53390785605d84801e19227d9af1d0de74cccfcdf6d2dabe471167ebac1d2b6c7bef6ec12d639e6cddd136d1cc3628e4cb6047f074a5c814e1d9beed9ba4eac67f96261df0ae423b54a058d96b530040a65a5aeb6efce80b41e1b27fd3d67604fc0a70291977c120e083ab38e927928699d26b4c2fc3c6d09689df089cb7c6a7bc81098997b1a28c5b37178ec047097d96e98d22d047508a4c2578d5aa261bde7721018753d35250611580a63e6aa54aa999698bc704a04407c84488dd08f3f09c54fbbfbe5b1c7a57df6e821186609bbc9a50ad605ea3155fe638f82977d603f0bdeb16e2cb0b493cd6be385b7d36b89b33a123969169aa67bcbde5b6395dc25fe726357d25a6132eed305133603d3c60f89b75a5a2fbfde22b2c02ef7ccc0106647b7f94c63e1405a1369f53751b912a30fd89607938c60ffaebc7fbad790b8a26bb1c227ebfc4a4708bcecd825caff16e98d5393443d8a9695439c821e09b862f5455919b4d494528142f663464a439db8db2b25dfb9b0112ee4c40802c00572bec656c372ff3916e444ec5b62ba3fa36986cee8c826e6370f7ac7881a508b7c780799475dd912b48022dd7d5838bf530d0130415069cebc0386b7008bc5b5c5950fc2cf8b9b0b95f23e73237b1d5111186736e2ebb72148bc99f807aadcce161815a3b93ce3004cfefbed03198f1f250cf13caee6c84685fe6b222b8d62262d9fe074b7c213100fe9af5361dd8a3f2292d960ef49f456bef9661e2549676d48452291b8d37b3bf174d2052c394c182980f2f78c0c30db466514ce3642ed8269b5bd1324534c9f8da95cedf5a9f7967f3bf06a51f132d193ed024b4fbda314c5dd86a7004b38c7845ab87a960c022a33a3f9abdb020f65f8d5df3e4bd841ff6a1fe1241626e98dfbdb3141903372b787742c1a4272d8910b1777ca1aed4faf736f9042e24f3c569752789c590703ad3704c44a72b3717021750af321e8af0515dc4b09af423339edc1998bdec221ff3ed4d9b41c3e9dc90b6e14545ac37a428371f495a2b1f2cd51758fa4c00fb59d6de79c070ae84ed26cf7f3ba0930176a838d033fa7b18343b225e99d031372a2df8ebd19ff1fee107d54fa1d91b32da78ce195d3158ede280836ad01081f0652140796b6e7d9c228741883d996624db3b60e76dff5b14a3c0aa61d51cddf436e1619b0395b3e096a8e227326224d9f1694aee6468cc327311982ca16f674666af36079aa881749797955aa134d96d08e1073fab792d2c4ab5da481ff9d76d234810e3f2bf81f3c1189de5cbf8b6225137588b87759522f56f7bc044c30b633db3c0f65e793d5d7fc13ddd9a7d2fa541710d0dfaa1dfdad30ea24f7b9f8f46e2c4eb950ce1679c6c1ae08ac239597a3e6183fffce4cff98c5f23c56eef2dbf67f91f796f58af5ce8185c4de12f16e0654cb65620e009285c4d92b51d7864e97cb18319020e88aa9ea898bf2e50ac439b2c12a3d37250f7bc90a67db76769b02932121c118d43c7118decfb2f29a0d15760bf02b2041bd9be538fedaec71e65815c115"}, - {"0000000000000000000000000000000000000000000000000000000000000003", "0005d580a702df5c5c0360214e22da2aa20a9d19272c995663b44bf23ceb39c68b3fea6655cc5536c98b1004aae42ad2d064cb80344bbf4468617e1c55da4e1a2e456ce0b35c0baa1557d87b5dc552d40dfc549a0057feeb7f9587695d5e6051b92fc4357fa03424f84d13950a4053da95765e257ce1df76c15f3e91f13e1461a183dd2095e3532d5210e5d3058d0bd291a9841493bfee02cfd4435a3736bb02548d570b3ebf83fc034bce503c57731af400c272445c2ecb5c297b92b31ae797fc2d3162dffbde975a83f13b6a179c1d79a70891abb6af0cd70751de439dffdff499c526916b16233f46bccee1d72f2151731f6b7cafb4d11709deec0365fd5af2a1ae75ed079288eb63a711dc123af7d3336bc37b6ee8790f6e5cd4c6ba5ce25edbc91880ca25f08cc6b5d9cc1eec9e541399be54c25559fcff5649db4eaa332638479aaadbba14f5f81fbd0a3f0745006a81d4652075edbcc06205551e34860187d0c20c07e63c796164f33f9cc2d42499d02c6ac58a3a054a27db8501d02dbaafad9d74f65c42cb0efcf5fc052536531f742a1cb4774568652e3d3597ad7a5d3462ff06ddab67c68a0fc35e8736205a3eb856465efbf29750d77c221c99d74d3892088d37d3e212da2c3ad2bc17c2eeeee612d026f19df340bf9aafacfc59d67bfe34d48b70e650e06cf73a13a5d25a8ef1c14c5c61de0b921bc60ca1d04b4345e2be29aba93ceb8eaf295a1b5d6b86814ba94dc3e1164cccf77f2a57679d934b19d5364c5427311577af0321effd743577e3739ad53b53978404b5ac89c8cc63ffb93a64559f61b62c7e105c69bd259868ef401c273159fc1f5224da92a2ce20ce6335a2cefcf5140a146be8f4da9b6e795dc06d13f08654db051952a710f2ea0e6cd7e50e763a8c512ffb2ea069cf319bfc0066c21471563f5106fc47e6019db60da1c4d156944701be6fb4905f1ea97a0bfa0454b220dd0540fac8a830f1030ba292c8629840e80546a4b1a6c1b6ec9904a49cdce1e5de8032f66be4400742b90635f39dbe6575402a511f2953a034d82f026356328ed8b9d8e93b33142fba3585904a145f983895bc330ea2c00d483eec2e907739bb36867ed05008c8c8cac1c811a948d8a7613dd6ce3a85cd347e8332289ba0525aef63d0aae7d67d68ab76d9d077dbeb021f9df9dc0b708b91c892708c325e7d6fc87ed2a217e7ef98bdd2ecc71aa624fdf354151dc6083e590f0b5f471d764fe69f1340329169ed9d0debcc18999e1564122e7f8a1ee6e435346ea2327ed9f31b11515803789096e89069a6db478102a17da435b502d0db1426271b3a784e0d2591c6a4d8d9dc924673e99fcdb90ed461d6931431eac3e6c1a48490888d0b7971b90c32474d0ff9cef49a82ec6c0b0df3e6c37ecd1bf89e04682bb35a54fdd6d15f012a0a7f77dcbe4995bded207359749220dbabbfea22349f6865d139a218d1d222eaa3fcb8ca4fa92d3d743ae7307d3d3dd2b5fc422f6797b0451dfe8daaaf83b26cc1f8f63876954e1207e2f99926539d9ffb11174343e9c176236235fc631feab1e6e08880418c335507e92f1a4a05153b192d1810baaa14231db1a529426a981a58c17bfbd80a3837eb83930d68046b4e979a94ae60cdff0ed79d8a3e04684cc9140d3a416108bec274fe52dbcebcbebaa1174b56841624af9f428cb883f456e3378c051cf5c613517e3b8c76121bdc599182c8d86442213a1fad1134793c78c7d5d8f37c94b6d7594ac9cf11581db7ec09255ebedbaa77d1ff7e28b7c55c92168156142beb0c255e57005c20f17d11d0c86a647975f94477df000fe19fdf9a8e4b197b23a52f5df432428f1ab6896224b51fe6e5ec05658aadd3e91db5b7298bd5520121"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "0027166cda58551b0e7e94923ad2001e1eb69e4d731632e3faa65eae7589f996735277595e0e4e9f4fe20b9ab7218966daa18e49547d40aaaf855467cbcb4829355231da1c3b67bfd42607b6d6ce56f7185d840b0125d1ecf31d0e99311831c8fd7035198ba05cf6082da8eac64c0c182d1a66056a1e7bb02d7604de39cd16d4fe30dc69884de7dc0260efd32f2e002957eba848186aaf41a2a141351f75acd36fb7d2ba559ae01f00941425ac87bf86cfd990ec0d462d6cbdbb2e3a163cdfcfb5a1943d6d9170b99475e15c139da63f2a33041af5817deb82cd8c29335db74cbad6c1eabf3c7912c84afeaf5a66574be9555c706c70e1a4283db7f70ee255796294b197ccbe23aa816279915f29b54830850e0cd931aae917dd220bf60ef8b673cc279ee787215e66ec67e51a3b3dd59236c5fadb6eacfddfb01d29ef97afd38d0977071fb4db04509cc9bcd714fe0e01f07ae351468c8b5cd9c377f6eac863a6561eeeee32879d6749147389833fd3455673951cf8b0329d9e2014cbff586af8918184c78c98ce2d8306fddc935851c035d56658de6bfd1b4acf466f526f62797ce93c06cb2a756cd0911dd28f64ee4de342dd86d2734fd1085e924ca4fa7905ea3f208a98fe37b292e97a3a6c07c6be5f528c3475c12b61a4d46bcff89ed3fd9de728fcf991e020408374b9e3bf48f173cd9dcb16d9e2047d7133a8416cd386ea3625dd6d054e27d19f34d334594ce6778e7a60ab93e5fcde5d1f23239afb73de08f935cef5ad4f8d80453453f12a1c65d8635908c82a5b9f7447e85e51c286d92ce9692a4a7269bdfcba10ef51c69f7c70a7f850045d29eb2bfb3f781e82794f12b547976d72b5976af73a08584dba7bce34f1be1354f63b242900bde4d3075f4ebb274661fb3edf4e2739ae08426431e76309b82f07cdf38ae69f7c59cc00e6f6ce9b1ce551f0ebd4f7a0d17bf72fc45a35181f14db083ed1190b2ff5747128f9be067125b53fbf0dbf416cc9cb6d5ca786d348c7a3eb8942446f9c861701bcd58490aaa382fc535e9fefebf1376735b72506f6b34b849fe5259705120f3a320dadc75b5c25650c58f328cc58e96da90df1d543485cc0ad0beea21b07fb9f722916cb10db8a9191f8d509947726f618d71951d527334b3849398371ea113dc5a27f07dc2b910614c6ea4148c0bd6e86d4ca12ebd8861065763c0818ba71779269ca6d849da1b4bf6edb04cad48f489a067cc8c5525134c9f75a856745689761e440ef8b6b13c73aea48c89359b54e94d19dfec8ab7f1ddda5b2077bc49eccdb0c7d7e26d28688a4f711152d18eecd1b39c482c30ed211162564bfdbf5af71584e8f4cd3233d5292289e752dbe2723eb92fe4935dd02d1705444755d220e968fe33ec296cbcedd8a39c2317618a70328239adca214e371ba63e853b0bc76aa8278c09a21dc863e51130e992cb0f62596d2e1c1e04ed102b205b395b998f7b7bfc58991b22c3281aa6ceefcfb690aaa8a92bee7069f69646282f051392527cf971afe04ea8b8bfc8145fbd6dfd2cc25e875014d3fdb5a9d132fdac749056e1967f991bae5203218e1c7cddf280b803b306b48603f8268761fbe3c2d126bf3954f2d2b354fa7cba349a5fe60aaff05d9cea6d1fd3c5839092bf14c5edcbebf9ae941effec7c32498491233f81d41ebaee52373d74086b2211692de3892b19dd3f01814f57b4b601d19b691338c78cdb039ef9b37980422ae8527f7d785359a7d15ca1ac87ae57956507e2609d3337f98437fca4d16427164f1328f44b57ff16d2adf93c0e71b9c77187893c6cd6db9a2ce5656fa980c3b1088f415ed750a79a13aa7bc58f8e8e46fff280e984cc5f0a06559ab8f987652f54933204fdb0b07"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "0044cc7c400e83df349c49a5457621f6f209ba0e9554e4ce87161f21639f262a9540f5ed1753549f5c91044baeabe94eb5c53f9311ac2af6d010fef9dfea0715ac94b877e37afd44471219e0460b8978e8bd81c201a79955646366477013319a4a4c8cd12bc15cf5b00cbe95c3b8d6aa1743bab0e66867469c698f96c40402a4342562b49873a620d92a9df33a87d59cbf718a0955b236ed1c73872517e356b7a795ce4f4f3c0d3a03a5a47e0b41998096ce282306459c32c21b784c1946a0de243065e033761a26a933754559bb691e738d11d895a981cbec9b3f54c61117c1a142822efa33d12ce1e2348cced3087ddb34ce04fced1dc89a972a52071b7f6cdd8dc94cf0df75ce30df975184cb9c729b2bfedc00110c136d470ca3353ef0585b00611ef5480875254217a61e1df66265004428e701e7e7920d870b12a0787b8b9c376944e5f670567936dd73f85b3901d0c166b343420f9c3500472e8cd4144e5799bdb61b08538f6fe44dffbfa542bb6a164923721fde02240adabb459fcca4a98ebdf32b05b259559c899155300da242299ba295a99486438bc46303810ee70ecf250b673e3d2091e165d231e6a40bf13c5b94625dfc1f231016159e9c34efb83de44529c9964d8894b54098175dede14c523ccacf44e8e5d27ae59a84b87d08c649636e92cf1f1b32fada764d0de9e07e76d8b71a6f07e427eb3704dead724b1401e7315ba9968cd257a71273042fc60b0c89c05f01c19a7f5304ae5a0b28ca0c14df5f61b8f773f4738852abfc64ced14c5701cd354e0e2a3ad727a5fa96f3ed65b9a68e80ad74150808e1f6729b4bcd987a59d2b1e51ac27f86f05dd63d2fd5a63d5df99b81dd7f88da2fdd3357075e98438615b21bca52d912d923f82663b7e658ae803bfcf5773d103c7df9947df7924b76c165ca839b080b79d5a0009d501e8e41c604f1dba23c30e7b81eb70b7cd11e0feebafbc586a17346f2d5a997c002aa03de73deac056112517f68516171e614c06669c87d6875b84f281905844caed615872de5b19cf94153491a92efd74102c4d09f4f8a549d035da325b9dc7ec1c44a7dfca232515ad2d5652275ffbb2b2c4965add7a5789dc1f62abb019514da0816f14b55f73060fc41fdb150d2a148771d14e012cd2ca13e95438d76713df39c335478045f870301136a59f37a30f4e64573e126fbb121ff19637fc5424bf9c77f03268ee57644aa739354749a144e53d6c753622cbc1fa285ac18f119e195f97275171f2a7ffb39224de4d7180e63421557243afe4bf306379ccd57d033616ed747e213525732b27357586142da5bb4ae2b715b75739815b8c0b8a657a63905490cee3a36ddf7a2b1da1164a5e3a8474b518a3f53f436b79a13c86ef2a1ddffd5b384308e29e8cdb1d66f00b3a6030308ac125a97208a10245e6d76c72fcfae19f03a0f0d08e0404a21c6a34fdc84bef6ee9ab4e01a297a373b0935e2cbc7226daed7930d0e4ad3482a456a4aedb0e0e07382dbb5220ee614fd93545da8e80c876d177b188719c0f252fe97564d150774d3f9010e8cf58d314483002bbbf1b55498b310e1d2a9b3810c9d0221035ba0ad4d89659c3ad0acc99e92f8a9af131b9295c6215f05a2cf1192bf1f98559c4f7cdb3a02f584efea9877cdab99807b33477691f31f7fdd2a0dceb1a16304d97cf49b2b8028fdeadf38b83ac4b00f0f2720ec115976ee4e228822c25e1d346d1e57cf2429e45ba258ded105c30a43c658d7cb47bc1c835f098f2f809acd916fd62ad0eb8f154814ec3148b7cf09922d3429548f3cf5b5e399f9e9a35ba2c03d3beb0db314517ccf15235a2aa1324addff1c5d0e0e491f2a338d3a155413739a4202ec87c52d65cea857b8dc"}, - {"0000000000000000000000000000000000000000000000000000000000000006", "005fd978835819a9c40b004efb11c12d2e62132e412ba5c3a4614f3e8f9698236625532e4cdab8ce73a304f3c984484f24eebbb134c54f3e1c355b5b5a900320289f5d3809d8b924d19677646ddd49ab911ef7dc056a2b9f0bccd460758de6ad50ca63763d3e1b45941f6401db5761c215ef8b375c5cd0a71a1f93b97bea1970425ea5716131963c564f83c2a11dbd5bfa5944349bc504db2bb301d7dbc766e3489eb2160f527c8303730fc49c9334a92ffea323b97db0c792d93f24f40ead1076e2eb33f5d70ce14243ea005cc3ebd227653062d320d5d2f26b008ee7ff52fa196b158ebf7bfa3ef0b27c7eec65f7dae9d5d1e83d4eeac31a9810140b04e0e22f87582b73b3d155acf588fa466f3b671735b9f2fbaf640a49a3c59a5c567d9396bad6b7a8c026eeda86ffcb9dbf45dc62d890ea1575901152797a5213efbcef1e4de0fb2d070c73bde1b66d6c176b6a01eaded0cf966a41cf77f15b141d6cc661bb35b8591a21b4989c9f25d99b4322824d1a5ae28e52dee1740363e2c062c6a5cd608bc81cadce258e21a87b3bcc074b3370d65547057137435dfc5570c1279aed1686021b05466f37cd3df963d116b8391ae44c65cc7d9d4c906bb4aa5c5a5f867d54fbb34a794190e1ae1180125ef0de81e0451b8cdf91597bcd5b56a6ddd836292955747c76d05fedf3cbc3843ee3953d569c73f14f04a9eb72be9ec56330a4a2bb9646316b727f1bdb7611c6e4e746e88d95fa7fb6b37653dc1b6937bde128081ae4bb521f02cb47465b4dc16a46eb14177b9507190abc6cff1e98b743dc0b7b7ce8730733c69fcc431101844ef857db2986c90568d9d9a6635f63db1d02333d2b54bba20421c69344fe80ae258f135ef9ee61170f07c292f0b1038f64c19500e737e9166ef82a50262c54920f98434986547386cab5d2a8f924d197f701e9bc8a74d46bb0ba55656536b94531bfc3ce472e2d27cf6508d158dfb375244e9fa4a25532115d456102266e17b18633ed4bbe434cf5204f050df7b2e5060d8710b26a8b3e72d370139e63cfe34d8361d6ffce04498f3c0c58c0bbc420a0e76047631115581d2c0211339432ae4b8e89632bf35c9b40c8433c09bd2a9612c2efe69acea5a766be92572a234a20a1aa95deca33e3aad31c26e2b17a991348de2691a26020fb00e905cc9eed5d5eb955c016a4b1fb7806d96bee90610a0ed19d486a8c8a678120c2c195fb8cd141038cc7d506463dc4595dc4affeae9231891a9715b6eed4c1cc143a20c4fc2a2b57b753c248dac335c9d77d1382ae270b1f3230d417e7e9a585cca4e8bf6e6b9e15de80511c1e39a99c35b10fa6952ad3f5969dc783da7fa7326852a9ec70bc9790d847a857705e02c9ec19fb56984eadd31c699be38f63ca287366392ef9de1ef2ed036fe1fa125f8b6b0d3ca4e9dfcb1a55f16dfba6152fdce3158f61309b80c568d619cfdd86cb87fdf5f109061ddad6ced0edd1b933f078f6244507e9f6f6d114f86f6b3807a8168743d6b51b46f7f5e5fd7c17dc03ec9fbbfe9721f2de8ab6abeae2dab26dc99e490019a55edb1050e78d4439b29c54ca9a734ac79ea63905dd03662782a2c986c6a07942ccc1775a7e7f9ff806bf35e38a9ed561525120aeef74fa0127829e53df098be65759ccf42d18436207613d42ea93b15749861c352a86709bc9df234a2896ff44f73b51ed3aa52915f8d9e1c82f7ecdcdcdf6245dd1ef45a64d99b82731547754eba3c261277ec3e36babf79ed4c93965c31157cdac6dc9cb0b3a9428aab5cad8637c3e1d55291a6de3592f2a69d564c4723d3c6d48a25a465c5128180689f552cefe8714e673c5403fd4ad9bf393aa922caf1630b51f91e7a00fa44b43781a32e88ad96728"}, - {"0000000000000000000000000000000000000000000000000000000000000008", "00ea9d125dcfe3f8f21c53a3b16a9e2a14397280e715185531fd9a76957d9d528a282a362ac2907d726c1346c106596a8f77a9ce62b51d4290819c29da324e1dbb7d15c25f89eb3806149bc3f206a13279eaf0f503d8109b6b0db467d8d7c468eb320601c0773e784e064e3b6f6b9f5ab5f72470cd0a22323d6403eefa3b215caebb4d647cff66f15404a3cdd1968479f611d54d58ff8ecce2ed79594cb6f3093cee8a3b8d75767803c1ab7f7f181887841d30efc416e810a9e0166483142e3dd7aa13ccfcb5fa964d474a611dd54658f9a603cdff7b1f0c1ce4620813a33bc03d4b07d45be50d0d71fb47dccc73f3489381915ae1e494beb64853880a2b14a6d9b0a6a9a6d4459a2d7a5641d2b232971f3356c4d616ad0681764e139e3b656af65eee997ebb1f8b493d2ece843f835ba2a40836903358a4fda9241fcf9dc8580f07f71a3bd58ca76c9a3a61e31e3223055ff40e23d0060f3b3f769d6046ed32679e3ad11b0fcb1d25f1e0abcd6dd3c4a741a818223c8939982012eec5ff65d7b1d7287e83fbc53fe80f6438be3f4d1c7c5536b36be1d17cbc9249f3554c1ba458bdb7ef05f851b352c992f786ed70e4a891ab197b33ba9add292291e9a220ac4d9ae5564a15550a360ea0d60a2c06f6b0d43e8603cec16df170ca6f4e81d7d0d0f2455c4fce4bdfb142a9dc6a969cdae11da2afe975b24308d7913953c919bd754163f4fdf4dd156755ad6a1157070d9c055c5f35677c257d4ff28309d161de98cd280fcc28cc116d4ce0c5947124dddb01edc4f02f5844105753626238c31bf3a4f063d7730f0b85bc5b2d302ee3d6da4f1293266536213b6b172b209a3eac9b3328255e7be0892337b3d5036c449ead72a070c9b734482af648d24b9b44dce5445f4e9a9177d83168e34c1cc491489beb7710c1774bd26c3366bc919e5bd401b840b568f6b647cafed72db3ecc94216e7b49b461bc4ca34ee5b122ee10338131041d06a252138e84e02da4a44be209bcb4b2f22b1fee830859ce89c12a612cf18b90aacfe419188a4ffd2594fe282f9762b190280fb573a5749053b4ef5b087588449a60cf9f9fb260cd210156553db2c7363ec6233b8f374365cfb481a4cf2bab4322101d47102796537f519c5f2f27b1e45378e50f669223b9618674b2652dffe4626f2fa0103b0ae009a07b52e970f809e5ea1bd08ad3f8604dd47447ed1609937f9766478b002775586acdb9719cc048f39320a1d8de9988de20fdf7ba3fa7e9e7835d92609914d60d1ce092064cbac5e77ea6ef643bb4eda062633e66cad26d973f2308c8719c269621736205715ded6508f5e695f7f93a7d37f5fc0b6433755b9600a4283b736ede3719fbe414b623161fe9a03bfafad0f5d5d6de1cb63f3e3a33ac9867fcb5b1e4ffb9318030570b0e588fba128ba77b2e4faf85f60b93d65b726aca7de4d2e66e78779e33f06b2c8e790a89fd09b18ff6f92e0157cafeacb21e9e0a197dabc977cc92e4c218e75cbb66135b88ea4fefef4f45f17965e0268061f1033f44b454b702be23194fae55e1cafdebe0959cb6f76f92a07bddb0c285c18dc80abe5131f8e4c244253824c6bc55f7ee2e50c63b84e9df868fbb1ac421d7faadfdc29139d5b546c54af9eaa053cd17f7a044d1f657a0c7572c38205aa9f49ae8219549e924a1d7c81991b1561439e11b8c02ace05125809349d5f0566a8502d03092a489726787e6be5ee49e9f6db5130c0d457a7d17496c5f2f47b1bb323a6d7fd5f156a0b0724580d84010b254405c9eed04559bf873885b60db6237f1deec6d996534409a9224a623b469cce540cb989f959eaeeb7892e26f7933fd385ed38fe475e23cd1ad2e85a967b323802c363ecb609dd3871bbd1"}, - {"0000000000000000000000000000000000000000000000000000000000000019", "000705eb589b6883591244ace7e2af55a257b207204bc46dd5c713ba81ef17253312d2ec1e28763d20690c0d23ade04cbeef0516a322611fb34a2f45797c3b1e7639ae9b4e5174f8b034b4706282521f88565e2a14d2191aedce38a5b32265a5fff8b171906bcf6b7e18a74ea908749501f6682279af37d4b18c7a9cddbb19151f9a0197a21fd0c2c99c3457efdba182ff94d43b962ee73f6d02299d464984607b4c12930b3826d50205569d316a91c1e5af9770ecc0fa6e16a8f751130a13ec48c908e104ef7984871e31a419c6de7b72bc13a132c90d0ca1a2884e534d1021594ad87d1f840f2da5be493815be98b498a30daec205c703f27f0515074e7e0980a95403b5b3538ec072f2e20dde7805461615c2eac2494374ea3fc16f31e605b8c6df27a99115b92dfa534f96f9b41f45afafcf2b6f8f4d1f54346cc5ef86f75cb7635b224add17ee338ed6a25f8dba00ac381bab657a853766d5d4aeaf34c1ecc83b84d93c2b47d6bb679ffb8b09f4a13df797130c92bd6825035de9ad295286d787c152261875b43cd8b03647fc05d8c22eb35413fef2343124e9bf7084f0db1d670d0853cfe0a4a3eb09b6d0796f6068b64ef9cf5b645909ab04832fd69e71fefbb209ff71d19960d0b1bfbc162ef538ec97bbaed7df76af5168dc9ef1b1b7fe772563cfd2a54bb7a5c077b74a55fdb61623299ecbef01e26615a0eaef3da2ef81168922898b730c5c21650e5bacdf53d60b91903671ee4f198430f0917606992bf749e8111ca44d72cc737677d4de2236c7f8ecee2f05b5879c1bf80ef0ecb393052aaf80fbb2dae3ef093349fa318bdcd06f828126b511a9a8ab5db13ea3375ac6ca6be9527f6ed58817bddb72feed8b7d1a340e2eb074b344c11ccd3f03188f521e853e59bf2af617ae3c4cf3a094f1ab18e4e35155be6eb23835dd56002d11bc7b9df3e17a2a039114ac10999b123fe1cf02cc76930123fadb76ced449c0d843093c2f731e3523e35c3593926d6f3872129bfb6bf7326b95169baa35e9b71dd49d119fd9e288b892e26e5f44b3bba2d9073fc986b058cb9ed12117348576377a041cfb1ae9081b404b80d670bd032853a06154d07b5a48df0ed711a178a0adca66e6cb6bb5a67ccf7a4f43c39cfdc11a9f3a57f217e7299c10a5b5a76de90d9f5a975b2e05ffab4fd446b23b30cc7a227fdf5b3af33c3c925e0b2e661229df78993acdb55eb13544957f3d1aade31be61ecd3893677fa6e13552e45ff3119f1a398420404697d2ad25f0cd4c3c17517b6323b9f8743dba62069db0579214b564aa2c4667146fbfdb65393f656b4c8a3f320899ee855359c8ee834f52ab4549bb963c26908b3ddf122d8db3de44a91b590e2b0a1b3a289769d424bfbea0ae9539b90994124e118ebf4bbaf061003b34c0078b6b13d454a07bf0aacd15972c7636b856c4148385961bbdd10a17afc769c04a0176bbc0f806ccc50e816aa8198d9c820539147a1aa7dc5fd077860727afc23a2313ee5d4c80c37f0957a2a6bd601a179a06630199b205cd461240eb4bf4b1e1145d6cab1d4c9cb921db225ce04d13e3c6c86c297941ac77f11d307a776b12648b12bae6a498e5cc5780981d56604242fe37d2d3cd17959dd83a9e7ef5ce37ce5eff8909590e97799a200b04e8464a8fffdb83409f5a8aeb14fece75b4e92f77fd6a2264feef697ddfe3133ec916f84e1271c7f2704c99019a8d9e4c6a48d4b73c053085b5b71a141d95734b5b7093df313ae5cb1de7370b5b7f1aa8a3e40fff6504ffe7294cee91ba7b625b0eb14ed87dcceb03b19a42ad5697a29a270fb3e1dd1431ba4fd195b9f396ff72e2c5440997102cdcda0d21f33cdaf9d542673886e47d63d3f3d1fe503ea138"}, - {"000000000000000000000000000000000000000000000000000000000000000c", "001dfec28cd28cc3758e61b092f327caa11a3a6c8926328beead55f812edce98562e459bfa3420b8a1b4073a24484b62a811abf664233b65dc2fcc659fa8540ba6f298b5c6836a621b80ecf08cd67c4a5fda2c13210ca9e80d50e817fc162675d178a5e9c6eaf981b93e204e02175d9c55e988b4f89e5d7ecd6ec011aacb2cd69471b9950424f8fad3e4cfc29c0226fc934a443f2cce79ecdd75a3a4c125d4fbd280dd87623e236000df3740a1a72345501de0d1f99e7aa4bb0453393b0519dcadafdf8fe3fc58b563ddee5dcdd86fd6c48b139fe234e059fdb5515c61cfccf9b120991d87d58d1e1740ffe7cce7cf346f67df6bff54f22cb7fdf7ac13aa9911b84b3e236c66b1cd9037d50874bec3ca1e17e352e9fb49046b804812dee6c2c86ae3909ac17717b27705b85db2dfa035c33d055a286978faf44db832ecca359d1b41cb26ba446e5029cc9dd1853fc46804bddd1bd068461dc7ab93d0f8480f84f4bad998e05f54a5be096955875bf196d76be8d529ce9a7b976e10577ff06c51aafedd9f028188a7483d97f59b939c402bb560dc17b9770d75360072b4d43b34577f8e7905a784b5a2aee1fdd05ae7e5abeca83e4ce27577174902febcbb929e31890407dcb2585472741498e1ba0c803db63253e8c7c051c2856f20b7edfb1d5fe0ca13865a16a51f049198fd228906dc66ed087bf9d4c50ad3a30eb88d427baf20e155021b561993764de27e2f8ccd2edf6b5e61e2aaf79491dfd1b380521f12691dfe63a63453ad4dad4cc3862bf125fa78703a64f8348b91c821a41fd7ba4834e62bbfdb35ffd5d5e3660e12e181df26420f705e11105d7435a0984c7b86482c14d758908e5fd93fee03aec224f70a070290526c2b8d9f93861a9babf23fc2cdbe180864f7458ece8c3836824b94dce28d4e4113d35eeb88b8f79a152bde00f92bcfcf44830ca66467c2d97a8346dab3b9f34b0b8620d7f9932b9f8ae921e0d8415ed6e57f5dc73b30f87372fb69e4dde9467338e4e3b87705735b49e140e8947ee02459099deaa4b3a3358eae6586bd154807377760c2cf90f5d9951622dab2c5be7cbe15dd9e2a1653986c123cac98319454122d6d7518beb14c7f079dad8b28873168cf2d236371ab0b864402b368ed1291cce382e89add6251520195ed0ad9a30413817a01b95195f5c536f6f127f0f37b427c3db00e1b93e40526462f27cf3a94fe58e07e75bbd3e5af6e3e43d6079ad84dc20b43ae6f05d0a626db50b1740a510f1e1298f7413f96dd45569774fa27566e4f1697192c5f07c0c336480c704e7492c186107f6ff602069c667f162f0d726652c45af28e720283b715cdc04c55bfe017463ef2ad92047bd55a72e3a73dc001dda6d7336d206b8d7e2f565ef5a19e8220e13226d1fe805c2b050373b1863719e497cf323320b7e53b516705734a7f1bbfee08f653b9ef5b27e27c9f482d05834f99468611fc209bd133bac7a1d3c2b0bc987a1f8e6aff2f161bd5d7f8fc11a6558479025362b9df7695d0151cf3070e3961211c67dbd2cd70fd5d9135145f95469f65299917dd085c5bcb190114792dfc6d9d31d59f10900b3507c4828c58f128bcc3658bfa59074b727c38ee6fa26f9d26a5a94bdb86d91af9e1006ba7b61e1d5d0e5632d38243dbd67c12c3fdd64ee9d5d9ab1e48911b1721b141cabcaad883c5422a5e415d90bed3bc910e794d61ccc6372ecc80c160b06ff93d7cf30f71151ebb1f1e55e5b6d9f593a26d429c221117cb8e1e591143d74ee94c28c9251995f6ea3f5a3f05b57fe4d522573f1426da8c8f6c1ef4a9d6eefe425258d406f01c967b419489b241ea6408ee405f74931f3c7a48561cbbadcc71990cb91a3d12652a7ad319e30bb106f9"}, - {"0000000000000000000000000000000000000000000000000000000000000007", "003565c15c5261357f5c761602b86915d1d0f8305813a04e22cc0c7016c45b338c613698f5312fb1656e23ddef642d74d781faca361148c8ffba1abcd5c35e69872c23cc303c37f7d9f99021dfb99760ef5e5af9029e59cddb1c4af720a8e0c7cc3a9e528bd87a83fd2a58fef368f046439a84f488a5b7bc8f59f95afe330904fc95b69e223b286da0a58340b42982bb382b730f4c83aa90e2bd03370c22692bb1e21505d0d5e8ae02ec276f918a339dcac7b1f15ef77186d9d81958160c78b5dbb708d9af1ad6b819c3c152761a9c97d58d10bffbcc5b072a549cfc516da30e1fc50b0f7c469d304ae22fca4c5c5ed58ff4180f6668d2020373e37028d7b24c7b9a44b3fcbeb3e78c290f070ed55f84d6555e94d4f5611fd76dabc9b76f6faac2d527fcc72f49d95c8a79206927c4ee95acd0419dcf968f7effbb5e3f54b23899935bbc3ba5fea74c7b3590a70da32b0042c3ddd8c86a8b53ade6094acb583617fa3e59ae07b95dbe2284dd247e1242f0e849a15e71b43b76ee00b57524c6808fd8a1ecd060f4bd0f31008efcd79705a355f827ded4a382a095f4ad479ae9aac8aed7c10517ea00569cac5fb6735133f95921c4d3facf3196071f85403804c5a1777fc5a31d482169f530f200490ba74f0d5e4e6edbd04fd1a424343f3ce848ec4af222615b0de62a7c4b8977b435c9db8aef03b51b4652049f103d7095730b14e361a17697ff471a861c66cd8f7866bfe568b3976cd3492067e78bab7b5fde3d4e0936da2b925b5f536d90e4d6bba7cddf2aabbfeec81b1c1f44533e377ffde7a57950d37f6643bedc6e1b0cb1a5856c5cca5fd18135aa1355df5ac3c4f70b130e2dbf5baec5a40d08af217010c408991b1e5849b52709c14145cc00b5b97a33c938b400ea66f854d5752cb9617a5796a9f180f61a05f4fe80d318fb5a95060187b2a682c07fe2106bb3cdf23f91d90e44909afb15ede917b9eefbedbe2a042109d774dd6f918dd36a1b91d681020beb8d56b4660964efa2e247c6379ae82d3bb5413910e267454b55347d711195ded0f4a22c0377723f41479bac7477406e0431235f22a8de901705e3082f4e13dfb7738f50f4c29b026342537a23f804ace0b200837065ffcd41565a6a7bde687c946c08083b26eefc4233b26c78c0fcdea3b54c9da69543c80334fd6cca1a52b1b01fa0bcf12cf2a19f83f57084092297d61290826f52b7932307c246b8d68c94031109a68bae8b53eb00f36dd56250d5979a444b9dee0c40cf23f767d347ad072a091f37583baeae20fd9d59050b0e1d2e841fea5e47f0f89941beb4bdef95deae195ab625a26a620bb6b1b899505b5962a33a95cf17088f27b95d1137bbef02d612456f99e6a004bac3974d1f8279a2f0b79faa676a06d6e8bc82bce1165d9e03239f57f904b86b2ce2c0c7c17d9f5ced34feded318d6ab7f840ef2776eea24f038b917e24073bc55bb19e7c73d0466e32d8e6b722244aa1be592143958eb1e60438fcc9367a5bb88632cad1be08e73a47430ea06483240074fcbb18fefd603b5bf3146ff9bf81f760d7f0f5cad50584d0cbce16020a512eaf34d7ac6460e79a1716a58bf0dda13e737b4439fdefc32bda5742d0794d11a97987da481d4e1a3b3ffcb3244bf0860119fe2709a86d9175ed202667fbca84ca0920b1c823d8c04c67297e977a82f08b1197ee8af22ded94e7c19f7fbee246e2e6fd0ae87c9fae9866f009a792a00243a51d5077aa549ef13552a836645e24a6bfc847b166c19402ce29c894bd6b1f566133e8da51c579d1859befe99b0ef7f7bed68760a0f56d7b1833f74411d27e1b55530d63c0f9b983523c3cf4a862e943eff822fb70b7ffb30610fbc0ff40950c2b8cda75795b023"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "0017e4809f32ded1b9e9e2820d5d59319a4ffdc57d0cbf79d52d86c39938c5d281336b93b647bcd9a49a0196aae2a01a20bf9af0a820b66d47cf76107f54260806baeca5cc4328eb61744317cdc3c192a2109f3f1981e79b6c6492ef903362c2df68b3321884f4382a1a635f65585f94755146f4f81d7d450208b639485b20aa35e4b86d22e398c83c5ed1e3053f325c5cf4c12c98bfea46eda495dd85b39323e09759ae709ccb1200a5412ec643e64ad547104a6f3ab3906db90e8bfd0a8c1c6500847e20efdc00f5b1a9a41d154955b1650245c19e596b5e7960767028c1e3a709746873ed684c8c95a1faf975e7dd7376e185c2b8c6507656407b01e11f36ac490884cf86a301e4b1aae2d708b77fc2459a13875b14dbb5fecd87e215d153c2336a19744b02d197f7a89b9250e137933781a2a1594b6191fda80b69eda0a8b6740bd801ecaab7e5f10b34f75a4c8c01276d9f088c4008e470c9e25cd73b62c7ed98f3592a62e2e6e15d085be787f613a23fb6a704489fabf40894f256491f2ba9253250ef339a9fcceb18de542e0f54c10a2ff5f4afc53202b161728b99826a312fb40626f9f4e371393b8e2fb2d22edc6af6930e76e2422cc3065c5213904fae8e7574f2cd8d5e10d05185550839db23d943acd3d5092441dfea1001365eb8b0555414854d4c155d5ac38ef7e9abfe13c213083dd4220c9303519cf344d3d4bab2b78d5a34624490768f2444ff72eb3c63ff1da779c8eb3949d59e91fe9c8f4f186ada0107d279ad95557660e4d0f0d219a035951d65e5ab8db0dfb1bfba3bb87e495055f2e24f3cc1170f913eace838f7cff45ca3ed1d31c4063d8adce9932a48d9aa714f7b77d039135c75b759b24e95bd5aa2171abd4dacd8e1c75af5250d15ef2ef97cb45c83b53ea84ce523ea59dff983550de33031af351b9aa9d0009f55931e0c3e06aac8e250271522e09e6b26721101c7a2784dc1aa1c355ef05489c71c251ca22ce1341db9513a021afce588d7b3d0a01ef20bb8615fc00422d0b3fa8e11c740dbc935d5ba6fb1718db656d41510666b6146e1194dddb1032116dacecd4fabb848f031f004816811e061c10ec5736f355796a5671c801b27a784c607ab6bb367d684436bf93ec9ce46baaea44b8f1e3b6164b873b4f1891fb05f588e71a118639403dd4dd812b53ec5cf4c815392d8a36dc228d0bb6106dba72c791b601fc46d93f621d7d1e51e8872385d1b53cacc87bcd3fbf7be5669aedc6b0a26a356740c31e979d35e2064996511d534aa6096ed86d6dd642305a803c7e1a02e614c88f29edf4c95a1a1171cabed31e1e2868beda5a974ba0471ef7bdfb226f1565b2a0c9b730d4c8628d9a05491191ba37011db499ee6e4305cdca84b1dd2cdf0b194f256ab7d5640e33b28de0120231abc9a82aadb8f2012531d3734b0573fc09d1189fe4abd0bfde581a69447f8ed1ba918132c0f0f0adf1744e42aae29ace7e2ff4f752fbdf1ca5c0bcf615a074ad11df28b32ae76510b7fc68ea0af58039e0c0c5a10daa1d2db634e115821b9e05326745af50c2d265973619d01134dd18483256937621de4ff28fd2c9dc306309c43b6f886e3cac325bb29dd3a3a0b374c32c49942de37f9e25525f58ae20565de8618b3c20b9d639124852ea57eb89262da369460cbe1e7b72e0fbbd1fb58a5f6a1ee46e344d2d506e725ab9eba4412dfcdd775caa5f36830d663775da4aebedd3aefb133a7a32c9e90cf5b424b358005c5f645a064dd8fd4145c50dcec076470b893f4f5355902224fdf32e6d22373e192ebd9b1437dcf2278b4f0bc31bf04bfd7ab222aa246371686afba8fe29ad7e9fe054024dab4b028e6c5505f68280d4aa39292d527865ee4365ab1f6"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "002644d8c3ca46fb4da5e05432df8ce60b12bbe3f724ae2eea53f81b0dcc5c74253b44dbe5975f78bd2b1e16c3cd3d4a34d0ab812537cbe615fb7bb0bd5f74253592a0e48b98612528b320b6fb799e00e772f2a2099abc04535285ab2d98d1bff7383539078daa04bf0cfce901b7e21257b39185dabb5faea21f4f192c45219ace277fcae03ea8d0c3d3f26f8575279652bf283658bd31dc67198f7803d6b6e7ef1791ef5c709f8901455e316693961ab09df2660613b4054538ff349d098f9882c605df0ed88a0718b9c00ade028ddbe4eb090db98c3268cfcff0d221d92e799b1dbebc98cf250c70bae341373195c618f30e847f6ee56bde8bcf460b2e71c303a8d473e86d2372f79e65993827794bfb13bd19f7004709223ae4752c2ce5340571392c36171489d394db5fbb15cae601e638d3bb4909719a5cf235011dee69b0e6dbc905094a2a73a916a6bf9f36530117f1198843d25a92d4a41feceee5226d2c3885d0454aad30c01f9211129fe98c70504dca84d0991030038339e933aef033fc9bc788b8fd43d6c5bafecb0910788ff39a1118adf88794e21c5935915478d7c03a018980fb4e481061d580713b33e105eb5156ddbb002ab007ce5f8b6c056ab0d4622a5871ddec323d49e00b7c816760ef1947a8a77583142e65edf88b527b6315c3fe34fa4f7a6717da15447f58bcba09bd7311f8020a7ee68b0d8cc1915e33bffbf145862538d5e40f05d0bfd91d87ba41f235a0d771292350a2869a8a2a1e016c492e327341f098b3fb2e353b897830b662f52f73d35b0e27412d569df39ede6720ce1dd1bff9d202fbacf8e781d5201dcfa1d10adad5589972b07b360e94e1e88651608c8f17f2fde8acdf8de5689b219d0c451e2b995bc79333ac0244df1e9517439e5cb37c374175e6329bc03f6f8238f17df5ac477c97dea88400b4203197a794cd418584c7c946c7556be47b8d14082f2eb892e2b1f7cbce314f215f632491c36c3021018da5f52a85e4e692fa62b5caa5d051f5fb928abd193941ea334b7ed9afb0b75dd5be282245509b41570226ff444e9187053dea070571cc722eb8615fd10c519c6b7302e0d44b0de419a4f659d6ba7f27fad6fe0a28b5d0a78fac9dbb9a645652e65fd24a947fc24790ab6655f4b0ecdd95610dafa4ffb99b8a10dd418801aab8834f2df1ada6164503c7adafa99788f26ff3068d35c7ad0b3dc9d5a56390e2ea5fe1e3b7f8cb6722cf0f7e6be085af29a146e8cdcbc091f59b11728e35eaca4893cf500d31f503c1d0eaac1756f9df5d130a31d68a3c74f41fd46a221bb0a7c39cb688bb49fc2766f5912c509faf741194752fde712eb5421d15b80c050881a54675d95fb0f3842db69c7a2e8a7cdf8a0c585af0f3910dd57cd2740dccb5f7fd743ccc03d701a74b1d36e2ec63c4125199cace5fc1c23f596aea68655df1f9ebbb9bb427671050d6042a344b57e66a10af6cafbe29cb0bb13e015c172ded01b7f7fe41082dd11c14c72f5ff3827fb418ad756d0d65841bd63a12cdd6ccd318da27d04fb505a872b81a920fb58e932f4b11c2094cef33f9211444b9d7c69539a792c269153f87e38205c74efff235edfc7d5742a60ff53d1739e2b77de0d24dbef340c62976df1a59ad4099bad501b94ad142107f3d6d2d721805d7979f3de5bd5d8707965adb6219da97f5bde08ba01a7fdabf41f96e8d0ce77ce37ec507b2e0558135d599a2a84dbf721c0434a847d2fa0f66dbc2894b185afad49f0b033fb45b036a0662aa53a1eae340f20e0a468c1939d36ced1005b2352e9b824abe927541a3646e658a6298b41fae1f9f2dfbc64fde60c3c6d298b79af8b0b667f0d116325e536491e028cf61d7d50b79e25396b18076280a"}, - {"0000000000000000000000000000000000000000000000000000000000000007", "0019027676982fbf714c921f27cd0e3b2a251cd7870de9ac065952c0956728d1683c2881125d75bc3d9210be3e157396649719d1f21850307a88f5cfa9657639b4db0805e8f9e59baa442e30284365439970af8f0bb5b3b7ef9497395e3a53f17adb9de1ef66f0483d4d3c0c39d014e94caaf13c9ce2fec53f3888fda8720bc35c9a2944d0cec46f22e92757eb44d8e6f59fbe1a464ca0cd2bdf7df382b41c5dbcb7a553c12e3e94011f84310648c8e5a26e637b904e23e5a0f23248df05139688420f07b566eb7788e8c2b7fa2312b7741a01eaf1eca3ec1eabb43f0458c849141dbbe33526f40c3efe780cf66809d7475521d1d937499038d63d4b04c91b804ea06a851265c1f378fd36224c2237a0060f24fb3db5a9330fd7d961127bdc47e077ec078dda2d414791775e74df25e1390a334ce6b65aa138581b426e4300945872a59ecfc459b02e4e19834e59d34d00fe5ecb9c8a37d7890a27140e753585d75b7e9d800c2af128f4cb94c3d04063a919eb491928ca4a62220254e04e32d86081d779f12389a113a0a37515125531127310405adc3148387442093ccc3d5beaeee82f0b6b19a6f35cde77f6ea6108fae6952dcab7b0ef36151bf1f0252ac089726f99ba106a4076b9cdfbdebd13619559ef1bfa15e21823323f2553424aeefe039c22922b6cf74c5b07bc5e53ae13ab410d50314f4fcf01bb0c12fac53d7d1a84f099cd0f3ff61e21167d355be03b6ebe570bd336fb373f1afc4b3b57f7fb16090a393d28a3c2cec840fb16bd21d0798e0ccd5383bf31e4d776bd1f57abf187352cb257f15b14115d14a704dac26478875b79529d8a3e2f7db66af1edbce95522e21ce592f5b6c1e828245fd7610f5202e3f2770d099e2bd85c18c0abe26222656efee821ab2a79197122eb24700b519e6aa3df7260fa2a1d29f4cbb4ad9a009563c988d3512d2f1d589d9c53ff439a43fe10c40dea3f279c5875c5fa58b1cdb5530b2692fadd831d0a78d967f9317309b32303d9133f234df96355074522c1d24b51af1d49d722235cd1dade568d745eb6ed0c07a99977c3aa51ceb78596beeea9c5e167da34cc0f116e97138b7807db99367cb6d4063f27b49a2e6b30d597c372a048bb444d95fda2f23205998a324fd657e01ea23468f03bd6f5c6b17966fb65de9a33ee8b08ebe2f16c13d0f99abfb3f237ed9995dd5bbb02ae345b34a32feaba196b42c5b825c2f9d188deb2d1980adce3fe837b53d3e96ff56870b1de29897fd670c12b73c27620f3ecf3a74e344caeecaf2e5973dbdc9924c19b8f53544b69fa8cd5c7c14ad2ba0b8df10d83398a9f3fbf18b035d0d90492144e7b7675541a934025e7fcae8d8c43afd47664ae357b224e0567bfc46e2dfc2c2243622cdd31b2a9d96f79eb42a1e59c88120239342b440a358f684ec1cf3def120faf905f944f04ac0f7e85258fedb68c00e6101a995883eb0b38f920b4cce88a1f5a33e96645c86fd1aeda449df7511043edd6ec449759f396f8f799a6be1d3bd3871f94b2039a4476ae255f69feb021406249e8715eb22ebbf138a16f687e6694cbf33829409fe4e46e539f9ebc370753fba793e00e9f597d62b846a771950e3cd1c5a813dc4282aa0cc3a6b020a7a37ad5e35e957596749b066ca3a4008f3395f7704187111a0614cbd24bcb3b194014ced40cb6af425cf4054ef8fdc5d440394a78269b53547de340e997409536e2c5eeb196ef7844602edeb17f14969fa7564f7325e527c2e6701f96240606d915a79d935c24d148c689f2e4b93e4a561aaaf01e4763866f54cbc946db15e49b722351e8664fd0420c586b05eb9d0229ccf48101ba55daeed4fef8a8e52c5783667b4bc22edf4944f25f56ead33e059c6dae"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "0008a13cfb433f57208832ae111b4e5ab0949819f624cbb55396cca90f703b233801414734d13c97c9cf110f7e6c1819f6b11e909741ccf7d349f8a5b2cb131e7f2328754c0912e7c292f0dd4987b3a1f1bd35dd06a5d95efe937b9ee769114fbba864420ea0db0acd0cc46787e9d6ab73e7bc94bb497d6235f31d5302550a6315a6fdd18f673be946c1b7d988f61fd6990da418460409130ee394a21eb4203ee6b54600645669e602c9c5f677977b0f1ef54352613559f3134bdb2b1b05871171b2080afca0ae01ca48500ce08b8653e0320fc4ff14c74b304eec7793198861ff91e3ea5a9ec71942369f430f8e9da2fd241c567bc042f635dab1771087b55e91a49885c44bb2a4711829ea1e317507ad15c6749ed19e3ff10a1af3276dfda8dd429f1f837d24cd3a5f73976989c196126a6e531e77123f3b74a55f56bb6b589ceda1b24368a1cad18f3e4c00de72a700d68510225cb4f542acd3d8f4ad5466a7099706c308a3aa479406684679fc10c5659ec24f4b2fdcaf081f3f89836210af60942644a1e0709395a38b3fb34d4c10db58ec27935df152b4e019dff2c53ca94e74450b78eabe2489fd355caa38d209699f5f3f7e3f2ebe1408e5d739c84f3b6ab4b236cad4073900985f82cd22fa842e6d9044c082a1765d46ea0712a8d977b2145ebf3bbbd2585c996727878487e24ff32ee6bfd6f7028dbf2a2c890c90ef516098b6e22ed8fabd98b68325a7fb21971df3250262d25fc339104de6d07165190402e6bef5cd5fc79af4b2f64c2329c90fa5d9118509c73db5a84573b6a343f376b82bb11536deb0c7640a6f6fe14410e6034fc8960dceda6766795dfa7659458ab7399b25dae97b52a540557cc0e704c338cc0617315defb7c6bfcee40138bfa975685f7e0cfcde362fc96ba6bfce58829df2274dcc4f5d3285fd9b49ec007d66edbb810b5c752e56a5b66b6e367ed1984d0822d2ec1ea549b19f194db2a5acd7ec3ad77297fdec0b525557d50d16df22149594a9c7b1f1a13d74326622191b3922b5254be0adf2c7ddde7cc5f83a105acf0391de2c7e0e5d2189f5a4b544c03c5a16a03304c7066db937f1b41749b956262e5ebfa3a7de3ebfc2a80a19d36862a309757690a2691630ba02bd44fe78ff108f6fdb05243b236df11216dbda7965cf7759d9320750194851cef8f50218bae9df5f9882df717c7aaf22a7c1dd989412bb4f79560e7a707f2e649a57d73c0d6bffc96289b3e697f882c6d3f79a9d737cda646912d963f7aad87b26dcba749fc1f6f6f6775edcf91c0915855572d1fbb0fb9e543eb6d4f33dc9624eda2b4496145891e53a4d961404e24a7f340d45305bbdee1c15128c881d1f8f5c4f14d158c39e4d86b73de47c38bb7a509ed5c4d915b5652d1ef9515e7a2fdec88105e40fcc60e52e89543521e9a5ecf7391c05b218e508e3bae0f8e6d671bfba620db4e8dd8cef4e70bbc2129a1e19310b3daacc31823bed12eff932b54ec4e079a6e4aeed6717c1a80767b28e403f9a9d87558c0f07608ff8e7294cbd53bde486b660411e07cdd49ae25fd4efee466abf41ade0070430cc0427092cda56270f1185899212f21709f191ee7372bc3c97a59cd1511e396ff86ae5ffe378d1522afe9d69c2219d1ad88f092295b0334a6d277806a2e5bb98b71970b35e13510f6d9c5932b80de7f58867717bdc0bd6b2905b38e842c597d20d50f7cfd7cf549e7af3ec67bfdf3e45945d0ca77ce61d891f9767561d4f57378e2debbfd0cd0fd21d374dc7f8ec7b9da3c0b9b65b69d628d5311a27a483ff0e4b959cdd7f93a5a1e68655f5a1de937225566df5520c2652fbd802ab5ffe8104ff3bd2b2de419a550b4f92cea4b2e5053b65feffcaa006593612"}, - {"0000000000000000000000000000000000000000000000000000000000000003", "003ee02a5c860910743b12f281f56d5db79316368712e7be92f31e7ee7773a03ae90cfdfee465c12e7d401c010a9ddd08dd3fb7c6098844f8ebe9821d54e43309c9b757a59c409ce4864320c21a1a2a931795997033867396642f565f85ce6adbcb9a6764972dff3540c7f5f03e78e41bce4d1f65cb44db5f9fd1e5e2f8e0d9f6cdb324ee98d16bc412468e29709ad916db03a446ac2f1c2efe6fb8a37a62e1a6cb1ee142b99904d06d34f5376b443b3bb7a812cf08d012dee6a5ffaa31a6a2f32bb53eb30d0d7f878b34f63d770f2ff23bb0cb78d1a75e5e76992598457e242a96221ecd8dfd8357db2c32c774427cad305ab5ef7b7ab96077cd5511af2757c20a6813f418431f5d8c4c8cb51a8ba9f6c1e354a832710f82bc609c234e7c6612350091d84c129c0944ccf1cce57960c1869cf4391d2b8ba987e3d316c4fec12e70eefa029143220cafcc5c5fe90a19f027b1d8ef0184455fe147474e6fe03f960ddae5c7b3e6fe32c289e90c3230f47eb2556612ec207d7910810792dc65c8b15e0f1d021258fb13ac9651dbad3e8477076ae4eb50c3dfd994517b26e4d9d9bf31f737a05ac7ad2b2c30929bb7c029a00303e491956db7efa0e7ee1e47792e2e3aebbc29ad8ecb1a115dd5cea2a0d199a461dd665b55aef26c6d7bbfe671cb3395a9a539a3793f4669a879910b6a1ea4e2ed7982d5d4b44043397ac09845df8ed1e0a0926ef7e1f673a1e71353b93275ef098d343a129d488514fae5e64bd36f65c214c7762d40e7532e476235564231ff5277d18f5713bec7d9c887ac845faa6e60f92bf3a17aaddfdb3b10a6d0ee5a41be3e1ae6a02c29b2e0e621129d385751d1ce3b6f2b2d06bfcb4c3592ac185bd9abc107bd22c0cf33f11582a2b8ce2b46e1071b83526da55cd574aab66aab42634d7fbeb66ba2ebeef85d833b05d03005a8cfd2c8f6e37ea20303696a807d810bfaebc4b16ebc6367cd2b27d82641821f4d8aaff29679c00e91336df207a90b649c2494133917fac3d2dd08fa45324ce2d5298cce54118e403607bdfb38e544e7b65770d912934b2cdc382b9417110bc41d25b04183e38534543bb4c75f3fc87da34a5d1d9c5378a671e97f7041101c3484bf1c27b9c5b52c70451d2121c7d77fb101fba5724b7572075dce9580e11e3556e3dbd32ed3203ebea1c08b505ebf84612671fdf26c922e3f626f00fa0eba1ae2495d37a6271301b2fbf198f6ff6bc620cdcb4244ad170b7ee701250bdd11c3154f711c5c02b4ced936d15e22f57fea3892f7cd18d514632b366074a51d02392db3993fee1ad6f794275b79ab0d76745850b3393d434291888751b326a690dbe3b987f623a42efd025d3151d728567e5edcf341b492f1e80a643d00dc104a2776dc43e47d5a0fa9282427bf8fbd1021c43e2a3cb2d34fc8bf6d7eedba5c5ef3d37d3f41c17764a0c9fd78bf4b3751fa3ad117df5487f118d047c45222f0d30acc6ad974277e005e2352e7f83dc0a3721d95d0d292b64abe8e548eeda66e7f65e6d01056ad6dc38987a75e47f944acb66badeca4bf8b4140c1c16e5bc8680b8d8d975d7674eb106a825fe7be10ceae1e9f14deb5acb45013f25b3ad1dd0237696fc0ed51cecd1e572cd9ba3719a13edd128b63a064970093665a1e51729615e5508d157ffcf324d455f055e26e7d69d705185ede1472617c1e1df275bea7fd3b50c43e248c71dbfebd307c3db233f22bdf056b5519d25153bd4b8719149dbff83a63034f136260b357d4a0ad8d1c9398d8e49a7044216ce3448a5527b5c89070efcf897b9e3d5bd84f9a83d7b61753e96d7b50a7d1fb693957397cddb4ae77470b07291b19307583e732a902f3e80b4ece7d5cdf3fbe03646ed556d156099"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "00ad7cb98ec5350df9f984028f378bd9577a1411ac30fbe7d16f1f279d78d504ab81edf7cd9c4fff47ce16fb0e033f54e5838d5d6412ac7983855169b06d9f1c1ce7bfee0df431467e141c33f00c5974c75485c407dd293fb16d4325df0f65b25fbd50ab6db29b7d5222b32b23310f02b198d402bf2e30b03a3fff721e2d33f8149f29197496d6a2139eaac7c33e1f5951c7033ff73df944a989778aebc48171ed1961230fbb411b01aa4137c325700bcf9a6143fbf399c32777f946d43de843239a911c55365485948e44be81d92d3abea911176f1f3da9aff96c73a1dd653eb5cd9c993942af1906a1dbcfabdb1f9fe0b3153ee8038e7599b6adf22ec5ee4612570f1bffb6470df1c201e1f35cdd416d4d19ef6df553a90f74c089b9726e7d1373a2de572e4fc43f6328f308e3af7115c9d67d555e790f76cb4450ca75b33d2d1e436b26e627b935866e17899d32cf024c8050c9876a4c6671715938ee8d72c21dbebd8b0ef7387e5b0dee6df539581cc3ca94b38ac2bfd1b104eb7a3e41c89a188eb830e423bebf5d243d34e7301f0be5c644567b179d74e575e8450a4ae0869ddf0a02f035bdba5486c6c2cd121aeac7362ef520b9c77c22d1dec65a4a82d95fcf391d06fc179b18c0394d820e43aa10d0ac2b39777fb4c2f2d3d7f2588077d58e2906f5a4167430b1f098aa7c2cf4424fa0049da8a4025e607d858147c43846e463fcbaa426f474da7a0f0c379d9b4f0ff91911c001f05d1b03f2294015aab802f74f77ed01fdc1b52571897ce5f0cda331af1ba2061cf9cb2926967ddb7753378921542e8a531612470fd32fb2a1275d4f6f9244739f53e0e66fecd3f5a74b56278fc4aef7adace6e96f1f5142b34e10fefc1d1d89dab368e510d3ced6d37282e27f1216fe3531144c135abd9bec6bffc8ffc6766342583e28e352d9a6014b16041cc6de607cc5f845475a42e2e095f88b620d9d8915980ce0f557d90c5e39e7914776d9dec2f701f475e30bda9ecf6ac7b0b52830f7c0e1a833204514d06dd2f85df5078e3ed3f3cf23bf396511d3452005e79fc78b2c6817895aa0af481972113da9f79b551f94ad06d6edd6a3caa553593aadfcbd530e1cfac21b16251f72dcb11d5f96b4c5317a7f715549bd85be2065cd4f5dd3480d322c57b42247f30378e31c0702069598fafd5af9179550e58d2c68c9e967119a80411cdc714222d64bf1501a24424e36fd43b7ee1e36c01fa785d2282e416bb32d721c86adf9099e4f50af842b611e5fdea142d741cc266f56c0acaf45ffdfea620b011aed32d6f513e8c652b3536945928dc77ea916101bea4aa4134f879df3f34d8b6737294d191bb0c70b2fa0df18d8091f8853e432c2dc607dfd0410b68b0f4daec0315418897e4e743c8863bd365f5a5720a401c575106bd2b92d465e8356b11fa41de6aab8764127ff628bf75542c544f533c985770facfc445c079115724d39daecfc91beddca0070dd978f2bea1d9ad9351ad64b6b270d65de830621df5d69fdbbf8bc081e0a76bb193195c9d8dbc833da6d67bbd96741fffc4a0bb54e77828e38399c14427fb1c9fbbd459b9cf012328ef24ad7e1a8fdd6c2f79b2f3eb775e9503bd9c6485d8bf2ad608d5ba6d0f9984c6a2cbebf527aed860247e1571e50707723ba65ba4a71bd8610d0b97f5f51af43d36eef5b6b895b863e0cf5fd463a8c56f1fd2b205c94ca4ac8b5ea0e553d3c2f0f8b0e611cba602c1f13146ca8cfe74bbad4e052ce5aae2e2e17296408bb670bbe51d89ab6c3c0bb3990cf3925e35fb9ec43e2ecfb29d563b3a5d3554400bf7009b216110a420af670c31b926ca501a0a934364e239ed91f5b845c1801ac26aff80969f71e42c2f5c01732d1ed9f8f1a"}, - {"0000000000000000000000000000000000000000000000000000000000000005", "0037ded8811293dbaa31a33ffd68b335b4c83b686e26de05a69f5fa263ce1316328335601737265e7e9a03ee18df0ba244b1b669c30bfc38608941c28c3e340ea90607bd38d795f4df07b292f3f066cfa43b55941821474c500f5279075991d14057647ea025f931c12a22728bb9e0df9f1296d5281abc06719678be3e5426aaad98c49282774a1aa3924c39cbb60b775f019c4c7a9f0a971982414788168d4ade8366b5139f1570072535210887576dcaebc6f341518aaa1a08fcdb640d0bf5fee253abf17aef310a6e27878508498f878e27f192621c1d6cbd41c9f3a4b376086de0504ffed14efbabf6d177080be108e5ff384b494a7a40bbfbfb08e79c38bc24e1557e4f93efc8b4114939a029d81d1d604ee47ee0c28b4cb1152d81c0a38e503cb3a111333e7d86a1f370f9ce49f6b71fc7e595b7946f2f1d6d9997cdba9ea12f2d4e0b642af8e8e35c719f1e17020bfc1c9d6103e9297fe311bae309b1040dac89e5076c7b85d35d97314b403718a14d1d8b823bbdfee002cc948179060ca7d4c4fd0b49f054c385627cf6c30dfa698f630b8515288a3bcb33eb39cb59fcfe0d9d08783d585453579128bda095a771c89cd61b3d0ae11c0540eadca3db4b39b9924c0750d0ff17759fc3f723fc43881d0c27a787299bb434edb50fc4491ffa2a454cb62aa4dc6a61bd2d77cf55ec6692de261c0b19021c5eb273495017e8cfa2bb2e66f0dd8b81dc8fcc27fc666cde613ec1da1b24105e7a92edc664f00cf00e7d7e89e515abb5a36672772867898d3f6ef2761a1a40eecee895fabfef0972a2e61cfedddb86bda6b014f765c3014c34c8a667133b2952154fa4ef7ea080653c03a9c3dad798e1a366b32244572667cd1861151f9086b8a794e5a6a9766725665bb6a21bfcb725cf34407deb925342509cef941aa358cdb9a63d10539c0071fddbd90609357f4420db2876d16ae167374a4715679e5dd38b7c0284bcd396273cfe9ec04fd72c5c1bc20c17c0d1332d7fade3344dee91161c58f9c6711becebd3cd9b17fd5eb7020e5d2a9ac96270315961084a36883fc60ce5a0ee650b176ab371bb0a91c3ed2600c67eb29ac58fd00032a00838b564b139a9138d26e55e2bce1c9e65b45a06ec14cc288f13c91b3fd640a787fdd8685ac1a764c5abaedbd9cd77a6faf36f026dddd9f0a594e9d384103ee8f91e288268ff64403074c506f3ba109fe2e233f814c0ce8dd8ac182cef063a9ad36b1d0cd3d52b02b36abe69e132bb5e2bfe1c26b35212a390f9a9d902aee2af7535e95c75a9df02a31e5655ef419dc820d1d3ba9a252dc2cdd49df01f67bdfb7b60abdbf5b6825b46e1d429eb9a5c70aa064dc0686f98f504e9348907877768c64bf39988091f8f66911f2eed6d9bed8afcf55bed636c7cdfd610025b2fc63f51f183f14e6275f3eddb68d1959e0ecf19c5010ea2a1f1c1b619e1b99534be75059f5f31250b5c3635925a7641f969242e3b2a1bed4d8655903e1e7495193453022d6710a634b64cdf7dd6c20f970a08d63c9b711402e58448e22eb4197e3aa392ff75a30b594b5fc30ad835863036f8953f3c4f1a473d90e0467a2b229722d131f1f87525ed7c0f2989a1beee6b492e52931d5fddb3900bf558c87ec1faf4f99fcb9408ef8f53b163d6417f34e1372699f4925b041e728412a24e778b48a19e6eb144cc2673fd25474b7e1e4e0adc167c49c87dd1cca2c227a4bb9d358bec775d2b27b2052c524e71ce7a52582e4acad5fe1c6432ca1318a241d9a69c4fd9db6e859a12e28a5242eb99e6af2b4dcd71e80e3dc7673842c066d02bc4fc7589c6622a67e2b6e3d102ccf89d271f86ec6cd5e97fb8ebbc2b52c6b32a5fd30d74888466b454713e7a5d1ea907"}, - {"000000000000000000000000000000000000000000000000000000000000000e", "0009abec2a40d0fc3006733f7e46be61074c2b9a390b1f6e937fe594c74d0ee420c22d9979b15d9546c0036a18b10b557f07805984cc95f2aa3da1181ff23876fdb73f37664ff7e2483790bd4ea06aa8171e357e0ee40b6710628cabcbe24408905c60baa5f3395d57184d04de525eb91f64a0c6716af724b67238f8d2661e669fd3a99bd76aec5221fa8ebe2988cb4d71d55d251e92341cb2e3a7cbab532cab2872d5875cfdbed100861d44219e0627d8bef0599111cb48d7f24dfd070120cf0169c6edbcaebf95ad10c9c73203ef399f1e1a63353a2ff2f353d9d7c5e544e91efda882b7be723123cbd84ece279d6ef006023a45a14656a3bcb0fd0807e478c9187a07414291b7e430d467dd231fde30258e17ee6afc3b8bf9bfb7b4333fca92628e5b3a152dc81a0bb2505b01bf0ec3f6ec7c9c5ef21e3b9a4d4d7d7d40c454d0f336567b46ffff7a86f8f51a0b5103e675aecb30c087f6f2a04de985e9f5a7cf1819ec06e2c8412a1cbd95f08f50a4ceb25f847699b138870b74676a2fb715d3df71d1a1ec3bed657f9f39f108100808824b9a3c3d92e9131b835113d6f6191af2110fbe4653b222a3c1d0b8e12a38aba261806d4ead9f4278075f8ddf8ce10438a62546f4d0329cdd9631590fce9ddee2491c699175f98d575b130717ccbf9c661a6ce2a8cbd99379643252981727f196153cdb338607e69718e9c353d505d6a3cf8f75a3db24edbef62c0bf5a7bf7151cb06a210c53cc27bdfde021db10cf408885556ec0784e0b60b714e971b89addbe159e90b2566f69d4394a6b3a23ba355a9df3d64de07b8bf7c207b973d1552b385f90492cde0b81b623cdc52ee6d24d3ac68f96ad8d3feb397226d4231863d86b5c08f4ef94cf7efe24247a0adf9055f621106b7b9de42d55e0bb7629d58cbb79929e5fc12caf5226566bd3d9001cf4ab1b0335c55b242c07182e31dc8d4adefb28f3162c241af512ce93a884354075bc0996b49b5831f130d92dc701cdf5536f2c2633d56d4a6adb9580baa1c218ee4260dd4d0786a92e3d9eddda5bf2410108d152bb9d9d53702ebddd3d5e1e5543eca5b01fc9f12178a39733bc6a0d6a5598538d9dac37ac929bc6e771d6fd39be3bc6a7dfcd68421fedfa623b4aabedd441dff6a4dcddbf2c79ba9069d2bbf0e9abc849c916e02f4e202e1cb6b1f30c092aec9ce16a6d8aafa95dc166dfaa7cfa0e0059c6c01798ed315bd2b89b8bbab031a773fc7c43834fa35f36feca9dc79e37c9101e603bb184fd559050cd8c791656994ddf24dc8528d1204c6f22b07b11a31f46845742a5b08456f80f61dfa4c53c3bff528c193eb9ae56fe3eafc1a904a9f56fe2e90849d72a4b8494cb903c4a75af465037f58b08336d996969ad3c84cfda6053f104fa5d1cbdf9d59e002e5083cfccfcf636aec66d553d19f1dff3b3848e72df276688122ad0136e9c44349baaab2a60af8246c0b78631f2ac9b5235f83f1f631e206e0c638198d0c1135567f19896cb9775d728c8bae4857c095ffbcaf0501a9e5050ad4ef8f53c1ede25b2aa56bf2bbac7028a3fa17980dc77d37a853c8ccbd396a5c5437291841f05f39f66a096fc7afb51ea47c7df166dd8ef0a94c515bf31c9efb2f93c796ee3f3d0861cdb65a994c0acea900eb2ac251b3ad336ef5af4791322aafa638179cdb3678ea776db036c31bf84ccf34e67aad940b11b99cd4c51d393d7b6ba1fe97ab1b60bf62bb97c31f07171aae74923bfeca229ddfeb64663e7734503313be46225e5233f6f8e8f3c590f462313dbd4f68be4ab366c07da5394d6983a9794150ec66b6e078257014a1bd943de86dd9c67262b3b05136d8b74fee1cca2e2423984b69c315dfc139e358d6976a87a95fad28"}, - {"000000000000000000000000000000000000000000000000000000000000000f", "0008795fb2833fcc2616313ad73fe3c94288f4e56800d2ea6abf0ecaddc3b7e39c0168f761b309afda0b07e29203fdec8739de25f108c292761d92a1b1cc9234da0b86f3a5f5079e8383aade4831453bba7fc1b60c7432c3a0e81369f21bd13d5ea378e2943e16d78e24abc2671c5d7f994e96666e9c4c3ea7e6ec1f8359259d5f4a1acd244d25e8f3bb4ef87293009f5a0931319f01a6eb144b9ce50f75a3db5de58a75193f772202143a3edc92e3f9e1e3a72d206b6772a8007dd0fb123b7be922a7cb374643536888a981851e971c87de2044e4edb51af728e4b3daa94472773f0808b894342aacdb2541cfa133f162e4624029ee05ea2d4fcb1304dfe84ef69441dcd28db114647851a846a779faa2250fa4971109e94d1cc562d4562e44d4d15bd8c1be0987197a78d385ffd374310258cd108b6d6adf30de1708f25cac55b9dcd107f330b7c9fe5672539b687a0082b44195173cc2e591215754ecc0b8b9beaa78851f563d7e7a0fdfd3d626032f5d55c63e27dddd4a8407c9839d0b5f7f69c931609c458c403b0be4df7b671dbef2a48d942ed2ec5e520386b333f554469b67111614e8eb1fd53de992faa3ce73dbea65778fac88e820d174f5cdb0fa4bbc0602e788f3b9b9c13df8531d2b15332f8b104e87ba8f73a03445cb6d406d14e2422b30febc60cd34a18c00a3062acae58706d15aca470211dd20ab8c2892e8f074352c381a49eff39420d60597054e23864b469c1ba2e796d54d166b6a17caa9297ffba9966f9d75f5e7f5ef49cd3b19e459d1b21544b055cd147865d9e9d1c7da816e5a26149ab5cbda0d770ff47fd73dcb62eda1bbc9cdfbba2438335e4d12e6a92dcfda0587e36f31f1772c8ee8c9e5b379671059f78724ce2223b0144606d63bf50aa28cbf1b9a188f2d596dc9dd92d91b81abbb1b72c6f221db2a5001ad1cb16d5950994f1253cb8ae2a14248f0334a083f91057854a901bdd5cd1415c9af0c7daf6cb2e4f528676c158650dd2f5dc0f3114ab4a57cd95f1530e2311a54fd34f28dfbe710696a5df1e7065fda3a93ed11eb8ef61f1feda52bdc21296cb15825ba743407bf4437dac7c6d3fa75e64c4598514f49cd9b97b47f6e26b27695471d0ca1e18fe3b52857c232d44eded5c33e3fef92e011c5076b39893f09f1f73aa2e598cbcf02b61074b542442ab1482104a4e43c5f42943ded8428fb6174b03bf793fec2e3a70fa38ddda92eda2a4507f05c7b80682089c369443808545e5d78e3dfc3906b30a410f69d3ad5b4bfe9bf29507abe80959ade550514aa9114817e9102977063e730e585bda79e5d0d2ec00b58a6229b39d65fd49b3471ed79d9b17f44900f8193b9917880e3fd54a3f059b5e96aa3743794bc2799cc69f8a50b5350c063fe95eee5559ac6711d19029d3a7fb5ca79210377c166d34f000cf9ca1ec6c95cfed7b92d33f1cfe1b6c6e85e72e9639a7f5ceb5505d72e0575d2da15645f64e133ef12593eb01ef96f08d7125ce603881b66d810ea00d0bee46b87daff240dcd4a0c2b17215f5b19112e416b8824ecd18fcfea15e971e171a5f1c73cc9b34cccf0c4360ae31ed69d597ac430e2f37091dc0469886fead2af01fc9a63da5c382ea1861a8544e3d0d650cf74b6cd9e78797d59038bd3293f9b6a0dfb28a068d848f17c8c12ec05ee8461c79b7c23f155f1949a38aaea94b2b8333efcf611eb9c6b6c88b055e14a22f4443641c58cc573f49b23b5ad956ea053c57895f5458b4bf2a5a7dc105ff80ae201067b8abe7b857185faa461e3ba4d0872706214d8a0d371d8e845967ff36707685def004c18f19311de7d56954bc1178f6a62ef631a84064f731ef90c21986756c750b3cd2a5606876cd9ed6a1afe9abce9"}, - {"000000000000000000000000000000000000000000000000000000000000001a", "0045b2be2e4183b7359dd042906c291459274bd080080855a8ef426f57eba1f16546e80e4099631c08143650d412dff54de3c3752b53a5f6c2f2f5a839291d4abcbc95471a21d547891776a35cc44e2ff3bbddd0045a6740d0191212ea2b647c18b902158ed415dede273a2b98405e99e793cf061bb1394ee9d3a9cff0230f337fb3579680e75e8a94490168540a696b9b0a4e3fa3ee9cffdb0bdcf5fc466aa5d01659dfa2525fb20094c5050b16b5ef449680168c77e53c8ed256f31b017fe1b15f5d736ff8a5313d74e037f46b383097f1095305718a0acb55a2dd41c141c62b291310495c5d10498cf63f7113379009b3485d6f117a7eb2dfe20e0098ec51724fc47f89691292d5332f3d6871d5c27e2d8633b458d367f567bbb2f7a22b0f412748d2c3410274de6c445c653ae97d2140f52f600eaba5fc671d15e6f277cec81c889455722c3239bca56f646cb540013e1662058e9d5e958db77aa5df7ff9ef1817be8029f4830c9e8cb8c1a280131ce16005d72112bd10211222d2ae7033b471ecfaf1b5b6f71dbe9a4014e4bb14279d8bf09de3b9f873a3d820a9c1d5ba8db6d0050473e509238fd088c10952827ade46b9ad68b9a162346ca61165e1f6575fc116bc5df86262043f78825016e78e3ddfd13b4bb16126af5ddae68f5c643e47dc467d97a0da1e1099a032db61b46fc1f35a669c9ed6024340308ec8932a6d44a29a294c7b5a4c71df54071df77f13e6e19cb53bca03c2c55bbf99586cd0546604c1ec16a5c41f285721b51862dedc6de75ff55a2108ba2a2e19866361157283d4b1acde9ed3c6dfc2850c80ac322906b494d41af494b4ac65d1cf7fd7d40c0f844c581d10da159209023b87adb262281afae25127a922db4a751583b0d7339feb389bee082adbfc633d1b46c6e8d12d8fd33646e2e3c44ceaf4c4db9458006266ef6e4dceca6e9eb21c95164c12250ddd550c2000d921e7ce2824ec7646c280e31755ddfd503014148ff2bebcc73bef25c921d48461bf28e30b3568e562a0ffd9f99fef39e6e409404d634cfa6728b802a0129e92b46131f513befdea6cfee96476a34b5cec995b4073909817c65379b0760239dcf9e67e4614215b12ddfd95600f4e3bc87381fcfe53eba9a590b9daec449fca987d60f829de52b7fb2b4f0556a0333b1feb007ca6cc67e022f79bd3493720ebaeb6f3ef9ced0b1c9fd5d8e707a872ce32935187310fbef2453df5d3033867d5d960f4cff9f4b09fb8d85bd1393bccf8a02b9f7db17d58a0e0ec47768352638996963419ab7c03d6412a21c83da7dd33778fa9e326668608be414d1d0ac528d662fbbb244639979b758836a92116b6ad0dba6b9b5b0cee04d0c5b63cbbc9740265a938e0ed7ebe2d9f326a63d3711a2875177559822037d8b1810229376a9d887f4496d6d75fe8598fa2c0643dea911c7f7757bc0c68d6ce9dc391d34cfa1f64659dc7f51e1da451275da471d274f338bdf1b9bde2293565bd5b414e948725481b4f1525c8196c1da98a59ed78380773a372365c80a35eb2b2710ca72531ccfd78625612a62faf236984f7c61d58a07f6820f6f8415e163d0f68d310060b1749aa1fa1d873e2bc0344ea1aa0c6560bbf99459e89311648e621d34d066703ef7ad707042c02723c019c2bc074d347d5467af27d72fc1a7f154480dfb7aa54a1782509a8327f104ea492b6a0000a21ee639bcadce6e61c92919098d84dba37d7e34b150e67d047597f3ded98b6f1afbfb7270d25ff09c708228fe27a1009239cf3876923dcf00e9a5edd63ad193cee7915c8ece31de353ba5463c4b52d539794f708f97db0964d82c1b1d9323faddf98b8ac2e6a0e3e29413b6b68e247f1612c03214cc361cdaff7ff1d02"}, - {"000000000000000000000000000000000000000000000000000000000000000d", "00795fd7e8c564a9544672481379eab8d944d4f30445c25f2ea75af40d4461272eb16bb1129671580a160c2388f857d35715fb7a4199271ba961af5038dc3f35130d692c9c4db390d48af5fa7c15fee8887fd0c412d93aca2544c5887084e59ed2c7aa5e727a7b7b62226f9610fb2e2285d9556a4ef56cb4abd9719f87d820859e85165219c2c24ed45a71da0f6172f93a135a2d2997e4d66f816dc45d0b345368d8034a479daede00b5a3837140d5553107a4a2dca81b260f1e397b53110616bc6b9b63f3382954dacef745655cc3cfc8ff1151e8b957296d799c0662e0603c59d12bbfb3e97a247e42aab5cd198aedd4074e10dfe9eb10345c21280d8dd68017d2e7eff4b7b1ee9f48f9e1dca5500399305813268fe78127e8ed93923cb3d8b957e37cb25e19bd361aa1cd9e419e7a033d2f28f58bac2d5f4f8920232f4489b2c08be41e225149b59fb8c1388cefbb0166b83bee1c8fc9e15ea3d8f8574f8f25973f417c33e5ce5d7d8f7d3938e695904344080a43951b865128e5f6f021a515576b3f133d8c4847c955225033b0727fc6d0f520bdf342e88a0156d19472c0ca7f00f302a2e3844a9c924bd9fae1473745ac9455352b08ef0baa6dbd25f01cf7d90c4447a638bd99cbfc36cf7f0af4b6292614bdebe0c0d6f4ce7c384a7db0d522930c9e3c86ed2bf851f70ea16bf5491055f986b7f94f0525ac0a5a912b4a945120686d89be79d3d9bbd3ee1f332ce0a74a6d7dfa38357d42502371aeea1711f5124e60d6641a79654f73e4093b401b23e538bff3b02e4e16d9bc91f2fb509c74fad4ce19095bec993f4a08bd559389aa1bb7e5d3a600e8f2743a688f9767005d1d0486b573b6ef9fec1672a1da10a7687afe52120e524f576e221b67d5d667c5ee66b9bec73d3d8c9f16e1e5fb326df1a58efb9370b859b892ad063d088e00d7772a4c83e4b36838303e6bd36b1333741fb49624d19e8c04203e01a3a8867c6eb4973b49ebbc3dbe10b15ddfecc8323c8f1308cc0b4fc22ea251de0ceb1918db957f1eaf6db63ed2da3cf8d7c908f9f1f86702f926a35c94db435996c70dc6386f5380f17ccb4039cdf423a61db9c767e463d2caf0796d67b090e13d214f9b11c473ffdbba0f62d4594e225907636b6197263fc66c97ab32bdf70e571497762042fb3d9af7510696ff885ced48eb948ab2a5c478c434e99414ae7038674b6a0b1e5ad3afde840c057deef12b452c1078095d37cc1245755b939024275f330c8d166fd191de5e8b37431d27b0db5fa3676298d4829f7c151f31ee115b794e6d25444df5f155d34f452fe72e8d1cc7321e843a65c9d05cfbedea143c183f53692694eb504326721ef34892a011e582b35c554ee46a36a2b89ed1343513cdf41c88a9dd63062c15381296ce0d7676d201a2c3894d9ca0ff2dd5b11b6bc9777c48fee6160631452516744fc239f240065ca26ddf623c3fb68f9409abc485030fcf10a8d602ab172eb691d3905e30211edcc3f7afac48f7fe1c354ec85046d7160bfa84b407acc4efa2301a49857490e8591dd858fd1a39337f2a7c523e42628b874fc4360ede688bb9dc8353ec8e12eb80fc8c85ee1773f27165b265f39954daacf4b716023306b1486209ac2462a045cc2a1a838efa495506f2f504ae50afede6ff631693ad30fda4815cf44341ab9c090f62b13faed8744191535b41e810d9040a29b0f54d345081b8e82a38f5e56044be9d9099909b2b0d956a7e649da7efe5643ddf67293a542b16f417083d0baee92b0773af18c26d27b6ec25f929fc9c750f77953055c8a858a5d0a3cb3bb2b5a625f0519d061545ccb083c9c6f87716876545feb72e47639b18e41bb1cc5c8c16802f6e36450a9f48755a3a0bfbb2ad"}, - {"0000000000000000000000000000000000000000000000000000000000000004", "00175d369400ec71d883b7cf215b06e2263ab8d337380d4f6c7a19bce0e0bd7ae19be1975ee3e13aade600727b1270d71a50d6be65be2de24bee9ed1d605093056822ba18c41396a34858b9ed3a4c6c4277dd55600cd9694fa1fdeff842c03345af9f99102c3901f070b0131281c0e96447bbdd32255f3b546688414c57d2198724f288d1528c480234c571c1bcd3fcded31603076af4e7625857bcb5a25c4b176e12e53dab869c809f1db2e2146965cc85882c18fc9d474da934801340d73416f4bcf9cb0986153d07165b1f61af4776ba90abfde4fdca1fe253d3e01a13ca8b7c9150e16286f23e25be9cd968c0b78c2d9622d6b53e2c9719af9b628fc3f276211a8513129131e336fec122d00d4482a65c465b1889d449d093a290163ebeb22c749dd5e69494a2eef3a1324f3648f34f55d3c84cf01befcf3286499e64262f29177cbcea669f6e0c9f623f39a7fdb01c940aec642ccb7be19020b17b2b4650d2df9cc4407efd31f1fdbe61f5dae827ee8681e3d9f613b75a30422076b5bc78db0420210bc538a7ead22ce3c9ba606de265e44850404724201a0392efe9dffa394b6100bba25d33ad336712ed3f5e6c1be53de12d034175820fd3fef334df77bbb352673cad9658312f03bb8b823d3cea49cdaa13bb042b5ec5bd5b971a8f45c8d8a26da6dcfee1eba37d9e324eee649ce1625add180fc01d4520c4487b9fb52fb24127148f8119e4f7d687d12bd49bd3d12c9bbd60ed550797774b61445de5fd203eb6fdcff883d58d45fd1b25a1cb458c740f0741435f39b18e61025a4c79a458993360fd25cf319c1290594d858f385ec13560421fc7e1becc1f170d84d102abcfe54f78ddf17f3cbc595be68eb01a6ed347e3a0a30cfee883d6f81ed5fc4efb1d92cb29d7879429a248a77f36730f8c9c6446b72795e658fb9fdfeb345003b10714a3655efb8c73118e0bc37f15c7c32db8f03d7ba9eb7870973d7a342075141d6d09c0f7355db2ac30ecb035a144dc366f303cae45c020ffc34491e3f7a663febe24a097954b52c24cfc1be7a2d3a99820c9cec675f43cb644d05159ccb31167268731e55f480537e50546626bd9cb9690d56f40252dd397e05e915833907a150983f5ba3934c584944fa0d9cb5a72a1ee084689decc797d064a35870223281f62f3a69ec053b12216ac3b28329cbe170bd8ceed9d560bce7f31f170cc2cbce974a9e1a2436c56f856990dc5b632e29d83ae87557c3495030959e7cb18085d3731180303017151387d8c5ccd3dc241a35377c32121175eef8137164fb3106bfa695bba3dd532cc9eb1a483bdc1c2b583a5c5154ff8cb4a2941fe0c25f15bee4d2bb2e1c66e9b4f820ef61615176aa2c53b7ee45c2b4183a27218ccf8137fbffcf1fd31ef09966fd78781e170003477475fe85e4e85aaf70febf386f863002922e8e32e1f22ce78dba9b6e4564bd36b2d9513dfb3c037a046bb96446ded0b5d0d19391fcee98b9b7da7c45ec199f2c8710b1698f9261537b054e0d69ca705498320938bc74dee75e7fbcea21a014161f149e24325d0a2e750dc111289e7dbe2af633443a5329fedf7498f42b3369616899f996feb274b0f1b7597e6db978521038c1ebf55ba3caa54341165e41ba8091df2e1ab238084128dfa44d27c35b21e221b2362d14be5b70120d140b6b6fc657aa94d672749e745f17e22ca8f623ca10bfc58009f6b143ca8dc1eb87bbf0a9d052d8212028537f56a8700a3de1dae81c055763123396ffba530c2d9f27ae6c7edfd28a82ce0ec214e67b41f759ea6299d4becb607fd9732729d45a6f10576c5e1cc5110ec49dff91dbe15bd07554d4cf71885249d9b7bd99379485113dd9cd375e51a57dabd9cc96c01ad8f072"}, - {"000000000000000000000000000000000000000000000000000000000000001c", "00059f4487c3849231d731e4089ca7c1cf2b933d3e33b286a1285db525afed439eb9b0c9f79b5ddedf6f032812ea7a05329cc25d628e58a4eecdb6967f793805bb73782a85a011b5ebc0c4c688da549590adc26e0724fbc87588f4b0700028beba4b7cfef38299ff941485de4048ca8d67e598b23fac250428f98577809f151c08e7af61fe11dd6be1c81195a868b05e376edb3e6c240b59d9ec53b641b6e4f7448c71f5ad7523e80083ccffa98e926bf1e5b127fc8abae8bf1fd81e970340622cf2c9a0ecc01f016e97c2cc1e86805e3c4b01a02e5fc28a757dbbca923398207d289cf370529c3949ea748b4e6851b8b4e829525c611ed02476acb4148ebd322847b84ae61bd5027350b9fa506378fdac221d4abe5b242925afdc642d7223bfba4c01fbcf5a273d82ec26db64f55e9964e0d64b7eaa9fb25b1a8427da6cb91c34de21fd0235d874fb3d05e5ac4f8e8201c15e1c814afc8fa72110489ee3f9c9fdaef839cf0c0f4c9aec0ee57712139a3389dbd17aeddbda62a7106155ad1fc629ca9f8ee1a32c28e0593df55454662e8724a7f9551a854ed9f596776757ae2a50db0efa044a43677c09831b0f3b85d485ca88e738f43f12e05eaea32b812af3c9cc1c8678457033b6a1733e47a4078d3aab2fcfbba4bbf7f17f54205a30ee207a60422527a21e3b5a35e7d9a202b096e1d36a728a7fd608027f1612b645c29303fcd1f24d2bafe9198a2b3cc75d50d5eb61acdbedc8db082ea948a696d3fc56cd700863a0f03605fd17d96c661a916da34f07bbbcd1a41be723cda99315c54263d7559bfdd0324d1bfb032908e7562caf1bcdc94cb4141d47383e41e429529d593b6bec4c09ddfe03be5008d985f81e9b0f005d4d9e13a27d90449c911f7efcd4b9b5e3cbd2f7acbce2e4366efe4e539da1d946e8e6330d54d7699f66fb8b07001c369c376c5a95ef6132e751d674c981c7d68f6525da5ea9426147353e5f35cd7cb1b4ed9433581f94058dc86a59ce47c7f951b0b6b39e174cf30d72749b4c0067b4c9b75d35f2836727dfd1533e9389ffa6ac007a5cc2d680f43792e7209d45adf49083d98cf1a85345ee9ab15e08e930c4f54cf963c1f2540c1ee61314f4b6552f7654afeb613a20ebff714eb4301af3ff187274fea9e34775e036c2df295703fd215879fe7503293d629797da2babce041c10c7a931cc095d814f3f9a9d7c84ae944df079150d91b6dfa6218f92497f05022e1d9b0be919ad6d90525e588cc45be70ec6d0127e02f692d7c4efac4e23cced7927adff6db705e3047596bf5781d84aba4f2a921c61db0ec4e959246f14b76c334595458b0ba1b494e4dc7e893a31934d0b04e1d0f803cc8fcde450b304b2cbee6734ce99b7191a1e1be89c0937ca87bfe223d57a4c659e43ff6c5505d8ba74b806853c5a79737a45d3814273b5fe3b7f09cfd2e8ee6ad25d80823c5689f6ae6383b79d436110945550dfd774156d4a92e4ef6bdbe8c05f3e1f8b1c287371fd6717e39c0ec3ffa4422dd926608b00b00b2b28fb166d5509de0f42a57bb77801426a355d3e0c67edb180c920abadcf07219fd81c71fd2ef564af2848719504d1516bfb37c8b105dc68e6d8d739dfcc4a30f747b0271bdda7c2e4cc40d3b4f9af707edaca0b24f560dfe416eb2d2301bdf068e63a5b5ff7df1a2d8612e4c119f081893c72d916fba200bda32deebd1b048575300f60bd25e812cb8fcbd3c92639b1a7744483c4ba2cb02195874a35b424b86b51d2554f0c4911ca24a2101163619ab88280ecfc9e2f39505ed0571b1bef755cd8ecccd69633e410ac9438fa91f828b311d1fd6207907b78e1652acb47f863aebaa7facdc83dbd158375e9c9e9df86842fe240dd011c703aa10d"}, - {"0000000000000000000000000000000000000000000000000000000000000025", "00cd1d2847c3d6acb2494275665edaf5afe358551f54a89dec5472c0dbbfaeba9fca79000eb1c799f6220708c4039a07d674e90d6838b4685e929d6317c86116c5f0cb9608950aac35e355e6ccd86343545ebb3b035fb32ca8814f63377d7392c5468d15bf20d68ea529ab3c828d9c46ada81e255ba5559b7308995cbd200b89e9b65b9c51ef46b7a45cbdb3b71a17935a092125edb17e79fe42e9feb5f38cbebe17c58a041df417067b005b3ad59344c95cb0c6895fb55585e9515f7a2b847a24706bd54d5f107528892a6b39c29494dc4d1dfff7532191a587f124830ad57b96495b963b08933c590d8cd8a05cdd6ed4f3f7eaf3a955789557af620f5df0d192e06c6f83cbe440ab324d41476cfc853516adcdbf964dc0ec7aeae44a4fa2cd4337e25a0d861180776f12d3c29be2c9723d609810a61281f670912c37560335e9b9f79e911351dcada5154b8b3bc42d04bc162be9b51edfe0920105975edbb441fec3caa026ce01e1b2519565ffba04f85775e27575048e171f20d4df03c756cfd6feec434487a63e793b161c39ed3702b737a6d9126f9ca1a42ca7c061e291d6f9107a08e73e9bb15b73f1d14777b79ed8622abf2c982647399c74d07b9f7ed5ebc863c60b7ce26d1a1694da83201ff1f622a21ea76000d237bc65447e680477d953364a1bdeabe5bf25b577390105ed3b5a62afbb2c550cb1968c37c42317214873400177f43efcbd97f1921162d0c842d09218e76eda33c6d2969ecc735ab6523176ef428a57ac7ff18614cc2f39be5d54f5b9bf973aee5f669ea202138aa9e8fccaeb7bb70d1ff89335108e2feeeaabf837aa86121f1e34457a1a8c9911a83624b78472697cc7c41a8461a12e1e3964a21a120b133fc9e60904f8185698746142bbddb9ef6010ac971bc12b1dbaa8fef96d27326310ad00f66ffabb795d0104451d4a532e096746b89492f8d0b2fc96586f29448cb5be885b60c13e4434d9dbbc27ff9c96feebc8047763ddf734adb1cbc110662e431e10b82eacffbc1e969b2f3fa54d5d528af3074ca81be9be69352a42045696c0235327a397ec43d9682abb99adfc54104c08495ad4582190179a6f77d962c78372387bb7f1070746c44aa331109bb1b1115414a1de52e1aa3e74571abeb74b5e6ad0636e9b144a0150cb2d8302f9d4950193da5c4843a1cc4390c3b4f679b0b1514a596b18531bdfc4b52b5231fdde56cec274eade5e819bcede09c5b0ead65760c8be49459733c4311ad4f637461e2b0c4c32e0af6349e6c7e5564cf4b342441758358e01d0231fa0424fcdf06d354e1fc71b5db2e4131e9f18972229c8b7de67d54ca4974df4c012ef28dea2f003d3667b2e227e296b1116bbc0d7d841e9f9d488bd1e5d8bb1f85e878bc178cb99e967b12795bbfd5ad002ce7afc04ce14079111c4d225d59189dadc9c908a0d2be65c870de2f6d530650a557c834d985abc917b0836d1cffac42c80c6cd74f3db675d0dd1802fbd22113c8bc2ac3146cdd785c62a83593b924ac2f363d01e0034d6c74cd157024f729d08178924cd56b279d92b6cb587ccdecc7ddd76b5739dc1cd6f3ae9be8e712a12f98acd9a5653a24d0b642e7e3496f43e9f95622c92c7e478565ddee4ae72c9c23ee117293afa9d86035411c3cd4105b9e053f0b357ff1db17c3fefe0060580b2cebfe4af1f32b5f39298a586f9ed191ae0cd21dc23bec40a5b2eeea2e5cd6e54c799f8f6711874257d9bf9304b1dd6a225c70f7fc73361c686da13840bcbd8bd38ce75f70183246198c6dcf1daa99a97f11fa29d48fc8a83a0571947d1e1d4c17a6af7bd45fc1777499b55a47ae1c416b6ae03711aae3c4137ea3121e087138eaee2398d3bf2ba223a8372193ed4ac76"}, - {"000000000000000000000000000000000000000000000000000000000000000c", "00eb6c9a504bea8685afa0268c358dcb2b49fc2fd90134fbb98410287b4f8de8e7f7c82e1b96061e411d12b964163c51ece711b3623db559ac91de8b782a3b1db2224bdee84959d66c16fff1d6f28abd17d90b2b103776672fd2dbb6af5f6288346d43f50a84c919d01383952a34888cedde0cd1af2d8dda9497b292cc67404a04c6402521d54078987700e574035336bef2c16b4dc775f2a7e059ee1ffa492b75e7fee4fbfc7ce00499d5c4a6c73bb8c01431db8c3589f48929aa1cc84df3156036e87e1594ac272d3ad3860ac334bce77c0ea3e71c7056ce55de990344e3ad502d00b392fafb28a69c09598c75a0bd368519da4197f9b1949a47030d5431c93557cf9bd9e2548ed02515ae91177a687b11f9ee802fd395b9ea22c38ba27bf4ada938dcf719214e0648f5594593328802eda63740aad2bc5fe60634b61d60f965051d7666443bc37638be1c4230f3a401d87743621b02f76159683db85b60c75b69dc0fa204302f2d0cc1d7e23b8b12d108b558d299527fcb1b1008ae965fd0a7bbc16ac43e9ea8b9a61d9cdbaf1c1aa695b5a72cd1236f762773ed70c0c636b13affba06690bc587975ab91cfb55d7bf62e1866223fb1cae13fa0c68f2532bd1d00993895e406c45932e97a3621fbb937a5a0d52674840f5a0613df1bdbd52dafcf340723ac160d0565570fea60bae394ef7dfff3f43d8074292d8395347b55507c5f3b0723dbf11017b78a9327fc7775a90b85725a7154e227c222690d835252b1b888976eac7124d00ad831899c7e976754e5c3e972cb15fcdf45d32e97b6214adbe573fb553c2af47630afedd652d064c46e8f6e4d60236d489fcbcb1adac27b779403b7e73c7fd0815f0916edcd5cc233aeddf135a4563f2d64cdd665b228369b37cf776103ebfef34de9c532255f3f31a3f362d0ab55adb63e5bf7dd000eee842550f5ff59d44c0387cc21074ca6a1a3feb0dc04d5499e0da3f7809113b3193a2c0a6a24f8a760d158449fb5231aeaa5fca7bf467137b18ce9a5d2f0fe5548e1f4646323403541268d6793267febb0123071f9fd247881422ed9dd1e0a9341f30787a2460332874b43fb697e90bd3333466d761921d5f7b8b48ef0f5c08a470992afedbe343d72221cf42ae41bbbba952ed2499e8e49ed38c21f66ade75ab5ede7c17ad1501ff388048e02255bccb5282cdc43041aa8d94287c0de6e08c610bcd75a26662c6f66cf38290a95cb55708ae0f9a9e4d3bb1478db352e474d50390bdbf619b09b00f729a4bc8d38829e313544e684185140d2769087cc5221ad1731b6d9d74d570abcf4a0389d527f20b8d9c985799d9477c35043d972669021e1b7258a11b6027e6d94f13d7d0d7b3c28052d73121163937a61b70a2785f6f25a5a2cb0427234cb4a6b7d0b8767f0248f3847bf6596bb66835f92c32dbd5b8d5132d5e30e2c504e399c90560f0a39b1c601459b88590d2861004020f3ed526e6bb27b2623714d521b03bf609853de9e5e46bea799dbca1547883cfa5ce8e24fe4394058e7559fb4f542787f8d4568adbcf9228c616649a29c4215f4793477142169373daf51241eb4c1de5cf0c842af3d8851d9920505454cfdaa60e660337d9922f45ac0228d9b5d79cc8c2f971c98e66ef2b1f46f00af3eedb92a59133b73131b4341abad595717f9f7128b90d1324119a45dbac25729a3a841eaf357c9fe2112d7e11859cdd53eefe41ca681e0b4349c0bde9f71593f1f124e9f8c5cf89cb29c6f1e44ed8309d74910bd239fe95e708177011d1dfb3705635746e3dff7f45922fe1c06882afa16827c827c8fecb053978dd3114231e147893c65dfd4cf1e34da4982eb0857eb820589c663690eaddede56c6597f8eda6a9d7db97832c"}, - {"0000000000000000000000000000000000000000000000000000000000000009", "00018f146486d3fdf62804688cdb89117f2fce32fe0ce2c97908642a99c234131dd85849a10f12697e850471774935a93209e841059b3350b3017ef75b995f1ec8af4dcf501d11b9a19341d4fe0ba3ee791ff604077d0d640c116fc1415e441e2f33a35191eb78104a2930761d12e830e9b921f300411fba22488679d1181dce495e375422051fd8a3028ce46df92a37b236722237aeb8b421eaffc15436172b754ff2693456b1a107ceb2c8cadc2b0712dea2f956aa0a16014d94ea4f29c06e16c5d748af81acb92e345088c760ec1ff964097309ffd9bcfa9ff2b860974311d7ad7933b4a2e918258e1ce5d9faa54b7da3a410a8407afafc7dcda107f1b25bcf4c1087f0a393ae874618e4f2246bd489759cbf2d81a198f56ea7891f8afe27e28caffff9c2096769b44455fc2ac5b7843689c710e1567858b4f733d5944b0e5a70595314b3dec76233eef2f5dff00300e4d09a7bfae221fdc12208a9b57b1ddd7d71873a0729271a6f83b28f1496f3aad7e3d059e889faadee0a7b1d70ba8ece9b9518923c78ed95d0d5ce9035901d782e14aedef226fefbe2f32ffffbad3cb3bace4c19950903fb07bf904efca34bc270c15d53d8aae79d287a84f3b9d5bcf1bcfa4961b07a9e2ad3899d6cbb1dd65b0d7823a249dbb203173c47d17cdcb999b21e251041fa84717cafd8abf4085bb2aba5c5546fa20e00f740c32902712a2b701931314ba30e6c9c1f96542bf0b970cc1ce6adfbb777ebea4be4976c781f2a9625c12b8a428fc739ae465424ee6bba5749bf5df6cb3045532ebbcc3df347844816b146fc92a5d8f5b4200b0b7aca35f2d72dcbfcf2cc63a062b2d5fe1aabca0ded3f97fbf7c855db23d7184ac5d2ae5dd5969af71f1c4d45f64af68907b5734133561938e96bac790721b82c6bb7113ead9beb039334d6cdca3cd95c1fc701e315324988beef888b8579b87a0235cdaf72fb78082caf2306b76987cf2841530293483d53c178b47036760e54e421d10df6e955ffec3ce7369e0bdc1fd437c02294d0dbd7d327d7c5aad0306fca2fd85808aa1123f525a20ca2508a10a4ab0a792bbd53fcd7039d16dd59d9724e9de8bca066398e5ef477ca257f84d33c69ba56b39edd9ffa8d34f291f5c5aee0a47cde3b50ad47a14a54313aee70563e0d504f060f4d3d07dd080fffc043d3cfdd43dd4a2c847fe1da8e407dc231288fbd202b340875b4a023e2c9e79936057bf7b53f149f71e365b8387ddb71226ea14c3ed1d28017c0ba1bc55d4a716558a17329b2647fdb2d1cad42dc074d0adf3dc17e02f5b7758385b2a0d34da17b8f8f706310bd5e5a720c8e8e801fc4ad75ae5b1b63fa1fed942559b996cb0f6d614839540837fc628a85779915ee31b03fe1f79f8c13b78b43e4bfe25a66b830bd176a02e1cac49b41c59ff239a1d51b2c504ca61f35cb4a234462e0845a1a50fd8282ca524125796aee7c098017a8e5d59d165e13da80332b054e3b8995bfdc97f33a75c20057288585a91833e96d402b991a1faa419c1d26824be4c8b8636820ea4b917cbb5ee5e63dd88f2c66af2629f2eb8baba694dbe8aaa641a17eaeaf0523208a3e35cb8f370effc44a83f131aef04cbac951327fee162c1d902d18cda53e6cd41c46b7bd9c59bd03235d7d5ae5343b8e6781915229dff53b154effe923b435b2b0af17099bd9a28fa7d7d83e89913b5dc60eaab66b9e0f9abf09c345d2a63c354a19cd3b5025157aced879171b6fbee9c5f18fb519ba54d757a2ed0c66f3c6db765157b638b57c54b8b9bd7ca158411d43aa943500919a951f23a79c25f140ca7953df844216a260e448d954e7d27f446654dfe3cb38cbde03e93315ca7dc88e392484c9b5ef6358369246b2db6f18"}, - {"0000000000000000000000000000000000000000000000000000000000000007", "00400944a7c7bd1e4279f039644d49bd000a1bd9830e57e35efae00f5179077192ab2bf05cd37d6b38a423af21e9076d6acbad2f12d5cdbe598d776f15395624c3846cafe78e7b70d2833a7e501fe2bd52dd03c503da6731751784975394f3c8f6b54d1d7c12bf5fe70fa4c3e1f595b8a573a7f808a455932b3c677a3a561f9bfa7c29a64a3399c1125a996834923f7ab9e1ef5bd3834f262a9daddf1b1a91cdeaa92ad0025db7dc03b1a5c6de2bb22bd9aba4dce2ea66627c6cd60cb72241f331d2ae3759b77882c465aefda1c48d7ae2760757632a1be3d0ddefd5d3bee7a71cf75ee11d69cd09e224388f57bab7952e122181a3c50b4e23bf4cd206941fe4cd8f7239e8fa121796bd0c45ea24b6304739c7143be3f01a279894ca9debfedb0b5f8c1c7ac81d1529b726c7fb36dd301232ff996c8d95a3d6153241cd3ccbcf30d9bd93a877196b62410eb9affd2828006aab2ff491838d3939513038a6679d243f5a2114184bfea4f8270369f44581f414a81644dd8068b26800ad8567072ad42b77dc94818ca6d829b80075747309afe1a2b06a7aeb7ebf244ef2d3dfa1dc23fd236111b10ca09398ebcb781ce1f4ff1ea0fd31c3316db425ab1cab029735efa30c45fbe1dba79bb21b5edde51fbb591cea52b064f82498a39e743e0acfd1b6fb66320b3cbd2ed3ac29f338b6b12df4811248fff821c81509740e798a3193e4f182f327488625a0e1f4c65a1788a1cc674ea80110e97584e8f36cb9c2475664556fc99654246aabbbf68729b40f6ef476eed23be5c282f91cfe6b6b2eb7f6800c237fe8038f49089c384e1dd30abf48cdc5c7ec8651fc5bd92e80c20a32e7e23329ccc2696cdbd56be4a48092703d1d3a90f6ae9c208aa53cacdcf377207ab27f463253ceab241d142d3ac0273e913ca3f3f77459848ef31566f202dcdbad00baf0921549b2a0a258f29f8c251926cd7d18fc72030cc8222ec3bb732ead50e435dcc8dac3f397e9591bb49dc4646bc8e96dbbb79c0872f919f1a57814b14a3e1e8e9495e098b420f7f67956cc572aca7ae8fc057e12a7bfc3e83de57ef6fa53b95ca7b9f0bfe5f13006c583c1d761d2d95ff5393adb5942f9d95b0bf117c8d147699e03fb3586d7d308e694ca4fb6137aad1e1cce2af4cbf16d857e8342f82e975d4ed5d16a3e071970d81c84a5c4a27d73f8a0eb3ef9bc04bb30a728e12f090bcf9cfdd6ef33edd06df0b386d2bd05bf0a4b6e83a6d7adbf249324defc4fcfb9fb2a30b3891457cc022de92adb9195c40c86fe47e529527bce9519d67b5a858e6289992612b41a6cca0d3982f28da82fa0bb90d7911b9eafea27e6fa4a38e6788ff41965288a5292c2589dff586df9a5a85c5796890efa5b055796f44f4d57cf07054747cdeedacf164e3457a66901c85d7d24ef9b878a657569ae71f7df4ad0be69a507e9cc66d498ebe0df3754d766323a59e57af2620001e6e716c8087912f31dc7ec94dc8183973effd78e030c8cee766aac7ba3c9e6f89df7b736877ef72322038ea50bf8d9b9e6e34a344dd66aa75dd76438109e1bb25761bd140a074f7d635ab04d8875b238ff7faa0a614b8cacc9ba050861a3f5decf465516b5f211a81e45cc14aa53d92fd29d42a4131ef345904cfcf7dd046153416c9b2e3f3423c5664e6abec608cb3bf4971b652114f0596cd3244665c24bcfca197360bfdce10c0d2f780f46a6a1e545c2c93e2e653a7fd3ba635f56674b95be18106987f55aa2535aa0eafd34ba8e9204e30ef7620baf32b79037c74be2578e2777f8bef7240b0c3e4d57f57df80c528fdbb178eda85aba612c21c1fb2c2668b05f4c20128a5b599fe74e0e5e509b4a88c30a7ed69a3f4697c7744dd980120866345377"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "0070f0e41bc13fc222df63cbceb8ed76978dfeda730133b1068282de94e249e0de5f30801136229f9f6d15948b3131a17ff7ff5c959fa3599d997b0970f23e26dab42a2d5e00e7afb9aa37e0d5826bdcc7bfc9cc01bc0ef4f31b90c1649625fb5d329fd2a3281802ce3d8f3490266fa0b5913f5595d636eb91f33490d69f10db398894dfa01bdc8f3709cdc7eab695ce7ade0d2cd7bd02a3e16dd38d072352ee2f07654c0b2ab26603c99e74b8877c6db20c42087152a7c63f851fb8510f3eed54224a3d35898186d587e35253204fdbad590b485f90b54b5dc677381145c0f72c5d0656532b3f1df8ccf4394fa8d72d43532f15b35f45287b767c39093ecf57f008a5c9b4e414824bf314e9c68ffdec313fdff4a9f99b44093eb81a42635fc736934fb541a7144cbf90b0dbfa3f75104231dca35120a10af6087a3ef29a195ad88859995fe4c1e22ea8015c01b54539028f38de3901afe1e901b6d7d3ddd43a21c972e2ef1253ce27704918f313c33919b1efe6269fdffa210e095e7a18089331ff1bc856ac1bff24620b383e825f2325cce1fb4bd2ffb93833865e570dee2c2a7e32e6076ab860210bbfdea7d5616c2f8f6ae57889136d1f280d01a4a2924bf13aa5241022e7b8bd76197917c324634e2216f90be9d860a754a3e7f952e2c59cff2e4f2f77864698e598fcefa57b3556c2f6600d9454eb0cec00e7c44dff7d478555e4e0f9c86620891ae6d52bdcb2c035578ecae7c3248a14c2548b513cde9b1e10baa3361e474ebb51cfc1b2204d5fad64098cfa804b00b48b775c945aebb2659d404fec7a41429635740d4627412a05f5492b42c523b264c94653e25777af2b3dcede5c14fa93550d246bac75926dad3a12517c0eb25f947608cecba52d02692c56489986aa7c8c231bfeb3c747179f72c6c384b77b293a472f4eff1b1d00ba5076f9cc86bd54bfd2f8b33da6758c91d4943b1a9a5288eb658ff76ba14235e0e5518979461c7dbe01832d4a4fe543fd2d1330d8e17ecb44e3c3538374405ae3c97c52ec8acf2aac28f47be3633ef49c40d2039faadec8c94001dbddb3b7832f43511db6d75b1e155c7da0bfa04f6303136211ac98cf0dd46e9098181b210dc9e1a29171b8bd252c57e60e91a9f432532642fa6774f91d1d2baa4348ba1cf011ea3ed15724d403a824e7b5647bfbf186c05acdd84f6432eef9d8181563e143dbd2f54128a4718325ff0b1c9ab99af7fe06d86da7b0f35ffdda9082cb58a7eb0cc34fdbfd7812d7e126234bb438d6c7a47147aa08ee936dd84a23230c9515179b1c37188d3a8c9c7c4383d2de5f5beb77d9ae616db70fa5b88537b2b66a68bec748bd15003c7c2748ff9cb2f7e8ac740c4554230af5acffe44b472d559dfbfc9689fbd627475fef248677801e6c8c0a5678ecd2ebf7afa82d05b5a1d669d5e8053aff7724800e748ab66309f56d84ed7bfb89eddede5c67b3190f8a2fcc285d3fb8cdba5e02de7bbfc38a3e5a471f1c1b00b6e5fadd456854350bfb5fcb7d74ddc9770dc1b6613c605d8b3c0623d0f128bd9d5098d7b35f121b922d3ac62b0f7b12c5d01f497b1db7bb38fdf70fbb629f569007139dbdd3fb2c4e5206960b18a3752868c48f6719ed31fe08a410517a51d51537f893760b13036d0bac39497f7c011923756a4645e1b5e218340c4a356d5e52f7a24f84eecfbf7b3db1d4cfd7b71376c2553b093af37dbc84c40af6b8222d09b31c421c08ffc552d0f293d2d152eb8bbbb26644c4b248ed135c62e09d1ff6cd1274f1edf9dd2eee3bc1de5f781ee89d8a464a26d47622335410a5259a23fa947df113ddfeda29067b57f18b81c37ce3cd9a45b3b71d532829825f780a707fc4abe3a17faad3b92112731f2f"}, - {"0000000000000000000000000000000000000000000000000000000000000003", "0036cd9af5ce49bc7b71e4beb2d83bdebb4596d01417a576f30cf27373b876e1fea2234e352bb891f9780f4d30dbfccb783cf002725c85e0cffeb395d6ed462aa9eb577d1e02ddb1307522d37d4606274c5ca5e005d902043149f6ad9c05a7438640b17e573098086a2f29b459fba089153c85851461b90465dd26dfa1271f8fa94a17994a6bb13eb405114145af0026db326233b641e1e6d55aacea7e7982e54d03a70613bd818d03887128e76b2065c4df22513693419ac0e33b3da522bafa2068933f5f30b6435c01e528c6b204df99922bfcd7e803dd6e29579c8414804beff24002d829c23392e718cbe4a5af77d045f79b40fe320949f373b6081149e1fe98a3fb309a95c1f5cc9322c0895f71b9150cf4fc3da8024b9a342167f41cc7267fe0d876cb1d76043bf996f9c505d474b96de300458038ddf3b536d40c308d111ef58470a4661aaa19f9d7b9956a650707045f5bef168ff0ab3486ce7198b9b1731a326c080812b60d12c5d8f19f9081174fda35d59f0f7d7a20ce6abdc4b370dbbe6b94615eca97795d265723c92720ee767f0bb424d31055ac784f7ab1ff12dba84a1474b6f8b864983dbef0e16196c3486866f15bbeb0373f7dd3709249bed41305dfea68ae91df617c2e631ed67b2a061b0fa322f673be18ccab15664dce8c676dc55376e05ee4f1dca0ba5aa86d640e9792753b140d9a6f6b58d8004ba848e0e8b63c02465af317ba2d2c50533bbbb8713dfa3c73ba8ffbad050d004c4d8651a82f542695e7bdeb2ba71096436da1d0695fcb2275338f2358e4ae615057f986066fe3371df03c627c1522fa2182979c21b27478113c6b694a125674cb2628055b6ca7caf492af8d43c518a8966130558e5741172286a912add0f38b62f2c2b0add9012dfcbc0b5d2958341533269fb98c592b11a5f06533239b5996d100dcf99e545f10ff97f9e84040ec681a7d12984d1f23d10ce3848dc7b2d626249c10311931369f300eab01d192e84474060bc592930f53ab764595ca124398034ace351be9ea8166d3d19ebbd8cab4c14f35ddfe05242d2a6bd274d743f264329e7d6415241d4f3e3b1f7f9a107597e496f4feb62d24c34df9bb5f9b2a59179da1772462aad35e1bb1d91c29adc6f668b933b023177dbf1a9209f36a79052837f6368a99d8d699d30469e850535448ef4e8956b88ce03331bdf47996922f523746f1db50373b4067edf35af60a024b764c532348c2fbdb19d782d25ce28fafb8828a2075f9a6a6472d636ac556285dc9cc7547a449787a2d9bd22c740c42cee3d5e3d60556d68904a0fd013f4e121ff57117bce22fc153c02cb82865434fddc49a80f0193f600e40a2b2c91edc31a8eee4d3776c06a711b8db48693ab33fa5f9b2cc8fd24a553fbd3a949999474e6786059c5fd34f56cd1150d2f2d8d6222d19ec5cfe418f331b3ab2ef18b957e765c3f38e2fa726c1379717350901dd97c0e0ca050901d1d0b9226c659eeb0fd739166b6a4e8f8f11f7f829f1e42512129899f0c6afac05d321b4bc1215d7ea0a024c10f563dd794cdcd38f1445fca2c7a3060bb8d6724499a40fdfa68cdeabdc20e5d40ddf0b89a15a5b060f3c54cfdda28b7577d131d53b045a65321978bdc3c126cc2b86f4fc3847a505cc7cf2fe5c09f5f67b15a0603dbad2773d99b83d2ec3552920aef18d913e14135ee40c321ed9dd4add10240b687f319a1fbf58766d3bceeb2dcb375bb7c0535d2eb4f52ea86dda6dc571212ec28e783997ac4b0b6e8538784498ebe086a3361e5978b51bdd1a41d62a3f3c3f96d8cb7ed791360ebf7794ea167c7108730f1a83cbcc88f5b567a87563823eecf6dd5c77de1210177201031356dcd70e2ba1677d4d67aa6e1e027a"}, - {"0000000000000000000000000000000000000000000000000000000000000018", "011c3084568b34718e3d714f9bd3b44147e8eb915a064cec87628ba72f926fe670b13e5e37532bdb4ed01f055df59d15244ee9ca12637c4078f1279eea5b903373ece5e99a3584e74d9526dca9a48a2320ba4c2a0c2e8f55b84a3747838d8442f34b3369157c3b6555121d65c6d2ced3208d99820879d95565c85db496970d7bca6c6b78f287d84783e723b58015d6b01c54df12dacd7345f87291dd0312d7671af919258bcb6fa8067e29704ae810bddf1a12905a957f6ec0055741d508e542721be17e83928b91e66a5a6ac524661f0ab406be395d42494a752602030ffd9ab464e36fd80275507377e393313a6bf19e356600aec386d8ae5d98de1317d672f41cf70f538695a4e2bb72174dfffdecea243fbebc248e3399e8c3260cf2c96eee88a0ded5d932ea12a8e25f685bd865eb1897f39c3f5012db0cc544008fe49fece661a522e4617db3717681039bc3a20302410584193429b0162a3514734a32dcab5a75570ff9aed331db454d8dc0b6c609d17371e7d1bbcdf8090efd4ece15abed9b37a0ed047a2a84bc86731b5b2d8a0f787e4d800f195e1336ed7cb564f4eccfa33806c1c2c64126ec336302c1fced5b6bc4f7411e40b34eaf1dc9cdd66dbbfac735d61ee97ebe9ed7f611d910d547bc890a19da57df91dfab6a7468a1d7fdaf4b15b190df964e6d72a3d472c3e035a79187633c7e450679fc1dc94b3da717291246cbd320f0f7aa9f2b5713d634e00549cc089257f1d3721f2b361aa6b795cf1593d138f0f199e5c6a6f54f2ff3e2c286eddeadc32550a3d217a03a8789d3f3f247d276662ee7df206e11e1ccdd4063e5f15106e2df60d1f172d0b4191555364b648608d2c96cc9bb668ad8cb898f29df5c6707127f44e5ee4fed634658e752a5d1a855f7af5068bc23cea52e132cabf5be24d342c62166dceeb3d93d5c0177e66ed4310e45fb4de205b3cc3262ea8a7c2ccf197a2cfcf09d8fb38aa38656f9df0cb213a473d80e02b7535bf08b2ba8b7f5811109f0602209d154c73559f1ef9345e1016566d2cb651ce1610b73e93d96b20cd5a2afeaebb06f690e01facfd21d6cfb0071d0ab353ca5674d4ef24f3bf00724bc6fca5a67ad9f66e00e70275e0d55b391964a44ab466d63699d1a5879a21d730ae24a5780d7bb6b223792332ea161d9ec733c0288f929df22a435c3b0f119c7f0f9f6667c13dc1c1a73f5f3950f7ad713d358a4bccb86becd15dbc3280d2024ccff0a3f6ef2ce2597d452295f7388dfda611e580caa0c51e57dd0c152f030bf7488d0da0d1914105fe9ef0654153b47c1688279ce38faf982ddc64f27f6d95e2adf85f3740c181d0049488edd1bdff9e2231d2c19babc755ff54f14f54d5962ae0fb4fa187f4740ecba8427e7c174cc59192c7835be5f66dd7917045c8a0c20ca20bacb1e81ec1923684115ebd3b84517a3e9d1b051b28765f7724673bc2abafe8f1ba3770dea29798cb29ca3af10b59673634fcaccd817b65c3f7f8b2d936614ad512894111c2e4f6608eb15f4da08939eb2441c9757774252759ae229e367689dc2f73f72b771f456abcfd1b8161761f7db95fca699ce9e14265ca0ea9b8b2f5f5a7487dc62d02651d51336ab2d01ffd37b0bd0d2dd88b5f5ca7cb5da30a55c028806811342b08c153e81b9b3cfb540ca0cf8211981970a45377a1e857389cc23e7558dfa41ee1d2c9aa34f33872c4d66b90007fffa74831d709d6b33bdfffabe3f13530ccdd5e4bb7d9c06cec0c88fceafadd7e7b212606450e98d8e51306c056452bcfae654e219fec61b973e7393e310b3c39021e276ab60b88f46bc73c719d5fa278b1b506155f048e1c4e1df023a257490e32335c63d7f5bb371f38a568a84b87922c656ddbad9"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "000f2fdb5d6f0c1f91ca130f7f65dbee1d17db9d0b293044f758b0cf5fa900a52ed8c0d17974471d0e4f09cbdf4ef40a605b326e4731457ea876543499710967e83dd88734bb39af8fa894f16a985ea33dd5a7611d628b806e942429bb0cd46fcaf2ccc9a25eee3a524ecf65489c987dfd2d7b759d625d66fb27e3dc371226888afaae1cca1b0763348383af7b668c2cbfe77c4ee0cd6fe7e38ad93537f8ca5857e4c27856168e9b016d4c8948db90632dc1b3490fa3a7e9c6106ff8fa20d85cfabe4d7b2b4a2a1549afd75dd9574c3115ec187ff4943b132ad3a1a244057373073df3c13073ce1d417563d789be0a561762f81ea50b7663287e4b4206db5467b891cc319ec8a2eb3e3ced59d7367ae7f32a887a0a18ce313bb01365f20859f6122dd15660b30e1d11cb71334073d2cd5494f5c93859d920b2864914158991614bfba27381048f62e6c4d5c850b513cc0071b87ce1895cc5eb9fc2c53cbf11c8dc362bef9919edef9acc49a9ffb16b257773ceb571f0dbd1845b25385551f4a4ee1fe20f498783e4bff6e8d0983f7c2e79336764d37075d4244457bb557895230eb4d3ca05a189c74130215db50be2da04d8c720d8901942f74d154b25e894fe19199e5773b842d70a57ff1efce20616abec16155578dadaa2660ff3d224a0eea5e69b2c6c7cb6cfd3ad61e20a73c79ad9a53d73f973742005d9fce6cfb16707f0d1f4ca275c797a9e795ff80931897e9368184025b360654011c3e4d1da2477cc6c1488cf734f99b897a8bb353e91650442d1bc9b27e11bf22748c6625a036e8962994c40f486481d34b278108538965ffa9f87f00321251f98a53917a2af8e0924671c2661d2158785e347572ad3639738743a84312dae37bcaba097cdfbda05c909f3e02a80121f9d0151261ce18d165de31077bb33066231c75baabd821400495aaeb1c7c07c590b62b4e1f171bd7a86df50d43c55bbbfd7d5262133d9451c484daf9aa5927e463a064183f860c5427fdd74539162b9c072f6423ac2bf1c32f984744eb3ed476e1333ced970b631a4fe454401cf60db1e6115d77ee033bfcfcf11a1bd191a6a643fb8eafc4c29203d88f227d1d8cb6d462f5bb69615183a33a723885f655d29689c6ce6ef3ee4c17f34202e5b0a74718ee64335fd043ffebb598927a3df2f7e006ff514b1cc7270b693902049f7c76c233d4d43600a5b0e99dadee2513a1834c96dd4ad9b55129d96d903364a1d7a417abbbe12c310f31dd424c58331e44306d271eef7a7963b4eddd078a3e2f2ec2325791c5a081e37c54fc292276803e1335ce68169576f380d114bb84b647234bcfda63f2948b6df81da981a98f56e1c8963e5c1091ba6afa08649a2d742d5ff32111db41f2c5bd3c4d2db4aa439e8301e48e8362f10dbba3402b8d7b07415f6118205d84955d8e55a588b560e01238322bf114c0ddaad0e44185446c9aac87a770f9407f127689f49746bcf9962e631f44fc69bc39c03c54aef77fc84d8e05f90af06494ce325cddca4fe8b5c0316010750d33dd3597591d3eeb8aed54638f740d5393ee4f34f9553fbc7f1d733d16c7ba698cab643a805fe5f6a48db69c9f9f6b414547ce729b11c7f1d6c1b7beea83d265e6bcae0b4b24645d27a12305f481805c64ac05116c2af493690ec2997fd1ab7effa053c093060570b8de4c3af23d2ac8d96dbc565b6faa29f12301e6f58cd408e9c0246dbd7fa488aa6ff57e0343f50a44f0364979bd69f744c9af1e90923042f6b420c5b27af0221bd8d9cd544b0dedf2e4985a59cafc314e656e29be83a238931125947480ee92678ef5d4e145d60d563cb8eba8828b49d2f475e0dde2477c95e25f8d393a10da0788f81654e7ccc4866c4357caeed"}, - {"000000000000000000000000000000000000000000000000000000000000000e", "005be5e81385dc5edd76866c47b5bb46bfbf1de58353ce6f01826aa149b1939799a553a102b72d3bedfa1e137a47ffcff83f2f2a280a9f409e4b75cc3cb19524b8e71e00b7e659cf951429ee5d4e627f49d416220839d3e809cdb9e888a1f1ae625b31b07944d51cb94b8e4cb4b6d94f79f19424dd8bad0311a009f34e4415346b3d3da8b91b6c7a21b3f0100296371fbda5a530b251cd2e134aade1f053a61def7e1a57467ec8d507508964a7e64c5bcedba91d6d66e30eddf01f18750c08e71b408b3d34d51b624d7d1798d569aa33dbcb14543c18c768a7a1729f66598f53fa5b15357e0aea1d53a47182da8fb573cac35c8c20229d1b2d9a6a790a4446096795d309856a65457dc8576a8ce65e84b369a2be52d4396949ebcee9c410efd11b1602bb8a614250f49d2fd6c087e5c4c74d046f3996b64e3ae3884af3476f48e22d316347d958c8cf9816625593f574049c8b768fd4d7f9494d634a23ada20e81b315b856189b0d7b5b562c394f3b61fc3742611e83211eae180d3d5d2c9c1b8b89aeb1628375c856c9165d16701523384a8ac422c66d26bed3e7e3ffd3aa3cc0377dc1051aef8503c5a73ee75273c23fa7b22238d338f7fc1d062579b1f09c07c085333f13568510d34c5a94671e236c0ad8a0d5d5e68bd3c0e8ee67ee44cab2ff2222b40d48b3d22969cf09561c4f3ba7435e831df50b094a9f56b8194d1f33ae1547c537228a799b5f0d411f8c3d6aae58cf68e8e993ccbeeeb6574da45ee0d70f0de99029099165ad805600ad71d1edbba34f061c68a17d0dbb2f0aadd805fc2d53f9cb7f2940d9d1640bf1921cc366926d707ce2c9f565c7d4f44496948e0f75f16a0be6314fd2ab841aaa6c19f37038fd21fd1f1aa9e1fb6d10699766a25966f5b244f84d9f1e445e02c4a1646ff181e227b98b92dadf3b050e7e2217031f541c014da08cfa7750fedbfa6054a0edf74a65136390f7b0d594f976ff615105a5a4f54b2a5967850431aa01274d72b695298125ae5381c8afa152628a19b64b4107507ff3c66322d055f897b51caf921b67047c0ecce770313d82dd31a7273523f0b86ae74855093de3e8ec60d6d55e419610e566dfb5cfebd675c3210ba49ced10687ce10e2532a6526a367ce2199ddf54f9639e569ec347e6e4c6dca8f44d1285a7fc1a6e0b461d05fd4ec7f0a357f2dc02cba1150740cf23d40faabaa2696d48b3d61cb4df4644f14b2ce51e022930c82edcf34d643dc1c72614ea7e1031bc2cbd259562f5e44f732add376680a70ecd7b20423668d225bf0cf12fb8779eda0f6344759917ffae9ab2c45f751f0ecc379f64c3edacc66dc33b8bcd8586236b577b8725e91e3f879af2dfc1a1d7ff03e35eae9f76dfb5eb4806e6ac26e12f25d74f74ba5dddafe34e159bd47905d3812ab8eaf549a9463461a47039e99d62dcc12e228f5ff518590d4ad61a17858362ad1b9db19e90b2099dd9ec9e979605ec21848e07530645536d79afa2199c45a96488331f54fb83fa0f51317d8aba0f3ee10fa58306327eb449fab54139ad60a612fc4abd11091fd70ce13bd97aafb27842a69a54efd1296618b7ee147c0c7ab64a4b1bcdd4f2c2685b667121eded5331379792c5f43dffb5f274f5d58ac073e6c887370082085bf72df19f39812178316bda4419518426b5c3982ab994960b237c25288f139adfeedc4143fa2a8f77276cab5538cb01a1619cd421ce553b6d3c957175f64172f4dd0aa9b8abe52ea44dbed672664482f3703c09859e74ad1764a1347571ea8db9fe26db05fd5c932e004c6d65cc6f0ab8f633d74aaaad55af69d2ac1d0ca99d92858c724dfd8135f40ef309ee978a99dc560d7a0131710507da3454811f7f2be0d06546fa16a7"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "00032058bfd424378b8f2aa35072156f08befe10cc009d0e53f58193d8644a801d9a1ec9c009deae878f0921423fa8c616a59b5c342016d4fe7289f5d96a800f40816054131dcb1964a25302f09a8eca7b3cf60e07a2e3f6999e3c63691e5b0134def5db8b5a5ca7e9122102115a556c87e6b4d36a8662596d007c2f7eb608747c0c6d9c1c557aabb1f1f7e1d9a17f43be919b0cd1aa365b7152f3ecce32041350afc92d004e1ae305c066de49d83f7ecbf5a3368faab0c5dc79d23c390951cbbaf3cda7a7658140f0cfd04a2a2865de9c00197e4e32217b3445f61a74422ccc11b67c30ffce8d23d2571502d35884d5d88572bf79dfa29b77fa276809a45f93f79c438b576330d6a12a8fbd43d72c50020aa12a61efd6c55310d9926324f7fdf90740d07a5e0dfdc38310f8e6e1de394315f2ac2cd10b923d58780e1f2993afe3ba3ffe3217fd7c689c56cdeb5ddc5d006a4f9973c92fed26f473d4fdc687b98415bb37620411430ea290e6234879d079d489e11141678fc0e6179e0c69fc8d38dee231c302f372e052aa4c1a96ab1935457e590d60fde190d3a495bc1c9971e956f983055a21da741df739d7c2c1bcd6cf9d38938307806209c8a06f9653672fa0a4629834b06a161ad897c3780bc9ac9b52454eff3787d59728ccd49d80a77e978042a77e3d2a1d7c3b42ee45909dbd90be5feefa9224063103cb151d17f93660312fce73f96636e15423ab29c86360a399f80affb5b2da6c4f623141dc990c891542661d696896a58570b2924559537a4bfff4bad31f6d954b14f8a013ec6c32f979559cfa46cd98a69108b2e556674dad4998d376062fb3138e3f103b77200c238d1c095de70ba3d72406fd2fcb09f47b9e832708bb15e938871fd7f27521dac9a218e382b3fe28a619b8b7e5c7797055f698525b892170556bdacbe086022094ad00917c7b6e65c22c52338f0d10f47cef1a0a493da53699cb7dff6797dcd1e31c9a450058776d047770cc8518f457bd2a412de665d90d5a40b61a9106c4e62cae57e9c9ad4164680128781590d04ede8b077cbe57414adee1138f7472d77631bdb8603a20401cda61b1f3649b5fdefd438f1139e00f3bf67c7f221bf03b0ba85c0ac0ff2e35e32ebeff8a06ea942bc51ee6fbdf24cdbaa5cb31f7bf5ae1602ad6969f0e9c06ec3b2056093efd3ee5d0c71db28e14dcccff8c483d42bbad4f6d4291842107ecabf1cf263c7e7452be1366fc2aed4c7e4cc9f3016dfa3480b89bf81b67e1148de21132e6678368d539a6d3fc6dcb0b0f9cef9912a82e63e11eee7dd3632254124e8ca5993e7f4b8d2c63934517d3b5e7644a35d02ef8e222fde33da3a316fef7c63747abaea8f9542503406709a43f5955f62db8a3391ba6cb8dd66eeaa7c157e31f70499dd7fd0250e3f1b8abb8e7bec0c12d0cf2d9454bd8146ee10422958e1d2447b7d6aae08e5d74de65445d4e2eeb0c706ffeab8b621b8c9ed3ae44fb4bfed2f9f732a32c50576da157b99b3716671d8c7b030e0b8a90f8ef05d06ff3c1d940256a7bd591295f37564410b62b373a1833eb135827c5d69cba4f4d781d7efd9fdb80c6178bec2fcc526baad98a8479ed24e95ad410d6ed7f4568c697a11751d55aa4f4c81cf08eca2c7bbf660a0610d631c552f3a9f074c6261763ce22e358bcd98d154613758cd33b71dcaa75d4c74e5c567a98fba5290b5edbfb3ecb0f3b8f9cc1278734ee3291535647bb30a45f21e0923601104d238d896112a1574d2ad0420ac99795d097d041f0c1151599b5d602fb8e7b3b0d112cbf2bde5ebf93ca21740ff6bc00f28f603a11541e1efd938274899df7ee35c9d975737ec5cd3daf9d3b698331c41cb75d738886cec1c35a2fa23d5e689e"}, - {"000000000000000000000000000000000000000000000000000000000000001d", "001a3a7a00685d857fbac3fc1fd730319799fce8b21143a08ea3c790b1f7cf8283db53a260cff68d778300a5762845d25135891d66c83d428251c57997541b1a070b55db2d1343990902ada7b01cd5fd75b66fc10653d09111536f55d1b764019fe6677d80245c61a7547ed6ffb523237330c90552e269f689ca22f636390c00e7459cc5940f8bdfa3f53c5357319ad8fe28cb2688131bf34fe9db191b13b8942bc8edae373f5bdb045b25ce1f65bdc1c0a3912346ef60e4991acf87491ad60d647b49c19ed77673132e566df8e1d18e07e4322f9a8d2b5effbb6f0193961c4e01ce562c55e77e581caea203f77071e7e2599305f0b7dac219ff035f0f051b99368626699f75c2f2f978f5e0c9a4cb36331ac0e129fd375b71eab24556fe5c785f5bc81c17df1b796d1342de765541fc15e7fc514e65ad6e59f4d82664ca1d59d131a2db8db3ad0066bead37ed4f522503b22cf3b016a10bdd5de03d8869e1711adebd46152f03c46a3416e50b0d8909277cffc84e5f4edddc2c0634b9c4b44a77968b27f4d1604cb55a7d69b7eb6c0f744464c79668e394d1b12e184d43a91c67b087900e26764a6b9b6fcf1ed0e11eb4f21b3100e9bf473e23da077857d1652be4b9f4e3b843eebae5a65eccd820105bcfaecd5a8b7efe45c01942e88b2314bcb8d731387f55ff90e26bd8bab455f4ad7dade3f2fcab2f054f9716b2636649b3cc508e177c8e4a1fe79c6bee1286d929136c12b578e037ac4fc30fe2e0feffed2a15923ad0445bfefb0e49339586d2f51fca9e9f3fd32b5ce21ab4d42630e42a98a1c8d2001277f1953f6f097066a079716057ebae125c3eab7b7a661eb5c6ae101074fb323818fdda4f01b017344699b09634ff651298b9d6b5d7bac57925b76ede7b5f7ae6aa98b8a21cb23da7e9b35961edf113baea599b2dca500fdc3f0043059a7f840ece9ee4f519a6b05fbdc4fcaf8f3143430ec07192e61f97d6956e5ef9aea5672f7541b21282adc8da1b1141287b33b92ebe99b94d09de029240141527e11e6dc1a405b6f7d34cfd66317ff1db2f00e6a1fffd423eb9737cd0da0062ee786ff42865803304b336c79f84e9a4cd355b3cfd3539e64c13feca071ce55a1453d6138223030f7cf4ca04d6d85cba91102e309a705c3fd3b57341b67c4e2fb0930caf77440218242c1dc49c5b09935a1d0373fa837a18be94920fa3ded2bdd5cf6bfa04b54b47e55dd20789b542240394d0c969b07fe7ccb16275e15cd28e2129f140240e187c35335cbb55e064f2601e371ae755bf5ba3f9099fe1981123fee3c18651ab08c238dd9b201fd7bb364453d1171914758364b49f2874939d403c9153241abbba505015af5ad107d80e79673cea04cf124e4a2f5a1c9c60da2b4ef3bb8b7dce6edf33c9fc3e698500c9c99ce602a379cbac82f98a56bc9d9153f3c6b81d028123bf0939e7e2e1f1f9ef2cc8a5623e71bb710ee3f88036d96623574472eb13e8330637fed58dc86b0a476447dae6edf3ece6e81d7b154a9db31c107c0150fc0a2ec13b01091690bffa4cd09274243444fc060965371515f099978c40fd9531855f27e35acc9304804e163506a46095adf3e23a3c192d9c651acd150d814ac1031c6b03388c23306c7ec08513454981c6015196eb674a8c2f89e8f5119bec0452c31ff7a3ab26a984b432b27d85bfe995bb153ff25eb765370ebc0873f68773d5e463ba7ac4e465ad11d960ed4d796d28267e930e21f4e7766037b443bf261a697a17b1bd05d69bff91ae7eb97967e23e69a0e1761a099b7bd73e1dd3ea63d16770fad1b538cb418e562e6435488c17c11109398d3211358201bf1eac4dcb6fba3d49eb2fb9ee597f5fdb278f3eb34a4cf9d2f7742edc81d2"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "0029a3fe65545c2fda32514e1ec1f54e6e6db8ed841e4a3ef1e214bdfaf136d88512dacf52b595f8b9a1216cd401595575efd8510a794def5adeecfa981d7838a792c04c1fa999d908f3e91ad3a0da82831e2bea0247cdc11d95a6f0f42f42e39e35b3a4d4f78d904f3ad3de7cde2622b9ae4ef3c2ab539f319ca51f4ebe033ef9c0e18c697bed8cb8b9bb4ccac2af061c41991621d663b7480c18873d55bad8c529f2b3eb1e8ab4022996bc73878160be3293aa17c526a111236af16e22aafa5e9996eae4fc4856405549635307b118ec66041c25e67494b1cd43fb22f1a04dbe04ffbe0996f31977dde36a968e694195e1cea0e33e21a1b3d71b9a11e99457e914cf0379adb3419c2a400904bd8993b62fa7ea13328f0cf79e63950b89b6b4ce935c3fc6d12ae883176b0ae5cdcd90f4cc76f7f95a3cdcbd9b4434d664ca215e899b476a64361b7a497a825b5dafb401d683dc3e2370d1b19d5700cc51c28afe94994dcd45e5738ef9b224a7ab8414b0452b36025a3d9fc3a619e1a464548c7e9d107af3e395633b3d56197ded7c46615237cab58defb150e522c4f158f64f465a247b0424ff2fcf0cadc2e1d0719b90b01169ddb5db1c750cb5cf92b82528bb9ae5f599d27d73a191721644e00a5e294f73d774edcb00d1ea60f479d1fa7fd1b38012417ba937e52d7393ab259b26d49bd2dde1db408605cf7cef3c48daa4f412f2dd497b4b52bdbc7b004d0741298fec5cfd6f415e86f2f7d644b2314c9ac378169ab273b7ccc50df736e76f4b6e889a878b34dae7280cd4c4aa2efbc9ee10842a8c390bcba3523fca9b07b0c69168b5356fb6af571e4d57f01b68f2bb4fab1cf24204831a24396d063618b4c5b37666635941b909067fdf99dcce39945f80bfbf135a5cc0b6d73d54125fca2bd3ad1b75decfb82997c5aeea4675f7149100ee36b4efcb9e6b73a1409770dca0df641adb4c3a0a60df794ac8389fb8c1a0a79e70211454a994f60c0ae98263b48f8dd712c0e859ec5f024e755bb9da354da0c7d58ad479337582297de8fb7fd264a03497ba243ceb2df99ea7c14b8f047baeb8bc9e2d003b442026531c52ad8d27d49ba67407e3eb2d0f0d349da03325a7176f52e938e74bbbd7f22d60b43f01251ced7353c7870294a26ea1815596c119725e4602d4b9e2ef0167e580f08cf1d0eae692411c13f6856f271b96160658c28a83ee387bf069e2041dfb3604c5205dbbdc02b796075ecaf17a9f7a6105ee8fc4d8dfc2f8529b07809b18610feb44b08024d382e02dce0f559710290652340786865d0b01c0a072da9fd001c7ce397d60098658df98647313da3bb437a5bfb9329950d5c60f0cf49c70f0927c4ec54f7493a9bc73b59a04bd3a6832dd5e4ab48e0940a8ba4abeda7bf23aba71d9498402351d3a85c3aea2b243f21f53f12899d281b793556b874c6b67a73973496407185ac92b01d04cb9c2e106b0f48ec1857f77d31fe76453e6787a1561b84b200fee0b35136b90c1830be1c4bcd1e998fe552b0a0508e00426aac7a46cca1426c461ca033dc0061418740a30f0a5ec4c6b3994ecc0d463ee159509846d8a1718e4ce11e553dd49182ff452bddb2729662cf63c3024f56fab0fba7881de88e354b2d840ad9dd754237f0c00cedacdcd3863fc7100eca395d5fdc20e58b1e4108e458c424a826cbf5b738fa228207e42153986d20f3748a5cad685e9f40d63ebda6c2fc97ead8e6dc97a1b1e4147eebfd9c296694a63eb5a1b1cfcbce2011aff44978f153a15ef0432b3035d5e6555865453c83ccd6280059bc101d3cd3ad0ecdc17f2f9509af30a277eac51911058c1f10d473cf0bdb87ec7c199df9b5fbee7e778d89fd542d2584e67f1a706d6d2ba1ef5"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "001afb14889536536d61e00af69311801a4b53d972110a8a043c4feb994ec9b1b5d5ee746a5d55b454c7157798aca0b596cdd8b0a5526b7af3e305505ab65516b82906ab2d6a4fcbac04338d42e9ce64719fc8b709690c731ce946eb75ee30ba4a56d972c8213958fa177b0161855fac3380295351df488c2e6dfdb4947f0a1f517c75d92834cf8c5594dec3ed09e84c37e67428623f1309e79063caaa55248dccc9b9cb1998ef29007daedbf4e161bf2a28021ba1235416953ddbb9b71529d4834acc520ed78b224fab652b9d01dd77da8613a141c420fb9749e7fe917be35616e92ddc7777e81dd3339be65e9227a88213f516fcbcba2661d773ad048839d193663d29476cb3c5f94e108533998f765a0d3e16a417d55e8bab6349c2e96af7ab68a59cc09c0b7649371e58da84f13844a249471349325b582054105c7f486e14dcf72aec585793cabce2253591c4f301b2d0d63c5aac2137eec39a18d55de1b522939f1a7b60c7d1cabd83b9fb372a8b32db7fcebe25b86e380961717a8e8a6039f3352397079d99a92ed2120a8f0fe2b6cccd5a60dbb3e63453c12d53fe007dd16c19046b5d6d2c1c28e1e041012867adae6d210d3cac84275ca65acf7350efa1d232f36e574a7fb4e05df90709ccb57f8d1001d0a4e98291fcdbd7795d2f9f66560b42a280abd9161ffe79c609bcbb8c8b330c1a23c903a198458644f727550984077e38a8c6084376097a27495db8d1ccc5536a8de306ec333e99807cfa7d7f08ef4e722c5be94d4bd223a4df749b62f7df7ebbc814ac0b2e131748bb3fd591efbdf5ccea4114b54ad307fdafb278ee4eabb54325a7abfb13ca6e00fcd8520e7372a0260f0404d79c24acbee661fe48bb3c87a51a7e054be1d66d35150d18d0e9f8e1f68dbab676c32ef29b78ff216fd157f8d549b778dafb263e3fe3bf0049e4bfed222f7f2d63b18c745b89927764def27c0dfa3fcbbf658023cc4b619ff419c2394a0ead0a4b14f3d71d33854d65e6fcf252824b5d04f0f58ff8065fd916d4819d58b32633362b445b194a6e7bf5eddf039433bc140f39faeda911ec8140fac2fa1e19a48111332c4c7e1c168d5886b2092540b415516dda7b12370ddf8575e14ddb159614309556e57540c61714b443a32794a7274b4bc36fb66ed2354141be53974895043bd9bc502e5065851391bbb5aadd01f162ddf3be340df43ad72f0af9c476339394f4d75262e073f0140999f988968297009617c8c5cbf57f6e4c4cbca4431cfcf3c2621215bd8bcdd1dc377bc10616e9bf745006935bcbdb9b84578e0ed564b67ca441ea49d915612034d6d70f1cdc911c80e298bbb9f74f21e2da7a75223c399ac5631f5729e4e424bab97685c92955ee5e3e741e2c3f13e39da9eae68976e809bb00a8392b6b00ceb1fc7eae7bb9d60013f00d67543659cb3444a220e8652c41edc2d5f4e7e2f0f6df1ac4bceb542f340da0092de178207bdbca378aa33f3d6204941fe2b02f580bb6715a297b15418aad3662c32b14861b6961015329021e46d70af6a3452be74c4e3dae98b21aba1ec5c53383d14338cf079348251f5e46217372eb75091723e8de536f07edb4c0de76b3fc253da2714ef52552d6f18510947ebac01c77567abf979ca37ead8904da0168091e91cb974b00c5ae33565dd227120e43107d24dbf7478767f2c926d80a70bdb5e24054cf6a172cca39c022a02dcb26c5756c7eb3cf53febcbb6918d2b694bcaf5e71eceac32df85603f98f11dd033208c496e8fdf2d8c59ad454276960f15e10a2b732b70a737572a5d69410d9c794ecdbdc1bb1d576772f710f133a6a2bc53f7eef8936fc7bfac1afa16dfeeb66176eaa8e00636337d287932b1dfb615ea15ebf1f51"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "00c08022130723786de7f0dc1266def8852644b5743588cab98911b9dedb5ef43e1a53433e4f4953d863295b45b8ea9758d2f1c4d51821b9c6d54cab6b9c244673d25e321b040d598367fe186a272b11ebf97ca605d02277c756e24b20a82466b15b1b298db214eee12e8f223db6b171b1aa21370b746ad249c50814821f2c8a95d77ed47d77776466c82dcadc29eb945210f84331a3cd85ecb8f17a5f293bd5e0a1bf25d89c75820475c966e6b3c1a3e72e60491c2316816136b7fdbd28a3757e4ce590996de5338ce1c2ead5215dd8049316163697210f62358feec1b9dae512c876334f4a9531cd3a1335b85c1bd6e9a4a2c1a62d0dad9e5ef03e13d9daf936e74afda94cbe2682fbb65bd9f6ff55e45ffbcb90863a3e29f61396c08bd1084e4ff6d9d6dd2025e249795567299ef843954cf9850e18da31c2de3c58ae56fc12d90f810709204770aafaa3cff7b28b013734fe1a140507233fb1c31f683682497113d3971ee12e43c37224d3b33526545e35310f19e15a4c38095a8975cb6694bdeb3c5242b2edd67da7653f92ec2c92648e8b9403593279833477c6b20df5d178f20f0632248ecec794c6562a21d16b4d31bd452e13ad0f0e31d920e2a5642162085192fba4deb907c694f0c21bb1da64d76d6ec3d1dfe1cb7eda769ad19f5a29132687f7f72c564fad20cf96dd784ac38de5d7f427a20229589165c7546243ea004f9ae5c25f26edbe5c2e1a4f5aec401ab39b716d7282daf1de659793af152d082641792bd6fe656343a17afbfded4069cab975b81c33b63dd6594f0be77ce1d65dd99794e14009ba3a2ff11a3e0a5cca1f0bfe37f3f0461a628c22b507eb329f3d3f90583550dfe6f3a0f6595a6670f27f72d84d23cfbd69a976b3da26562d05361046822af46ad7a1fe1de9782c80c58ccd1a3a0c70de2ea738fe0d5401966ca4155cedad5711643124e53d5f765c5cb18e17bf6d63f591d01b9a124d0287f19b57ab08be383c195d26bd0427d0679cd4d74b716aad65fff7977eed31c16af3cbe6a51bef1969377ff5eb6f4b715dc24a04ff414beb5b9030f8ef446f48fe50e5e6281b26223874ead3a119c7b1226d95ac3cc1fe7af4b4bc59be67b31c323da8401142f0383f51f5ca56b1537c132d84415d5b29ef80997fa03b9c69749d1f7eba5c9e6306ad1f89e0217fffeb30b1340a0cf4949fdc3410874b7d4316162d4b1dd66fab0a4460ee4ae4e8fc5f860d4ef2f10851ee3732471cda867b3233b5281e787e2a5b1b201d70416794dbe59fdcc09d160fd774631908e171aaffd59c95c1a6a88b4d5113f3f9f67fe5700cd618ac170db1407ed02108af1e6461d5cd727de3103691dcde5af2593a835643ae633d468f28ff7e6137e506dfcd112bfd0f2ee6ecb0bc143b5762dffaed019f3e90869c5120f5ef868cd4440d2df6551a757c30561c0c0a91d6d49836050959c98426da095c29960aaf87519d044a6b5f1cc28b5ee9d5cabc2d3d4fd213ff7cdcac9ee03bdb4804bae454a5db00c25e0f3d05e1c346401b5869973873110224c81f724b7dc1661c3719a73a0e6f975b7c15f7feb82e4e2e2a71ab1b13ab098891d525ad4ea69236e8e8833e707b37b84e2af4db413c95e7018fe3365cd83a5edeeae5d8ab470405b30996d7cfc52ba7034097761889034afeccf10b347fd86021c661315710cdfefd17497cd8f1308617327ee7ca0a462d9746757df0ba7c927db9bc228b39bb734a26d3c9bd3bd7d84007ee983305569cbff009bc48ac6dc8c6f2cc07796fea5a2df6cc96ff8a78135785dd0f2135b7296c72a3b869d2c2daea7a39e70aa6c8c9648ef629091b043224476ef9e1191dc8f43b835411ed76677fb82bb60bb640e876fc3b3dbfe3"}, - {"0000000000000000000000000000000000000000000000000000000000000004", "0078d87822909a0ad4afa0388a056b3444fa69703c1c799f3818542ed93536c3280b35130b60405ec2ba1080a57490682a4dde1a979016df0f7ad0ffba4fe7224573ae4c6451e9d0f4f9e4fcf09392d05717ba8b14361c4e1b1a48f9812e627192e90f9a4fc6f5bef41d36e4304f52c79955a4f3d46c486f25b999169bbe15ebe259890b803ab079018b26e9724d768b93c08521a40fa84da6eec3584fc2725bfdd3371948de31af0106e8e5159089a14cfa61fdf6fd8510bab4b695d84c5717a7389e1b1cf89d55daba44ead78069fd12f025fc235754cd91eec288257a833e5331fa0e39fc7334b7df98df8ee203f12c13dc483604863aa17408980840fa9f255071c3354a225c4a76089d38a2b3b74c202649f66d4cf06ab34e145f56b552038fa3fdc9432ac155b6e19b5e358bb0458bd1eb417610e0bf306c2d7ec577a592ccd15b7655bb53fd43b2ade2778d4702236c76a5ce793b26c3b44e95a419224408dd18bd2e74cc07d26aa175a1b4c46be96b80a5ab37bd8e9f16c3bcc1b9d6770520c4d6999b79a47fac6addb09130d4a67e24d45fe7b5e5532ffcf3d63136ee9ce7e6194dea294a126362ab23d1b6e48f0981f03274c31125dfa4ab5fdd499933eea48d9afae1d52a2d9395d2224dcba3cb11de4765fa24e0abdd7d759b697e28b62e8b8eb966136ab6ec3e2520b256cfd19c69f0be3a06ce44ed0695bb092e14f108af6ce2974d399be8bb58bc0702b8e5733b2d40784177cd9227747d5db0570ad50621fee513895302117c10e06c0d950cfa82b81e56d538fcf3b1bfde0fd1e9f8d58915b59372ef590893cc5ee8901517be31759e35c75699a78d53801c1b6fd73c3a1735459de701c8fe4e08fe05c617cbaa161e4e6e0e8a2e9b2deda1f1827bd60cc95bdc18932ad2874bfd50b89760ddf6206bf50969d499d3357c011b75341f4833849c3ba0cc87ae23f948df1e90d369cb1cddf069e8a5bc6357146bc377a1e3f2f48a8312db7bf678e89ae3dd4258eff07eae6edaea7a698b2067311f9ae8ef63c2cba2e35d41ed35e3f8b62695110f743615c8cb65fe0651244fcb1875c5c593774f27b026288fe93e2b915fb5e2185b87ce2cb61e9ab218f8d3c04187342a3d53757edfc22b7dfbb1f2ac4e1ed053408ae0a273e0bf2355b4c29d2ac107bd33840b31a6c7e0166837686dd0e1e0fc83008c0abdf6c80bf5f2fe1120f06b9ae962cf30e3d6a8f8ef11557112534add76d0ffa9c6f0819a34a95aa979cddff05022820cbca4528fb49bf4250127f363bdad4fde653d138be95381a0038d2780643c104082066774dd92ef802cec0ecd328f09d6c208c2fbef8c1ab0b57f0da039dec9d49b21f9f9a716342f93cde44d940092f9b359aed437e27920a3fb3e35c70c5c38ceffb3db64aa01f6605cd35ddc9d67e5b0384fb5ee9a326cb590d4131d121d6850107ccb40239bffd232d9c7f037fa9e09b68f69630fef0ecffab1a9826bf3151082b3cdd412a663670821ebdb7cf1a4b2f5676941ea579101c603f7aee2f695ba3ba1543516e0dc9eed53e5f1ef30098fd348621870d12524b0d49e3cf5b31aed5ce01604d2943d4c9efcabc48ab0892ea742c677e7360600188bbb10a82df4fbda8db339c53eb89a4b6a163d7704331249944e1c228d863443542344e187b417de721e96091edf10be319c0f23a9545e25b5826af3d65307af27d3b74f0f60c8e150f9f9ae88747f55041f381766246e5205f1e0cc8e93abd7fa7ac8f0d9a7abcf06871b44874e3084fcd2646e015fe33f1b4499572d0e329d6cf291d591cd9861ad3ae5f7d48f25af3cff10be39b544476075d5cd73728fdebf7a78af9a7e1922d145c5c3978b199e9de36d70cfdf8a476f32d86a"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "00554a117ac2f036fae2314ff693f578d40ca9d2720e9f6d3d1d46e0ef1b2752e5cde84214e3db1544b305675ea52a2c665dd2f1310bb4a19f4c7754c50ffa185f7dc5eb935930a7b6b1b8d3625f61b1f31330660fc025b4f287407d08bac1caa69429d77b2dbe8e5815df0e63581067892cb6f30dfec3911cd8f01ab34747e96c145579d031f16fa4865e7899f2f7fd7912cc817d2d270d72dde1f9e2e98bbcdbc40bbcbd7e53950c5b77b90c8ed32cc8b4619e8f8e1c86b0d3de031a167b66f259d47a31295c7581bc446ef617c731f2a510d60735aad0f0b59f09818fab2e3844739f5766a52dcec7bbc4e38015c7f8b384d3e4466d9d6f19907f1160bebb8e8ae448e32285950a5e9879b78b58140327aadca4ed196b76db12a6a8fac6199ec2d6fe39ba18aca361fb5ce6c3475ecc024b66171b3d015d4d746d3fe4791027a81f568629decb625da7343edf506205501f256ea8eefbe024f188df1f393268fdba268b0ff48e14d6533de99315b150dec39e189f542aae8708179041be4a41aadbcf72db52d7176d9a31adfdd3082a09e7fb44872cc37560a4655b08ecf0e307980c1fe57982229a2f9d9aad4479f6686e858434bcdcd44048c7a179eb36dd732c980879f5761b10f7f95d0a35be8e242d50fceab5afa5340857d151e402b43e344fa7c389b31cbf38ef37e798a2c32305fe0851c93f09ce05a6e3e2d1653fdc01573ca1518a34655b46c726d947a69bdb8eb1ff1e02c42638d17d6b7dfa15e91f042a9bee643749509a14c3bb413382f07538bc9c3d2c022f04d168aaa19ee3f9c3f61c89e1139f9abe13ca30f71cdd9eb50c70d4da454ac0d942f86f2a6321d7f5d070cc48a10d07d3a7867d0bed6649f1540d1734fe4b13e3551fb960a5450d6727b639b1f439e82543a3f50b5bef41de2c643e61c41886884e3aec560334153af3593b0cfed163f494591fc14db07b6a472a5cde70a252f7eb2157c659efbbfa1ee078fe948b08b83967e1daf9e8f668622597e7afe6fdfb7c0da70f482b99620cb6c8fcfec24ba141339a38833cefd60a26a1cc2c029c9d1a84c19482e0f738751329ef0d1f4963b03658df58ea341264a72dbc4d60c7dd51121b5a0f83ff8ea47575fbb1df0db49dc8e98eab811c4392fb21ee6b53b5b04f254b6db15c56f24fd83ea504d7f0ca3945cd51cc52e3df19d3a1d59e4cbab6311761d7a55a8dc0aac6e1b5c33ded032f18959f2ada0851216beb56398f5c01e1f1cd9f33c6c5811fa75a1b846d1be5490acc58e24396c63fc05644803cfb76058c041c410eed4e7faee199091db3c8eeca7b78662a0269c202e43b632754b3f5b0f9710698e3b67e2408804b78668a9f2eb4d0608a3c88a0cd8f958eae0b13728d0c6c6645e3c88347dae8d324fabc61ba53f607fee228a78b85eb28aec8437aca724a2f7c96e5bd2f057551294cf00a8ee513df88405719bac078ec511d051b82e468f9d99053b2f1ba7b7bb25b4cf78c8e207d1c1195558ae4c31272d57b364481c427d07f5c175219862b550b7d0c3304d5e5c1fb8e81c2fad27e21f6b5ee39e3c345356b25d78736f3c584e83d899e2a03c98f319cfd2faac6c64da66a2a8e37a01319b735a22bbfb691c09ac20e179b13ccfc637cea3f0590091f710c921c259375d5856e6c5d421737675a1f7e49e4fe745c197e19adcb7839664727c6a1dfdd4f8c261099c364cf4e5ff8aca659e0e423fa5142d679742973c24514fafdd5f51b260c58cb325dc65cbcee3b0b2cde5dde02d911482446569f3cc41f53e51e83b91f2675bc13182e16f60166580ffc20528e37f4bd2e0bfad63bee55e0e520fa5432383a8c19158615c44d3488fad5c1e11799807ae4a6d64be34580a7cf588d"}, - {"0000000000000000000000000000000000000000000000000000000000000011", "00f0644112256b575a17213b1c2328a06fa06c400e496bddce60603f5360c41a404a66fd02b30afae76a1308c6dc78dea7b3ad88c77fb4efeb9df37437ac98191f31c05765686df3f8f42d95bb3e7e2d20d9065c033648683e9874c51a2d16c42b5a82ae1b8f7c752b1458a1dc6c11fc29bb31b5d6f35956e190c358766c04f4ba4b44836e2def1fb0dd68b7225def237f2fc62a84f7ef6a9e6e8bf1de93ba301f57ca9ce435e81a031899b0b15e9443a1d7211ee86db0ddcb1bfd4d237c85048c37720989a9d1caf597f977e306e01851982143ca5de0c85137549664b0d2c0c4154de40e1a1e3019e595e61e8511925b930481aa25397ff83831300935879251e6b15952e8292305cbdd6e9b5e96262b17f93edc8e6323e72d8ad529accc1355afca1c38b3263a945636520dc590e15315fae7ca353eb1d79619310cbc175d94d433d31b1bce4c6036c7c1837f6ce801b46d8501d41e57e13f527225c89e8144c332174b06fe6c672c8e20429124a115563f51e627e75bac4e1e57abfa0d19acf9770524938140f21e26deb60edb2ee8b98b16b1ea35b894366ed37ad176f7147b85b30e2465ce5991ee82c57f21234aa0667a50e9f3a20029ab85fce52467794892c72d09d3f1e5ed29334a461f5fe39e73278233969793d0ec642ed12fb131f5ba2f8a645645f716abeec2836469e23089390b14c8c6029c88fdcc9a52b7fc3d727048c7f7dae356dbdac919a96b68b5cf89e1334b56e6d5d9284b2a34ba2e130605cd896265b3f5be61550ce23d80ae7dff16620e19eb2199c51ad2eb0ea9d2463dfc66e9df4a316a8906a9ad65be56d9b3b3ad11db5154361d24f1bbc07d0f6f51f93b4a17990bf95321e5efa7c5d2b33bfed9101060eb82ae29539112424341462da95d04952d9b16958130a186ac4dabaa21ec216514ccdcc8799e7c043500f52a8eedebdbb6e23fd33f5fdccf491f2fb5254b51d5dfde00735e03365cd23b9f371f987b70800e04df3b7214936afff85586a5cd228d70f01010fd28c78b570f26caa5e27ca3ccc85988698e65990f220701f0c6e2cca239cbcf710ab0511848a7aa672c452ca6456d3e4ed9c9a40d74048a537456267a3e99791299ef655dd2bf3fca2a54b7842b324d5a709094ca16fbfac8d1111fdedf585350c5ab33c18d0b13b509048bc68f8267de434a65e2102dd859d09adecbfc3c226f611f17673829f9add935c7cefa2ea1d0180bf610a6d7c915a176034c4ce259fc20c1d8a37c76787e35864ce2864ff69ba1089385b468e2c24beb9bcfdf1897ed8efe07b43f9d78454dcfbb9691556c10b1c71c4bbbc6aa5698bb8a2d53e753a5af15ae8e922233355cdfd8ef93c574f09b863b33d5fcdf493e7a7ed93a9017fce513af13173c574e3551fdfe1fced96a070a50b5f6dec4095eeb61d3a01de07075f2dd5b004f496f7ce8a1a596d18950081d9c53a4a28cdc75d29317609d50a751bf5bba9931d1205af325bdd2f5fc3a6bfda7ec112e4959fec5a81fb0eda3f70b045d2ce6138b046ecd85411082d1d14609cb70e91a6c8fd5a430743229fb0c773d9528644677750675b692b375773343049b0ed3ca0ad79373e7fd542b256d942e6c4863a7a633c0fdddeff9e3c65914b9f2b9f15ebb3db70c13792b85cf58359faf881ab5fe5eb7d492bf642c0d2760e51bd70613ec9e92f2d6d8ecc379ea5d3ced2f5ceabdd5e57b537775f42f642a26625f169894b6606d3d92646cfeaf8744c6398c51531e6c9cf45ca610d55e8bbac9d4d1fb25a6dfa9cb163312e33de87f28b4779526e5d521cd5cd33020a56c51e28535f8de272bc48a9a5a655ce3d164f051608045b9870dfb623e2e837eda9cfd3d4c34384ab3f041e6e91f5fdf5c"}, - {"0000000000000000000000000000000000000000000000000000000000000003", "00669f26ff265f19be55f1f3b1a085f8e5c8ce2c943ad5670841704065e1780454095dd245b4757baad00460c5fc773594d1b47890c0f2cfa669aecd7af33b163c4c78d28a371928add39df87a517a713354c38a15a81c5556ef8c27fa88821c324b9c90b7241782981dcc031e706185cf225357ded1d7fcff59eabad13233ad9f58d6e678ff7feb4846dcc9452a4be594bf943ed03a02c0511b90d66b473cc651bb732c7adb3a970375062367576be36bdad2d595cf150cfa6a8e2bcc095360c04417720b38a021298c7909f05706ccd1a20b02146afbd83ed9cf8732e1a87f804ac91c7b78bc15d8cfdb299766c9bbbb17c3586860cfb07a9df22a1ed9aa4108a06a2be82c165292c0dea19572d8ab01480c4a9f7158c644f70b58d04df441f6743efbbfdb28bc6390754bde6530d0337f903ea0d1283a6c44d37372f3b7d46e682b973ef85e05f88752953e1dd4600109aceb898af849b910e833dc5ff32e9cd3160a961dd505737b9a4fcb6d8683c79f5b5635c6c4ef0cf507e416ebdfe387a3a60800ec38cd7cbc3ccfbcc80d23e4d161138a71cba0db285fc8f16f8ade6e9d7d6e06410780fce6060dae1fe8a29a4db9bafd2a7ca8210f83fe57c44c8252f0e865125dfdbb26b78fb6de49179e92ffb8de6577f9bca6afc2410c6e6c48b370c8533ae6c345a723a3b18d264fa7b912c9cf88bb08250178ca38ce1e004155d6207a313265a0bf4cab70ad30677e0a43ef8febe6020498f5b67685d645b0320b08f99a919651d7b096bc237643d1471d3bde171c5416d2d7f915d3f393039d44503c5db33ea41897c15a0592fec73c5a306b690ad8677267cb2aac69db73bd2e6ccaa1caa975019c0e5435adedbad28a96fa450835b42eebab57379d181383803da39889e1b4187b6145b6f334c4dab8b151b146ae83ce87edd5ce30d0480195131a1ece94f097220236dd7350b6f62f5d5dc22a69ddf664a222b53e8a97df5f63fc963f1e19c7e306d836d8c09a3be8f1b8e7b1097368ce24c9b3a4080f9eaa706689d268c2e8421ec0948520a742281d5408412b2a60d385ff0843e11522eae1151579b747bf09c72a0404a7bbad83d86111da435b1a1b02fdbf570b19b6f3f15220e3a9b91265b5a863070f86fc19200b70314c2108b0ff2fb16289e4692288e4638ae8d203ad47786d83b991c76f63a56d9f588f0af49d6c4e4fc4df6b8d61e66ddf69651920b01d32f7669fab260f92f6e76b10cc8be2f024919baabc2295f477c600140e37835acfaf196bb0852b9b611a520637f95e4e08554ba25e5917ff404d1435843bf5a70bf39df07b13629af99fb67babd85fc1f60c37710dc173bae6250a1f745ef0dd8219cdcd00fe6797547fc6ee1e58711bba74604fd9fde9d4c403d58340bb89327289de1902716f0058c375aeae3b5213a76ff6a8c184b406f5211893188348f00e732175c3796acab171fbdc5d4302f95e1de5d772a7973380c20f245524492fcb5cbc2a17ec9edc9807d7ca58576bf4d72e4635c1ba2f050d8eb07476dc0d15571fd1a28bacaf90e5422ea05614a6f7682e24c80bb12394e62527a446d0271ca5b4117376ad13c7e42484201452dd22b415c7b69257fa1a15215f59ce01f503a41483092feb6174974f64270df675d23824bb49438c0723ee41af0a226bf3bfc919d94f2e5d52f02dc7ec41cc19294a5667e91ce42615e2432da9cde6b5b7bca2452999efcd02eef1df302566cd3a03a4a81d7b79040bde41db615f7f1c3c2326999a90452c92aba56482ba174f19ed60af70b1e55c7cc6d776e11385a4645747ebd555def34c992e642a7cbeba968c54f8a2fb052a7b6c5159a239fffbf6303c027624dd2f43ea94748e7aeda79d78ce1683ee"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "0091607b8f0af35a64f0d0df54aecac6619b9e77a01d1a7d677898f197c3b2e665916b15ce720c9a08e91737fe59815b097da7b225e1eb7b843a1b1fb7715a2eff4d389b75fe33d98464e15ffcf53af71bf97bf5017d0516e75a6caaee8463e17b6185259714dbf1a307cc72d9025e68790cd4809622d2564c714986bd1f0a54ddab6550305bb061b2bb64eeb216620db801d260eabc1facda38c9ea9717a96077829dfb2f1aa27b01586242c72333f1b77a916dcfc675a501788babf71bfd69b68aeb3823d30fb36013522fea441f1bbcec16c1be5c4f8925c283fa56d8404cdabbc1f4defe10211a4da2a414a3cefcb6828971603c9a13f918b57d0485acfd9917c8270a460200b1d9772307bcdc40cb245ba61e6d763c5fe4f40d54316b145756197c10c0054f570840a3027f35514310687b1fce04735792860d97d5be3806e8ed89c267dcdacfa5a64da959b41c00ecd7cda0cd298115f430cad54f186e641c5fa988130361159d19479d348183750db5a7ca7f2d5a41030a140a4b3dd614d7a42f21a800cc99a1033dfbf4a5171c734aef16cbb17d5583648b2f5b5a55f1b38e15025aef9de4425529a245a5d0f3f7dc4b3a743d95c718aa02754fe3b7afeaf7866a96d2c8fa5d9f9f625e1f8dfa1a976413b1494725508054102d8e009693b94e169dca4ee53ba14a2d45687d4b99170e705bd555028a1ff6af8ae7297dbe07cabf631e9e0cf158556f08a024aaffe0dd1d1dbf15bde6b9bd41f59ad1890f19daef456847cf9aaf74e24369d2b35923eabd1c781fcd76ade2ca875128e74314804031da82329eaf9904b7031a2818911bec31a4d7dfcfdcd576d97a30710a9f5b0d71180a07844e8127a225630caa68fc5acc075181622bc8db2b38e8a2d751dd69b6596534c32b1c5f86ebe229025386166c75f376e9bbb2683dc0dd0392613b1c0fe3631dcd61399a42f891b7f917bfc2332b21fdc99e8b0fd27b748b1151ec693911cc583e0cbd54b2c9952538de9c841618bd0a1d1f5b1824202af77228ded334f8c5b2d5d46a5c0ffaedef9b8edb0c347bd0b1467882f58ee5de2e7674a1c0f834fdd0383467b455d3facb9ea6c3c672eb97c66ff3f84441204ed99f7c590cc9f4ce848d46694a9621a6dd640230e5b2f673992d1dca022a02fa5fb33aef3258fb030446feb801a8df11665bc445fad5a0da443137dd7f4dc26ba9dd6a054bd040760ad7bb2b0a735378bb2c2ab86e17cc11b4a14f85a2c14f7570e578cafd84aa2e4d63f1a7b789adc5c5249337f29f45c7f69276c410b2461eaccd9bf2d553c1818f7c27c1277accbd5d3c8fbbdbdb9ed68be34d26d269460ba6a0b79d010a1a52fdf374b1f90bdc80d6aefdf0d651d820d380f032c865cc995937a5d854c5cccfdc978db1e68daed0083f268064e9581177f0d17c1453945b1706592ecf4569aad957ac7379a4cde8848cfde33ada995e62b80aac2501bc204d93f50b90bad08c175cf82399d7c3218c535ad895aaa56cc022df1ae859a196d5d6db2d1d6bbaa95eee4a5bb34a120ee0f63a3d792fb8a4ca2d2582f21adf786b0a1b2711a3c7d5edc984711eb0264daa8668297d358591237379c45a898aa8d56c7f296c37d275cc51b0e694b94a33d3435e7227bfc7bd0d34c191e8a83de37b52532700ceb20517f1745a9f191a1262df888f27880858adac4c269accc21be41d10a50629ce4f1c16b277b19a29727860d761da727f20ad9356f3c96b3392c1734d10a9dc9b8d7b1cffb0155a298d578dfc6ed9a431d5686135862dfb36f8101c21a995f3497dd4704974569bac8f0e43089e3ea0331e559c298fca91b630040d48fd518e0cdc3a2bda411132a20812cab4b4d517d113478b667f2e7eee2d"}, - {"0000000000000000000000000000000000000000000000000000000000000006", "000164f1525176e0a232a723a847972e21d5978b9e47e5fb50fd5ad589de3da64f01b2f509ccdab792c60fd908a50455a2cb5060e18a54e8e89cabf577e5b2175ecaf03ce8762bf133c30aaecc01416a380fd0f00365fe039e6905c5dbee35cfe3421aca0c10fc46eb41fa1b2948dfcec765a41440f0c404a5968a16df750e853349b23880dffd0478a9c36258e341319d91e519d9eac1708be616eecd1653ef776d065fb97f0fc4018b6d738e5165ad06eb735553df8801eb673d41392e0b71e393157c56e34273e25de3eadec4251eb2bd095ff38e82484456d1d0e63774b603924ff1fb1e4a2215b6a4d18aa428afd0a7b3207c5c6a19d87f266d04cad8b70a0402f036ef7332321e51c19d906f7e5705dbc6d20e505707160a6195877e572a06e8b2a77e1e0a8d0baad1e4d550ee0741c65bb265e1b0f85ca14e15844e56623811842049a658fc33a72a869db98204fc209e1324ab07f2dd69c389fbd142e8cbdf209d2226eb7e9e18bb6af422f4a2c02cf6326bf6b88fc806d4307bb80fe96687cda6b77040da87950ede09aa187667f55d1211a8a36d98de45d15f9a3ba23e7d2f08fe330f2f586421c61dd55d2834668efe6edd113019037d4c20d47b612a41c19ccfe30bb7b13cbd955b0ee39d031ca26ba1204ad4b97ef64727bebfbef87818d682ea0c1ebeff3739b66aec38f45243221b88d80613af0b92021f2f8faa80789133614e744c3c7fe40740cea2da49fe5ce07dd5b4cb3a455e654ebb39ea0ff1b69dee18b626ec855157e8abdf91b28a5654db3bbbb4311d53553cf020e43fc7b1305d346f4e0b9119c8c73e52105d589c03d67e7fc7487798621e31823f3e4d303d34d329be09e4c2fe5f3623098e3a469e23f52e534ad978770559a2872d7d8b94cf8809ea2e27222bc30d1a15b908434558b75df3a9ea475dd9d200ad02f08641b7043dc3635dedaeacae4634db37c208f530c1c7490e7503e54550afe1faaea3ba3743021a966d4af70e81dd134912476c30e94f86addec401223772cd11d82ddad567a44113ea14edcdc6789bf601322b68db06fd5588a413460fd689e267651af11321c5c231eb48b4eaaa9b87d234748c8edf00b881b1088ab7ed5199709f8a84917217fe54cc8404296b4669e62e6520a6dc856d36c7ad77e2ccf36faffe4151049aeb7f4eef4b89fb934349a67f313118a83386e10959149e6b572f0f49fb8343a23c8b599dcb11e5db1673aef38a990b3fe806f1674d8c8a759f9e90a1e916b27a716da2a297879c431b7a3b165a36521b03c61779d3be2d8eb437ffe6023362f24ef57bd0cf6f861ee23d28be50cd40d05e2542ef5ef1256bc576f5881c3081fb0689d7287de9a47705ecf7f942fa50492b50ece5df75a1426fad75864244fc89628d2d5c451102c3a7dff7893f7a8063a3fee3dd4253ad635f13fd0662637f4319fae334d0911010765f9d8a9bcdc5ea0b3fafefaeb92d2fc974e1464e19a3f544536f665f27471501c12c4161da1fc49958c37c2535181faefb0c317a1eab4d698cfd5012a4c3f8b805c4f738122b2799d4e2dd5cbccbebc384dc9054129217cdb52ed61d007aa76dd28ea1224362c135c1dd08f2329ecafa1d18cb5d3450dce1862db63e787a4caabcebf8aebd0399a1813ac6246c8fe1c8a66d73924b24e4ddbbdb29dbd38e2e216db9f4d192dda0223b23699c5e5edd250ca448e05e5c854d18b2d830bb138a14f3ffc3c028a314ead4ea4c29b36bd663106644d1eb639ffcde09a4b6e7bbcfe1eb456590bf8b0d281b159f3b7b9136bb970cb09befbbbc73b3b9db6c8b8d9fcffe70e9314adcf0cc7375e7fe39c9511e765f76a1a135597e40deefd497545c2ff02fa67e7bdacabdcb28993076"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "00e2c7fe1061b7f178f350b8d90bdb60abc07d536905dc54ccfa51e706a7fe86e12edeb4e6f6769df1af08707f38fbcdfaff3e05a3b82ecb90f644b3987a3e154058b246230969647ff70ed07c0f2a22525e601601262c739847572799b4515cd64eecd5c3aada731207eb27e614bb9fe3e26bb230ca3833709e12ca897c30b45d8ae9655affac272506cabc483989d1d52dc038304eb4a0ad528fbfe0f3e896fc27d288d1392d2d05b34b4c18f6b1d7d69931249eac488ef8b6bd7aa017be992e40081697401ce269fb6376c4d6a61ea9f215fb8e9b999e458d000994cfb1aef532217297d49e1f80bd9ead8ac8c5bc11e24f8d1698e59a463a4fb917476a0fa4da409b2ae0b63dcf748f39d345d6f3572c998792c4ad81e7d9adb303724931f51419983bed2c3a5be1266b0f338c77a347bc7497a37eecddc743568133ca8f2b8c279f8e969b374d046ad8a27d591f01a4236e89c99d03099e942de353e9956b5b6e08cf1bf9bd493b9d65bfe1f92421a534096a4ee73d508c08423714f5dd6cdd3709323d9731bf09361fcda7da16da3e1a8248265bb23d91e2db962747af2dbf7e8f0a754d4111094da3d18105329a5a6de582ceb8a1610fd6a5385dc856b8793cd31622202d92b5cf16277d0cc903af4a90978aaf0071c9ec90de492f76b324b82e8ae9a9035ccd7159dc52f86afe612d7cdb5a9120022d89750a87268e58af74104a4485958a16711264097a78697a51b09386b5f245cfd823a1e48cf5f8c316c55529b149d067c769a5f51f7a7b7f98951fffe039a8a244e714d10ef53973ba79f3464565ab1b7faa07e26463436416472d30b55204670da21c3e1e80e42220de7015cc841d70728308b3a70c6ed090bcd4370eb55509df168c82f866176ec2fb714e2707992f660fe2922bc85a96530132e1c6892f54c5265beda91b0678570fbf2d3345b74c885f825cdf5e84c316ec580d19df86f5a44897721261a198b6614ac8b9dfe2b40da60438816392979e885164d6bdc4e8e79af35bfe2986bf457ca28661af2d97bc2d7315e65dd054c6f706d4e7b43c54944706f9d4eea3c3fed24f959971b12391f53f134930e72993952e867f13022e8ff7827b0b8466eba72955415af9e3aca93bc1c14fe5f583bd411a6a73261a33f4fa04b9646a78433f05ee38fd250f2bc09998a902cdb673a1aee464d0a20093d342bc1fdf31f413e15bf1a77ee3313a71da3d318e58bccb1c62c749b9277095607ba313c6e78a539619bd47ae7149e79c76e3f4c7d621d77d5d5168ea4c049f596217a870eec1a67f9b81bb32db3f7870db2fcdba023922f5d207d7108f178579630936cd4b5cf4f5f7a5cd1c55bf5bfa9895ed5096f23f76f6d9b49d8e08cf03269b7d19885ed675031d64bc54a8e9d9dbf9f2e42806d873971765cdafdf0523f412d66c512184d11ccc1b4d641f4620e99793c0922c7ec04ff145703e2da11f0cbe678f2cf41fa72387dd96f83b571e01fa0a171f228d260e96de1993e2f38e79bad98b55527d46810ffe28c2972052218b46b3e69b64c1d668ae14c7f74f53f5057a31fe2fb26f5905737c2986783d951da2202bc5fdee0c8e506a101792b4636e4a225dd1db296893ec97a25b95a934bb7694f86d438a956e5585c10895df6e5a87c53d076b781d37518d6e2d48d9c714127fde7b51762f39c4b072e6c6ab65c68da517e7aa1042af1e1512e1295c2c41f2e12666a54f7e78d9981531ae3c008b837176a981e5082b8e892caa8c19b1094df28e2f29acb57557a148d58e1a112583d1662214fae495718c7cd68be61983b24c516ac84e5675590e3aa6e4a00ae051db0f0451b4df72068b1a57ee981d218f23560c4f134d9897454442e1b22838174c18"}, - {"0000000000000000000000000000000000000000000000000000000000000011", "006616e6a1d5bcacf7266376c0756409a413db8a26254176dfae99939bee7dc8012471aefacc44fd7ddc0d66fef36b31faebc9b901289d23f902ce31d733cb338a86c4a911015b8bf32a11206ac002b5e6b7f7760b18043e9ca6743988d981451970232583db1079ad37e30b9fff93e36cb1b9375cacbfa9225e8d336d160eac9e6f1cfbc837ee6ec2ed3d341e23a20d3e8d162e6acde0af9c7d337f0773a72851099d2224f7dc9502ada91be5c464f239e220a69575ebf167d4bfc1941d14f2645b6dceeb904df452124714993c31b0b1270b579ad91d067e3194ae5594d25836497017fbb1df5e8d543592694855bc7af80c6a7db347b9f71ed25a216dc781dab17603931fe3a582712e9534ddee3bc82be167efa0cebcd39e64432edbc7f031a2401ca12530d0c616aa1a054b90b473aded5199a17b17cd3b983f9e6f950ee1314b0b166a52306a240afcf9bf662500ed7411c445f285e323a76eeac338eac2b85fa7dc119b540c2cc4998bbee171a0fc2507e8d4dc289d25061a5123b8787adbc51043a837cef9190784eac3e50a9dfcbc47cdde8156a4b3960a35cbd64928f4413606613f5821143f4b4622824a29a6f9051f74b9a2510e0ef0cf5d272fb7eba5c17f7fd44addc31ad00797557ec5cae59c9513488d368c4ff3ffadca0b7c1c675fb9a7783bf371bfc8bdab9c6c664e76e9d098da6e030d0103610c514664c0519be21a41e22c5833c42c0f3f807ae2c845667d41541db83988ceae7fdcc80806779214f37750b3eedcf26f7a3113c0c076148fed1814393337dc93d122e07298722e21bd209a5c3e58174979b60296d5033b5e4358f8fe625be6717f78773049e3c91d8c1f64fb9515c26750e662c88c3b21f423624ca0fd5f510dc99e22432be6abb8cfd9358fab296a168f2131b631d5f66366a768f802bb9c78ce9805e6d03d53a5dea9aac7b549c4c843f1f27f15f8aa41c2fbe4116d378dde7c44ba0afcf86566933f2b1c153975f6e5df1db9829b625f79a6a9d4b9bf16b17c3b228e4f8f1d8b9bd299c3eedbb925623cc2d3ecb70ad7f06a538358e4a57d210a824fabcda5cbf70e593bbcda6432991861ab97a817cc6280da3d805c7d4f106430f11c4f312333a2a4b260508ea1e1a414172b26c59deb25cb8f78b4728411eac5675eb427bd8065088f350f8922ee8b58525357f0edb768e17a5e26f8116a7610ee925cd7e9c8e401e5f6d3c1223cf4f022175b30bc1c4655efb57a025ffaf1c892ba6d97288b32ab91f98f4d64027fdc08954ff13fcebde516467c2f5fff9ccaa87975ecae53e2384348ed21bf72aca731cbac1134a2bff9193fc50cb8cbb407aa707e25f4372227bb18a5cff5567e83b92ed0af4dcd76d692af42040c848fe422f78b93154f4e68333a9a299dc7a80668ec7f3a15030bfe5ae2355e353ccb8825df549624de16cb3215345b1f58bab9656fc4cb1b8cfb04152459c6ef196aaa5fb10ef2fbd071f6fe9d6f9559c93385e65467a3e11bb438963922718c7770759ca73910b366be8ec5531b6be03220d0756d1ae4b15c84d614362f464885d865c65b42c7ef4b1ded76f71920962bb4bb5623b99f91cf8442ca0072d64d1c1899301d38ca0e4b68564b779832540e76b87c39091a9f8c23104832dc542a19398f3b74fa1de81e16234934f9a2775407062222eae759c0f8796bc8d536e91dbcff9a233e9bef769fb7f781b042ed99ce8095a1d7983af1300d169e55a47fd72f6c6572c27365fa008959ce771cd58539338a990fcac4e53dabec96b67e37b461892292e4a7184d851135ad96b525f59f31e691964a5e301eab1ededc3395a3ad641647496997664e5ba3333c7ffe187cae05d582254567d3f2bd7a8b20b50d98"}, - {"000000000000000000000000000000000000000000000000000000000000000a", "005b361cf8b5f463b974a2a4a5b1ce45979cade54809009e3bebd96790cff583a0be6d1a29dc0896141b01bebfaaafc3daf19ab586c9bb6da859e06f4f32490bac092fd02d83f9c8a6c28d0ee83dae63681cc1640af99c77f80e661478fce231bee06f563277f68a4f4dae033bd71b591168749931f17d169ec7cb5b578f0db6cbb9251e7d932e4e66b86171e8c265467e407a39122d0fe5928cc2df0d13b138f346ef46e27b45e101737d2abaa8aca9ceadb8997f748e2aa21276547b2c4ecbd26731d5c1c659c56387d282995afbdd769e10082d1bba161520b224827748e19f759350ddb3a33c396ef8b10fb8f3eb4763cacec11155a25d1744090179cd5c5f8f71572a8fc53680334a71ef9cd008af01abf8c82717b7d8ce49d7bc7b44b3aa4cb61bd69f1d507d640de0ce855e8dc5ad77b3715a3d0d3d867291904f32cca77a4be45e49f6ca582ec3757e1f8da302bb41081a23c8a7b1d1e0bf46274548edf7eb6731119b492d5cd2f375625be160e3bb5c2a2d65b8afe813956657e5c5044579a804c04b2ebecf53287d23ed255e376627defc5f026d744fc5c4b629b75f375c3b095cf2afbacbb785fb5ed4e619df5f2192a9d7b9fe1bfbddd89d5b750b4a8312493e406249474535ac1d0a9ff174b3430a0f93112110df9b12765ab4ba20740f15670e22ecaa09f43983935c691ea62e6c5929170b088215c8b9dfd1f018636211c6b60d64441bff7a0c0847e4f950b5298867343deb37d1995711b3ec190d4e5dbe5eece11fcb3e71ae86df7d89ad6d6f4f0225dd235ee7f37441f8e1338cf6f3f0b50eeb5028c712b92f605b21893955c0b256f73180552e4d8cdc4518384fe2fd152dd5af4ea32c90b4e51501c61993eb17b5dd5855b53523f4cf61fc7d5dbab8f48ecb1f2877fbafe0e5b62917f4c97be484f3768efea978925001ddc061d704b874fdb7b149cbd053a47e92a48fa70a0dc8912190adcecadb47d09345887edf8c5d16ac3bcbb4d9ab91227ea2d306afe6fa0052209b7644e963d0b4e9a71a12b76053269bb3f2cb023b073c0c730cbb54c8d2ed178f7303a5b69e76b50dec3e3cd2f54c6eb5a3345c7c118d5617f0666c18965821d7ca2811ad73d99090f96bde2002f7f22c574b6975de93822793a66d7d637deb7866a29a542a7504ba1d6f6d2c0549240d1a47db58736643461132d55e90283a1d552b46d9886f959be8f58135277eedfcd99eddb2db450f075c1ad905b99c2fa5250acf3f11265dc19be90848cbdb3a5b9d034df64f650aad64ad2968856b66890febe6b6b5e4dea940de42609a3e823d12ccc8b71b1eb9de5a7a11540dd215c5c57060edbb6ecb1e8b211d8bf311c551d091dd105b90f9ec1f878dcfffc44336afba29e0db0270ec3d172fa85d10e677b71f426e058a23e2b04388b41e27619c154e00d161665a81eb324eedeae4d5a51f9d72e4427cd7d3d6bcf21dc6200fe7fd11c4862bca61fac273bdcb62bde0e6beb937186eb77c4ee3fedf3657f3dbd168059e7b8d596a9905f824ac9064116d584a60c8921b06c5072d115dae0e49d43118cb1e9d3833815b4d3b20009bb7aa19b316204465cc595c498813f2c5c23bb75ebda33c942937d9b2a35fd4f1e792bae5ee90c1922997d914779908f4f117f961f23fd4861541417feaff66c93fd90c42643315d718071fc943f66394ed30299997d1ac3a0bad46cccb12be33876bb0eaf7d8dc7d51a93c3111325a32e617a744e9aac2b620674667cd9df2d47def17a8ec2599581d7afc8d654b234cb7eecb9577c2b53eb3fa53785aad9d4545173904c4e6be6f79fb2392213decebd2228edb891c16f3d672a3dec9f59865c829a7b601f6a0e15f1c0cd2e32f453cd127b7695851"}, - {"0000000000000000000000000000000000000000000000000000000000000005", "0022f146394db5f384d1e1d214aa93d91c442c585804d2b28c3406ea4cf260d1d191b5473d09dc55df6e02da1d5d58cd14cde4cc0062d5fb0af4f8ef2f4a4b0ddddd98d08cf3d700f8f542284c76e55ea5307ff60b876afd4dcfdbece7040293c549813aed0e795c341b450751a992a95d1b0c624913f633d0b80949efcc14ea7a3f7791bddf6d929168bf238d82758a5a559953b89758369570c11c9ef71c594262edcb6cbf2956019a5f8f9384c615af40d021418422d59f3b9fbcac1d03aadcabd701cace7db76d32cc1e2a414bf807ec02bcaace3fb24a5dadf0a25cf62a6ffd97bfd496b615d201586c8948a18a4585deb0f2af020ade9dce7e03d1f86c0e03c903e4493510e764fe9a0e539ce26523a516995d2d97edc9fa5619ea7569330cb7de3d6a38e5daae5bdffa556701c695f8e7d9e68a1119c5814c66b7232c5eed1bb96c984a84f2948751391f0a11006064d3221a49eb6d72e2fdd9ef0232461e1db0510962358114c302d04657328b29a4b0ad21abffc4dd0344876bc0aa3011a9f403c91f22766195481d5cdb4f57235ff5297bbdc921061facd011a6212f7b2aa302c6cd3074156bd1e3789047ee10f4561cd578a5c91178d2af6a19666bb634d3dfbb21d80995eedb65b6239f66f662d10fe3aac4c2b3824532b0adb45d7459682f63a2d8af408dc5e5e820aa62dfa673b8f85f7018e64c3eb8caddebe60015df7b443cfee6c25b8eea55b784a8fa99333d6cc8d911626d539b24f03e333e246dec56d89c0b178345456931682289f710cff8a934b50a90e66b77798afa47697fe72419ec975799471e97e2745a170f3ae52e865c31e6fe372f20ba0e481eae33fc3337a2b1d74974d446f62ae58c951606a631a061e05e23995d22eea4d0e33d5f95fdbeb5d02737cba3aaa5a39173a0d0c594c17294c604827bab3b01c0a88d7896b37ad7f7009af95bdb51a168d399961d7306b3704be0d5d2848818017254aa1101919ede040f7cc71614721dc650654938753e9ef7401a0e9323857cc05ccfe3a71b7c834d86c3f5db852c1d618b07f8525dd2abe3edcf0914bb80d349c5e29a9a1e110d8b06f2f5a34c673da3267b3beb764ac30c5e73421e631c3b039b9265674f04ac49611461c27a9fa1631f0be1a01c56a1a0ed10d792b9daf387f32f7fadf307663bb94b18eca198ad70d87d72f341679a37f96a20e043dd991e3e45135323a1bee94c0536b91e0cc509cc54b318d85863784943c42aaed41618bd78b67d1d65d25394cc79e9bc9744ae1a74f4a64cb3f54acc0fc3a452f293ad0ee1445698fe7042bdd1d4d695ce3ba6663e3f16f5611374847260d9be5d8d87ff8d56123143524fcc0588c6f6733ee2fabde35c827ddd0d1b436ac84d8d604e90a4e3bd7260c5a113f2bbf9200507a7e13dc8c4bef4add2394913ce2dc8265b28a10ed09fa4e0897235a9125931a1eef58b6271ffe5ff1d897b921caa16b96eb8e2d6986e1fef53b77de21a523ad4f29521420d42d7e5404c40bc46fbe91947dc08f5cbdf2ab5e563bf2344ac62b56bede2695dde0e208d6697ccc92e1ffae3386468d33aeed0421c16df32f41d886fe1b49b871a45bd44b662a99635cd4fe23c40060efaa7773db125a3e36529d4016dd379bfec06f360942e8b829b7b2180e9209d61e57f0c3f3dcb31b7de105a54bbd7366897bf024f9c2e3c239db74b0d27df4d65de6863c12754edd27bf111e6f51eb6e91542c0d26825f1bb9d89f231089e7d3ed742994f5512ea39cddcd84a77254d3442b8aa587d40d2fae7c8722cdbf3fef757e9d50bf924d766601ee20c7c83f01e9471f03c62fef328dbb7587d44d956bb73b8a4ed59463659d5d8207d37f3f5f50fe0b43ad2bfbc7143"}, - {"0000000000000000000000000000000000000000000000000000000000000011", "0104e0d3b516b6c0c988f3657d7f205755317e4f0a0203dcf96eaa62ef541c3694fa6dc496f0999e6f2f0acd2bd2e00a0d31c184746d225f299977cfcd8f0f35826ee67076ec05e07a23eaa16865d561379158f304fadbfb0f214deb55f782bb52aa1860c6363db0b12dfc35a134d1352d18fc34901fdeeab9987f59586c07a93340a31cb1337cfae3d8966e3c8d8e739908d818b3a5f920ce91b5fe63d8100bdbecda420adfad950238d55d0658e29fd9fc166ff8d4ffc5a629fe448a0e8b2ce9a2c617d471d242a38bda0d06ff3c5da3bf0dd3c36982ed81ebb530942113dca6c6bc89fc7bc7145a14a239ed7b959571195bdee5598a65d69fe56d1014727100d813e1cfb1a20b011d7c7cfef8486809373a36200b5563c9c9cf84f6b8431236bce4d8492017b3a414e4d191116f7c12c859a9249db55e710dd9470e336e1ed96559e9bf15fe6c7ccd49c60611881301aeffc85d9b2d0556b921015c57975992e5b9f70d337685c54b977fc5a8e6d38de746085a062f3277c610574e19db6f4d1f9ed7d14598efe38ab4f3ba9e7e3ffd64cc1a5c4c93151a075cc4693df24668be8eaa0200667bbc6d98f3e8aef1c05cda133e4f36daec7558e8ef51cf5e4d26f7acb79c9059d4724f7719b8f50771473fda26ee514206982479d2a6525bd714daa5291ca4671adf5fe5598ca75759ed590684b7d6ab420349ede652b03e59fdda80538d41f09ea9a17ed18c05bc1fa85c640b5b8c44306a34e391952a834abe1e0b0c4f485c130e8edb86f10b4c61c32d72fe1f1cd931185c8f0adf00f59641345bea59b6b3d6723febaa1f17e1b26dc963fb6a7d964ef9b2c9f22d5074364d3505ddf7a090d9e731722386d421a8e90b42efd36c20c08b93087173edc691c3273e56ef39a1cebdc4913b6eb7234511c2e1dd3da535ee4cc6be8fad5e9385022790a55413a9edc3be95954e788126c4ccdb34740d542d512d4c318536fe03eda3db68dd18f6a91f3e0d59e122ac43dd6f18a171bf3a5a7350f10fd89ed037b04c31b0a69a63b62c95a71668f379c2c8b947220302d9d1fec171f1fca133bb66b3b6f14f3cd8151016bd216719c640a3230fb2c804a6193797d87f6db61f18bc02809aea11549a7502484110760ef19ed864287aece827d8f0c79d8aa8394a4dfc6e2cac7a10af03bd0fbd08c6a2f313069086aa0d8741252133a0671dc5d57c68df10292b0612c7be34d10a02ead97dc1185ed2752d616a092eb8834c64f7348db15cb58edb3b8c536890163304fdb404284e3a4839610ed4bc9e03eb42719dd167b5e9751446382883a5395d1dc6c8103744ee2ace050880dfd367549e8f3e16acdcc6ed197132e387474452dfb392765ccd58db39593d4f6e1e89ee2caf2999575f033209a4cc3654fea931df370280eccb8b50e436f2713029e96b848d3931508406479c4da0176dc6859ee4651a8bef3bade13250bea40e858adc2c0ec8f730b866784147e32aaf2c59d55a13b0f663ec9b71f39a06921879a39865cccc5b31440598ebeb39d93abfd7b1856ec0c71689a2418e0bd80ad3679e799023ff28a3e0d364ae835d00864d5b3e109b4762994bbab1af6a66a1a1c8c4aebf737fc2411bc10a56e2c924b55fa897887af3556a7c60f9829504d618c5081621bdd903c2cd96cee78149661b97420ef56169a8ea35958cf58642e5ea098e16dc18f89c0ceea46536cb825fce6331d3245f40889c67ea31c540de6d5ce72fd41d9017f52fcbf1744273a7d590e3154396145850326da12e71a66763e816a6093e8d07184e9b13ea6a34f19ca5f279d8d4c77235d4f8c12924553a01da2d9e49a1e4f2fb4c4ffe7a1fb237db6f2f1fdee538d9bc6d1a0624aa8c5868e215357bf344"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "00797c85a6453f92e1fa402a20779258d2d65efe880db894c25496abfdadcb8825b67266e31a941a98930159deca91831ced1446c06a9e3fa1655a55930afd2b0aff18b993c7134339c600bcfd90722de3778c5c0ab28b2284691c235c83a18f1c4f16511f76cac90312ec567ba4ccf587b39db296313649555ee7f2ad4a1fa6aea6eda2d4fdb567435c3fd28a214abb9c17302a4a0e49190e6d0fcf0ec342d3c1b65d059a6b7c9f04dbfee879e8202f6505a34f48d6ae4ec9437975c92808efec6c560e04c275930b247a7c0d0c57f001c309687ba175897afa88f261bef32aa3b8c738479ede1cbefdd356d84bddaf867235e030969d164409783315a1d23ebcd691eb76cf926bebb0cdf15d8598c973250f5adb17b1adadb16c5266841bbabaacc07710a1285f7b4f100df5fcbf3267f54d5e4de261dd76cad245bd2e689a662edf6c5437311dea16db6fd49f977404b45b630f4e5131b298e4bdd3b03c8ebc31b6c4a61b14aa895f8a5260ab938586afc199059726af149d0eb3fd022899e8d56de0e58ae977b1d212e2feddba1cfaf49e40e15663bb1c931f6ac376be69fcdf68a918f1165952668d57b3c5b3fad2b13b051b58be52d351252782fd2edd358d60561f1d45052b14a55af9292617d7969f0d47db55f51651fce4fefe9515d9d9da2785117c5a64c547bd5f831d6d72d258fe9dd7f4d7052cfa3ce3d21df5d860316dd64947a85e68fbd8e81e6df265b7fa5bf7e1668280e7d76e1e27eb7ef45b16edb698f2cf9717b31b029ffe7c17ba4bbe72749d2fd94ca394f7d213c4ec53956257e8b56a9c572b4f0eb57a5bd0f154e9bc0a25da883b0871c3cb56272c1cb589503acc4014c14964e36bccde5a05c4ba34331639dbe3ecaa4285be8fa4ea97ad1c61d4f974c13d192e42cc0acf9ced709be4e960e86515b00eff110c009d04fb9264ea1badd555b8e74cd1818dcd12d1ca4f2432d12ff33537d718b6f68ecc4da9c600da6bee02298f63dea160d3f7ff853336ae5699fff1dd6fdd02b9a8f7d3446981d6f3d7b698ce41b64e17740b5f040fb10827179c3bea66972fac63371221e9799f9731321d8ec773b451c356dc175decfd1b594b5d8cbc06ed9d9996c676317653f1bbcd173c24ec29f93d4843063290e41265a754fe845592a967eec724da9af7098239dbdc51c6d0992363d71f4780cb07d179e6521e6137836df33fd7ae8953dba1f6f14123a5caf0023b86fc742cd78261d9b6a51370f44d16979adec6c0766d37994eeb4bed9bebd7d111706b620bb6596d7d0fe78115741adc9be47dc105776d4d498aaed8157f1003bb36b1988cecdc69617284d1f4350dfbecb6be1f792fc67f0bb2bec9b32593e4d4e4057b2e36968e1f8e5441fedcf60d655c8b381d7cecaf275b7cf90b00d1ef171003747526967436aaa641ae5fcf3c3a7d1a2cfd5e79b3ce4dcd77752abcee3c3a94a63e505702a035ca34c59c5faaa009854ce6cf02b9041f060b1539e232086c0e13f1f81ae74bee8e53453cded97017cca27c3195d44afefd64a93cd8e7cfc022de57fc1c27e4c6c6d97e94d77e225b222b8d3d40117c057c3b6e1d5991d744614e6ae4ce0a28ee4981bb0d65f35afc1d2c70eda6bdde4178c79f74e3bb1f5c1d1ed201344aba12823570447a67bd27d05bf2598c99094f214ccd2f721cb997de63e291581e3806dfc0f72eeb0dee2b15918b5e5bd9c5b1a934fb9e738a2d3f934822549b17ed9b7534e2fad4465d6d0f317efc3892d50fba1b7953e67f9fffbe81a833e8581e4e83b9c0bc2d5934a563a41b93e103a6503ee28ae218eb92df81340b5eb951ceccb2dfc5e447b82317aa55a23c10433f0fa678fa9224594a797921295004cedfde9deedb"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "00636f071e6200d73e35b1527726f97898b10d6257189354420dcdb48674e0655842e6628d7f419bfeb9026c9d2a6a6ed9f5fdc656deaa586e831a781d432f4e9252e5a7541bdeb6ebb52b6fdf226562847f06d90fca0bda40c65c8c7100d1b9bb25ae588cd0dfe365467ffd1b291bc489111b47b5d0f9fb2a2e5e92312f1fba25f04b500f4b697373722e2011c4e700d59cfe247f32f3dd8c00a54d83c2e45b5ca97b36ac9a658c052a932cfa0972245a6e13b815ed5ad78c25bf9edb2d82fa89eda06aabba6432ee4b54155a79e05f8b51104b0eddfe612a193aa36423b7cf122d9d6690250441740d2cf619e2b6f266456c1332d64a11bc793f23065c449b27929b3a993b21521f0ecf42859fd7a2f80caa2f01180d8becf62bc1827b43225082b753891108acd20ffe1b8abd4aa101f5ac2861495da2b157371f9035eacacb1548fb2e22cef8bd0044edd3bc46e000b82e0baf5cf6e98f9ee1d7c83d94bca785a6caa30109dfe8874166198a0f578289da9a7e98221dd0bf0f618d6c4a19a609ed2214551b34bb21d0138f78894b022ec29a5db23b3354e5fac2eacf5181857e288502e10948f203f8459f2d643e8b6b2a013d1b71defa1b24f5dac7dc6adef3ef6837856adb0627361a7944250c57b64cf063dfadab455739bd279a260e92c7033a024d7a148f2a1ecef00551e6f3dee1cdbacee8e20ab7214fdcce98f3c1fb32365dfff2189b8b2cf1415618ffb11db1059dcc2085d6cdd0a5838e03ffb0cd2b493c11ae6080db8c57e3bfc662594f01f4183ff94284df84199894bb6587142934f34526d3b3b785940fb83ebe23451095206fc1161d613ec060e6e67b9f5362cf0e7d9a247db24a9a8e7cfb8933004df99ccd16ca6697e46ae6ff910b12e786c165dee4349b4d1f5804e32d1370e17bf72a06084dd360d29919ba7b3500a0533a9d40cf63ba2679c5b2f4c67271a75a407121d454dde210f636ce7304583fb76f9642917c0cb00b9644fc7587e5a6e748e9beb070079aac7b7d056449b5b7a48dd8789b0f65f83c4b56a90e294c5519e301b76e8aa3c52d32e85d32542cf9684d0aa68e957337d919c32b927b7ff6b7f4beb8445c79dff0729afd0b20b34e3a563bd56e1fd28af07afb3d7c7aad3bb815ddcb0bb1ac1bf9fee1b78bd96669875baa9ecc0909734d3bee4726a50b0a58417ed0bbd627dcff4908247f793e88c95079f69d231383d943ad66c693ddc728f21f3ed0b7aa3be779934ee03bbdc553903a34e73a324fa5b19040e583a076e655481a05c6d27b87a21c45d7262fc90579a24fd274deeb7466cf95ba21941f3766af6e5c5ae70d0e355f31aca2ff561b7e3d013ce9eec4c256ebbb5d3f157147c1f8a1ffdcfc7d304112a52540d18f155511456d57d897db98109e3aa801623268cf80a34a1c11e31f7c3489e11093c93dd813243aefc0cf39791bc0338a9a589581e132b03d7516fd1ba7fa47fdd55995a40563c541db3da1de4868206d1c02309b299d95deb40f257148aeb9adfcf0070cc5b5497e94a55ee3ef81c28ce75245a2d879ec8527c742e7fa9774179f7076637ad34faeeeeb9d13101e0c4773a29044e139e77340bbb0d0a9c53b131b6159409797c81a509b3d9b074357f74ec5e746f0075d0369ac9d2b1ab0aaf3a0fa7eb26e579729a77f197c159cc46555a51a894baa35f342bccda1ca669d4c3d1114b18f7c87949902c491fd923ede7cce3a2d8715183d8c5e82d3bb80d82bf383386e08690f418985fb08e3b0b6fb997eb19c4e730b4742e08926cf72e2552088ea380bd19e4d0aa584d4a3c5825590fe1ef46b14fdbc6dad5faf3506f8b2af40a99955835791a1d524620f816aa6b1335ed31aadf969b33aeaffffa26d"}, - {"0000000000000000000000000000000000000000000000000000000000000016", "00fcb2dba9d57edabec26863ed7624f636039b8e9902bf11ba6d44a4a179466660cec007067c5f9e7bcc08323c67f0874d23464701efe3b093c8d3595b3f4d10cf7a0090ad92ef86a7628562e6087cc45b76c28911767a04724f49449064d2f9297814d5939f3a14bf1c54d4a514a6ce33fdc724b0c353da5a858b5465f711fa99900e5c55bb4fa552e097449654e8ddec039b19cf8113630deea917e2929dcfd235de683514ea57016249f0a385321a715cf3a8675093bd8f0bf4361824e7cd20200f69a728274378c97f947ce5b46d5095054e9a1c9e9d94c2f188954c26b046f15ff1f31f6e2510a94c4476ac81f827b25a967dae511786bcca680fa7b39a06982ec38670d2ce597b405cf34c7156443fa3ebb2226412c3ae5fa8deb271c15360441fce961cc5a23bfc0d0b30bda9395addd310a3b4093ec86d2c5b4fed033ac893ed162438e025183646df54b96801f5aa9dd21baf538144b0bfbe2c638e31645274753d44925dd62a66c778b5740e95e7703245f23f71b90a65e5558d45cdf69731a1bea49d96b5c745b513ba1249f3bda1f56485c6e1f13648730ea04f222f166602a1c1ae599b91c36c2052564541eefd6888cf9be82f3567d7e554c8db2b3d0adbfe7d4e1f6f1bdcd0aa083db1f61745ad3bb1406199ec4e8fdce7475f71ee283d7c4b7718f8e32837c8c12dfd9a16d886bbe702029deceae10a806f685a0349d4bb7cc156e84c83f223fdb54313ddf93bd906d47fbafb1ae6f28b3a0c213480eddf14cf6b7d626cb392ec655c3a32b559d29a4248bd0cb6d58b71332c64609b6e42ed202c6a805d0508dab7bc4f4ebf631e0658b1e8cb3e4b7419966b20888d446fa4b043a99325c63ae17387576f3e86ab1569b247211e56311cea43451ef30ac4f88fca1c312617295e928a34aa536b4367915507bd5b34f615c30140dfdb58962f98e634e07618d12b50c115ad0cb5306a0c9b6893295f946073fcd3bf298914dfaeb5df18d67d2b08d81ded1939d3867230bcd5a058125d4922af1b40b80adb1742c342446ef4785157dceebd05021f90e970616f4df320430c37261f6f8ea6fd9f2d2cb67717d856517f97fd231e21ab48ecd427d6e3ed13c2f40802cb57ad419c68b8a36162029d6f3be5c41dc04ed15ad5531fe5de2763856cd7035f739c5aa30c0f01c3f1063474fb9bd0ef63c5b24661be36e4a635fb1a1c5cd1d18b8f7a2a1ddff2184f4a09bfde172a9f4acc99cb9402b15ae2af38c4d7ee958a38e97036031d77fd9e03b19eb533ecca4b62b16ebfee2b3d15c2e49ee14eb8ff252dd5bf09d78696d6933f64ba5a6a25c72f574b8df010164b7dc277959cee5f5c8f1f3a8d06c7f62d05c3d316b704c66f1e04ac3af8ff26bfeee2d3f1cd3be655955ae673d16d5e64d35fd8018ba77c589647e4e29ef2a094979889966f175c4411dd7ef6624e3d8275efe197ea3f9a1887c09334820b9ba7ed39847ef6e55e12a86f1ade426fa9f99f7b1c92d497ca1768a50a76c20a56e02158bd9111194e079dda667de5525992b9634e776d8620eb597ea2bf16217f695e7a6d65f1e5229ed271200516418d0ffe0fbd7d070a0c7481a2e151bb2e688812ee7fd92df419ef5d403ca35e9b4978c1b340d106b1ce883cdae903d2c577fca6a475ca095220ec7beda141f8d599d519173532fe5c5f372073a46bbfb147fd4cfe8e876009f60ee356d12322bbff85acf6e4fd81c84e397a625bcaac189edc70e5004297470b6544e285b936c4670f37267c50089f778587f595d645b62eedb95934f726949b3a0c99e3978f789494a264aef62d37bb29a412682ab627997a12e594839c2cff18d600d497ee04181ebaa5a392c18dee33b44515fe9a254531ecc0f7"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "0012fc78ee83cc1ca1b242538dd180b6be6f1876051d6cb75e27222579640482688038c0d341f51c18ab06f33b41550cc7db9afa3206a66d97d4bb4e580a0b24bb7e20a09a651bfa2e787f7e655bce22f31c322b11af4dbf85f533d1ad8ab71fb165144ae82a1f89f754b713e6146926376ad6c5aba4f2263a39e572e02c21474fdf719892e3a526b2383edcfd06fb405cea3f3342ed31dee49f8dc0f6837fdad7b9520d6a54c04a0126459008e7aaf35be5b0c08840b5be50eade17d129d1cdec27a87011c603e365b75a2b4da1a8b8bc07022a9b510a8ea27f756fb1f2fc66f906589c5a02301b9ea2f103cee42b1e5c422c7bc7c8f09bf7db3a8d0d2bdaf9b28c53826ec3013bf2aa5a416bd51641ff4576bb9a47584bffe60084ae84739a370944f9325112a742d7e134c437ab2f12be8ef9fbad04811068531b4fb46adaad71f99b2125e6c8fe7a35ac0d1e1bb30277efc0d2676c4d9dbab83a2b4eb19f3afa5c5a5e2d75c7dbd98b86e88ea4384320ce72bed3c937119f09138b9473889ca3f83a30c42f9327035ffbfb2b000c7bc9ce5ff3fe71d7cd01a4297dfcf48eb4d6c86d068b2ef16ca27d01633017b0d7e0a986a62cb659d8388461f9df9c44494add23dabc360779480b9513b41101a55c98d186f8d0889493f06be69ebb56b94d7d2977150347939ea6b0b2c4a6bb67c07e139f9bb214053d5ee0139b5baef3a3989b6c55d823168799c2881e54aa61b90a445596a2156763fabb21b46733bda01134a0f4808f45f70bea223faab1f73cfdb66be90328ea4cb0a653eea54778b40e57cc1f01b3f21173ca090c6724dd896a8486b1e0c7a53b3604754c27f9d917a688df3ad6bab78bc9c451a57df1ba7f289a4a0228f12b9ed06287538c6712b85ac5fe2a0741f580f74ae47d9bfde80331821f48e8cde3fa234144ded589011625711d7539a1db046261a0b1ab56ca30375bfd11f7446789effebbc385d395456106ba18a4ff56cb091c6e53de0a83decb98c1ed5c395e6334605a26c74632d685a1519f60a223bd1061f05dd75eaeff480a04f100794f1948ebccf8635d3fedbb816f7139b075123f41362f53ed80a848036fb3b49825eefa1f68741a51f9784ae2d1edc0d443266c77b68343807cab5e27500a6f74d289a6fb5a4507932849a2f9c71f7928021831999cc976f7bc40904db3dd8d1b8b567e4c74265854ed73d9b8917b6e948ba8a72885a77e982b8111492697bdabcfcbd4e3637470fade499711ad84541494dd7790680247b63d02c0ccd10d7d0a7a098d5806bccd14b24e6b079455e9549ee503573cecbf875e268d699d7dddca55a51f3404d032339f2938fef2480b5c430d67912f7b61506119c4a3a8785874db1ab20b88dbebc8963590f44cb55b0738f68aa0507664fd039ebb436ced37339ef97068e64e2e916471f2558c2894a613a0363f39f5d23375c9d64b3d4ac4abe7a008e3c967c4e0edc57704f23846d97a2da55bd4b1431a9362f43d079019877e5317dcf3a9c9b38f19b96b08cb61a721c344b0d1b99769f0405faa65c05657e6099a24c04f92b2559777e0afb712e56c9abb5131f80cd096ec6d857e5f96f7937604738576df757bd0153a852e81a220c45d312415ccf6f7332b7f649f54340db24404dbe0978376d943806fa19901f3ed757c0524ab297f034d8c92a423430223212b7e97167e0d8e1cc725a2729ae7878641e2eb3a654c951dab56f504265efda3f4506ea0a479a2f0507194c3080e9d6de2201df7c791ce0653215f6509ac73f6f54a4993cd3953b17f03092f0f31fd5d565863d56c75fce11f980b2d507d0f105145298421b35038f3a7f26205dcf8e84e369650e2ae0bdbb63d9513f95b479ad443dbefbf"}, - {"0000000000000000000000000000000000000000000000000000000000000006", "0011b44e35cb3f97b9c14011292b7800e1fbdbb3cd27d3f1fecd2830efec69b6ce56c5a01dd71897b1cb0374a5370d8b9c37daed26ed35530de646759dfadb14f39f01fb91cf2529f168142df32d1692a7f5fdf506dba5b332d449d7fdf66119870aaa91a714f6b9b312801cc687924eed7b610452c7ed3899b346399dd10b4586554a5ec81f6cf614967b6ed545549c1c0f0c2113e2707592e99fe68cf45e79608356bbd797fc1503d5c282a205fb5580e671b2b65d110e29f9b6998309de75ca9b62afa1906811c6b37dc62a09dad9505125041b8b1de2d8719c3ecbc5dbdef29750acbd383a2d03ac4c06533d6da0391bb2b17fb22308fe1e0b091484df548d1c0a65ae3b370668eaa47262fd1f83742d628fdea88f8ba2c69bb54375c77d6e494aff9af31ab3db3d6b4a10bdeb723478bef6ac3d7233acfd632f14ca13e272690f9951b42dbdf4004d6cc3710431028083c68335ef33c53341a61a1d2df494494a4c7b53d88c1d43772a79d5464797fe44ed7ae7349b2e700cd4f45aebe5966f67d2f2941f5c6896125977871312496a5dfd15accf443e8855be6ae54bc6e7bea10c150ae0aafddcd2e6fa8744f3724ce8d9da3411feb85d820e69be1ed147297427bac3f6c1e388e0bd0b26219b85d7260e57b10b8533c91bba5389896bb6e169356481ad8e2c2a4df263b4d383c3355a9d77ff91ee0b0a7c5f53d11b2f0fc010c45c7764e29aaa3742711dd9ca56e01208baaa90b37ccf6639d5d3797d76c727623a9b4e299e337d17460e7ad4f00ae09c379c272a9a5c483455182ec69c8391d0bff5de3f2518b6912314f556cd5ae407e3c884117bba07992a566c7ebf23f946b5f3dee6ade26d177661dca199e8219f5a8d2318ad3d74922d0513abc28861ba9879db5b557f12503fb45446b54303ab26d8c15eef2522928f3de57900613be7f461444bcef204aff064d13b37265b187f091bf5d1348837bbe2ef90b4590b17beab53bde44212ebbcccc32b7ab9d776e1e4963d6aa8d1c2de9c811fd854da01c90133a36585604b739a81ca5e11bc820aa79d7c4089a10721ee146b2c5d6de63f1b33e98a0be52b0258992c117743d21461c5c63d57f6978d7c26a3fb4e177639d5f8b905eb69dce7365d5dbdfb293e304a513e132770b4893452b16be00d782372c6960695e23ec9940249b157547a88eae9a968da8f6e641021d7240ca7f0658720558fbdf8047f21bede849914358ab1fc98bd652e72d24e3ba6d4a9f6f31b3ebc165e1c06d2d190e91449e1cd07caa524901432bccf082ca5a8799843df931e8142ccfbdd1a4ac035c8db0abc4402b450035d6c0130ce5a179124835f0f50f31bb4ce4713983e615e03c9a2f06d439f7f865da27d2224de430627184b81c9e3621d496ee8e23fb61b1900aea25beb604267273b60de979ae912b88df7b36d0e958b9b0d668e619590069488662eca9b46f5b70813bdbd8600cf5ed2c59bd1a9773248e5b2e290c7d43653ee07adde6e394fafd6bf19e1dfaec89d5b7b140a25ca40ef83ecb57244158704c35eb96f441993cb0d5cbc4e884b23665b602793abdd065e3fd8bb7ead29faf4fcc1d6631da3e243600f5a59c6210ab1e444569b73f2431d39bda0f1374a3d77aad5fcaf7613c604b594a556638c4767d21305b0bd93e4ecb7dee53f1048222d67ae93cfcbf949201add64efa2ce3ec20d1662646fcebbd4d7f4d5839fa73ca9adf1a693dfce61d1bc694e62a853645796caba637a0e45ea9d5b9407485068c3e92843f06a3249e4bc4e6a9445df92e612db8fde7a0d5bcffa164159a72687fa5f47fcd7f80bba8b949b8d3fd5cb0d32447daf7e39db7676db7220e0a9335256cb5b32f9e2c3a1c805f55910106a50"}, - {"000000000000000000000000000000000000000000000000000000000000000a", "0053af35becc04a3158b10741e4fac711379d2aacf07082d9b0060cdfb23d8454bfb6cde61c3557d4d2d06d0b1fbdc537660b88d74f6be2d9f9f2b38dd808e0dd73cea740ec705df4d25a516aedffa4aced260271063b44ad404fd319df7d4b89373e779fd0dd88e8b1bbb391e8efa6d4df70ab2a9dbd9faa25fa738817319ed5414104fe031f3aae32bb0f437ad55ee3e26cc1d7f0c8eac4cbd25b440374cab3f0606fc2abfc4b801890ef1da68fa85ef41250ce7c262b25bad546d1c50e463f310945ad76e9ab8deb46ae4da60651dd2b51828e976acde8063195fc65767b541c63d727e5900356d97c63ba40ee9fd22166d7f34441a336551a54d0d4d4a8700ed1b77b285237f6a273de187335174db559883ae88ed2b23820335fdadc5315efae73c71542036ed2cc05adfb9641d52bc639e748caf658c0b953910d449d01723dd2ca7346ceb3f9de1d8b7ef2da800cef899eb2a69df537512c9f9673e31c21213c75f19f27d5d7108c293f2c264ea87bec9efc5027edb62119e96b7f78ef9936721348fbdc237a78931df176c4323cabfac715c97b53c24ffb8b6bd635c3dbe19f90540acce94ce8306c9a2160c88e56859f4fc7f146c104872a55b240ecff9b5277c37d9029e2e86b845750d72f8c11f455a52f997f1da0a6d27f67d789da23d105b3e61449db1df268121d9ad154f0ca0aef52ab506ff1ccb70d3486b5210e30d48cd65bdba817e3bac27501a08c6134c2d652ffa1d36ffe23efa023bb5c609f6e58b0e312b89fd8bc2a43db8f3f209c21cf9731301d2e41a9e04999ea541b261fea06704da9e57ae0c63456f7ba1dae5b77ff30a702ff48a7ff058fc2b0d37bba9970a91ad617413725c5df3ad8b3fd557c40dff8f2277a51e7d71bd1a78536df3eeae64fd641b114604bb955d67c599a405d170417bafca135ff21f028748fcf8430b8676edfa1512d3893edca116f2bf0cb1f764b817d8adc17d10ea081640858a3f7c2c530e2bb519ac4886e1da7580f64ffc577ca710d093800f948c025c9619db5cd592793f6236f6e22e7a88860a339b8fc4e0e7a141766277cd19a44e0224dad7ca160a2e066fc66e52ad1221dcfae6a209d4addf55d5135114822ac76257f47bd7cdd672bbcb61c23eefea14cabc7d3046a3d3d650736b304f434d3ae971d94d062ccc777991ccb2effc576f05e928a9eecc91f5b50bc51bc1ee96d1f2f6b0f261d61a9ad4ba1a95104d2498229ca3269fada15a22e9ba4a65e1b1573313d8293264bebc211d0ffe6c171539caee89f1943c03201111a517ae6aa2c15a20537645e0742a6a75bffc8526422d4be0268f815ae676b1d04e6a6e7277b4f7401539d65cead35a2982c0535f06411b91d71d1603203e5b6c8816ad0fb7eed4ca7ba65532733756ff0eba0476007d6122727b1886b53ce14f86a74fea7df5c823eb3ab70128eccf762453e49727519e8e6b7a281605e0352677cf12550a8ee37aca39178d2d272b258b1fefcac5041a924554c4b2c4245531316a5f3058ac0599a279cc4484392945421e4fc661a2d05cf9cc7240489f260fe85ee148b8757a54d188e1dec75683751232dba2068fdc7bfd6e03693fbfab80e156b602fe80104f595be3cb8564005a97c66bca7763491de1a404c3ba1db486c37865dfb2cae834d7b145d595b91d17d911abf747f964be50567e5379874aae66bbf7801a6e0cf16dd4e2b3183303c9b57fb604f5753969fc1f90e5ddeccb6116a3e1695066f8ffbab962fffd1306003d2f8a8c6e70aac903514fcc8120db50d3ac703021f6c79a93c1c79dbb14acf9c0814960d7978989067ce5b82804d94ff91e028a50a76668d10bddc3c308ef0f10e84b9276b9df89a1b95a176b27893b252c"}, - {"0000000000000000000000000000000000000000000000000000000000000010", "0123f5a689c0936b17d82529aac852c18e61ecb42f02aeb8ac9f87909badee34a55f6b3865706cb8a1f81b3e5a46a7d3ae3ef3ce225d697bd9653c4c126b1f2c35a42dff23ec212c8a67859b473cef1ce83a919309efe3da0b4def450f20363e97652339b5d9ae351f2ad1c42bad14f51afe8a9736e0bed12219b29953d42815aa85f918b02dccced47982c533a9aa59b85e303685a35d15711aa9fa8a6426b0d0396993719146470371fc77554921e9e6b351e5e7bef15cc4b50d3dc1039a4ec0de27d667a768e193c49aae6ef28a588bbb0476e21020f08e33b15e55e5a6e84d6f111dda85e508656f133ac28288ade9f51fe2c321d1f669d9c9270ea7a768f2922c1f070df300f57494e8c56117f667228b336109cb0cbb4c598a8e6bd6e02304fe7848534dd88e79d36468a7ff0888e0737b32f33341f9f5315a2b4bd073ec776bb54518a73d76534af98afb2d740330afb4add5bf2ecdc7049d5bc57e49c00a34785d81c325918ef2ad8ddae02ada7f5ae0ef917f7f060e07beae6ffc51256fe762974cb0cd6521f5253f8c514383d43748a32c45cc9cd496deed1c4a194e9e9f9904cac9d0fdd8a3d3bab901af3eb862c87329b341070d0d7e2c92dfc74f40e3b43ad65eefc96e550c8c820ca37db094073975aa5ec192075e8fe99240bc622b322d123387624a5bb7cbc84158684a2efefefd95e5055d0aff37c792eb6be6c5799165f9ae1619d78a07117178ed8fe83dc994c8817b06bd6615aa9658b7d5073d1049511632cf05faa153f77209f59c7232a12e1db72b37c2a4362157876aa4707e2b0391b53e4b861c5872f37a288707b0ce82d901ac9928d3d6d3f05025be9db4291bcba146e7657ddc60b2ae45aa59118e3eb67f7fb02bafa77908f8c8eee7f21273f096c237592ea3ad975c76c5d69f4713e8d8de2677d0fab4d60167a92aacc1efc493f87485c6b22912a1d01fac7624296d5b06f217bbf29f855dc57cc0999d1eccef0e10bac12a1421891d989044cfcc300cdd53a14aa2ad1a6f513619392cc3d840e273d09bcc7a51fa7d497e1005fc6639947b92cee9321223c030e948458a9b591d2d06cb2dcccd68d1da927706f832e958223cb05230579519af12779fe1b9660cc1409df1ddd28f145172fafe76c5f11f21d425978848f0b07666a119ba1b04460e3ca9ccc67d4d19623b39b906d582f456650f6e2badd467aa9aedc7d707d115f285aaf86b9a88613e9fac0c76ab98ab7aac654da1b124e24234b62417544c05b05e5c4620eaf02559fe7ad86b29fc9a84a01dce1c6bbcdd80bfebccd4202d5fc872db4eb7fbb72d8e922939f768cde9a9e37d09e03372ca7bfbd5652ed2a7f889118e3cdba1536bd7b249f166a578e82949e4b675637a0cbbe444b4ae75d6f2ca5535fe486d019235dee249c7c66be69098ca7e37a4c76bb970a9210d731e8b241ba96b74e2f412ef78f98b411b8b3615a83481f51245f0f241f3690a70e36548d72fe2d31df0b0f549dd43bba3444a6445e66f3b107259618e044b37edcbd19c63b8ba1332c1f6b34a281ddee0c81c7c51c5c8951c30ca4847ec747c8a275250bb38170872b7a514d6c757ddf75225487fb133192fbacea43e20441be8dbf5739a73766b14f7b53dfa309800630575786330dab3f9731960f277fee5e69ab557651726ca9559bce62efba165eaaaf5e8bc1b3e431b5f1f0b4e4dc7c98bc1177ce4e264e04d4525452bf4f2244c16e46cf956a0ed48758a1938eadaca8b1834883309e846fef88387acf7f111a7c2722b5e2ec1bd765c4e9e768c74b14e479f53d60d43445a1996a2fbc5c648cc255b29a3402df7156532dfcfc3ad915cb46c945662be763758f8d546dd5682a3c9b35e0d3f3de4eb"}, - {"0000000000000000000000000000000000000000000000000000000000000008", "025fd8575342fcd0723a72451e217d8bd82cff7c9a1d65b25ff255120370514601914f66d9c093732dd506fba975439be9f953137794f876c8060e7f9fe2ff11cb1abcbdc4f552d5f5f18e91dc5318aeacbff1fa1da6475e8fdb79e575e2d71e31d0fbd9e572dfd6754c93650f48995f9ae3a9f623f0ebad469b37ba4def297102b81fbcf585f634d375d4379f294e93b46b828a7c66d78339df3ff0daeccc84fcad8775f59d5a9f035eea6aa0185c21022171a4fb7d59689c26ebebe3163756958fdd0be9a47f44ee7da9e551bf0d51ad4741cbc385715798379819f6646ff3be5dad474f96a2495f0df451d69ee5d6de95c86d37558df142b1a89607b211c2889c79f56e0a3123eee678c24251d3c3e72fa8671d29a3460b67e9550f816a5339746090be3d10d64dbeca8d0350f681f3660d33adf9a4a17c17b1223d3f33a9af1bab8e62859b68df42ba45c777785106250a112925bd4d67bd210d62d3271897151d507620dd39fe28a02e2dd9fd6a8aacfdb613224fbf99fe0e1465b997c4866b3def3614266ec3cad50438c33f231227acd9116a41e84ae32818bfb7918ada96ef4d0794c943d1b6bbf7c233c4f0c0d1f14da02d3370b80eb8edc94b213b57b90fb62e4df9390a3fef1654b30adb2064ec0553ff908d15bf55aeec55a4481fac120daa4bb296d8a8f4cd5294b4f6f654e1327d4dfef411905ce838f5451fe6cb835af8b36702310b77aa371bdaec6ba18c47a9bd06e2f86422ba3129b7b378022681355f2e18d452d8f6d6c655622e6a036ff867eb35676dba0827cba3a12f84c9fee3e1bd76dcdf3aaf149445d9d6a695357c51d1c74bb2be3aa733b736892801a60aa891a1959f2ca32ea976c49dae3bb8e7a9222454e5f10c363097969823f05bdc32156339cc0e533cabd3f2598deafb65b5a0bb4b810d6e534e198d026dcb3d19653b85c6f0333ba5c60ea9a2d018ee2923ab249fb248f273adea824416967db9a27a1fba37139004f7e9343123e8c675ff5bef5e761a3d1fe34216105d443d77af03c9e9a45d6e2f9ad9e5d01a33fb0e563ff4edea086f5d9b833b0622556a170776bcb30fd084f83c0b4029ae0042d7d4dd97a15c26f0c87225e15ac2a1ce6fcf5554a33a76a19df914a93a50bb280862962390fd6f9b974641145cb571ee9a9d11e60303dddf234468f2cc0330705dfe83949e5877fbbd2599c4580e11e7735766c58f6c31c0c5c0bfcfb97b1bd411adac13d273cae8977837f0f9fe08e4b9e417448fbac8ec287c91b2f5e49540798ac71feabef0680409cdc2ffd3ddc1180c5473582f227a31095bd7521b1a23a02221da6151fe63aa6ef1db8aebcb3f39c713ac3b3145a9b453ed4643016c41d97d62bc5fdcb831878cf9048f22bddabe955335ce656253a57e3c5302fc09b4294c23b2e3b976e517d2127a60b216bedb1c8a2bddef999abfa8e567d8c548743789467cccb5139931011589085ad86c732db0ddcb2ac9865a298b29d767380eac0e9d8f9467e683e35eaaebbd5bb6a4100d1c80990e16a569c98a28b2f4f79ea9465e7868216a064ca0cd3ce2feecf59365f208019aed966bb0120ea1ec69da936355a0b41bc921fcddca89bd7cbe1df53fc11a34a681d8c78364b7a4dd17bb9afdf157052ebeb5b19caf09f4a7c229f2328579fe4c5ddba7060899a5d20461378e69c3f158a7eeb1f559982b210b4d159dacd2ae8b339b1107077a202f4e4afb975024f25423c48b253b9f2944a13077f31eb3055eadd1090ec6eedd270a8565f840f614c5c00370d9df5d6a238c3abb5d318e7faf59cb04c77110d70dfd1f904119a84b0d6f569b43cc5d357e27568d961fce9f0f6b416bafb5ddf7198dbb52b5fd6d452e5b32301d8c94"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "0028c4f6e25770aefeff15fccbd86d162214d7ce5d0fa22211ac1459abf98f549c13b5e0cdaf2072c57f0c8c522446d50bf2dd5c7393a3312b4dcda17102a710788fd7b68e1bd3d03bd1740811432d390aed26c7024ef106494443dea204207a8ddf3da2b95e5b500d2c6fdbc4de131fe6ba0d1458d8a3fb091e33d56b2605cd068e89969f8d7cf1230ba4a14d33a813bf30e8392ec1eee16d9a5f9c7b940a7c2794a55df23fd0160164cfd08b23416184fd10f16e8c2554ea8e575d082b8d01d8a65d1ce338fb62f00fcf8605716951ac8714f4231671a0865f16be5350a1425d4aa4bb7d63b91f63853982195b95add9c2e0b0d5c3a1b503b4d631086898c5964c4cbeacbf437b96c528f28031dbf43c266b0a2f291e233f5692257cdc7acbc63bcedd944f08793f56ffa577d7e5d56100f02ba67127c3b034b914540c83c7d1fc6952dfe208edf22b4555241d62a6026b9a6ff4a28cfb7cdde316ae7f1e8a07e755be530cd09e12c2da94b942b04809fff4b137cfe43f55450336d545dc482310f94ba5be0cccca62e109bbb64653752e85b72226e342efc6c5457d0daed48b1ac8c90c3520e871e0ee6f21e2028501c99d05c66cbaa7101c56c172779c244b9d8801de703805ce24fdf226f90f608906f0cf146d595eb25961f70579abecd8ccca14dfb7c7d5636151b65c888fd04c7fc63d1d585449050da9eb04cd6d576a08446800a76cd5fb8dddba5405aedc5993c808005231f0e06d24234d178efb44540f9bb2cbdc46e83895de33936e69b65283fdbac292165dde10c0c7c08fe1909519d038572b95a7fccd9f266e794fb2db359fbdbfc51567eafb019dab2f90132f3107a8130c75d9a915f58ba84acb5980c4b86f7c2c164e9a4e90cfe1654d833f48a933ed0405e9a7096dd2b440d965a44760f0f89a2270e0cf48915e84e200df3f72932dc065c01421516b7d079ae1889f3cbc2294a748fc8f102cd50ee4922dc0921ad0b59aaac1066d7df6c118f3192255c6564f3af97f9dbe1f3b8c44e194c317e8d6c5aee379c2a4fd5d66f6753eec510506a8d62382c49cb1b6e084b2468611decb78995048ccdf6f032737d365e906b40d55a795b55d3e4bc80f4b8bfb355bd8290d3fe5a8c37a58d6d5387a532426529a4a8bdcd6e7e164a553cd55ca65a26db87daa041352bb9a8ece633f8a7269c646235dce6675aaa51657fea6d30dca4bd84a31f3597f337c91aa92639b06bda7aebd0f3a2b5a60435d7b76611ef2b9f7bbf3288a43952e10fd71a093032dba5562b9231a8fee6706f4ebe0bd4dcfd93209e4c47e31c242399df1cea945ae13c8e09f195d75d89a08dbf538275e969b7ca50d159c5afe0e6cf18a208108f431a52861bf27e92c47c71585cca055db551aa4dd3b481945d97abebbe7027a15623f49ea4d4c5e72051426e5a95d677899fb02847294ba4216c2ce27f1acd5e072ecd1e28ca4e413341bd962d32c93a3d7642c3e57e082f06d7f85c6656f8466365dd1e1644a28c0b0ce5dca4bacf72cb80bc396a5fda23cd1815fc1a9192c49ad5d42de6e910dba4efd5e25b4334258e701f7d446be14ed541caa24447a5aa3af2df1b7ab429eceb24e67ae009fba32341c94d066f45813df9b89d7136916f337cedcf42606162b471d4add689a9948812e63c50e225e12e344216e3e8f01d154a9c01f64ca25f9796363541f19430a0e05a56406354f58d874bc30c253bda1fd557b0c2f360a3eb12b7843b9a4d42726b35ba915c1565fce0d4702e1b4093b3a9cff738ff8c9decb5146dfeaa334d8c2a81bd025f4a222e551f937c2aed02c7bcce719f8db3a274dab0bac5ab1cf46282749dc62f42a7c25a50f8c3256fe093a3db383baa7d135d8e010f630"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "00c339824aa2f3cf6412d50fd17aeb8714b67f68ac3e2bedfbee629de9b3fe260d65b383f2bef31cf27909b5a064884f3bab160c5375cec5bad552ea4c6ca70d9ed667045bdebdecb182d227d60785c9ad3967d000f7115ed2736d3fc934b2c677170fb1a69d53ebdf175184295edbd4edd817537da4f3a9515d197095aa0616ff4ce09846db344bf1f0d025657324cc1a38962353ed5c5b66129be53395fba43d94420d8ff5023f046d60260a41d818cd5c8511ff752e7e8536d8f7b00940bc05bc5a72c57b81b09d5a1eaa6310217ba52c117e26cb6e4e6825cb53862c707a21de7d52ba216e214ea48bf0e547f55dee058b35d3f4f19326549c050963c9ca99d216ccc6b87251a2a712096d14f1861c214b4478af3f42d9fa452256281aea7ece0a9a43da1a5ca75cf35d9c51d5e6a2c6fff17bed34b76abeb821a4f68d98ea1ca1a57338150253ce72886f98c69c06ad7f906e56c805e468d17186f2f5113f958ec633164e60d540723635daff2202069fc9c625903a332523db94a1858a13d90edcf982277df292c79f1fa750473864d9fd7ad905dc4875bd78eb02c9b1a0360d690cd3770e43c7cdca9384f54f362af829ded9b835f31eaeee616ca05c9f8780e577f1ad1dbddfa11b1ce638df9f7ccf98768d1ed8b4f3dcdcb55eefd6befdb36536772e725a282f77aaa74e03e4480b004bdb6ab513171791adc5ec886c90e1bbb42c2278d5b36a603f42bb7fb90459b351340fa4be602fa14552b42e9be03142253f60528fa7416704913437b67a7592d9387839bb92aa89de6da5a89075a51153dce5a6ee3f39c220435918fea7fe5990b1a869b8cd69728ef31ba92a815eace0ffae27f9b31b98fa0e684faa58093db34525252a1c14910d27a06df4e9c9ecaa56bdf33c83994d4966754063175f7f7dd8e565c9c12ac89c37fdb200f946568c9118cf24e2224f40c926b58225b7663216b866d022c7534cbdb1a2cce851ff9fb92adfe139024b4a62455e06c9f124c1a970ee9645ca3f19d93f0f69de9731b2d2bbb6f0a30deb3b2ba123e65373ef0132898cfba2e421ad1f342b752c58c922947f36cc169af3d02ceb7fd7b9ec724f107273d581ae1ded371d9765d5ce48b13ba82693991726c16728b03f331b4006446272d22db35e9ad48644d72a5dccbbbe7f8d05e8a2ca3511f525342100c2fc0ea2bdc57dfe43231b19d31e3e5f35995ff182f7ede47d91b0f65f6bb214f28ce449924f13d28d11673a74ce55b0eabe5f5e16de95c32414222197b7957cf8f7ec998909efeda91ba485459ecda7e70a4d4a93196e1772b624395e0c34185e9f9e632f3dc759b610fbbb496226fc56db2327c199e6eb5cbdcd31e263668bf1ce91907cdf75794e64bff49d157fc0fc6dfa52c4d973c6f15f9f3dae03bc9ef3fed8659d67c686ff80493c3674d733b3040a96b4aa774cd9c148ec44065f6548570fc83950b10ea3ea762bc4091b678cc5e648c0169ebf6e5ddd51238acf675e54a38ba76eb6e536f2e1aeb3d2bb0f6b07c37ff9f5c5536b0fab60b5b485df4c3e66ceb978367a12e6a66fcccdf0fc9432f4c2022d13ccba77df08aee8bf0508fa7463f3849decbf6bad3acc7391f8226a5dcdac8f123ad34a65a3c975256bb7919fc96906341879a64e0c7d5f75c067ad6d829cb36e3514b33d7b3533989e22d6f1e27455434fc68a703d963e6a076a752ea9ca771e876720b3395ff6c034f1e92f4a1b96cbe2f57c475dfae0b6335660676ef11cf968e407b0718fa7c6a5368ae0f7120bb8ed07c4185e7bfe16cb8c3f5b949496e8aa940cd9ab215e94de587b3418fba138c96652e9fa9cd29e97b9d59d2eacfc629e2a4537cb149b714514aad2b3bfd3bfee80d1df8cd7"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "01f50ffe593889a5f49241c3817d67a164d8fcdca60ae86ecb08db3081af96313f894d219e2070d865d7166462b3f35972032b0fb2d07b61c07ecb8e5bc55f2f7606fc63d442a74b6df55754c1d9fd86831b002906c07719f74af362bc44873e2acba431db40952b7709a7875531958e88d36e20dc7ffb5b31fd0393dc5b1a332cf9338f7525a30f331f1a4144cd464cec8fe927f0d48a3fce5d15ddc5842b3ffaa3390b0fea2c7e0574289f11948ceabcc8213d8b60fc55dd4dbaa8782df21fc9ea5642dcd4e196f7ef5a499272f11e46a10b86cf8f8f5a79f512b9271ed4cb7d8255c39463b1278cf6e7419958ebdf84c452324275bb7f661d19590876b4d4a805c66f504a448a324423e12ba52bc1a90bc1f59a39ca7fe8c04f0956e97fae0e7f5e99b5a51ce5028045561201afa7e59ce94f0f69cc19f34bf43d3aeed4f97850cfe69774aaf4f1da73a1a83e8f9402b6f60238d9c815694e907fdea9e7cd4ca9d696db172972ed099a2e01bccc9524356bfa65b491752f7304e0c1f60b4a8edd59f9e2090bbb8ba8ae997e99910f91c6f7001342f17f7be117342f0c30f1e9f600dd19bfdc8d9d878d5ab9ac222395fba484e076dc96ab5a7d47dfa1a6ffcbe3e5c7657ec250563cb578f021393acf8ea7e9cad770c1355d82c88215e0451b8ac24fad056db7d7bcdb7264487f30cc1d6b1ef1de2ed1039585d48af6e33fe216824a3eb379b1c0dd9ee1e710896c7611d00259e92986f3fdc79ec1f348d8c3d30634bc44f1928748dcb2a5e538e0d03d7c7959af3b102193f31f568ed1a96ae5b5b17af4bf7a557f787d054b3845a5851f084aefc1319ec2011884216bb690149f6dd83d08794e522427152b7ca5c1d4327f9ade1426a98606c5697b7a4cc1eaac2ac5e8982f315b7a2665c497341f476f6d5db81cc6d8cb035c9e7d2d22022aa87b6864819d6f4671791d99a949d879d45627101811c73ad0d0552a14f17ebc132d68ce0dd1995f065253ac98d25b76e46373023e6e85db09229dfda24755c63b779d7f9b7e2514a318ee0ddfbed61fb776043a1d881b1222dcbb8ad04e46ca78a485b407e1ac0e622538441cc0033440c82129f574970cab9f518216bf1c74b12af8a3baf16aa1e067fac781601e5d6d2baaf324fb748f07c492446ab64ab71e89a3bb95ce04f79326b98ab0b87de9f7151576549f8692bdeb0a1ab4fb0cbb89ecc36180d45e57ff75697e8cdd9cd609e3d292015113b8b4b5f750cbd9639ab7157ce7ea1d03f57be2deaf2d4cdb470547eae6da6d671d906122694ba52ed2da33ba5864d89bd0a3a258d15d650a2e8832d80610d3cdddce830d1d5055c541043718b82993cc73eb63146fb037548e99ef66661f9d7390a73a6f9c6879e9d5c3db3f6721db4fa7de599cf4bb8c0382782304872fa3008df0529eca194d0eaf695faa7ae136014cac375ba09d5a91e6dcdd7b59c3dd4e50103e3e13b3c568eb1283b1475390d9624ff934846a44335ee81197188ff20bb4a4deb16fa2425c3cd2f611ab00bec322b56953658a21697766c2a259bcace915a8cf0848c63a98fea05367e1f67be5713275f960302243fcbaecf1adc6fbc31be370037d41f95efe4c4e774abeab268d9bd9e2d7f59366434f08533fb0cd04eb83fd78dbb371298c41ab63eb7a1e5c6199048d10f807ad1561dea9297ab3b9d1f11009acc07f2876215f3ac0279bd43944fbb4aff42db04591b8763c664d87d2f42f6328dd2141f691cacbe3e60d7cda8e5f05b8bf2593a1b435fe97912c736700fdb94b7b001e24a89386635bce3f6db722a10cab7f3ab77fbd416b086dba1a30c8536c7b76b0f9fb8e8fd6193b3fa17714737d10088e7e9517aec4a4222efbc1e4787c8de0"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "00fafc379814ad4b882a17f775ed882b37287fecea1ab0b13dca2197f3a566f50c04fad521d29615c0430e3b21ed79d4056bebfc76c79363a4cbc73bbf50762f6da22c208e5398f10733d4f761836ee2ad590cf903af3274aa2567358a8b90de1dc8a8da2f457a1bfc42e8545bb0e35e9142d73564243178738aca5cf6b00baa5a45a7e3af434d25c23dfab4eb3bdb9e9faf6113754f943ace8106cfefb6119439ca619e11b8193c031b63ad3b4cf40488c9a35c344b1c36f4f7388ae108afe7b9d24a8094f741d12e9251584cb48a9e015306d993490aa63ef992e5a51420d1af19b78b7f26e64ae2b543ba2d66efa03d36d14ace3db7327c7af97507966cc886decd9171d7a515aaaac186847fddbdb21ede29739892e74baf541573b8b5c26a098a5439c70b7d4aa00c85989318593284f4ce412dcbee54ef291dbbf2205ca5fe17303614835efbbfbe3a8c7bb91b04cf5059be816f6e8c24b2da7a736429b978ce65421ecac9ae8666d89742b736e71a7c11ba82f87eb77e196fbc117452907abdbe08e4e84821eaeef15a62c222b8391bb322acd7c27fb5293e64c32185fdd049d10aaace59726469837ce1c0e28fe4b66e88a57e86f01f68cef0284d52490cee32074c98115e61e81a55b01cc0025c16cc6e2df85297b5b9e7318340979b27a84de75df3f4ddf52bab5af50dddbca3e2e6063fedd508199e93c68393285329942638a4f946cef07c1539a7366f95e2791d23f0852d8529f9a9a3bab09df79520ac8ec38ef66bc1bd05324b2a769fb560192c52533fb88f363c11026ec425f6de047daa6670e8b88ad10a3c2225fe2088f3491a10a9067f277c8e48aebc390c53e7731fd13a47ae71e0facf5cfc95a7a372424625cc6ff478d295dfa4f0962d92489549ea722fc10b34b7559320948b6d53b093e5535e0ca579214c550301b6f10402958409fc4b34613f48a8eaef9f1e5b2e2dba7e2325e063b93ef6294084529b1e98bd5d8b4d0c8cb59bad1c1387f1c9928c6360b5df5e96ffd82f2e0a37d58cda80115e5ca58ae768e911f3dc1997bf05439aed6786ce38cfd3017e1a1a004cd763b7d2331c02a3e10f103bcae43db2ad52dcb1a5ed6b1a7dd010c328ebb56b175b7c3ab91d435f1e6e4c6d55ca3345e0c6049eec93e3d28e75480eb147b1c39bff02fa025207442a19a8cdf15fca08ef6daa639eaf5d4b341939052be0c6fa4a4f2c329ed3a02024eb3bf943b005d56e2c7b56694dc1f6c6d58d416683c39a7f50023b0dc541a8d475cb5ab9946b34fc53c9ba484e05c71042cdd6eae317654a82e36e8cf38c358af951b6bc11f9c0f6f8641acd343e52b5859e5776b86afecab0183a1ef2961b8abd7e71968648f1c6e1b58d9730c84454eefdf8522f9376b645d759679fbf62693e0f9e02a868c6c10c18354462406336393cca28273f09dc0f3babc186a9d09feda6f37231a85b55ee275a9bcd13d10ce1fc48ce49a0fbd3f0304b725640fc5b72465d943721a71c244993d5aaf0d1fe1aa3512d7e92a11b5cf660905e0059b4aae2fc05ea253f1cb75ec33d39b5ec53a8cfd2c1f3550511bb4a47f9de64367f2443c13f8bee59b99914ec44c1a6c211269ce37d55eb93d9256e5934caede9376a41ff608c9ee1557f3c1203c7d056784bb8eecb7cf1e4432d6d80da371ac531062078c78c9c6a8d924d21939b4b3d955f010dc1550df6a330ae62897bc7ca50f92d90c2511cc4f0cc7227c3ef1be12c37778b8c82fdb6580c2900436ccca30e6557ef811951337a31813527fe713d32b5104fac19660a81edd29ec37d76a529622f576f255a5c77831bf0c5860b8ee556c4ff43dc3c47bb1d803176d9ec57335cfaed5662bfda86466887faa2363df9da290d"}, - {"0000000000000000000000000000000000000000000000000000000000000004", "01210dbc08991be1666a62e78e6723bdb327b7899333c33eb15c2a9069875514ccba6a5e093575990145026401744b1266c4a227eb2d8d7071caf4c09e66ca0f5246a2090d4c9521d8f48b17effb93234579966d0196bd077373530df8a4251fd6bfef8de52af4e0b71c1eefbdb9ec5d71e464f4b5183913c99ffc5f89ee049421543907a12eaf5301e2f64364ed2605ceb51e0e8d9534ec2f0243a495a107cc745a12a589d99ce206761c999e46224c8ac590adfb2498a451811e7c5a21aedc742b1605e7e9499356a27e27d915ac72ab692453459d52303d7193fa363990e9c5d68234590b4d245502a05b956f138a60d85d29ffda9b3c667da2ff14ede7b02771d5a7f5cd71a917499ed3c269ff227f1e87c540d9a0e6711e44247ec8603975b5ab7bb51a1bf8ad09ff9683e103df290a29feb1836e0f7c1ab3591d8445782772359731977b11789c82c9ae3a50d601dd4dbd3c454d90f8f1e3e8747e7bd397291f45a54e2adbf0d817f4ced89077e73946718e88495f3f46091eff42175a1d0b555d26d380664535dc78f70e164350f44bb6aac9518dd24824b54e097e0e64f1c2da033e8da2ce48219feb054045648f35d8cdd793076e0821709cdac248becd2052bb90bbd80cb011e9120c04300b9d510e6dff501e218cefd343aabf04378f521881a2979fe3ece5be53e74c287e8316cd33de27d7044c5cfa97cfef39418111d68bcbb395a21fdc94c80c605ac0bf0a85b46993a560595ace86add99d545f16276cc33388e2854b3c64c501c8b58965f11cc94731b79a84d7e81779ab59c6ee10428b12670ab6d0901a5c565639319c7faa3f37d0a8bf8f471bde5daee61d50b9c39c985d3b4e1788c882f5fb3aab2056983f2b4a45414cd7f12148c945973ff05ba196d48fc19a3450be2f9fe1dc5148475c130d61cbb3f50fffca1001af2fb5f90764b94f3cb20970105de24605d8b3b009156d37f5a83603cdc1a270c1d548a5c2a177cc8208ecbdb6a9071634b70873c2733878da4c7ff85c5732ba5653e9973c62f2e8e7e777d7c9420e5378d0f20acccbeae3c710708825c1c6697c3f8c86c1b746bc2359d7b3dd14befba523223f3e17be7962fb1bd4732cd6b97cde9c0241ddfdaa5e0c6e225ea722558ff543b7c34b13702e59e814e580ce7f299e99921712810694c66a1002ed0ae2d495757daf6e32799573d6ed0be24ca5e6e3cea1ea8b17527947be42684b367a27165034554adedbdb39926535e8c33ca7d1155f9d6b16576fdd650bbd175c94d3686b529a5ab2a77fa5e313179c47f52161e9fcdc357c4df6d4d72b4a1affa0415774d3cfe2eba189f9052ed92cfe318afcdc358b1b240c33e80af81874dcf22cc06f6c661b7e76a5fe2f4e753de40c05bc80e6b7e9ead1c9be639619da460457bb714cdda6e1d17321e06cbe11a64684f4541b13140d6c4fc6360b28f191d2a81461fa93c87cc18325ae97129592732f2ccff37990f66c71198d75c8e0383102cae396c0e38b89a725ee6ad8f600edb6663a0cff61104209f9a1db4bf19aceb54328f480338908221d57cd01e033bb4e4aa29c1bf8b189d137d659b254152eaae3964ef78524774811db9ee38956be93875554b5d853e608038632c616a5fe0c0f3766ba03930b14cb4c04328413d395958b73721f818455ddd7c10e56124c0b0d0b4ab236d0f5546a67dde11fb0e80f0c0e390b0bdbab3d117cb1b0219d0eee194f3943ac418b852e44191938e91e26df2f7d1122718c7fc8be0f1fd4e87e628511d28a12bc8aafe1ca3327f343324f7fa52be49878ade43279a203df95debfda7b6c2810295fc7658490a9155663d4d0aaba9d0d3b33403b15aed9216f065938acfe3421155f8d224a54fde178"}, - {"0000000000000000000000000000000000000000000000000000000000000005", "00d6f76708d890891835b24981951150ac411f401a3be5cc11305137777f3de3d3ed5ee5224082db014e106db2416391cefeb2c8e27001c041a5101250d0c11a9f5bce00931fb7d4f196029bd9fe6e41c778d52d03ccc331ec93610dd0af95f7677d8dc17ef66d94ad3c6c34cc8c297f51e1b007ff8c6bf1221ae4fa9971141151160a1c72c9e49d91fd60e5b211571f5d21661bfaf6e8034dc0f88925330f339df13bba41ddf23407c08642de31038b8a0f91b9d1796a2629591db1ba3ee86bd76127c65b63b574f9ebea65ee7fdcd9c7c92a660d5ea6927a1b3d0dc375907593fd08499130e930bcdd8b3424c38b631c97082fbb22d2dbeb9aca4c16c85950048fabf379f6639d89d49600ed11aeae7430d2afc325971eb2d4d456102c58c2835ae19df45a1c965bd3e5681479d20452a46df8bdf67d03be50c2200f5c03e567bc117e085880a4cc1c26368b136111012026de184a304501a4429cf8e0975ec1e99f3b500c4df69f8bd2cf2d837471f6e52edd58f1678e65560be45b4cd385f829431294b9d4f3611d3216135d6c1e863de75b914fb1b5a805836d326b7bab79fd6fd30e8ebd002e780823cc95819136a5dde1bc2f9bc66018462300d40d6bb492350ad75c780ee766795d036f10dea327ea88768b1bea813cc5fbd929008bcc9400119b3dc8cc6cf69faa73d172009040749e4175ec2608882ba15504ecc8684b7527b4f85dce7c195581d71e2bca1cd1d02b02d0d2a81d16d146ce6b1ddfd09c14b8fde0d239c1abe509e358866ec62a9c41d9f44d27c7bfb57851903dd4d91296a2e0a8766bf9dff2c208d4e1e1ce42e812e8275420f6fd9c29a7e55d67011e3c36310bd1a27127e6b215f7b3de79c4d672a35809fff920a798f442db8274a5ba344e2d445af45fbd0d116a9ebad6908fea52b3b1a2ddc4954e236e95b601102c8c7128ea3d687643d842ae849e9c255e8f46153cab22cb59e589be21a1edcbd52a0c91eb8db98d025f89ba2fe76931f3fc6261bdd640789910ff6d4d37a893316a2cfcf77317a4a290fdaa152dd3ddd1d505753f33106f6dbda86da1138c1bc7fc715d3240300ab5cf956d21461d8ff2977b24fe6caa6fd41583a80792bb8565108b870a50e07d88d5234612451478aa16ed38f4f7d13b193021f18ac4c219973f36dceea803f0396f12adce63be74d0c27996905d4b47af787e2b23019ee85401493eb7d30eddf58e66542a14da0a1482792994da1c1bde5905c3536a88099d4b13e39a52441d3a68ef46c9b5f5e62697759f4b61f79c94471201733d018d8055fd0674f7594b8791a6fd5ad8f319eb6e18da15b156f9bf327af2e6c10e8915fa1acd230ad157fffc03d5fba018cb6d58d58f46e15ecfd8481165879ed88f4df9c504f9093ac1334b349e008307cc78ec7c620e5b36c7140769e5fa0174064c89d7252ddf304719b15700c1387abdcdc0b292d5dd5d9e0d2bb7a066d598ccf880c4b3a0f3479ace8f5b801924ac239beef6e01bc34de3135036e98ba3e0bed4db0901d2797ada6a171031ebaaa8660dfb2edc5bfe5a3fd66af34132cffbe3249536c1f40f7b2af41bb6fc0f590901384eefc8bf6eb7493857ee17771c5d57851747636e8016226f41ac2814d05ce5fb466abcb1640926d76821332bf3ac1b42897e5aa62360945fccb54499b56396d8cb9b58ee45d809b8ce7a025197cd2926083af0d854d7c51e88c32c03a8c793b1c4dee6ad2a48a2ef9ce17fbbdb92c53396e12915e5429d24390a6af2f24e159eb5da6bc5d2165ad707d0f79f3d9613c6fb4f1725da93a5f7b5ad74edf22686927b32fb1e777974e2dc9e5fdc3fc45d47e51d9545ec4b699c25d4ef0ecee3175f7b0667fcafc6368a2c77dfb0f5"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "01429fe4ab4eafbbac1ca2b5b87aae019e0717f200379caca606dd48a71d44b382a9f1b7c9bdd5b261570fc9820e0f154f8fb18803373da7b8f6a44497fdff2448117a1beefc8df597b4ca963f74720394fb556401f11ae6bc8b8b19312a1274ac9673f64b5cdb1ff302a0ee6b52dcaf81381bf1c597665778d37c3a070005be20bf1e093873179d67a9de63b49ee8eafec44984a41c3ebf69058d92f55af8ba685372ebf2da2e610d897c2bbd6ca9df9ccae7122047aebb1f3a5a20f9389f2aef4edd1fa528e2670c0c7d5e61d8c5f13494183c3413b6656a57a050b4469fac683210cab1c3215f3a7cc3a6e5f163afcf376f65d13972451b7a4b1d0d9abebde9ebf3f5a7a900f1403cea5d46526f50b2731446c9d467f475d212e9c3c75951baf2373aab6712b27aa8aab4423fcab3f40a32245fe533617ac8c625d8f6e9acd7dfc7c31f94add8e72576610917821f0317a39c12c31533a805b2c570f968010ebaddda86091829d72f581d5b42da70944fff35644dc5d24b4e3e96231b142ebfcd801917114a59af92488eb814fc52e452de63af2387857d29c215ec4c17347c7bfd850c2749140e15cdb8d11a54e1b842522d9d59935ddf18d38401f4240683c820043a9af71246f18cf7f2972b336538c418acf3e452d6f95c6427e7c7437e73d53d69e3595b556122c51d04af56cae1fdc97f5ffdae06c405fd89e2e0598cc82447453bb97abc295660500b3928b6f509ba55deb303673e3eb8c16f225cd4b3093e0d520f146847d93200ad4766710e5df3f56f164bc24753a35462a8fb33270e4672048ddac6d184dc08694e086a1414e716a2810591d7cfd64e0c53ec6e4d66cb7cb66a7369b4fbf5bbcd6da846ae63b7660416d5a6c1064ac8bc978c545b1bccdb85d8229cd4d133d88cf484120541121dd46c31b0898ab7949b569903dcf19f7e5969c93d29462503fc1c7ad6e41b10d9416de751e79f9841bd4ff50f8a6d621546252b77bf144dadd99a5afcabba87f33e0e3510f9f670d5648730333a7ce09cda25ef2b130d7128dbd700865f042a07796186bcd68464ba538241e44e6a7f3ecc7c9da40aaf6e26508e1ad4c22b01af92ed23f5f013fe6f8a2f10b58c12cf9565988a444f14d626ce5cee5f18d348bb4b847c34f4b1c068d5ee4e6da35609a518bcca05ab1eb3b58bd4197b2101b7a0b476a2e1ba1d93bd0f4919f65a73e43dc395824e1ffba43e20537d82983ad6cfb6ea98af1dc38c7856e57edf86a0525c029b47f59abfb016d2df7249f7f775ee4a7f256fdbfce808c41256e10e527bc14c55503acfc805ea5513fffa27a7cf5776daeab18a57829e5aaa79f4dbdd8b502e12985e4de4b552ddb57a71f43e5100dd185eee2c041fa352536c1180faa4bbbafb0fdb582f24827b9f5b03e945c185630271560800ea9fe8855ad9da5f064106c2e8a2bda4ee017d3843e18ed5e32723cb5fa2f609b4ed1dc2490d5e99bdd2f1bdb0b84f6ca0fd3df3195ee5c107f7b10fcf0bc7c3f1dae7ab1d82ba9cc80dfe46fd29052015350f3528fcbc479153f0708ab125ffb9fc78117c6d0537c47448e8c6b1b98231bcb91a9c124538f74873bb1de558ecb7b1c7a8de9e7955217b04ea504a628f5d88c8d5d07fcede888ebd14a9075c840dc8d913057f2f6846abfcea8e1def5bd0121875d0e54ad09ec3b854389065ecddde6fe5569b42085c1e930797e1fefc06bac600e2c2a3d6ea9f8fdc1785ca140a62c1714e2cb41b9ee1814269f3f5972b09db9e5b96d694f55c12786dd2d982ff2ddf7a26771923b34fc9a9f1d5d848a3ea50537d228bab1c46de139916fbe1d816faddfdb60934cc29b274545e8d512452afb3f22445a973d5236f15c14d195f6fcb0e4f"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "000de4161bcd0788ca8d15e531cdcfbebe42bc79db3289debcfa9b74a3e9e39ca28af16d772aafde12f0080c9b71501bc528e1ddd2655adc5eaecd0057686a2f4ab30f8d6ad8e5782f53db7a70733694521fef800551d4bc85ad954ddf97a532f37524226d78f86e2c0b1928994dc331256949abe7e565545b45b0bf8ef8332b9e1aa21765a5d85bb3b942425406db2b99a6c839de3f60755ee8758dde56777bcc5cb1a03b370a56003b10a39f43ad1091f4527250f2dc64ce700d5fb34a74229489d5a5253a8ca58f026546be29319b5b8e13a0e5dbf7673aa94817444d7af926d184ad5a9bdb1c7a0cc95a495a0881754252c2e9d3da1f67fcfbaf01ff8f5b743308b9bbb2173e7cca5a3ad61c59844f06bc6c002fdf7387a5e6220e50958bd0fcb0f51ad93ad17dda40d02d26b56df78733db07fa9b2c5fed175fff4e2ea0eaaae5827996ccdeda41a9f01059eb1500e490ec87e64b6f8d55450c11ffa151da331ee618282d5f8e6aab8ef3bc7aa42eb34c368f026eff20cc07cb965b42a77dbb760463b970ec618dee5a516a073eda9e149f5b8dfcee7ca5187ced9c2d6ced3874e10d4b35062546781aaa6fc7254e476fd6eb4bff9c9c4c53bbe3e5f0dd3dfef5f966f8ef0e6702ffdbb9071d3dfe583989fd998a28a5e08a43571e40ec1eef1e21a8cf45a75fd581070c29a48edc343671cfb6b9e305cd094157884851f599623c1799ed83372ab9e38c113f7d109cccd57ba66c61462cdde8a18b2a70ebc20643485f1906edad0d06c526446adece514cd9cf2a1e61df5e26ce7e3f605247094f7b8d6fc7eedecbdb06a00fccc05787fd7a3e40850da0dd4449f6396360463dcdb47ce3537db5c66583c43351e17babf6e9101bf69dacb3d29bc9d92c0809bdce6482250fdc5d0b2adc3ba556a5f481ceb744a44747bcc624dfbda66800a42a7e8d43d0cdac0434bd69c1b099fbcf5d6bc334b8c47eb5acb9f38db5e3df3f5ab6611b7e57acbf0d93b13342a180ed5f19d40057651ce98d52176b017532ff2e62fca9c1fcc0b78e9d7fd8a218eb793cff013e19fee7c9d341f1f847acfc71c07eb29cfc81cc158ef5f05dcc9539b03aa19f0c795bc63e8d1509a315d48548b2e6c5afdc6351c934c877b2d606b7fd0e1f94c21d8e6547bd65c3d4f1e36ffc624230d9678503a62db8821464b0ad72d76126bf3429eb98afd53820d16d25e208d4bbed1d56dc1f3e3c6ac6799b69c80888c176b1234325cca88179f42918e214339eb8202a0c23099eceee49386d95e25bebadde21509d40510747536f1a69f9477d2662d0ac2bc74249fcb8ecdb09a4e76c7ba040c9e4e8fadf00f6b8becbcbd8d8921be6341b09d6946f27cab1e5a1975d8c9e330f57ea423056b29d1d730d480d94ad0ce129a9cc7bb7131d00be7d250fc6d665029f27a47d5f81f2b9053f6f340685736e2408d567ad8e052d4de9d9933b155bfad4202ccc6b3c937c40d4ba22ccb3bfa0291eca7c7b0d23a802e509c9fb4f76ccc2bcc547cbe537e43adcac0e2e3b9587b133d5b451316b891dcecc7a29b1f5741c4bd9ea0c212981ad2b34b3cb2fe6fa0fc2d94972160bf0e2b3cbb039d613f4940761530f485a7d3360170d291ab0ce92b8a757f4710b724641f0ad50e48b07ff5ede144eaa73af05268f50dbcb31a6acbf4a450ab697bb72d8046305c2620fea4cfe7ccb421c543214e8367cd31527f349b3a62684e62689911851825b437fd463dbee274dd5e5754b1363124d742a78e9bb0aa91185af55d5095e2542443412ad80b7cd666d512c170e47ff1e3ae1eae7c448ba4ddcf97683ba8361177c7d393c59aed8e82725c0cffd04525e66d928f9198da9278f208201cbdc045de0f4678a50b21e6f03"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "002100ddadd3a97bc78e70fbf47f477562efff33e104e2d4fb8a8c5df27e2382b789c0abaf646e3b61671d6d2eb97e77db11e3e3a29f5a1c9004ed0b2cfe5328f2cdf93ea870f5eae2f59071b43202056dd481c602acba43832e6223ea87422e6edfd6749481dbb3a315c9a9556a1b6e9fb0d0d473c258d57531b3b1c5b113718fa2ffd24c66a1b121f89ef86aa116c6ee4ba12139fbd696f79799c807261a665e87236550df8a950336e43ee6e740914276f3d8da6f4ccd45646cf88a12c6da282253b15937bb8383f8ead62d27a9eea32109e67b2d6b0dc649b336646f5560c40f9e0a3ed98f772c4ec69fe129a1d8d257e373eee68e19eeba847e06eb4d975c5091bb41cdd3b5822c1206863bdb87f22182c5fde91d5b2f7ece33ee92bf545e5e539937ba1049856e1556c83ff25383f7dfb4ac6d22b0d6dbb1358eafef6a0d71b51a56a53c234f6061660f6e79bb01ace4b0e22ddcd39d1ac5f75941ed198f4ff3de7c3656c7feb34e8324b22b5840e54a1ca7b4f53f69d6044dafe06dcb33ef7f7d811c925fde0323f6bcd338271e116e5418f271e990728c0b2a0acf2e38bd710d098ddf3b6f66115fadb0d1d2ad4f6eb9e1917ce3623148f2ec4e62af3d55dfa452c072c4fdc67e95b28e19ad494b16bbbd09e139d4ab587b0cbed33416e3f83fd2c310b451d4d73881fa130a54237ed0cddf41dd055188d05354e406fa4671aa67674b5e060b3fd60817021980781ff99d7c5ea8de9af7d0b71e691a01a00b3adf0fe4831f433089e40617f262adb0c5b629a740b2e44eef909514d1b9156ca35f8ae1aaf3195ecb0bab953b0c9aa2cff2bfa2a4fc1b8819a200f0299f24825fb4659bdd58ee128538d1dfb969a4b51c7d571476be926bacea31f98f634160ae55d58b289630691d785d9f1619bf89685d340e92eab8d27e2ed71eda009ae2a5f70f557ffb5ab17e6adda8b9708359e0350c3a75c519633ea3ed1d60f6d876fccd334ad1b9081cc6df53494da239b0916978b46a66cb5576dfb35246c35f4e36126b277c1a667e86c0280a1274f3b1c507b741ec9c2bc2a9cb59db98a2f339ff32c93d7e6018b2677b40a64251bb0292d45ea74150f7a44e43200e9f42af4aadf1f3fdadd5db35c189257dcd58f0ee2604be5b69345701a5d7b5ee79486846314bf9ee380488a6a742644067ce4390503361c89c8e6e3716af0e606bfcb144e57865bd35093bc3f4c5efbc98bf47117193d15acc674d63b2f1c10036c1cc8dfbdb4fe42afe89a2a9d037b2b9a2940058730799789efaa1cf04eef6f6d0daff0f335a0a4d007d3ee33fb71c6eaf291951a9049051771020d787bff95edabf591d7b500f95054441cde3d0dafa12d52018c781cc59d4f27f11c592774c0f287afba481de524372e511fbb481fc05b2f422b19bf52d2bae714e128c691b1c3d1b6d22181c6d2941f39449c58d45ee50f44e25cdb3f152ca1c318b76df8d5ac308f3b495adcc50466f57ff5caf50038b4fff5ad68ee21be71811722831d74d555f880c02c9a3a506880a3befa2989447d7a90b10eabb523cfb4d67df96ba4135848be0b87cf1af4f063c3b29114a91fb7a222381b7d4e2853f5f13c8b4c7af2f60252c65159b558eb53f11f29ae9dda4c53bfbd27e0308c67e756f4378d2b447a2341e62e632218fb8fa081f76d33271c83bcda78db59263c8b43a15451793cb0c08aaa0c121e15f15fac19428d9040a2dddf2526e23689701cf5b04fd1cbab3a7cb26d4de18147661c30ec768a81f0e9b56acfdf8f1d06e752eee109dde2a20facf5f1836e7d9f357a30eecb1ac10c7ed47dba721ab56adcc1af32178ff9521c178c90741cafff773236834d7c810d1935eaef268f227d74cbd1e189f9d"}, - {"0000000000000000000000000000000000000000000000000000000000000003", "009f9866940572830ebc43e2db3833a9f7f75b73d93b6407f3cdf8cfe5c9a935895456cefeca2ef8d1ad1a89ac4a3426fa19a35c25232cd30bef64269d15343efa17b5d5e84d79e87bf66e1af3fcbdb71a72a9b1037313af4c83c6b5cf5311f59257e8f9f03db03bb30b478f32b0fc9247f5d653bf1054fa0127e23d19d9105944486750ef2d3da912da1eeb3f092127e95cf47c1f3e1c32a03e6d797ddb98245dc2d35b951d5a7a016f3ee7544e78b14f2b7d1f04720bdbc31c5f35b707fe6dc6369443077b65b27a68c2961d7b095406670401f3f37b86034c69440611cdf6f2162b14ded0861ec5572c39f31ee9a5bc22b12c1bd855f3361b3f81044f367e05644c9b7c79a3008773be994342b425f90ff982cf1253b7417b82539f084afd92987c5abe040871c3bfe9113f658414f4049da73ffe6357be9ef61925b1d69e4dd3aafefba27c829ecc290a2cd8661100f29d03bac1531cec8d61aa0018f9a53de10f79ea016089ac121567db89759bc255f660234ab53f916d1ab09e7a6baf60cfef55a3725ff6309700ce3af07e494f9e61199be89b1844b6e277ea833a3136f779e101de2111fa2e1f5df9388085d9555554366fcf4a9e38e493d074a593eb6c5afa554c558d06ced7b9c1ae08acd28393a5f82bf6dc676155c55ff6b7501e48b60e9941c6eed08b1345372201e49f51c687967600e201ad7c15bc574c7d33c1c7777b671522d2e21c727c31ac736aadda0643ab57e58e374b6415a5548d802d09d960f94f60be05adedc3526ae362c697dabb942d608cdb5d1b203ae7e5ec789566df709227fb71e0ff048fdeb40b49fb8f4f55b340ddea35b4fcf474740f14c3fe0aec17db93c284c7fc09fe9cb699327fea8d08f5e5a66356c579b2ab61f0a4a8a8b0ce85fd7d0b54a0bfe8c51ed55922b877fb0479770e790f7c7fe001230afa602b8217721f901b97e5c48d822f57d91a4209c675b437b89dfa35a4aababadae686d3fa461b1beaacb6bbda6f0fe0f6c23e2197d7bc9194c944f325583fa733e48f535296f7b946f5226e8d9f7dcd5510898c39fc4b0af4fc6c02344542411cd59f56860a14f9fdacd32dffefe2f9429ed3d1211a2f679e49701ab6554049d6548d369fc41082fc2fcda9a0fe2b5c207ea9264f55d1d127a8860a73d2b11f5ce1dd15e30df18cdf48307461fea6c1ad47f1cb9355e51c91c6502e3c45e3e9a335da4e15bf44c2a3cad70036dc910fd13d402968c7a38804f3332ee09dee489a739a8f64938656aa64d25d998f166c5cb8bbff1c089f864511ae3af6188f6b76abb2c226a34b7c158ae99995cd25537691a8a577a7bfe0e4f94a2a508a0dcf3e49ad1f9e1f21769af26be4a7b85f4e69ab3e19cfba7e73428364f89f9fcb8f178e75a033e5ef6201c9d6b794014a6d67eaf3c2e1f7f3b120b63117ed3662599cae3787a7a46eaa66b7edbd47b778f2127f268c7fc196100b4247f01ff3e988bb8368cdae88a6224c1ff4221940ea9e0c351599cdcd29ac0bf3861ed00bdad61a04d0b4d69c655cfbf928214da8a0a202b76c162e3f15a494686f0a14925374b2689c6f09614bbd93d2c2385f336609940839dd7e19f7a97549aec21b7f34f24ba00b0cbaa952dbf93fd83e75e6b432c550ff7252040172c62edc03cb2da4825561d13f1a2f3297ac302977fb34e12bd85dcce2d77746747cc6e65e3981be197f3c5fadd1538a8d3751b58fe6df112f8b9bcbe349dbc3ed205560aec3e87724bff78452c79e1850f8058d718b7a97d5f74925d5b9c3432c72850b1eb1b42b5c159db24c84fa7d49e57735e1f9f5aefc6fe4d5139b2ecf60ce1cda8e7fe25c261d90190a85d7179e45935ae3575cb04fe5ed962636bae0921125f37df7"}, - {"0000000000000000000000000000000000000000000000000000000000000008", "003c80b6034e7004b956c0f3c72eb044744bfbf9fd1c38afcb2a24ee4b65bac500433343723b8ada45c7153305e271e490c1e86ab352fd68f4ade50215833c1589a3b9a767c053901b9417a4558383b075bdfef5025fd5e2ed1fa73b8c0f60702726e3df47521d52f12bec55d83ba2090f6cc8d3f9c1bfdc1d440befd90810de6511c01d1a0d1eb0f37267f3688da3f5d332941de25cdad9982979f43691e3b49fca2d6a8558001801b8af3ff551ddb92bff25c9d8e967b757fbdae18902b615945bd7f8e6dd40615932968b327f49d9888202f793ba602636158917f03cccfe445cdfee104eff1e0c9a5f2a8e6fbb8893551e28fcc643951b7db2bb09251abe99c2fba0becc20bbc6d23c758cfed2c1ad09aca0553360cb8f291b80d58ec56a4695783f56a00be1654c509da99151e4a60a2dce6336580033563a31eb629b59ccb265446ea37531ae9ac570704f8fc702e3f0d8350a176dbba023f85bd7b7625cbafd589f2c748d420f4d654708b6d40209c629a20443d479511fc999d4b94b39d5c984a290e77de01951308ee090681206b85c1c3a71a85bb799337f66ca0da9d42f0a1a5ac17383a38f7b845ee4819471146e6e32fb43353f0f62d529eee1affaa726e0946abf7ded29944edf3405bc26e197e421c8ad76850d5cbac6506e15161861501fceaeaa40a38d1ea7624dda5562248e93c7e206de51d2ffcd1421606b0094c5d2bd53cca63e9d6b1187cee5b785d615878582eb4145706dd150de8dce0b57d9c6720baecdda3de602893a98e1ef59d87ffa355e632c3a1852c7e85276e9a5cbafef132039c3a316ed52894e564ee9713b6388bcc6ee724db75fe8b42c810ae9e64fe9c1f7d239154bd2eed2e98199bd8d18104b65498e966573b7c71b75e4d6f2f5e19f0892240eba5f129a12d3b5ade55a3a43c9c99c6f6e33e80091587a06097720607c509791f9c4106818b93e5d00c5f6e02257e1fdb3b0103cebed8d3055e28cc8860689a878e2a1b507a52f73b372f4233a0e00b077be61b10f9b85b3fe9ff916eab40c7cb7bf0d133adc17129a5be98b913d477837d413fcffbaa50716389d5322358a998b9dc5df446cc35ea47679c8e03cbf782214903fcb510d1057100a12d75a592dc637f55b146e1952ec3b7db46277be7b85806efba499e44b1919a706705ad44a51094eea1eba847c7f2287abffffacda2381747698cd2dcd84a975d64c3d72217c9d10604208a70451dd05d1f2ca1632b2fbdad22ee1d81e8cc71abdfff7398ad04bf1149346df2d784f68673e70730e616e5d4c0d84195392a4fbd4c7208f7562fdb1b61d0ef7feedb2d5cdddcc12fb82fd598d3bc06a45620fa033cacbf04a01923682c26a407db30750fe10e4150711fc955f9119a78f32d4d04ed1815f464b00740534bd2157f3cf47c8f53471e1f4ee4aba3a38738b24f16ee39bd09d7ebc0394c710aebddb4549fb997616722f1a6e98342505890a1d4352f17f2d1efa8ed34c86be8c5b626f13e3e757acabddacc684895ebfe70f67eeebbcc46958d22d748a4e6f8c7b9bf93f29014eb6cf0b2a604117e258cabb775838031f5cfe78da199ee5666a704f87b79b232e80c208c5b151bbb17d1efe34dec3e6f6495b0d82509e76a9b8fbbddb511d0cb318f96718d997164d156536ede3dd81915668371cad0383d593d294e48061fa00e4d91ccbeefbad0e1b444a6b445b6f6f2b73a3857ee7dfa17fd07c301d394bddcbb766c2a9a4bb1634d5593beb1ebffa5f560fc93e3df5568b396589446c955e439742859e32b53e69a5deda2c3a27f3e305b521cfc2c1a3729b3dbc1afcad2b99dd8cbd9c1b74bf68d21c4efd9dfdc8925546d7e6d9db5a06ecf387cc0cdcc36e1927d87624"}, - {"0000000000000000000000000000000000000000000000000000000000000021", "007690eaeb21b45f5f4d3596c467367a27c599eb0a0cfa72451e134747e627d41d5a50f8aad677dc68391d33caaa3350f639b5c2f285cf1b1868eaa876d6db33722c79e4f3c0e7aa3375512d342b3d6e8f765817178a428701d698996bfce1c6669db5a107dced23311cefbe4af8dc0fe2fb95958a40cd66a6b8d8d7970d29322f44b1199df1a11763f4d1da8b75c38157b3313487e78b1d0fe00c921ea41883ff84768b053a9a6200b33ca1e1c57046f35aa32e757448be41441866c2389a7cae475f0af71dcd13f6fbc885f726a87ba3cd0a238c6dfed9381f1d1b038592cdb6451a00c97ede5e6d8781951cb43376aeb9154deba783d60eff5fa007008e8110da2da56d8fbaba63727657ba279ef7b32e03c31eb792913ad5fa84dd4a391bc2f7727aa0bf120617c6244d3b41182ea3d2593463cd5a4f4fd38613e6e46e894520de8c53a33dcada6732bbfe7bf1d3028ae203e3129886d862042612ab34d6d7cfde61ca0b50668dc485232fab9f7124c45452305a3958d86206912de70901b99bf31730b29d0e86d573ac0f2de50a5bbef1b9056959767131ee9c51a1887fd197cc8e03913161ef049414baa87049890fb404dc868974b93e833d393a19d22f4c01f475d9cf9b9646aa323e7308bdcdd05e85adbce25d2bdddffff00b1d065cdf260b37da4468cacd0dcc4894b775d20125e42b301b430ef37e09e8509e1b4a55436e6377a4e321a97f92fb383e1d5f070e20b47643b68cdceccc4e5212de0f301b1fb1c6078aff034801e1e42aed07dd9a4750e0af4b455696159ec8e3176238cecaef30c23abb749f331276ac9df7dd5a3f5495441306b96eaa723075689e259c1d7b1454c69eac5a5335b7f7be791f4e39d96b1cd9e43135e815d7f9be52e20840014b3bc05ba7c420da9dd69ccfdafde9fb14402cf404cad55ddcbd47019cc93e6f039ffcdca412b7f0c4549589ab59b6d36daa54091b21c88527de982db5ea3caa45b1958a490e773bf5c4d08b2ebade784c25c37bbed121da779556185ef39416536f62d8472cb979c2ea65e4dc634f09b8d23ace0a03252d5553679e78fbc55c8af791ec0f50737a343bb82bfd571125897fef10991adc6a5b0bab1be40cda91f71e53215151aa46a5b6fcdb3a412f2d0622605e31fbdd1b76e672e517edc1aefcd88006c6bdfff45ca59150d7f32e5eb80af97aa12c07eb19ebe64c1b4c23beee2da5f2c1f79b1284043b55a418b0d31cbd8b0dc3eca07315f772f98e1773b4f9a63a5a6c5f706b2f4df482c408ca6eab895673d15e920fadd376dfca5f4690716209c96a70d16f0a2fdc231a582b980c9074e899fee619f15713e3133b1a042c227c1255694ead9eb27e62bde6c5bc59268416067023b0ef06c71225b726be92738357573b7b891d4d1c05b72524bf4c1021cf5c033fbf72a9b92a471fd1641f99cdd10912ada3d05ec7864667b0860d161555b10bba74f384d8cd9b59acba377ed406a29fae5a9e820f618e966c2d66bd9bac21e45e6d91b52a5d1ba0a210abb421b29c26639050790a12e35b8afca19ba6432d30b3ed0d0fc60fc465a5571551c752d8149e373618010297c98909552acca1f08248ec35d7b79ac4f82c06d64d8e124c0e9fbc03da756dc5cd17b38fb7510d02fb75250bdc1e98d572c25a9df06af2721ca990495d95fafaf3e9cffccdb7ff80de457e442875aedf1ee88760f8a326578222463b89b9cefa4b3cd5f782428c43408152380ccf9034d955e8ca2a31799ed4f81204345aee07d05d32bf314a6b267b9ce8841e8e6f1b956ccf49d370838924f485576d11ddf9c3199df71e912f61f2e25bbbf467b4c7dd5329d7a6cd7fce5f366e9b1dada01df50c00d672ad5ae2d9b0d40fcdf6"}, - {"000000000000000000000000000000000000000000000000000000000000001d", "001982c6f5c10d41219191b51edc0ea4bb86ae340b1d7b8bce2e1317e54df1670b6d4a19e245b4facebd17f2824e7b56b321e24051f48fc4509d1a28395ea01ce10e6f20def827a5bba2479a70122261ce13128b0e1dab2f3497929331b4c4e3846345d996d172e550250e754e3b9e03379498b39cb9f2e7d936432a52a91211f576b6e5043fe35893a4201d549d77467c619b12264d7e34883f71d59afd0f6769ad5b8410bedd4d0267ecbfcb110b5f8750b0792c1660bc361398f1977764f6b0be2cc155a11caa8abe54b232ac2c1d4815057556a09e2ac3cda0398b69c66af1df27eb7be45a23f42d8bc21105cab50719917bd4c816fec29b79e20a250b292352ad32e5a662f027d4271eb4319cf5a9105608f7c1d01d8327786507bf60b269a4d510994a213a16c62591dbc4a23e778a1273554e4d6b3c962543aab7cee11baa82e4a215868ce85599872fdcb46e02622c12ba08a61a69f44170b84f644dd710ef8e6722b44508cdccab7efcdc72c63479f6f3193ef8f5db0b3970bce2d00677760026ca9753ef124c10b8be4e13c65e852c29751f73e94220445f9a198d411b53bf02c5bf2738e9e991c48424d240d29967ab7b3e33672b6a767b29d86902da44b3bea71e5719e442164b2e18806541679d1f9dd1f8a233c7656e68dc27a743c325146f3b28170639d12963fd37c18bc2acdbdcc1c102c07ba74356090efb6d7c54f16a2d2f45d37f075c495ceae73fd7642f13bef5aff76cf57d8a938fe1c23b2d6f5864ddaa9dac57d3ff4ee857b772aa1e04893c2de614db16bfdf422ed6732653ec5ade789ced670fbd2b650e16e04decc4e27eea6cef95f40d7921bb24215bf87c8f4ca7b666333941f96c318541d584191aef425c3c8d4e526c2d9500e242981b3581ffd0ee66046d56c2db0f093f0d7d9705fe4133865cbea86b01dad4dffbc5cbe967a2d2aa2f5afca70be7fe638910d517ea1c09dfe3eee21725ee6877c3537bfcccea0dbdf7d344ad038b8b550717245a7186962fb6cdce1048011dc7e0f1adf32502ae9828596cd43ffcb4b9068e67eb9d4a6ae4d967e2880b1688d4c7a8ca42bf3c1c0e304d2544bdf9d82990ecf86446bb1a9a71b606ccdc05848d82d8eb7e511aeb773b9143f3cbc1661f99343eac57c0530c9e69abffdb3bc2b2bdfaaefa0456b867799ee0ab2f2913a1a9df7459f5b09d90bb05f5447c2c051f818a7ae0cee8a44b29d0b58fe9cd0ac043122912bcd3b7f8962e2d5abed2f2bc57f0ca14e51d595207c25f057733fe9a46d6f92412eaee690bf217e45c89bf529fe4e11d2672f0a48b82cdfb6b4ea8e50a02a838419cc0c7d9215d40fb25a3be8f1a2c9dfa1c6c54a2a2c161e3767ee7a9426086568a1567e67d974db3d1f5e9c426e3dbb8f1df6791fc50fc02b39f1b796a0983acde22218d440dd6d8d99a772d3a47dfd29ecfd20df89c751998fa336e0ece52245220e9ce50aacd7072aaf354daaed7bd5da12a333adf5ec9dc6fa3dffb6303d1a81a5070747f52511b7797042e940a16a1d7d5a030f756dad15f162f90b9e9a306b59aedc5e0622f98e472c28a6057aae69c3ddb02060e4f07cc4317b3ab0e7717676cb0e5ffedfe26442395194af8ab16536de8d8c501d7499f578c3bade903a642db47d88015b509167bef5eda5aa8331a29bf08d6f1779cc5684ea04784dac7ed402d663216475116449470112e624da3ff161c2a4ef1afb9fa9ec90b1e94dcc97447e2db5cffb7546c6c7d5721da5a3b8a05a453a6a1a28c21a340d168ec38f7665be79fefb86572e3fcd67873f3ff91377229e9329744b63f088e15a76ab7a1c98ec39b1a55421639d522866b39847534e06b345e9f0e477dc023c88f5ce68d131f99965c"}, - {"000000000000000000000000000000000000000000000000000000000000000d", "0138a0856a0258bc573f40e2176a2d14b3bb4dd43a05f69537ecf8746ddfaa510465934f77ac291dc4e6071114cb64960e33f7fa22e7cb6d9c45a462af81b215c45b190c89091dc7d1347a61c7fe5f74cc3e48fc0209973efbd3b29551f473a379243b05473995c03b02cc9ab2fa169b750af858c957515c2a496b7d5c3e0220c5a33f902e98c10a01f4593b76b8b1e85650c602aaceec1e034ad55c32a2056d26418109c23e34450357071b304b220dddbc82535d2ff28efe8c9aec47297624206e38425fe0a0e8430ff09186d40efa3f96172e23765e654a53a26f93591ecc1e8b01d4fa90bf2e8f778640984ad900341a7319de6d22b3c8576b7912b9ff7b9c526a319724d22317ee7f3dc0bd9bef0e783c440b5763bf3334de58bdb8743f0ece08b804931eeeb1ec4d9eac37293ee61016d88cd6b7ca9e9cb048bad2e1469fc4e1725fe65a27566925b80adb2d5e03dab2a096caf2f67cef633cc89fbded0e011f364c5d7f47a5721c5c54f9ffb6c986578422529b34d25f114aadb712c6cdd08d06284a7379093e7410b468d02830fdd6ffe803214f9b48f6964cf65edeaff87a9a21fa0bb2c06963cfbb4a33173571bb0dba4cb7a7792f7216a704a2efe9ae2973529ee5e9d5f90b17200b2f2b359bece580739001343741be734b53769ee42d55e8a771b458801ffb28d5c6d0dea00a020e9479d514b7ca486ee038a7edb00c039368d96f73143fa1a25010237eb358b631f3384541eef5650a04e8198835173d89f0cde93f99f500f27b25b2a5bf155ed924ec45d3cbf58bdf875d455f34f1c529225e6e62d3d4a2162545c7b92898fd7e3fc3aa99e657019b759a678a3f03f7465ff76a53ce7e95c544b62cd68afc1f197b2884f447016bd3d9f608a2e3f4c5fc7331bcbe7e1a3f0d549451ad1559d62016e02959250e00ccba0dee02015c066ed1d3b56df182503641103165cd30b2d3320adaa002317c0fa09084b04563fbb31a3c9e4e3c21d91913fb08f9bb2414b55024376fd61c5813850124874b3970dc98cf9d79d61c94f6d2e199c0b0d2e80659b9b1f2060274e321d3cca2e3cc393e509b387f296b3a8d9f94fa2b538535f8176ba38985feb40f410b489f9139305989dc9533463bbb8d221cf294d34d1f9e3a4f5a6ee941fa7056e6d9e5c09681e679b98504465ea64220af513c79f276fcbe1239e1995118d63d91921f82b91713de5966a0295f1a76f05a77caa710864e7c941f2d950dd0a24d49a4def354ab1b00151c9ec7f32d4e9ef9d97f55271266b69e6967d9fe63087e728184654bf38979e48c2060abe5904e541b8117872f5d4008475940aaa24c0ab49935d7559220101545e63e30549685242b72696ef93e1dd7c6bf4426208846752a5a7813911ea37c14a538563ec93d4a28078a0420a889fcedb534b7840ad8eac6ebfcde5a3f32ceeedb3bd37d1d1257155ecd35fdfdccb73a92461819f59f208a2a20dc0913af76d4a65d427cea52b8525c97f56fa8b181b953654de94fc8c613d576b2a811267d9871dd382df1ceb41fbeec873273d9183cbe2330043c8c70dd09ac988887b85b7522b57f5dcde012f8e3c411c7e8d2bc1dc99b02d76916d5549eed5613b466d9f992a945f86be349326279de5e2dff24980db6e4c7118731ebb852f24427c155a5d53d371ac42761196e08f8dec9ffb1033506f42f55ba41f50dcf2b7ff2cf05556be7cc1c3768694937d2b82378150b4e007c9d66553e5707e835862e3898cda1a7b69d6c0fa6f2c63fedcb8180e5e28a18e21f91b47cd3023728c085cad0648bc9574577f4b3fef58730727de5bd2e0a61932ecf50b382cbf94fa1f01812d32a57426230906fa70da0821d6d5d9ad55fec6d2ebcbe58c081"}, - {"0000000000000000000000000000000000000000000000000000000000000004", "0073ce847a23711d6e938079e77e38156f98b3e5d71ccf7e587e8efe9d5526139ecfd1427d8a10b5c8061f9b3ac9a955e929c4d584429969e54a28cf9cc9692289d91e2d58a2c5638516f2b6ee8fc34de6df79310929b5c94bdcd7c5494841927b4f7ecbf4c01fc1d819f55942cf60cc9f1b7b849c3db8075692d35e4f820df08cf004095f1b2221130887e03ff164d538ab28105d4233d4b284ada697e11c7d4c2b6d1f492d787606f0747ab29c830ef6d6e98f4376ec3eb50ffcd18308a6c1f2d6a1b5937778a57545724bd6d20df8fa4f22822b42be8a0ad4c0b174b0e0729b51bd7bbb38fe2ce04306260d5d1fd50eb4e401fa0269dc722f4357121fb99fb3d20fc3ae20b2112f6b6064a06a3bf8c24ad12f0cac9d386fd787577840d1411ea537baff5f150eb3ee240f753e7fda62e24af80fc76327fd743c40d7a25605272647cba08421fea33145bf365b95f702001e748152688b4070d36e4ae22e3cdd388f082d18a9d1fe8808759684b1841e75ae9345c2979d55861034c2a4fe138f950ca52b9eab615d039f5bfd9e92121b8b11f1dc0c4b811194a66f28afb9dec4bb3ce60c0ba0626dd65067f1a141e17f14115e743476bc2a0dfb7f1b4c69262b6967644db1d85df9943173d3db12ccc9999ac8e6afa28dd6d4763f245636b01256401bf5f2da1da3d54be7c6051fcf339792846377b5f60239220f1329592d82a19143d1792389275b954c9d12369b26f81e95ed8bf6e6cc28437b260013bfa6ba0d179ae6b25ab13753b00322b5eaaffd63c8eebb991b110dad898a103ab178a3533fd517d316ff393b0f0e2f41a21fda0f14f9a6b41ed0fe47e5ddad3184b41e06cb1f608de6829aa7a224541f50564fee754df517fe03afb22414bb37d135d561b59832e9141ca6fd60ef4f831edf10079f271a56905a01ced1545adaf600b4634ff46ae7775c10953d475b1d0219a05836eb13b8d2bedbc8443eea8c98eafcdb26dab9c097066105fd6e40dad3e48916408742797d2e3abd377f8c68063cbab536cc3c2918560203375cd0a24512f24a5d07e7275cc75a6098d71ca119866e2843176199fb440b9a3fdeabc44f84c65f05fec3dc20ae03c93c2b5c0af3d11a5303c3d85bdaf6221a709743d07ebf717b3c81fdd8e9e19d4bb56a74e651e05c42bfbc7b17a6029140dd58cc80b784af4294e16fc494b49bdc46f416a7ff7988dbe80996e27357aed273f54244375fc22fb93c1651dfa4632e4a7528ad3f1bbde09f3fcebb2ffa7f487adb69e5b0afa36584bec900f116daa72006c4853f53c88861d2f343eaf62aab795c08ae4eba1990496566e2f23f9bc6f1b40f3e7aeb9cc7fd28410b4843eeecc6acc67613a2731d1dfd88fa3d516cab1043c3df8e39ff73e420c25aeca1854763e73b82e5027dfd7a29c8d63fd697b10384edbe0c60e577c8c6241fe4eabed5335d965723b2b7abf2de0217f9bdba03bf2b67528810c5b9f8f653e9cb36760b81d4c2d0385a156641ee1485fdf0658606ecc966f6a3f996c8128b3fa09c8bdfc2e4ebf6886df2f17ac71c5a30092f1214c86cd7a2cd529365e6b361c249ef273f57d01bf2c5dbaae9eb5989779434c9cf899e5c70bde1cf25530a9b1a54a8d7a253e989af7e0de6ca0678712307a22dc48f88b583ac3f959316dc7832783e3d48ed0e4ac8fc372db8b3cbd7721de2f746e36ebf1c4162080d19ba19431b1ea5eb116fa6ece210b03eb1d0c22e0952036492b4b5799336ce4ceb155efaa93ecbfc07b4014b724fd1c7514f90d0c2ec20352cc10e855f138375850cc7b8f79b77f36dfdbd9b52a2a11bc9f012aaa7b703df80cd826f234fb9a37769080088f50319d5258bde8d03b8b32a3373257e71425f657ad438"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "00140807646d0a1b9d89b0bbe52fc8c92d916dda350c8ea5791832551bd96151875b98a59984f9353a960d505ea00255724f0672023705fc95d4eba1ef444e4411feb9c31a16b32813947c547ab416a7777cbd42019393490dead3ad9b75242c7f32bc86a69efdc15003c61e6fd997e11db51dd26b8dc44786e1e978fe500b98d574ca1606891f6bf5e16650a566d067fa1f581f94eabe96df1531788fc3d1efca222356f65ce9f50037179d8248f16fd97872a79a470aae88d9d4502d12b5b45d06284c5f4766f35a37759e2d06d07ace8c0c9707e4610639758f15443865d443677c5d7e7404340e8d8b18de91275712c8a78dcf7587de101ef9fa0fb74c4dda218263b04916665fdf662acff95e8eaa2d643758d6a2b4676995a408f3b75dc5edb0175dba24e86e3b52cdfb44ba88045efa7b6cc38bca5e87f13a135541ce13c13ca654d4272db17719de20b57b9000344a48b3d6ced553e740dfc937be6a46d3bbca1320f8d3c6abd9b7c0f22bb4c937ad60bacda47bcf1320b96fd2e197d47316f9b38e185b2d2dbbc01dee98247e1d1bb6d63143ee0ce599737d88da3bd7d2097f0fdcee087f2aafbdb7e1255b85ee578300dc9c1a59240e07f70b5011b7f01cf7faa243de629d7d9df9f52500dea870a4535da1ca5517044fa34d5778cc628036061c30341a3cf973f03471cd538e893c445101be00e2b6ee17c936d11f4be16ad1e6096d5a7197c0950d2025ae30e31f45ba2073fb7544f7ab56e39e0d4b14ceadc69f9bddf3d11263f7a82fafb5f34e7dccc919a40b46ae5f21c7960929980ee1d3cab7d8d9943605ccd4c4b94d96acb467043689b599c5220ed8b8713febf5bcfbd08a670ebae6134b3441bd982bddba20091881a2fa0ed2432ca2617a9e3149b0d9f7d1cd5226d5d9d4161f0603e93d63fbb2bb76f582f2f62c4b00c01a06c6085b6c80572468c15373de749d1bf731014aa36a258793b4c8b2d14023581a8878300543db1513b9b465491fd17024c31212664046dae69ea7ec286c3d5ce78cd29716bc94eb52b99b89c7ceb49ead0ef93eec581642e78d6ed2ccc222fcfcbe718ee03b20eb852084269a23e556187bb279f52a3083326185122a4bd69fc87297c377c136f6ee58ea2b0e17650a21c79c42f035ca1fdd9e24b313381bbe541a96bbb1018205faee5b85470b2e72437f9cea0940583ef84014991e245b1ebf6cf75752f15af40a00c32606f02106b59bc1b20a828c624ab2ab72186096307cd92579170768e02c18a142e38aa63355ebcd6dcca54fee3e046902f50c4e4f31f062e80c6477103ecfcf3b1a2411589cacfde137fb752e76753ed12cdadd939b98ad2b8102ebe8d3fdbd4637aa233cec36dece781ffed634374c0dfe0ef303a1a034b5127070520cdf5124c2064148bc8aceafa57a0320a27090aa91944899d0980c04ad60a8c35b4857474a6abef1cf373719da9ab9078429513f8f33c3974371d3118f15ace42cf7791116bc7f1b1929e721a47f192998cfb21e6a8d9fca2f0cabf24974c8d7a4d6d85982fc7825b66814d91cbe3716f5e8ad18656f49e154f46a74baf5d9ccdc98fa30a4672d9ca03a79ce7a13467ba09a066f799523f2529cbab77fa7c615f02fb5d3875cbf5625dabc79dc07b2eb45ba22cbb7b6d1c27695261411f3a18fc636179585a6c912cbadf592d3be343d7ac53893acf5c0093ac7d839ced4dfe2c2a11b41d83518c08e6b63901c5d3fd5f1260ec94c06543629bc2a5e8b39dbf860096728c062e67397b00c13c38078c6e90fca7510d42d3b9d534560b2e7f7c8442bd3db730db328575dda0fa6cbc2964c16397e8de457bc5ad7e63f189ff44f1488d6e7c74cba0ceb9472b4ce2efa7980be182fb4"}, - {"0000000000000000000000000000000000000000000000000000000000000003", "01361cef432897756afff8b4bff80936de1f78efc804ee99e51fa14e9de83e72a511273ba11a6f14757c03377c6353c86eaa9d000aa67a65e2cb0211589334359167eb75eb9a19651135561b55f995f43a35fc2601a2bac1bd22523d8f0f326c407495f196f68e29092f3f1e052b608e757067a7f722cdd4c6a24bded45c0651e4d529d1cf515a40d18d2aa5f03292a4b8190717f8a7385b979bf0e00cb45bd5df737970532d60940609c5697f074b4db16db3c01cc16da94bf6775e3d1a769a0306a3403dd26e6266777db3ee01d633a6bd0db6d0af0173b5cdd6ec84683d533931a93f7b64d61412e26963926915be3503a53fb61a262da494676f0a759ddd89cd67af3f113103ca3280ad62d95da5370e1d6c59d26c0737a20632968c3a4d64fa894cfd3c1986ffd42ac7d61c5c0669da9ceda0df189b3b939f20c53e278c9e0e39489c35241cc7bde5bdd3b4fcd0043661e7569710db0f73f3c9f9548812b9d23a5f3e1b05a587e0525a18da21e30502b06a49f61375643220acd1964d2f00e18931226c89b6673589e1f2ca8928420d14752796dbd54b848626fdcc21a90d3b82500aef77016d70e779dccab19f5ae3fe00b613b0fad52fc40dc2f8e69aaf35e633850373e83a71bd5905c00bab4fe74106cf23c4f003129f2c5f8a9de619e10055c1c7f1419880e4fcb589ca2b500c5f5e085c927907bdbd2da9c841cb9050b3b37aa2e22d807caecd6a153f6dba2c88ce61248ee242bf48fd25c35ddba99a0a5f060773916378f3710273d62fdb064efb19b9051e28a3721ed6fe0d265c2200feb6eb6aab97dd10320ff7bd7ee4954c3d94f134e313dbda3e8e7897571b121128ac2ddffd79d1dc577db7747066e4ebfde18712aeccd67d2b0d29eefdc1f6fdd8b9522ed571b01915051313f9a42223f8c501d516fbbb88ba504daa3d034f35d8779db2252100f04fc10b9e552653ed7a041910378a90eb3873faddd531fbc3f5d2a772591a980bf9343575195d934e7b524b9a12ded9afe2f3cb8910a3ced5a1cf8030baf1722a5a602b00f1c60ded8109f746ca7b680aa56c03e7d0c4ed122e3cc0f8791a1ee5bb4b6bf19f31f35573754a200075f156f61072181d933cb2914539375595a4cd5c3fd5a93c3012eb44ef3ba9c19ab2a8e732a8723b54538b903f3d54db0466a277f733ec0bd83392f6015ec5bd02160a4c9607ed12daa3d30bbd4d5a30a405d6940969cd13200529963655c7cea9bb816194f904aebf3595a5f28d652f3c2ffc6fb7d037e4d8c50686e4651ec87dfc3a870b390a86188c163389434132bb8c472d6ac7191a623c5efb5cac198f5dc90a5bfe717f757f0bfc3b4ef92f61e4586b92ce95d25c5481f92d34f94b7acb442d4ce94b00061b810b2933a503deb87af9ae2af6652e05331135442821675f7901651975fa95d2aceeb0b63152938260d5dc7b468004e4517e9cf5438e91b5500ab1fcc49a4f1a85f7daa118bd5cdd44d3c34bc9651fa7c168de4f2584e3b45d4f9b6b87c78b207d17ed05d796dfa3165ef5fd13c629024f0fedb1d9119edb98e11eee772b763feca48ab88fd73d0f2a231951f313d309609c765e61cd42a2fa67a355563aea96c1542de1a9b9045b84c3f5f547ac30d7443fd2171f3f7e0786656cb519c36b9617a2d90e7dfc0119b171f15c23dbe1d85f537243b0d9c26797271b6e97b7bbd7c312209cc2936337ef1ddfb3921ccc2992667cfc5e816ce4cda2cfa520d7ca919a4aedeee43727d87bd2ee0c4688c9cbdcf8cb611d42354454c3458f47b8ced119a3234be6074fa277477427b76cb1add397b07bc920b2734a879953b733f498b2985e2a36db885ce227618aaf7a5c5eaf53942a38e1507ec1c64b77d4779a"}, - {"0000000000000000000000000000000000000000000000000000000000000019", "00378ca5391158478a8ee432e3a62bb1b98a1a96955ee08eca2ab20319fffe8604c9510d56b1fefd643c0d8c16581b455cabb62487c87d3f54cf534c1f0a0a0e137917826b4e35866f7468d472605a35209a2e7c06b10a019177ee2fc8d336eabdc8802fb5f9de2a520ea8cdf2fc652a7fda9240f59a978ea3b482bdc82e09ec630dee6225ef956340bbd4a6eb6e6953b496ba0e6ad3a9af131d52feb9b15146c263573b65defe3d00b72602e897766501c28b780c77a06367755ea3fc328eb242289f3945b65d4bfc3cfbc7db4a069f12480465456f84839a0df26ee0945c4087633d7c5beb660b6c8ba5726632ef58f9e6db3df7d6ee9bc43f729a0108132ef75d75c5fffd93871ea5a286a906f7dc7b2e853f79e9dfe5edb98083eedea32836afa75998200ca97f7ee2913645764147a65e3de04e0acbd5c7030eaf1ef97e92109f86b862bacb60a449a481d54e3d007406ca1e1c7823bc2bc1ab98583e760afc591e39171f256ffd0f657f4593f502a52e3d4e6f307e96e813fa937ff4c8486f585d0531096782273009ba97d01c1a4b7804177858c5ef87fb60774d8ad2c939066c047a0113abdb216974fb61d838e1cebd2a9c7354c704a6fd42dd0a15d176cc60e4a2636dd4536e67e3db13d0829f439181cb506df2282592a2952e253314d714c24c01d99c50a6f49de45c67d15b955bc4b90d4101b85258cdd7c48368d5b43b2fa629d5f6f93afdbd08717430c6e53505db1747486bfa815224fefc12d72f001b4f0ce7acadd1aae30f6cb21ffa7bcaf435026109e33683daffd9a327f66218520b4e94f63ccc761408a3af75dd00736359632fddc024b7206ddc798a2c975d19ed8bde7f557093f6842bc0a1f39b73f08b154a8d74835d2e898c35a7d35eec69d6356a59636f1e6a8d4bc11211b909a512c6971fc8fe5aee9ba78e0060e993690bc3dff3a7646f6fe31f32660bb579040ab0cb8706c6f46d0033821bc4efd05612bef6f5c4090fa38fdc0a3e179732d1c846ae969ceea078387039396be647d4b133bbc6a88101d0c43286fad504ae1150d3c3451f3bacfa8ca39b452c45c1f6a3bc075a19150fdb575362010f11750474cc7d5af4b9ff46fa122ee5f6226f4cbdd1a8d6044bb0c75dcd8bf9208914edadafb3ecfe9b718601afad45e36a20e01f25790212c1c5441b41135495f46c6a606b1923da33b8fc09c6ede4068bf05cc20d05d121c4f149c3e533b4bb10cc15bc21c75c5c6e8f853e59bf41bac2d83b9a95158cbc57d3263b2188a3535da7ff1c7d20c58cfc3211d28f4c748b01e38c62232039e0e279106b7656203e2134bf28f6da83e483256585c59a22c659dbf9c3239ba2af7ea018838f81f23e133836512f6b91ee19497c653a77d4bd10da689510c06493d94bced10cfb013f5f86540e4095ab4610b62a4550b18a2676ccec1b8891bea9dc840dc8c045672ab52b2e75085cbc9211f130977f08c7ea7e2312bd51fd024dd95197906c25a22fd97d1f5205d48ce8f575668d127750bc6bbb0873b077972fee59e6ddd47dcd6a9c554176ebf0ab18bd5bb05de6375d57b6a1b339ade071bbeed3909a19be419be08de951ba6cd3179fdacbb8fa404d228022ded3352e94420efbaba35243ce998705a49c1bc50a1bd30ddcce403ef304e1f8ffaf8536f29bbe44e60cc9c0991b1e30155bf4932403626f0988c2b6b5ca1461a4f792d5c5b8e886fb1e0e60f52edf08fabc752a22449ebdeb1369897ff723f843177fa57bfd2d9c0e097279ecd82c576a4f658fdce65186808d9a1a10160b2d5c715b3beaf5e3036d5afeb58377083c3a3b1398d509b90a8088dd948314a1681f6e095111c7f24985a37c72a724637ac3963be8cf26e2002538fbb0"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "00d28007791c9af38960c140732c62051a49c9cdb61d06ccfe6019b51b0050465ffb376fa2489a7de70417f2a6d708966313dfb87284bf773a40aec03c6a603d5c4f4f30201df385c8681a934a8ca707611d28fd059a67f102b476cddeefd2e1baa082431a0abce6c31f5779e77854ca5fc2e701f76e24b79d837d7ff2d63e29522ace5584b9b3dcd44ff623972637841e217742db6eeb1539f0a3d27f9593cc6ba239b6c35d822304ab5d630f2853b5b3b4526066ced3d1e663b8471b16a19ab7eb92cb5d6d5a121264ab1b4cd426368d152794fb91dccdf9e5f6b2b384fd7dc36ef42b3ca83c4f1e3d2fcea6a589cc67f7c602d7871e21be3e76d00af57e5b0aaf624dc0aaa758e0d177a6a452d990811f77543e8af3f76dfbb5247ad47720ea089fd85d020d936a4a68a9e1a1ab4643c10fa40b7930e94db285109836c69426c7abfc9951ea55cf9b9c8cbd4fae8102ba4d7853ade2d1cb71d376ae1ef2f3647adc36f91b23fbcbf02bd231631bda1bdf6f8e2eaac535e4aa0f1c6be54a8519bb40adb3d4f97dd8e1ef966fb8511539713c72e57c21a17ec7592d4f33eaaa8bbe74070b756072461329cb306880f6907aa2d0edc99a03121ffc827c25a1ce5da0fa07738860799a4dc77eb6400c31a521467c192dfcc734327e768c22fcef1dacb71bf05f603462e2e73bbd39e004dee232e7e19b34300bf9d87975eec8d3cb00a3516ce1753166490fcf93108026435b6c2a69886a13b122aa3a210724d4d0f5183af1579a9012c705bec3223cdd599cf7f39b0bb243e5bf4784561162e1db25a8e37935aa6832bfca1313a6734c4b8b4c5e90dcb5410942943a725b5c18b217dd9fe95c6cf635cead76950dc518f6197d57c00116024f34b014a7b9241e8276cf1d3ee0d33d485b2922f4c7ab63111eb9b898451437b173da7cd7d4657c01064765d1679af555059122e8eb89e59b2a0e51fe19e55351fc64beb1f033773f0457abaaf47f18dd781347258d57c776599238a243d1767f0e0aeab1112130b4cb887d232c11ccc984fddf5a2b4a036e3444180451c7b7a79d507fd3dbb15e6a4641e596ad938df478b954fd2728cba9bff22883057f90fab1f17d9c420db4547c913b2b75d9d8e297ea28830709627ce55f2396a19aa996dca2f574c6cb21d69e69c4867d769704548c9283a214d7acb2e1bcc576b97e7796d57d9d2a6a05db8469fe039d70656eb13cccf1ba4dbcde4e130d78d88a351b45c05709c89edbf9ff131379b010389f5eaaa29e2641397fc81d68563c0eb0979e86a608eaf4fdf148fcc1426f922f91ae2bd6e7e8bd788f0b0208b75cc97caae607f259a52bde34b0c4aa83bf2eb8197a3b52b62bd1055a684f7a280edfd199697b5a35172a21f1f3b7a84a0e62e1fece9bd7e33f056d045ab02741eb25598631606a1fcc26067c9658a8f03e541fceaaa91755c06c165ec4729fc332e8be63fa0a6182dbcc241dad5773e5d777fc905bb7839e0b1128b043858d9f8fcfab44a5a493cab065ca12df9d0e0b399ddc72d0a16edc2262cd1ddb460a030096078639b1ab251acf1265aeade437c131ad8143218c8a5b182fb2cabc5b419cdb5c53e689ea67912d76d5fd4922badc05e6d25cd6b5fae2625452290cd5b3fac3550612c7b13644386c52d2d1438b3a4e92c15e7b23de343ef7243637d331e545b47b41e71adaba50d7992a13d4e9c9959341512b28d5791cde58eaf97b7dba73546963c1051b2f3957ecb58257cef9a65b1c1b9f6906f1c75c02a7d323e02c22f86829da5d233b7417291319057624891a7ef565249afce5eb3df619d5fbc52874c95d750e55807ef8029234439d34dec52c12ee2f8de44f929660c73674b783e16936c203ed17e1e7"}, - {"000000000000000000000000000000000000000000000000000000000000000b", "0052458b4c50528fd3ac806b923e9d4903087faaa153ae9513c35a6505e32c37aaa9d46f171da9fc4b3c1c035af8fd5bb97fd1fea73171c0503ddd9639c98646656605f41a6b27f26fea75bf7ae76bc7ad3ed942048ea937d5a4b0fdb28a165e31eeb66ae9363dda9c6e1e85a2c5e60b95b0a61d1f9879021371c9bd3bd40afbed9bfcc2f6cf86fbc21e36b3163a3aff3faa504d002595211d041d2d97586881eab5b26216ba35be0179e791e2db66a71a83f040070d246617a9170a91148eb58f126b86f1e94c956f5b3b0f0a5a2fda62321504b59a170cab78d852cb2a08f707ef037a5fe8ac35238bb4e9646e21faf8c38a68b791db5c9c7fd23b126a4191b747a93fd9b0817ecfd975b4e60b734dd16a143d74c0610ce14c0b68112a7fc9fed1397b00b32081ae651fccbc074805a2146a3344aa51925678202e037e87fd2ff475bafe633e96bf12f57c74b6aeca024d43046ecfc7c0bc34a1779e1ff531317bfd92a313795eeb53aa97eba52a027d3d21e754c63bd1989922ef5df2bda5004b5277259009d90861a7f835ce5e32cdfb578462c8b517b9b36addb373ed1b8f785e320821e292c286305ebab672fc2eaff4d96fa895ed262bce6eadbd2b2e7f7b2b59148f61ee7b14da7cbcf91282e95ca8587a93c475f263f3e114e0c097759791358956160e5a360f9f7506d7b8434a8ae7709c2bdc039518d6a055ed41b624c1d08c3891b8b193e5b2b836658e6eb41a1d1deff29989247b1ada95911cd6db14eae39904ce9d79b737b3586be9d3c5c072efc24b3d7a7c45f8104eefd1753517ad462a722ec917572e13f7dce6674e493ebc03642ba6b839528151badf843181d76fbb27ab8ba80cc89f6e4a4992ccdd3af0362ac8ba396c4f19ace7d536fdb6711a16f89a1b13d05a115c14d567f939fb1c56ba71f8d75f385d9c92ab021d202484a4ba91e406f05e744db19889dedc066e44d01a63862fde8db5343659b1e0a6b199c195ed3623fdd6d2671db74551a40514a7f720b27af0bd5237289d6162b9a1cf05b83e52b1421896aed6f57acbe612bb0928121f49e1af4be1759a355a34fd39fd310b1f3adf3350d3a4db08b941fe3346f19989a4ff962d15b359fadb689be78c00e278a7d056d0c39d72e9901c4a6a83221aa42b20cd825024fec292164335e12403224603b88ec912e7ec435363367bd99b451e75a0120db8cbb2051d884ef0c29a6b21169a7bd49af7e3195a05e5ef5181f14b3f538797b3db9917e9d5693b219e8d1c3f0d5156afb0444ce6b81eea469233ca2c09b6c08d0128eccf505ae36085f3109af5bb58e2d61b75fcbc869991dbb55fb1cf97588a1e471014cc280f32b1db9a1e78d5f1bf03405aeb59ee4157ba290673f33c23c5715031dd84c96b675bd90ebff459e9f20251bdc256c9a27d175c892055f5342a5756763da22d87d5e20e9437f3605155819c3c43525b47389ff508f1231c81ce1bd74af822d441ebfa691963343d66154760c14b59611fce70f35116e1dff29353be877e10989529a7cd3224aa86b120d466359261215ec5b9131e0e61eee6e2fbaa5aa88b6fca9ca6a9cfbbae5811ed95b6fe487af466f6d1dbc65eff55179ed4ede01515b4273f387115d4f2170c07d4bb6669deda428f1095aca7b15169f9e82299176ff820627c783adeed3e6d6cc05426b7255121740247c2566574a859b06b1507dab3c11164c59a8ad22e32ce733e35c45f79002aa9ccec3937b32de2a4e61231e9170a6a29344b8113b1d1c05f95d355bc2f060fbcf7b8258aec1defc41f3cf6bea7e97233b324763739cbb15daa9034347d21602702f8112dcb15c7678d8371a6fa6b2f33a1ad3b3c7f4c9c62ae93fc1a33b4e3befa15a3c1f22d5a"}, - {"0000000000000000000000000000000000000000000000000000000000000005", "002c16d9ff4adfcf393db54e00c203fd5cf5942e052b1f2e867bd71378d2d4f57092fd52873b345ef4c608ff8460bb1f0931ad7072bac4a9be89197b1209651b1d15d793d5b0858ff79209d54db17b29e31e1d300b7a1cb19d5550435bb7446fad775343a0461f763a2a2727f4235de4c33135f2af73cf066679eedcb9a30c4b9374ad123d03db18b57ad9c52911bc1d7965891f70c202154b75d175ac84b00a3b86aa96fb14fa6201465909f940d3a58329f5ebdbf9da4a217af4c9942d477a31238d2c4fffb04468a4599dd269c35cf30e11cd74fa4f4de5ac8218a5bc2ffdface628e9db9e912e721ba57d0c3d5fe21e929dadb8966c0adbe6bec06fb54252386786bd476b0caf421e96a5e73dd090a1a5a5e6f1262f4031e70294fb474a5ae5c9717f0491726c2490594e83f4fecb2dbf7186ac1c4e43e75be288a2432262eff5dc40674ba5d41bc3afd58bbbb450501cd74e301b41c39bff6d79961b21a02a3177c67145c8df958eeddfb8d48083265ec88a24ecbdd9c7e141b20a21c19b31b6370038328df465947df56968c17ecb3e3d65ae5a11672c5cdbc7342b5942e5a1f3506e365e3e6c3cbc31c3ec13ce93f0d59f43abaf52233af5d3d765f653dfb7335cdf47334224e0b17c372155eea9d93131ebb9be0753859482165dfeb53dece26fab693ef30b6d9db2302a81bad8f2eb63c75feea052d11c22c9a1d6b8221f140ffbcf6407f75a638623182270ba69ef8c93b9b65a379dbe9ed87211596451a8cf4b08d4712d6393b426fd4179144c52ce94a9427457bc8e1a3bb2baa2164a48d6dfcf1c2f8fa2e82099cda969fd6d81fa77c110a6cf6a92187495cf41423996326854f3dd4ad2fc37be9f9f4314a70ce58081108dfd106c9fa9b654821e37dc1841a7b037805a839b5b4557615f175871e93e1e83d43cd4553d0f25f009da403e94a623e6f2b73bf902e1af51c6b73ec330a3a1a86f3e8da3bf532943435673b5d6d4c708df90435a471bd0c93f55a66f0897d14ff516d40f15aaf44bf426226ac52d3e200c4b6b9a8440d482bb634c201fef97e2687d9c705e443cf77fe50d26628beaed07874bd40b9a499d5a99068936e5cfc327fd3b7f7301aadf300c8abb94fe950d1f231a6c6d0d1f06ac991207aa9a2161e2a0f694683496cf4f23b9ed8bf613b01e2356c0937865def5952a2124a6249fcd2bff53b0a7bd365a4518bc3509271336e442162afb2fa1c76114bd712b44dddb9f32de1bd0556974d4ae8d30e3d6497e573b4ea3ed99ac7980aa16257a7bb8e7f15630a53720fea8d9ce78a6e033510377b4d109bdc083947264a3951180beb929427e2814eb846c24b3a1bad0f59c9ef2c077ca1b344f3e638260989dca0151c2a1424f113ab9937bde5b8d1990b58c8c117e67e18ca01f1fc29d25aba4f81a2f30db232032e9010d5948527bae16c3e6e9539be7c07744dca3d323ed01d34c9050be40f2fa49ed73829c5af1459b8f9d0ed1fcbf05157ef214b28bacbe0189896eccdf8a3ce613e8baa04ec26d14fdff083a0f1d338c2c48387548d1b5b1404fad66ed0d6b1df43b031b8c05020dc99584879db1c72cf8d07de03eb678eb4b1deefd56570404d40702560714738f49d31a90e246a2aecd6d53bfe586225051c379781d186dabe5794a923dfdb26acffdd4ff40cfd3f50abb9d587e9c9f453ba484f35a7320ebda81b4bc482459f6e5f6c4c34a88edc6039d58a3fa6223cd41efc9225b8093805b444acefa91557081e863412d68df538171246d3ddd1c18d45e3e5325157c63918cc52e317c95a47dfacd38c2f58063ac82ef6c8e01a856b9270c75e31fb6f223623ce37209a1951abb81d0c3a9009d49e555eab55a61dec2f91b959b78a5e"}, - {"0000000000000000000000000000000000000000000000000000000000000005", "0032751e3a39cb33ec0bf2ee53df80315fe5f3a5b52fa9cf924e1303b2b1e5f9159a5e233e61cffa9fc804de9903c30205f5681676f829ec35ee5b06fe9a3b177057f3e98d417dd42ea8956d7b6cde7cdd7f59bb0c49394516a75f1d57852381aee1eda9510818155a2572f1b7a40cac07dba68431055fc696249d5d54ac349f5d6c84d09bffdee246d0d36f26a7a3855d56ed5776defa05d8ae3f2e42870578ec6367a946be87b300db64635eccb974c72ad0963a35470abee338e8961d6c26aca18d450142d744693b7f0d9e7bbffcdd531f396e2591e6b59785f4a652335b65ba6c6c9f7fa0390663860d6706376d36c3d8b26067051f6e9fc01f071b7a80a1cd6688dc84b59c596944b97690fab40751ff137b2be45207d35ee571b754e43dfda5549fd60f6c4369a96e66ddc64e99ad8673a83acb90bde74e1744b3de8a0698f87e0c866aee3833beab663ba7960355c9b6889a98379039863dd536f015b79a9c46450515f79384820773cdeb25142ffb60d994534ef1851974e8f15b1e62375bb1b987bb76f2136c469badb428f9fe9ce9d61e4f32b1f4df4fb6c71d8ccaf8a01817f2715ff7683a4f4d48450c39b556868ce5977ca53426fc9829e8ab99673c53a4367618da6d1153d8ab19f282e11f599e5b8e1f23d884f7b5aded945ecd605cb07f12b0d730456792dc1e45e9c173482d9eeef803d573bdda964d0ed346c077c88706f053d9e95b88099b6e6ac6d1a627f7c5a6089dc2a7cf038bbe1d70054edee479d2e177f4993430ecedc20ee15657287a353ffe5dd6a4a139b8a1c5bab06aed6a40affd2966202fb920e7cd92272b8305b3775f63c6d8bd38f128364613a0909231510e3336e103fe8395e60cff191c6513ad699cea8a81858886dc1cbe662695067b8f7e6f3e95005bafb157fc62888debd35132563612f290037f8ba19d20217990ade912b4651d5f6cd11ef1650ed076bf3009c631b6d357cf6be9f67a22bcd5c383098e07abbf56a5fb92d5e3686c69ae22355ff8b96827514dca145ac0c9c95cf448a0eb85ef4d38de93a5082e02a4b56f156dfc7ac17d74cc45246029cd1f0f0b29dcb765d163ab8a4294a688b2ae3febca3ffd0310dc570c9ece18511acef731c7ce26577a115c79751e6ef12dd8e65d27d7a4d35da2586942a7025889f7159a899fe86c17b996d2918bb0a6daa5be3d797311216d4e378eb02fe9c25552b9b451ed0248ce92979818c89adfcbec52b1dc74a2cc4ae14654b5df05d66b330a971fc7e0a3d34b99752ccdb2041ace77fbedd9165e96d9ec870ab93f4323d08bbb4399f1707025ea3d14f3c39a2066e7da34d4071da4d4e90cbd6e7d3631461f7784f0188db6a014a0bfbbcc4226f61cab1b43fede2edad12725850b3538037eed79c64554edcb03f0c7b17e60562584e2d08b8ea47f5035b6bc3f495e630e624597bbece6abd6a5a47037d1c503724fe71f095fd5e02e8f43b27dc60877772d86a290fab0954366e36055e8877f6c4536f61ad9fceb67f75e08430b54eda0255a5bccd836c3bd5b25374ddd62f24dc62040eba5e116a25352d2b2bfaa417089db17f7f7692659f6c731a8f7ddbabb65c5433feade74b21d08b658ebd361252375d5bbb8568ecb527599f93d34add305005738bab9df35e4b851893b65e1519bbf30031911b666acc82ed23bf20b4aa186eeb956ca6356c4bc081e698b0899616b5f89528be9a8b3250c3911fbc1442ef3a170226e1532a1e44a48b10519755e1b7b4f0e2cf45dc7740567e0511187eb571b33de7bff90c91527033cf18ea6ccf90a918d46225c973b3c3a43d230862a10a412da0f331dd574357c24c7933bdf6d1c6d1bb3edc92de907a999c9e9237dde5f176e38f11c"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "0011bf1912836180b8fcc2ea619fed9164f137abb126b94662f5cedb95e17c5a89377fbd5ac63abd8774389f3fe0a2d98a691c40954d5d33c841ce8495476841a34bc379d1e57ed75a68f757750c9764b81fc2f10d8b9f4211d1cc3b23cfe21d5b38b464e2238e17124629c70363922febe4e78739e4694d56e373bfc8bc1e6e53d185d043d1266896a0503c7dde717cdf8598382d979619a18cbf9bce240e93d7858659837bcdd5032d113ee70f95c5294e522d426b807188b6341fe809423f480f16e21b310cc1670f9c6788756d0ec1ee056466fa84e7fe43e44f632b7b42c984f55e4f3fb30734468e5d491787950bb319409b370f48399e8b6a0f61bb22ab1ef4bd4b3ba5237271be9d7468dab9440fc90eb2d4c434572e5962369f15e2d1897572cd022491aa9cf30dd557c547648d68758adb1a0599015b4de2daf19e61ad532a45a8e641f404c25a7e99237800cb74dabb4451e8312500a290de97e9b25f9425e735d3dc921324cc9def8ffb63065d4106f4e11e68171ebfded11c756e4bf44b42be49f1934e1850f233952d67698d3defbb5dad577861797e6acac4ed7e13b701ae5558b205c58ae2b5818b5e5085c4bf27d1404a136d292cf111a5df0279128c2579aeed4eaf5d333709bb25a51b0a0edb781a2882d84fa69e3a72deb647341d7bf18995ab937b127545d836f945a775ce029500fe028b510bf2b88a09f0741263b34cfd324ceeef08ed48570fc8b91dd21a112aac59475058893e62bc087a81f5c70395ee496463a687344e44ffcbb422483a52bde246136a934469a4a2cc33ad6f57269f5b5c1351744e9c9b28cf3cc9a3c6e8d3260715ab1ce5211645fdcfc22eee45e1f2f735e77b6c41edc05647ab19f20a6a2093d29b145b9686e4b4e705eaceb9d6b61cc9e587c750174ee62f0573ece32d81dd5050651600b8bd4df6644c37ceb89313107c5ba972f95ad7dc450dafc1605ed27153e9562593d07213532f5e386808a85fa3e926ae2fd589a52b672ba38deecadc98df12603fb3491ea269289902587278413cf4dcc944510b0eb29534959a58f3b001141a94f85635641f81b6244bf15599da8cb2ff8fa3bf65aed84930906e212b2cd8338171df7f21d74c0685b4de015f3864bcde9935aad444ebe9b2038c7e73f6f2d26d7a932c1990b9017d86051b6d1de7c56f11cf759b2061ee4f7d4d1c187d579093df28910015b4c701b6e99d7dc9bb72c0136eba50569242097ef321401ee6ec09ce74f8786129f29477af1769056b6a54400d7056e18fbd5e18d403628e1414acef91a828798c2d66486aa194b8472e11ccd141da1c8c0f201d524f735fb0415904fe8ff5059a7511c30f6b348c2e41b816b47433389c5c6bb1137d7b9220199c53bd26c322fbfb95dd114c6ab398024234c821186ccf02529194abb54f24a1919c38ee0ecc6e09fd1bc71757ee43a86bcc5039640ef36bc511b019e0f205a97591d5033916282da4f7dc574a631360ec66c3f35dc3f9803b21f56e414ed394d94e5514ede93325af95898510e24d185db57cea940b67f72aea04287fe1c7f3a109c2c6d0209e7da645b2cec22c43cc8107cf98c0d523560404c9b382ce07385c3886e01cf676ecc3398fa8aaa612e82ac6c797765245053d5a2b7a8f88188abce4116cab9fc5c01050ab122d8c5a0eb36c1c79c6a7348481ef5812a878f98f5c20b49c75e38e25f93e09f58d235e8b01baa0f58e5b225f4f7722181a21f0ea5269d0c4ff95e188322c130fd7438d44c5f96ec3da96d73a7cc6c398b1fd0dd232ecdf2304715f73e1dc74315031c65e8d395eae602ed0d5b181b280e7a497643184455e539728bed85f51983c73b11614b1782f562e4e511565f5623919cb"}, - {"000000000000000000000000000000000000000000000000000000000000000a", "0038eb021cc0f84bef144056ee57f8b19aff5218021802a424386442f169522412cf3ebda6979adb25c3157b00c00a26a0c5edcce467d3deafe2248f31cad517928922c9df9141800493e79c2da91eb1379a65da0b2d0415c1b436c3d664f12f0236a9cb7f3bfffbcb2f1f3f38136e740391e7989ecd56137a72433dc8bc103ad7c0a1d2d8a2e925440272dec71d5a63725e241b1ea7c2296314356ccc839105e151fe410b1e538c0d231a060b2d1781e921960eb27b8e63190dfa71b54be166e89a196278dbade5305962d9b30b547aea910d6781d4d4150f74fcc2e567ffc72df260d4deaec71a3fe3bf8f9f960311b1143151b103f50d70ef65030fe9946d608ca791d31ea4732aac7a21a6a59d3a2e5ed047a4ae216cd51de88658a63ee75618099af0ee429396d180117bf7ead1776dbb42e6c5e0899604bc74cf1c3e80a703e3fddd979d915101de0f6835a1a801d39fc7902d083d6b8e742b1b6d9bcd4aae569626091945f77d960993481043a7b7a6edc157c54e219008072d5e8e923f2dd9c76225b33615348a9966be060dfaf3bd29c80349b6c8e1289fccc55c944789313409ff233ec14f29bee50894ddf75fd8f982464d81b110f201437cc9f359b9727117a189681970c39a67be104580f8f94d265f405ec2ceadf872a6ec211768aa1b363de9948d520efda32546d0688922d66b7b677203e7d8f35e150d8ba610e4dcf3cd3f6e0ff673e94e1f27635982e80409fdbbd38153c1af521971deb3f1203cae534b49ebbe5e3c99bc2d72ddc72b599f1ccd2f602f012e9b0324e3c1f470ec5f06627c88b4ce0c0a14e69e10683c97ef05380a78ea9bd7119bbd61581975e71927d15277d5a7721069a5e5b515a1fbfe8b1d05f47bb01bc1f9e1f8e56044b338fe51d0957196230805262d9999b722fa1604feecdd7a2ddd159c690112f4b0344708691bae074d04f8c2d2838f3e15c90e20dba6d75b987f58fbe12fa1f35a0eaf6bf9ae4307150d0137c88be48aed199f1d4d739bd95edfa3672eaafece7dfc9e77e83594b708de8ab93f44f1132601a032d9f5a7388f569654cdc3b8c5ba26e0743c8e2f77ebf41cecea9d9f6dc5da9a497529f8115f8ee103cd729ed16ba6b7bc7a45ab45c401870078190a2f1e11859bfb157c30cdea552b1f376391e6c27e474b0c33bdd2af8dd032701b3391a4cd84c8f313fef06816076f9ff15fceff1f8a57c8296917068e8a19eca011de5ae2925f813987c962485db3f0c97c1ed430a633ff2bacae22244535ecf4848bb0b699478959c8a90ec3bb43b13173f9aa2004e7fbb503adc84c12572358667cb6621eb8799603a5f301ebef9750313fae8813bdc8ff5de34043c03fb257865aa2b4dbf9ea923415535512efe9d787939c3635bd7703165fde5a875f01205c145c035c4f9efd91792b58930d8759f913fa012b01740d9c252d396523b6ae5203158da4bd056709d1eba926e63e53cc85a59764fe053f2d24fbc2bf177bf2ae3712d8dc9c6db689fbcdf6727af53bac521af42ffa865ff35f2f1033390f6f1bba39e25670341cb86f2bea907624d0a3e1d9381c4589ae661241972d249fd6b0297389ec38e313e3fe990da78e1ca0f12eb9daa955cfc33591e1050859f567ad4416ee5384035279ea02c51eeff5dad2e250b842369d2f38d22a07fe58ff95a748dd6c09c3621a666a4d327709b4be23a96e481d9ce0430186625bc4dd5018fb56eb0459387f549745564855307e5516c0ced90e231ed427d70913f405388ae8133a428d61e478039781393c2ff21afc75732c288341e43a85668ce2e1ae601914b9221579f993aeaa26c1b94ba518f27ccbdd7f94d717b51620136cef9fc46b39ae0a3715fa4eb2dff8fc082a"}, - {"000000000000000000000000000000000000000000000000000000000000000a", "0059f24db34904d0ff37f09081fb9b9b212ada87a902699c7a54160bbcbf5230585c3227904b9c9d85f812ff51363488265da41297c49bfbd95a5c2033fc074e46ec02e265dedfd4f9e54e29d2a7c56fc79d5a750f08fbfccc4eab8d7b4831f5646fe5265232f77e363011ab631a9b86c5d79d23cb752e4a921d41d4e389271372639ee300d3ab7b45b932bb8339ce9a56304a3f5d8c289dabf2838ebab53edeb36e81551c3d95670944948e404d63d8d74ac10e8dcc0c246e252485ff0c7b05b3380e99138c8ad442f7e9e81e2d6b59cf4813d9e115a06153ab20c6926e093e3f5e6e581f51dc1741c6758f1a46b10c70f36efea17356478adfca500ea3d7b322e9690ff79a12c9bea432d0fbf9978f7123023f4b5b60fc4793a3f5485ee75145e10fb81e122a326200af15fa63e4e296b8b57f0b8e4ec3bda24c43134fc9cfd1ee734ebbf94750ec5fe668f1b3859401a24a251a9a8db8f0c1e4f1285c617eac365896e3163ba9a0aa13ba9d3cf5f2aa679de78dd007ff219604ee70c0d4590424f6fbf069377656f4a41b1da472362a3667f4181bb4c8eb43d965a31fee059ab62e7b051c0c22b0e456c9dc95e563dfbb58226d03f612350a649166dcd281ab66a9c4374b7ecf2e1c879c65ea0d9a01d59bd929d5cca6719ed49252f07367b640b4339845f4b05149e6c4b6e42f11cda735b28c99696808d39db557a4bc73ab81e87b67e32f8e8cf3d94a5d0de591ce2b5ae9d5aa66b2d7f1245c95932758b3840cc363ee15e73e9fe111d31180f9cbed888b769ba931afd3117be98295b7d467e7cff8c8df374edc97610ec1a1eb0047a9baa42c916d652876019ad813c3e22203bf654850f8e4e37a2877f4ea714775e5dc558213266a0cd4a7c241f185d7cdf9ccb55e9778ba899d16ac4b3de01c2a2f44c095f5635c86b62db87d80f60063fd672ed280c1f69f56ebbdfb61d2b276dadbe7063d79cbdda2383950f5b69a3cd10bea79ee190b5119bc53662ed8274bb9fd97ea7ecc38c773323d8a076422f59ab268616576e5e73104cfb0b5ffcb3f98642122d6deca994ce70a6b772e3a64a1d7bec93fc9092569b998f48a240fb148428ae653b01da1b14e6c9824e04b14454fa84557a5376422bdbd964e4db6b16f3e58ad5610d6617943a3657048fcdef5ebb2b8841507d6ff8c7628b4c1a95a91b0b0ded10d617a3bf20b191c52baec12b9297aa656b791d82cd390241ef7d2379d4fd19d5fa2dbd855848068b4128665535512d266643db7bddf3bc982c6791e22e1bac702d559deaf1b27fe96e4776029dda303ce955277b61c0c1cbf7230213af957d51dc0abd2d30ebdb2535554d21b88041caa2ab9be59e432f80184a10cd7c167161c7e3aaf5cff6713593086e39cd4296034cc84b2c0bff8bc2a02d363bc659612cbd260e6be4cf8beea47fc7addbd1eba3923b75105a2f838647d31375ba2afa47763660319c6a7b85a8de140b51137c2e3e5f1dd3578be800d3a4a2d9ddf49495e9d9171ccc3525a5fefba63a50659a8f0d14d05d8d02a73aef89f45eb5ce03ca6d4087a78872162afdbd2916282d86e0d798b605909661c8bfc8fbe6fe5dbd04ae207544dfdc1eddb51462b41b3eb7222a9cded69dd5a21f6eba6aede261a4c4108ff04dedbbb6c07e3cf51da9ce977f2222293c0ec1fa266111aa9873d8f8332fe0fe8260d49186daace1e4c8b2a8190db531af843c64faccf410dcaf1a803880cbcc870e643d1a5b8e9f7e5ee9557c7347e3fff0946eb753384a12a699382965455375d99c21f380b196e59ad3b9e8e9d029c37bfc0c62e96bf5afc012d0bc5841c825cdb99714c15a207d0843285bf5e1ff3126dcff6a38d4f13572e25a445e71a1f70411d8217"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "000f49fde70438c5885ca08ec3b6f7da1f4d1f0b4d2718aa57a82d938374afc4089c7cf9c1427f4cebc0069da8873d42feb02350a14a16cab6b57ff2919ef426d8d726e3cfc0d17a7c42a16ab93c917544327b2207acf871ba2282673a58720002f8d4ada0a0fb3ab73ede473d63616ca9f8e6742abef6682abdb7f6011d1ae2ab417ddba0c54105a530dcb238935c127ccf973291b22a59997969e1b01607b53ad96290a61a137401cdc4e78f48ec7e5d7a567c713d11ba2627be8726057954ff720da4b594dae2c8cef1856d48a5be9fdb18d6ef006b173dc964bc91a2a2799c30da3fee4a227a8f7f69aded552bcea447aec3ec4011fc4edcad1c16c4147e02499820afa0a4597bec5eb21e7f15f94d3735d2aed5305f098874679901fa81af91e69cc7af28ad5a149b1eab4b41b396f6a1e2068ee92dbbe62055d41ced2d23c4e5c6b92564c7af027723145a50aa0564ba77ea2bc8affa37545300b983f5d7035884fe3f0fe2ae32594e4af138089533dfd9f71fb7db4ff0174077e70307e43a44f493388868b738d2d011d6db1b1fdd392453d317c6c392e2a543636e78bbf9771b0d448c5ed77c9f79e5a9773a37623626fd6ffc9f3c17696dde295d9dd134a2b2afa1b5c2b33a02be3438209e7938d4988fc3a234f364ed31d9af5503ff4ec334371d14f9aa6ea1b71824205355603eac95b6d446126adda544b3725fc736119ed8a894ad7f0097cfeb40c90b16dd96e0abb60ec46d03a65c8f75a3dbd85318897a8a0e2eca17e79de78750d120da5728ba751d2cc6d3c9d0f394c3c53a64b279b1645a289493b820193f10ee31c75df97a5401f8cfa55f8d09b589d3e741c04efe98d39beaaf29e55a4d7dcbd6522158ec441957ccb226d78dc787b774f104eaae317cf9551a374f54965b702a6627d6e5f5062a471ca15f727c060b01c6bddd780d8bb6e123460b50cd3353100c1be661307fab40e81de787dd926400fd5ddf3a710839d24b0b8d3b77e3c66ab54d51b79936ef33f71d3b3fe9c615865c252cc66b6870aaa63ace7d9b79e48fb8e24904e5cea44ed27abdd748915a6c489a0868c3f1c08b1d223a736ac958c58c9194d4dd43a2715acef1a167096eaa52690a16e0b08c59d400eb0e7a88bb1812c7182c373c33a1d2bdcd7a231139b9e6090ca67646fd06861c74cc68b60dd1c5411f35198dcc9dd2f0a824097d3588f80ced39231d42605343a26298193ca0b007c587ba5b92b961ca64e4f42ac0b215cec41522b821d6cc2358c933fd7ccfe73ea667e12266f7f36f5e113a65e5239b9eed4bf563ccb6efab193a08aa7fa326fa4b0a23db37150b8b25d5cee3106693ac9eb2d9147793c05758ab05e59283906aa966111d7d2ead2c1e30a3ce3fc8ffb5e33ea2d7897235f224d213492905fc91f758abba8bd48ea1d93974e153e16aff1a7e123df5f5d7782b0fd5de057346dbe63334611e14b320b49577608f2c47cf51d2873dff165318389fc81327663a33f061f4bf3cdbe70cf0e1e4b6bc7c76ead20601a9c156524ae1cb32226b24c66b275fbbfb8dfc1f8e9101af0876a59f54c6e1de5a733a4bebb9f2cf13bc01a941cb4145f23f636ac5b0e7e4ec8cddbeeb242e95a74d8c718edf74a5f3b15fa2b9f84bf3f61b08d625f43553fc4963d9a8941ef60edb20e81d7d135185cd0fcfa2229b3c9e1738f8ca65fa745a171b3416f4ef32515dac3effb2d1b8d2509c433dea3f5acd1d04213c7e53c697c23fb2af96bfd7593f717bf68b16bb5682b94ad08868698262e1adedce401edb14dc301bbfc27753bf5df951b58f79de237de464bb9e0317b35f2fad6963df51d992f2b9ffbcc22425db5f713c3debceb194b66b868c540f33e56726d0081ce989"}, - {"000000000000000000000000000000000000000000000000000000000000000a", "004c010637183181b21ce30feefb12be6683d6acd2484a8fe39820dc1107df2521667ea6597bcdcc0c340d8e4ab421c8bc57727941b362b68468b59a8cecf8266fb66ad117fc9103e004ada9ee7db357b73c5db8119ad790c7c9e56b1cc7c5c4775074fafe2eda0fa93494e23161167757b52c046ee45f7791a0b2be6165192f1dae830f6f24bb3311c5b039c4c09be85862cb2048a139fc33b661eaf5b506ef7bee7599be5d555100f5a03dd314e45d054f482e2de0d2773a677ee7b6222a6c35f8d5cba1741d950532c7a97642707bba340840e2ae4c8913dbd5f25759dcee9655ff0117451917ca2bebffcadce7e731845372b783153af52f3d200482db1435cd4cb729e5483680f3c78a7390d5154311981bf2ef30fdc7bbe0614c80c44435a2b13b756610dcda284e296d738d1c5343f25c5d92ee0ad9d5214e8ad2db901c06e0e36375a1584e8123411cbddfef02517e062453da00a7c301518e44287ddea0ffe26a0ae7979bb6114a0bd11180bca110a438761a5cc5424ac646a806725135e09206ca4ff14366bdf8feab12512f45dd78e6e8d96131b51977c239757b6f7376f303da87fd9e84176fd8c6132eaab0276ac9677a4c0b1796025c75eebddfdc19647fcbfea371b0ef74c7d00b2174562f4dd13dec6f968394d0b91e0f9457e69d0ed209eb750ad592976ed245fdab8dc4e909493eee0500a787b68eac299eae849bf27be91db34ebe08452528bf6f7f1d8e05aaff42d1e01e2941223d9688a80fde8e56063bb213e67592ba4565b44526ac8ce46325963a1d56dde1197c1168cf2b531d3257f2be87e106962d44190ec02a86e693cb943bec21277eee6eac069cbdfc200e0195048642a4e5bd1599cd0b9d732b1bf2bf7cfa59ac27aeb972bf1e409a6db3555ee4ca37eb8cd1e7abc9fda8e9238bc153f6a60053bfe16600c4de9b0920f433b3b88136441e29c69613f654010bc852831fcca279b5aec52cc3c9791aa986f8f36b135cb40a90c76da79e4f6692f759756e6d8b9467d13e0a16c9c5d5a8bb94fc34419fd5ea76a6875a5b0c04e82edb41a2b8e9d77eb9122ce6b467151b7f4947306c4504a64d3382f38b0431f7a47551fe66d732e319924d448a0b8a2f0dbef30c22b0857755301ed7ab21031abf9012088ddaa5438b1a30a63e0b75f5c4ac06d7aaf51a50a5672fdd93610a2a0532ae6a3ee76c41f942f3293ac32dd6d4a48403f0d4bd7c801288e80e236e2827088d0bafae8212a3a306a96d721558dd2777c5e154f90b65fc43287d586a5c5e474afb63f50bc019372c1191d7b6e1f89a0aea5cda5734fdc754127753098d45bbc5f704124c2968b69595cc1bd6f11d0d4486f1517be9aae3524c91192ff8a94637e3fe262374912ed139c38808d4c82bdbcf91581cbdb28f010a09e1164fb448c1eb6327dc59ca3a36ef1840c83d413d644090de6fe78c58595a7d9ff2e9857acd0f07a09cd67993cc5ddc69453a38b5d10e3eb713b7bb12d7e1b3339f0f833da5e71fdb3a346a500b93e36f017d8e917cc5abb4b496d534463de9cd814a135c8f06cd9125d502e861025167597aec4c137e30fe21e518d30de3949816cd0450370d02e7147a9578ddd2bc1e5be9a0bdd54b654440440c06e0f3f6b98816730b02771299a309dd828809c0b3e3acd761a4bf5612c4035c8137eca38547acaf9316c47f45a5fdc8f5f87f06e404cf7504388e5e6a92bd4ced268e76707f21a5431ebdbcc7170b691bcbb7ff0e7e92620a00b206f706a36473ee01db55d37f4580627d093ae19f5732a92a3157031b60db138202830917d686fa7e54b7161828e8d51c9dac436980db5344ee9b0c48dcbe731903438f6fb2ad1e7ac9fd73a882ddff65fbc3715fa9b7"}, - {"0000000000000000000000000000000000000000000000000000000000000007", "0003c22776cb2039ba8f4071fc10bf688a79f30e5901395e1a81823ab13126f2cb29440bdebbc09dcb031405e65354d68441232b919110687c49b1e2bc36584786b35f89b1a1f9e24c4493c63b781551e84b244b2f799f33c190176fca11f3d7c4dee2e58bc95bb3e657dd24213bdb04e5f02cd5c2eb30424eafc997576a3c6b464111a34da9854ae45d80a793ca70d85e017452e86d8b7ca2c0278150e5f6be5533d580c8cd957a12d625011e0cfbdbc60203f11f53f44132d60a1f1e1d7a2507a8e94b23b22303f0082dee211250eb675a183bffcffb5361e4e165920e1a1f21b5a4cf9f4c2f3e2bd494cf9ec9ad13f98962e766f7ff484bbceff92472098f98ece179a29a3472ae478201abb351168e367ff516499238c1c24f55acd9ccdc13a1fa1d6a82341073ba27709513f820b56593f6c7871bca18f1374a631f3ce368784fca2dc872e86828ca8f81dd84bf000ee1c05af7163df90ce3ac3cf1237a405c5864331e4c4249f68e811715b583a537c7d0b5c76475bd9101a74e70a9aa6e0d892da1620aee6bba096a16cbc35e226f15af9ac0b7e7cdb606fec9322e8140f8296305f9c19db2511def5d3d64774aaa1c4a16069c04d164f44b9019e2e733f2683b2c6177eaaf4f6c3eb1290de2d0a02d69c281c517f12756ea96f258fb742b2e16fd8bbaba1c4e95344585c57362088e307252782c0a6cbd11b2ea5297de074593eac3ea53e1521f9c57342842f341b0a095bc83435448654508e37b95cb9e0b0292ac619675b55fb07b7eebe1b94b057cda80c61b6f21c2ad4cd255891ad5e5c97514cd9a573f22a212673aeb8aca03df4f7a4471a6c44ecdb3fc18266729fe5d2a73e6f57d70b512f65ade7c13539ebd38ea1b55bd9eab892db5bfdd82110cc940b552ccd4d7e621775ab575e5da67668f6325c73b3096b48c560c71000d1282c1988a6bcb175177c5b15c72a5475ebc7420ce27ed4bd15ce37657c322a92a751d29d19294680253e9d611d48b6f576ca12a25bf3ff0be35d3e79617b9a28ef7d71965bc5aa1835fb3ef9a734cd4019d0990baef09082be2a20ce09f0c2b41b3c9351e76ea4d93440004f16985c354980c9bd1608abfa47b62510dc0087832b350a1a348b7ab29f49a8ebfc0bf0f5b342e1d455edd6a5302abc8cb1f742f6fc3b0bf81fd00d3bab19ff6d919b7d520de9cec961cee83ace65d2bcd6c95ea9ceca591bb431cbda54675f6f138c3f30b70da04c7c5bf276bbb65a319d9b7358a1ccc719c1ed0cde258913c42f994ca724d68efdac956de72eb0164b547d5a3f801f629c0e515a0278052fa42f8e80a7d428dac85992df33617f3096f22a67e58d5b1d20296e10a59c8e857a3cd80855f1f64a82bf4fea3fe12e03214f1d90a1b5cb6618b54f9c074b42f91720e0078991ebb6e6e0d880b009438864698f084d7f618527c1dd9b397fa453bc956c9e2bd2671e20a3cfabb047bb6a512cf8861d15dc1a2201745ad1efcac7cc81d0c1e9a210ebd4dbd00c4aa0d71c2e5b15b4e385e15014b1d530a2fed5747317301beb01d6a31dee56c3798ce2f38563232f2c904f671afaada65dd1504fb256a33ce318ec7e492e989457f5c36ca73f99ddab4388a63267c53baa366f936ade1eb179dc77c91ed3d02aecf67834af165df6153327f1a6f41d491d29fc2030cc313082a366184faa286f7501670f9bcbd28d92cd4a6043b682173f61824c24048267d34a6fc229b4608b6fa57ea6251d97b28988e7c0423b4c87fb3e81e3b571f8bf352b9aad0544a5c2ec04f3f6c5aafed26dfb9e8e1cf6187f12296c7c95f42ff46493dcd3525a8c2a7d66451e7cc6565165f5a4a79b0ecef19bc4ff09e9d61207f3b0b9b38a086e094fe2f4d9a60ee"}, - {"000000000000000000000000000000000000000000000000000000000000000a", "0083fe5a28a2f29388eae26e35e093a708e15d02d30fbe60ae77cf1aa91793f5eef7b4ad27838cddf8b103bcd5611a9a2d67604459c8ebcfec22fbc1faadf223c6cf09378b3070fbf7a26909336224a0b38afd6e062d7e494e95dd8fa555f06d00f019783a308435b842cd5b5cc02a375fc3ff1474477a5555dac994cfad19d695a8c2532bb95be18354aade0ca96fc39af13f33f0ab1207d86b85c34db6436746a51fb1f05d9d8203dd28faa590c0df404f0075c0a1c9f4e3b6590299347efd02157738aff91c845612f6e145d417da2a46283da6db0a77f0bff4e018876e59b66a2bb31daa86552dbb7c572a7b41857af8e2f9d1ef7b91297f0030192f8d68470c4d47bce1946a5dbac369884e4f1d6722766c8e4b9257ccabedb2917def4fece03e756bba4629d4edba5a0e17e5f3d5c4a2bd34b975391b28fc717b0f901a3146639f984da68ef016537aa4fdca9502f8aa2b504c7e03cbe3b15761786b29238afe8e6a057d7f87a160681d331583b3deedb7cdec7a375dc23a3754aa69a8b12393e1742f6cd1e3fe5410166ddf3f6f56bc201f091d05f8199b2c599f0f27801b5f5b0ac73d45a0d8f6d569e2c47175b58346670f7dea2a109bdd38aa38ea3bf1bca1e62ac40a1f79c9ff911b40dcf2a2c79449a991ddd4841364ab6ddfe5146f9544bd74ac332884e16fe044edc87568aad77ad6fce006a0d866f6c41d5b211ed15a849d967da19292825713b948f0ef1da0eff77e526dc2d5098e16f6fbca9a1ad2a4492c19b4b535bd02993ac9abc92b98f055223602be5fc85e1108ff4d1a715d6e54b36b1d7bc9791c3db5c83d9574c75644e252f3fe38190c2d11dd5f27ad5e6fce97e2e79921c9e214e5e332b955d944e2396147647e273d63f75bb4b786529c8172e534d76e440e7556ec515a8b0f7b04e187d010214a3cfbb0a900a95567ccda9d831b23034d48dc94814cc5198fbe4341af319b275fa1dc4718106cedd8a6a774bbaf920ca885bb498d37a4f1a090fd218ac9a0e5006de0ce145377504a1cb27be6dd655d625d74ab47f1fda44507ec0633688cd260cc18e13e535e1f7ae3d199b56d0c74e8a679119babc93fd6e5924a367f87211de97e10fb09b7dced944b78bcd2663dd4aeed51251d33f928f70fdb699b401f47c237ff3eca9233507c1af6a9038ebcf92d8b8bbfb16e13e9cdbab38284f81bd5ff41b8555f1da15fc56d71948aed38ba4a37aab7980e08fd53d9c4d9c6d36592089db17f918a2f519a2dc10af39595e14f2d99c92bc1f9a86fd17e24617820a512cecf16e913a799d41b33fcd4552b25dd09133b7226d5c1ef9dd29b8eb6b9e68f457df5b605d0f31bd130f97de3638d57a50c35368b1764f7a5c907b3c7ea4a11fc18bae5da25fa3bb7537e5f5c11f0ccb31289012a0694ce1704fb6ede913c2bdde9c126769b3cec45a7dfeec25b71356704783a94d9e25edba5b89e7226304c956f49b95ea6373324ca5141a55f143a6d1a3802bba04ea74525a6e4756534d7e28d8bb691abb405af9251445e0e3f0b9be06d4e766550490a047e540a418c204f8b9ed88ca153467b2f646168a4f6dc6410e7b569d28a3a6fffdcd44ec82f7702d4c3f7a7c61715f5fa885dcb91d78c11f54a3738092752e9e225093d5c0248c2eaa77fcae1e874a4b5e587857ccabd0eb1e16b4508a87ad8aa551540fe38b6e393997e1c233325bfc3347d07c67b783379e9f1ab064859c8c02ebbd3d57255ab9377c6736a34c919c93b898e1b530a1469840206d8f650ebf6d8525e990e7f981ad12419a3ce579e6782f9d048d22b371a71077983bc0c6d12d876667889a0c53a4828332fd0d11b6bc53f2cfa3568d29393602daf5c3fa75097f6ce964be15ea524"}, - {"000000000000000000000000000000000000000000000000000000000000000c", "004a292d92017e43b1998a1fe567553ac6fa9759181914e57b4c0f434c872228fb3850334ee11d7b14452483922cdc906b932f42e6635b7d8c3f1d479dcc702b4ae964655543cf09c1d439b2f8f1259f8a6e2126021fea577b0c41ede500a544bc2cf80293fa5bcacf2d88a4e1584e6d1db5be158dde7c32262bd5d7018e03c1d8e48d4e77169e2261cbc7c73fe4e68b1084b511ef67bda970edcbea94f1d9f15570de37609a642c0339584c522d66e1a3587368a7a0a48e630035cab42e86319d4a13bb70d575e3264af98c2a213197bc8623ef45ead572ba65ab125514f5558c6e2cc6ff2a2b355af6e3b6d47609f3baf9544d70581b78519e9a68099815ac0e4bf838773ff3e5f442f38dc1f690ad7e3cc0a68293694947f6e1244a176d5145a4fd5dce5410a0eae246c75e5584f684db59d67d72d8c7fd806532cbc422e369c7338d8ff59057bb0a533697df3ef201cdbcdef1cd3fca796412873936b9d516c23663cc1cf22b7a465dfed55d09a38deed2ba1dce694fb4af13e60c87eb5f1319716353bfc5c39f3529455f09b54247bf6f31138233bb91c76dfc4b2b1e0e23b203b00a18d7ae200b2b36b1b222c5e8d74cae3e3196528f6cbb63d121ed2d51c7a01b47f77887833db65eb4320d27c44d7fd92d159312a504abd9d85d9dc9ddb93b0e321dbc28d6ddcf326b318ba57b42186cdcb2bead03cbc08157430e6247517a9725da03fec35a36d7f41f387ddeacd70507142218a0cf56b0fa48acd477b30b5a2194e59fa4e7d03ca46711cee405994c4f17f817025949d255ffb7f2b1b3b6ec339f9d95683a41d907c85eaa566024ef45be92e773bf8de9c4c6d713cd426febfaf02a7039bf22973d7e4bf4da9e92193af344962a5b2c1436dffc85c8081063850a31d59584566db7aeeeff669d9b4806e9035fee1702c8151a5b2200f52776ecc7bac66a4d20f409d3efc23d55de1d6301b1ea9c66008a37650f6656953ef6efa3a51eac9e22326554b652ba43b5941250fce614169e005e72dd2d122c353e95e80ec85eb7601ffcc6f62a5a1775ba0bfaceaaef6b872da48db2221dbad29d4643ddefdb16afe1bcd920e5997fc5a5a902baca3591764df7461be87ddb034ede1768a013f58df10c8384561fc0f42f49f4c6a42bbd4fad7e039af3483ad6313d7cc024013ecb8d9be951df7bea90b829bff535593cf826f621ba311b5560bbb962453550636a14930dfb3a3abb0ad265ee48180481c26232560127c3759fd7d4f8e21f1a810fc35c570bc4e292c725c15c3e6507bd959e02244b792fdede974a1ba09ef24dd7bf01b65d9e5e33202b1a45ec9e03b8295621174a3842cfd75c84773283768f809044d88da36540ea46780ddfdc7da3543c60d45ee15dd3334e95c442e8e0cce5f017befc420348b91cf90d63f700b36cf543781aa77319bc4e39080d5a1bc560a2070e3872732115d2d0ae0311ac61235d6b960e9c0265d319d7333965080a2075de6a192d275f7e179dbe55a9fb98210a4120d688109fa65b1883473dd80f9ba0d35c63897d766149ffbdf66b742195e947cd2256fd3a930393c5ff1fe9c8f3338fb9211333f9ba55c7ead7da4347e031366922ba3a1a32322eba0ab853384db9a3d65cec556f0a31cd5778cc04aeb175da995c97b5c8e3a8755b0ace0199b0438c1f342a184ea10d491982077b467414664dfb16c4ee0bca4d465d43e233dfc981262f9e1ab5ca8ade7e4d16a95a9b695346cbc8b978744ffa7f7b3b1fbadc7b1cab05dbd920d54bfa4b7342d8f254af03a39d61222a30922b504af72b133b0529c06749bda6bcdda44d231aa32a518efbb78b52664f65be48fa10a616d3c27a26c5b51e7b4bdbf8efca37557868e72ee7fc1900"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "00486acc3bb7ccb1ef88e0b1ef57810d9a401e7543134aa2429e9a0d2cf7d2d38716eb27ea982558c582044c0df2da5ed2297c818150bce5e7fcd3a790438140201f1df0e0a599c8074477d27933b53f033e9479021453a8ac66576175fd6237c83746e30da49d8f9d2c5a97d5c9539069a749b3f7865e4aaae5aa1e24b2447797db979d41656280d79c0e755c077e8a3ca2be54183d5e86dc6175e750f622474a3e66488fb57b0601260ac2acc5f9c1f173d20046c91763072e5d5a5126079abd55a813d5b8683519e1c11f25521ef30c98097e751f2d09b51938295190c27740054e97ac46820dacee07094c0552e2f7a3882328329ee50e9e08341568320a7761437379d87224dde633312f20f8bc522cefd9c9dfd2efc8e952543487ac693ef2359a7eab16cc7c8493957ef957359866be51e4d2a96ebabcc0291b5fe591dbcceb3bdad50c5fce00fd9caa8fbf2f02081c7a2dd6c1958d8c7237d8f75e5a292e7350ad1427858ccdda79e18068b61ade77cf178e597e065a12504b6783136b33f8743572e9fefe1a572236db4c1992878cca076d4df251727fd9a7178218ffbb1a8605b3a7a6048ad4c6719a217d30e7cc6a2c903322ec05d4ef7a7ba20b457a7a516ea8b01ee9acb512cbfc1b984ce0ec963fd9b0a558c734dc7273b75c7e96f92b6447a2869e1a2500ea7671f5499ad1c96e7c6ebc0beb99270869455bc9adf3d9e86f5a4d068db4e0b70ec8a9f252677a7d66e1540354a448f204f23443d0276492588f33beb79ecc650a14d458327ad2fbcf4b3580e22085988d758e497bb1f3ee0f7b35b8facead0c8156ff6cca4345b67b274d97e1c8fa2da8fc7f601e38dff00acf37b0c2c987bc0dc147e626d376d0e21784fecbd20e172b3988e24c18140d7cadd79adc721fc80638699792572c04449ec5e906b6b1ba19677c01cead253f88a85d7acaa2b173af985529315f7a2c1b79215623914ea8b6e6d449e82770a6d992d6f0cb1058fd9f3ba17d09a87a73d08438d07d5d599591651259afdf26a5bc79d066446721687729a5892ee4ea2544af1a38a3f22b6a3b3a12ae6c50caab57f779544487f3878e5428bfca1f5c1cb3723483aaedff064041d19fe10a520773b8da05af60529d2a60f6997f7e538adf66fca536fb6e3ab6596cc2150a22397e24c10527df97475b3cbdcd7121b6dc4fc7cf34533b122206367790a4cb9ac1570580856f0fbcf8de4e5ca7bd15b736a5e2683dbdeaa363d7dd2fbd527ad1ff7b4317ef57ba0a2f7f09d4c4c2bb35a8bb1eae9998078b06c1e2353ac4ba86f61e12e57064343127b76a208c10778ec272296a638f8896547e490f3247dd56f6f414026fd6ba1acb47ca4fc178503e8b2cd51b1eca5b169a53061311b9de8eb5e1e19fd90d6b31e8dfb44705b85191870c15bcd0084775905119da31ff3c45de425fcc02031626c71c58079c776c812a0097d40f432aaf215ecbcefe0b2418e8938c7132463598d1efb33c624327d3535cc70e07a4c461fb1539bc31ce2f79154cfad3fe12bb4afbbb928c0fcc73e986fd5c4f8b42b92a31efd812457029391d03ea80b70cdabe22d03b5d072c4e9e18d9f3fcf593a2fbc48171966f31d14fa89bb08a59c3dd36cb55d954e8f9b39de2fe4c3d0b48a755094372192237a3273a2166d9b6d7156c60544827fa33e94891c50cc609a26cbab2661d39fe992bb55ee55a281c156aafb4b74a556d228bbd3aefbe4422fcfba7d36152e27ce5eef5bbb979f713b820070fba05ff249296c5be33c102bcd48948ae1fb1f435258cf6dab19c8f6b9acda390f9beecfe42e0f8ed7c2fefe661a19fb2adc13fb88adc6e97aa24419a824347dec59cf8190439d690066197fcaa16f28bbf1ba5"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "01563582fec11b8166b4c0401d4ce1f19d74142fea09237719051d5bef3229659a46c7774fd0d89f1221021e90f1f69b447b6a6b22c8c0b84a675ea45fb5fa15abe3e1913a58d3f99943fe82cefaf5a1490d4e532816cf9998b970bdeeef82d6e23c099d01c2323844318186f238d41216ad7094ba17276069a086aed57532282bb70930acbfe2c2a5355ac3e7439d7bfd69013751afd5ed12ba950ffef837cf470216ea02988927028834458a0695ae48a611adcc5b46c22428584a7e0a989a45e8cd9731c1a6a62f914d4551bbf133c89d0517dcf3c759b631664e51d3dec7571f0475dd52ba12b23f90a0236ab7c64026053dda23723dc432bc3002e2e721d2c2842caa50c3dd3676c3292749adf90931e779b4442268d9ab3b93a6424796e64e3d982cb3209282699bd4ba7bb5d4b40cc62641f92f547c47cc2b04e9b8574de62d7dc532c842afeed1e7457c88700f060f1b0927d1bd608bf440ae298869c571331cee2b62078ccee66873a53dc30a7edee26142e3b761a019315d29b892fbe7960f33c324bd4cf168e45a0ac129a6f3a998f04a1fce6a8629034f796785ec3c985611ab71a634d59e1189cd91e2097aec40c333cfd71a2274eb0e99665aa7d671027011370851e2593fbce011d144a1db45168a378704e1573bfc5d583d10abce33c0fe45359ba01186e577f9f45047e6573613373a105c4d738144ef8a827781ab02aaeb14e0798ff6f245afe26090d2530bba4b1564beac6341ade03511be36f7a57a8959cc9dd6eee8aed5e9c60ee1365f7fa46b6d1cf049df89492849aab8355f496f46a5fa5ea811d2e2e521c9185fb68b6251f0cfb2da53af54015411f522679ef14927fa4987fc7650ebb6e699df5e341220b33826d721a342b76586b43379b26d8af9b040306e5c3962df6043cc41386b8947a69a4c039771c3035efbd64edffbe38a3dc6eca15e733a68d9760b69052faab287b65eeff76466dbe4dd3c225d71f3988e0fc451c812ef8b35a73f067506eab1129280797c3a30b66a4c2ecd7a7d4f3974f9d84ba8c2344fbe02a00531df05fa5bbeed4277e2469127bc8497371a5ad849a12d46843b9713f0cf47cf0142c65e821d7d9f660861b38a21ae713fe284842695da8debaa89be43932c84b5d6f163abe7c089b2cd10b9b2d30c0cdcb7f00ff21b7e285651db2114724c57acc6d703301ab3651592ff2f774efdab5bf9864523b9b159c23beef2f823d25603a6f30d4dbbf1126c25e1b3e560ad99a6dd48095aebca64ad859ff7958a8831dd4e70ee5b72f71478974012c5ab8a4cada44766b7e69ad7c4770cfe257f5a87f026f861fa3c745b0aa38152fc3cba97912ce97f1b285012079bd405d891c89f82015cb3ed0934700669a05a36a74bffe5c447b548ae1711fdced604bff52ce91a1e9fe6e4212709ff224d134c2db55a16eae8c1c01eaf63b3fe56191e74290f8c969dc5130bd8ae696a8dfc5c8e73660fa1cc91fde28eda894724efeb73f88c7176f3c37b6dedfb45274760dcea83074d8fe1600fd234b62205c1baee86e72c237e4583448273c8e220e08356632541af2e4cd6b0cd367f0e222fddd404564e5ce01892491f55e3d5cd0855e1bc285e9e80441100d92330c57908ee7b0a043bfff6df060a12b66c81dade10be81fa6245c3d6ac7a7c69e144d9f6f807938c35bb78c7cd5ad9faca11bb5696680b3cd681f14d38bb9000e0d0dae93b092bde9dd4ba2949bcc29e3035fdfb0b857bed5ac0ba86339d5ec6077f48bed86d06259f277507554dee42ea375e2b1a17e30dc06ee7a867bf5135496472636284953d4ce817e8a3db5c107ce7b17c25a545b8432f70049f6c7622404a604a5977a0e092a5ae80cf7a96ce913bb4a7"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "00c71013145f0736fb1f9422216ae7a234167856a71bf8ccbbe579f1d3e3d639195b75552f18cb9da98c00f419408a6bd9ddca8fc532f9585edd641eb00e8a063cc33c6cad4c2b8a2a20e9818e22f9f1db55f3ff04794d119758b05de3fe51be62f1acf0e3051e062207c4f37bcfdd9f0905f921592d54ddb58b7258ddb30859eebde84f2246906eec9b4af027eb52fcbcd05c354105dd0c5b705b941d65b004cf20728443ffb6c90163e1e71ba2e11d17353316fa4840f0cddeafa78e14bc9d291c854a97c3ed552657394906dc479b1fd70bccab089051c876ae1c06e22c3eb919c3817b7a401d0a7960355f3a135380f821ac689f2ec0605dce2e0deae7ce82905bd927877407d4ab4f8dd4d8903692301dc787a26c25d97e985308caddb971b399d27f3513f4ffccb5cf0efbf461f1808eab01a9a61137d6199bd49d4b5eacd647705069fb4aea977f6edcfdb64f01e265d1fdcc931f92efa10051ba1f7930295aebd036a97d735de0babfa396c681cdf386cab3e019ccdc1336c1d70c5c6367a54f818ac79a65a173611615c6433494113aa60da1fcf394e8ceffd8859dbc12839b1c16b2a717520d3b33bdc527842b7a3271307714002f302a89f5ef8c0bfae4988e95dafaff463cde3d312c3fc6755a5c86a5561755ffc36b8ff5b368fc2c6284cc1d25bfae1807fac54b84317f3b6b610f3e46af09daaef7268e669f8c1cd4b3b72da3df015139027c32ecd1a6a560a429593e645e742bbba55d1affd97e192a66c0dbc84a0bca5c335a983d2e75e13ef2d32721f7978358d81ce9fc35f631f95da52dce2b7204a80ecd24d3991124a0ab7611136afd184c94c605492a1ed2ce636c4a7c56e5a0b24aa4e80d6b92fe5d6dfc101001788d5eb959585186fa31bc2231e40b733018a916b552ddaefed5ec050b09807c5f4f1f885ed582035c4b325e88e247f965514dfe4008e1b4af9bac413fbd3f236624a5dddc3278db02712e1a798ab9e684036d7cd3f146c757892944188eddfba2a28e38acfd10896a50101ef3e7911ee166499a3f7d756b0ed76b12a9d4bff6a991b9cd012879d4feeb1ef5c43d8403276de13c96ad6adb91c83430195e9f072acd9e9db6167aabff4f8d9d8144dd221081dab80d623454bc4f1f010d93094d96dc7fbe4a77c7e2d87accf2570b5f076d009bdfc6398cb1c492eb756708f1cc1c9bca0d092655766d10fcd4a2528120dbe7d76a420afc6e4c0a2dcc7bd985ea403a1f619d3bad1000a627be27d516ef5c945854853efc41f41bc9299001777dbb47cc15dbec1e1e89bd10b7ab0786a766649e27c55f29c335cca718f4309adbe5fb84591ad958897674d4eb321e5686607a76e147cd8712b382ce87c4f4977cbb7943eb07228c240bb59609e44194d51ca1400b78ef1303aa06dd68ceb923eb54148ccecf28b61fdf578c330ccf11e7a1c57cb4ee1bd22e5be210f9c438910cf4046ae9f218c2e1d9ce4c5b3950da811b1c7b7ebbf0081b9c43b1857d4d7a8dd21df0d7ffb89a62f0feb60789b17a13073afeadd9261773d74ae2a64e9d9861097aab0c019ece190fa763f0436ff76376f3dfe5d509fac6ea906247b3c8c871493a220e1cd5fb7397f32dc64586bd99fc83b1894342cd4f2488ee40b8a2ee08a74cccc5c632b4bdc5543814fb20edb6719de3670d6502dcd23b8139eaf1130a38425bef01dabcc49d4556b3ed87524143684616248d78c0bac57b9a5bfb7bbebd3e46675ec7ddae29ef8fd7a0dff008ffe3d30e1d9ac5a2e2dc53b770411c45460fed85b6ad8f2e188f798dc6cadc4d6b3521a99997018870fa5e72ef127bcadde44bdcb5d23eb315fe1a3e014e0e10d1351a947db90c4e0e3cc0bde1d6a3bdcf276057ff15dd"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "0100bbaed247abe4acb0013f5749b44dc7b45745150154acf00f4f6f73ce9bf40d5d6db1097bf05aff3a1ca2ab3eb94b08f28a00151b95b5279df76557d7b931f9cff9991ea66b2c34c5052a44ec9ac86798403204f3e61265d5c466be89493ac6cb38db33599aaa4007b3f7de1fcb3035af8aa37ae9339d06c1927647860ef199638c90b62d6629a48f36dc49e6a41d15a6fa28125d0151572f2d9dff8336a276420f20d97f13ea0dacf5a3f9459abc9581e37a26bc8e27645ddddca8459d2e433a5a0622efbed5406cbe83db8b6edf71a3102c09902e04ce3a2ad0dc2b8ffed69b7bee7ce08e1b6ec97bfd0ff8db57a80832fe7cca532a167e374a0ee5759dc2dfe669a5d4426c7c35fe18dbca27805626beb6a7e6e3cd7bbe9bb62d024da5e5b9515d32b534443cdfd80eb463183ab463124a22d2c1d03bff954489f7e2c5a79fb78c8b471f14c071364a29bb745002205db6b929f34978f3668164cae962760cd629a11b0952d9c5cef8e7bd0c65e6be3ce57e017b738ec80b63963d82c3a3e50bab83ea48e7cfd92a788b99ee167b30bf2747831f270bc1db93b43e86c512d909fc0293b08d6b4591e139ac30d1c08a2e654374982eeb29b1bd879d8b117326f903bd8da4b7de7233fe37f60be86e9ebdd7021d6af8d135a1fbcb3aa1949686b1319902e0aacd7827969527b35f554fda05d8d1d9ca07991a62b7984429787e63a1b174f0019c09cf23f1385bdbb5b6cfc70cecaeb4e2f57979e6fcfd1d88f809f43bc469e52207e47b52471cf2a01e704ddfee3d174ef9cfdb5ae971bfe4b74a6c4505a32c833ab59908c8498d7898515f491a4226f7f3afc53a3aecc45d1a673568091fca930dd6a2c0b5bd8e75f80d9f8e662ceb5243975ab75f10c202f05c9ad76d66a9f5fe2645362a44219a2d6d51ba55d18ce1e21b26fddbe069044524ac7ac8b00aee5d9258e3a80aea48735b7916114f83db14e4bbf7af10f40f86cd928e931dbe3cb41fe65b9c5d5d5bf132fdf236cdfedc3268c8bc1d06423ffb984f56fc9162b435a277533aae815077e2ee05d05b5fbc2f27798027a070028d0dd5401f8ddb3a088f5270f750f5d17b85b30d2c7224c210a373861b12336acc1dc7ecf8e3872c6982fdfabf3ac63e71ab15619415b754bdf9168a253930cf026d9b0696fa0408725fef2fdc0006fa60d97130d6808e78987d20e257fd03fdc979859be94578d9fdeb171af3f55812c108d00ba692e4a0a5bb8283acde64113612bffe38f3387562552556effcfa90e5a349bdc7c5813f91c0071ff87e57e54bff707329e3d08fb16f760be41dc88c34e97b9b68940f51b4d033b35fd059c2b2f3fdb4a44b37fd13d4621173a8b8b97074e8f816c5e6f868ed612a5b208fa42d1b33cfaafba7681762d9f57ba512049d02cc852aa84b9086e22c099f1a110b8b9004d63039bd98d04df959050a3508f656230d8948390fd9097ea51caee169e9e4b9d34abc6441271f6bbc768048f1cb7f301a4cc9229304af1932fb01b9f3aebd4b0772fab6c6ac54e974b6e4f820fb649dae85b3d55c0a8026bd43ca0b135bfdf71fa96a8a26488e3e5fb50e8a859fbdcf38bd158ef5b584436b99f04ad5059e1ed10413ec1599874f93f3f8eddedcca3d63785f39083b05d00b867e836aed97e12ae7b99291e23b32531d1e051ad34dff07a52606d86cd203dde2bfb1a1e10e8f07438cfafcf9f14c1a0616fa67d335d51a07b863aba3585c6a199f95c5f91ab84d3e33a16a3d608309b06dfdae5f74211b7c70b2064487f28acf9f5fb1234b6fa580eb9c3fa03cb4e2357b55aeee605a85fb41b68ad9bc6c2837f5c1962163796cbe2610fc354652963f26f0af23c7c14985ccffd28eda2f6fb6dd2e"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "00c55a71004dfabfbea6f5f37a7186c19657aec600347781f11f8f2f14db7d381a6a484da2a2e6dd66872902072d66a6edd17246d61e67ed2ba5f124bccc644941769455ac6c55af2ab922564f5a0ae45818e6531b3852641e49b9ef9e94a3ec34688ab27e29fff5ce5cb7560f8922297ba00e57add7c9caf2370cbe869823b24c087b1089877890146699e53456890bb57e64581c0c6e85a2dc0fbf27a80b6577a7b28e8d1d67a303cf55aac28ef909048f61a042e53e2c794689df7d0dbcde11cacf47abc61c42c3392f78b18e0c12894404b1e42fd4c198955d9454c4f4305b256d517e851e17dd5700f17dfcbdf172c6b269cbf9cac47d5ed2a1050148349907f34d4eb1f5680d37be065cf91f4a5c370b6b6e421761b9eb5a8493b125b2c9af4d9a14022b232be4ea5d38e9b9983bc20c6c94eb71671cf2b337ddfe4f0c39258fd1b044242ae3be79e0a1f9a0a9076e80f364aa0575b0f28bb74b77972b03019bfe7810d426ce5acf646b395ef17bfef03dfd7e21edd2c2099ed4583c539e3eb12ba1f7e9e42f41494e58a70e2abecb4f64e648c9d928853364f214c6ec92b9c5e3083c7456330a0e68d0d8a5960f6c9b12426833fb382153fe2383d263caef17f61f1b445829b162915ffa0fb363f29d44fa26a979875ba24067860cc3780f8a2b33a3cbf7940e6b93dd32dff6e3aa6ecaec7cffe707b0b7199e9b310de2ae47962a75e16a1fb7dd94a20a8d589854087e937622a31cc0e9ba391a03143b360b2c0c1b905197d37530a53be7e892fed030ff49365a2083ae0274445fa937b8b4f568c83e3561f4320d10ac27e871128ad0964bc3678d4a0b8dbb08be94ec1ae26ffc805544d5e529f1c563549535082b707be119af058c7aa6de59f3f7f5ac43629a39ed9616bb023d4ba1efd9dc86cf09efa5e8f2c4b85d986097802100fc294cfcccf113dbb3265ac75c3ba73ae87ec6410ccfc523e4c64e7a6bd29414a5d30a91dc1d72dd89058b2bb74060ae13ed02a1246dc2b3fef4ca1c2ba58d48cefce76ceb57c1a10913a3cdb9d3729d7cdc58010f3688bd56a68f6631b21c839a5670ee2c3dc60b20357dfbdf8d996729213241cdcaee2ca97d9d0a7e09756567c4606f993c1f6215211862dd5a97f72b0d11f69714dd9e767d8b5c2c420c6cfdf3197bf9c8f2049dba9dc7aa9de5f84d00b2ad29506c9472af61940a8484823b03c3bbf3b1834552bbe069ad963c7aa42c0123fcd9970119b3d7c31ddda9d13959403cda823d9d8aa69223973df43a64ab37e5bebb5da0ddee0a144469879ddeebc7868b03ac57e0bc351e822daf1445a0a7fb8eabed8fffb895a541b815fa8e0877a1aa204ce42ea62d98cbd616772fc0ec8e51cf39534f9026095685e6d9ea6380ff13b438adb06faaef1d881302987e34eaae7d13a99d349b4f6b7ca616fa9e64380a139f60ee58f3d0e89b0453f27f0fa528c6d0fd4a078bee0e8a8f3e25f80e639b066b4f4946b4d304b7322eb248c92d568dc71c6986446308be7fbbf5ec6404a196d375c2dcc272f4f5dacd6ae3c59776d784340892b44e24e868b7c85b53043ad1201350c0be066c0e4465edfb26f653e4326485aee762be83ddb9475e23202ab728d051ebcbeda75ff76176ca6a2e9eb529082bd6485f2344bfb6bdf639714c0169c8691111db20575ce4dd4f092f8fd514c88358c6c5bc2b37a24809c82635370698a7948961628135eff3b64f9dd77a1f7937810b225015f36e75e8244eac96ad8f9d286521525fb32356c45ecf0063a21236924a6dbbbeddf954f99e2beda55a1d60f7e692a04ab26f77afbdee5c4bc65f7f2aba5525fe65151f5e6fa8a97c922e693d80ce1cd05f7ae0d1d9cbe875b74da6e2eb8ffb824d"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "00c88977039b0c1983d350b1311f01619923bdc18822eb4320a98a88bd841ea28839ecb759f73e1550e11172d5065997651abe6c86b1affe84ab8ab35f85a22712d7dbc66160bd17ad35f22fcb8f6e4da957976b06459b119193e777a65e15bf6176252a244ef295c20ddcf631fa7473ebe437847bf3fcb7524fb3f83cab07e57b98a45ae1f165a2241e087a9cad9081d392d93a7a41f4835bbbb38ecbc673bc38a4b610fb92b4280173c697a0d8730d67bc103eaf5ce299c78197fdee0dbef249bb4dbf5d27b0239a93fd41b570aa2fe8de04fdfc2826dd1b89d8cc307a0a2a7b507b043f477f1b40829b695a3a814d8d2384b1e20afe1bcb3fd86e087934d6f06eaa79e4b8a286547d2c14e83baf1d4d1cb9e9825bd1a6d938e262c7befa95f9b48f989f50349d5ae5a29448f79ce2e50e51b4c86d4b916ad18446d7ed9d6b61fefd219aa79b02d7ff12027491cab4014325fdbbab416fd0ab62bd033a209d52cabd960512301e56ef685ecbf8d7565237d00105de6214b77608ff1b1213c268688935531beee7e2820d94126b5d37beba95935c3b4efe5c739d05b1ee016ea70e74b0029326b4a1a4d751781b711ee99ae2f1af317c566f498042e52c2581b180f0f578b8e449166b5e5e716407e1289b62a04b4d31cad276012cfea76875df08eb0afed1f3d78d014f5ebad1d24b4c026d7b40d4adc202a1ef2a7b59f2451aef406552d1bc2246e99808bd4adc4da4169473b31ce7f5101dda067b04cd5f9d291fc0f986749b106afc96a40efd3d51eaedffd953722bc7b41e4c0b2cabbc19833c87a26a62267a7fba260684e24d85da99f1e4dd773f7279a3ebd7b0df076424167438c3a461b579975602bf7e24824bca98c2412d416a11dd910844c546247604b20e9ee9c2dd74ac62cee7d7f3a384bb2aea96c7aa4baa19cf8331ce98010a8742566e60039c63084256e60d734de05e07240409577d05201189e220321d7bad5276023f9b207d060d0b518dd5a4bbbf5b8408ab68b31a6db2f3e3152cf51ac09ea602395cf9978f1ec54d2afadebff459136a06a5f8101759df8453dc6241354d98d6f3fc4f44fcef7520acb43fcc9954b0a23e98324ca033276f1f42fc65f40e95808886c3d093f1c96587e8ad0b073f44c4f1bd32a83bd3cbf82a0c6dacf650e034256c052c597c6f45dd694e302453bbd5bc456743db11c727585bb5fb27f7715efb86bb31e6c7fb91eabf418e0f247f87644a3f13164af2970be637a9b7f7582a4021336d33335ac3cb61b7f3ac1aea8da145df745c7a0c3200ef4a8882864cb4555d2956ae3aeb19db946225a4e13223747b03f7b1a2f1c8c7d30db3f771d14a4a859427b26fcdf17f2f65ccbf4a69d383dc5f4ec865cad62a1b6ccaaf84d916b543e8a581c188d72b2a014571a1741f63ab3b2905fe767c1e4ada65b9973b1d19cef7fbc8b288b3f592295cbf53f53079b41fab1f97fe1224df690b624c12163753079e0495d36a4a5b5fe6ed7df57a01fb9406533dbce629d51437d6b115ae54cf8aa99a557addb2d38ca28a1ef6e81e18c21c473f4c21a44d617d7b3236ba2e04ed984ace53871d1b45d79bd97b47d4f431e5bdf85bf498a4b78f41351dc3c04bf1995bb85195b61271e789f4153dacd006f1b32ccec81de70485f333929be50932d95d6b431cb64c15d96294c12b5d61e83fa576d9507facb0f407924b0fff741d81ab28e299c1f652df98f47f1c8d2247b2f1b32e055daf67d3102fea782e8476bf28640f9b95fa491767efdd78d4b7f07aed39d4b49ee8502d4e7682389d325afb19b9a976dbe8c36c207c608f1ebf1ece1f71149de44c445b0bab86f34d41daf9b41fbfee6453e43b237f6305c211c00b9a99a476352a"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "008ca82f2a0b00b71230c0e903c2e08d8565747c6c1c9e15f60253bdaf090c9afd5f64910b1e5939da1006e88d04e522cb17adf2a5d58ef77c8f13857ba2d577e97e41a16646cb950f79c97dfcbdda9a2e9fd8e7035bcade728ae7cd7ce2e2085a9725c8ec1a08f95634e28c9ed39975b3387193f34bb61fb5dd261be0a623237bba3e2c0ae17d9a74637ce53815e91b56e6866cd36fbc0338cdc1de6ab6f932d2cc9ece1d5e14b80141bcad92075b128e2a218894152f01e74313c5310c6062dd2762c8a9415f13582ace61535401bb5874091df649d5fd2629f3fee0f906d854d858b5c523a0408cd7cbede304ef255666a3ddc864e9e44eb398f9066aae61c94659d0a6c8a63793e027e6fd41dcfc63120596acff99915779f8532d5b33013a5bd013fe5318a8ea1ca5da750ce6d7d36224230645c83d3dc7dd3feb539a3be1283bcc6d781e4346bb0eb79f3d50fb00a111f6df11d2d7e28a914b3c773564943b52a2a60448bd2d148f030305633447e5c8cc4efa2ededd01098ef632a92e26d9a3aa03a0bca0f3f59d65f9b6a727fa128cb90c375ec565494deb6d778af885dbdb890c8e00c86dd4a5a0b30b547c5bca6daa53e35d33f2423345451aaa9e77d4b8b68295c62cce981c7b4f4125fab4a9c1172b27015b43810afe548a552db7bf4834155688a90fd13c840f039e6b580832395958db3904eff89615dd630984e5f0ca39424b4565d996c370120a7cfcd2ca29a37eca130193499c88c169513fc710093f592e4fe4110cd864fc8ad46c1e2b1ef7983b3a6ee76603dab5250b3423c582ffde0965e38e8873288b8ce64c51191336a5f309892a4cb244b575b016438df34394e0d8a3f83e369eb97c76d9b00eadfe6b3225ab4caf5cd0c3ad5823dc7e3a0685eb6331a62d34e0db15ebecb71bfeefd4300b75db1713855ef24d0178560b24ac8aa3ee1640cb4dba5cfc3e6c9d74a9147c33c5f824647fe803289a517e8bcf014e989fce109b944768f5f855ee2bf40d6aa5f25a67fa74242b2c1ba51bfddca9e31f2357bf47f20ad394f01f512404b91ad8ee8eaf96ed7a224426a659e989df74d2c33537ec63382d3587a11b447d05c13b5540f84e103f1b73bae51a902ccbb794443ede307ecd5505787f2f279d53d47d2ed17da4cfa370f6cd8289526b0c8213090587acac4be2c4d74f48cca14987bebad019fc1721de2e63c51f72eb365d42a210ebb525375472a92f099d4ebf7104ce5fa5066d2a846c9ee3a277be718d0b3ddf6d934699f24f9314b745f9ec918b45af6c54228b91d7e94c1a53f5a81364b4ae09a5d757df25652a80ac81fd9002a8825f63c0e27c347d1e6c7b26ab2cd17e7e4e1de3470c06859fe6b14cddab53fad67f3b64a3f9ba34cfb1c81e59859a6dec3b7702bbd77f03293e1233842f7d564a849481f77835d5b1d2d6c50d6eac4e55cc055fec2365f800389fadb55c34007309d9396157994db1c3cc073d8dcc40ca3eb838e84a0fc8a6eecf48d62fb34c6afc82f10f8ae77d9e9bc9036deb6b5fcffeaf4e05f46ab52ca41603df93ea090b57f287b725f66bd821721b55d4e2312fd01b35720b8e3276bb72de23c76ed58d643559469d2c57a087457f1b279a18fbf525920af6bd7169c78dfc5df92206dc4090970c9f3cc476856dfe73ea2692c75fb1c32f9f6398bd52f7beac61859eed2d1f929ffebf51f40c23932eb1db654dff28138af8545e92858b5ba2972ace0fa1fc4edc69f577c2bf794c33e954d171866211273e61aa09bdaeb46cb56e32df0b95938d4f35c412d26f1128d849854e3432403998854b328bbc31be1d07ac8acedb9240f2fa94d159302aa14d0b8d4d232a6a56c783510c6334bce59e02cba0ca48041d03d1"}, - {"0000000000000000000000000000000000000000000000000000000000000013", "00407be58849b0be5bf121444e324798fabfec59f407617c83e16ee0278518a412f9620b71e01b5d7bee0b6a6d01458ce82c9a12e147c323c181c103b35642267aa7dab94c0742883f62cf0a76303993841c4a540387ba62ef82a86d7b1081bed7bd878dbd34ba62d42bb046406e6454593a1842de0fae82e653eade32f509cb5fce4e0d140d1e866242357ba781e4f2d8077b0e95f1a47b85a30a40ad41ba23c7d1e11b06d0f7af03043bd3da95e5579fff4408433d3bd55e1e5847ea33bcc7505e988ce3ed6cc78597fd633e25c5d2bef806c2cb7feb656bd5a229419d65772ca5682f3828964832f6e37e940e45ea46a5503060ab29d6bd5a0a07128a1a269411de02e6aba44933b752758888f2d20b1ad4615acbcc5d7da2e1a2e5c8263291673bd4540c1aaa155c811b5808ee55c234977287fd87dcbdd1bf1cbd84643415f931f0e652dccf7ae0cd5ac2f6a60f02abe902ab81236ad46091a458744c34d599fece2316b729c022a1d0177794fdae58f3d10797381f9cc434a67605ee99ef5f2edae428f0c451d124401339f259f3e3c3b9a63e5369d9f8f01054ec266493ba4b0e0d697a5b854926c4c256439f46c66e3a60489384dd70adbef0c7a3b23bd001d70f077458a20053d649bd36446bfd73701cd3b32266dae276936e77d018eec24bf45df056acee47bcc537d31e751856e0f3991eb60c9b6e7e0d49bb8e7023f7713df3e6e7b6ed9e50bf16874c03bc076bbda65e6375c373db39711abf39ee1998a63d7bbce03bf7c401e1bd3e177ad54db7efb419c17e82580dc6df153641a8e8d5eda652d9b2d3f21ff2c3f3278c2d028cf7b25082a5f49d1416beee1d23d31e60e192d721a5037471cca3c7930068df6bce36b446b183d228473668353020ab3c819b1a16ee2e3ae957572bd54e934e95b73354be70ca5fb233d14800455727129c39a9b39c057ba6c7fc22691d363c631518f5191d858c1b352c350ceb40d115dc95564fbf066d0d0603158ba5a4f335584950a9020a3b11b664122c5c09181e34477e28e1cd48e38fb7231cbfe82803e0aeecb404fd7b8e3074965bc1083eb582dfe7ec0db3a21b8d2685f36b06e36e9cc827ee6ecf16ff660413e1dc109c6ad9504a01fe8e9719e6e70cbf66d12a514acb954b8812a39284a2a16fec113aa21d2a5700d8e130f0a1bb39e60c247a92b70df5942c0ee03504d3a86d5251553918bd5254bfdef536cbb0b9e1ea0aaef980f4d6eb52e20771ed291d8d8487b8b7810120612a3c68612fcbe568f499b42f279212ac3ac99f0986517f6e1ca1c5d5f4e2e2c1fade0e88335e76624df72cad4069fd4fff2a55093cd0110a35dddf40310ba7715c880d5225c01305dbacfeb9caa1d5588d8611f060f7175bd57da2a5b159328d850a29c3580d5f00d614f5c55e149b2bb104caf83b104e0de638af290bcd85d2366e46c5bea302eea2c93c220e007ac41b0b161b933227b9654f92e133ee33fcc105c4e9aa64170ebee6a1d3f165ced68224ab5eb6654ef799386312d333afaeabb079ede5419ac9b61b6a82bc7558467dc4469a02a8a2d1fe54f8992546c69e759919f00d14c2a2a098db4d0bc76282a7763fbd1a5bb95d703714e9afd66ad7fae72fa8a1a417b985592ea890e4680bdd11cd628b87819196f287c9d4688a897997c514115185b9330a1c9d3379d2a6c8c41cb902dad4c4630d9b1ca50c053c3af7cee3fc0c39149db2f3b3bde6723285ddd25d390d68f4cc7349fd4a6f2b26da7a311014b4fc7c4a7f25d7ac596be25182f2d9b57f528d1b10d2a50ca87489d214679be8e95c16b984579ca21d8a0219606128977749622d2fd813dd10c890546a3d0a1d723575f745ffdcc58d254a6d0a39bb74ec64"}, - {"0000000000000000000000000000000000000000000000000000000000000007", "0086e78bc80428c26857520d2dbba3213939977b2b0181e407c9828c892848c2069cadca9a4cb7fae42212afde40d164e1f54f4311a671f7608db66b9a773619e0c779ed141238b42d74e4ede3a1953f375de78a03f12bcaff02cb94feb7d60ffa4377dee12a9758bc07b6a7f3250738d75ee7670731dce68681975801b8152d7e5c7623317f885334785a6344597cc05a985722684c9fdecd862cd9bc53018ae424de7abdffa01e00cab447af023b8ec38eb140f31fe3a4e9c955819d5a3c96533de0baddc30eaa682bde00cee88cf98e211a13118db93498b9a9b1d5811f6707fe6c459cc9c81ed627804cd35eaff31fc356c542d8ad9a10505c3800dc6495dcc07dfeead63788b85cc3c626981b1c4801e00b2a68ead23bd81887882d6655f2fab7b7deb70e6a6d7f5c54322bbd8b84cd224fd0a709e79f264128873ca8c99c0ab76d9477043a7bd6a676b934ac3206a85ec68309bfd5ea4d221783f5dad6e2d9776620169a8b092d29c56d693072292dc1fa1ce290d4acd01bad5c878aa49699ea752288a95225711785ff1cff1fa76ef20a18d187de5cbb249bdd9896e41a1ac9cc2770eb8a7b28346faa7313c25662c2a9aef89aed6644b0f3c1b122ed01bccd1472afa63b46ab97bb66b3277d719c29d9ebd52623955db1aec6bb6aa83ce1e728f2f9860fd1f0429391d81af878077f0efcdfb4c808060052080f70a18a0ff4e31b76d5da3f541747e62aea6bfadbabf82786a4d36324e4e1f8f68a6fec802aa2cf0163ed5b337b3a53250635d25d85204c55fd39d53aa13dd36bb9f231045706bd4df601abf7f87f0bff62736589e3297414b2575d1566a5e7ca3e541025dfcbd7f95b2e8727dd13b1c84d43d55d977f51bb1b7b81513b4f169acae7129c96f34555d00d0eef6b52270613556ec5cdba464a9fcd7623bb52281c73dc01c1eed9924c32768f6900d841ab47a93260127e63268d6e912c12e84cdfa253b46471752d1d9739ecb61c32ae12efe6268b60bf243bfe3aca35120118368028d03fa117107ad094ba12e5a7b2125ee443dc820a13393172290c44cdbc4f8260c1f9ecbd926aaca1561d0ff53520d0b861c7e0a78ca776f88f0a63f864152340591c54e233fb74e74842f7fafd6299c89873c429dffb6bcd11fca58091f3b766a285adf38bfee91103e706e9252dc68572d9c0f6944f94013f3fce5b392d2fe60b0ccbd32fb9a6f30da5db187d3625d9ff02124f5cc1afe739f7fcb502eb2dffe7f8db1a393dfa3cd71ee71e18831ede59d693b0e12155e311b6a056083b39da2f57057745e1f4cd86d17475f7b7571a8b13bd7ead2ae2bbc54de4873dc067d041d15271822b0a5526b66750fdd9e8ea11ed46692f787c1c17ee3213b0e74c1558254ba166867b26592d71b8a17f203f02d226465751a7e49ab60441d2d911b2cb7ebef6ab13ba1c86071c1ba98decb381a5589c71078afc295e21af7b2b6dd0fdde96478298c7303408b4b14d990950cf9550e07e65aff5e7d66664563021a15a33268403f5c871d396f73709941610f4ffc362165b784ed604d5f69836cf0e78a48cf210911bbc5912d46aed2e25a09abd6fd528f9a45c84ab7ffc4fa598404f5af7262bf1a44d1acfd976a52a1f2be9134a8c35ded5a9087d566affc54ef783c7643e9fb58cbafa34fabc644da17d545c1c585b448d27de335a71361ad37a32c140d887894b676a0feb53641f45c43eb63c745ce79a48c6edde549a946fbf8176669cefc24ac43dfeb5560e39b17694c7732ffbbdfb6155eb18735f63bb634715c81b9cb9ceb73cbf3396ea914e777a649d1b988420aaa267a35c51f17b13221fe694b49d68ccb86d2135ad71d3a68e7e07e22b64ed2c53a609906fb155ec"}, - {"0000000000000000000000000000000000000000000000000000000000000018", "00159fea549b6d0ba566c513eabf08e38ebbbe539b46a2cd52641626f929e7cd0ced76bc77748dbc09e50c1b47839e2d51698f18c11daa75ec8d01f3f20da82ab43e9e78a61f7bb3a3c55e8e50cfc98460325b910537ea036b43e95d35d967275fd93b5209e3351dfc072a684cca0910e7a904c20549a680517956f09d3d10116ec4508ceeb09e5a032a683b7ccd8e4eb4be1b3e4b9360be111687dd9f45fe5a7f3ca6c7351aa408005a6171edc2a6c363b6e25c4d60acfa0a5b39da8c078424f314dc0d477a6f02ad685d428710b3dfbcb1021799d37d09eeede9e4a37d43ac6d157ed5551d463432f2fa669ecff1f45414d2d4f84ff61ff934f72d01d94f999667db9df5107256a01e0de8a29e9d966b1950cfad8ce84e8d42a2d2845178addca73957d7b440313aff326366fbc109265152d2b2e1c445af36dfbd4937a273f73215c0dd8d0bf0ea688ba43b5e136e024a235f232cf643cc1a603b41f3e044909acb783610520fad6e67fa6d45ea44b28f30b88aeed9da4a350d6f0d3f074e218ea4bcf4fc8b51385a89dcb94ab3222542f35d285a93d957453919aaf853cfb35fbe8602b390cc8a0ee9d48e8fc303263401010cf11d53362458b4161f1f0ff9855e8327d866c6392ec5f702f01a1c8a65ef06a02e6451a483163d6e8afc6638398423083def5f14897d9a80233c74bd2856511273ebaa06996a6d17780821d710e289f564d5e2a80d5c3efc0e3b4c90430dae8aa16eb2429eee66fd95975ee5dd06b11538c49596ef4cde73804bf817b62fd8fb6adb1adb5c793399d9f970413514caf63d055b0c6b6fed082bb39ef8446424eed4b0a2a94eee810a5f1479790eb5b4309b4d7453b51311895dddfb9188e01ddd7b131fe537abd13ea9aa66c594b57bd43f392d3cf74d15f2bb7af65e623336fb14e3a07d8786663e35118500522a0892b14b8dee9142470a61467f8bb41f35e96c1c179e5ddc87dfbab639b76276f08e720d16ef720b3aec111f9564b540b604c6cd57f97182b15160171cb14669da6bf4858836c2de335c165196a3dfe99c03207ebf898c9e119b2f817aeec02900fea69c285916c4663c5e93ec3bacc865cf617e17e20d8ff6b64604c467302c4c4762902e54bd8f37f4a1812ddc11430a838abadb9877d194c154259227cc2e3689d9056b01bafc0f36cb921ff5157396b17eef81d4bb77073a02b11e1f6f4cd457fe95e052ba4423a9c8a49c82800e3afc296ccefce11ecd42893d7016894378384c82531d45baab190850d7bfb7cf24f4d8aedff1bfc172089220d0addcb9136738a101ea2f2e91231fb0f8842b03a97ded4ce7c3434b9566a5fd294da8d52fbdd510e26e90a9ef1ba3b961460f77483771d212b05d792f8a535c5b139f43526be5a006e13c5e24d7b1a52d01b494329c8c0b2b9cd6b306e7228f15880fb6c826159652dae04ebc41655ee626594cd80f6e787d48dd10167145c556dcd2f8140186a5dd1b21a7a714e499132fa40deb687b4375f9330e959fc5cd09edb73223055969f58c0923bcd0a843e248225efe2c9dbcbd6e59d4d5998365bedb660766623752162358111ec23b10198d5bdfc5ad7d6feb350d1bcfee75da0e5f09444bd1bbcf1653b0632e7c49cf09d667d6f2fc7ddd1f07c0374926438b4429f8c18b0ecde5f917e8d7a98b0e37bad726d249ede5241954497272faafe797461e0a8861e2aece8539475102085468462ea682174d3445e50c70b9a15b2fe981a4e05c3c0f8ba3235ece12091e8dfa99dfb059a50c027c7f5f95adf4c81f813c2a9979e9ef149c79033354e40667a5219bcc92336011cfe8d09997d79337c5b1c51ca7826ea5d05bbced326ad5d7a1b5daa3f4e7561983796291fb6617399f"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "001e4a4eb6687b097e0a4205f4466130ded5da52a66067c6b7fcdfb2d9bbb8d734b375e21b2c1fba9e9504df40683f5f8acb34135792d35fc175f271ff9c51357a6471b42ed15db319d3e925e9f4532c979fcec00aee043165f46af3f770734507f00a0cd26737cca72b43cbca795c620f4b2833e91dba30f5f409be0a2f126a2771ec9acae907c0d2696864683b312e5b840212e17dea8d84d7646e4803f3713d142d9145cf8bab0279aebb0e042f0ebab3134467efd7f55d9bb316231a661487f3b0b55fe47b032c2737d05928f34bf10914e2c1ccfc49c78be95d319d8abd30acb1e48b08f11afb25cdec72fca5ee91b885155ec25706689e48bd0772a385ce21e7f514da724f02d3f2a1b218b1bd6623eb8f8191cddcc942f2050e696dbc22ecc13f53ba1bb13ae7585e01d39182a4d5943aa7ddab3dd2119647b0bdf950e2aa07de8e953e6353c92abf7b973b7b024cba3050635a4d5c65489e5ac6917a58b7f5b8b130f09c3ba06935ab5b09dbed50f213cb20371afc80141c6a55190aa27c825e4b768d6241daf6773c7cdb22bfe21e34c98cf161712287031a03e677c43652f40e7727075066db93fd10258812e320a963b016b2f97778cfbd286cdbdfcb6c789989e737f269e7b86b4937f47e4a7123e7872124641153ce6beea3ddd577ba68666cc40a9b485352cb47c4df594d52439efde53a0329011521456732e2ce829d463bb57f219159f2fa0ea4044167e092efc0d2985582d5670e4655f7a4fa12ec612551c97dbd2dba177902f5d7aafd64ff5bd31cd8d2dfe0ce56aa7ed044550cae748777adfd18600d0df5abb9dde843df157641045ad4f67e35b4a9d21ffb5a3ad2cd647f5aa4f4afd635a9c163c8cb36b21c1f1370685fe1f917e0c1ec13b4dbb66c0f9fdf821ed2b7aec26c33038837560815e008b58978d793b501f640b9f6c94fa250564387ed4d1ca12e7a301f620f0557015cccc081afa1e48a22489cbe1f7c3c7a041a39e47b5965abb7ae51d8202769222ee3d31fe8551b6ac9f851207737f0111355d8cffc99b3d23e32380312b413424d215fb8f9313f6ebcee7aea099c9b8008ebf7348c5bc6fddd5810ec571ddf91fa889e504809630a898b826015aedae1f4079ebad25925b639311ad94bd40906e0a6548223fbf3b49f21da02741ee902314a1b91cfabd97c58304c5ff42c603a4f0a415804e75b6669c6b1867426e46d6252c48f186d5b2f9209b625fba92696798cae159f9b3dc229a28ef5e65d3c49a596b9d615a702f7f7741fff56ab6528fb95ce117949e6f78a9ca9a096b65f8f38712decc1f972081a29513df459f673db12f3b19227ee9753a33cdfd21c3469bd980a999eca9ef607fbb2f446087b9acb701d85b43c32ca45028278d68228b8eb85f63b313e040253b27c0c2d133dfb12c17c98214f90c6b1ce71e1086e57c2b56c8c93be7535790cbb345e358ad924b209bf60c16f1caa1d3ce781456237ef55b2f55ac8951945093d2cb9b47fe4b295b72b771529c984bb8b6715bba37ed78916bcc349884ec477f4b6a02fbd27e42c12b4495577848dda0855f224342cc70e21bc3fac181889bd659ae4f1f36a391007eac27ae6c1ba53d318f0b0c91e61b4dbd2d5055c507bd02a226b1df414078aba47a3cabdfae996114329f712b2b0231c27802402cb7654aba25dbff4e314f12a72390fa82fbc5808dd34ffb082fd17fdd8b4ae2df34c21907134ea3d0e5b22bb39dcd4879ca0a14c4c685bda0ae2736fa60849560069699211d1fbe0f668dde369985eef7bc41d772f3a2691d6932b1a9659abe6ec9e0e87deb3c40a1699eea70cc41b1feeb1f560793de8d640f9325d256a830f1fdc01e5b96d532d57cf96726ee993db11"}, - {"0000000000000000000000000000000000000000000000000000000000000015", "000f5d8671c47e2ccc19e3c39fe60a654b05badfea01400ae7708843a30c2c645c14fd192e3e2397a6d30b7467eeebe5125dee7ad5912b46e71995afdb670d18815ff35d784845ca2942a43c9fc8ca0763d0972101338522cb681dab73e8a276fbfdb211c32d3ae19618f8faf29659c9537fd9569331d942be36a094a626093862020609a76d54b142558976d4c4d8159811910e5a1d1e07effba5cb58530a2afb51cdb17c51f0dc09c69cdc1204016d8fe0d379b0694ea73e861ffbc01cc6ad720ec7afc924695565a775c886722b3ad5611575fc0c1b62dfcf6aa202f233f5a7c8bddb4726a9166adff721dfe6bfd2c7a2767a25d690a083147a160a4e58c5b9cbfbb575d52789213c7ca62b38df5fa123878b582ce84831cc0aa80c1ef6dba69670da3f7e0dae847c5c8f484fc0c93209c4f560dac691fe3b0813a67a3fea04ffdb407553744dc0c5672bd3bacbd801e0cba6c10f09ed9be5c19214975389efea706ace3880946ac32c764b7fcbf54f09afe96e04cefa5b344bd8130fea77ce27f109b88516cfa59307595bd3c253159feca7331ed1aa99f5682757d19d8b00dc4c8d0201eaf8e9ea3dad8c23712d34fb9de8d0cd6cde9a1a54d5a40ce53cd7f5a8531d327cd73d28073cb2321d3c4d82be9ae5c165e5226c09a1d870a92de7be6e41dbc2db6d5a2281312397db4767e8aa5f1574db2804cdaaac9724181bb203b84d03c3fa72bca216e6aa0eba26894894b511fd69ea30e579887f13bbdf5cfb051d3ddfe5aa8d0bcebbd31f9a1ad02d4970fcad9c16b04d3950c5d8c36a864239ac70fb7569481ec5ed08c901ac4e64b207304f40b1feaeb8a0849478746f7d120e66d4fc00a3e769d88567f71b3a7d65fe9ec60f803db61858a4a549112440a4b37b39d772bc786233547ba7bb22ba2f85ac94190a79383e84255d6d13008478233dc6cdefaae762bafb25a25cd1d28bbfa9312c37368b1da065d983062a3f4c244ac57e7683051f9bd55df3b52f1beb10020c3d4d35c969f3bc65e5295ecd5640d3849f96b0239273ea5d227dc5b93b7f0507ad2b8149e2097de0d127b7ccf2a27d85160bca1fea5b884a1d00c9dc0a2209cac9654569292d49a408946acd99c5f415f129b407f6c7edba361f7a099e2f7202eef40edb35819c45b7713f0192952cbc21e50317343e1d9e35df5bcfd7bbe46d8437477fda8d3b3d332aae9852abeb2a18c57dc9771de9990558a78e0f4f6d4dd9061c43f9166133b3aba5f1fca7321f85104153701329a2dd94c6e4052a3b50eda129795e590dc40542c31daa836a51511b0ee952aca1032d17b32f749c63ef8ec8b96eacf73671da9579f221f0c27016123c46f210c1e2a201f236c72f72d9147f57a77619b595fea425a8ad55dc82e315d13c30d21a12db28039a8f472c0fcf515f71b8e0e84e030a4cabf831ef0ac98d97065163cbf316637f2af2636f4b5e7c0f570654f8d807c237a5a414d1708a5318b1607af88acc3c6b7c2589ab1a85c0041674a4dcb71a18a2d7837d2a2cfac977cbf6913a80543c2ab961f52c71f3e92b42127cc153dbf7cf7b58b53b74aecad1b5e6f95c46386b9423406a8d05e5f7738b2a2f3c0d114758cf2a44e57d8ba59607d4fd7269e530eadcb332889d2617044cb4f911c44946e3b181fdc847bdce52e39e397d1b30a1621d9cd34b1f99144f0ea36252a6f73fc71b0a459db40b8722f764e1165886cc6ce5cdf0d605b029be57b3686f6d07eb58d47aa4488bb9239f9d9d2d19cfde2c830de0f76aa494bb862fe6cdef969c9bf6294ae377dda6836f9830534e3273b962736f581b0d3ba174d41c8fe10d946a5be5f87b353720a83df0655a7ade13e197c701dabeca5375f7a5df1e053e8990"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "00e15d5d3d01f47cdae4813a7a9eb62f5c765f76ef24bd2d93210aedbbf5b0c3dd37b35d8ddc421c1c5d0bd960fa4b0a304718e801c05491ecbaa1b95b88561de5aa230fa6b1633cdf21e895f7b864b298d9334503b30988738813014e7e907b8db86541a85fbc485e1522f1d17dc8e6ff82a9d20b1b17a235add27a4602160f3f1774c6c92ca10816471ed893b217f51ab7e52266daaca897fd312e038622e675e8c5df915ee09f031c196a8bd68ad5d0cbb7744d7bfcda8b573c2f30070bc9704c42f6c05d16429f147bbd5b4d723da54e03fbed041c5d2f3b5493e07830e0955200e1140b0c0d1331726a50f0b7517fe13f398f4eb299bef764ac085bb11ae8860a31a1f5d2347a19d0d71a2f1a955a1ad424f6384c94b3bcabf63b407b050aa8241d56ca2a2ea263ddd1a0edfc7a84aede4f8e2dbfe338cbb32d03c61a891d06f764d2c6ded93a90d2a7ddfd0282010c81651099a28fd14090f8fb60007e46f0db628265984b4061de00e569ce381658ef06aa392b7b67600a47ba732f067e4c9eed93116e1f2adcd878d8fe1e4a05fd2b6f6807b7590ac974c5e22aa6b1ae5843a6043ff0d08584dc2debaa22cc00e7d12209ba7d4e304634a2d172e743e347c3f4dd1f4ecb4dc60a7272a81263671e128ae2947fcfd28e9679c5b369d65d3d622809f3a6d82eb74de7dfe31575acbb597c07f64e7c07cbb9d4e04ea9d7c24ca085559c43f29e6036dffd20ff1c037f36952dcedda42a80c4fb9def477d8ae90e964432c3cc87a1a50782829a29ffeda1f417c01f19b74c8be6086f10e6d532f84c57014a938b7f010009c1a34afb97996b4990e0ca1b503d6590121ff3bb0f7bffdbb232a1ebac5cd39375403d65bbec331e9309e33d646b1a438542ff768395be78425805f443d92506f9721cd162538d583355346b79be2386f3b36f01fc38919610a601dab2233a2bbaba80ef9c97a6591c027505ef6d842fa6d356df08dddd1618373acefa087fb5f684c7424ce9c8543b09ae411a871355d6e240a03a1194253b1da56a249835f5af4f69619d2457144d628b6a5bfb5d5564468a4362259a861ff9bf4b155156df9c875817c03ca20b6463f7de985d1c7bf72dfaf6c48253951eb14117ab307b2a46e2405736b0597505855ee72f075d3755b7f0343596cd40174a36066855f3ee0fc0eba805b61d7d7cc0fb0dca5f84df09fabe86e61ebc3138ace1f7ee1821964e4eb7601f0ce2b974e1a996f5d26b21aee1af9c5ceeeb6bde153807bfddc9533174f05523d994a16eb28660fc93280c43eac3691c9478efd4232e79780c25c98f75719111a6ed2ff20827c16b9893dfac73e7a512316f10de1497ccc058a67f019d2723b843f2a974fbbefac8501498f3c67c180b8fa7f631c1fd28279aa7011db9890460e0e5a00154f01870c0a19d89cc331a187aa74c37cdc3e475d16e55ac8eb701ed4f9c16eb2c794b7815e1cd63cc4eac16c0f5d6a1d256e5daa56a5e7dbd185d12b8898a7f6c726f11b08817c8fe5eb038a33f1123f9298fa46183eb81a197dc1e6c7876da3a8daa5e0bd78e9a2a5f35734ba712fe657f31d48870070c2d42ac5e5d9a532ad467947ec8f5710b12d8dbbd1333c277de9554aca0f65da48584e86e3e1ced76e960049d6a9e6dd83788ec5ce2cc021e29acddf49caed6054a766d57cda9655888d1d769c42628cf058f0fb23333cfe71a92602d061283ef52d575fb12ebba26324a6b5cfea8da5f4fc3740bd78afd64df139eff25470fbbf22134c9264f99e3819a5ebdf3599e382e376920dc3529a09343c729cdc27e1c25ee2ca8f331d0f31976213ef5956be0c3e5d3a6b17625814a0a1eb2171e045d4500d5a0ef552042ad64349c70affe8dc438"}, - {"0000000000000000000000000000000000000000000000000000000000000008", "0021683a8c05db7e4c76e339843d29ed591991b55014aa222ff29ff8818e24e87b5f50a2a26bfb546ee505ef1a45d7d348b3c51b76035a49a291c9f05cc9ae0fbe2da1a9775c5fcd0a71d83421fe80e8300b74b003bfad836b1edb513b44010a8e9f033d178316148e45820eb6975322d7595b45897ee37c568ddfbc1917363ccd168e1fc5973ea0a40a414b5c36a2687fcf0947d22b3145dc57afd2f3351432f4692694d67ed11e00d9cf3972148bab96b2b018bb6f8dd07347534e1214620701f20e4d1556f483d345642dceed965da7ae1c415a4b4f96c286f634a96dcb6b35fe86487a58871f01b4ed86b152d3bafc4464ad39ae3d3f999b913806c12a0c6fe1ad2d7613b49751416ee93a2acbccb323e0cd9e2117dea3a292daa6615e29a2fc60fe6a2d15f87f31a7586d2d5370217eedfb2fc1581c5eb47c273ebbb12aa103555ec674045de412e50cc46f900a0197b82f90618239809980e96464047871be924feb0d2094949c54094ceb2c28830ac819ea8f0cddca0f0ea1d363ca4723699d2ab0f60d0d328049974a25fe3ad9cec8976027c94e33359d17ff4155e75e5d3eb706f849ff7253e0ab5ea370ddb23b73dacefa777b580a8c7a44b01b2becde2ff3cc7dd7bce1aac1375c3c260c7d918f8d780d656984c396d4eeba382495ddc04a66ea714914d74f13461924e37472378df93d40e40367c0238f19864b9782a08b27a3a3dd87b57a0ab2176e15dec1aa8d07eec5e2c57871686e9605fd58f42876340d0061391d2ac956e147b9990eab505679747a47076348e96e574ea377db6b461986614eba195614cca73d4a14874fdee0f3df787beec7bdb0ff93d8329ed70866e2d72faaa614b3cdb07f494e9ad59f4019dfb768fc17824d4a55452e2a5787fde0fdf13966425264832f9a1a615919e6efd2bb470abc54fd67b10071aac5e840ca891da4c2457231ca9b137cbc6d34042e779250637c1525d92191907806d64fc47461970bd3dd37509df52d98c1c552f5c6cbb2a2475741be184736060b8df263d92a41c33a4dcadca6649cbba40d90d0e668e0a6aba82704a48ebdfc695d9f13103012c8044e8bc76d46dee8130d873d3210e3225b755a1e25392d542c5ce3da63833bc7a7de514f04d4513b2aca2465d0522e18c37d74e305d95895b90cb145cf030890e64ec9ae4f1fb5209d9253d9918bf915add51f5df12f4fe1d6256165a336355a054a6b5c76482403a62ed0840d460db4a935f0d52fb675a4e27f6f62211b8ed9d44a1a2861de84c00936094ef2655db50f0b23b72ca3c5e212305672e6ad974c80d46677a9a94edfa474cd57c1f1c75c37700666818e8533f46e4d40c9d52930236b03597db4923fcede1f83567e4380430916374fb710ebc124c8deec6652ee4bd539d3cf035f9e6d60caefd26652e20a7596305a3420d6ee7b4394945120ea2739622765b677320c5e765a3c600b06ecac1cd4442a6b7c4785f353c849f220caf8802f1c5cb6b89d5e195f7b930818935ef66ebbe99b39ae057f1203970185e2983612d20224d9e8d8c770937f5072dc1eb424c7e1fd62858885ea7175c8395c9448662746ed6ee63d73afa7a6ffd53b43ba5559b94d2372ddbc07d05d63bf07cdb8e73fd80b96da4f3e31bb0981624dd09bc4df1ce184b5e45fbb027898fbf6ad4a604c9673aa5b85b1d94813d7cd8df76c3dbcc6610c2004a82387e424f1db4464ffd5b1ae4c97fa62df40921a2477d41e99d67a199799dcfdb74d313d5e07158a27e42aa58d4b8898248039c38ccdfad1f69d061c2a697e3798efc6ddb8b55f0ac5d8f162b27f02c8168e71481c46197dbf792403254655fe75dd3df30120d9b98b3e4f0aab0fa937c47a52f502b626de0229"}, + {"0000000000000000000000000000000000000000000000000000000000000001", "015cf310f515405fd8647301f77b7d864c4f978a180405c8f50723891dd8ee06c5a15c25f9d42b978bf90170216d8859eecf320df1108f2b2e7eeb28bba20607eacdf6b945453883b8b205c2fd9079295bdba1c2023767120a84f8399d1f413dfbb0760ac8aa1821db2cb31e02c356c83dcbc6b5105f33c7a145a1719d9602ed345242dc1ebd23f913ba6ecaf022354f3c3f1b341343d8aa19c471a3791607b8e9c56dd7a492cdce0982c99614852258bb7ea46189ab98f6098eba9b860b2ca470628f58bb756af23fb54ef5bca1bd9625c70cda5e4ed7c6b30fcb4217d218f140aabc11dd037c1d24abc7196581e33943a41ce6b928216953b398c90b62954a8443e7b700ae81bf342ebd73798fded94f2d2a5b335fdd5969ef571637e340478e378a5938e310e6d78c50cb8a106b74e2a11d1ac87e2e50fd30311efee261dd8ce7954766c7cd5c5ceb3a8044be23c2024ea41e59c74d4b375f23ad49f079bd03bb1fe43a195b7232a26b6431f0dd241682a8cf16b1013f192e061ceddc99d8b6b9dfcc51ea407cb4edfd713ae69f101cf98c9da3173fbd8a37707948c4464cd0dc5679034fb0d4adda6963c75336a5f7c0811f6372bc1c690cb7344a7320e177bd6e92504b327b529986bed8f829ee740f609b07590e6127b115d6d89763921ebbe24db9ad9bf4b27d9f9a1a7642285d7599a37e57bf9c04670659d088cab86e63827dbce03fd4d1cdaae953262b2d924e4a49c07351f2cb613e6bc9a4f17343430ef33328199761d7062867c7d93eb936d5b13c989916545a4ec70ec65524eedb5aee5e0d3711b5bf7ae410095c91da28b13ddf1b82ccf0398eb5bd4134a317134e6e34435556a0e335e4d7ab4ead224efa3d9ff61b366d4fada4426d644372ec7fc461055f17970111384e1a25b0d3c1cba1a0c3ab527d01a55ba2314d0f02a542d5afd8cdfde8e5b0db14d6f42c4c59111bc26d2314ba99e80799a6c4f7368a3e1989f00faf972006ac87b225ae9f579e73b0f531f448ad265b942df509e7ed6a10d53f83877d34fa2a3a76fe1cb998301e17f989eb348b17ddfb7a85fa3778d7024762b870681eafa70bf59e09b8fbd78235bd7c39ea970c18747335c0b47fa564416d570644062837b2653af6dbd85e5a34c624df998a155ff8d751b3771bf9e0495052b505e971323f08e2bc49e3a0640b8a8f348807af5a163e03cad18c2c7931b3eaf66adee96d8b67fe1ddc860bacdb435a8692298035f15473d649c964ddb521491047958c12085f53f05815bf21fd8d5a97017ff80908edc538f248d04f56b698005268092695c299cfcf2e4b77965793e4ff80def32c0de86ebb0e03bad9360933776b714d2327243e84846959fa95b431afb05633620c8ed1d2013907df9605945daa2df146d1b5a20511fcf6da86c871e7f0765b4eb6beb6ac22b7f80e5d9be5c868de756f264b65eb80b9ad8e5a761c425a1417bb16b5cc33a6fb260444cbdf27953aac1507b423da6bdf640e2b4f68a373e546541af9f7a318b7620e7734fe8a849173cb673205824e8d82ba835fd6f351b1ae537921e35d9be799a8e77d4476ca63187173114ee2d8a1e16d758e84b281581f2b438ebd1ef6913a61bd927ba0affd576e83cde2e41ec718dc3a855205ba34c35b4b5ae9167661dd7d5965be10101e4cc50ff97db584d550a51c2fd11d163e9d407c0bb045f42523a28853233c1b20b5c4fc09d8ec414b7398dc252ac1920105eb26d9960c968fd5f72e0ae0cf1df2dd0895d96f5fc68fa9ddf959c374574aea79adf827292d73bbc43419b844fb21350014cb971f3b143a64ff16cbb29c10b97e11d04c8277ee9fc9caad3c5d531b2ea7eb28df9921bb49b0d3c5ffd43a6937f534bbbd"}, + {"000000000000000000000000000000000000000000000000000000000000003f", "00a763b9bced1e7bb574443c2eafcc81e78b562be944338d24f4fb1d7deb2aca517cd93f5328c49fcf902bac1e50496dd29bde870628aa4ea8d9f679f186274128ec29f917c859387ec42b7f6898455b04afcfb00b98b4d2fcdd397dc19cc3876cbcaefd0d68ab43750bb09d703b83ea9eb06be1d77cfa50fdf3974fbaa80b990e24f50a9441c9ec819f9beeda1553378fa04b0c14d2c1764e7843cecac4072027fab5d82f364ce203872f5faac94419209a28c41e5706eb9146bc8bf114cc0934f16f42e58a66927d929711d945afcfe59f0cadef167e292623d37012c1a9f70d5bad59be7ec31edb4bbdef925881988e12bdcb417034f2483f087a05837a242c9a2a37ab018489ccc204e948f7cee6f6553224c8a1d5f04573a7a5e1e34d3729cee39617b51691f94448558bbaf8a0a2f73b3829496a445a277c23bc1203981d7f497d17d300bee2a4554d3a59ea2b00ec980eb9e26bd99da2568a6de1f18a6a671cd0280868d5a1458e1df8736aa327f8f29c6963e418c8400835a6265ae9734f7974941be5e629fdbc4b1204c37d4395d513232daf4c7ffbb556637b0b11eb1b1b1e078120bb484374f3c128a29e19f8ad01acf6d5cb412fc324ed8e658d2daba383be60da868ea754d9698f085f79bc936707b761c5f0dfb8f4687888116e9450171bfe62a7983261e07e74785130a2266a4ab52e160137e4c3a25a25ff205815ac2ec7077e09481ede5b04592e3c0ece63b6e63a33e336d44de9ab655316bd1762fd5f4c1c851940b4b414cac56f428afc19cf08361e4b50d555a53928a49503d659a5617d08383a1b064647f852c1b1e12d8ce174b39760acd90c48bf8b8dc75d486aa90407535e0c0ccaf97e4f5ab69c1a8d69db8c2137eb880f750a67ff9b5160f793f85fdf318974cff430e6d677888f0b7087edbc8bb9e63f3b2a047b662d202e3bffa43f355b21f77bd5ba8199070d15a55785055252851f7c4170d292cedcfb90cab7f10b296d892366c9c1cf4f21c95ccd91dccd51475de537a327ebbe27c905d8cba4656f72c5ed98735c109e0fc456e89f08d55cc5e651274767684132a08de9080ffbd76130447373992c12ab075c1761ddacbc9b99143a531196ac1545d6a9724214e7baecbca5b81920163eab022555dcdf6fef62fe087eacdf75bedefac50e5cc0f3eec7831faca0d229117a80feb578fc2e9e638826a4e9b659a3c3165641544058f9973d916878193de8f9225285092d0651eded4a4e3933312af563351aec2901777101f62c7a455e7ccf1b2b6f7a771e1580d408a460f623a28415fc1136ba361b1859b52c31224a35406479435d05a5add6ae0c05995798b3da369c25693d9dbdd3655068f2e34ad0571c199f727b3c06a29266799741d7d1c6ce4447a3e786a93cf5b105470cd56906b573df1e62844d6afbf2a808b8a6b810fde3d29d84cde4f03ef2fbf9d512c6191e9e913e068ecd18edd0476d788fb12e7ab811a07b40f5730a1becaff21a12f412e925c255617654d715f25b0ef405489448eb32a529f7d865c0baed538225bb3dd1d306d30f242f8e92c93fa1a252d733c8ee4f1995d42023a97d21c3e90a2dca49d56214c47b8687a9567b1032c1cb043f6ad3796703033614c5d73d91a035040a0e1da377f0a20ffdadfb07aee875764b04fdd92760a8620ff36fb18ec7f5db9c90d2648c3bc6bb3f89590e2deaa2b01bda4d0704a40e9dcbe4ed6fd79885301ba7013b96253de768efa218969184c4ec4f3316451292bd775ce1406314838650dc779356c6107be7592976fd25bd62eadbf25ec6315fc7f49f0f5ffdd7ef1a01b66c522c6db9abefb25e2ccdb3e8c07da724ca1a2fb3a972656f7f4d87823ecc57b9fdec1455dd2f"}, + {"0000000000000000000000000000000000000000000000000000000000000066", "00a147e67d83aba0bf1621106ba1fe335e7afc41c8050146e0a2d8f8612a8323ef1c7a77672025ddd4f51128f3fb8e71dc1fc6c0e1a3a8200c5551bc1544351b4205599c1b2219c3e70233477ef504d01152ede501cdc9275f7b2fb7f18cf8f5e74fefa6626553e70f18270db7a321f8d7b327c368022d4602c969dfd915026c5abb85d45b02c951224030685f08de9f3dd1ee2f276bcc8428a2d36721d6f4153886722ddff1c6fa01a13a80506d1783a27881155b8e3d246e40b514031fda412c6d0d4af5f668e8549ad1d53ee8e4ddbfb8032c6c1facc29c8930416178d494a41a5d32db01a60b0d4f8eb483728783cec32f0ade80cd2e03cc1321026e33804ac0be0156e2b3f61be385450157a9a95f709304ad88e12551138e38bb7957bfce65a47b60660353b3d40247deb8a219a05741e102f4e6927897e60acd6aa383d1aaf1309810f1df4d23087a11575f33072f9ef7e05f453def2572de113cb066cb7e5f813a47e0fde91c92ae4eb847c7f10ef756a32d895e1f1d0d40d65898d10e0bbd8d52ddacf6f0c56a76cd704b2298b17bc80e2591351a432560205bbd12085d3fb010c49c82cfcb1e91c95be1d318c84bb146c7702e0f142d519d17c9e76d155eb296da33e21150f1f544d317ce0fefcf6bddf7a96b038179edc4768df63de3c422e36d69a42c06dfa7dbaa3fa0fd9baeb513f9dbbb078f9842e25c78cfe7d9e0e5a84227bcf6ae3464912aa4368e35e3a78fb40c43503c529925c6e6da688c0f18512257334113e69ad1e15b93bb04d86d1aadbe5e15fb2c3b23add5353e2929a4ce19a262621c1663122c31490dd32947774b23b4707a53e23569191c2b18107b9529c96752685d68adcbeed85e97f89e43561b05f8e230176e5b7c51a8ab09f0874a411d96d632264ff1ff478abd23d9afb4d0d7612855de27dfc45c02fbe414a304689a828b83c2249edb2cf089a79b190fdffac3efc4c79b113765940a371dadf610f3d43c090acb343d6b5fd3a1281608dfd19155d612dbd53e3cc325898fa498658f357414846b3d1eb6c2d9fd9a14fe05980be15a7f98ef7188c953dfa4627a5656e31cc0a332e24b1493ea9a973f31fa9d227b2e564be92ba601998257c9355343279373d6e3fe84063a46d94e8dd66f6060ed291547c701d940033a482b9646f2053a8e3bc14383ed1e0950735b2d8e08820b30cf452a7369e05dde62f36fff08299063abee3b727e361d09ce0557af1ad2472c2965b6cae68465d21c925f7f0be844d1829d344f7f7d00d1554703b9f07a192c2c0946cb9d45514b39488713899475643e9623978d990e5191998637c977c878838e5eb376773bbabfa5ed13161cf81bdb036b269d8136cfd083451ab8cada9c3b90ced370da0fdf0a7184d51eed6dfdb9dd7f7d660614d25ab147fec78283d2cb3f714f0d5ec3ebbe6b279a37b44cdade25b89db47fa44c85321135377ab3082f1b60d393f0172cd9f319e3bb0ea6939037a4030ae89f5499a9456b88c2c136ffe7c28973943d9e0e06176c81074ceb7cda95436c25e37e2bc6cdbe67bd10fda7c99695c311a8ca9128976384d88a4435d7bf19b617823c8ad8e78bc3a238d544cf72e5bb5f40f5488be599492e2dc5b8a384aa87d8cb82aedab9350109f8446de49de2ef3447f57bb9ddb8fa633237a4b00bed41196299181978ec57d86a68a712d778de56af0c1d855ec38d770ecd3ac1474516ad74a1b68de5a227a287e1081892d2ea21f45dc462d60a2b19b8cd4b13c1c5ce7348e8ae5d81b33f83461778d2a638ed951769451a6c757115da3e44ee78d2c57f191499c2021aef4bab9f0a9f967671e23b71e76864b506aa9c305c3e44fb97e1f8676628b6c8e25576c77b9b3fb53a"}, + {"000000000000000000000000000000000000000000000000000000000000003c", "000d13f539afe48fc940e8422b7e6c36c319978cdd1047a74dd30cd2569ba8e92527c9300266233764760208a015804634ee914e315bdc789c78eaa6b62bb00ddcf414a9d7d5c953a8426b54d8a2a92d3498c60f090e85590fabeab7d20cd48b3077f5c36d2bffe2b23c3cef4865e271d3289bb593b4c34f617e61fa45721a5ebd2d90c933d30a8d231ccc27380d84d9b271c8380c4fc3b9612523d07ba5b38bbc5d26ba11fe2b4501ba9e3bc36c7a118ceb34de5ff45f9d65467774501651c28a5d93f8c2c30171a227755c516ee5bbad020a9f1554dcc2fdf9fcc393a5964bfa0a5716ba63fe10f41b3bea8ae632b0a141e246fdeaa4b62e9769930a67d385b8c841f4d46b7630cb74951595ef0cb54c3fddb6bbb1d4d929ee3255adb03e4f1ad785dbfe1528690555a4d5fc715c48538c913b50eba4613e87e13ba6a63c58d95a35d51f76695050e82ddcfc94e93c01b2570d8e13205f82fa716001f12dda3bbf730fa925b9545fba10d420b9ef43354ea031c0f273b9def5489b6382762b599fdf3517bd62c238dfc45f9fcf644f1502f46356d591479fc4ff105abcc18f0fcc91d915b802295a85ab8c87e6e8ca5d6d3ac2a334d60dd4395dec6a9a13a8736ea3154c72f9f219b5b3390fea19374e0c331f09430a2581d81b5edbaea9e499b947353975f710d4954bbf7ec3d27cd1ba96501bf96160051ab0ab5ce00c69a9f9a1730627df4e3ef1bc25f314a5bc41490df91927aa228ebcc907920a59b114140a14697cb7a890fb4c1b52ba09988dfd714073456e26725f7ab8f16d2ff60fd26811a9b598cb67d45cbd16b90cc2104f07a8b4ef84ef15eaaceab907dd265417f3079c1fdce0f39045f4ad10cffd578e581f35da19d4f49b0b1bfaf15d3b930eaf48e9e9b45253522d1a20b4a4079224069a6c729cd7df6b01171adafae70050d675c4584f7fd855a679a1dfa652ac0876bcc70f210ef0d774215dfd6a26d4aad6d8221cdbf714c90a8bef5d242968738b74a0d10b5485d862066d911c2096a371f6adcec1e48aa3342ef467a10979aa118705581e8569c99483bfa5416bc718b1d0ba4d67ca6509199750889d3e7d13e49116e26a8a2184422cc7cc0bcee4adee534093bf7d12d3df41ae0dcc69d744300eccc73a6bc8b811297db1f0334a4d31cbb29963f40172f0c26bca021ba10c8151eefc29c58e869848cc216ffa8c0fef764bcf6c4381772c6cd103881f43710bb1d1c07dd8b4452c28bb24e1e732c77359feb6f10cdd69358693fb131c0680d54b7c5ea49a9f6a569c06395ba7467a4fd3ecd012ec6519ee45a2e174338b3312fad8fc5faa7f41c963584fe6e34740a67f53201ecc1752d18cb3d9f03c82a24b9eba499b8d3a624933bdb7237c70ca23d5fdf3cb372fa6456151794e200141af22924637e90c30c25dbda0c83524a24dfb2b064c64a8ba450cd4322c31db7a1ce9e4b3dd58f145036825af4282626efc0b56aeae6190db18f89f99f40a22036fa60cc83b182ae42b41b8549d826bbffcf801e59e591742a7d5eb4262a48a68df4517f0152190250827f557a922adc5f3a3981ef74529dccdde70ad042f9c2ad069376f85cdcabeb0e6b73eb32457717f39a46c1ab1d9090fe85714c945bfa5a5f60adceb9e04484fa26e482c909caa139edb5aef00e876fe9dee327ec770dc1900df006e261302e963eed9f85a13e205fecbab4dc51522396581e9937ecc549cf03281bc262dc6f92d527c2ab6dd5b9897625d76e91d39d17e14a22e477cb53659d9dee88ca679c966df7b5d09b67029b510099ed92b9fe2e83ceb750536a17ff8b2901d6acea1784f6782b8142aecde781c2ac9e278096e2530ffad485e738920a722922375c2a1124bd449e8"}, + {"0000000000000000000000000000000000000000000000000000000000000045", "0123c5a2979ce083cd5c9107cdd43265777a7fb8112b05cf8b4f9d893d8e22b3eff526a5a241d29f04fc11dc491f9fc5236c480c85af6049f66a59bb9e1c0c16d04cda1245eaf0700db62a22601822235d57e8290e4adaeb8c06e8f7cfe75248147989f58774d31d562a91ec82f35862d97b31f3d58a5b502a91fa1619a517438da7548977e76e32c21c0aba036d72fb0f80241ac8e498246f3fedd608d4d5422baea17fceecf32602e264462391571f6c22b48b7749354d28deb4441e1c1ccb7aaf4f46373b82c588ac4666164b17bd88631442bac49c9159791ea641f02c33b9d17bee73763d1670c3331591aab18f7a2170ebf95d70b78de68bc508b0cedc0843a195fc4a715713f9ca48e709cbf41721b6c52b4cdae9c5ec9f93038ba1bd8e4df2d6bad11013f1fb4f6f024fcf4f1466a0571d151acd72253325f0cd5e2cd0f94f95a74376adde2f01bdd66f546c052e3cd3a19191dada2670bc12393c70583f10429a141d03647691f121d6d693d9cb445a8faf861f3db814b7790b75df51ad3d7de3ce1d222a4205aa7b0ab11fe58e8d3e9871fae4fc025f95ae72b9a7adbb86b206ec99201d7a2c01db3f60fe9976b9f1a09fbb18740a1fa16bdb9b10ed93f1554f36671e7f05d73cee0d08fdaebabba8e85382e738ce4c6945ead2f336e1fc0a5625c45c5a9f7d71beb28f8924864ee8c9fc0c110cafbb9662a57c4133b901df4114e46d91835ae9f311d9224fb30a2193871092a96f69d1dcde22f298500ef8c544f689d51f47cba34378dc48c56e7b4d5681137c63aad5dcb6e2e625b28048c8baee45a2749a34142b6ea93910e503c5a0b68f9e40b891b5a37bcff2530cead5acf8cc91ecc1f7a1184787a2189e11fd0b1d1e9eeb75fc144dffcc2466b971a47d81333ff55322f4b502df9e3e75016397c339cb3d35fb77be90dd01bc4cbb923f0ca3fb22914905229816238f5319ef3afc7cf8c0a55c6d67943482c6f7aec2ae8b3ae06511d12d49bb110074f52218ab814f1de25fccd5f3eb4cd107a2ad21f443378e06e9aaf0c2be69ea39320801c480b0714f4257656dd3a713ebe275c40dd48fbe1cdc1b2ab0d0e0a5d2d202bc3afba84ea906fa1a7f12436318f4958f11ba0103bc0ca573ddde5cd5197326d157cac212329bfa8fd5a8f37744469967b51a200331d4f314d230cb1bcd15afc1783171fd945c65d6339b24d3c59be26f36cbe71274cccf5e230cb91a85165a574292da74b3c66c47a9596ce42a3dbd983e0d38a547cdc3104bb4989fd5e1427f2041ea3e1811e60845534cc11ae1931e84a1e3d1fe71c1118e183dd636adfb445e557e58fcfb076bdc730fee5bdb9ad00f21d31e8c31ca1386f1afa58e2f5288da85afb7e7a03e43446fdee8c99dc43de9e9f67ae0da888c17462a02c4f7324ac43389d037d2438fa9c20f130b3993071c2c17d79c4ad3acc5eca2f380bb85964c3257e2180bd219bd8a07efcefeac82e5c6cb551cd388f0c2ed0e3dce07801f1aa72f2f32fb03c4b673ae8dbeb16e0cce0c5d8c846aea81e5a83dfaf31c1339a83c8fd44483ae301f9fb633c5abd802fd444ad23dd37dc1ff1f91d60ad1f9dd9ff88693af2c565a5e8c5abd6da429eb1bfd90ecc0c1efee45a784df8cbed5ead9e812060e7349a9ccba4c78db227f854435fe67f5999c5335359eec73150839b75a846f2c3df8d17984f27d1622a5fceff228fde59d1862453d422fd5610d9529c72556967459d7de7db776138d122d3772c078d8739a0a26d39f9a9c3c7b3db2525dc87017c624a7f96841522543e4b2b0d595aa5bf6d63eecb20e031f1dcf4c15059bad6691a245a1f53574fa7ab40a062bde6f8334fdba89489825374eb9c35abd35a8f5fa4ddf81d3"}, + {"0000000000000000000000000000000000000000000000000000000000000008", "0056faf6a0849a7d34ea251f147b74657480ad66b01b1d8ce8a7c8f8a9004e22b5004452bb00c4b8a7582f371520d92d526ba31d85b9054fc1a6f7c1d8dcbb35aa52331f50836554bfe40b6627f0d6ac3cfc3f7b05b0f289c183bdd1029ad862e5d7fdda34ea988ece0ee2557bacd1e18e9d8792ef91c252795e69122f5707c49c4afa49f7c4ea08b4b633fccc2226835d7ac428ec9b4331d2085ceb3ca628006688c64dc11ed2d304292721c30562a7446f33b8eb66652e33495464ba17d7843e8f13b7f9b93603f680c1dea904d21524f705b38a6051866501f78226e2e3ca554f609fdc8a710a6d9bcbeae1ade5a66f41d14779853360e25ef85d05d0fa19f50e990dcc0a1574f5af8f0e4f81b7a9c622be91b56658139cfd38756b3d3cde12d211da09ce230827788769fd539914b87c006d061346eebca43325d212c2e09caad56ed164d44a42234f2d0fded4e5010190f10a14581db25f919f53a70df19869f5024126c76fef51687bbf9e847808817c46a66564d7013d026cf057a08907586d2481cf4cb89b5751d4dfd7bd2fe714afc0d3c570bb2995bcedaf9dd6eed09827d9027a1ade3141d41da48cb300427869815e11d1e4f71176f4747bd438b6fa3da1b4ae4b4579552ffd102315e483ac6f5f6e6fd14e53c635c1da859bd9d395d9251bda32c693332b250d466b5640609a432b1cc6ad01840c16d4c94111d32d493db6e3f15a546f5d296c1eb5a2358ffbe71fe6a6160d3fccfd358c77139aa40d4b310e27da4653f64763042a67fe651b35ecd15f6a2a5c99b8a148ddcb74987b866fa6823b165363560222e9e9a8948ee6c752f61021c35c2621a43c0e6036c3ca1e5e706419b7cdc4bfad3028aaf5e218a5fd2184df6e3997965b58aa7828cec3037ab942dd0e474a6aa29c18f313abd5f95511a1d2ed654bb8d4565601be1de660cb6f698d58d15f8e208f5cd791ffcda12cc0c5d2a79fd40995f8d33855ab5e956b50db542c30692c1f2f92b9c49ed456811ad0aa7b12f87f016664b3aff5e2df56e7ed33889e2ecc79faf4e3381bb80582fc3f4308521f61c415f7f2c835ea614d5cd4421a20595ee8effa45c05bb30374f450a8defd5c877e16d087036aac36a5c3e8d24e293673658f0a5dbb491bbbe9a202eee62fd741564b76d8629aa326f5294d041f926853cd9fbd13eef3ce0a7d2e496ea69be0900c17b5e7c6669bc1de55932f011c9ba1eaf993f9aa0526ed229e81de1788711604e1bd454a1a55d9df8d27c36669c7dd19bf680167629254ef9a93fc7d0e2a0802b66896626403ce9ef669ad5991ce3ddbb47d2f11b895fb71cf10a8ee5c02bd98746675c1c8b0d4b40c8c52eedea65001fd2306c5c3f652e648beb9f3491f355dec0b5144ba9fa5b50818b20c8973a45505bb059bc8ea8f44759e6c12b4900f2de0b9525c7b566b3022cc0ebb1174397224c30919b9075a67a296c5bb0d9e17486e9a41618e2e667968b96109daf137e48513acc15df61371afd138632e2ed00adaa812390eef0cfa7e678806abf49901624262d9759d4d23db4d143971d5dc4511c5d6e4326440a575f18701aadf0e1e17b03a0ca0e73ac5cbe832abebb0b77e4795738165591192e8f25df56d6bbb459c15ad6d49846f8d203f06685fc6a2c26a3f833fe19577ae2e596518754a8d20c694c74871a5f5fa641401d1bc8766f7729f26df369e8cfbef200a3b19f5061deb6d5d034a20bb43976cc747136e9d1ea519a3771e12fe59db8ef99f770a0ea27e68c3884cdea57b2247e0c5c349f0e7f7e70e515bb7b48be0815f512537a651e04c366b91dbed6d0fa90c027654c4459ea8146e6c2a562d989edcff933c54fe1e1eb0bc03c43c23c650ddbe697795bc8787"}, + {"0000000000000000000000000000000000000000000000000000000000000046", "01291b3876d9b21571b4425d471f2f60c8559d0f2f19da5a3ed527d78dd0f893b2d2626e852c73d080c70609813dc92bbb6fcc9942597534b24b04727a3cc7109ea99e0dd126cbeae6022e952361131463ddfed70349375e4ff3da43e6c8c5eb34424295eb649167fc0e48f074f8977b42dfb5c1fad7778046004d58801f04dabdf326581e28c62e94ccbe57cff18783f6253e093a5f4bd28f480696c9a145c73652ae93e4d8566a054be5c4fd150543c3246096e9dcf1f0939117731a05bc9f31fc87664662b8247f1ead2c8d8b86ff762e098c28a0dcc556fd062ec593e261e9030bfefd179a17311abddbcbcf08675b150c75fbc566159791ea3e129c0eb69cb6cfffeff2a2b7c5584aceb54f3fdfca20274ba9010c332153a34211181931bca5c11e6a3c20a2478038a91237e764a9d50c5c6d2ee447fefb813182d7a34d2661bbb3db755332728ea9b08f19e6b4013ba69df28f1e06d78343c03ff44fda6fab9e1b8950bc0f8eda97ac9970dc86d90978fca9ce73d1083f01499f2c17dc2b08f89fa8301f641d3ea5a03c5e5417cd4abdbaa1db3bf0e0a5951d6d6c32466d596d030a6eb75fb8cdfbb583b5b43945dde759426f92892d166f844d81261d515c1df27fc5ea1798a3b8467c140b8a970d878767535502f89bd9edf022836bfc90960ed2f43a57851b12dcafa67ae6e926f23af315923802895512284599c6494f72835cb90b1b0bd67e0bf32bfc53ab545a0609c44b491132e264ae864675d00807bf86b3c7dfe555fbecf44617a56301158f5232ed0c46e9008ec5bf7dccdc011284555d6d9f5f1bbf550bac8d4b760968a4ecb72384f53630b1018e1c5a6d2a97f36147e9ca2582639acfd9e47cf6c9fefa0cbe0d2d27493970e763b9f2221581f2d0b959ccb7ec09546bee7a84a1f7d15d053d123d6d275f5605fc076601ed8a463d9cc6478b00215c9a53b441d7fa55588f0a8a1518460f82ebdf4c957df278799211d3dec8a83f9aa481d6d5125d09f5e656244c18b9f2c9127da15190f7c30d1e2b893ed99704b6563de9d88716157e07e5124c12dd30ecf951351d8e688e85ca7e70383d6a5ec4f03e6a91fdd8a0783e2ee1c87ec1a41c48be0a3c951229f0f84593add1b4962220955e093dcdf818c70df68d1f98eb7dc1c5c81cafc09a783e757d8b048282a0a571527dcb8b1483113b5a8e9fbd1f27e90df952a965860ad7e33c74f63bf9893a2416795ce0285596550d95079ecdae031eed470f476bd5df6fa247d623c4a29e2af57ab1f67ce6d29b463a08b820d80937b4d89c036c04e286a336545d27e4d4455d6075410c4612dc1187ef9f3597c566e3650e7be67f874d09e6f0d3fdcf6e50cb4300b724363fb2ae0bdce7ff28401ed64ed07b55c404a481ba7721eac160bc624c02da13522816e35744b9162fd3dce43a030977ca5512897283668f64c7f48d84c4384d028257991ab16b1cb2bfd7bc5f6a6d2e13c36256c0dccf96d99cc6c14dde0b5e42dfaca5ba02da8833d7e52b6fe99f1f5f0ddc9d75b1e3a2d1ec9fc29f3b188545adbf16dd9d112cd12231ca9a6d610321c4009defb2c7359fa5e61dfc4911bc8ef38dce38e7ee6ec2dd3e6fb1fc599a27e33570691d509bdc00642d982e6e16a1c55c9fee079259f8aaa4038779ca47ebcdf56ae64d7d727c860b27e911bc2923f9eab2e794c877e996cf5d96daf013c4bf0eee15d8a32a07364e376ba7beda0f1edf9534d81331462827cb811e396dcf6e7b86e02e180b1208fee9112d55cf19abf632be8fd8967669f416cf8b2d95b4f83eab6151a78872f2d43dedba40839406460f590e6c1548413e8ce1427f04170fb612fe97c7d51d337dc197d0d0e4be5392033a703675cad2318590"}, + {"000000000000000000000000000000000000000000000000000000000000004d", "00223e23d2afd1df9f26f3456f4c4e9abd1c5803eb189f828507a3ddbd5865c25f822df807310859e4ca1c7fede73107210abfb561e238220fa0d23568166927ed4b0b775ddc9b6867a39bb8d63ec671a03c3451077a594839affb3ded0fd0b52314ce816cdab1ccf01528973ea28cd2b9d880e39111f0613f2859ff784e0908463b2a87d00ff155618067756d64ecf6bb5f86379fd7a88f9b8c0f6f96160bfa51e14a89c93dbf4604ac27f160caa1ac9f9f6339c37305210450ed9f5419bd8dcd5f87988e83c8d38c3d5d1e2389623e6f3b071b27f8e4913ceee36343604d4c4016dab2fc00820948646c4c038cc78a36c4d857679fb995cc75a6060650dbe2acc53fd99d4512bb3c4596256aef3be7411cefc7cd53f052c3cda0424591642ffe332b73beb30d59919a7cacaf9d98c3349405fc6962465695a3fa0fa347e8f59f1ed3e257f53995f4a6a5654edfe2b203c2c29b63ba5983dd08c5ad60b145a36c727ba4df16a8fa15a906cc5044c696e7bcdd7a723e5bb6d9c72f4dabe5765726bdde9acbb1e4e7d803309ed9e3eb7075df926534dca1febeb9af3ad553a38bd3df25e111552925a017eecbcf59746e25d548a16677cf443c116ebf0e8324e4759b565298e11c1f90e465fef570427f8e4dee192563b3c7d5a8d4fd57672fa6ff7f505345355ab86f18818047075a22e51bc2fd9b7f3a8804c2d269a9e9f261c30681aedc29a61c9df8a91bcf3a6ce71a22e2ce498348b4240e6e91b521752c05690cfe95d37e85841e4208e85534d949ba9a6216cc730e960f907cc5ad1b904fe5190d2f209a0975bcfdce17eeba2a23b2136fb7fae9b5ce6d74e712699a956f49108a7ae730c0d78b26783a0cc7ca8285a11fd09a2bb6e79418f40307fb66a55f7a6f22ee053a3435534d4fed04d21bed3fc311168546d94197b908df75450039cc295f0031a4a419c2f53323428db242fd680f01f1377bee0d6523dac4549f5934d12de797725b4d1538dd9e6f551a4f51de5392b9ceb28b2ea45eb6445a92d7400f989b4758095a7367d658aef2edfb7b4c01420b745e65768ff240b267b644c8ca7c5354fde417143ed39623f3ad9f06b317d472bba15616cc2d7301b6f48451cc5102d4fbb42c1eb62fa6734ad4a9db087fb0b66ed1685915c8d21914dcc05dae48ef166705c247b076d06c9ad638890c0e78c0a2ace2d6c8cd228fa6807bd15df96d048ad3005f8fcb4f419d5df41173c2151c4b6d4a8a29d1d1ccba3e78d4883b3bde17fd71e4a76812a754846532b0fc910eda023c589408d3a52140ce1ee2d74b28aba8649596616177505416a9aed9004f84978cf96c299563464f56b17eccd22524b149e65bd8e1d72b7504dad8b50e991f7d6ec826653f9b814de002d325048b613ef31d851b3779f90170a4dd63b28197e0a2a4ee58e7cc65b25a1ffd2613a1f7220f557654d62991b90f746ae9382d98322e25029df0408d0f3531f5470c3a7f0272679fff22e747650d137317b36bfbb3d6f1883bab35e3664f9c950ac68ddb5e0315c99313666e9e46c366a45a1b12de0e3c915ff3845c37fd980680ce348bc6110ff58ef814db1d1e830a0178667dd651e63c5573cb819eaca649f74b10a6557bbcf1053a8d3c60fe0fc88ffff7d401d5f5b001cee35dac9d721885ad9c9ada5af7725d0612e568be418b1d143573982bbdd7a521f14dc48419558a5f03a13c994479919c8862f6249b7f571ead3c0c57012adbff41606a84a969c9b0cece9b3751cc07832cd3e902544e9ef470b00d71fed2021d5f0e3224d1db7cadcef8d07810f4a0fea943f96b751c903816f5fd20ce8847628d1332ca1032d4d4f253dab1581a8d8eeb9c4e004d9436f79f49d87353652abdb5e5"}, + {"000000000000000000000000000000000000000000000000000000000000000b", "0063c5d29f8465da2a2ee19194bf8ab96154ec0ced19fba444ba9606d6e185744f33a6897a9f2a3aa6e72e3035095cb99177d9dda3b6c43a288689fab951574d7c32f242206525b7263b30a5e4ee4b8d573ec71407af2a4acbd1b2895b59c0f53e57739894b92ded36444f22c265aa3e41cbb01764c03c965b32ee9b721b0d8d3799bc215eb7f094e23bf74a8cbca4d9afabce1175e22f571e8c9af540691ed46895af1e6a5fe84105197e6fa0c768d729b001b60c561f512aadbc1b470f33af7117d8471d3d25f1759431f63a0ba55e4be813d2122de6e3b0cb5661c4d56a30aeaad7fc7a4e7f1bb5427e4ca1e45f2f69136173ff84258d74130d5f07457b6f9025665d58fc517bedf6abf0beb1bd2f5d142a996d000ccfe78cf6b414a146189d65c9501bbe14899ef7058ff8b1d8b083ff1f307c751bf38c3b9121d6738f500e1f01248d9659053b4e031d1e9a3d2302a61879440a6d0e7c5440b77b77938dd9cc59122520d394b42015d1157a31245e23cc23de0242bb17df0df0c5eb9a71f549dd57a6e1923b4102c5d797bf5a5d98e40981bb927dfaf8f6a5516715d6216716687005c7d1c618c910e52a661112dce90322effbdae2ed06ed1a07cc9a2e1f9d6717c771419fb68e929cbe2709c191d009cd6cf8ec4073fbfdf287c557e8fa6da01b61d9624787af0b6206c7e47f6c7a4602ae768c5009bba2ac52ce0cf2eb0f1184d1c8de031802bf3b8410ba6647746afc455f2be13bcd947b31b8f84e44720aa391c5dc97cd9addafa78735592b126769b9092c13557d2c3cce48b571b4c439814236ad9cb7f41c240edcefd7fa93627bd8a28628c83f6f8203cefebe61140f173166066e1d5c9671bfe020fb7955bdd8b23f2b1831ab92e21eb7d418852900b030ee182dbd408b37a44faa941a15c3276135040b2d5af6601dbec7960141a7ed86c5642b1823701c05baf8147defb500141bacc271a35dc855b361430ce7ea48e19de1ae1b411b16ca41b3536f6cda80444824e94ce9191fdb696f42e7eec13f99656547fb362b02d9991db2227955de0858b6efea0b1db4e09745044035d9e2ce51dd47960d6ab4e489de09ad4d4477790cd2823674cd3f581c14dbbd8c00571d49c22ab458164eaa91765af7deae284b4de9bd4b10ea77e91531e63b6c25770dfbc68a046fa5cc3b0dc12fb22e64ff42dcd7b2f475bd4afe0f1ada6ff9afd263c30f47dd09ed60739a775d6470310f17a4dcb025e3d443b762945c13a62eca7b73ca33abb4efc1d286a9bcad94ceff3e5051ab42d9d1a508e64728fd1a06a321e4a35256595a19a50533a4f861140d07d0af4637d37e770c8f44df76b6099ed0861e9d9383c29fc275b412165303e9aa6e9c9677f878357b178cac8f45aea7d0a6432543705214b6ffdcaf03024d93d64f106f130b904b2b5611f494b75e78b71f9ec40907e793e36ec8d3923e2f9e18ff3055194c090bf1a7a9944bbacef956a7515410cdacd2d58b4c14ceac151268d009c5295a02e9f7ff7b6c243bb9d504d8b7df55679e99d66d84bdf836eea729fd9e5e8527cade966818d1ef220677776d515791e3a99e47ec1bb595cf45d41817170f51e1f2761e80ef5ff9f7a1341e1fcfcf62a2372a3275d2edf0812d9beb5253860b17ceb60f9bff59abbc20e04ed4f9b4da31b5995311c6e26f8ccf76038d2fd3883a227b3900b0df4c1e3e0b2fbca5189dfacc32745e3b5b6b9b195bde25ed7cf18f359de58bab8c266803ab7fd7d2b9a79c1cdc10da468fd98722e9cd0af20d40fe22053dbfdc3c933aba8ba9e51f95dface409f7d9fb8cc2b2827e0aca1a6df933f2603b4bc535ca3d28f80ebebcdc5b9dce1d176da9b5dc96613636a46b7330a1f9b5c95b1ead"}, + {"000000000000000000000000000000000000000000000000000000000000000e", "003eb79fd4e80b897353723d6e61de80e3aa28764d109f38f6ac4b39d55d1942428c67bdce0191fee5fc114333d28709de23f71df5fedaf6c07f920cdd948216aa71774725d80d544cb6e56938e17e0e11ff02d00256ffebbad2961b3d45632d1ec2eba1bd1e147b100d7f71f14496b875308ec2f8b66f6f567898982b2a0fa16492a8cbcbaef5db76f4fa610aaebab3566c86543fc2c45edb468542cbf65badc7c5ae3b3178598e069b789da1e2976d6ca17557bce535e2b8bc3d85371fd67f616d6ec359d4b93706a8472512ff8d9f5bdf16a1a4476ba3b9ddc9c046509fc4ceda73935759f024541da58470f567bcab32e8a4460fba1e8c15adbc24b5643b6f699e9ba582e297a8edaff65224ba978c29df4fd67f5121718f704849efcadf6ea1eb38ff6732f029e134abcd6766eca3df6de1ced8ff13cd19b4516c7322405dd4e57f148983e4ea64175ee77c3bbc004a600d55478369bd2c423619b2e3a21c367fc8c2114b77afce53e474d611c2abd0521221dbb0d47b92066ddcb298af0007b94461ccc8c0b8fafc9bde3f8b0861dd62cb8a25f5216592bc71351c68f860d1fcc00a07a6f0714a40b35aa51333785e105d75e1964b718430bd1cf767a315d717da39fe56ee7b184b7f996511f0b250c3ccbee513ebe24fd17debbcb62e77e0b4362932f03413baf5ef8896bd916169eaac93df9e3806ca69dadc6b680faeb037acc7c83dc6b737dfb00718d379443fcfcbf2da307521d85d333e0e963232c81a84b3aef1a4629f8984d57495adb07f06e5dd813384f634461338949bc60b285d14c5c03f11319c13240715610003c5351a3d4f309d548602d7a1f25d23a738a4cde22953d614fbd6a3ce20d8584d2f9b7fa353114434fdeb5304afca2571cf278f89f8c6ff15a629554e0b5d2afc54c9e4da865eeff392964eae1dd847006be24737469357655993431cbb17a4d8ae9ae2701b9b17101ea7fed5fc00973035460b6f22cadff2381c7ce0f424122525795c82877c75ee8ca2793500544f9e54d92ae582618876f53ceac0f102d34e5a188909d11eaedf6993c76ccb25bfeb4dd17671af93c83e297364b76e522ab495b4662333c71abd8c657596e10e482b783bc8c3657a4b941a4ae9597d496b2ccf5f31c10ce55bb4189bd114b3776151765626071e4e1a02b7d284fb84e05146416447fee430e9ed23ff376615ba22d0be9542b56f248571074a4ef6a7b5bce81105fb289fdf5be2352262d48edb629b3e1b2e9509251cacca19abaa49af86d7e303e9ea6e5588afd9fcd011fcbdb4d21ee2c14b1b2406da46121339003e705f147dfc03c6080329664a236217713af27105dab62d1cf1df3288560900e3ef24117cd7604dd1a6bdaf0a318a8e0973e50afd744314d93d470ec6ebd31d985301a942f9436302eb362cd6a311f9193e334e7fde300bbbd923b551568d1716c50f2378731dcbcf3d596d06e44f7c4a94cf61a00f03bd6e5cb3f11db99a1c0f263b0ec577740f5def19962b7adc5b562ed8f2911a08e89ef78f876dda525be4cc71b934e24b42b32e431f4ffd08f95080ca8842a820e9fd8e566f6c1625601d1716692158f5f57055e5c916ee9cbdacb554cbdb4affaca725136c710b9835eac16bff06ef357cbb10039a9645a303305c74ee945ca3706705766b73c3521c81d7147cca3bf26926381baf55bd4e4d485761cb228cfcd63b15a8237b02c81bbafac41ae820faec9645296aad18d584596b3549e6cb57f11ee9fb1adaff03e89a612c1208a73f41a3358c539599a60c70339f16d366b62da78c5b5c2b0a86ef7d08d2dace5b9d1506435e2bcc88abcc805061d3d841c12eac1279b3d410082e05c21244451e3bd128f3477a54f7fcdddf26"}, + {"0000000000000000000000000000000000000000000000000000000000000099", "044d6dc9a8fa8197e99ad123f0635a7d2c4938574904a21655fa872d25dd7f0296e6b604755fb4f6210809f8c1b0096b5d378da19273659e5ac5c45b3f28a11711fb023e93cb89582701aee270ec7a091037321308f5420b955458b73e3a732a79590beda5df12590c646d172a24f1a175af271830ae55e8c2669f79068616b5179c6d1328531702874f8c4a937a8bb836e2024d9e564fc2775b2bdc43f6c6b5dc9271eec2b2ce040f0b4f3d3d5d1d5b9277d2122144cf9dd1569e9aed1b2c799d120898eb1d1316ff074319321fd0753c72302db2cc248cead0d8b993559b7ff0e1f92d96c7bb9706d5f4d22db175c29a8b910c7f5e1724eb5a77011243843575488c4f57e4828360454ab52a6abe2faa26dd3bebff22d5affa9248642fe94b1b7c871fb16118ab5cd98c520194d3a26368ef9fbdfd891bb355fe2448045dcf5e8acba160b2deb43331e9497c3b45c50aa05be1cf4be9c560186790f0fb62a69e8fdd8ccd5fd4af2780a47c81bb642631917c8c8ae2655ea3932bf1e6f7619e3abfc771c39a99b4187d1d7488f96382a35567a8778f1dbea27ca381e9bc1b8cad3e09aa18613afff4ab35398872b3ce937dda4e18f65cbef34d42353ad166eea1ed7daacea15c8872c09a1de67719ae1bba4f09a661c66912acc9cbd288e52a71811b5fb993842e29e0b57ffd89a5def4c173297afe58440cde179d214be875e95f944880b36e02df715b80593ed593f75699a7e78756e40c95e5e6e50bc8db1c04150427ba95d1d8a132934a6dec631f5ab13dfdb04d3026fa97aecd2822eb7c9be099fa6bbb410d5ab76212dc432c29cf194490c9a2008d2778faebd33a9ccc48424ad4a5ac4253e9d25505453ca679a772bb18af26eeef98623b9275e75f32af662cb665a46c576af73a36cd0a19d849f71f78347a674727954d6ccf06ed05344eba800cedcb4bfabe0ddf768c5b8a627e97e305b60bd40bdcbbadc5c9f2bccb7b8748c7a6d5c20120832994e7ba3221fd7ef2fa329f1f253acd19efae414b7ce2955b2cabcd43859004425ae22551db35c30b24acd6cd6fa319d1d9b2b51947ad51fb04b0bab61716614ce9cc52bdf407a34bdfbb676113ea5fc89111cc414fb690db793515e1ef606c6efa6a8356219e2904ebbaef1c5bb73f527869b7f966736a4e1c642906777364bf9910d58e7513508adfb181a7059e73ad3bde9f2e285a8f75a818759daf7bcbba361615f3631d988492b2dc5437e748d232fd91f34cff585401621ddb4a5b0696dd5ebd99a3ef3aab4061d648327ec81164273727a6b3e553e015da23afa06586dd9ceb1d3069a21ab691b834d245c37b485d8e26cac7bdc79717ccf47b8809de1467e4dbd4cefca27bafe57fe1b91de9a498a04c52f72c02433dafb507a5f627be8c7a070c13cc218df4b2956a870836e74402bc1a7cc7c93de3e7fd75163b45705963e8a07b585f65e75c2ea607e679dbde90b9edd08311abe99f7d412bd6cadc8315f83a85e124bd69988a222f91bfab955d2f58580a09656377c2065ef561a4d6bc2b524b35d8dbf79a34101941d08d888144c44092f179683c525f4ed7d7dd2a6621e0a2e617bf86f7f60658cef442ab4838e62148b2034a94d67a78da5d252ea2eaf3060c8e7ac3540755e36ebc31e441eff2a61e7d674ae5e9f0538c8e398a774815e334ed81f6b7ad236b564a2cfe12e1881c85752246cbd39bce0654620de1d8e5ea603c08ee4acb97e9c122ce4333fdc9d58f54b8e2a84efe3c930898c151a858efbd1f1b94bc096a699184e3b987870d5f7ca67333768ddf8ef136405bf9264519175d9d0c4829ba41103b71a206b2f44bd4d64a411b14adab0c94a5638399233b1c5eb2d15e75e7c97c611dbe5f"}, + {"000000000000000000000000000000000000000000000000000000000000000d", "0004254a6d113251b3f47251d72c7345c98bbd760a19a05bef5ee50d5f809e47e47dc9abe6e45e3f3ea802967edc5409919cc56774bb326f9c1946a7940d623638324bcb397787ee04c93945730446d7a179d7fa05a176342a8d672f9fa9d1dde5fe45197849708d671f1c96db8bcb37eef170574d53d6a12255c394d9911a6bd43867d721671a9372fad4bbb4023584fce962864574b7ce267209694f18edcbf297328f409cb5560096bb8b4c58c685bc91708a0e8688064350f974352ced6df8836ddbef82e456a06340d2e31d7e7992e817e34d3c1dd56b7d4fbfb861a6de8e0a1e49bb5b464cee42f895d88d94d46344d96647738e1f3353cc2900af5c00b8d76437d7437187d2bbc543588b9bac3e042430bf392b8079b06a37ee345622f20d33fe865d06ece8eb69b746a7ed6d72e75be239019fa855f17e1f53e64e0d5afd25c33e52fed15745a9ac54337eb60405287f5d9827199b8d735a3df3229bb7701e4b4b17adc19b3ab89541f1fdc1bdf6ff4c8d7eff7a941624645ccf2b4dda336f87ba3cade9481336a5bbc104264a31ab5c9c09d587c255d6fa5aeda67ab174228505d4f3846f8b21717c68b0ff403c723970b853b8691b81f959740c7b8d600202c82a6b72d734857d493d103fca69a8063feaac384278e22893e4eb934b19b213fe759dcf07eeeb1ddd82becb273dbdc1adf5b7870648c477fe6d63098342c24aa27049551e12794d0b0ea0d0ab9e07a8a673a2347148627ec644787c78b20c82bbc25106956674ba044cba465c356d84d5ef1f5d6dd54099f6179db75c0a3aa0f34d5ba748fe8d740b69b9c0b6375c75f42e43c14f4b73753d5aaa942e1641acffe29d95933dff372a8a7b531e5c505cac9e1f9697c0920c0da27c7603199cce8124f97eff67de307f6fe50a8e5d3d3359e744597858b225ae3516320149935c7a1af87b4061e3b0ab460169ff9cb4baaf32347dd55c907743caff656895bddb468d12fe177c064c4773a0ff4951fc88d0721b92098b59975cd2690ade79ffae2aa8557b4673a178b2cb95e8719c44a50890d9ad7ddd22b9b92e545472dad9355b259e4b3b1d9ee524ec9055b9456dc2102b198045e29db2dc0215ac01c1b487ebb377b643d968bd989eb8c11e15011b77223f945aceb1da1381f31f6a5128e1c66edf9d0579bd404ec4591abc62945619e4f3b63889749db20a55a2c39ecb3be384b5f6700a4cff8ab9e4d751f70d9aa68a25d0ef6193d10623c1dcbf35f3a77c0eca41073ee686d05f4558bc75f9d06ad5a327c01b9fd2093893c1cccf8a3ff874668be7e7b469de8c99b48d13b70c93aa8f694976b013a759b229b5f28c522f640d7818cdeff5f2bfc26a15d088d290a34a67dea22b171ef93f5396be034b4b2301ccc2f095dca85d1e0a02b9b360c6d25eea99f2b17ee7cc9c3cf6570e00192beb2f992b4d1acb09b8d5dc3042cd8184a84d44ed0e5973601d2556d5d117d1f7a0d949b6da10d7744e379feea9f66d109ddd29e61b41beb661beacfa1345071d13b90a87332abc3b532c1ab1ba09cad6530b003eacd260d218a938f18b6599c4d4c48648f0be2c24079843dca35bee0f5748775d72bc6fe5db937245aa45987dd630aa48bbf8bdc46c4e62ac553b3753330a06a6b8d6bec89c751161d387e9614e36f00c7d89dd183c440e02e8c341ff97f1f354dfc641aa2c3780a72ac944ca8a98ce77629ef454d4d5ba4d8b6aedcb07304b01bfc1e2a205a836345289b4fe4d163a30c9ae09ece1945d56347923d3d413fda4146d8f1e793810107495d7618fc080a95b97aa16c184cb9bdc3f5e401b05c7192bcd238901ba74d301e3745e983f3e50191dcf4c782c8ddbafbe0664e611766f9e459f5cbd3f"}, + {"0000000000000000000000000000000000000000000000000000000000000015", "00c71a06e848c0019120a1a80a4b6bc63b79145d280bd42deb58ca4a3f5beca3f6b2fc8f9335f29bb0df1b4dd7976750fdc1a1c9d46600ab47212fd2d0f36c23401db7bfa9e35be00ef4116fb7e829ac0adc249f0a427143ee665d33d2787165c0e8bcad76f3cefa0d1a591d2a8408744bd24e69d20575addf17201f04651739f8c039a30c83b8f4c4a53ff7f3ca2fdf798d3146c43477149a4dc1f1e095854634ac0d64bc9e7d8b04dd1644c68284272f92d08a00de6c9d03cf0eb7482fd6e2427fcf8693a479e3054439ae1d97b6b46549070eb0ac3aed10cde6685269c8d459ca914157478220eead51a890d33f0aba4377c9b47a91007d5b579e07585b42a98eaef6df9f01cc4c591bda6dd77bc1862c1e2bce830c27ee80a637f0c8d39f7b2a3bfc92ab09371c42f9919ca9d198a1f365eab091a370d9830427c7fd8d08a6d08d391c45daae77d73717bc7b9eca023054e91643ef00fe09f1f7ecbcb5d8cb528a5aad1c951c50e40b3d1b48d07885257702829ecab68d7d139bcc3feb8e5b0dbacb42ff53d7184d102894665013cdb7973e4e48defac5d5e637c6f569ea2fd7a9530381ea92548289370b1703107ad98e15c4cbb5449915e3b6da55507880e6747b4f25dbbf3b4ef1faccde0633dbbbc24abc114d21d5ffb5b48021c70fef90003045a98746aeefe3e516c5e2da5f34863b7a55b5de05848b6ea5e631cfe1b0912c910f29a9b0a62fe5040b6ad3a35c5fe437d38fe2b50ce0b700ff745bca290a6ec0f6f094b5c37235f4721b7b165154a7140a6a7986b52f29bbc651e8a167b27a7205aa5daaf745030ffb31dd1ca300c72ef5c1fc7feaf258f3eb51cd8e2d7b0da5ac1d1a2fc1c085320fbd3a79f82df6f88a13a15da936cada9f2cfc27377b58981e136ff47fa51f48831f844a4f9cc18954f4dc657be7dd151ff70e0116fbca16999519cf78f4c8ddd385316576ecf5b72644af68dae454a92823052eaf6cb9b79dd15d7f79032252e57b16d9ab2906d09f7aa7845891af8f47be67199ef7d65bad3f9eda47d5405f9892d5409f9edc02ee8cf304058769b35401bfedc013da33af95f5a808bf96a87f023c93c84cd2304cfad150f1a4ec51e007c468c8a00d891501d586390040186e00d47978586db82fccd11c5931cec64a4688e59cab2d9d3a62350125f3e8b2471692caaf10dcfdb47365b283bfe399344369e86adff5935fc46683a8dc4496a3fefd2bea19a6e12d0f99ad77e6e137d43cf0881261d0ff179a349eec8f1ca19865589ce434dac94c1e80c87f3af9045ae98df4056f3fde40a23686b10091673acc574015ec66871367d779c11a28a00deece167e017eeffc05d4cbba076825adaa1352585db1e19d820a7b49c20d51a61fb108dfbd4627128c2651d0f62dd37fac29021c83df468c5fc6689a404ac4867748d33332f6bd255e21c88f1c9951bd65456bd44fd376020bbbfb200729026196cd98bf7cafc39522b9cf9104d54e4a5f1d11ac03a36f7a01ee5763192a351035237fbb5732068c0b622ee3fdc7701170caf3eee5264a9d3ec82334b78a188c56d8339429841143fad64140d5b18387154ee27e011dc2f5e87772027b5fb9b62cbd1c0d493849f9f12e28279990a77413ff5b8379b50ed30ec5058f03502f4d0946ba30649aeb2e768e5e8f7cff970896b3bef3937ff77b55d36c22bb034da341dc885909d5238b4147cbcfcdc01a143472674ea02a196d091aef05b7848e43bf32317448534aabda15c4d194630fa0f7f2b0f2e27dbfa232ece5a8fa055199d623af18674ad37cf3cf5ff2cc560f74e033574fc6bbbcea28389af8af616ad7caf0342ba27e30fad899b8a1ed46495dafcbdbb061d57d3a29d2e21b22cabb798c20"}, + {"0000000000000000000000000000000000000000000000000000000000000012", "013e48732f88b5efa1d10123498937a481c2bcf5390f814df4675ea88542f9e4f387f8d98543fa70b9d90ad506f8965a268d16e35844195c8053247159428e325dabe285e3b48bed66f582014de11e2f7c7e87950458906d98d89386f1f8fa7263e86313699d1e3cfe144987fc3fdb00d2e358944769b34d29a8826f30a925dc7e29a84af8c68669a42f8ade91e954c1126b7931e1c2a7e5d17f4092d2753c0770dac1bd797817bb0a46290b7dc5baa3aafe156ebb4b2e63380b1c09b81dce2d06e5dcdc75826f33fd9c3756a175579ecb0e193288e38e0be7f16a108358e9286d85cd025bf0d12e7fc2903ed33f39761ad8597846dd8e186fff27f20cb6aebc9f2502bb66bbd15b2166f39614589dce292c101ebfdfcd2795fdb28583b47a62517c967899a41ddf9f9a986397e9ab52338c76a4c8773069bb957238ce4bd8a2944921842004efae60b3ea37061c84e002563e2c7a43bc8bdbcaa4e7145494c9491aefb1901074589f6fc847cacae612a7b9c18ed3aa12fe97121ca61fe0656fcc51805d05a04beae7d5d57f7fb89c40ec7ec062a365ddae5f64c89e76a59579a596ad480b8637fa06892ae88e5ad355d1429a2d216ab76fcc21543e6c2fadaebd7a7ba3851a7c0529bfe4b8123e159183fec2d14308ad5b135e5ab9127107de16a26044881d355320826fcd85dd426aff1887c8fd7fad96030cf7c4c656e0cac42d318896370edabe00d68a1607dec7ad9651b7c5a3ce72da421ec9e9db8313a6dd07865d7f2342312f4030852e1eec77fe0624f37ac72f156b41c4afafc9ac8394c016da82e58822f3a8a70c6842826f626343395a36472d7a67222455de10173de7ab0824dabef16989a45608d411b27963b8be7b11272931ddd69a00d911c1cb25149f4271b5d8763023dc96d4dd8dd5e1530854e2a255676eeb86fca92a01f485edd3ee4285f8e478f105dceea27127993d1b24d016540c8ac6fffa2054250438172d0d06fac3e416e1d12e3a554916ab8e536f98b2df2a02b9bc427a470d8a80bf66ddbb859179a815e929cf54e5db4814148e42b146cb3b91587f082f52542b42d0c07f9f8734a6cb5d75dc8ef1853c26419ef30111f0611e945117883c1afb0a74beb9cda33c6a229f1b1f7a79352e3270c5ba6719271559cda4d3a978b7b64f4b5d3ef104e7a94f7b827b5b8bb3807fd2f0a57c8db6268bb019d1ca6ae8aca7d1ee7c929291ccdf61a479f0c53c13f9d42763e9c24b91ffb224824e3c08b8799cbda321d3c9b67bed9069f1b7256c9de9581b42f25c4d640b2686246ad2e568d62f7195e27fdb44dc43bdf7d6386aadd538dd3557b26524f580e030f7859a9cdad732490537afd7edf1ef24e499a8d368263cfa1f8abf4a34a3d85433d63fba8eb4f033e4a072615fd874ce01fd4d4e7067f735fc6a92dd84f100f920b6f096b40f253ef8c55bff9f9e27c27769e34dbcbba758941311aa0f6ab1679f67c3bda3b07a5463811df1bef12d1b9399f7e10a2d41166452a34054833f5327df59ad036f5f53e5d075df34b2342631df19b911e15997ab0acfa2a83659a8d3d3410b648cfda5c739cafe6722083bf8a6d08803755435ca7524e55e6f2f1ebc7f9d133265b225ee2bf9f738f6a52f38920267ad771db302ac4fbc93c90b93cd61e1c367d4fa0134e57cb0c74d438c5dcb24fb3369f906bddd599aba30e6542b640997e5fe27dca3c5cf3621ba4960683d61370caea210b7f145424a1ee759096196bc6b1f8ccb03274b0c11e91726d7c7a809faabf1385cad6adb75083d8b0a3fcadcd852f0fd13c18f0683a4ffcee20df2581669144f94075a4660e449bb45d754558a9ef40c5fb603247801adca2da79b898e062c4270240e61255747ce"}, + {"0000000000000000000000000000000000000000000000000000000000000011", "018e5b15f98d8f38ed281041db317e28968e078b4014fecc09c1ed2f5f71cc9321ecf6604553fdb1658b01e072d7b548671dd7f5320ff15ae8454e68fca2a635b849f612d3ab5d90ae338d093d2badc575114a0c04738ae1269b711dc794d3fd35e08051631815a2df0c156bcf13f6b5cbb62983faa6f02cbed16cfb3966054ef6fad58232c47487d3de16d5e40575f5f26b6613d43b664b95afbdc252f6bd9e50116e0a43f07910076b3cc776932e23b5d1437bf5f3f4a175b4fb90402a0a1ebbcd6e5425edfaf50ef26dd58e649a1d054215708278ded439d93e41a6c33bfc53daffe5fe0bee1c7cbd89fe93c1d4b16ce2a51d2de0b6a6351da2920d1e88a44defeb49c9b6f24a3664c21640a0d2a3310ddc42c8ab9cd9d7edeb9dab83ff5d1f8a52df1d050d617d66954a1df4e6bf44cf0cc51b3d4efe5211483baaddc7da558a05071244a6204f73fa17f83ebb0304e553c66a62ce8d2450b2dc25f39a01e48ed3cfaa45c76bc35a2a3bd1f5d9b9e08dece74b79287bf4ea101592584208c93e6e9622427ca2a76d3a5a579fe2462ced0e7aed0f23eb1b36355af27ece33153c63290b59451eef989c6d94d6e0bb34a7c28859d44a33051595db7ee4a4c2a1a723d183507778d6c2de1a023e0bc49f924a6f985fad96729ae0b4fc8dd24f8fc7bc20acc9f7c64aaefce9485384179cf0be5dca97405605ecaf564fde67b5c9ece0f235f0a5fc8f5ff60466060113c8b9dfd5833c3c30e67d3493f4707e74e36d1add2df7829c5fdbe34f51f99ac5ac051e0dd3d718223c962e1cca36a9cc31f4a54bca162608ba1a6eb20e34aa86ea44aeb639c95717e15379661b8bf498a5310bae112f651fc7d65ed3a1dbf07f318df9b671e7494b6747f765285b437615cfcaf95ff62cfedb93ac65397529c2a4a307510c77de4776e7d2c3ef96ce4305aee2c21e027cfbd7d511a328653c11a8b2577542210f159ff7f05e159822e2657df1aec6334ef8915221d062b89da45d134b6ef3919f58a3ca85c0954471303bbc3eff8ece12f6bf23ca532a81c613b47779d20d46e457512cbfa7667c62d7975ad1311b283ce95c2f12ea39bda8527da57707109a5c1b29fc94da7170161421a0620a4ddf2faac18315ada78ef8e79d61b82d1a1d1fed4dfbcd3fa4a6dc624da9b5da5636157d085ccdb7a34fdf0cd8c1b56f4a6f982969f73c45ae451b139667d55081a0aeb6dbb4d40366a6bd5b060b22cd264f689492eb6ee6a74daee9efedd3d0f0b83e5c5264a0eee34bc920fc9658d0d87d6a9bb81798620ae24d3b596692adfb73c37c73bd3d6512e00fc40b1763597a19d1c15c97ed117812d4a55a48367cbcd2143fc53b3edfa4ed3ff9f16091223ead27335dadff5963f55d5caf3a07829056b6d33cdf63ad7c3e88fe068d7917a6202ff79d242549c26e6ab98ff979e251466b1b50d29cbeb1543cb47295d25fca57937774b50a3801c7ef94276d5765c2697314c4f1d7e9f85b7521d9e16934d10ba9e05a793192fdd71aebc9fde6260b38edcf7e1c6bb5e75b834169ddbbe8e3e218153f1fcb2672c8338ae3acf734b09748db999ec458a2492703c50028da4e2fb51554c697a8b82adf4e7e89b079301d13a3af3f5bc31c6a662a5b2df6e05e9813fb0788d5daa9175e876e5237d4d2610e727a41de50841c4baa5b01ddb41dbc00f3be41a7d77d18b24f6e0736ee03947e10d10ac9f9340e94b54211787937e4104c3cb63082560c5558b296d4a8cc1307a146dfddb424da22ee44285919595b44042ca29ad771583dd5182e4d65480de4df454329c4e51cca58818268b621403600966031122cf6e894042d863fe3597a12730c37587144fb191aa7e30c9fa66d24c6c4b2b8e67efe25"}, + {"0000000000000000000000000000000000000000000000000000000000000013", "008ab6fc6b1b2b24fb2e53289efa1619c760dee2353a049fd50113280f3725c92998e9e8175fa2bb81b906c6dab431107837c4a35234a87c1e6e560c1abf7d0b45131238452f32c14133df05f0012cfbfd4c429f0ba818d17be8581bd07d435a1146a3c99aa6db15a32bf1d2049cdc9c15f4c8e3e0dbc35dc707a49ceb340fedc4b68f06d8d8e65bf89e88fc702e342f94623539594ad6009d686db63c647eb6c80f19359d0d48f300bda36bbd9afe41c567e2a289b7780a5b0ff9fa1a1c306acb62635a314d81979c86f8e965fb36bd33a61dc8e71ac161b27bad74a435d27d84c1943310fc5a3baa976b24673249f7de449fa37a92e532ceda1443010a3cf8b8812442dceb901dc09e32edc562d1cc99140c493bba9ae5c3bfcd96b410d46475de49cf69bb1744b7b88ff18827b97e94e1c3c9f2b5caf69008d9642c2f120faa2449a43fa812d17be066c2a07fb8ae012eaa5954c2e4f7b30ea1919b6cf115b43bb791bb15d7233ead05f70267dc7378b7468a61e09e9fe6dc2bb03f6d43ced059b69866fa26c5ca45eb06fd3692542035fd3421da51491e579bbcbe1f536c063de0d00cd6b62c80aa28737412641e7c2c96f5ec8a3c23222c6339a9591e99c72b5fa3dd4838b9971de11a5bb70d6e0a7733a7deb9b46a02e6ed4faf1dfd1e7d5d5612fe7e8cb587306776b1b3123741d02514d0d58c9b0779b9efca71bd81b63c92ea98a7418aaf73bb4fcd142709f560ac7327f3385789e6c5724aa7453dbe4b0c9c2a7ba962f68bbdb4a212663834ba11b63bad4d332eca383312d321ae0333c75c3731f1a101d681980c987409718f7507cae0a2a66e97bf8286e27f2eaf1d1cc0fbafb01a45eca707c81365516712539a70cd10720d61688922beaeaba3734e48f3cd019e2d5ca970a3648099e03619be813a144fe1871aa6b49705b10326c04110a7e931b42ad78ed763483b832f9e3e834b56d66dc3e60fd1ddbf34dcf7f0b90363681e395515303109271e145de4a29355cd220bab26509e0c0d3270bf8fb78d2e2351a413590f1c2739a9f80ddf24081e46575323bd11b4f952988f71ac651a0ecd33e117528be6af391785d50913af44439222976716d7dc1fd1cf96fd144e43327806a788e6a5a61f25bd160e2b1b775ec29ea7fd5f14d7bbbb60d341ef2c9ad1a507219ce0a84dbdb9f0d8b537bb65672a49e5dcbb30142046e7fec694677ee5a24ef59facf0a0085eabb80975737784829951d8c3b0a3d817d435ac5ad1434a3cddbd0f34e294853b61e83d786cac6f68941c0c182609e1988c4c2df4b1b5b6429dc41725b3fb1e67523a54a3bdb19ade936855a577b375b891f35d91178960280b02ec1d383f93ba49d34c5abda6a7fc7d9aee674d35b0a7a2f66fdd94b8e2067be172608fdb23be052e1415384221d5b7f7d0cffd8b4a607426bc5c70071aab29482327e1deaa22d6aa75ea95b3f19739ce230e0bd57d507f18977b62ffc7cea028dd20b46a882992d43c61cbf51882bb6672a7dfd72ecc7ab763420eddb9522724dcbf4212a92aa677c6e75e6bdc7b3535738ac6db2ae01995ae56658f3b53c297cbb4c8dc1369267e4514a1a2a66e65562256aebddb61f069651bb4b75c0007853078c355956e5b5bf2fcf198a7bb0694497264856d6dba64277bcfed55feb6b17a863a1d864d57a749dbcda3a4423b4c1f297d193b16f48006fe66efa022c79b78d8f446b9b3fdaaf64f5a794f0b306a8775d5b3cf0275f18081557c98e375b5a56a08995dc8dc0d2631619cc26dc5ac4df2662dbca74f540b7b1ad12ac17981ca15bd1368020eea5d1e7d5a0cdfac3ef950ca17c2f071ce0e0ede0a9992dbb2a41179a8be910b039ad993132ac2c1c663233c3d9baf"}, + {"000000000000000000000000000000000000000000000000000000000000001f", "0008da9390c87e0795fec608b1c8bb0dbb9274474007ecc0fb90cb0bd35e24e5cc16f9af51eb8bde4cc80eec238718c88b4d3527d4f4376bf4a95daf1db75f43e3d523a19a017f0ca906e7d0be905a9d9bbc98cb0033a6a3e5c08201d936c1bc6867a50c74c0397c3d2dd1c9f6351df51b3b76c5066ed2373da49014f9d237c867e56311003176a54864a7f6553771cdff97ba554567d399212e892292a93fec7bea0e7e45fd4fc403fd9ef2044baf1dbb0f338e8e1dc73d09425d1f561c5352b10e1dee5f68ec43821b36f916246239b8a41bcf76f329c73269a569b3427e5d4cf99803345d3a32196d6e3824709f4fe8739e615a3ba13ad7aefb430af227e182b83019fe72014d9d3d0134f1693ba8b918f73b06fa668973a45a4278f51c957a1112beb16320c3da7856585ec1129482f17ac51731c39cfe52dc211d3facee0e0f31707b34ea2039c8d738205b4166007d15cd17c71abe48c6338c5bb0593ddb89fab4c0247fdfa51a8f0232fcef797234eeb846efb27cf1d41b8026ca03e54811c2e8c45c2ec42e0642921ab2482200aed1678f93638f6ac27542a27dc1310f7ed9be0fd176e24dcdaaccfa9d112487fb002b4666fb281d178216f0a019a3a9afd9219a609e83a32809db03e63572e4dc6952309aa7adb407513555c9cf42d3dd1538f79f88772ca067ca003403b44dccad2ed38a8d900082a6e733d5de61d80d4435844586958fce8cccfb08c159ff759a06abb7c611f448b1a4f0d865ca86a902b7ee4c05e8a7a1e22bd057eae211e81df37012394b40e3ab14dc1603407c18109dd7ba475575dabe6602ad80c200029b7bebfc42419c2a044756e99e444509fe7f0b5f57dec3448d523666eeee58c5095d68c318420b9b6f24cd31b3d35503ddb81d8e83f379643d3e2ed4d9f75df5a3ae4a370711cd1a55c4baf34b8a00bbc6a35289233d1ec1a4be7d6b13c32599ba3ad001357247174de7854ec7f0bf7bd32fc2b7c05ca91e064a8d4ca45f047b4896a42e13fd1176a8f5db7638244f237a02de0f77c92b73a9df2ef7e5a2b68d16700456872aed9eac85885dc2f760a4788d57d05612542963c66c41d57b136ea0b2f294590a0eec12ba42f62af1fd7c5d65e42f8a1c6482824ecc6137f3ebf4c467ead4d99edd1bd902f9a6d4b93daa735fc7fd980d0446855b084748112892a3e3d731fa2236cb5c5983164486517685b0c3ba6451d4d766472dbd32d5cf1607fbd79044d75e295f7565f01a378886068230bd911965649943a7643fc64ae6022e6c10867e0d5964ed0d9f93c637739987b858e18e89addb60f47bb0cc3a299fed4f1d546b98bfbad33f0eb208831c78be0cd92b09af16e60f56029a04a2fb8e7a44da1c3b965f8946d4026e9ba42e6f6b2ac58fc9eb88199096b5731701d4ed3d41dbff713e3fe2ad21ebaeb1efb25d2f3b0301647ddbe0336f7d563062896b78c1023956143308f878fd9b86fe88e05a1544825703e5a6c6173de819a6f710bd9c3bcd7633f45028ef9f39e3b5728304044bb53961119c2f512e643f26daa0fdaa265982a11c7268e7919eb61977f132d966b89633747cdf8edb0a7754956895d37594b382ddadfbb302c057bf19771cb8a40efcdda2cb986bb2417e367d8de0681dd83102b009f6531a66f3347b54a9503d150ae6b899d01d5e5f16744f9a2d854ffdf7ded86db3eaeee17807460a445c28368514aece2680f07d60420ad250d82f780b67b4f6c3997495aa6d62fb533cc1cd82d771edb005fcc1f74f9254e2fae7d66714d9920fa8605f0efe17865b80ee08209488cbd6ffb279456232745f9bb9075be3f03162a0974d5a607f1fe28cc23aba165f372d0b1b32fcd4f7d923a3d46ed6ee632a95279ab395"}, + {"0000000000000000000000000000000000000000000000000000000000000023", "0002f61ed2da64ffb45f619b3043bae5efa21bbc9f108edda8eb187e650188310c19a8ca50ad4765cc2400e94e265860f0c1249ef236544d5ff589c2db2aaf04ea8ce21e8b650b539f63bb3a469308f993f49415019b01ffe8a7cf81c93fe1b2035ebe4ad065bcbddb0265f43ec0851d40c60f55a1745d59063e28b4a4c502b40e0627e54d2b6ac900398d0d71683fdef335e62edfc571cd90ee4ce33ef32f3748fa2e51059c93dd00114daa965036492a5208e35ed0ae923e35140f3c0e78de8fea0f1c10c5f90331a7562c78cf2187910e15a9b24b2285cc21b7fd76338ee64bbaed94ff79861f1d7c83178903d8badc83b163ca952547f63c0c220d968f37f6f33821fa85312342edb1d155f677f1781253bcf536d287bad19333997c6946c9f27d3c0de6102043ba986e531fcfa456ca687eb40e09135287502b7cc48d61aa2197edb9b6c79272d3262e45964333007e93ff9ad0f2e4da45d106fbf0dcb145f2f29aa21c2dfd709d8871b6b4a9d430143fcf7d15b2b0166b01dfad9ef009b4a7cd9df13f485f08d99047eee892194a11aabc89d51bd8a84693d2d1e3fa399052158d086b1c430a2f1f45a22172ae772fe4acec5ad0ee4159f2b6b14ce2a8013e4cad16877afabf50dc5d3cc03eb2a54b51d9ded0d9a2c8d7ad529a4e7be3969bd54c7abbe6d05ea7554478072bb75e0d45d6d6cf85880142daf91cc1e6ec8533b19dd2a366413f9f5baa240f815365ed99462b842ff6d699e1c8f313ea9922fc1156aaff9a2bf203914c142ed13bcdd9d63d1c338415aa729b90930891569a2487aa4a0912203bb3893c1e1a8e08f361ea1116c3547091ee1e86031f9cc6b9235772ff82ecf39bdd7192449d995f911842f5fd5b2154d6119616b0e393c0d6c9d3ce0bdf513ffcd9a34d1c4449c7eb2eefdf9e85ada4b7d989e5df2f4a09000f4062430e56009be78185797472ed15143a75ae00a93b760fdcf3454a7afabe06db64779c00fe224c020629cce340efa3409c21a594d149853277d81dcf03e6124c770e53098f97e210efde72017ff5d5b05b046901b37098f3cb9a3aa253babfd53d72622c19ba11a7ae485528f393c64a81d1322de7414d5fef1def13d7529b6fe17a07e2d88190bcec61a26b2e5619c1265c6a8d56ec59ad79b3e65abc7de9ce58be3bec600056d410825df31d80abe249bc27bba4aa484ba3f42294a13ccb6c0ab7a37386ea67d91f81f14eb6aca6006cc49f4d996179e51abb640560be3f5998dc634f08777dfad105facfe93434e74a4c321959078c2c98013ddc596a58a98ec734b0b3fca98ad0953726cd7e4b6b443cea6e44c986da95f478478b41c9525acc7d0f40464f085cbf5f963854f95fbc6ba673a513b84b22b3df4a3a6303cbf05de4a586ec4217403e1fdbc206e27c9c48c9f1f596cb79483070a71ecde61a7c4d32c9ba32329d074b8556b33614a293458734bbe46a0bd1f126d0e97503b78a421dd739b6452fb8f304c3214303686ad0a4c1207e854effc437f17b421000750977b2687b6b66a7cbb1353fc13d5c09dfa87578500c5c42349a3c1423ec48020fc74df59ec4c8be84ed173aef301ae6a7556ec691e746d62fbd0ee97724ad4aea9af9c793c3c4e6b9c5a238ae2f09ca81fd89470e499f68289dfd67416015eabcec974b56a0de29d8142b8238be5053d3d59185a31e756b3a6051bc240a1c0e3571bbcedd1f6cbc93fe1e74bad18e457f3a0738f3d249910e4fffb904a48eda685322a5b0f71d7a1600aeccea8fe5b97cb26728b2f577cdd678d80a3e1f67df6e7862a62f535a38004c42cb9a251358bfa823a525259fd5c834f7f70294aff8c82a3bfaf2461d587a7dd279a09d6fb86e3794ade4c3a2ed851f4602"}, + {"000000000000000000000000000000000000000000000000000000000000002c", "000f3151de4df181beed60212246dc399163d1750f0ef086ca2d4ed904dfef6380e9a7ea6225f7fa29e815d60bdde0078fd308e226799c772129be537d9165269ca4a52bf1c135b86b75db2236cec621ead9aa03010ad91362aa7c0f9884e23ae2c29c2397de9ce4080501164ca156182768a465a43cd03aa5e57d71295e25bcfbdb761a04a758529368512b3289dd373e221f26851c9f1e0e6225c2a3d5fcc0b7b76251e2fddebb05a4426c5654a57df0d6e5d79072de9979e4d890aa57f43e99d858dfecd91b069dbc5f08be57e0f48482178ffd9cf6d6e500dd0b351190ea0a66221f9ccf951954358ac191a246d065138a81b9983d44c33691de14455565c80a19709f85358fcac7f3f1abb5ba09841600d7e7bfd4b7d594bc53dd86df4a810747a94dfd17c9565f0fa033530814820897eb40f2922b555b5b29d13f3752e3c37fe0f9f2c1252d5abe2a34351a8f007d2c3a45e255912730c0c141c8be2922821cbefc39da7d62349983517abbb4c517646745bf2e5e51c50cfbb86b264e9e8df365314de413fce877ca6fe41b21a6caf1d69dd8ab5b1b6245d2bd8a80e016b2afd8008c6b5bec94199f809cb1f80437fb8f62a15d7a2c1fb15c0a095e406f7275b24754b11dfcb403d33570098ede9e1dd6fe659a2f467b93e9a6b25ab87801d226d5c38afe89e7b1d472c33771a75c2164d0f2b3b2033f74888112b7ef9267266114743355e5e23493290b23dd046b5a19058179c46052c17e7984563ecf27231ee368811226877757b296fb4458f2e3bbbf82912342215b919473d4ce4c538690d96eaef53afc5e37073ee8b5b563f6d3fbbb231d4477575569289d393f0cec3fd41efc6947fb65fa641dffce7ad53e5c7cdd0d3e0c57080a1a3335afa3a166d0d9f67b0b3c5f1114ff9ed11715873384acb516c3cd70c1d46819e69b0043767d08a66117d5b511d7b3d753c5d4327a2bb5243936d39ddb94ef07ee08d9e16d6bbe5c30732fe702d5366767840af06548b1f26cbf2f93db2bdfdae239a9bbfc61947795ace455ded47e33d65fd175c632049f07387304c93258b884a876d73532c10236dd8630c75486d4ccfde5493344be8b7034d59d614fa9281a6d3a372495705fdeb21656a1f8e50297f2d7348f3261f756cd9646dfd811259e98e4b2d9fd4a721fe206460d01198a1d25417ae0b5a749b772200e5865c5080aa5853ea74445859b010d23a274b9067f0ecc9a0bfd249ef8ac64fbf722b58a2a41cc3270f5963d8824f5eed0175584956cd9e58e012f80bf6ca6bcbdaa0789af0b795c7ab38ef7e6137b63cda694013a4e5120996163c65046cafe49e23a7240f80d9ffcbb5c0112791c1edf1cb175c2dee58d8c3329b30508b8cfdb13295204cbcdf58ee2ba172c9e6d9acab0f23e4c980707620489cb1273b6bd82b5e852a43565f2df5df60a3e6c898ea3227bdffc03ae6a46f5865a8b7c8e0a115969d92caad39f6aee519bd5e9512983c16fd66b2b90fa2e402358274d194438b7c28d0d43a997c69b14fe82875096e85ba217e70c88f61a7ded3c9e20273f440f8bc79785a5e43ab6a713f4f8f2362995254b2729aaa0048bdeef561ea34a0026eac1aa585c8e6350943d5b63d9bf6ddee527969b50025600ef53648e089807f8fad630a3603f90cd9b34e9e5251297d8543a8ac466a0e70001cf72742f09af721d15e5351cc81a24446d1594d0491a8ef56c6460abd73077baa77d25908624feb089ad9cccd85f85c6e1da38609c19fa0c43664fca9238d2d177b2d9e5dd5a59a73414d6bc53d3ae34d1acaabb84db984e275fbf930361db8441101f59cd116930c17cf693597162fe51212c3db0a650999e5ea4a14d55f7f125e52ec823d2380a969b00"}, + {"000000000000000000000000000000000000000000000000000000000000000f", "00aab49764362f15f5e7203f03ea00cc3d007936375633f72da55aa84b777af5fc985f9f41d926bf3bcf07e1cbee96c31e899515d44a953ec4e58e0a0d1ee809a6fb043faa8a2b8dc9cb5fcd6c41bbd08d9eeebf0457f15d53c2b45335ecd22bcf64ab618c4db36b100b12393e2f9f8d810eaf2271e77447f7d3b0febff705c93a4f9adb65a8e66e62cd2ba7e055a0d8f48bae15d2eb53d118126d0f3d68f8dc53e80f4026de3de701b29027969fb6a5aff321a92fe226b2743a75f721094368defe5c4b11b6489241cb5e77af2f061dae4126dd2a3c9b197a92ff87b4d8c2c408cd631a5d1e094bed8e4fcd6333f9c36f0582b3e04c577b413be32802dcb79154268221c2459183c3ba0fddd1fc7b15d90dfc368ae210f9d29d631655eee63d32d7709e4efb196bc2338b22653f704431e2accd8c01bcb578e6691d22fda9c8c97df0c91426a81efaa9f6dffc3fbd3e042a4f9f31a0a10d9e8250b46f95fd3cf8560856740b5e754bba07a000b50a3a6aeb7dccce9e71f8b89a0d781dd809551f0eba52722bb9d15032431d382a5210cceeda1a94b754ab260112eb4b4c0dffc9d1d3ce045f8bae3ecc757d9d11e4144f3377ca675b7b105304917d8919f49b29fd92a1e8163b5f0ac312b834020dea1459fdc87e16f9735774d86d3fae05cb1c1a8215bbf99f99502a874300a83f31de666aaf3178808305bdc2c9f84ace4cda68e0e5e7557c807e4b5ed6e611ccaafd27676a69b64ca6c19a488dc6520d7e54125dddf4510a197439d04f18990af4eaa26f88ddc3eb720d450d992ff793a3ce79b3d37109e27cb8df3b460bb86c259e2f9413bad5111bad0ea4ecf246d9fe716865b7d6fb9d037d8df1d76fbdde1491f57fb083801d2b2c39901f74054e3811d4b61fd674809e3f42a13e41979333d16e1a926a374ff97fb39f3529dff33e01393abc93c7b0ecac7f163c927a40ca39ba35aec10431bd67505abaddf03ba4c77bf5e6657ed7745aa2094c80ca9e831a2c9b5b51525f60965f12b3da027911b07f08cfe2e6c96fe7041babc8ac45e89910a51a037bdbea78705365f223f154504a85eeca255f4cd24554ee18c259ade31b11c7e37cd40afafc6379790a16407e2760246447fccb7573e37e44a9ba1bf481972f0755d5668cf171d84d73afb34c88dec061dc538f04f85898b2930818bb1a34072ae261f2c9ad381dd42513a6312861d37dc8dac8081cec12e749e79cf5e40f38fdcab218b054cb89f12bf6a00f264ff9ba323918f4959a75519601d8d244346a7436c71a9afe1abe05167b60b9d0dd1893ce621a9be58bf6189679aaa70d886165a651e05510eec19b5e4af234c905f554080ce1d4458b4ddc3323a7e71c1f6269de417515f84e1548952a05081a858aba91774d75b64687261b2e4802c53fee7e105e7fa98f414fed307ba51ef6b1665a1b1dee167f2a0475c802c282c6ab89c0d1e7363e101097623784de768b6d56d84159668226bd67d8324b117a81c6f8cf14d576ce93dd532e8e51571cdcf8b507f3c773c9480a547a84337c0039c055d5be3b82cc1e523e1aaaad2875792864b7ba35b7577fa33f4b790d7b2e9731d9d5cd31f21623e9790366e74cfde2792fb011b75d176051713bd3d46033461686f83bf037048c1f29b0cb8a3f1bab267bbe68f541ef1191959c085476936aa686a1408055219e716a3a90a7b87b491e1f5f1a9714d041dd7e02370d254eaf06a99e1c3429e3de4bcd0d469d1aed32db63c2b39db9217416780b1c96648b905e0483c9210dbe11620ddb2072b6151f6c2986329c0cff06fbe28638cd854942f81892881f69047c17a4e171c926c33f1e7c9df9e490faca6c244ee125d7e387698b3e74074b515a7da8ea4e3ce5"}, + {"000000000000000000000000000000000000000000000000000000000000000e", "01a9b97648cebb6b9f0c20667192130ae2369d8dee39b943436c514ca8c5f3858576ee1b41d3677be4840fb4d14e9b8aff6d9a72e59d36d8fc1215ecb7003433ca37b2bd2183d9308e6486467952070fe5b994f60f221b0049a9c5b9a385a1a0c46c797a5be954f29f220e6b6cda0d4f0d816b558ebfc7718a2e5cfd975a13d3966e9dd3f649f9bb520b4db4e0c9d629146ba73affa4ec7ad71b43da87d677a7648e3a67ddfabb7901fc07483e440cebb72c29954962ae66745d5a431405ac119e1fe0180b760e50b98833e1d134becf1a3205bc62220a4b50b2cdb921beaf5582546fc6f85e105eadac66245aebdb5d9ee7f866781e5e1dd15c78f109b1a399dc18db7b28e486fca7c1c48dcd964f2f1712583cf9f3de82233412329ff4d8dd1d19be7f2f5c2051ff5c50d75cd1d5bf52960ba6958733011fc89c2383e2af710a64ef3b4e82d2e49cdfe4c488f5623102ea07f004115078b33ba266e72409753ed07285490ae79633451186e7ca9e21f72b43875e0f491d6c2a042f697a194c95e7307831b70b3f3e65d087fd667c290881d9b95e83e7c352d2fc3a7ab2c297ed79a093042388b3b385365bac9917e52ddc3fde5caa1bf8a30ef7f991f0dad196fb5ac27adc4ce36a4f27d4f468064074678d8253a159f2a42a99c9bced1245ea3fbf2d1df28c8912cceb88f7b6b0607f298a53f097a24b073014e7dc899bd47db37b6919f0c06f8f3b1dcb562c3fdc4869cd49b92c17d434b8e64c6562411a41da0831eae4fc2882b3a2a151fbcfdcfb0a7fec15e49a28742b196091a93f0b7334d57e5cf37da3aaf6909113d0f438924b1c2520bfd46b7965db4e15d199983673a057a6fd3102fffb6bd7e852e518821b781eb7071c441abede4bb2a4b24c64d6636b8e56bc021fee9d33b02b1d7a1f8a15a5d0265a9e4ad11adbcb375436026b146b8fccce5ec489e0fd72e0d64e8116fa03680ec98b2e7470a105bf79d63eb55aeef5d9763e85010cc85ab253cb0ec6cdd103d518707ee5853e5e44573d50350995d0750089c8d5eb5ad19fe1e4983a9c1314cefb21e890cb6ced8bb411afd41fa23e20ddff262158211c1798d580eaa2b779a354fb9e97a69f782423a8f3aced931d43c3a092b4469a1f39c94c1883602c541522b29b6287e09213c859334dfaad1d5e525b04ab13708061f73bf0634212a1bbd140f1ff087faf2e712e74150d41a1bc0f92e97425407cc2815aa46d178db7480228ba234d0df1aa0e5edc2d9f5c32c3cc18fe5a2a60dde4dd6005744849b584fa5fe47596f808f35eb8ea87164c5dab719b73738ecd806d1c67f22af80577cf94ce419c64e35c6db99d155f9414087228a862bbbd0ccafbc4182570d85aec263cfa5d7bd02ca83181478d2b92bf4fe3af179f8ef640193f753202c1ca08a111f197514d842e4deab5d1591d1bc9d1284fed761a326e85f2b936a669c9aa6edd7d5a4c3a117369940ce7494f561247d93a5867e7b53a1eb6dd3dd9ffbd215b3e89f284f42ed844ed52996a7ae25b066d8bb06230bf61b907113583df76c1610fcd26750b813155cc9a463f256373ec7828e7c6abf7597d8212b87764c647e60f37cfe7b9cde519bf58817cb80e12d70bd98613f34ae55d07511ec380ca07967e832403fb26f19c15243d8ec611659827f25de84bd1c4380f5df89e388da720c721730943630cfcefa5eda7fd05d620ebd407f834ef8d97e3b65a4c9a1a8ef429880ed7a51bd88c8923f76361d0fa3387e56c66d6741c0e6c4a3e438ace178f7ee39b7ee33e322692395a74146c7ed1590fff32d3d0f1c09ea6edfac2e9bc66cd171dae74c5522643c1180217c2cb6e1391e0ff391d20c722d3847aa0d3e43fe3676aeabffa556eb7d143"}, + {"0000000000000000000000000000000000000000000000000000000000000036", "01d449dd86052642ae1784b4da2ad82db3a575d5a51af64f562911b792cc3b548872fb1d5a4cf33b173803dad6af1944d50f25183043d6f60f64e5cad67e234086ab7746b41c95ee54571f7fe56a6e274f1eb5e802edec44fec244b1c2c2013b9eb45340578bcf3f5d4735ae21151a9adb7a0dd47dbbc793568b4a3b875b35fca6b5b29a97f70691752e8953ee7f586bbe24ea443d07cdffd53c51cbce881888d7110a3e17d8578e0bf6c4176344dad3c425e4b9a63f958d2f58abd7c119b69b0fa997c9dbcee6227439d0c04e5bc9de44de15cd15da8390a5e3e217b9cd3c72203ad3eeddaecb28390302b356194775c4f4501e408d4283be5c9ba41b71ce3b75699345698949fd3b60b8efd4011facee2b6cbed652936fc8bbbb45ec6fe05eca4f343ee3643072f1d3ee9edd05bdf416b206fee2923f2bb5ac9d50cbb72f0c6751b5b3a4e879ae50a73288ab96bc2a022efb0810cd1c3ccb41d17edcbbe891bcd3f24a4f1bee87c76b947a3d3270252054ee86395ea0cc463c0b5b45b844c6546b44f2f0baba798dfda41f1f9c4617e20c705b193eab5e13c5eab6f3ffde9868352681216d7afa80a1d103f61e8608f0f7404a32531f3c0a4b39655b6c141249492606f0ac39e22b101fd8bfca47c11b81169ae7db02e39501ab4419dd6b2b8f58137bc83523482913d1f3ea8b91e9f3e6c6f6cffda1c114761c824cb0075dcedc11f43a58f7a896ad7f38f66b28069aae302c5192fe08c83ee0466e465b1752523a30cb58dc53813732a57607267abef709c53bd7ee3c726a58b6a2fd67bd2e98d6dbede5f380ca9e6a6215f91b03326c5455fdb62552c34c5595eb5fb80af61c80ba0789d904f171370bbf9066e86770393bf8581eadc6ac44e90f4b8cda8718965a930de13eff4f4b2edc8798be52a97d201b83e7f2785dc2bd7e1ec9a902c8e3701258b2f72e7ca469544cc4ab79751f8a42083c826f368c42d0a40b85d08fdb6ebe0d3230ca7b0bb41c33a8c3dc829c4812fc2efcee2685b81e56d2117e53eeb809fef2bd7e45e849b5a1fd8660f6b1cc1618b71f9e0a68b8de1975fd0038ba2b5046feea673cfb728d279cefb1618a48ab9cd753237334bc480d262f9953941032aab2ef06082b655f36d789ff91d727b66278059e585af4de7301883a345eb971fda6630f3b2797afa17fa98d74a5b511c7116ab086f79e072f24ad524991997f2203b3e6e8d2475df2a0b3e4bb1359e9346dcd02373552d52656dde5414a68bcefeb18145ea4f766cae3c368a6a6d3f12eb2394bbe86f50f7f9eaff2a1d76f75ec51c8fcc7f424a05bab89e253c0cb8a709cedcf0a2fe6799c4ca5e1c1c65c6df82ee91d1c0f5fb56ff688d5099f41e9cf2d841d9ad142251f24766e6f81b6414a17c6dbee1754f8bea5fc035866bbd171ba1f98832037864756fa9926357c501486a7dd8634a2b7b9a9064620bdcd568f721dce620f08760e335ff8f3b17e4502a14c0f7a14ce90aab612d9d46b190d83eceae6b17ca89585bc92495beff20701f58dd472c44ff361d081208df358f556b442d51f2b790078e10577ecdb64ff35707f0a1ffa1b18fb0f5b553d92067fe12284839f6379cdc78da09db809115c60992ecf0c65fb53415e4663b0f8ac5e3ff5a00e684421e07061f3bd9074082e27c0433bdcfeae872a7d77b6c7e288abacd5e4b5f9efa767274b5e094e1f8ade67039021c55f0eb6f581c6ace20973f9d4472469a413d1918714db2c048a55f8b1395bc0f59b0f0f9e77136cea7db3c726f26faeea248268e47f31c5419e87e4975b046977557458e5b97abe4754da6d6945e6141db62cb2e58bf084bcc4446471b84f79720c58568c92589b1a59ae38d5d8036e672195613323c9"}, + {"0000000000000000000000000000000000000000000000000000000000000024", "000d9364d89baaeb29b1905172b08f6dc80bb06da511f4856b78b759bdbc60158b51c6960a00d4969de905b24a40990fcb2e98a480a2719874588d2c51d55513074a15b7c61193e7f8c1637f20d36d2380beb3e207a279797712fffcaef9c27902aca55e6e8b1ce4c43661c75c14f0aecbba1bf6276f4aa016357557f77c1cae0208ed8d887eb8724868cf689faf1212fc02db31c07e33ba90d6dd0089e36beb6da2163787126e3b012b6effdaddc86500b291692022829226973ed8d14abacfe2879821f7046ca567d66da0d5c8ce9d1b971054d98bf146395a4420e1b2a1cb3176cbae1d987894f13f65c1a87fdbc058ca29e16bca6f50a2baf2820b3fcf7d0b29e915d45830e5f4134b6ef5e83819d222e477a7728cc6568f20134914c4906157369cc4290f8a309adbc67f7fd28991316eb3efcc5fadc8352121e91337b952941783bca56e8bb95509aa3897b6830209fc25bfce1bf0ca73e659b3f87c19b2355866f50e3aedb909c66d2b26f03418d27ca14593b29f3504031a7eea44077c46cd78d21d75a9bea201107d4d4f0b50e774490d9da3fac5e2f9a4b0444db47bf0bb3003958bc4ac2a4b7d9bb312f143a0833dbf10dc98ac046c3f34574ea4913f9701beb3e1f0f8dcf688ab1507a05714cb316c7b9157758c1bb1004ab1131b000f1ec60b7bb81d92f3a88de87a494fb1ae7f00b6830c0376c5faa220a9cdab1fd27836efc4a64a05d3e17d35d80a1ddee158ff6a62a59a49dad375c182bec54f0559bd498ac299b5a100984574614faa9cb37abd752e3ece1967bc6dc7ec2b438042cf913cf3dad35065088a81472ad23d5fc841c4f9c0da062d688f50687e174ca28f5f4cc07116fa22574933a7bd88571a21482a14fd84cc58b19d3624c7fb3561036a9110b4a9d5351e19b572f158f7915806441fbcbb55934f9fb80300c76c609456eddcd945913412ac0dad549e4fb35216a24fb2d325af65b849c48e452b5ee686659e39df2ea527c099d3a720a5ad9b43ddf84032ed353b7a1054790aef6e205ac96154692137eeffc6a78dfdf6460dcb91f4cec746ba6307b3bcd0fc995de65e716a051a7d7c7dcf16fb8b355903b72f7b8245aec7f48a0815b02e883251c86dcf5ab33bdf6be84638219540c8445863e3a1512709e4a7a67eff59ed9ac4d53ed28101da8f238983e8c0b28b1542313e3f1de34e3615df3fb773ac5c3252efba94d9c887e8dd071cb9de9e441a6df973f317b96982ab530abd338bdae2e618de1a1c721416ab22967f45a913b043f51a4978b9f0285409cd49d6d5434ca2a689129742b8ce7d7dc88f0fec0c218580974e93737a16542f734eaca18f4bee4fae0b427cb62a84d9b29740131cc74c2e2a9c2f16a62b12cb2d71c01419e77b29b3a739d10fe236e5fbd96201b42f36c45721e7d5ed22d0bd5c369194a85bbfb52337a7ee42e7248d811602400cf3ef89f12f9eb32904bc0b1af537d629e0ff03840464267d4497ca791b47844b613cfd2d8bea6fd47b4766089210d33a8e691d8d7b3f7dd740f97e7ff8d3bdf33876d1b71a76c244b26715d864e8bb9452f6a55d6efca61919335c0128ef3f2670d3fdf76c0d9325e2726d4dcda7b34113620afe84afec56c7b64f66496d4b47aec7c8fbaec40d5f7f7a6883f3c9b5e491e8cb94dd71d20111bfb21398f8feafccfcb5595862ba221ab61a48e4fa9335189f7df01514bba79f65a19a24ecb6e62343d326a422cf923550e5c14d31e2e287826dc00d83777ea1280fe3c0fdfbd2c20ecf6bc6c4e0cc1819d803bfd3b934095b475897ebabe56008d3ba74ddab9dc93f0ca41f53b5ab6e1b7285f667568ff3d8a6a5e2343d79152c306cdc4a103f7fbfb033d8dbad6966b4c6fd55ca"}, + {"0000000000000000000000000000000000000000000000000000000000000015", "005bf4a34a0f45dbdb1206f906e9858a7fe4f4e952067de6df17038d1e6cee2099001fccac5668c95a51023c03b7590b49b1d2c84236c1b8add553115401240323c5d8b29f50b5329cc36e86342bc4e3ac32524f0df920f465d80cbd14c3f1c06bc18f0255fbff9d0424c2b5ddcb62ce5dfef562d596f75eadf4843fb1194a87afd09f9d7d9fbf0ea5b224f5018171f36e171353139aa600d993dfb33265746540f437b3063e866702a51886ca10b7d97c21d42b27cd7aba542d9e26df38310570d4a5de29c4a393b63b3477b28965d4cd1e04d33fce321ed9d3eea320a583ada5b84d876b0a17175d8cd3df8869333ff45845f35ffc7e776237e06b06825e04eef0f095a30d25cac4d31686ee16dee27206994c385e4bb6c33e34daf67273bc6ec2c5dae67a18ad11df6e5de7d1829e05b987f6075d991f9a1c72211f1f4c7d22662fa45c06ee207baf96e638b8d8b601f1751f694fadd69a2e438d175d651de49eb717233450d24bf2cf4437a3b1c689364e5aca3fa7d9bdd407046e9e8fe11a0df64e75bd37bcb9e2c44e985b9b14ba25e581cbb6309a96953c685612595bba6bc0e40c4b6c3da1930ef6c4f78134b6286c797cc4fc920d1f46c2c19022e88323fc76ff5472f02de8549b79c7256a9c398a5d09c929b48299e4d14e6dc31c5f55fe394ea40123e4d933fdaa1b2658746f174851be6fc50346aa95c88f398d13b7d1d30115b8976e505fee202c445af1f04b1bf9ec407317dfa98b61a889b08fd91352579caa99e1d93d9d214657bec4d6a5dd56ad21159dc1d713ca31130ad2f398a86a51be21375522900945c511d21b166b123c92590cc61761545e5db5e42ed3ddd1eb91059dfa074669165b22d2337bb826c21d1a955f2a4e12e9c790b357342b552572b6cdbcd53a817be4c85179a8ee6a2b11c35f2ededb389968a600e7057e35e480c144c7441221ae1851fd77121dd13647ac95429665b3e1d183824c236b27ce75beaef8038a1b2ba6f55fabaf8137aacbfe00f24824df638106d13b841b050a27632b18e6d8d7cd6a40e3b70a040cc0af24ca32a849e60af751eac758a2d3e018a5f616e3c9bdac8e8bcc7f2a424205664bdd09895bb82d0ed329a1800c8793fbc52ae9bee4b9ef47e1fcbf42240c937d1ef7be2bcf5458fbab4aa832d7fa78bdd00723a65fed681a19f24fe10102b1952909acd358c40ad1557498ac6b71968fe175905d12b246f895907951ba54273c647d0527f7d6d7447dd0ae3966979a145a402e0273b53267dd5747576a7b7196307233aeec124b29e8afef3447eb4d13e9aac6c37e52fab9ea4a1b9ca256611b98ff1c82b2e3491a14d15ee8b5740623219e4a644f31df6df6d37099aa6fc95e12efd7a73ca78e87b6d3e3b4a5dad49b4d297606e18dbdc20c02984dceb066dcdb3ab3e238c4d55f8a4808dfb5ae162b62b11f602329272563f1defdaad22d39f2f63c12e586cc1796a7990b2651c68b2789ea24ef9e4f0823d39353ba0b98bd70d155606fce9da353c65dcfcd09e213abde8e7e49e0fb677e0cbe4d76b09af7339553cbdbd403d6faab3e6c98ee92f5e47e9a165eece6121c51cb57214c5b6a1c653251f541d27aa558c3c91565d74da38b3233591911dfe38f91dcd89cfd220402ea3663df99e0972c4083fe1e748ac1005eb36c2906d4cdec0ddc8ccdc0e9d4b6cd4efa9215c9ff0d5705c05cb0b29e7603946ed6296ace8b2a7854d76a0e0c3511de59c406db061142528f4653f5c00cd338700eb5fbab68b2e6ebf9e9f5cbc358e5f2facb7f1ae726356eaa16ce72c55f93e5ee2cf4d8b99c4f75571241886f413fd7fd5db875b7334947310efde7fbc88c4a02f60ff1299081ee05176b40d7c5e6609d98476a"}, + {"000000000000000000000000000000000000000000000000000000000000001e", "002b1b2b771a99695799400cfeafd73528b6ca05f70118c905b178006ff535c8fe20dd30a68c3a74e6980c39aa93c055c4cdb3fd08c83ad9b2e6aedcbc89f51eb471d53272a7c5a52b12eb671ba95b75545bc5ac05299acd7b9ed7358716a283d7ef1f85eb2a5d5aef3c4ae9fb4c54cdfbd38cc4593a6031f16805d1035d0779cef7120c99a333d1214570f1b049c6d3b7dc6f4fdd8fb04c28cf5b9f9ef5e476d0b275e86f1e062b00e9054b75c3a2a6bcf8912fc33908bc870efdcff509edb4843c4edd00c2a1697b4855dddf37dc3e56db096761d38dc5c957c4bf79e878f4076f44163b169614fcb1db95ec0f95e416116a75eef58db7fc9a71330f31cc1e4c085e9d08b9d2cc0df1273d968cd571da2a7beb29cca2d08725da36f9b8423eded58fda5aba27fc2bfd129b936545d1080cb4c53136b1ebd61d782ad1bd397e65945def69c4b4ce6515dd5bcb372446022c0c568fdb72430a3c22ac7df60ae8b386b5367538c09cf8c2ebad69eeba585133fae89e79ad3b31a00de5378fcb5305f341f9b13d40d47c30a33130b8470e412af4ed9a6dbd4776e1c1d62f2079aa18de40fc03df4534bfd10d66bf78f3fc16db68cd5b45912efc18955649c508203a5ebd9ae8ef5bb40763a8db23d2099d6672d79444cca9ca9122024c8705ead6ffd5153ee993fedfedac9fd07cda1bee5f6a7fd0277eb30b08b84573495a4589a5e9e3006359052db01e3804fe08d1de744ff39b27dae0a286c2fafe052d6c12fff3310b6a352f4ee44d3e7c542d3cb1d359ad567c05b5461d1cc77d971e7ce6e796fbcd51bbc716559fb164114a153a2e245763923d224acefde08629cbfb47a32c85e4d48ea6f389ad5ff4f205adb3767c8b1c7c5e17ffc67ac0e06a7ddce9f6da2c6730623822374591490ffafa1515a7f74a8ce59974c20bf9b32cd58773013fffa95eaab9499ccd19147af4410253a9d3bf131c890231cb944a6336c7370c40498a8adf717ea49207da50c7819871bcf591e2c8551f34c918248fc06427c9646568af232d81a1e45c99d8ae8d2a5532e0f30143b2125084b36480e7e10e4ffcb5f45ec0d7dc59049e0796751b6083bc2539d53c7c85473152daa3a51f5be5f1308a7d217d131808b2624267b4bade39d125d5b1609b63327d2ba5d4fcb7e3c242a2e3ba2a911284a28fa2d90729d12544274cf80b61f291394377267e04b895f7bd4bf206c27a4fcc3356155d50ce3d2f2105147e91209ee2643471a5c3e7c5afbd9f4596b286c7010b33892be0bf9e6f42f3d187c319ff17c51364f9a934081a6928a0116c556107a9cec2d8c8e2364b92206c553c898155962b4f50b21f1f89fae8ef195babd07b17e467fcca563587c2c836085bb1e22f2169892ecf29dc35a45b52ffad72a9133bec3d1c73016676c1e098464d9bf3a196c7654089026d1b62da01935ea7882cb4577351934b155e81d5c5e014d84723d0571b280f2dc539008afe3678ba9af2dd1c7dbd5500d4965c163d0d7d88b6f429bda6ebf08f1f90f6101e921be804e5384875774ac3414b9e20f83aea351e47c37a7f1a1773850e863b204037a5e7283dde6112acd46261d907a15630b7498c7b3c5a7e14f74a4b2e7dcfe013184465eaef9667fcd6fca1f17c12bf980490deaf0d2d785dd181f05b336ad9a5afc415caff3f4c1e2b3fe37fd1ccf043f8eaa1ed6e22e27cc0ba22eec70f95630aa36bf722ffb77242291d62318e132b4435ea661875ad8ff8636d71ab128ee9f2bed5d208142638e444f6fed8ca1396a5789cf560bc331d2f0dcb59bf65457ff3c1f593ec66dd729fb3e43f4d7a2e7aba84379e752d642dc34f3666a97ce0a64d6e8a6c7ac754f07205a1d64d4c0899e718e703ebdf2c16"}, + {"0000000000000000000000000000000000000000000000000000000000000008", "0034c8aad30821d9812a785130547866c8d1d7d7c90951990ba1e76efd49f83390d8e1ba71c1aeda387a0373d177710bebfee094f5a635dd10cd755fd1c4b331670ca09f6ff077c00127d5f15bf9629edb395ad40c6ee97bcbcf7bb2a2c407149d5df1c67fe37c078a1a3de70442d6afa6b609b33dd5d72769e195ffbffb1073b9cfd6ce0617ef1573e28cfa9a9d089656259a17370b7a64e144f35c4eb1b136fd6d02aa9a5a4184007a75455e0684aca617e87b1e79392b3bc37fd2e15224f4c4bfd852a36b6c8bfa7b78cd8f7c0f3ef42b2254b9cadbcf527c96556632a3d498da67459b2e3e3dde854e33e512efc374b8fb2b7a084b03357a7b8209b7733333a2da53cce650de6e59098cb10e8b785f36249ec788557d4fc1e0081582d3873e238852e4e243a60ca581aa6acffaf967fd4860c5aa89cd155b994a4ac372e015986d4cb4b7563b3bcb92584adecf3401718484ca089e7fffe2e12490930956888c9c562502184239cd86d14cb73c60b7444b2a3e4b4cd6fe9f21586f69c1219e493f9f63016fd7319ac8e2d82d8e22a74299f7d03ff1e7e1529bb9b13fb6281c18421c068be7b8fed606d7f0a011cc51adfb2d85431622fd0f28bf585cd43841b6bb782b57dbe6ae471b9ce2591d538381ba8f1e02b7c6ccb6516815d35f2d1f5e2b4769ac1155e4416f7944a7a422e65df5f3d11b4509028baa4e9258f8f4e78e954ab14fcd3a4108f4013837686da60ce0d6d392ec93a3865c3a0d166e709ffb18ec6dccb36cd10d981d53fa6bf25d032f8b9d060f42617f1768986ad6c83cc4c366dc8221cb81f7884f1790ae4c1d11f96f0f0121af66330c525d20594299382606b7fba929414b3b25a0ea497d81a0dbfee22927855f72bca6ea4f9dbca4aa92552ecab07bf7882263c50da19c99a5adbcad36b07a7cbbd2ff65de8ee60192611172859ceaefee0059a79e02b0e372b3936a1dbad798421f816f1255687f0ce68086b86ad9ae010e3138a47f9f130509c8356901f802418f01b320ec45592d5ee315a5c8edb624b0f12ccf4d5d99314836050130dcbcc2db37597334bae54d5e6b91055f67a106e50597440f26a7b50fd341f62d50fd115fd7c9cc11babd4d8ae14b0beaa6520c6dd3aa2681b9d5a6be5d226df2a5e760a14148f5fb85dd6682a8d6fcca0402c1b147c15b1f86ee9efc660d65804363037c3da607ac01d1b3f0a183afa4c1a5bae98df995c5f6cec92ed0a7c30c65adcf399004f824cc11f67dcd57279744acbecf97e6ed0585fae7df23c287a2ad255d4ca4060d7e2dd869834d4feca33db0377229088432a4f320e31db189c88249775368ed88d150335f34db4440169297a94936d69bbd37d34af0233b2ed4a9f6c2875095da9b74dd3d7f10f71a53ade9638b03be9b6af9069087808f223249e43423c054480e52dcd63adea5130ae3b973a3edc9e56184b4e02829eb426f9b5d69084ee8b4cbb3416be2cf81d5876256d095d3a8e97e3ca11e6a26b612c1cb738439175df30a78395ec91b0ded59fbb9cba570717824f8d7e424556b29d5ee9d0fa75d7f764a166b243181b9cc54706d458a560dff18b1e1f711602f09c2c1c2c148d82bc28e7f7ef28a42702fb4abd3d9b0cb19747ea3abe0aa140410cc3e0b0465f653c2e0cdaf2964e265bc753646f55b82673d0284736ba53237dd9b25a30659dde5cd97b319a21bc6c92e6f49f256712f18cb4dfb058a4136bbcc57619457165562f17da591e6aac63aef1eb0323f1f9c0f66ed003b5013cb0154467620d4c767a9281e77132513ab9e7b8a30c270bd9286cece5dd0feb1edf84918a34ccc22f08a15d7a27578ec53be5d7e96fb891522d575cacfd630daefa0e2b19efcbd213b0ab749d7"}, + {"0000000000000000000000000000000000000000000000000000000000000000", "0063bbda5f0581b59b4234584147b1a9652e9fc2d9272677de42ba07ebfca70289fc28ad25b3281fe51002455781038b0662fef0d1c0bde04d08ed517047620e428f0a891a9ed749bb34c5a27a749d6a1af1f405056e59bafac449bec554a127ccf0ed355ab9fd82ba09362c989b44b11702ded57eaa66fd42f2829debaf0a1cb2cedb0822e04b8382a7b2e2265768b79d7d4e0a52f48eb0e88c3b6272c4bcc6fd030a0a1f1471ff01e70baae5cd29fe7a2191335795e24085a5dc058a207c79cf691fd56ba9e5b22790c590e936bc6db9a90a06c4246255f7cf587c96b56f42281f3a891e60f815c976ce83480371fb5271827623d498a5f72b1a530687436777a0d0773f83f13dde5bced0eedd0a30920e4ce2fa35a4716957a712c319272c18c42f7055a007d6aafd79590017a7ec525b104cc8850128cbcd41098f720962afa921fc661497c04a580527608f4c9c017f96bc985d71dd85ea717b1beeec5f269d5cbd3d2e6e770466d8695178c7b5bb4cafdd7dbcc270fbbd0929acad7276a7c1ebbabaf4ade26426bd69dcf2e736b7beaa6b6c6ce1e59b1373f5e13295ad998f78600c772f7eaa9e9ffb201ac0fb28970a55c14d4eb0fc31c9b75a2522cc111a2373b2197e2dbd7b21bda20b2a28eb3026556452d40894782565e079235dafbbc75ba15be81aaba39bb13406a08c4725c7588d5e9bac03ac2affead0cfa9a14d5722b7f2f281dca510835e235155e31f9e9e813932a6e45c573faa6b8d9a3d600c29dc46a55f882d15b5619f6694c7ef7ef3fec58c24168bb648304a859d24650ce0b2ea05979d963aca077dfd90cf57b9bdc68231df88b14431cf939e03e713ab1bd85695df754e9622f163be167baf543e0eb614f40f07e5290c09a6bae1ce892c66792dab90f09216975c1d92a893c961bd945082fa3762378d19f4b4007299259f924b037597d01c1a13fee52cb157f1ca57964ef334db4329359647c29aca31322ca056b7d510403329b6df40dfd00b564601719f3f48797c73861b3e2d80786234c38215020bebee704b243edabfa7081950fa5d710a23944652e41b7469b5b484dfdacc362dae93f836661ddfeca55e3f59a52dfa2f5feb3a13535f0eb406b2fd01e4e38bc6ff782de0677cb1bf174d6d82e18d758b614766b3f850fcc5b6da95c1411007d1bca649e3e560b824e4e2ac9a2e709cb46c3d4cba4362a21c5092ede917832c51d83df52f55bef91adafed96df735fbeed50b5b99f302b7ac963f02f32b28e7b14324346fbe7155a4a8fdef3aaa791cab011f4aa624d6640be1cd55336e9b6c1829de3cdccfe42f449a8400eb9145e60ba5d382371029d0bcd271f730761d9f995c0023f1855514a970c209d3fa38181759bb7d9704231e895c2f06ad086d534e72aa1bf2b70085f942b9860532e2e213cbf44c4be70a75fa818304f7edc87d13161dd65db29fce51e6b5e7325c35b12997027ef227f97d416953b6dcf8bf061c39d45aba779ce521336381c7922678b8d54caa0642e65adfc103344fdccc0333b5597ee3ca8f355a39167499e6b70a5e04d19499e1abdeec999959e921ea9eec3911e30d6412e3ac9e434776d4833a1ed6b25260d899f29d39d5afe0e26317f37d20e3fff43205626af074457c01ccc255948b45752b1e80feb1fd03934ad7ba9d3e0ee0f87e0d525351adb316c2603f348ab71bb763a6077414e009d9c1cde2c4a1ebaa2340d0fb63fcac570f1417a88666e487feb6715fe56042a63499fbae050524621b70908967adc6437d606440d19ac0592e04171dfc3dc0deb795903e4a88ac6c31d2ddc4576908144631c6f063c53f8b01b18c0291a09944687694f03d233780bd562391fe9b04799f6cf6a1b5bc0fa590"}, + {"0000000000000000000000000000000000000000000000000000000000000001", "0045b702d14de9b9e8232186208dbe329278db39be05a53320f68a419ad8021301f96a1c1532d515f436283251b3541a8ee30f91940abaaf6322f0be3a47cc3999ae32129f14dbbe3f46730ef44185d49a9b81b803a6287dafcf6795b860d413ceb6fe7df3b374633e3154b6636f10fe53e957e41c51310d11f6c8fc9c4c0b8e07ecb0a63ee73fc750f769bce9970dbe7a1e211234de9827235ab1e114931633db69e0cb22472789059565ec4fdcf1b1c8a230876be485dd114131b67a116f535da61c3c47981dd188d37599a0bf6bbbada818bf31cf48086b2f467e3286e3cffaa1bce1d366df1c2849945907771f5c941253eccde298e68bd559fc07a94da64f925926b36223d4e6f514fd314cd4f93c4436329185343293eed3e44d78c6a3b74b253b906d17ab99c3110fc88f1f7ce24c6b3a234e32b554e48b3dedba7c05e524816fd28726f3d8345e215938d65b03440fec5e11a16b35fe2069a4b6cbd862e884daf80c3091e2cb49d4210247e74a97dd511eab6c75d7990bb14738ca51a23dc384d5196f58a4d57dc0de36361c18010d976ae9a9a13174446533f199de48b781e41b10e98a0823a99179f2e2246cf18279746a1db3491d05fcf51ba7999976511438153377ba9b10362bc421f7bf904a6bd16364a9642c64b9843651e1370967257c15471c0a9bb1ab48790201df5aa287a43d2ba9058207af2bcf6004e88471285a3361f9a432f703aa0771e5a4d192d5659123b40a40d30735575b4b063705d1a8cde7e579c9db1e9513342b281dd080db991c1cdd9db2ac6ab52b9d94c36f2deb3f3b256ffcfe5a07397d433050822f465bc24cf056e3e9a34293de5f0ba39489fedc80ebede770f5d222aef20bb41a48fe086c48b72e5ac09f053e413723cabaa5c86ff680280b2f5f6070033f9ac62a3509ea637305e20cf92cca00dd84dc689d4c157da4b5e5ee65c1b23cb396e2130beadefc9e04cbd93eba03b846f52ee23fcb74ac9009a50bc617562350da31d244672dfe1d69d5fd7c0d0d7920996ce1bd99a4c37197df4a0ee2d0c4b6a195092a688c3de7d56d9c8ea0e50fc51bc6383e3634810dc8d6b05c4bade10f0387b19fda5d3afd2eddc3310b561bcc92275783705d90edded93a9d962c2d8245264bd7f4ef2c824d93c262fa872de7b72c37fa485500e7cf58a2d764bd7ad773a7af73731cf2800e78d74cb95e12a3d3c014a7579ae26dedef4ae5307f492712cd1115d784d931d89624676b6cc3aa27befa7cfd14975acedc9c37e3702415bfafe83f2e7d0af9bbe80c57ea7e0b65ce2bd67d13fd52c66c450dd46c482c47e6f3693b580a85ce4e4b47e1efcbfb4f4d3aa5fd26591f05c612a90f92379592a5cfff09df439fd1e430a6e555c094db47f3022329ac368f111f11d6ef2102d689c58ee18d05b74b9074d2e911c5aaf19354ee42db435f57ec783bbbd9c4993f2a410da1bff448411ae0de592130b20fc5b44256db145888a634da8d021c0ba736edd64f49084811e11c4f22d57daad01ccd0843ba906c4b9709c209b2c88c74c81a7defb59a0219f2add37408b27ed69fa1c56224358dac095b7a712980e1dbe52019bd0496b54b24e3bac1ed5e52ca206802bfbc31bb952fff5399745d65ffeaa1a837fa0f0337ba8af8451580f9aef48da473347201eebcab8d06d3fa798a6b4271a37ea0921f225cb4a5bc18321c1de721434ae999cf64cf5262bde1dc327a19dead7e3acf0fac51b3c273eec5a912af6bea4e5bab551ca60e5175f90205d0a297dfd3e296f169399994fe1088193738f087d7e9cf9614234202a032393f818f95e02a3b9eb4902c732fac9278f307d94abe5b78fb077c3abfa79a4d4f2d1b6c731c3be66f33d3a2247e2805"}, + {"0000000000000000000000000000000000000000000000000000000000000024", "001724dd5709537fe60e3207db58141e1d9754c6e6233f6294a2a42323b119056aa7c85ff6b15e5f4f4d00d69600475bf6edb2ad025ffb577e4ca81568928c09aa5dcc794d175a82befab759d928f36c29fbaf970060e4c4179da5194a10931a7d9ed7cf04321e17bb3182d7a922cfc5ecb2d025d65262ffa5fa45dd4ec113a452663546a8431fe6818035539862c667bd2edf4b7d74255d21bee9c4d3b5b288ccfb8a0b8f51cbcd029adcb5496e70edd796e162393a4c47053cbec87518efdd61a9aef0fdb35b06a0a37edba60e901c9c3d17b4d442e0584968fd4095790254fdc5bce0512f9c442b6a5f1d617653695855a93631cacd93a39e7b0b12803a77be9dd5e9a5e4f8ff7a55646e7a73fe78f61915defb8c5053789600659243e2d8e5fe0c19e12a21994e79a758c9b7a98cf2666d3e233e44581d25d82bbb995ef49a65baea71738638f80dda2e24bddcf00078fa3ff0428bc1952629325557a59363315f53ab424dfed13b1ef9d3c404254bf0db293710e91c80df0f213ef9e4c4d7b363f873ca96c3243e1c1834a5313520b5af24729d0ba3d436965cd746022a1bf82e1902e8fe9cec055486855d85a404f9b025e9985fa4dc31ba149e494cb539420d855ff33addeb32e09b228f033964f2bb45e5d6445f64c848fa701d41a47bd7460bbf464c64f20801d05d929d35efa2f792681f842a07f2c175048a786d9d5b447b575461d1751cd31d1d186c33ba1ed50f8f97b92298182414cb8ee31eda561602d2a4be067671c9e635911dc12901f1cad246e118bd49a01ec7a1856fe59711c450bfc648cc967ba91d4b83c69cd0c083821819ed70e0eafea8bab88be140b01fab3a9d9223b53f044386626b81d698b12996227e35b0b8a3c2ede4c4c6db7afe6832a827d705905bf72d91739f9880ff776aeda272fe7f3e40be4f6d00f01a1bb88bf3b0ae9c6521e5f3bcadbfff5fa2fb2d1b59fe1836557df8a8b4f6a178455b09ea39241907334a2b4ed3f2b30f79f60fbec148d9f3503b32786ccbb42853dd04b56aee6cc9cff4e95f6dd17f0f6c0eea86918b48f898c037a2b93e2c6a5dfd49fff50f2204ec8a51969c673a32224caf23f28b072bba547f0fb3c1ee2797b2f1cb4c2225c5e6fca094ea5b86912e2cdb4f710e02987a5154ba152ba4ce0b681d4c70075d95b1eb66621148bd82fe8064b21a08a956cbf61536340b00797f11daf0242977e6d61e2ea1d6ae69177ddd6ca5488e735f9898530bf33f82e6647c0a0f2f498ec22b17349382de7598445fbd79cee8d3be410957d1a03c37f319f19da17f3dff1b8cac687e49be1319f11c5d1aadb31c5372d45728fab6a7e5777e25180845c20992549565d6f3ed674aec313ed4abc4af219356f8dd5710f77d41da5ab8fdb22b50209de784022f9eb519af984bb9e9033a563b39856a461d9e0d5b6923fc4127ff1ba6abf93a74e761969bfb5e545305b69ca60285eab8aa0842c075a6bd89d1638fa61a2ba75eba9b5bd0115fb142ebdbced3f1d18b522cbd0a1b87d457c8e902d1cb015236bc3d085b852b98d2163e79d81ab22aeff654b1be1676db58bf3ea9b414372c3f3076e261a98373e8769249b64e6c531efda548986f442aed523f7a61a5c284f9d94986e0be65570b4b29df996a79e1cf8b01e441405f94ce2458c8a61ba3961502ae0a83cbd3c9adcfe604bec94f7dc7541112870efacfb7d72d7eb3fbb133ecca8479b7154c3f53f60a24199d7d3bad5957d8fcc546ab0dbd0ef90d939f430f9e2a53ba80558fe257b7ab3eec1b174f10c862c842782787d88341591ccf20289407d9e72b26ea4d454e6da2a376ffb377f7a7767e68b5542aff3352a24d5725c60f4bf7e5592d35ff52886936d143"}, + {"0000000000000000000000000000000000000000000000000000000000000028", "00acb95affdb4d7f0dad81e49dc315a3ef1affdeac1fd12367c1e21f031a00534bc93bb8d516e45c844c0f487673a9c8abe1b97ce58c5143baeae1f25d79c326b1c153219222418b5998d0616bd0ba66ea1d839b0319ffebcb2d6435cb07041ad8f2479941ad1e9dce13050ad66d581ffd64ca723817f378e53e39f2b9370abcde8fc166258ddcbb015e6b33aad576c414fc4c354c0560281bd5a770c073796dbccdee8b15f6168601963aa08857d7874379606a41673a8df308fdfe5b2e19d6ee9abbad7bdd84a340b2778c9a101219db63032cb199ad09234f10a962cb38c306917002fe99b4116c9e4925c80b674c16c6923ff4bd11aa50507cde0e1edf631c336c37abb432515c928e65cb00d7ed592f2daa0a8b26d3ab955767d3454f177f5a0cfe3f6c19041d624a9b9321e5f4868e30fb2d22a1725a66e91c5aeefada98c3c71923d6012b7f3ecb521f9dab0300bea17a3013bb232f287357f05ef1376f32de8648021d3e7e541070a9a801b19f44d19509b75c168745062b6e6f4a8eb66beaee131ed89afd30e2654829250768e3be11c5ae43696f52d22599b55d1eb4d4e2330387061555507510ac824059bcf04f656a3cb88b940ca8d4cd148856859547d4c0a7e64bddd1dc9704f3064e792cd69bfafb72ef82df20d15ce0ee3e3cf2c30bd71d0561cfec42813f14865e3b8d5349211cd64202cb7d22f94997bc9798a03a0dff05412e4e1b6179150c4b17eccd39c6991754475eff984e9c8bf576d31beb974a169684bf0f8d73707c66b7576e0d3df32533f8adf0ef5bc45544f163ebcd78a1722f82fe44fd067398b6c495f2593602b134efb4a7e87d0d524c88257b8b555d95b556e6f23358f33d24c51701988de6448f155fcc9545a592d025888d5776626dd25d604857937ed0dc976f1afc8bc78418644f5a07cbb7609400d5afd9525f7997cf9953f84fb7222b29887e8cc00c88bffa50a901298f936197eb53db74c734d0116507691f67311d8c5f61a8218aa5efd1cc9a7bb8c3552f3d1e142d6e0d998c301412e2fbdb85b89414b2de04821601779e10b7e28ca298871588ecd206fa8228184d31a6b278e769e1b9371132c76b2a72db39983512aa08a1f6d7224fcaf245e02476b3568eccdac2506a8c87d7caa01de957cbe99d286f0746d68036bad206f7f3cf761319e7284e830371eb8701402796ceae128775daf948030956bc327c1d3c4905a1e06d98390fa6de9b214f57e97438d61ca0ec6bd7167b3ab9c12d860982221359cca88604ef49e652e6d22457534c0d5732503385236515dd70ee602b941c4f91ce14b01351ffcf9c868766889ae1a124e899219cfb52ebf62b84962dd1940618cad416c13ef7ba660345581caa49f4538c6718e806fe08c5d32c2f81d5e8f90f9d6d0164aa7e4acb4c11a7c350f1d7ea99991edab5e43a1496a9cbed5dd5f96dad11ec371f2261a30eafad4a13ac1cc71a0fc90d2c65a2949535035d1652133b684cdd2ad1ff9e5c2d528b6670885a43ffc9e45ea3d10703f03f9f5f6381624d50b0699028993de30d93f30fc8992f658c4fbb56b911b17a458fb5b7eb95fb642d83e3857730395fbd90431d923db289738acfe10b2fcb8ed087201d3f06015345d86ead8cec2e1a4aca034e213aa3cc07ada6dca237e030345bccdfbedaa82579441636d024b532ced26c6318b19d86bc8c7f3905c73914b7fe58e9f4a787a4f4dcd12fa4391ecff31585544650ad1469da23c2905c65b2d9b8b471e71d0c6cd20c2ecfb6f6a0cbf4f385d3ce3753be1ced88154e554c17e2b87d66d3f84fd85be016cfbd990c4e15721de3599eb62baa434274bbe7d80a6ec45c62e2350ede37052f01a3f6c7244784527dedd15db14e93"}, + {"000000000000000000000000000000000000000000000000000000000000002c", "003227939dee6ad79f3a50bbe8d6593ca3340e3f1a08c947cb2008eea733d263241462d274f0174995d504cdcfe2b26a5c8574a3039f34ce8ffd1915c8f53b0a25fd2f9dc7386f18aab2a700ecef90e4b250a4e304d18cc9a90e3ad3aaa5636051e8aa1a969f1b1e6a1e7e7f9411a6f96becc9a235623b61e16238ab22d30907867d4484331e31d406dfd5fdb4f67d46fceb1736d84fdd444fa8e9b177839681cda48e78dddfffdd082605ab0e0a62787c6632369d6c68be999edd795c0ada534cad8ffd2f188dd1d38c50dbbb11ea5e6aac49ebdd6c2a63e60734dac7086279e6c67bf01aadfd4e4537446cfc73dbf61196752662480b5a719c180a09888fafc697ca9aff197447114d6ae24689b2c5b80cfa2ffe4623d9f120ee22eb503e3b95b11a3ad7a92a766ae8b2191c6bea99eabb6afe77971dd77bc2852db444f7c692f57b0b2384379acdf93635dbd3b5ae0142a767abc6e168ccc9f0e6c8f786643d0d6bda58237a7ffb17dc3048e7e92a5ed87970e71f983f5fe3035825fb6d82bdbe561642071adbb53160745eec540638c476ce1ccf736675a35089ca7146001dd20d6c09b1d4454bb902a3fb8f17848c6f92f2408e3748bf267c12de53aa9d4bfe3af4b72dc4833a0b05b162af0a1594f20fe3b8878f1ae0f3b1f8f2c58f38908858568814de4e5c596139ad057b9c4c646ea01177435a0579b277ad2daa11ee8c5b50e8e9b3a2e33f9ad9e50908762ce5644749a5cf425e6e7570f2e8e75c439a3418fcf080114c7b0b7cf3e488ada8eda5b456980a39a3359a173682dfe5ec4593c4b242c2596613b0b4120d5b8558e710478c64b6e373d2792e48d139faa723c7465c6d548bc3033023fba4d4decb10a69c00b713e86e0650cdf2890c2807b104e7d1b29750d5f8291bc61d3ece9c2d09862a69418557363fc62f5e80e301ade548fa677f6742126093e8c8179d6a7c9c999802b7b255d0509ec31b0b542461b89899c8015566e84c0e2c353c55e85b69bce712f6f784e6c79e9ab63f7b73d78351ad88efae1df8585b54a5376bb11e31c91841d6ec93a9daa1c041925fd51bcf723e2c7750d939bc5a8b63cf2acb6f37e406f6b0e635add3b9b56d18735354e059471b9112375d6854ae9e9451ff1a485a35074f56eaaa49e15dd8b0f6d1aa0a5345744a8d027c4e955f21bffd8acf3338f3d096be0f9c5e4a462815067dd88b4879d6e06a9115db03faae89b7e43a0f0a2e27346020ed4259c224cf950482a6f2f6de5e1101d7b1698b46d9206fd1868e2cf9d10a30526c46037daf890a11a59b0aa531ba41386c3883c879203d2ee6d55c1893f48f8ccc8900bd781ebf34e5bdb4d3121c8e5671f4f555b8c4e555e5580c8aae14de264e60f81cfee8722d2fcdf566cfe95f503de5b8560a8506444e06189711fb33c3b0fe1c9d58d11e4c32f9ee0fccafd08b89ccefcd61b59d6de9a66adf2a19ecb30d1e8444b1846b716b3d550d9b593cd9f4d011c3bb2f41f9e0af9ae25f6cfd34c492dda195d4f9182e46152407a33991a22acc61e39976f8947e03e9591c564450de4a24a4dd572cc4ba9ffdff7537b2301e877a1af6e3860e230c07f4cce360e03e81a9020d0a744f769914fccfe2ba3d4f358872345f033b14f9fb80ce0a98a7f390dbae938bb4510e16e8707d7923f09b4b3b6deb7433cf45c707d395b4002f2ead8ab2be8fbf2234dd25b91fddd326c284624fdfa9fddefd3503176a5d3ec5f0b007f3c77f5aece762aadb2c06db6f7c0e4ea7f7cb06b97a925c915871fbcd78dca4f1b7db27f6e2ab8d3d64a7fe73e319003433023902b37d8114bc3bc8e8729fdbe3d3c2f447e8823a0b601fc8a949da0e2a5d6373a94a21d8c52257a3a64894fec625"}, + {"0000000000000000000000000000000000000000000000000000000000000070", "004b5c01504495e247a5514f10a13dd28b3a1df9dc2c9a59724592872ffe30cb262f62a7c2e21edaa1e1069e3bb42a238ddb28d066510146a7ae2ec29c901a07719954b39e3379fcbeb7235b5d60ce6c7d9ca78b0664584b76e8e7a5a6c741d6d8e176790288be0ac02a6da41dee52897fb3a578370046e70666d596205a58428b668add1b9b1b6ad64fa443d8aa3520f37a465f268db45ba433d73b0f6830b8f958b24073dc78e00167cf90a6443e868b725ad76a68d13f5228bb7728149b6531b096ccfafd48f1b0245d342685c93b2a400af825bb92176e25a258d46d42d102f676e65e291e0d56b12d6317a9bd646263953d455c090bb7bf1b360254367ebdacaf35de1fe73d98cbd6fa91387e0ae73704735b82dd0068fe9385503dc6539fdbd67fa60b054bd0be415731270673d0efc0f47de5fc7c170fd70bf5e28ba98a9bbf77b780ef72c9e6b2f809bfbd48039e059478c8eb2c567cb18dffa46e906a2f3e70a827615da03a4be6a5075ca380c72d1081ab59d491dc04aacbdbae04c40962bed8e1a9f26c9b4d82fe9e732afefd9d7e14bfe336a24302dac38bcce969f313af0dc146b9ab05eb46a91a53e441d61d4ea2efd761d119564c051a4ac3cde1545379975a76b2c005bab9a721a65f7e5d6c60d3d69f7348f843a64dbf8dfc6bc023a384318c8986351f0ac2dc7759f3c55aa6d998330434d57b83691cdb4ca69223c7369a92b053babc4a2c78e581ef6550bf8e4023c4c8e9a7f5915f3c4a2909d0e1e0f895000ac24b12b7763e7f59a2288e8ffa1f9e8d8b211f41f9e5424248a3aa545905782c3f6a0452b1c1e6d97bfd851e25a3db7ffafed56b3b56470c03a23e7ddaac8eeba592c099ad68c1f1a5b7799e0cc2532bca515bff195c63bee02367850bba5c8000400da74665a5992fa54ec6c07ef4d3d5da21f5c0a80089420bb0513d1985eb27455ebb998ab3c93d954d180c7bb667148bdd92f1430d17324004e9a4f530d80ba91350f945aa89168b53ca8b30c4b166eaed6f932f2d050bfd98c805e44db56e2df95a669d751dce670a8c8365998853313ee320ff7afefa9cda64ed2116251bcee16463b7adcde424608dc09c9f954d3db1020b888a8216c41be4ccd231843462fc4d78a3ad2d904eec0b91122e4ed7e4b136336def6209d808139e8b0c485600f522abcf86cc821d2c9aa255f0d51a0b6725991ac8c916221720c59546fecc4d1e2242559a8b0fd2440d6bdf7d3d85f9c31c6fbe5cb266875bb0972d7acdbe17d4893cc7c8a38ae2eb8221607d4d90bd12e3b3e8bc12b8577e7b228c4a32ffad0f8abf8aa536461507b45964496e3455e8136260ca51b11772de24f30d2c1b97fb3ac5b4d93ec5ca1aef620dde264026c06f598998696dbf6a43867961d22e6532d69ff301703774146a97c5a6d1360f0cf67d9e6c8239f3a807c4a749bb1b66c3ad1cb0e6951b200cda0f7ae0f6122965a3c71a7126e51d71e70a164d91d1a7bfaa5c19ef4e5c6f247abb414a432784fdd785bd3f397e4c19f9bf8c229d7caf5fa9a2a8efb1435f3b499c0140249bdeb0a7634b79ee5485d45771b825b617ef132924d05564facb9201638dd4e892f176b67fa7b96fd22a73fa76ea517e63bf67f6c1f8f55261e584b0572e0cf0820100e56f65922a3423a9441af26f4d3c762f0e9d7f4226ce47fad63e0224fc914ef6e2dbdb5d261ce5f42817212ebf51216a8b2d59cb0f82499fc3c02f975d126ef45b85ddd3344f3243e442b353193f201040839ae69650239eafe42e02b17fb526c490085868c8a51ca4218185df673bc026f736a7d2d7bfcb7122b81dd8119e3ea59db8234adf55e3c147bbb10dcd242e27f138892e6fc0ba0253e8cd84acd61eefbec3"}, + {"000000000000000000000000000000000000000000000000000000000000002a", "0003842dbe1cb555fd48620beca67f6a3dea59164f2130a582201b59b3b41fc6723b37ce7389d3bec08303654e1846845c269f7b22e6b4e5c6c0edb4d5f36e0616015f003d1e2bf03a944c76f44a0f02843883e2081af22c528c740fc577a18ef8d825f51431396ecf1270394d8216cb0cfd34451bab3ca14149981738be12975c6c65b00c35db9ea9fa9aeccd1b9991bfd21e1776d70336b394c3b66912ab50d6e5c26014f8c1d405aba3d9cdf1fde1b9c5c12654b595bcfd3e6b43b214ad1dcdf0aec81bce1b83b26141e2271cfc1cae591201b8f1c00ac757ca47314bb415da199af35c0391199856275a2e814b765185e742cb73eaafd9dde4a506613effafabaf0d86b99957f153fb1ef566b88fbf2e04d23110f489cdedabf48c31b231e2c9595f07f0074c1c9d08906983948c0485da5c75096c2a92357837ee84a09017f2b0f2fd6431a1f15ab9ded73db2bb04529e3760a871dd9d91d10cb6e20c607e79bee6a306452a51add5a94bbe810ad67e7f65f2d63ff783ae25f35d5c639a7e353ad273dddbb995a5f60b355ce754f32c9f401fc929dccd75c0cf39c49e30b07b907a22e4e9dd86c93045dbe8d33fb4d6f5e680d4b81f333f9e627c1fbb8a3fdcc8a58260fcb12190c80ff15b382d972bfdd2793dff05c3b125b565c8f6344d3e0f4548877349320a61c917348844e1e9bdc6763fb29a05c69daf6ceb7ba7769b31c34c46b5b0c08eb7778934ed277a8968480f910615220c5c9eaf5405fafa001f2ba5ad7d1081e9fa072384cc468ed558745322763931cdb662ede10dd2af36119f799559adfff7939e0c5466d918d1ad0d8b17317ca81b5031cd0cd89ba6409f6d7269986a95174e85b1087113cacc525ec3f329e1e61f232e1ed77d1395ab61e42c4d9ba8db6dd4376f61c272d1deb7402f45e070e52fe9a7ddd4dd530094dc6929864890cd3e307da6565854808e5c24001049667350a945e39f46810e820dd03ac9d7175d2b040aa778af040aa465cef49ab8dfb7953d88d184e20c541f39da041181a2aaa4b2b64d5b51ba4ffa3db806fde153364c2fa17bbdf7c8bb62124a804a9ef1322866cf5c5f991981f8d564dafe774e618d0ad7052d3b3a5b4990d6b46f0cf48963827adfe6ee9a58e3203fbb3c059ede97a98cf7060e835a357a261c51be1a026fcbbf794e55e0e57c7460212fcdfdc87f6f175d13f7c5c52849946ca3b202ebd81fa414f33e5b6ee80df79dc3b049d8255165a2fd816d958e2919b6969a3f892590681b661d7532c42f70313c061db23120ba11b279b18b2a3fb3d022b646b9cad293322a9e051f21537292ad1d970b6c47046a1f284162dd771ff3d21f974d1925d46b4371782381c8e70e4ea5b49f9ced2f16ed0f04a56a6fa184e7be7de0623633a455e730018a661d5a40cf064ffce0a9785d1ac1a27453a50b03cb8d10295785fed6ed7050fe0fcabd9ed377ed6e0ef0f14198a5a985871bc71a44f78016d4343b6adf23231dbc69964d4ed48825c1f956143ab4e1d77c9611590e7e4fc4eb2a29bf4190d8d1690098b0f12f943998abb85773d20fa2a29624e3586da229ef7208dd36e732d206e5c145ea90c6994035a6a2d124b9d77857d9f2f26c69ea83a5695ce5dcfd18cb79049eaa3d026d496b3aaaddc1f7734a2ff9db3c2eea6c3b23cf2d44728c735efdf32be4d4111d5a452912b1781a0103ebb1d51f04594033ad5585526a372acd4216c85913f019d7c7ce81eaedbf63a84c4a0f25ad7256e5990592b84f89da650fbd69d1194b143e8c98370b9d470bf53ed3e4c9c2a1b125e44a92b4b0a9203b2f1cbc06693cebd16f5c8fd51e3123c51d27fb54b81f3b8510a3fb74ed86df979c943193b3b07ad9f5399d0235"}, + {"0000000000000000000000000000000000000000000000000000000000000022", "00228011749a6146e145c0a565648c26408cfcc4cf057f57661c121b5e953de3e5f0242bfa037e78691617429122a318972908e8968c8f7262078034dc27543ad2358895949d43f87db4df74422e52c37abb80670110c5b3ec17edbdc2e24081660b527d8c13b5d7c635c7420df05c5bdd9c9f585802e06b962ee31e9815031f47c5389e13a3b7f9f6af513f4f4a0c32f42f1904ecc2e84e455707e2d1f1206949963c9e04c63ff704408bac13452e8296d8f4993c511151ede2bc444b5b5ce3c3f6782157c5f525ff5fc951b6e48a9c20f00abb94577b45b71b00a18760b4e17449fd8cd0107b1d54192346dd22c1b577556b743e20028d1bff615a08e05b9808cb3464df60e4b3b3712c9d336bdca0b63ae47bda23611715c096d5f6ebf9e02db9db7d4d1e10522c985c0dcf95e998b18ece74ea12b36b1e39f810d0408b275f62fd4c18122f53dd4c6d266c78bba701a054f8c1f52fbdae2b70cecf0bef558d2d170ede492723e28aa3a7eb77c238bf4c7103d357b7ddf51e1a4b30f46b132421a26265a6a7ed5bc9b016d0082c29c56387ad1115e98e1f484f9efe40ae3447f7915f08e3a490eb4e7ff4de45e81a06f635b257ec7dd9a134022d7ea4eb4deb624e56a8b3e0b46231e85a7c4e25deb209258d0cd9408562b8959b86610ff4b7ca352fa259f6ffd53d23367cb43829e5021138252d4caa0539c41c04219ba1b310913ce692399f684b7df06327e861b79010d3d1ff7264e847d43e1ec3ee583d041a7db2751a681065784e41f5209400cb6eb23d4b66605596502ba9295ba1acf6924e6df2ee41da55152109caf1a70203b2e71948125690cd573c9eab4976ea196b9e7c6a18aa3d7db59248e4f2824118745d493809e969d7c84555927a7fd15d5c6a355b1ffb3de74a19e57c9be6617c33551054e1686391ff3bb0dde8f30058067d40d3128b38ceb1603068a822da9e1e6a1605b119f25758562556c7a1725690de98b983ededff1f422b534c1204a1be58581711c67b12569897d74a33a5d47bc9afb233ec9234f880d2c7db37cbf9bf7b1e62d6cd69e58f9bdfea4a66a7e677bfa608ff11f28888c75543e5516fb53209f45871a0fba6087f318936d0a1d1705dd0bdb562a44c2ddc407520e791442147ccc3d2b160b9837d3e479e4347c86df570feee4101051602640e5dfeccff03b5bea83765059e7450281d1d1d7a021e5a8fa77797c522748466762a5fe9750fe05269f258aac2d25be333084a69b64a71772af310f739f774e63fdf9720e40c9f3c920b43abfefab114350bf8dbd207f958edb7846fdd6f2ac1bdf752e5254094c05ee02455d9944285954d84792babfd50682b7acda26710999d836c2693b34fc71db8491e2b343595b1b34e8f1b63473974c36eac46c5c0ec7c89ba0059d461025af41b46fcd7fba5f4bb3213cd5a637c33da450360ce22d6787f15631435acb5923b74ed50011f731189d2306d7b43b1bf35d3f969dc64d0a9f45122c6323fa7d477a2d6757a0bb6ff99803391fe3a059065184587d4993af540ba678d6e7afd117ef039226744112e0ddda4b8c3430f1fcbf91a6b19f7ea881336dea7925281e1c0dcc28af857d1b92c6655539715cd8d255c0c50a6b15343e0d437237afb739df40402b0360c3fdb161fab73d1e829ec32307da6764bb521921643d0109e9d97326371a2c4664675e358045e110a0a10285742b1ccc3933998f32bdcfbf331024726e9a7d9ae5d68cd7f44d40c677c33813dfa5ab7ba032ffc32cc054872f3fad20cf6e5d9eda8a0db1051170b3ab00da2ab07954401ff85cb719d06da6f407416f983b74a47792aa33e54f8be30bc75897fdd7052338809ddabd525bb0fb94461c85d0119c655af7688"}, + {"0000000000000000000000000000000000000000000000000000000000000059", "01b55c33d069f5d7591bc26b4a1dd0d5a5a61efba6059792fdfec96d6d304e40a9a81d84bd860e8d330214a9edf56e7388e7bfcc95401bd074b5d721be638239c76ac331d7b855daf7d8690c627ea74af37f649908d20afb2e27fb3778b6319d52265b194fed38d8f30f3feb3e0c580ec4e23294500c6d518a5208f404670bf68af4601e3ffd2fed229a99294e94d45cf59ffa179b6b8194299d055bd56309c5a4961334557e6bb105f8884057dd8d636413e0de88ccd3ed2dc51bd094347039c51796c2f9677317898f7de20279a37bd4940f19c2aedc93e98918ba3271f9ccbbbc9ce2ed6c71306253d9f159b815075574af095081dd49c58fab1d0a5ee5ac908abb53ce97125c4ff4e8a902e793ef381c4dde07951881bfabcda1d6271ccdf2f1a19d8129213b74e0b01ca8293d5a06cbb9c66c7ba98b3e222b2577adca5512a1e4fae9e7140bf650b776585d9cb304ae93ce3711968942e8c1da06c6e69d80103f74da237a3d955e9196ff33adf39eef4e4a2e911e9a4882147b01f3f36faa79f49f94f1207af67ed7055b64761bf966855f2ca40995d2365b01e0005b2e10bd393006c37ad77aa016dfe42f362e6063ba12078c13cbff36803dca0b9c968cee4253918f6df2259ca310dca315e7811c5e8a8db1cee0f3980b9f3f69316d2f13f51a2cdf90082014730ee1698f8a53e562e26afb3d250de2bf0853484ebbab0182d82038c371569bfd1747104c4dc58a388621fd1961fde2b79753025379e7002a3c8441d41a1aa7393df2e025a43185003a756344451d5b51709251dfab0e6757773fe9d6b0fb1e6cf20e80e4c0abaacd65c53411ec3173a9fe166c9282881d279511db361227bfde53b80032ff763623f8349b197a13e1ef1dd8bd94aa3328b15c26f9542e8bbff71f8a275a794a14754470d640bfb20605d0575c6dc402549aac64c9ca1b9d8ad2a374b3ca50bae72af49e0a518903449d113d0e91d6236d4201423df5984947271f624273f89fa9ccf4a6afe54b36762549368fb52b7c4de138d1672953501521aac569ff3a43dbc6950da1fd7a4094c8014f5ea73cb65899ae65c5b34a712e7675cf3a2eaefba9b3ea055b717306ac53369af10f2a0f68cd90913d55d59119478ef5b47c9b3bee7c2264a526ac0c5a4b7da8a443b45e75767041b74d7c0406ebea0a6c03afcc99030fd969b86e2330355db6349f0d610e2607b78151a9c17cdcfd430616b9bbf007ea3c30a1675589a7e611626e55a35a2ecfb21960094e46fe0daffef3cbad07e0e9fc0f7318fc7eae16120852f8a1df1871af82c187bf54033868407ed95b1afdf3423994917d30482257c21f4431848d1e67e713446e55e0d83980f700e49fe9bb8e2f944d3f29de3a989fa523d26784f705e3e30f267bb121712d0c0e05f37efb7b5751c6faa0328e33e78380cfc4dcf36a25f76f938dccc5251c2ec33e18d9a928ddf7193043133f395d391025eed1ada24817d4923ce9d5ca9b6e68be6c69de656c1b752bf86fb84a86876663ff06470e83e7449750daa3ada8413bf1def42112f0de8bdc1b77e74287623fcd6f48b39624a4baa5f5e974d0f313ecdbe6fd5e8f112b4a121a33e4e7c56700bbed6920c59d06778cb216a1d8f7f976f427b66478def44c090ea86be79ba641b14d9461d6737beed7931ae8d4185cce89169aecc3718d530b3f57ea85e6533e256a0e8bb37dae33f585a1d5311e3248a388d1d56f9a6417cc4c39611f064dc917042097ab580ddd756fff0d193dedeb2108e02cf435870a027b46e668b5160d041997311a558b8a3871a461a9f13ce9b52500b8d6056bfc53d75d2e9fadd3ce07cbc16d5dd68608dfc02a70e99c51f09d26894a7e4bf36e69d29b13959a826f"}, + {"0000000000000000000000000000000000000000000000000000000000000015", "01471833eaf9ad5be636c3b91157e7b0fae2d4f0706b765e8b7fe1e0e55f43db5d0b68fe02d77cbbd8831cb1d0f182ceaefea29e9722b746f04644ad553bbc33274fab666403abbe4de62d83e4c10b1e145de7cb139371531fdb464b4e6cd4eb5edc80f5de8b9f8be719810743298f429bed9db58e145310d9710557826f1d1aee7a9fd4e2a2ad5ba279341c6593b8957fda502fa35debd0e965bf7ece435766b61f4934988f61e50396177a84c3368077c2231e9125fae1041174ed6120effa5135640d4133dcd37513fae721b430d68a83043601add58d13c1cc529328fe300cf9a533f8a6eb052ede71741bcf2fd7ab343df7363b2376783d080f0f120e0efd08ab3987d830f77e64c2a224f496dc661f762c786618114d5b77073da74927ea8ab1deee76118bbc7de88697013686763b6ae21279ee275659731fd03f1db8abd0e7d640146afaa6b98e07d8946f27016f7221850f829cd09602cff7b769054cac6e02f42eb32f72c8a91d3ff4daa553bdb0c1ce6e113d452e1955793a81549177487df300bf5bcad5c2ed99169b3b2c253c372655eddd47cc036df4e79f31127cc84505d3b4b1ff9f6115dbbea06fcd407f41b75c746b544bbe46776d399369eb3415b67630244a72275d8f7606f07c9b30dcf00541340286f1150416e6d99d912009b32f70bd044f0bc29e0281a2ed5252c8fffcb37b052bf8abc522d13f7143a6254078e79aa1a89bfa1522276e05b653422141114a14dc60f226a85c187223275c19fe67d7062f1b6ff49881f7dc56285594b8975102e375dc94cf636c5d864f424bec7637f8bc0275179fdab1aa8dddeddd2f9ad49c58e72747781b5d0629c849f0050f5c237c29f31f88efb4c1b988b1ff8819aaea438019de8cf9ef033458b55e1e7ed47ef1d176411754c2f9cff5eb3cb7d20463b71ee3037a547201f314988d245a31d9ebf3ed8a32bb5555c55caa1e033dfc28b0aa1c45a44aa06f4d5a556c396e13365c047c7141d30e53f695e6e859c752e6231ed7be18a80cd9c51b0435fe0bea490754beec5b66f28e9e5c0606eafdd5a15338df61a203898375d6f5e096384c981011d4e31ed4e5151999e58626f92c2229713e9d631de2c4d932df4101e8102cb0a1fc3a5f72051f91f849aa92ad9c6e4ee5c0997a96c971d14b53729f6055057da0cca508c2809b0040718807f5bb18a9fedaed8e7f6d05b4a6b101de063d58cfeba8b7aecc5f8375088f9a0ba011b68bd34b53bfe9274c2cf05afe86023574153097aa07ebfb12b96b09f5dc531c0c39df9b1cd192f946b4c71dae5624a002ecf77ddd6099c3883b9a339d97f417dfa50853fa7bc04a61eac89a466d2a5e3bcc0da759359452d526733de97ed32e9d31ba3ef60d3bd899da3377f53889b0f4646fc699dfc07f0540899a7a5ae1bf634231c381d0e3b0970cdbf860167e031e388823c0aff8e22ef5dac11ce9f31f435a0adb0b0cf2ae1c11cfc0b1e7abaa0274f63069ebfe3044d289570ebf0d947963256ab27cd34753fcb10e0a638a460507fca470f4f3ccb0272e7dcd68d61f9d37639b601ed19c67035043872d4d2f9df17b704b8113c851c199d409bce48ca2425a6b9ac8e0b297c47c3cb646a1b5573e0b2b112565696e077f4a29baf93108dd6e9a0c044ee1e6b0f254716c0d45a588f8d76e1ffd04e8ee5e545f397c42641e37f55dc4975f12fd10e283c7c5544643ea01825e2a573f6922a1d2d1ea1539f68e591112b7ff79a476d56594c9e885359e4c118fbdc4e4dd6f31453dd931e4de526e5506b40c28224fb1c648594035e673527cefe5c9553aaa7967e01343b0ab979cd7515cde33e1fbd717e5c019cfefe51c100e50033d5abdfaddb3e2d0cb36cee8899cf1de"}, + {"000000000000000000000000000000000000000000000000000000000000002c", "002f1e6476c87011265c3527e3d79b1a21621ad5b015ea25c1749a5be1d42ef22c7574070a5b083408680b7785267dc9de4e753d4675a87efc1f43989a9eec789bec4553e99ba7eb825b17c66e55eec623d8821d0e19ad546f5faf433d3fc5cdbfaff1e22df5dacfea0f3cf2d502862db7809f14aab1afb741d916f4822c1fe05fb42f0c1bd26163a54f8ebeb0718b8db3de4a2350ca81f4d33dcf12b7062b22c51bda5515be0bd402bd9356db58957f3f1340326fd9c4d97a56ecde141375b914ca1945698f6b584b37ca6222eef79f7003084210a4314ecfa94f6bc08d8f45f6f34d1b7e01fb3d237d575a28a4d1acb8c61e3df7b79e49e454a3080e09f1b235f8fbfbf0a823eae457a9967f2678e1f23029a375f09115a13bd3352276e373e1e088bae77f2a5553afa451c2c3a93ad52f8bfb684dbbebb5350e32200f5a649f6ee7a326d3a0ec9dc84980557f13ee020b0303b0303e2faeacc13ba93c48a92a8774e97405248ed836eb98095cf173c6cf298f9a9d2876ace509f0260cd95b2a3f6f4f473c1e5e422e0c347e147d2f2cb24911bdee83f93363fdab59a232a6fd1cdd4b0c236bcc2d065b5bada762bff6413e0d0066fd68031ad707dc9e6a6665a08488ff21d929eec91ddcefca14fcee070f8bce20a0b571651a67100710e6bf6fc0290b3343a2ad933ba01a72955d1540fdc5857735380b48323e6e0b47485beee21210d368b2f2d0dfec1439d9ea520899b539d30133c51376f9f70c2c3dd4b83176eb9b9a9a0156d52f848685b85699c9ca127d23331a3230ef2694856f54a4226cbd5a6dd2d876a91812bcea90789cd011c241a1913b7d96d081008f990223f56c65ba1e074bd2c02313463edfdacf5f9c42ff1ce091e863483d3cb94b03068365d6dd2f9f5494c14fb2ec61647747bbfb1c766ca14a5d19f7237e717d0075a5ace65179132085006427cdd2ec6f337abbbc16c6ee8100c85b9f987df60960d90591ff7813547e057fd3cc4490484f2bef81f743409e698d5651e83c12f75c8f6b946fffb06a768401f59e0e1a647e656d0626399787e942bd5f0b02cdd9cd946b35e9bcdf7510a51c863ac5f0adbab80381e22a0ec634891f2fea09cd869b44554577b440e4b62f3003d55f08f1ec0210df13f52b7518ddeea144c1df569b955ca7cf166a04c96f0cd74fdb45adf410c2cdf0327c76e998719f076ccca00aa4a553258234271c35085e47c239d1f808476fa5e89bf3dbd821777a11f75eaf27b979d94b3dbc74e08ddaa7b35e16f75833dfe94645b0d3ab4a06aad60df31d4db3770901245e6e12f99fa9342e9c22f77e690766de21fd9bd6c163ff8b4dfb0b3f29680f2668d6f7090b79bf00b16f1e129e20ffca5041e20fec45ec968de700f63842ad32f64009707e5e0b8301a89e1fb719186dd437e8068779d1124a9cfd8c0369325b89ce5c1b17a2e756fee13eab8e97b078deef036465d3edda1bbf359928b742d496e71a8a9ff6a91d44e96f902ddd71d2de13e5aab8d6d915753bd0c801d98206915ce73f4b92e23013c95b40c9a1eb6d0010b1c934d0243441f760732fc6e0f8f8ccf79d4bab0ba355bb581e84f76d6642b8f19f8d775ea33cfd0d46b22f941656f714c918750f5be86242cc0dbd5b1a0239be02e0c800c36d55c5c4877d6a59f18bdbf4ac0b764b52d470cb95c9a3a155966c20dd96898d2add0acbdf448060e09bb827d14c063a8eb86182d9680748df6a94eba161d50ed8d79a2665990e7fd41fbeb3063680447525682f7c1e516b60701448b4b01d3a681132e114514f1a83eaea85569365ef2dfbc1b0082c353b760af4588b95eb3ae4f085ff4a9e4626994392441402bc61a377d15093888c52fee973cd7f5f6c59"}, + {"000000000000000000000000000000000000000000000000000000000000000b", "000eb34aa096fde786ee651436ad8381af81ba9e2d499673472c343595f908b7bf9c57a862e4c23f222409af1c9042a0159bca1cf6c630c45475f3f27b0bcd40d8ace71c942f3570df852e1356c7739d28de9ceb01e68c5e37945e210baf701ede86234cb7de3db04b047d85b8e69c20e3aa43617b25fd2fb4cab97036d2147fd3be0c89fdb15978641f34db1d9d3be62e2bd648f88d5f6013d7e0adb955253cbd5d86c60bdce05d02be9e1e05b180f9b3c5942a354f3f79488bbab8315996f35aa1d979eb61094609696a7bfde4b67598f312765f5f5a5844f7ea6eb1eb6e6f58dd4f3d8b2a8e3ea6affa10d49bbdce36e570585b1199bc38b89d630cb8dfd34e6367b597dae248cde5c765c8b77bbe682362d194226466c330b253012a477f02fb43399ceb194eef181e5e593f371d25e40672e61a15841b1b2f1d1b9c8d568fc3f3c6fb2216cd6e0070e0327a39cc01290468478fb42fe6eb763174c6f595e159fa86d636b442c4ab64eb573b77f9be65d3202f76ce7df1ab01d28b44ee10615cb7c2a27d2858b102eb40f841b11ac3c96049ce81a5c47c0381d672a0ad246d9b1ec30597f6619f570cfbaab0547c834117b928245cca131bc033251ceb0e999b955603f3e0f30b6ac0bdf72725c639b0d3b00161b441c2db45f9424bb45dbfebb630d1932a94222bcd5f1784cbfeb8063e7c70969afd046d2efd6a82c03433a570d3dcc1863bd366ff178c0dbdd18dcec80418b68e34d1b6d531ca68abb3c4a213fc11acf00d9e798d5ef35dd4fe1521e5feb0c27e373edb835e9630cf3193d3e9caa495211e9c3f2b850cef075df62069cda8ab20feb6a8a59c46bea459c140c09703d1322ee7ce7bb722f97adeee9d1218828715a113d6d7572569a38f68d8676d889a884fd8dd432df9ff1282da2acf4f0647acf0c392eaec4f7aadd50060e9af0664cc51b68360d170386b2d01263a18061c2f9d6b48dd5c5747ca64b5605fc6b1ad023102f2139609e7f0319177d51e42c92dade25100208a4a623e93cb2b521e23b9152eb5be706f408a8506b952bb0221983c375e91cd4c51661dfa7af7621a46fe41da2b4a8daa201ae1cbc658d5636d308bdb1cb13b9b8f1fd6ded050d0f5ba999852ff17e7a494c160f88bae2a540b8414179ebaeeb4447b917c96a672899d81820405a8fe455676a1e0c950b24f137ff08f2265fa2b08e88a7cab437dcfb45b093ec575281e63939d2efb240456c8f0207bd5082415c71c734d562975558da6272bd33d4ed33ef7d56243971e7f1b910c353a1b070cc4bda1d0e02b6da2a6d1a05c5b1d4544af700af02d377ccfbfa52477577a347dabe863c599be1cdfeb28a99184ba2c5e55af2ef2c9db9ad2f63856b43e61413c3c38b498a70b39074bdb5266452712abbe329f008d3b733e455c64b429f2e0eb5b0458f13cb0f53908392a8dbcd04918e2cfa32d9cf56c8d87249135f3086b5b1078cc2e1f85f6b0aa4dff85498ab2dd1be5253cacdbccca205ee2a204febb760af25551581b3e030b614306d94f48f481618d11ec6ce52e187925e5090bcc3a55c90bcaac0cc56dade0cbbe2b1c329d7b07d52a8588094a8769d9d11f24e165fc6ec86ac6a711e0b98e01487d698bc801b2878dbb22ac78fb286500ef0fdfc781be0679f947979c78c7ef4e8c7ae3e36e88478448a1d9a75135774762d90dc714f6ffc644034c806a8a29cd0f7b95524cd47abab22010dd19ca3ad694aaf37812a5cc6b85b51057ca1bc42a3f75030400e67ada4f9ce6f96427c1557bbc3fbda6dfa4ab2cfa21b80e3262cd9aa844e9a6691d05c409b3bdf230a224112319fed33fc885fa5d4f168f58e23f5bfa4331c7ecbdf5af39f6c5b57d9f463bb295f89c5003"}, + {"0000000000000000000000000000000000000000000000000000000000000002", "005002d39f1863939c7200cbb5dffd65aa1a6f161d268b8c10b8e5495b48f0a6407b62a6ce63ebfe8820303dee1b00a4791f712294ebc1c94dcef0cbffdf0a503324502e5a67898c7735830fed256e465c33d1790a6970d6398c7cf7686a424e9a6624ad2b7aab1a5520171cfaee75a7a9f72bb6238c37691661bd7aa49c219fa410dce6db797e7cb44b19df63959576af42ce3df17309d01e0e99df0e05e508c9363b08e23ccbdb04d84d855221e8bf2babb0bfb751ec81a9fc1624052efc648317d9f0abb131a36ff9ad6e41b46cfe806d24a1e1a7a4d7db1fcd7765e7fb549b1d8a3750b55f273e69a413a037edc36de3ac84f9fb60f917ca58520deee0be4999fb639344f69da85177bdd95170a0f5249b7dd7f996b07afe6f63ab7fae9d2765be7c7d6d402e1ff436ea85e7b6e2d76521e728134e8c9c9ddb42768b3cfb57db39cd0646023455d03f7a437f27a2006f5145bce8dfa7fd1b421fa4fd0189176dbe7310a4746e6fa5329029a66c9afddeda2daef355dcd8de0071537e338cca5cf892a18d1f472042e90a3d95d04eca057f421f4d4f1a23f6f8f44215c60365d707800bff35f3bd07f2413532e183811b740c6bb93b198f35f18399fe9efaff3ec493e49027a79aaeb53dd06e1c76f974741c5ff387db84491bf154fd5e729ad73e42c8fe6755a5c35da5880690ffd861bdb16d503f4b04003b2a15389d6dedab5291e140b72d1a34b5c606117ee73ac8d0327d98b742cfd3ad285e0b181d1a4a0c15fdae0d90271993e5318cf7e8ac2950ac9aa5d34582de77a6e489c95921c7a6e07e5b4ec343782bef0fb837ffa46c547389f453a3413340870d953b7ec32b4ef199946eeeb5d1f3f63cca7278ed9af6f901ed1220c95dd65d38efaaa431a8007d0f699656d0ca4c148f4eef36a664c5532235a273b4b6eb240f59298b00c28f57bc8ab412a499f02315b2c1bde0c2bd501b2d893ac65e662f7fc88302edf4694379d0c3fc394b06b82dc4aaa2b61d8d0c12c2c6d341b4ed50b6e6bb51342baab723f247b31a56e6d0f6834de16ede6a7a0ac5ca34ae103e3ddeb263710ca1ec795314da9d4b206b85857ed133dbb057f4dd884862f6210f9de8d31f06f6e2a2229fab1cff84ffe830df31d3793aa6f82881dc312acd0625e54015529977a3a62c85da66490141d53a5ed95367794174f5ed73df6db3c79b834510a5df04b32b6c65e858142150d132991e934d045d0c86327d02587ed9c16df30a19c080499ccbb102e84dc42f28fce89cbd6c19169a84f15ea301741d94ab01582a2acc156c64af61a924867c04bbc0023fbe47248f294aca9698577f2915065951fbfedd037bf020040babfe03c5e55deb4ea5113832619e5746174b081a8cadaf409736eb834d030033d312217f70f8a15e01aad02252976ffb867a2025c4d5c0044a60bc77cd0f4ba544a8ca96710fb173b9014214113c217df61915fa7efa66d0791d38e7d38199d1f71e5e7b5d03d81729a5dfe88b025b395f323699ceffd4f16e2d1bfc20f891cf50d546fd1714c5a421c2462db471548a8e5b8f33f7f7aa9e6bb749f5d9b1cfc8f9ac0bfd07c33e7d57085ddc00dd9fb4ebf96e68040b71c79f430849a37eb3909419f5aaf295db2dce67f233e6ff067c0221f2477cddc917edb303d44aa093519772b1ea810326b569b520f273b83b33b68cabfe6337431bbb77124df986824bb293e349e4961679a46a726b54960f2b173fb2578e350b2aa514c25bd1bd315336124676061739af0446ffbe8cc9c0ad3244871167ac540ab70fb63f9f9887ee125b849233c9c3022d84c9f659941d0d5c2fa76c409ddc8ef4d0b3af2d6df044fe852530cd4479b656193b76a7865182c99899d156fb172b"}, + {"000000000000000000000000000000000000000000000000000000000000003c", "00742176c1474d003c61a17df7c9c70538111ad6b42bfe672cd4e879b9717338ba5b6f4f5a60e8d45e911d194bf8421d41fb98073328713bdea13856f84b2e2023c3da028a4614991bd20acc99a1850cadfe632d07660b6583cacfd6d5ad66573e3b22b5e102b0918734584765bc605bedbd354816d756a88aeaa5fa2e1d094be6b8e3662c1fc653142a2369f43eebf81bb58e0c3d2698cb297399763cc1d3562110e194dfcd287305616d1a3de7a40364f2339792721631c3a29a8f0a36542cbb97abd2ebf74c960114f7d9a9cc73184070075e155ead44a127fe25f15a32ec95376e82fcfa1d15e9f49ad8d9d295dfd0631333251d57cff97faabf0a9e22d68b4f5e07abfde3116367764971b63cdc521153fdc871d15146f1ee52344ee0f39bd2465fd5e50b090432f749672ac4e8e6c1787111ee3f0fd39f2264a17dc73ae93253fde296b4f5c6c059f9bfb49eb600957e57b945b841cfbbc2cf03576c23206b7e359a0b7c7c64eed858ebee37b10e56f0168d44a2523c98043db5d08d19b551a480432111fc751fbfdb1fe48a061fce1a8f057f1ed34d84028e4d40d1b4ad7c1f7802adcdb4d8c477398586007dad438f12ff8bb9cb8e1827e8fe990ae92b63a8c2d8f3e1acd9eee0561de105eef37db51a28a747667590f4ca3411755fd737651655443f5b634df15fa47324eca2b2012dd955291c017645406fb84a3fe574032477995e9ce80fab8a540c4d286348d51241efd0024e4daeb10d57ac9db9cd080b3296aa591fdb39db41f03a3b5ffa0a9cd4c6ce0cbeee8be46972e1a7fff50df8d702327b887764d90250e5c5af306d4fc748014e12e79c54b5938bbc1417c56617f6d328cdbb2d7289f9a45e973c1d1d143119d6ed6e65d84bc91c71537ee97baadd4aa47865d32f8b34962613d11cf1b4c369016abdcac68c5cfe6001489f416c513c18f877725a5866b1d73465de120204427c582fcd1aae7085b2dd839aff2906ab99e78a081cc211ac0ecdfbdcb6c2decb635cfdab6cbe42921e2f6b9464e1cec55e20e348d82d7f717adff6b638016098a6842d3091a38d842355cdd15d62b47e41d80e5096dcb2488f4fb755a48ce5f48f399c9837242f14ccf8f3232d5b1d6e8e825689f30fd2916158e45b3255eab9930ddc2f7163c7160e50c09b24683a5bdb0221fec78a118d3ce5bc521716401c194b88b691621a633e6b6f1dd49ddfc5f3b67ffe431310945975901241945390d25177db29f2029b310ac968dc5f0397355e124fceadcc99e3418398f0589c64ed82cf19231c951326cfe81f639aaac251a21f9a0914a109753c256ef70abfa2016d241f38cc0b7ce172bb141e26221e9dba4ddc9ed86bdcd0663bffff4663968d3cf90d200a891d9a5541e0fdb558de42e08fd23bfd968ae703e7ba1293c56ea54a88c1ccaaf18bb19f2ed01c9b13b9142f5c8925af9355b222d619a71a4efabd70c30ac2f6ffb257f12be741049b07de9067389d7ef3e225f023b439ac8e0d784a539f936bea3570e95d159615b9bcca73062c4d43c5a53a007d4d9605129517ad39cb2b9eb6ddd9e55fab75ccc0ca3ca67bb5b71b6d15ff891e02458d174dbc91c0876d47610e4bd0d7513c0fc2c1796e11d1a21144938ed0883668c675d1c908cd0931e0e107631359d6ce0d717beebb2f1a6c721cc4a18992c7f18a97407355a4ee9f25f18a7314d22ce654a2c512c3f949a439e2897bd3db08edbd604b56782c68505e88a7e55007cbaf3feaf2f2a6b7c9ef0bb1c875d997912d0e89a347822a069d23504a7f0c24cee3aa9b26909999f5d65c05d63f8f92fb3eed2837b58f85ffa209b371902796f75d1babc3a9fe2b9046908bf76b61bed5e555260bf2ff8a9e5136d2c6c0"}, + {"0000000000000000000000000000000000000000000000000000000000000056", "00a679901f44d94ade6fe2aee854ff9b2398bc4b6e3383461114d8c749fefb35177633b9b1b031f8ce2b104b561284b24fcbb4a3f31828c16719b2a4af0dbc15812335bd08d074ecf186b2c55e98e6d2c99e66e9072a5aab941ccc1d94b782e8d0597c658a635e20540941fe86b49908c7f14187923b44138fa18e7defaf0d22ea56180a67b1c42262152a2dfa54c0f27b7abd0e825913f40982c53c54f7a28d3e30b228545897a0012e0dafa0889ed2e01aa02226d24a344cbba7250d03cdaa9fc5414008c71fc4ae0c7d84e9ebe8b6a1570adbdc2712c604610ff982d1dc408ac903c31ef0a63c8b06ab01194d5f06849567b932fda6214219c91c02835e4278c6d951aed7a375064d4b05b706d9f7774c9ad2eb10535e52bc62a528922c36eb14debf07cb05afaf9ae3163fdf7c45e14aeb60da4265bd3ffa4434a9afa83b505db7c2ad93a51433c20bd6c49f06250286f92e54c65c20eb711a5b287f0ad2f47f583c4106c8360a9381f078b7cdb73667d948c9fd7358d75616c5017f5b481a13291f32f06a3aa591bf6b330b947a692e5831339569f9f4692842f0fbe653aff6ebc20e934dd0610c54b5916162d6f9528b41ac9534b8f816a065c6b19c1adae4475189c71d992d872a593bee1d20258101cb1558ba77777b92754a765a78f30236480b043088dafb78eeaf984e77e8da9ad6d5beb905088fa11e378e6de79ca602722d300af32cde7f2f6669de6bbf5df31525af5ad85c8f591f5e28b5fb323311eec4a41212c58b6cf1f33f906655998301b6889d22f8927d5e247ae7a4b967d6b95ca47e2e599b2eed0c2c8ac43f6ce3abe68baa9aa765312311b93f7efe0cf3a94cb187be75ff6b02c83371d722bcb61ae3cc0c71f3d70211efc1f3572421ffbc9a15436e1f193f0d2b1b1857cafe3ae0b1a532e9e939b68a6337c6b8010954e4494fa5f692f56429c131bd45e1bb35e1cd122a14a02190d7f4b9c28311f77eb8d94010343edf07dab858df0f2297d5d815095e64d422cc1e78850d1da497c78e50e6fcf509266f29f5ecd2a3b0dcf2070785207b18126befbf5c57008e643159dadaf5c9c50aae38f2b8c513285a5f90af081aafa14478ef5f0325a3751e8422510fc21e0990b95448feb88cfdd0da305147194912b4279a2d241623bf8b59a6f55069b4019e8baa79ef8c0b8276aa3aa9f8a14b7f523c2d3d07f2126840ab6715849e30ab0268a6f0356a9be59f2fe75bcf9b907ae5b244034a5e26453688eb57f9f55079e6328ad828a0e16cf919b7e0e006e0b6ba8c97073a1169d84bcc0948f0a518bfdeb1c7079a9a6079533fdcb450a336ab86f41a27367724bee7e23b39b50752fa0a4a14f28fad2143749145a62dc19037ccf92afcbd57501d393f2c3b54d98ccaa06a020836497301bd30ac0188d606d86fe6304cc4bf4660d3b4ae3305c236bf5d5f3d9f5dba12a62076b050ff24e88fef0a74a93f8cf944fdd6f5d0eed1fb9e1c5f738f008b1694c22cf58cb822fe80d438c1b36145ccdf6ea25709e025fcf0167f54d8cfd682af3874e9c6f77ccdad1b658b1b8c3a8e61e137f5ff3965b932380af6a15614371925cd78ae83cad6e3282249369d0ce2caa86d3d54268dfc18650fa88624608af24836aa293acaca04e3d1631697ae738e29d2807fbd038969e64df8881afecde973115441fece2c64356d0dd7842fbf0c7f0bed5bd4ded1edf7c634c1e76ccccbf5bb43906e2414d7ade1023b505de8f91262ecaf3279d864737fa3056a7f18b14440156679827d0a54723ddc3efc57f032be42409026d2b950dfa669df7e558dfb52dcc0581a1ed2761711e18abf608309fcdf196240a5d58c0a2e87261c510c67d5795c05382bb633926857f46a97"}, + {"000000000000000000000000000000000000000000000000000000000000000c", "001de0f2b5f7c891ea2dc00b76071ff45ea99ffb761a6ed2962ee481e1badb923c9b7494512d492d5159167339133ddb730d2be0c4142da1dbb754bebdc0c919e81d534052b13cc586d1b8810ea6b9eaf80f872d032a92c8ae511dbee2d0f1a9d75a20fd6fbf8bfb82285381ca82f2da7fd58303c4947b6ec2bef2df80f504c132c22c1d97c7cc3789974c4cf40af8993c4ca1550dc4fb4a95d2f34908db37297f2d6f1fe3dd7fe70185dd54c909d3d1397181b5c81c3655b0a597382624a5fdae022be18b96ac02f840425d89344417c43b10d296b25b6644315e1194ee61dcb435b7c1990db120579df8a66021e5320af73d66fa54c9eae3f53d1a07ecb48bf5c366f39aad246bc44098b37df67e5b241a95d6fe4e08e64d456512ff27b292553d719a378c11fb644a44e723c1d476c315a5412af16fa3cc2ff7380ee2300de8a5bbc8e0d77af35d69badd851756aa00c7dcf7b6b42909b37438d5856ab11a86499da79b29b544d8e3231ca178634456eef376613cb1fda327058cc2c45b2d9dcfd88fe619987681978b12bf1b397b9edce80a60689b88e89852476f811ece65f9380c045ac65a3ea5480d9cc1a758226b2a8e0908f86a306234b7afa36c0d1b69f996f9e9cdf186556e9afcff07324fe3a2cd5508b645209b1d3035819ee85da34b078713fbb39e399f7ab685674cedc02df737382df1027659379a61c73f445650e4657874ec42aeb61d5b20ab578f0d3085358c728498dc6dd0aa4e4cfeae4a118bf8c7decc3c91847b14025ecedc0df191b02d291c4a43e5021e769ff4e806b0776fefa1e5bc3bb6a610178e777cd066a55182326c689a408725529b636d2395f4a515da266394e9b4f3c24fe73ea5f75bd82b3b2b57bd774f3ac8cfdc05ab12aef9b9fe9dd1f6df3e8e1a41afd00ae9c0fef64ddacc8741cdef90b27100bae4a7204ef9234a9d55dfc940fe9610d15f8f69545ddfe7eb634dc75be3880cd8422566451e98cb441d0b1f17174e907108ac55b6a93cfc663a0f57771a2e1f2a94e790155ca1acb4466aeb5e758a6f3de6b90108ace09ed4cd7711c4b40bbfdfa9e6d34edefa0945ece5d75b52fa8da48bc58b89b12a71d73edef6cd056034d332aa86fdf8b4e56cd3fcb0bda4501d013324bf238e42cf7f7db891c25e5bb7297ad96bff3f9702032975744f1f4b5330b3acdb6aea056caab140582b5b3b7b280cc9cf37eec4081b4f587331eabbbe5a0d0d4f64cc993ab31ace36f472ee77f1c605f6634d433f5dc9bdb0509bc89c27cba1d790029bd5d8c92a0f73ba2fcd24856141e7f5dc10ec87f692a1b92ac4177c7b617654c972cc08829f3da7520d7a86122e961820330fcb241593572782954dea892f5618fe82c91d7489b3ea9fcd19804af3ff0d41cc62bd25fc179f0214166dbecad209e4f9a20d7966a2beb6bad83b8a0a798c34d65811cb477be21022c31e96b957bbd72913e8a2310b9d74e0f693e78dd848039ebdb49e24431ece030abe1b3a134391c5df6ab7599274f53de7dd02a11b098dea2d23c71fa58f6949eca98e5d3e7ec812a973c8d20ad3438e31b2beb550f87b407ffd29bc02b358dd6f41419ee99c905c2ef8e634552bdd58db334053f8cf59285b69f6a9f938f452d321299d11c6029899e419c6148d42d900c735577f0ca8f5f0c7c32e37b701d9e358932ba21791d5d7784e4e43943da705f9cac2a1c453e153444294fa9b219a9f465c86bf18740fe5dc236457ddbd81ae6b7041689c69cc841103fa8e9cae7a9e11f964c1529be7d0fba12edf0d4c0b4aabf87726fcc5395f630082eb85f503550ebe6407580fab95915ba735dd92a4bc2ad3bd03371c2be50ad133b440099bbd6ab662ba391f670cc10cff416f"}, + {"000000000000000000000000000000000000000000000000000000000000000f", "009a3fc5b61a051f8fb03403f259ffc1e2e75dcb034009bd4f816564979906a7a3f2d3dad731773f8ca41c996b398bb6c0afc3054322861cfb18e9f2ff139b38a0ff92642d6bf3bb369817dd50de921f80944e7c0de79daddf4fa8b79ca264c98eaf12c20b8f12da801b84a6143495e037bd6792bfaabf9ba17477123270127a297090988e799f347153e626101307f3bef44337cf336a4a3dbecfee61a4c3e0d356fae1b49ca2ae015f2cd22ec3febf2eca182f446bc6ab0d289c1bc8534913c272ecfb5de5acf55838fc6c22940cd92b830ed1b9bdf29eca85c428f1473c1ef82c893713d0d6279d8b7ce80dd82ced2a2498467d65dda512b6663c07970c67ab0becb0a9c4d451a7a8ea6a17297e1fcd14800c83e1d1719de1585296dfb35d28c908d8a9e01632a11a8add654561e352aef74684df91b6dc9f1621ad0d9b908ef719414286dba7402b334b697d4649041f425485521462f65cd0f78478dc5533ffbd66f233c917638539af35d909733c9738d7d5ff509330680f8dfc3822cb53c57949584e9c5a821328325f19a510f3221408a49f01c2fe95d73cd99b5dc51f3a6b3d0943eabd5283cf34766bb3a666331b910582a83bb3281762549b9075bb35ec94afb96bb1be927b1a608b0ed2d237a5486384ff6eb4a29ed4471f6e355c92be4379fb1f73a9cacfdd6834781bd2a3efbf99fe757705c6bfe9feae704ffe73f09875f7b70b57f81d4e8b71b78cf4b1df68bd125df92cda7b4bf344a73d2503160ec17f87d81c8946b38347432125d15a498b1edd470334935994df6f629ce4ce4fd46bfed5665a133309f47d6b78d46d9b16a9080f756a68d2860c553ba30ff07545be4ae840f9f491a39bfdb0a636b7ba35c50ab6821110543d23d78706a6fcc940f9ad3f3734b61bd67df5018bd781e61b43645ddfa0a1bd23d73eb1024d2902bdcbee4bca93e312c0b7021977716ff23c7e1eff070d63c337cd60a822894515a3356e7b9b5a14851bc344516839978bf2b806aa9b0175696c39701eade71178e22d1fed5f88494aef82aab53cd6336017895ee5f99b8a0d1c0c86542159b0eb5abddfbe501b664314245e0359746ce2155fbc8c11395b90abeb20df93dd01eaf983d74a267cc07b732a206599274e2698d3c9569be26d5879a44351dc80f6959ffd723a0ca7e3f3b51ecc7fd791a5ed193199018b831a9baf0e8c359bfdb8556dc7d142e01921711d16c18a5a700fc27ddde604e908e82471f322ca012d5cc64e29e83c064c1c261f59ff1e78e7ae355fbc6afd651d847410cb54d6fe9b11890103980b60fa8fb72ec93b379127b1cf740d5ff85d64bef49c67eb2fbe49ad76fa9f2dc30aef1a104d38dd630b66576ed65708007c4f503201a5be70d94de167f318060950231359c63b6d2802d42924738aca3aaef0e38e92e84d1a4ec178004e16bfe4679e0f0dc0919692700155f5e60b5eb7c8b925255b081938cb17eddcc3426ace65aa1ad09ff6082f4f644fb6225807131203902465599d7a05f5b1fa125cdbecd2f67e89c50df1a3145c109bd4ef3fe92a19f0f4932398c1752e73b1dadb1cded140296b89e42eea3ddf25db38853db4e6c56e401a4dd94f512e383c72320cdf4fab23a28fe3eac43b814138ac8a527f05efeb2611da5445542b716f7016c17d35262bd24837135c2ab71ad7f93eb5891c7fcac6b28fa51b43f10a5e23cfc4958e95672cb16774a9166d97c2939cdb0d0b21e4e3951dd9db23228c0abf354cfd965aa0c714b21cce4491e507fec1d1738b186f1320e7dad6cc35a5fbcdef0f0db760035c1f29fde4d38191fcd504404d4ae28d2001939d1c85cad5b661d2350a3da381526f3cfc48a8ef39b7c6790615dad67acaca7a7ae6"}, + {"0000000000000000000000000000000000000000000000000000000000000031", "0133b0ba7728708fd9d9552c727f5cf65ee6d5ffff1d839acb6a489bf7a1b4f22f2bb618f30fe3fb98041a6251808e62e9edf45f31c42a8f0ab753727ecf912be2347345da6a39e0d6036f404c8929e2313e78b50a1fcd08d91852b8fd8d971258389809f5abf2e1120f4a6d778462cad9de1b34a4ceabeb65a8969440550c8e1b373154df8edff692dbd9a3055a392c96246c0de687a6c9e7ecbd7d60b5812d74fb43a3a85fca73016d2e873a4284c2f0b257a1b77313b2582a535aac1aeafcde3f7acecbf9ff01fa074002e356f83d2419195087a3ad34cb59eac711a77e64a5d50fb0159342247d6e220e9e38f917d443b872ef45613f80f001900b4ed1f85bcb3f259382843587d1bb8e1a4893abb60c046acea4a261bd3758b0d74f327d66314efded0910d34894f004d6d3f711530eb73608ae4cdd1aca791b62c3b7f6d61e6f04963357cd520fbad1281c6ddd0a3c608ce98a139fb67761e0d5e871cdd6bbd182c22712228c025cd4a1476de31bb46ee9951e1f91d8cc131a6ef86fe49e83311cd1816d64521b7973bf44241b957ba9a5f529f5b91ae51a51e567b563d9d22a44104251bdd5b1aca9d9ae141752af1b4eeec9bcb7d4405a7a23c823f0b9facf27e18d5468372ef15c53ad203266e462d9f30372d9c5e49fe79fe2d9b89c9c9b3c5ccfa1be95c573dbfa78a89d4c539ebf49984f1c11d34401f45ea401a4f5634a9a47161e66371bf33e26f5666fbca47699e4a0e54f2cca59e1d8c513369d2c3f6734cf558a6f08d344801fe26fd992c135d6173218fcbf5b14a9c5007d43a688427f7379aabe9f681538752c359317091cce836541c1268278e1598143328b3f7822bbcebfed62f56bc22dc06d620ecb52281d55eee3ce4ee453b51d12641c9572bd5838fe838a49946b51272257ebfd35669454d64c22b2125d5362018e77f1ec57041cbebfc380d03690aa50067af1f32fc807fe5b4f96eca5ef8330a86b67c5e3211b78ed1955cce8b6c658e30cb195dc0c6324d7056c58b93a48ffcbb152e589eb6c14c4b623fe804e82fd371cd70602d151ba46a130680520d8c57d8b9978de77cbb106f853c87191d22d32f480dff26a4238bb0fd25c190a3db394455845c2e7b8d389e0d38b6d2a6a765776153568eab054d1a90fb596764f42dd5a2f69b66c90085b2d25c2ae4dd78dadf5bad2f3ebd1ca62ff80f21eda0f2ba758a9ff256f953170706b974540fb66e610e816231ce612399d6393d706df9bc3cdd47f8cf055fddba95ae0728119bba6bc4abb0bd1c1e951e28c08b70f4c4d8e9ef3089fd6f3b04f8f59db20fc6517272f43a9b4da8b5bbb8506c3d766d83211599222b90d32e1835f49b81f129911812e70982c7c44765f404dd62ec4ea1fbf0faa301694626eae529baadc698302c2e4a3c6074b8f7dfff2d3d8aa39c4d0221348fc4b751318361dd3ef3b9b352e2bf2c612299c99c09807211ed9d98cf30a963951ef0956285b31737f4c211ec64b707cde547f211a54e84db0e549978df9d5a203642408fa53044fd26a56c552ca55c2738ab7630109a7a0c0a9f24b29a8714398f74f2cbcfe2e51088813f4d0b55fd04df68716b5db42313edb39e23f22cd4aee8544b371ecc990d114d92c2d2cdd3935f251ff04b5ea76f87391a5dfb925dab474ad1f0735bc2f504cbbf2e4835db6feef2d18bb9d66dfd32c74bb2e90054e6534589ba343096eb07dbce49c102aa25eb80f12ecb16ccd679c076b05027a1b3e30b6c8d39bb95507f379ee298fbf57de3412b68d5188d2fa2c9c7b641fe4aaeba18ed6b2869435ecc8b1f9da236e36044c2c403c78084f1b4ec77ea5b4914a32b5c2b2d3ceac412d8328a31874e52498e58b293fd06b89b8fcf7ea"}, + {"0000000000000000000000000000000000000000000000000000000000000003", "0052a2ffa05a7411e2f501d5ed1c82ce23aed6e0697324d5fdf9a3ef31436e6a65407adc2b271d9c06fc00750493a488dec2908895ac08cadf3e7787bbf2f918c623f963e3e21199b5142bb26e3a219916fdc9ac0822e1ad9c8dc12a7852448eeae82d4241d17a558a0bfbb94b82dd87895bd6125dbc6480e6507ed3d57a17bc06fac82026095ea1f5e1036827022293d202ec5239d3d678ea6933f16ce641566276d759bdbaf9c80cfe996b66493cfa64f531bd9515e081a76f9424cb53439d0801aaef4dcf1586d54444c98e90e97c01560d058986beb82b87e9f13140b7e5530d3bea2e264f1c1679112719d8eb80a2d777615360e60cf73a865a20d5252cbb08e11ee65f622788f5f06966c3b344692da60bd87365ece9a0b0a35931cb3b91b64d5fcc5921225e8fa764c74b303d94ffccef45671ca39c156049f3d60724e1cba72201c64cb67e432e86ab9e441701b8c4b30009b4d2f026d27e5e9bd371c8a42e5b4f186c3ccd1f4e7d2bbca5b4e781606cf1ac993784cb0c2c7ae3f64f5b2b4cb901a54b7b4475318cd27b2c133199390994391dabe592483148d092244d3a5d880e2eea9e48a66b117bc72414266603e612c27234d70f1f63eafeda2907729e13038acb663fee963fd2d621fc7a95e9519badeda99361b062e0e2266878c40c62bf8b95919abb6318ca27b34ac273bb28657e6bdf0ba5b9294a1aa223bf56820cc84859254de771c8c03170f78310e6b451c177f38e4048eff7e69b3fe5590e2f844ff9d1ddd79eadd40c73a3f0d52e639fd32a44161c2e6822c4bbb8c8c4fab057a97b9d461fd32b10c6234fcddcee333469155c08584e8e66d1dd275622606d45b915a9b1c5a612b0cb4cbfca3c3f57957522224bffd5992047c77254c570da0ae18ee012467a3ffc95538092c14cd57734cadd30d92d45439f5b4400af028c4f93eedd9bf7b07d9c09b88f42975bc51c0af144dae6a284f3c6714231e1d64f59fbb2d83b600e49e1242b4dcbbce988711788958671803a6cac9e33eda376075ea7d7c4d6e46d5f6f95d5a0ca94640c10cb125f6ce0b40b1edaa342e077c6223e3d72c270129b61219e678d77e94ee829526c76c6453274a0a517ef69c225cdc5996a39235598671cb1ba1d9effcd1ebe4b5f13e960c17548c29a9b9e669fcfb37eb7dd0ba733510e04d68ad875e31ce2fab4b109360c309a19146a65fa522d79d6f2229e023c678d1174af8a97101d7af68a64529d9e4ab4b7c3fce7adc2a8118f4139809cd7731867f96fb5675b4abf28cf0e671ef529125c02fed320a2c9344bf19ce3e53d4933778ff9c51f9b3f13caea496da345e434394f08915a7cbb87513221e6ef15650c296a4c19904ed5a4a39427bec45b481adb9a5b538df8fa5577a00bf147c63d573f2c99070b435ca750403fccccd1e406a6ba6b63631ed57d51b77e8b8cb5d207eb2145508966981dcba6fcf0010a495a151d4377bca6f6c2492e59893ebfccf6dc233b78fbd58f918925d1a3958a27b401adc863fe08a509a48c031043850de193e81be8505b1a592f5c89f11795e67f780bc57abea151e1111ec4b2287e1d2812168728cf725c531f49e9a2ea1e7cfba1c1237c62ad252444aa638a45438e0564df9cbdb68151556afccc0889336b29e214ab3370b2184b52a294c17e1406011121b9d1dd25ea3ba5a3b18c6bea8c026b53bc47912764aed22f563833c35a6827a8785d7a6f99fde98f3819c9e1736ad2cff5cb25bb1b6d91b9cd4bb753480943fe93cd659cdf5023f1e97c788f8cb08c3f2f7a09a73bd245daba856eee9112d2bf67bdeca4f0447e09558cf97d12ba2b5e5b96cb35e68a333737fbb71e1065d94223c8c4578256b41190a7a2fdad8a57c706"}, + {"0000000000000000000000000000000000000000000000000000000000000021", "001520f1024fabe6e3b67320d74a2f9db27919a381530ce6290a58966f467e39cf70f5d1169489750c7b0f2b4617588e0888d432e287092bfe25161399433510d6e610b7cae4832e0371f40fae0d98e0d85d08f403a421ca3518fdd9f47f23b70c2d9a594c76591f0d1142716b8f9053c57740c3e4adba514dcf6819cdae1bf19d732087bdcf5721b30ab851bbf20f1ab25f6e68991b81e5e0fccf3985c6be303b2aae3829df7f5f081a863c702079abc38af30c2f69e68d634d4c6d191d88ba9cd66c48996c3f5985f863d33681513ae13d185ffb453e4efe08950f6350e42fa74957628b8d531b0d90f2495b54dd27aa92b133d8bb54f9efba4ca10a3f7aaceed1cf73cd9a81985318b2c8df12f09a97406c97754c1ab86585c5553114459c2b49bc9d17df3c74dd5f1ba03b5dd53e34cfdbc377428aefbd69fa3ec995def2304337f7cbe725dafceaa358fc9ff248032c65fc4aa102b7ad1c10cc631f7e66cc415a167127726e849e1460f5f50e32f3d55d5d25b7386ebbf51009276514cdd73abaf87bdc99f51f52f75a5f99a83aac3a7ddd13848334bf8474b15fb309b0343c89ff098ef59b07613527a38268a9846845b7561e1fa4255a2f9e440eb1ee4ddda1e93dae6ad79673c27d0015127209318ac5964a709bb21a16483dd2707b3be14e14d9bf3ee23e4f4ff5f9d356b5b66119ba261f357b09d39913c899d24531ee2269e274fc7140c55bb43a100e2b6c668cb0cb0f1c97c58e5977764d9619f1cd18616bf4955f80f747dc5493ffff3a9a6d68939f4f4255a6c818586dfccf4d066812db291344e73ec9070e74129fbfdb06e4f3cf53e898fff93612f67e7cc51c98c608a18f4593ea01443cb059dd59236773f76738c6f475d29b202567f4b59d754fce25920b1785e944af0e053354dc2eef3dd7a3475524ce9b171aaa52012b66ec31174313a1c5a252173f746d10dc6e688f28d233c80c9c9942f90c48e22159df82ae4c3817d7029d0cf3169c6deb3cee81939dee4589a2623bfaad42bcf3181029937777b9f447432bb23e7e9e18eb300a1daffdf358bbbf3b62e0c0e4a18d745ac7dae67221596987f42bd73ff37ac38b6b5e49013a8c8ce01727822cd7ef9683371e11043eb5b378057d07586e21295dcbaa8ad0d39725c0e4ee35c021a27ac2b9b051029f1c1f0650bcdcc3d6b2032fc5d47d4c087795071c419ebeaf5e3ed1e571e2395baf2465fa7e7ff3ed1e1517fdaccab04acbd3c304ea5394693d20759d39351444acb8de9697112056942b51426e250bbcec000dab6a349813c05f0fed33912bd9f1f9aeb5af1ec70e72c895252494a14d68b344c5288f8982adb4b3ad130fd6e9ed0eb508db6a55e4313edecdb02bdd22e6176c6a974ee2fc47a02cd365af2f45ed735356afe6036279181ce5304db38c3193e523de66062af6b3642a70f3e0115581ddab2c4302aba151e13154eea81e131c1d07bb66250f3715d1b9eea975509253c5ae531ac730df202979edcd71b47edc53280557f2dff6091f2fe98e6f6318b9ca51e261bebe6421a9c871dd463d39cb1a8954ede3939d69f1fade9a6eab67bd6f97280b3d3a89e07d397d68028947aad7dd3f80f26de42bc40fb9d8a3c703f9c864b4dbb4120134c98be92603c62198c103f42950a2a5a594f5e38dac16ce2ba11c68ec61d6657a1748c9f31ce2f89a80d581734bc724bdd79e928d63ab23c276919cec3f1201d235517e36df144fa01b701b541665fb0beeaefdef981970b20fcd4b6f7465b4394d61530afad90cc0d637897e6c54596c096d62c84de9bf5a7870f32b8315129f5879379a3efdc366853feb716713d5f0619e4d22baa60e45a28f7c51e60c354def25a5b4c2b2426c97dbeeaf"}, + {"0000000000000000000000000000000000000000000000000000000000000016", "005c31fb5958b7b4de24f28d96ac802a9265bc7ca834ea760090a480735ec784723777c211498819f2d004f323cf1a66e0e3823a20e93d30314a4368fa4ec4236af375a720985b09721466cb50f762002e9f7dec0244a9744beee4afc873869619c90d52ffe41818df30f2db8c785134cd79664a3b8ee84c5eb9b2bc25cc283edc7b85cd35f6a35de3e806d521c9cc2453c24c3d6762fc545d1141e636281ec1eae2438bdabe09d0020ac6d3f4e5e2d5ee3d51c3fe0f877a11d49926580e57af0e0a673d75ade382ed91b6f344be012cab0f1455c91525993711fdd6f40a3b3bf62736991c321214a74fb43bcf011f0903118309f9bd90a4b52e4a680227b02fa08810b513a570bffc28e4b32edc1ea8a105735c4f132a480dd086e2e46440a48f1f1fdfa4891bad4ae0988d02c1081bb457aa7e2ef6e1b7dc7505455e95169f1ccb6d45475689ffc398c1feea76f813024c9a120aa8a7fba83cd189f0aa8aaf8fb5fd96fd158d25fc076be1aff320c6e8cb686e66b2111db1ff2d18eb388a14237568c7c3910c7194f5d3c9593b494b40f5cc6d9ab0e3931f66789b778e7dab1b1eac3e0d848f98f8866a8b81cbf1d847571f60c10abd895710429e3cb1d5f414c464549890fa39ceecdc1d96c519718573528fe51f81df226cf14cc999c9d12f07cb3f3924e7a951278f0d66859624726e767b4bd8d96e062a22a9245bf6a50eca7142b6c60158bbdd1324ac066036be6d9f8b3d5f1be58b78544e357cd6fb20ad160409b7ef9cdb5b458c16ed0e72ad0e6a6c1e5b77173ba90bdfed61a995296280524ba2214a637e29a007a613c19fad8b6fb962932655c2960e1417d593951064425a670c74377db808956a79a0a2585cb723aa0f54bbdb48c7ea7f1bb824ed37f917be9c05bd9fe52e95e27052cdc01137c4d52e28c1a9a6a46d1628f700e68853af66444fcd50d2a650a32a1350111d0f0c023b0e1f948b861ca33822f7dd28322de264dee4da12b2d60cff8b7cf6c297618ab29342dc6e7d9bad102b552a5aa9d155b2bdd3e8ec8b6331db0f947fc0f7070b69bba694a5f943db644b994ba0812e61b5ea7d5be296919e67b1039e5497b711d8ddc6cf763f8fd10f0be9431a113d9bbdbbb53465c518462a1894236036b104feb99fd7afc112458a67d9cdb629cf7a39cc091d44f73519c1a9b6bad2fb8d1c7bd6d8a939afae14b61625d08a38ae6910321dc054b0a5c1ac7428163b66b35b7ce88ef1956653f9466b862a0b643cf9a33dfa7667e956b47f534e65e8f73b76b625bcdf08f1117d4c7351e29a27d169c3263fc37ac2548ada910f1b6fbcde77e3b15fae3487c99ee9e3722700f708c536b2c4a49de813a797a354ef4fb547da0c201df8943debb380781dd763c1d1b620be7a90f9a7302fff200212651c0b41c56fca55233d95fd9694e89b7624b31aba03d918b68095c6a4687471c9f26731db3e3da90a85c5beba79223fd2d731695e7b380e65a89e26241a1d7110c50955e69943423582ff316cd9eb4fc299093a8e5c3603d219d9d6023e034b06251680b3390c3582cf8a19207ed3dde7e6b5a4d32dede7d63455de1445d3555f06b34bce9209d180605377077e9eff5637a7fc60eedd34bf404b23bf3bdc295aa248f81a6902ad03576141cd36787221efbdaf5d5a38c75218ab14264267b0214af7a631977886565369ed3d32085808352a0d7688dbe9bf08e296a8f46f89e4f07485e7108da0b93d4ad90a6f40627f47f58a24e077291d9303b880f6401e60513f00610df5b34f84856299443a34d52fa4a8d0a328dfdc06effe5fb02643d45bc6c404609a1cdf87dfd25dd660da65c8da84b041c9498d06649c8e4198151aedc763cce3bc4fc0ff55989ed6"}, + {"0000000000000000000000000000000000000000000000000000000000000003", "0002ef2ed48192c2a24ce5bb9e5d78aacb08d7272804514dd7ee04de507a1df441043d619d14fa7453ac098835a3b5c2ea2cbc3e146fc1cf0935fd07fcfc7814d2fc41c4c84375ecc591c0dea7e24707d4b9d35409505a1d7489ae2874a312623016608a46f0d58a570a1d8d22d2454446c2c3773a00f7866220e2d792ad0c287ac2622f81b1847001ad4654a8c915efde98de4f15eef5e7daf83141aad947c47e382e5fd5fe4edf0ad0afb3bcd2f909f172dcab496c17135a8dbfb7cb1d4724d37349af07702a84f81e64fa19fe48bd152f0bf899c2af5104fef56fb196f8acc607a60f3dd6db3b031e4a04183f696bc0f6514b3ebfef1626194d5d13c2863d8a071b03c6fa783d90e838cfac2bfea6533eca4d98816a21496bbe0490ee5ab57619e2b5155e168fd252e4ed0c0ffa11e231374aed3dfb2219d06128131380ce19804b3613c61955d7e1c35851de70f003dd89d5c9989fd1e606936058eecc3dd3e47300d73a62bf7be4a077f5042e0ab6f2ff8132d7609777620df7e6eb71c40c77a2c0a1f039eed3edaec1110132281797b2c66c8ccf6b2ed5bc2eb78faa2823fefcde1032b2e465dacd4b5c1a658f45ef269e594d73cb62432e1367177372c1c17aa5edf6f363a5ff899d5a611ba7b30de109f447689502640bebf9cf7df27ca7c61ec01a4c790819e654b117ab51d88f2e68e4970d3e0a84bdbe6d5d0919f83304914ad2e8e594c4989d0f53ecee47d15b0a05f55605b93c7b91ab06e6d9cc64135c8acb0469d417bee3820c2631cdc303f479ebbd3eb9df988b5c7eb52018d63484bff3874a5b1b5fb00d344e50950d8818cc085b7d0c62994febf77fb21f61b34e965bed15f173551656d461fc49995cd4939d1b16ffb5664e2854cfd3f1ebd17bf08cf05857d552233393285354045bef5a8482b3335b461289f1acc000311fdbf9c805d19336d0fbfd971a3875c18e10932292adea46895a148f7c825d833ce161545fd98d76170ad9307ac7ab7feae434a83eb3295dfd91f6ca642d97668841105951536f72ef8762413f45565cd5f2045b6c367cc1584c1a79f65960b6eef9aa803b44ce1de94eb62594313fc26a742c42334065f1cc5a5961054dec7d3a4c936a8f1082310e7efac9d24ed4a0a820358c46cbb43923ca1a224c193523a6cab7ddfe6901bba1aa1e47c24369ef05475fb9d2e373785bd9a9084f5ee756938dada78e17b00845307ac7f35ba00408fc9a232a0866f291a311be15958b7ec30aff740d2f5346e75c4dd6e5456bc90634e61eda8c997a687d089fbcd41b038a38756c01fffca663bd3a2275c2ef2dd64a6f36cf0f1e79e59335e0e0a5b9aed1ee997b0b80f41e61d490ad454506a10ffd873e10dcb949bc19253a0e70ca8ea5d81b73df0365b5c7183059e8220098134010919736d031b0de50d69aba31027302de285705d1220d1d7b859a067cda5b0bde7e109c000204f052f0ff47c06486f6d2103b4d2fc132bbf325ca088d991cbc45bc55902742d231cbea9937aa9258f701c65fcdc28f22f99aeb340b042c24970198b9875f1011d726f0851de46f0f81625d555c9e6e633e7a7f1bac1ac8fe50d49d57f4334a8f41a908f4a41d06e555cc5548851b76653eb616c201da638dfd427903ca01e81dd922ad6cc7cbd7c4be265fffcde3dfb028130fa65cecd606cc8fed19c12c989063dfd550bff8df0a7b124e489af9ab9aa9366b4cbea10e7109de69a72851d7e565915adcc68215c94c45208db8221137560d2ddd866552355362232187ad942b69e5e1d4917d0f051b4888633787225501bee722b616e90d7a4c6b247ac566d1abbde1bb3828c71c7587dadd8158084038bc37a34ea049adc0c8b3bea3746baa723bdab353"}, + {"000000000000000000000000000000000000000000000000000000000000001d", "001d124d24a1bdc1236d0310dafd84c223ced4b42c0f9404f6631b1fd3873fa6fa666280da2b7c1e48e413b0cec69ca22b01716616cc8253c8c6d92cddc7ef149022699accaa2773d6d93f1079cfff7df4be124c05dfc932420c8b6357904566e9d351d5cb67f6b114254b6a9361a0254f1c7ef90868ffc61e4f60f2b3800d7641e8a22e444de323549126c66b4251603df39f2d812f1aa1132d0d83b8f4e025b80ece830ebf0e9302bb12caef9782d563de54fcf576d321cd1b72c8703f124bfa82148496cd9d1407f66cb752f19e7de55c14a0c72e5491b59100d283cebf5df2495decdf20fe2153067529300a3d9dadd5c967d563dd90224d7b0c0b3a9a5f13e61857327d74ac4a5b6ac6d9c71cfd683f5a963957de10737846977b8d588a2a8a643d2ceb26e767fc049312afa52f84aee8d22eed31775c1b9e4789826bd0efa1d98af9248b115fde4b0f34ff09f0005f24ccf4c7d059cc77b14eaa5bc268d520fad73a1831ce8d8a4e0027db07c3b2863a04a61ce07c9ad515a5f67fe99909b5ff5efa34c469a27af9c35ed0f856ca5d31c719048772dfb8d1c8cf85c7c0dbfe82770a830762011353d3944161e373e4321c91019bfbb410db179a26dc9549a9cfe6d7406b4405e47c4f8c2717c0391261cbe30bb74583644722b8550145574b812505f1a47068729f8750750f61711521930ebc8c400175760b17d0a2a8da6387409ef5c135dab2338a9a0d1f8bde30d7c519e386629b852c6106ab93bcb8a802c8866ed982f974cf7a803e4a40318038593c465005fae2fbde606e31ff01c6aa0bee7caf3b9dbd277004d7d5272d305e9985c302ca9afc821a1d5238091b3e6557b24161fa638cafe79d8d692ea373359d2304172e547a2468a85ff84a1351cb37fb532454b9dc662e4e7ecfe0a017c555c384a1dbc8b7374b57ba8767006a77bc4502d155275f0936077f865300c3f906b415014a65ec2e36f3899192203932e8a95e223c5dc305c904014b27d83d9274421901463c9a9ebaf97455082eae358787a6a0d97ba30508e16845a8138ddaca008322b5d70d5c60aab0e25ecc5e4546ce7e1be7ca02bfd077d8985c857a4c060f32e1750a2580518c2b07d8e3a1a085fb7a7ec004eced7e0322612cd769610aba8d3aa5131f2385f12811cf60c166ca2d983c5e0a226ac2244f68359d7b47c83751c1b78bf29ec69a1678aa4f2cce0db98fef25eab5d85867304afdbf811123a0b45684c3990a9903f5e86290e50f12eb71782a9b248a8d9621d8c57a74c13c6237956bcf5821ca0c0699cf69d85e97c194a2ed7df66b3601dbd37d6830a1a3787f9e136ffdb914469a54146246899a4d881184359faa4fc6cf547138c4eadc520f2dc81a182e120683c3c4d0898fd24772a20c4c0f31e1f1fcdf0a00b8470cfd2b62addbd5d086111c015c3e3f82722332c1d7594317dea7848af38a91b29c8522ca9ff40e0419c92a729f6ec965dc96491fb3da6bb26b7ffb151712751b26894018893b037fcea417c6b6059c82560870b3bae1d0d285e2ffd498003f73ae10be5a1e1c29b022a23b59755be92913c5df4ff379fbdbba144c2333642cf111ae70fc924433a83899cb784ebe665f2d2af415de19dc3d7cae65c762d7bd0e90225fb8df0371b648f04ed5169ea3c3b19fdc68a9c2d4ba0dbf0a841edf5a0ba676aa3541c9c4f931a976efb7a9cc0e08933eb9da6f4987f455a8abdc9b92f5a7ddafb31577b3071d2d1bcd98e347dd1dd9119b16221c9b990517f0e58bca78f38779b0a10896138d5b3edd41ea2609f4ec13cf4fc6aa1ed5d272366401ded434755f0b1866121ab03d17b973525893bc4e2509ff2e161c1898ea7f5cca448310bb044b376e9d3d4023ac5ffb"}, + {"0000000000000000000000000000000000000000000000000000000000000000", "012c1376ac2860cd45ef71a3a31c9908e42e765a181756249c8b4d78d118bf5187e547f39dd0a89d962b110b61216ccf05b6eaff13093a653b8b30dcfadff468ad149165af5ea7ddee9798237a95b69d961ca088093ebe3f9e27e267ba0084891969396dc1b251b88a115816a4f211fc129ce583794aca059d93a37dd5f821135a93a5e237453422b4924e75640da576331c4174777735d7b6b70dfbe66933edf1236b007f590bbd02c97ffbafe03115f24c525a5f7c988d18217b643a13cec3fbec8fb7856b35566992796acf36b89a13fb2e18c4c39da0ef7537878494da3d197e46dd5eda136a22ff7296dd4989eb30bab0d66a381eb92abc24080771076ae6682c7bbcdd33bbcdc59e7272c2b784f52a1acd50888c0a06e17fb580ac682291a471d8370f0dd479729a486d9451a8a108bfbaba0474a774c08424152d15fb2c9057cddde592b8d2b4422fae7886b9021f44a017d6805af386924a88f6806d14ec54452b1af2b75dc0206ba78937f6c4b73c58faa5e77e7bf20987bfafce487293a247e47127fd33f5364b575cbd23f571775ce596bfaaff761a94ccadddb9a87d5712041f630247cb7fde7c7740717be09dc334133ae66c08f2b6b7fbd2dbb19c5a30a131f81c0443571b791d1ec4afbdb8cd79e87368851be5b30b96f92ebc802f3c4e1e40166684894d52f969915fdb4e98bf15f559022f7d661eb784d1f6eef2933d3af5663bd3bd446108e6e933d213c10dbb3a046e29b1a83644c297c26702a5850863908fcbafd0218fa3fcebd6a0b13faded0cd445e580e2d7f3550093513d534ea35fc95ebda20611da09c28c2bc7b9d683707f6db04d6a53b2c8230fcc4f6da50c81fcf78c95139acd34ede110f7171a090eb601f7c581d986a1721fcab2f858ff888c1dee0dce2f16251f7123cd9ea4d3cae5756e15f0db92660209894bc61296e762b464633bf49d0336dadd6e0f4f7152cd38e06ddfb9fd05b398440455be2774705608483160885a8668e93220d5279070e97ed2bf99c534368ef9d95e3aad777ec50aadeb95e5fee933247d08e97e5332635ad38efd613dd67b110d8be29c2e690efaef7312a741bb898c76aec6ecd4066639339ce72492cfe4aad3b3bed0714387afc539d9eebb30a56436fe9c2ecaa2c6bfad8ea373e1ca3bea7e92b5ad2e035c5bbe2bc75e557c96841ba9f524ae8d9f3c46b00ded246395e02e1d2e8ca408f3468a613b8e6d96390d624270f8d2a8f7e8cc11485a498bb75879ff9f9f10d86c7fcc180da3f7b2a2e9d35d809e40c7dfdd5d13d606ea0d0c3b83933585085bf0a497221dfbd3071dd9d4e489221a4123b32206feca74e6cb039aab8b1be2e714e78be4e1b93269b182e57c2f90345fe2522c21b6d10d1c6f8aee8cc629a8e12649aa4c3ff4db021c4d1081caa05b159b39a9776a7b82b3ecff08bf03fb7172528531da7ceb92c2e0c972cd52c61c02c30bc9042f5cf124bbfd9411b4f31a8e1cb364f9fe18280771955025768188ba936dc87b5e1d98d5ed6c67073cc4c624d4ee44de5452aba2bd9e54d9c35c32220a8f5e300313e469c3d1639161c5be729eaf9d9c024ffd633fcbf32d87fc3857032778f552883adc9cdf53294f859638fc69cfd8f67876c40af3137ebeca770d89cd6c2b0d100da5ffe281af21ed3189c7ad72752575dace38d4e1b7dd0862c26972859cdda6f5281a1006796fda9db4f93dc3a31582d40a71785d1eac3929686777cd15d439c6c2a5525ed6a471c37eb260d514a1948d25a31d3d651254305971c82279081a301949cae5f1105a7d3b0816e6f02dd1f57240953e6d6f14b565d117f189f7e74723d955a1ef97066338e4e22ca447ef95d96e9edf2be3158046973211c654b13e"}, + {"000000000000000000000000000000000000000000000000000000000000001e", "002a073b8dcc79649d3a0030f75b70dd814bccbb1e0bd1ab0aa61aee9fbc1f9577ef79333f63cb9d38040dbb3640bfdfbadb69afd0fa45623280c1a85842cd2a1bad10498b043504b513c94dd0e18614d457bb35035e70863f2e82cfd5a4baf9bafb046f6c951c11232b1f53a39e619fab80f827abd4f5b91aad2d3f97fe1483f9f04545f6d96c8467ae40f07a665093db6f4e6e11fed8b25ed4ed76f938be5868879e5a48d9a6200560394a696189457bb3e5e820bbf54f41827d894a2a6a822bac1b9edd18c9f43afe478e7548fc3fe11f1536c5c46f28473f8e89232deaa7fb0f01977fa0f71e382b29a75c2addb71d04c5b52ad84b4b085c699d0de248fcfe4394e02a37344c1d586776e82a9f6ff32df37c744731cd29bb3a6558efc2d932e16f98384d16916e713293e79ca32053e2ccc40e42087f1adc6a1c939e306f278c23a93e83cfc5675f6d28c61a90b40068d750f605f21ab0f643f2e32b956a0172168d4a42462e9119631ddf3a2c34ec007ae0d57694d51d4304f7a9515acd742b460ee1e4d86ed12d7a3537bd5d390ec466e61d20ab27b0856eb6b8700705ac9db7c30188f883a1042f8a62d25072b3304294a8584f379b287b9b2808d2ea7f62abb4a97be1713a2eae1df613047e4b493499de8f19e12316787853297f70cfe43309c4b459d253acf75eb8a0d23e1aa53d264e0d405d00a129f263e04d477349d6762347d7d398383f50291faed102614f5b1ac90086e632448f6b22b05af70a19940169350c1857e25a5a63b65605bea5467cb6d81d3fa16bce076ff59c1e4245e725497db636d7fe68068615f9caec3af1c344c1cc2197b346b12e1dde333eec9ea2fe1471eccbbc247ce739dd71c984b15284117b4cc90b4dadf1011e07560bf51dbebdd43bdbaa3ae0c31c7d16c0a946fce4914efdbbf5dda111d196037821ec8455d03360e1b0b5056b64f503a6d3bcaf18479349c373e2adcd7f02b6f7e4ede97fa07eb5f62120f499cdd8eab35356d4af31bb9e8531929ae92c23fcaf0b8a133b29f67a02a36095d8b17afbed4d6a044e08579fb82351f0926325e2e2c4fd2fba75a0b1160e656605953ff56e9b423fa17306270e17bbdc8026e9ae2bec6903774dc6149b92324942734978ee71422a83fa036edb458b919857b04f13bea69bda2028160aad487bd41de8f39da26dc32f0521cda8fce3b81fae19389979ef71ef0e13bc7afa3faa4f767619b01f524372a82b3371e56ee3137c5c567d4743d7987d2082573b185348c9da8c1c42fe6be82b3a673c65bf161af6f938941350da1b31ae7fa75654813e2dea351fe17dfa669a5ea5a1750229999528f998e7747959277f43fb4260182dc64764aba5d63197c0059e4037290c3696722cc2b3ba14143a69d412ce99ce95e2d704893127e96538cb72c2725ca5a0495a3fbf757b5e2969f4f66ccd9588b5bf8a3bd2f8a1db2ea89f7ef308cadc4e28b7c685f9f0545f6fe14d99631339c7063f493d0b75e1cc5393e6e884a5ebafc2b476ba350e0505a486222bafdbcc5e61ec7e90f52d11891dbf5e09f03ca310e52c7bf5c4537989dbe625673f9ccab90ff863d9392b6a9f6d6855d32cd56f768baf58b9e71d3746f1b72b077bbf465508e0b804b586b83c0dfa05b04e3886165ea96bde01cbccefe7096018abdc555ac4e4fb5ca9ec4bb31616a9035ec54f80a01d4c4b51ba149fe39cce0103593d370c76af63624e5c50d58f35b78bb6b7f27fd671893e7371806651e336cde70756efff8a44123d1563b1a1a914e2e5a99770e2be437c5680825a9a69933064a916fe50893571175056159c79865ff808cbc7b8e4e469f0e243879cded50c2644e73d64cbd4ee7f5692b07695a6838d547d421e"}, + {"000000000000000000000000000000000000000000000000000000000000002a", "01a78eb8b913c9b8dcc7a5c961cc0e264e6cd91f2c41639c1b6d6348d57e03745ea124da362df09b94661e3e57b470095dd2b32b537adca3caf285c1ba559e2a9745c7ae7457bdd46775d197c2b5fecf395ff4df039fd2ed9b8493897b5c551d1a4cd672172e19c9db1320b108cbca4ee1c67dc2bcb958e825434073143505e787d0a3b77429d04d71866e21e59d36ab3180964288c29219e52447e88544f56f3a5d35ae8bb4ea530ceb546411c3a88522b9c9e0bf7ea26b64d01cc04e112a3f90afe31ff99a7d12219ced01c682d31947b619b831fbab50fa5bbf1473b68577bf96981f7cd36935256d38241ac58d9e8904256ab43d171b063e41ab11fb84e252d38fef699e046fdd522de99357edae1044aa4ec8c793dd51799894d1015f9d05630f7a5ea11a41fff0189468d5c62a82affde529116d27dbcdb9292d15053796a0b96c2bc781f961f4cf6fd4bf6b100360ecfd9c8318d0b2a244ff8ff33fb7622fbedf8b0966df450491a0f95d892af03764f69acd765a82e50785e6ee4a2b66855f6082da60c051bcf901f0b8320f5dbfbd579fc639d464d24d7f60ee361dc4d7434b0a6eab599083e1656906a546b4b3e05efdb79e5b33205589cf94107553e28f04990eaacc9a35c813a0c6163f9fd26729d52f9cdee23bc0c391be365e9686bf18b3f50609d5ea299fbec58bdd7030ca021d12f23d072188563ad587bfcc43760519c5c971e70c0f85167782156d1dabf567ee81ea997f6dea2fc6d03f534a0c9c72bb61aea241ee4c732b79535348e8128bf35a1e9e75f651980bebfcb482812e482068f12aef56c5075081a054d90e993f5b33f4a276f2dd06fc778eb9199abfe5783501f3d529736202342a79d58570457321df5abec75cebffece754cc42bd93b2b1f1f8718d33a157cd47112c7ad16c83b07cbfbc2dd2d81e115201c31e74e999929994ff91bfd74a6bee3d767a9a601485d6e63de1a755862a661c08fe124a793959b08224c1ffa183e4454527b983990a7f2e35145a8bb84a3ba8b7a411b859e9da4e586d1ae4d2df0e65bb6eb60fe1057be0076663ed4ac35741a63c352ab2bd021e16846fe74e30955dbe53ba129752e2ae996e34fac01cc81f750d5ede81bcf1e580bf3b8e32ebb55f16c848c0b7df2d5acf97e95d57222542813b6d317ed1aa04e001602cb7b245ccedd2f1706f6c80c50dd125090f7533f8d9cd21b1d0da052130503705969c1c6f2b1a54de03f107e178c9a9d31f4d9a83b18610d348bd25818386c2718255c5f7e2a96247e45619bc5c58ed0bff40cb46d25eb8f3591143aea794e8e849723b771f4493699c0e6df8f0b4e4707aaf2e4f20183ddecc1833d4637d1ba632e57e9b1a7af20a4b56d3bfb6df18ccadbc9b19ee6b8cb7036c56779a010426992e09039398ab7f0a2491a19dc4497ca3451e3082fa29eb3fe1dc76d266c521b45b559893c75f1de5293ab962136a4c6c4d341641f6c161e0cf1256f8a076bfb1313511c401f1e285911ea6844af6c919f1847595272f0662a58b9e8eb3d0a7fc70845b114b35d297b318741d6b0b00c0da4f3f436ed29e692afdd3d9195fb2f209bb74fd7f0506e367adb9bee2f44e73ad74fdc1601c58311227c90e115927c5bd9dddb085b6a58ee05905075617774310e1134e8cde5fe8727b5feabe5c2e0ddb3f413de644d757db2353059e0472aa6d7896d110b77599083536bdd5d291ee337fa7d5a49c5c4b3e44445e1bd5df4469e44b450940e45aa700805da29a0c297f2e74cd98096feb645f8471e7d9c6c5b830cb3741f2f4434f0355485d792ff8dfe8c6533bf45a2723fe8b0bc209c32e52d7757128e679a640a0328e6024f62b62d5240a29f54016b26d3e6966a3067c615c"}, + {"0000000000000000000000000000000000000000000000000000000000000012", "011d015a14f2690baf98830bed249ba258a8df05d109bfa8bd23f09d09e04455205fff800d90ccf6692c24bc13aa4ed133a095c963acb8e12599ede17448db30a4a749fa53335fb7e39ab4f4de6276d03d7b529d072d5e8bcec6654ecc3570f75c4689ae3969bd4e59256ce7471a4af21071658338ebafc32264f7d6de750c1f3abd558fa044a3bfb6d8e24d18f2d60f9898e84518be66e358a9d1fb460600e272e685b19574c04d01f392baeacc38ca871fc2b1a05ffab1e21bbe8ef504d5d2c8705416135b0a4074402adb4c729b99184313a725321b89b02258ce33675ef39342da1e7cd2c52cbeb5448fed2ffb85fe64d154ad9819ae94197a1f1adfe96323205bcfa97f523a32a0362905b21eaa842cc432f1ab96e1daf444e4466b7ae8a291149bfa5d372b4c6b475b3be5cbca840e2ae85bd94d627292a447812cb1e55a7d0b8d3c74b2013829d5544c5834c302770c59e9d397cbd8dea50cf842874abf051b997d0377f46040682e0992a8d2bd97d0125a6fe71517d30f60ece6b5da9c67e886c55a9a77e2de24779d424b24618a757d11a40b1c8ed2af84667ddcbf57b6347a07b0b48cd598d00d8e8216a6f14ed7c5c55e131410425224dd04d53887595d0539adf027e22e97fd14680c63940f7e46afb157a2d5c824ff8e6b21a31b856215a2650aaea060777ed2754cafd4f9696e17d6ebef07a359535c15a3f5169bd5da82fda7eed90518cb0409798c8b03ad8c818e4680fac8227e304bfd0e66ef0f6d4f746c1a6895ac40d3920b3cdfe9797599133028c18bc84052b8693ccb746b2562fa61469016df330a8b60a07f0f2444cf55c34bff7854e93baf3776d5309da24a7053370ea1ddc324f8a916ff71b15fb3fc15421c74f74facd7a7539289827941b9ba4a5015b61d61410b020df13fe628d5d791623393236b597e52026bd762c2e304dd76b0162864e0b0eb097bde330a13bcd79cec45b17ec24715060458f51988753c7be9332de25d648f1c228024f55cfaf985e2b58df93bed43ba32cc8573739dd66b07a8ebeb8fddebb2b6e1680e49a90de7c7366ea024a4a882b1b4f55d101178ec1e20b7b6218d3da3d46404cd38b692d2229ebe666c1ce60afc014ecfa8851773a2c5c9f80a22bf5a1ae43a3dec4b5e0fe27ef79e555a0e4a4c12193e11276d073b386ddfb39209f8f8315d30d887f1648ef54575113e6f9ec4a3b815e436e2924e21d69d2b60f96abc09acd41f4c1f96a978a3f207dfbf419ae24fbaf1d0152ccc868f52cb5755e81af349e3171effe35e95450779caa4404dc5f1f87be459147bd52d5720d32ea75c66b49d12ed5d65d47b363c92cc4081cb6af42e4a2f85c37d6fa9ee91ee303391335989c2b28e3d6bae34c0cdec182295f7fb0a966f2bbab4baf499bfa4e70815cd14d8509c4f66698162a5e2e5a1483b93cd2556dd0cf58020804589ff8689fcf83d8a2191df242029513ff4c323d1ebeb11745a4336627dbbec4ea61c4d28c47f899ecf6104a765f69a5d6a5ac0a1197aaf12fa834d338f024b77f4f1abdbefcd1d78c7d3d9e21b18c5a6cf1eac851738da014fe0f4970c6d58933026217b3c61db6f97c5b64b199afd8656e5f49c7def59c43ade2beb9f2bc9d54744f3d1a2362571f4dbc40be45e76dbe014db44adc1cac2244dd8e9aa949dc46a211e5d21de661921a4c75e18d975c2af4b9b85ab10445cc46be0b4350fe888ba9c57287f2516dfbc5654041eb86f268a4f48f5996491f6f9e6c1c99cf2cc11b3d9e96dd59929e7fdf345df76b4897f8774237b1591c44a1c5792c999b221d9b21d2551139ab2809b1a875101140a519b73d652b626e3985147c27b97e31c81141f19f0ca7da58f13064c55ae55be4e4e2810"}, + {"000000000000000000000000000000000000000000000000000000000000001c", "002a15d84ac4b285cd4cb232bb21cdd14647168b3647cfde754c5aed135cdd9676a2edd69e6d4e1e3f870659ab8c360d287f7783925a02770cfb9341de3c764da705d0ac3838b5d94426918ad5bd968c783930ab0326fbc1404b634594a5875fb5cd97be57b1568bef2205cc4a591402ccab11b26a982ebda52f3aef6392096f834d61c82b513d2ce33a967de031e06b7c07ab0fc2af07af46654727f09119e0bfc9b8f82dac1a70095da0c82ddae3ab99afa1548d3b53a864e30f83a30cf44f083ad54ca51fe922919c6919b0a4c2c66ab7139e3b5c89c9bc70eb25483aec6af5ce94fc5654991a6acca963af9c278f2cb3ca0a776e0ae75a99e1ef0bc441df84d521f9b044a26c8d715f53b8df5fd36f255e6246bf98bedda9d362875b611ff8df889a96c61a0c30d93d9909e9d3e5b3f564d0fe6a701cdad6051b292ecfa137e5fbc74f483cf5cc6e0e5985932dae00314a152fd8153d8ad9f7f5d36fb986a43f97d64e2242fe7dcd64be29bb59447982f29feeaf0876a3134ab9466d22ae1269b6b4b65267d10b31f8d21669475be7650f231c625bc0588790f9f228be91b53ab8e603ab48d2295c1d3f20775106ddf617c5be8ef200ce0919be890c8cb49ac5f647e064c2ec9edc86d8e6f214027e33fa45dcb3c7dc0498f0ffb987dbfa9f0e763b145be787d3f056c2ee49e6c569ba2b6541bce9f40657f2d7e88b147f4fd1f14079a78b51149a6b1d3c3537e28d228d4eef3bb914823b3affcd22211de7740f444f8317eb557f9d24031c4daee7ce773ddabc0627981cd4a1f17a4790fca51b3b4b3585fa64b26c010ddee235ce1a1701636db71e3ae07dba8944f56987138fd1c84cd40c65597bb25d18bb3e1da945b6c7590e53c51ca191621bdebcc374b970faed9d5f99f28f160bf720a85ccacb103444a3b643f352c17cdb84a7019c6242ba40895f31d2711eff8cff493be2785b3b0631756d991079d0e143724f294a24310cf328f55607be72fb44e9a1b5a56472d7316b77533f415c7d1b28f0facc2adca90bb461f4b78ae5a702fcdf79ce550d6b48ce9b84e208c163a1748ccd4441799d70e6e8318e44c06e9e72a980e2e7ef907080924155780168374c7c0b7c4fd66883c235239a65b6b9aa15cdab1350057cb7f05673bb16bad852b9d4fcd27e35d82f8b02c79b727f8b1edd51f5b2c0497531322e183c51da298df3e95ff06d17d8ff23fe654350ad2eada9f06812f396562c46e4f9aca6e383435aea68fbceec2eff2e9f043b82e47bb9e5ca461cfcf919c9ddd39fac4f0518912f292cd5f9a1c8f10b1c4ef684e6cd14f53428a07fcd80cb82ef8f2d65118aef8b8dcfadf25cdf0961da9c9d436e1be81c96bf41683221b56155feab1ff944821f32b27bee2bc72b1578be7231dcbde777038e4368a65094e2ab9ae33935e1f20a1472d91ebd27e04ed4c3d5fa27751b163f17ca7dad97101491d2097569da0f7180f5fa77f35dbbeca208db51f863a81020d8a77ae4c83189517119f4b34f79326f73367f044656996f53287108f9849f5963b5ed79c3b95121246434d1fed8fff6d53ad7e26352ba6fc97bfe844b0d65b74e102735c57f71016e185cadc252717800292840a9a3404ce2fead4742f680c854b75b23db114e0615c318a9dba1618e3a22e93d2c19f3681cde8b2e1bdfdbb78c4cfc91336b844f5dd148cf061f99e45807469b8ea2f5d785bf8bf2ec1c9a6065a0365f5223162c649167227e61ee1e55dd4f37fc2a2947d8ffd40778a7d0945046d8f63b14160dea0106f28e37a4d82618bb47d69e166d9caf4332f2501220e6801e0d171937354e31f46093be96d9105660570ad403988bb62f941dfb44dd6beb6bfffacf507fe77bcba4ff4740"}, + {"0000000000000000000000000000000000000000000000000000000000000004", "002cfe327783b189176983eacf7ecc0576496d51c52b207a635497197bcae5c67f9f6af0f6bbb41a3a4503ecad3faa9aed95171820b7b478287e17a27379c10eb58395b9222fe52235f16a15df7a5e0129b10c410ea72552386a3f3ba893c2f2d658118d13ea890ad116ad6d71f6f29fdbabbf21bbd9a10dd13ade5f522318b9e1fac6a47485c1f412c0bab123c4ecee9af2be21f53c62578bdb3cda56582941452f9e108ebbb19a00b1d4b79c816d24439225258c7a97a1858d7905653144fe52f39739b7296334898dd377055fa6d5ce0f247ef4db4e6dcba1c5f374862e747b62563896544327643a1ba16b6f8595f87774fdf07dfb5d89dbf7a602cf547e18ec0c01a2cdd19adbe4c097238bdbd28902f377e4cf846109964841722c4110a2c904b6557e0ef914bf1389f7619f54012d9332b68d027a15107312f587b1713e7c7bf78e62925542b135fead34d04b00b70c9b09488433a516320aa9ffa670e29279ff9b01765d289f06b5e7cf6082130df175363fd6fc18dd09355f1c29e812c1ceeef1c59ff9b16d016915930e0b91f96dcf504b628f69c20b2d6e0920e0d5e87ac403b3941f4b90c15789c5f3bcbc63b7d771821c580f2440f96d6e6752e18d19b5827db18379b771bd874d115b4b82e0134ea57d17a545b4462867520ddaa0c5153da3c8745626bdddebf1b14c305f1d15a77e5d7001fcedb5530f1682ce14408918f08a2c492c5625f826e076f2089432d8d962d9ef01ef43a6eabe585f68040fe904175243dfb94526e69d4da28dc3aa753eda04d2ef39bd1a7db3194dd48a74539b7b1578392d020c4243eaa8a98c576e3db4eaa6da44d2967e5cfd25550507905c24e6afaed72a053e743f0b641c1bd8c6179437d8dce365d9c8de31de80b9fa51e77bcfb68325ec7bae88542af0d3587517c83aa8a19c1f2f781a007ba45234e03c7f2c6d307032131978f2c52e1ad806c326ad469fe77b9478c59ed335fcb19369d58847215a575208caf69d2923f3fd975b2bfb45a67f36a75380f594f75bc3a5f7e955b6f855034177accf9e53020f984b3ec3038e24ea7473c6bab9da52c0fe300015952ec995d73f350cad4344e7696490d582762ff10bab260ed49bf184fb0262f59b6fad66610bba42010e899ba153d44e8b1bc4330991bd4cc96f660d215303e203ed51c1304f6543a2541fb31448b5bcec04481437e57b9d9a3765f7df022939cd54baa7b45982af0ac576d9b88e9a29689215566c366d5720635beab82e5cc335eded78856f6d57feb6758a8ea940df1e31042a1631524e33127ea6b0d5ca0cb8eaffffde750a2afbb2e5571e3a9308755692113b8dfda4c133a94d0bf94557e4624303b72554afccf151a5ad8fb923410ceabf24ad21944dbd6be4be8f452d521a8ad3811a00a75090eb0fb651c71fc83d05cd60d2c295fb835d1c3099c535118ea93868b3bd1bbdc36a582d34e41c081779a8dd82dfd52d6ff2616e76b680f62e7b8e8437916db69c1745c3c7b754ed2a49532556d1d16eb00a67a9c33a5c66611847975289e58f01e7330fb94715da2cc05a8bc7a4c386d379eac649b598f7376e92173c12cb32670039640a659abe41b4d9fa047ad1d0396bf31424b3383fe1f4167cacb91b65ba749ee71402db419d224eab34c93e706b689dce6cc7630fdc5844ebffc1f6e5aed17e62062bacf1803eae115ee21d034f968026d68fab97ce003ad73d83ae4f12fdf8056df2d7c0cd6657e7d90e1884cd5d7dc74775bab7bc121066525c362185ef3fc2adbadf2da561624d260b42639ff88b6ab227d0904594e33c79d6c7a137ccaa1c29d1de4eece0a3b8aec41fa94b980920abd37c052785afd287132e9d35890b808cf2d98b06521c02d6"}, + {"000000000000000000000000000000000000000000000000000000000000002a", "005c6b1abf823d2f076a133d0cfbd2e11d38dc6fe16d4c1ebb47a9b0e978f15a61dedf44433d5a9afd600ae2bddc6ec8d53df3ee22ffdc1dca554ffd76470123c24e8823330ac5e52d84257ab602c9b9746dd37d03cca08399564e4bcd8d2375f36bce27c45fde3ad928781d6eb68f7814f5a44633f54d0f65c844f28bc2137800c75e5bfbf33fe8c3371ca1030ee46adb897c14f8cee46512e795fe97449fa9fa361738e45d1993005dfd878994585bd7579094647ff07662f0f637ab548a84eebfe93f1f74f447053de917aad576fdc5a5093bcba4edd62dfb73f3a130bcbc736730f25e29171e702acbddcc249ef6ce0245e5cf98dd150cbb095104b0935c729480179ad2639595ced0857d92ba26ff1d4dcf9bef084279dd4db46d50b70b8ae8279dac0d31f34fb56614e69d87c2c3d745ec764d820393b6694894b562095cde31344b74b6f7c1b559f3c7d9292c0439a8a4a7c7f5649c5c74a246ccf6b92944fcc502a35e6d3e1ce9b405930e9a60545612c2b17738e0920ddb02cfaa4d36a89feb6127c99e4c7a36abf8dff64001be053198cd41b565760ca0e59412868d750cb60ef76cc9e070018fcd81d6c0a4c0876b02321920bb146b6917e145bb92a841031dc9a3632d0b4a2c8650221debb309e25c3b35d4234802206f3e8d7c5f4e92318ca674c2d3f5dcb55e5577c3c2f70d657ead664305368de07f42dfc456ec11d3e1d1bd6d2cd6ae24480c8ec71b89b6e35dd7a3f17d759752e1880df464e90daa62ba96c6f10c7019c2fbe4e33885445ad7c96214b30e319356004bcc3721b1ab2e952f1c02bdf6e60d9d412f8b049042e54382c6b27d97c0cb398e871f1092de545261a4292b33fa0adffff762ee30fa855c1d99ded6c859c8736866b2c2fc27a9fa581e58e3694cf985af689470aae03c0b7266f7ccc781f2fd391102f4e1b4b7cb7bae8001b403ed2a9a914244f4c1dc4659048123b76895fe6ac95af7599d5eb024ff80fa137fb610304fa26f9ee5316fa02ded2e6c5814194721952460b62bfceff3a3b68c49f8ab3e999196cc3122e9f796ed1ad4dd218fb79553bdcd722dfaf2c8d230a05795361cdbd954a1c456f6a877da0abedb0b5f39a6bc6d38935eaf16cb770835e5f0829955b4cc0b5c7becd6539abe6cdebaf605d6581f4df06476483c0531fccbd24da096ed6e61d87e3b1010b6f7aab01c16431fc18c52cb3db7d0a550f36245aa78babf89592b1e7a1afe113621c8dcf9978cfee7db93539cb40f3f080ea4f0f4a8b9c5d3b53ccbbab189b7251f75a90f175f0502615687870b0396f5aa8af59aadbedb861c8387dfca48b63e75b0b4667de906b637a47a8dc812b99bf12e238ddba490b3528434ec7e3de63cc2fb25fd2cad49dc46df3d4526d7e1fb8a52e36c3fb72e074d4f853ed26a9eae39720f5f9f73054dc253515e2eac0e688bd8cca2f76c55fb44f9858a013edbd55509f9ec940b59170b3bd17262cbf72e811ebe6dab4527aed9ab1aeae32dea4bf5756e6c31265f59930b3a08a97b6783cc9562e85a917d5b711fd87fde5f679a11b66d0bf1de82c199bd337647c4c2f34be93ab6830bf50085ea439abcae35e69deebd61fa4f77d2f3c911d0e195b4c584ef5c2ab1ab33afb71c7e00bfa6bd0936e0d5aa971d672845236ce9371865c84438a0d82feb443a0d52995f0459b4c41bc7c9efc6557fa1cd0fa0ddab0fc9344be15c830a5723d78f48b7fabb061aa78a24168824f9d3e3e3ea1ccc338f11c77e2c5b0a455635dedf9edf67dc48b51456a392bf7b56ba9250140c278db01d1de600f55cd25f4e6ddbe773bc0811f31c390e1f1dd727fe93db47af463d25f47366105d5e26396066a1955ef9971462e28bcde991f81347"}, + {"000000000000000000000000000000000000000000000000000000000000002b", "0009204c89477d93d9962067dcfb49203d1be68b85404afd76bbede261ee51158cb3f8b775770cecfa160fa0aee9052005ddac9931eb1f5b084d17c42e24ce10d131c68a0618e152f323fa4c49bd56420132231b02389d7a231ea7bf68d6a077581cc6914b6e2df34c3bdad5f7afeadd5b9daafa1bf366c6e34c5d1e1f1b0ef9aa63b74fea85d969019c8529a8cd3d2d11d8f5145c22322aa406039d2f514ff15d61bb25b43cfc880a5c6d3f960ba6848cd334c2804a8666e2803b61db11ee2520ea060c672476c50851318f36ba737dafbe0deb4cd75f0e9b1ea94a06982db73139e33b5e64e65b3cf347d55f49497d454610c13b6e99d2c0f236830f2c7665e8863c75a145b4396074685eda645aa8a012d5c5166771a29bfe3d030abd18d24d1a7b5faa4d1135445a52ed2b778246145df7e24126216c3ff7f62a00c522b40f7570901f94fe28c272c25f8e1f525f03979a68f4cd87b926d3531a55507bea128ed9e43c0b986313db60f7816fb0c548786e51dd89dab41b931bc61ec879c893f3e65e784ca46b640b78215d9ea2569dfb85eae33f37f5e3256fe7745b5eb9fcf90f4b07d527c2337c9b57fa6ca4304027f8426859571827391dfe145a7a883bf57ba3db594977e98482dc17501ad1256f21477c3e7f52d85417f31d72a5f398785934637ae165218df5d72d24e242fcb4ceb68c778aeb083b707adea5956da4bd0282e7c4a883a03a5d9c7c1f60ed36d855b366c81c024733e4b0854ef3ecd3630e90a9d81b331d8b9f6b13a52c41d61301a55b256153d5d47dfcd5f7a6ed56c7745d69156ed9c21d3ad81705ce161d942216cc8ab20916d965d9c023f5c62434f604dea694bb76fcd775562b6c0acd851dd3093818429da2874fb47d8f7fe9cc6ff20ba31d9a3b67a12e34134bd1a7e7c9f421f36d3f4f593deedbdad8f003ea2cd994d241a0f65061f1cffa3a83289c7b2ef90f911d58b91828bcf0a60570273b1e2182e8f03bfe18170fee6fccaf00ed77b494b0d8d29252d7b750e129520735820a6e0b148fbb5ce6fc894f75ea9f894e06db7cd6de4e6bddad06c27c9ef2c2f948a12f647e4ec9b49f6d2884378e0d1595ece7debaaa91955fd02a0676648da8b3b963ca646e8be98435a15672cf963e0f3bfbb6137b26efa097c14575fe8a0fbb1e6ab4089cf5e30d1d76314fb033748eeca1da11de11e8620b71288b2a2b88a5fe5e122258c1c429664edb691d29fa2f3928df9bd37da6736b6cf3db528ad7dfad353d16343549949bb7a9e4f46538d27f3a2378fec85b08ccabdc205e828d3376028c46a9fec6a3cbbda5b23026c1a39b998f67e952b5a6ad3e95aa149757e56b0f123171300a2b93a7b8c3f990d394cf9af11e58c231a3ea3b60cf4c757eadf765126ed11ad107be304404c3d3cca4664c4338dc623ba633f44cbe3d33decf073da4f1e52d93c7ad49d43f4b5339be1e4a7b26511645066bdad587c2f516f38ce7b16a15a74c8e7ebb313e64f630966a48d769b68ab8e860535a645efc6f0507a7e10160d22f25a4470a28fccf4af6bd5e93a518bc44bb370c208c9dcd67b4f1717ef62bb238ad171363e2f59a854ff6923723243541405b1a85daf90830bba68aeb9a9131159d468d335660e6962e973eb409b2f602abd2a17df76f42e29e759262d1eed8f7d62abe170234e12e07e095d49363628cc5788e353d020f40d210ecf6b6c5d6c98234c27fbfd9a62b3cb31c25259aa35e91789b14d2159484dc869259ecd5f6d80bde69799b897ee6a52f64b221e19a1344ba5c1dbe2ed95ad3e9124eb0a2e684b8a4fad7f1eb8c75b6d411671d2cb1a1985d1944913bc6fe47220ab2740f0144be1e7369913dd309dac63959f239afeb60dfbb05"}, + {"000000000000000000000000000000000000000000000000000000000000001e", "001fe03e06ec6f9bdc9d94d1bb59c48b25609f5bc1181933b89d06aa77a36564b47936922e9d7e3d3b01010d6506b10da1e1315f22746160943a21c55d310c5046937c88d86ac7357255b126e3ced3c3affec02f1cc7c0ed2ea8ce51eca353cab9a1c3960182f3b9cd32eded346596e08308c2c672febc67266be6f811db2a0b7e7934187efdfa90c437a9a44bc5e823bea50e3777e52890a60c9d9bf14b9322fe4a979e2d1e3ca3084c9b01c2613647430516e099d03dc7640c5dd5d65890d7ad48d77a80f2c177ec43c2e56bba315e9a243d244a9f1aa7da716612eb487b5ef9e7becffe15e5412f0f3a0b9c23c3eb76143df4ee5b45c1811072b309b31f622e476bfde0c4b6b1fee9474dcdbbb16b0953016b94e856c1b7001e966121b9d29a7f1c542b8e199b7c692f5fd5c3d86bc29000ce99cea04bfb8178247d2e4027e2ca171c1822daf198a78233115e7bb8002e19a4b35e44053a9c41c65835970e2066d23ccd1b5cff8bf5f6dd91f00327f8fe5f6502fb94bb315b31c0b425c9147c45de60f521134f7a697c217d528363b8dfd88bf54a97ee62b9e7d0e38402b8d07c671b034ce9c7978178ef27b6e0532cb28b00836a0d0afb1dc51467e3eb837de9d12a10baed38d2f2569986aa23f8abbd1de4af0f33f33752f0439015f2ff35354a2f5315e31e371527e6e3871e9961a469dee292f87900f020d73f8f6be5e9c62282f031b833875d9c78ba03ebdcfab92315bf789924185b73336113fa7d78c0022b3d0e5d02a071f83345046e5a308a88b39f09aa429ab7534d64ec9b791244e18edbe052b08258c82301683659cb9f400fd5d7d2818367b46d94ec5ed7090884dc421459b8694107d512654f8c5f6be79fafe011f1e5b95df47a5dd58eb5d533eec925fc20d2d8042095f29cbb8c1ddd90cf0344b965db0aa490d9731100989efb644c899d4eeeb233aee1794e32d4b8e6f477f2ae9d7beb8177bca55989de72aca2b953773db823bacb506e4e72dfc477fcd7fe716adb46e43c74f128a1fc0a2b4abc84a32e68786d5030bef5531dc1af0d6c33c0c38d30e18ec81288a4613e4d8b29947fce28149d3a3369afd3a24d42eb49d9c1b1db87b8ac0a124639b998d865b13451bacc11ff9ed79b357d1e29237bfa87952ac5b3b51228149c62ec021c6c5845210699a663150be2179ac07557873d55beba5196c8b63678d380291bad095c6f13e50db908f2f9dcb934d60d4edbd28de7fe477c334582053f6c59715d34e42f2f649cf4dace76e8799658349be59a5b2e1159a173135e9b86fc661ca73274c237892350e1e8bcdd783036d18756d5cdc533863c873b737b6fc5f7a2f16c731a3b7b198972707ff6f3e9f7e05de91acb1ebb171029aa55e04e917f5dd8f65413f4ea78952a0fb6e5c402f65083054878b9bb762360e2fd3a7ebb111d578d0f5a2ce7e0e06cc1f884d296b1d10184ac095c234d1493bc03bf09ed19e15e12fd946a53b61ee0581b6f22d57547998d75d31b98b24d1ec325d60d63968e8c0a334c25a1a49f2190040a1177f91cd7b3631e7fd85e89b4cbce2b649b6b76ee9635fb2b37d2009efc3128abde126c655f8de0b8f50a675fdcfdd6607c1e6765776c41819c039fc64c59fcc56810a2fd5999c3eb03b17a2db242f3b75b37342a00f122b67c8c742466057b37ec59031d7cedb6b334c36ae998cd58d2cc740cc2fd49c6c7d78d98b8f4f85635fe2e6a6ed7f1da16db4135cad1d7de9e59f96152fb127e7ade1f8f52173afc29a1464abfeb5ac751e179174dddf9d6f2ef1bb4694071575b37f3ce867666cc478e5aa7160c3633b48383ee104613c2a265c8136e6ab1cec6501e613896aef8854effaaf35f251d743eef5602c154045b"}, + {"0000000000000000000000000000000000000000000000000000000000000027", "00133ccd04947c31668e6400c82c4f813ce7fed7a0066beb20ffb3b349c545b0cf5edc9b709bf82d195a0e490aeebdce000b760982bbc59bc4bd53e00af3832338f9c1bb505f7934acb65539dc193dabd2bd86c10e005b283272b4cfac9098f33cfbf78e76d15f355f107b2553731a48bf8cfd347c814cb2b16f8b8e4a312175d784a924e49f973e5269d842797d6e970f31e336ed4f1f302019b9b8b683abfee38d68ebf672ac7e0536e673c212876d1ed046168cca5f91c7cebd21b9278b75b10a2fd7ab94e983ce92dcc2a95c27cd65d222740ca32e5866b3ff72b39aa27254b131471e4df62ef91c9d238ccd679c2c440d5c3762a92ff611bfde0cd0a9bfdb50f8b1524f00ce634acc5899528d43282c138d9bfecbed7c859a93a705407ec52973fb56201879135d7bc6a633fc72621115fee78d84bb6cf6ae1afb63bc565f5bf9591064831cc343c9363339183b00dbc25c1c9376057c52214653f57c797575b790a5139a3240fd112b996be491c5905395af4dff5e581b0e30e8d1daa569f35ba8397d26f515c275be18fa130fdc9acf114aa15e6b99c68e9dbc8072df55ddfb14051c3054eca2e0f9ff356287306066ba7b7c7bff54072113b8f685c7ca833590b31e88becda028b3baf7055f40f4086bb22573c851af0ab4dc0b6e861f8cf41120cac7d90abe5b762cb2d0ad3c1ce6d6151eef03044cf6e570a452fbeb5e61c18ae0b57da3c115efa10471991fcbcb278f6afd04e0a0b5cb03764adce7a5046da1addea8278bc98f92b2d697c1dd813c77644a240ef55f6049249b02aa23cccf7e74bf660a5cfa760589b733921e9c1d79dd019b0e42ce04f9eead06c0162d0f500b46782f936975827ae230b17680f6f9b013d69416d5dec9efba1545ec093aaa799b52d04ea738ac9aac5b9080ef77bd380351f66306c3b3975b11004445418e60a6151b12c652c7ec80bdaad25ab27d05eb3e6bafb19793f982f4119a6f094dbe23d9b3761219034db697245ae9522574cfe8e6bd60c97b76181a218bb022cc02d19771c3f39fa24c85a4de3059761a58259f88d407b338092506e65c4b1e46d0f61f5b2bf26d215c63a075cf9fc2f41e6521b3b7ce9f705a241f95b2671f35fd50273a8127eb196aa4857f8e5f4ccf52a46b9712c6ba0dc789945ab56f1abf39a9ff0516fc3a3747139898f6e0c0d8bfe2baaec53dba8b1e2053db544d78e945a203391bfd326966d3302755061f4c2424119ff2fd13e2d27c2177c102c5ae49201ca6ba7748bbc481fd09a675d7529f8f63311d916c0a5d37f5db0464f26ce576cd735b60023c5c95a088203fda3814172855ed6433045847e292faee5d739f2a024c9f3e62b511400528d1c473c377aab0be5c9f3a571a33968fe207ed59e687cf6c7ce2d7121e85b906c92fd6d3a2fe833e5d50c97307782d8c8d8e1d570c6af54f6106e3b6f69d353c09ee762b8eb13eb53e221a43686799800765fde610cecd60999307900ba04db51331d8f5287be42689c2a3e583e72a55bce83e0cc4c4ad0c9b79a50ed705437d6a90a1d118b4b1c31a245937b9246b35c81f51f8e272de616821b3977a10a93e68ed5500e15741c220cfa3c30abcf6db874a2bd8945ca2a49283289a5585c0c858fb7a741ffe2f1938e3887d50e5872c09b39569d7bbe9f58d7656b719463dbc310f20e2e03172df745fdbca70a8df60731a465d80e41882f526b691a6ed106bfcf44315faec375455682bddc743af3f55259b63012998691f6fcf19bbd93fdfa51a512f6e3c0bc36b4fd303509af8e41fe1ebc179640e77214427fa76f4a04ab6ecb8fcaa43fb4e7f61994d1de7a4d65a35dcfb2dc6063b756d5db3aff6b17050a3a4d906e77e652b96ccde3ae343"}, + {"0000000000000000000000000000000000000000000000000000000000000009", "0010f226955967c142c9002d59715850725dcf2808045115f4c3cc075ccdaca17a6af31d48e78638df440114a674e5c2d8e6f6dd00d7cd35924769a65c776206f432a74be27a77b54b6148d89a814fb40eff72b51a714604d11cd35977242ac410764752eed8183a8e1b1a131ab4559b05e062b6416dd9d1b9de54bd728f1fdd5e7baa23eb1fb37b837792e6f3721d063588a724203687da5a524bce8543c445ed58ef07da3ea307024a771edbdd1aaba652c47e9325b42559911e97264255d2f99fd1d1c6b1a1b6a3d0512ae9d27733eb230300c87549c75b7c695577ffc74ebf460b09b05a95100f7a270f2569c994f6b2e828d53d3dd6eb50ea94097e851127792ccfdf8983e8a9adb76d0add6a8ff06bb3066a9b369d01cd3067dc54ec8e5e4a157cd91c0c6cab3c4edd3d5afd5e146c77ed6b42f65a78d6872d9d9cd844dac1dbc2b5a72776e2297f3a697be969026ae90292b347c9cc9de3ec4a2f19661387dadf660354ef6c711fd7b12ac9737b1bffd5ece85119171e170584e39020e1178a7d421f8ba1619100ceb17c6120be016702983287b15a7b14dbe510ead7935a694a0a7d2227ca9262c8c38c32e2c09ec096d8b6d9f72f17b1e94736e29d114137540da3fc6f91719e740c2414917f592bc68cfb0e7c2481dd3a484922516a502126b259b9b60be907688ba511dbdfaeed497e0ff8fb12cc31130951af92c998937412d4485abb61d6911e3a8313e66c6dcad7cc1f64d8e32c295ed2565fa3e2155ea65ded9b6245de31d72db063826e459b14e9501bcf141ac8e4b8113f9663997ce2f7995d40effa841eb59d157df7231fe2e161ec6356b368a78ad78ddd1ebec763c27245a3f8aca578f178f985fefdf2d94b285e0cc54d95f6291eec731708ba8e13ce173e9a383c1d421cec5353430010d6be4ac5707382c85d1d310172d6d1fa5507b6ba30da4ca15ef1bf36ea5becb83162f44835977bdfda8604b8ee63b7267ddcf9264c2817231987ee19637a6a0500b032db319f446f1b4e2a2c9de7a93a74b7ebb979e3ade05a5ef5235e5a160266587cab0e0e627b0da41de059c3f10fac15f2182173672e0ff1308bf30193528cf04650f198f80e93063fb1e971bdd541fbe8742681f41fd917cff28f2306684615108cbba3589f93787ec6c52ab3d5fe984603c54db5b3aa60e5d47774fc0fffeffed39d3939872b770f86f80dfde8f13a740a41ef93b21d5adae18f05473e888c6dabe9cc93048dd8ad6b6a3525f209721b4dd498585da3496cb0651cc5cd0d057d3fbc1d8f04c4a71de9521f81e84d69b48ffc9cc6acc8fb0d5a14dc9b16cc32e89bdd91a564dc762a21859476ea020544bc8a1619e3bf2399f19773f5c404bc5ef1ae9b31e3940ae4cfb2834fde27f69ced8c6f32611efe82047fd31cb3867adcc97090b6507298c61cbc36902253431e0512deb6cb6ba6f64a4bf458962e79b561e2075578bd6953bb1a9ff9b360fbc4704da1c4fc40970ccd1f0938c538b4f9b343e2582414c232b1975ce706ba327dfa1c9ed9830258b64d6d5dc68da3774f391c6ddb6245eec1019963a48742eda33233eb7dfbc40dc67c813f5a1e5d482e669637c42d9e580a7eadb65d6ac5ff2f20b755c2cc68625465b6528ce21ecf9c04963078b75f5a956e021cab7cf176d7574f5b961408d416af1b47d879956ff36e064d00965cb35980ce0e045dbadbc9673c5c5b118a233403b16d1d76904836c0c67089d16e06b03548d7477b7e52ab395e94e6137881d733a4ec6fec6037882d7f8b3df878b0ff7f14d39bb32f328647fcdb45baa9642369e43ebe8f75395757bd05550830b859942280fc2a154a9a9887a8519f86cc7da6a7333bb405ad60df05be72ef15ea03"}, + {"000000000000000000000000000000000000000000000000000000000000001e", "001eb0e622138420f2e53421b0db346dc47b9f2e1815583e6ce56768a53ecf55840a2dfcb57015721f3a0168addb6247716d3a84b06a9798a9006ff6af5f5614384a6984893338fa6c35fc207313caa671ddfd300948a1503211f5fdf3e455f7994f0a9f2d195df45f1b9f0260f2a0e6b96c23a50ff4489d7352349e0c82128ff7ffac44d7dab88da2b048e1972193b50f1284329252fbd8d19c63a35ae35542f9af3d45e6ece12c07e113ebc60ca634efd062ee3fd29d2d32a752db4008be47944ed431b9991307d7f57686f600a4b2b05516bdcc8cc6ca919682b7821497ce2b195afeb129af292fc14b6317fbc79be1d3d2a468ba795499cf32ba0b72a223bcc9f7789dc8a4f7d17f05ba2d71bda4ff48ac33a647e772959d483522d3f610be0e0efeb2fa0e848a3564c9ab393a549208f8f99455f00ab554c225b44519de512b0f5ac4237e70309515363cd1ebe3004a6954a86d5725c4d8533ba3b05348d4da53268b3055ab35065ab521183a63f69dade856ea69bc566618de3eab0a1f3127bfe2f3c973d761f55362379c9422a8d2f8e64fe2cfb3f81251a1ddb93938f76a8e9c04d0c2b72b07e3cfc7b674dc1ecc83d74b241c957139bc63d3ba22df354d00e73cbc595ea2550695b7860bfa16037a5ad224d70bf75868c09a82a716fd8bf01660d44ec4d6ca28e11214a8fd431d35af621bc9e002763a8fb552e4c9f56ec1d2e2929ea0fa8f0dfafb176e0775b58a4ed45c12470daeec60afb0d3feaf3c058e1bf9bf03a57938cda0a2fb6dc5ccd4310faa6113ddc5b618d1d0e1e785d301d968af6edbef99158a0642af938a5be0b91bff0983c2dc86076ae89effad0a6639e3b91f0b59b68e141d0c56942e2ac03fabe80bbdb9d8704aa2ca728331ec437a8de70fca38c470402fa7fab59c9993148f2b61f7f43296fcab9ccb69002fc7d67dc4e3fb566730f77ca2ee358f439a373b6073efd689652f31409da68963b5586da4b77bd0f2308b51da0d97c5433afc63196fb8e2c16420980f6062661d7f9aa24d5f2c9db97f0f682f929b73bbd5290aa768af2ec4fc91c9eac2a6246dcb54b2c4b73a7f18206ce84b69fde3c5e0319a41f93b44fdc34b211d18745e275ce4ff77c647c410eec7881246353c64052ad91508420e543b4b06e3c76d450bdd0d7eb2268804c06b54a00fbc0d0f6080a876b2e40e49eebd1fd60840ca1a6e120bbd57a4a23a65e75f38e0635ea7e70588bd2e0f832455f55721dd33b65a5ec212b92bba1cc1fe274091266df368a532434ae5da596d7f9b320d77fd60cc5e06a1aa37e4be005c49dab0b73ad80f33d485f7d3e34cabab23b36056e4b25e64dd7661b9220fdd7286d6270d05b3a4414b6f34723e687fbb182242cd72dd62f795e147125ee9d390d546f0d913d9015b31b0dcc90babb4bdb17fcfd0f71a51287713bd0264d59588df82e35a3f929c1325b00770b51e95e601ab0f6b3a4e20c6df8c14ab2acac062846a7784a004597af1424d5dadd667127e9e1e0a613e0c8b0a171756f2ec6820ae47eebce1d0c324ae32d5f8bd0e481c88fad65661145d2606720e32d0407ea284993e033346928ee6d7c08de89dc484896ac1da3867f8fa3a3ec6bb282da8827792f1d7a95fd3861b5559dbb2b4048495462f0506ff3fb4a29dd5f6a4d273013b6a99257cfb4553387513fb6cb78d643d3c666f9af49927096dbb9b574d3b9f223813738d6c4750f079fe8ec81dbb1c9be5083e23149b26ae9259bd1e61ba7fa3320e4610a4ef44c27735a76a8927d568e34e62bece1631468af478afc549c196c39dadafbd81f78e7036ee1041bef75fd8fa772cf2c80b7264e48731b9fd00425f522d80d719c2e54e677c27a8fc461756333c88ae"}, + {"000000000000000000000000000000000000000000000000000000000000002d", "00acbe964492304d6d1ab0c81275a2e2256bdb89cf2faf56a3cd9a75e2f02664c3a4f152d3316e3eb71b05f6867ce1c77ba37826860481f82939dc33f3b2011066509f440c3769c544d63fe2770342fb255fd16c103e779ce1aa7845672b357d1c2d67779d5fbdf10e3f46f6351b600a41dc333593326dd761ca01ddae0a1d57f4cfc9983787967a13fa17bc121dd3629eade5346de2eb0ceb426de5c314e3d95a50896cabb0ce0b00c6c3f2dd913f212e7576e0ffd94b8e39d17f4d211e3d374e0625235dbdeea5e89c79d046f2fc1961b50443f824c8175522fc80f0c4edf45811177fccbd122e8ede51ddcf40e9a156568141c16d0f70eb5bf90c09ba2a31ef0b72809eef63b1ee5ca001bed3f975160a4caa60939ca37d91f9a1b2a72bd66ee4b69cfa3323074336320ec151e77fd324a46dd29e5c5ed34dbf23ff6dd14c4913f6b47c530f04f6bc54da11392727051033702191cf72e0aa1091e2b4167e0c3336a9673d5762a3196d0d33ef10293b5dd266929458b827790f6467f641e009afe88c2173a2ed498240c7fe0e532edc86dca6a1e441461ba3b5b9bd1025e40dfea57105e3febab491a739154742b61462a942d6579e942709b14abe2788e50c7a255395a83a11dd56801c9c070d67c21fd112bca6b936c63298e77e27844dbda5b423062bb6b80a5618a92d82ed44d83bcde4f0bff8d0060124e0ec2630c9f6b0d563423e82c57eff6d699308f841dcedcd3bd6c2b372052518e1688b4b88376810aba61345574d73968db3962fc229da32fb17d37c311d7a818dd9f4793b4fe486ca710242cdcdfde0560c8d8565c950a0e1d809e105501ca98dec9cb895b117bb549521cb8d756f71a3c165aa1c7d13e2dcd64810226baa2607ff4f704582b4e89c654e227ad1ef4228e72d0020132dc2c5be68b0944ac91633f5dcab6d0230d2d6395b86ef66cb415943ea6e3a2371336f9e38aba787f4671bebcf43a4bf3039b8fdab17ceb9801055e48cf8dc0b68ff287496ba31d77e52bf5d44f726898fc8254abd9f724fd417f13f3bb62c3997a5c302c3541ec98a1aad7668c3171c3b7d7e80199bd5610900bb740b4d195d2b95d757785ef04656c9d30fa60758e8f5fba86a258eadf5a96f5e43767a805bcc12464327e5565b038981acc8076c59887256f97585c6064edc6b1f884d76c63d14b07843a15e18d8b7a70b0d560d8fe064f493567166d10f50eb96060d96eb8c092552def3c48ec967a47351f3456fb0f5fe15912828aebacedb5d5b0510920aee9efaf10304b0d965ff06c3afb6e2551d11fa5df5f58bcd1c99ac5cb1388d2122a3f115917108a343a24875eb1e0aac02dca4bb097daa2706cf7dc97e047233519b4899b284f243dd342f42ce54db65cdd34134e9bdad523998d2f4f9c6036a7afd7f589bb7b9c1d0924ed1c47881c4ca4457079940b70218846786d6a2835a67b7dd859279c2930d5d9ef79a8b5233ada9c2392cbabbc91352f98ab223faf5d8e652d570dcdb06e7ffc0f9e261c55ec50b0dbdaffc400d2ed34c9a58c482653e22c79ebde7bd5dd0f4f7549cc7a9c919864574c8147db83dde3920167a0dc680756667c7ce018c5eba3f0d34ff2fd25923d09c68dd6bfdcf7e716409e1b3cc3d981fb1048f0b4e1dcc73986a77161ce2e7d1e2c9c1f88857144f0b91f50797453ba440d9254ceb530c7620081248db21d3fd8f126d358f7a3d83653aa52925de1e3e135244eb7f3ac91fb751f41f29ad71d99b570c7f5c7a4619029c06fa7a6cc5d6c3b8077ecbcf9b2b613ba2d42d3b8c502350fdaff8db33dcdd526d778f86fd9df0284fb650cb3cd443e715043e99c4fd371fcf1e980e41dcc4e74f209cc9b66287db827a5236246d5c711c"}, + {"0000000000000000000000000000000000000000000000000000000000000057", "000637c5fbebb8518fcf8223cf977bfa2f3df69c47139899882790a8def51d75bf4be563e5af891800394c4b34537266dcd7760b951bc92a505e418b1554de4d0e1d6ab5fc54dbfdd70b928bff1b1ef6231cfca400717f0bf0efb2e3cd57f61cb141ae828a5afcba1405068ca5369768dd027e02041defa8cdf688ff6bd91d57ea60c8cb4b4517bd74b82e390d0d86479ac3d31d894527300ae2fcdc6e140abcfe42e9e94b93107b04518ce8e2429e6672430a55ead4fa9ace28173f6f0ea8cf36cc91becaae033722c966b9d9fa127c496f20630f9e6894d51548c6b51044c4d7897fafec1a6e5458db89a222759df55167dad84454aa89b2d5aa53320ad21189cf49213abebcf56e68ab5792f63cce5535aecde29593486f6dded7d4cf4ccfee7067ded0e0348a2d9b400dd489f60f65a4275aecb335817af32f373775dca93189a5c3d6a9783052017687f1dd1ccc0080b81e125c10c10938d21a9bdb172adaeadbc9c508073deb36177267d17751ae0dec61c9377a9fdb8f05dd64b61b4aaccfd35a25126364d4f60a65dacab432ba726448f2a4b79c0b43db69e7559648b77d21dc045ed414291fe7073378b33ded73ac69d02d3e3ac810d93b1b46c86034ed2d772a6ed0ddef005579160010fd710e774562f53f08a468b2257e521142dff65413c07adb7452b4ed34ad81d63a203075e401fe21ab02fcc373dc88c7cee90cd3060cb4270d29190ef88c204244610b104ea1992b725492694e711acf3653600c213cdfe8cbe47322805488ca7761aa91069b9a331b8ea0e240cc0fcbbf6e847747470a65254e9bed9814e1d355e791bdbcbd38e2aa0e9ef7322312995e152403d99ae6246975268862e0ebf8e9faf64d380e1115d93ab150857a9462f421d90622301edb8c5c97fe209475cf9dcc49aec32ee3303ad1f73d286bec1d0e008f8269082da08b9133b10d87368ed5d120dc87592b7309c372a16cafa632632fcea97525c7765f73391f7a19646bebfebb6db9c4fd4cc4ddf2c7403872e127cb0409857bee95e78448343f7ab8565fd6da30b3035cbededf86f4acaf1f8138ac222756a920d6fff157de860ad32e84d5fc917625e168e1cf043cdfa3c82191bbecb3ebec379230d494e8c59ea1bf1c2fbf3a23a9139831cffb69b61fc4431b31b63334ddfc03cf147eddb56fe455dfa25f16f4a9f58485f19830a6cf15f3a914844679ed139184e9dec6a257a2a81fbb16206033cbbfc913237ab3a61676e8465650aeb53cb5234abdbccb2ee5ff8f031362cf1eb02d2da58e6f671876a9b154e254c77fffa238dd6ded324f16db2acc1e5c65ef4a955657906042ca05a7dd714efa19219a2ea0a22ab74e0adb65218c0bb6f8e6db0b5af9b88e3c1915f29120cafb7b6604952fb8831602017aca0502e01101c62c2af9ac3cb38a8552c0b972ca4fa41b118df5b04c9cbf53496445eaf7f3b8b718d73df4ca03566f505f9939fb3338707f0fd4747cc2b5f7a24d0b766eea5587f877678a410663fad03325199cfb6921e547714a524d0af6de824ec86ed44e8bb4fe8d0b5af693a4e52a149d923408601d5fac96b7531b20d230ca6eef2b9a27dbe88fe33befa5a698f8ee147a8a52b62dcb77e47d4f6a3275d99e56d94dc8fa1ead8102fa5a489c4e85599f13d1a15257bab4d0dd5fc819126b28e06868c8956e7ba22a67b7668d6c066d055e134dd7b1634d53c4c7e581ed6dc18a31180d351fc0328379eb0a6f3141b46918316c72431771e43c2ebd22b5c966689a149719c265c11ae050523b6f5dcadc5e8ebcc26e34aa15e26c45fda6b3d99649829fc49c26b5abbe72cee97b31c693500fa4cbe31c4039195e5052f3ccd46452cdf58226f2904430d9ee3c5f1b23"}, + {"0000000000000000000000000000000000000000000000000000000000000025", "007a540aa14d8833bf8051892ad40db520612ead4228593aa7e614d589a752e42ef35efee2d9d6fc0dc3046d9b6fdc954786e6d484d532e11911c7fdd5a9be0b6d7dbab859c5b5487c26dbcaf26b02e737bebdac074c92b4c1d19fdb384cd0e8279c0dee86f4b60cda0fc26fdcdb6c2cfb87c3d1cb71c63a6b475eff0e4f0abd12bde7667e0bad8341f72ac1b2c658c7f598cc1fe703fffba5478dfa69267f7ec828b9ab5a713246056be55562e3470f5d3f6110bef18e80c50ff1dd5f1884d67f8ec6a5d305f84a33987320befe8bb91d9c0977d58e078b1a02f8f1a0f81c337cfc4d43ded9d75905a505d2e75b6d65dab59d1b42986eae9076d5b10f8194322e9ac6938245b4e5554468cb6f677c186a1aefe344e52c6c4fc736e2d49c3ce454d7ea3fc97321be87402d61934d8db1f56352f6e915f9a11c18f5441954102f97f609439cc84c13f65a961e0538608600d149bab3e07403d436f075e599229e33981c90e50c566fb02bb0476dbddf320ef7e244ed0df6f45c811233a2f7abf9b4bdee95f18c28711b707aae1788b83f1ab2bcf8f032d5942a26267a417201974179894d0258f5122b43980a961023939adad870ffc17b7005372524f58017a3398e650407f2e13ca1343719f4ff068cb31d0c5ea09364d7f14ef9695af1aaf8fb2b642e7169e61c6d4287b6a46469d1283f0a0e9ffcdeae0249a9ef81409e424b7ff0473f8be25673635cf8770fd402db0ad999fd3c1403deeef60dc9450a3272ad0be75bd70d8fa45f43b524bdc3f29059a9de3793331cf643179125640180fdb5fb56d630822cde7d961e1037edac9c0f3d71e7757187bce52d695728bfe4533486075b4add9ad57d0e84e43a7e49d99cadf0d1242f386d7a332ca3b16dd25434b24698119b8b37c31a404162806094598b17fe08d7e252644f92bf3cb32000a64b62b31886fce743eadeb1f9aa66ea42bc06632004cb94a06c8673bd6e947d9fe411ed259eca504d2e6a1e66fe63da61f88806a9285474daa0e9bd8db45bc657b6a2b8c485cd5caa6ffc7f821779e7be55580127fc31460e48ff44fd91d3eab2aeb92e90eb1a291531a4a25329869986b3f20bcd1f33ea0f757606270967e93843f3e231f3ebb1bd09bd45b5bda39dc8070e233c4de86ecc1ba49ce1a30f52fbbe79849be96002821213521cfd4d61aee3cedec9ed553adc0e4b633482056aa9a2989d8391f420ab25d2516a8d75be092ed8a4644098f3d3167d4514706c6a967d47986ffe578767b5b6205677d91ff720583cd1d5ca5c9ed85f0d95107846c5d4fb790d01cc31f3cdd3e52fff8e8d173d7f417cd3f348e67805fd4cf89a27150d98f59633845aa17420e719eb3a437cc52c049a65681362483bb17e8a48947659e81bf5bcaac527b58895b8b09300bb2dece41de079ebddc7ba4344d17a1065ff880c0b338b0e8ace24e298e1d29f0538ef40d28ff5b4f30452f3ae421272e5c5c2a49ed2cc6f71a51b996bf71f0c8335ad6b6935b46ad2c2979d7910b190dd1b1b0210169bae98f305f01f750f19f3fc9206885af1bb189b45eec4c75fa7ff0815be9672a07f7c5e9dfe0404c0c5a13da14157e24002428b42cdc09d09ee947325e26262776c0d19760f53ddfebb163755b15d94d200def7878b02b7297bfb409350ccc8e159722bd7d51704c3fc196adec9d5a052ee016c3c921f67d3b34812ff01d70fab4b83e2d0a194d271d91ebf44b92b2b1f76f63f21e56199a45162b2b9c66bed024a8d2161019d086a29063a65c9e8b23a793989e9df19ba432b0bbf85c96e09c5ab151450fade1cd224da381742112ddd39eff7691cb35a3695372fbb926572cef1c59d45787d53e8262627dd7a25ac3f7805d9efdab849e3"}, + {"0000000000000000000000000000000000000000000000000000000000000032", "0036f80cc26a7bc15ca764349657c3e933731eebde040452e7acc6f0eaa3e590b62106788e232eb2c906046c010a3517a2e9bea22451f7af5b9b4bc1bc2c8140934f9144d6ee5fe55ce658f139022789913cae9d0063361bcaa60acfb12f132a9a74f0f8f401b5fe702412547f9e975712fe6c92e05bf6e1f10acea896ba09e3defdaf84b578ebde70f6df986c5c8d45b8ee701d2f3e8f4ccfdd6f27ba84927259db4b4c36bfbe2e006fcd893f96da9f5d10c07c8ddc7a8449db4f410b225fa2cc53d50c38d4d6451b2d528c79a5eedc687f00962d0cb54eef95599e7172cc24465ed13c1fc4b535a9bb3702bb1e9ddcf9e3def472699118b3eb01f90aa6af7d381070a4ee8b462d6cfcfdd595d0798645116dfd380d057f8deb359393ca713cbd003df3633f0b5e167971aa36c17b8824bd9540a41d815238062e13f4a15e3cb4709ff650c205437a26714b07eaa52b01968c4814e484d37a0882d02e401da1099ad7035e7907b4bee2a100b784eea909c2fa33b690bc97822c034cfb65ac90b6856533bc558be68b7b3f1ebb8c0223d592facc6fa12dcd00c2dc3864fd35b81a7343b405bbbe02edbc446fecc5c94875d52fdb41779b6a4f2c7fdb39aa9b33a17133050f06f6efc9c03d3975431438b973f0ad2e17cdcb619c9bb5687cf381ea123547c3ae7b2ea9e1fbad17a60e71e37af26e7f5aa19809f297ffed1fe3b3736a4444604cc34d5b6b9b04a925e3fa87d85477cd51d5c34bd353f132bac659c2101e0152265fafab31f5bb3531cbe76afe5bae1e1afe28303fc170703e13fcc38378c743ce520261155bfd0a70e15928abcd29d080e25d64f2ea8ab7b9b8b8806162756937b9ab19d7ff8917834ba0ffa2e8ddf4a2155c39ba5af69841da3281eca45383e2a01378a842279c96951ed69bf0d310b3ba44f97755447edce208005eedd1fbf464b9e24c02bdd9d8e6c9c6c09d6b191cba2730f55920ffa624965bd2c9f1d2330b3bf939187f7777ee20c5e79b5293589b2f6ce151de35f8f4426c966274de638f46cce6c0eef69f9aa0a4b5152302b29a13f422eb7d9e6c945a16e629b9b4a0fc4da23827de04fd92c1d2a43d776eaed61a3e52969a4c77044d793e5c1c65857092ca0e7cd0be3b752a5ec24409fdbae03c46826e4761563779390b360f58b5fd24022892a4acc54ca1b6bdc2c3f6cb75be71e43e2d7d05583bc6b6098e210b6f763883626b86fe9b59438f049f140e165883f13001b40a45ca16d910204fc3b636a87a9d5d4fb79379c4237dbd498a8d7c9ed656cf088351311d4dd7b48860e37b085f3565ba825d86d018ad9fb8018c0485c29098e2b3df19e656c51fefd72b8245cd34129db2b9a5a368dc9c2641d2163c07ee3fdf7a1962e71933d0c11525cfadbd3a95cf16713102a901219017a6a3c7925524482f4c99dec30f558049bedc58759712dcce12f522cbac98f9884856b3b307c1ccebd8973b1b926bd0e31d34ea80f892ba301320a5b5eec3cb76bb638354bd3751e0ad5edcf01fb50e377d64a6d63773996291ad004124093953db563c2171b3b4f48baccf5f38639799669cb5a7d30dcb041b6f0ad54fe80789ccfd124134321ca3da37bf2dcf23b03aac6d515808db9616fbb7ead7ab7571dc3f0e044e2968ebd6bb5d8023945c94e6f5d2e60cd75e551d0dd57aa38b1587815ff386a7e27fd14e801c32d31a77c8e30777d019f45f559261774c896c06b68c411f676e478e8caf975ebb246b7d2d36c6b5eddb06cf0897d95b00c848aba3dc251e174acf76aa4657ab5e3f54ac7c72d359651d4a3546d6ab92bd5a6434fbc20f3b4aa6d214412f0d1f516972b52c8aa18ad95ae92649cef6b525040f322ee3edef49e55dc8b0d14012"}, + {"0000000000000000000000000000000000000000000000000000000000000002", "0054c00bc1369887c24b41584632bd4b2b931fb2cf02a211f6b20f8aade79911b47a420e04cf3c07a72a0e633bcf339b064100d9eca122ed22eb31375993b64126b3a61468eb0978a01681abc4fc91cbb8701ed701a7d709be951096c132019fd039cdbe849697dd2951d81b6fb9d839895697c548323521226ea959c8ac11847c979fc9050cec14d14a195c9265257239f1be1240eb23cbb32c77c581c66581c94bc1bf57f0f7e60873e47048086daf483705ba0e483cc2939c9dc5595c3e569b54dec52baee386473f36b2a2b4bcb99a3b145a61afc3a08dbf17240161765b46229bf79dc8ef41728cee77dbfcfd2e2ba5662d37a81a5d9f189ce7087b21b4430da9d90f43f188594d704df4d3b1062d26d9f33ef5af0985ffb845a4c148adadddc074e1bd0d0e6ed6c6e6054d85f61474c4c957bdd386f00ae46c61ac6ffa9b41b2f1c98ae784d9277f66117c82d9016d46a7360416dca3dfc15a1f4ff32e39a7db943037c6cd932f8f5448b7bcc424dab70e4e197574abb70bbf1d9df984ed91e57df6ae57402447730ffe643d2c88d384e468e4a998d9a4185bdef5ba5517b9b044036f76896183ebe6ece3508b67e3e6e13c994c387c249e471dfb911fc3690ee27c6e201c166e0abcaf6d05ea6ee36ec8f392c13ac5509b3de802e0f5192da11acc7f6e07111db8e7b9829dc64f81add8dd10c946019c177cbc099cfcf01c8228c920722d24e378524140218c1dbf20ee534a4cb55790bed9ba39dcdf782c1ce81b5151a3b3377ec903a3bf3f87d22294388d613af68e62e51a9a96ddcb4b31bf5b35d78250bf83220e1fa19f74acfa19b6e1552a93c6e20557011144011195cbd3cd21323df3b4a3697d569c9901ff0fb0371d788c187c113958ee84a2a1da7042cb452d7c748227986c1699eefd15ef9176e849c3354e5b23bf50f90105df3c25e562c7304bfa65a4fcb20f70dfbf27722a3bd6e1ce5454f2e1ef76ac3c3f1e3b521d7d753b07770681e5705669d4089680957133ab5353df6b1712718a22f3a4be25dd72d17647dc8c057e7f7fd5b502746a91ae1c2ca7a17b673f37db8cae8ceaf9c5a31e6373df8c28610ffc594285f8db1fcca2669e96770c08294cf425c93ffac2713b0dad06529b22de94c11df82e6c9fd99a9f84aee257b09c3e8dc28fd14f18049653d1ae0c32d8773f51c9a6104704a63606054809c60d5f4dcdc4847bba6222137d25049741efcbea0e6ae5bbf5ca25e3a70ca1ca89d4b3c4b500314bb830bc7dc4e91252954da71437987b80fe19109766150af8c7b8866909b58b9f73b25c6e05298f1fecd1d1170f7697ba1947c746ac64b502526601be33b4d3d90dea98a9e2d00da17440a674584b9d39a2f39e30761714d34ffe08e909a452823d30ec87e5124f1ac18902e6b4d3c2aab659ce61b50551408322847bfe373103976c43897d8ab1fbd7f2816fd78a3543090a8f40082b80f8edda7bc53ddbd1f7f9d8176144905cc244120cb3fe929add8cde70018d147b6b0b0106dc76fd0a792b123da6bf1fc771c1560c66a1be7767595ced0bec2698940843f71896f132684ca50d968ef001af15eb49cd3eb39b49c89507a55fefe78aa9fabc77d64ad345222b6181cd484ab5e164fc5102349ab59ad008aab68fdddd3a65d06aa51f38af735746207e2e991ba7bd74dca9b2197f3d85e961ca6e2b24db7e27400e91e905e946bd7ac690f11d57b8d2f96e06d9ba4b65108762ef1c0dff0ac9d73f9c712682df3e78e392200b5bd1864853b673fea352fb7964799c3b9e62ec3c396eb32529c8bbf051846b15e2fcfb34ef9c4d7a484cef79662194f58165ed17d1f503d365b91f6d3d52a374d5eca8958fccef2645e1e5aa1dc46b7b93e4"}, + {"000000000000000000000000000000000000000000000000000000000000000a", "00319534b636a015cdadb61090fb1b85c2fb17df2202a5f7926d42498538adb111aec37d167aeebdc1c20552545fa20e7eea74e5e363a8d57c0d109e3dac472e8463eff68c24333b7e94118bf38c55bc781174bb0d85fc3294d0c98cf45822d000b8999ce0072cc8eb18ceef219e474f4c7a8cb41aab41cab112230bc81f0e96ad8c76ac639d9635a3efe2a4721f39c69cf54d13be964715b042b3aab4a1fbadbe20f30719b97f5400d98d887ed0dfc7d07b362bb47a31324cbb7bd92214719437dc6487b1534291b5efdb6b94acdbd08b1015e4c115f7dc44790303b2007dd2109da8a44fd60a19b1bae099900a217ba1a628a4427e16b76f7b34ca0567c7f427f3ac03ed7c8688cfb57675df6c34cf0f2a63ccd2506a4d8bbe7615d45ce410825b80fb39e108d63fe6d6f3af91a880844ba0da0355ecc533d4e4231c9ba6a76c74d386041238686b0315b3e253b21a00e79224aba907a3e7012577b5fd70b71111dad9e416791da3b8676fb1d5fcd42df4397ad11c03f42d041a65577d528710973c7b142fe422151932aafb11551ffb2ebc39205e031e93339871dc82e1ae64982825050d6b62f684a1e3ff6d32f1e5e6ff4d7260afea3307524de9aa04221d28bd027ef9e81229390d6c9cdf07a68abb6a6c6f49f898f28272aed11a645916d3e513e9c9463f53ab70d09143ef31fbf8e6eca3787c7e03988cbdbf60d9ad581331869fa68ca2ba23b7b38c0ff60bddf714d68d276dc90bbdcc06878abe3ef15f0efc6a7ca99e96beffb8432685c31e8d53881fcb911a7b5d8af6dd2478f83de292b8219b9acf6a1d863505dc46ad4a717dadfe74d159b39836b14c50afeb2e08ddee9cceb4a05fe0a663bc97ddce2e292775ba7b1bde7a5fc20e75952d236230eedd3e0527d7bc8b3078ef05fea0292be16f505895e47020623216dfc2fe01e614a9ffcd1fbe7209217e171b28186a3f5a0b6339ffac8a0068bc174cb6b575c948e141e758ba4ea904f7656c87eecd51b8a0b293257ceccad0c956e885329992fff051a8ccedffc3a148d3e7053a127ee890029dd56ff1815ddcafdca323d0d150d7379599f4e762d5651d9d2bbc3bbdcb89ead570d37bf06f9f96bd0b9526e1a046c9db636dc6cf7c5a86a9ed0b53e543376f0ac7a2af97a18a268390c2b548bddd496fea370692832ef11b10a7363eb0929f749e195dab1715310d37e2e4c612207c940a01b1f6615b3ef3291bac9010039ea3c82034fb065bf544876694ee0e309868731c619ce15f96eb6de9add1d991f6d492e2f89da1fe09bfd2bde9b80123dd78b312322c6888da53f1fb780d84f2caad9119a5fb23220294b895eb37d8de5b3a104b7b6ec5d37c155eab83a10b1ee4418be2751370173e2145dfcb11345d60719b1f44e651f3b23bc644057852b7d3abd113fe8a21d0f1279495dceefec431111b6441dfe76def65a5c1edd31dff855547fa9c8d1575957cc68ac1f0de36f393c0f1d0939f223dddd02b424764581bf94d82a1e374dd9fa0961f397ab2f0120ba5a8c94a3738ad2222687e49c0d5131036cefd58dc26e9a5fa4f5bf44e27758ed0a98a4b12ddbddc31c586372cdb072140f097bf1ec473ef3183fa86c2481444477e926ea5c87374ae41c6d7a33c43dd2885059b0fc5cc3016639127a101e5476d57a269ffa7723020b419a61e44d5c795b544c53de52772693fb0e014b459b13c904174969fa427f740e0091e213cf024186b291421cbf0d8e0e515b7d1bb7b2a44ceb743da1c47ecec2b5742375316422fd7c1142c9786b79c451d7d41a646389ee7e8080331266d7c80f751d3ea1c205fe5e1348aaf43c556e2c5d758de9599f2fb959a359412cbc4616b17421f4869c2d9c29ac0e518b45d"}, + {"0000000000000000000000000000000000000000000000000000000000000009", "001ec01c9e8d8f8dfdb3327a2779f3e53fe617539b20f73f37b5a3c049ea0f02f738e644537655fe19f711db5c5206103df2f1a8c5a9486f1e9183550fff3948a486d305149b33646efbf820e3a9deffdc39f4b30e74e18cdd9c464f858032edcde053b51630b661e817cc05d58f54b687a58211d6546bbe4ec7f65c29d50fdf947075044a607dc827621e54339e63d95ca4a21779ee5a30f1043b8d9411cce8ff8bf0bcb09e648d034ddbffb2d056510f9ee0ba7222e584aa1aa68e7a23d04f5128d6a7d6fdda6298065b6dfa8bfb797904137b1528055eb253b14c642f2aaf815b32bb79c21a1d6b25127d694e235545c1eb2217d22af6b13ffa22062dd66d83991b3f638223bec6496b530c247b12ce21ddfcdae54f01e9e9a18352bdd1cd0e982ade40091d5ae2b86d1a52a7fddc9a246d6d2dc6e3355725023111f4cc9a8ed14105f84691f2555325f50cd2f6a8011dff2bfd7d4757f7d1c59382f6e00db9c6b18b5f164183fd5c9eaee5fbed834fe96ff3d21ce57e0f7f0334f616acc197274c9f8ccc80e868eb8f0b7c98d220dbc5378a941611e00fc39f1d40da2e2d157fdf130284b7631f8f0aa9c33caa737b61afbb6ab01eb98028b222d373f5fbc1dd29c3c58f1ed09ee26d9dd1880c4cb7187d616e255ad3d3e6da34db3dc6221ffd711a061a50ed945b9b5674b49887e62e1deb6413365008ccd45a8705e7a6c0722b02aaf805aee092bf4a74331d8f1a284da083aa3063ab98b7effdefd85cc1f71522b736948647dc3982b428193679dd7e997fc15e20c0f399b88a64c1e38d84ba42ecf2563d9c5330c011c70cb9bad9214d1499b221cd3e9e8cc49eedeac512b4809aa186c77472a715c01cfe1d1df6abfe344d2b0c4bfc596f2317fc062b2114de5d53a0f1bf8a502cdda460691dfa0766d1242137a70e899a68ce5e0001289d0fdc1ac324e0d6a114412b836609303999a20d75f7b0590368b8f4e425bc6c755a59ad297eaef90a9b820c0119dfc922e6265bc46cbf01b36250403515e3abe279d0a58cd9a904885bd404523ac8189241025967d214c5159da5b617a915df6f7df82ed56d270ed6776882688a0b9d15363c8de95ee69ed15f382b355d2ac561193f76ca66644fac592e71f13e9645cf3ac916fc2b93e724b79903e95462c1c9a0d71625ac0743fa9b841d4dfb3e6f263b9d5af2d6fbac5aed763cd42fd0ae1c67a17d2236e427bce456140a3984b01cd123fbf8dbc58ba6d3b5e447624c45bbf85271b72f0e526b40b15473c0bfd38b73cf5a1af1663bc458159d72215a383675f7a1f78b9c4f39a61c63f9f8513ad61f1a03184b4fb015989ce6d0b1c3886fbda6e039e62a53cb9d32d5fd5fb417a1d9a609e89879a6bb49cd94c3c5da9def0335b676166c3e91ab8d531335023da67faf041d03685b16a22ec11d89fb8e1c769d0ae3f9f840102b0bd8180458f07695c2450236779e02f3dc239e5fc2fb78f3426f2672240d748a35cb71058784ccf2206a41cb1a53687ff4bfe0ef04735df50ab3a236148588d2e22d73da3543ce5e02a3d26f2e19811b03d70ec640891759c3cad8f29ace6efa37c10fc05d175192b867f704f8e4acd239eee33939f6a915e17f7a03d21bef507816808774d86b21031a5a790de7f8ab435d78efc8322458a54de729587fd4511540fee690151793d2fd27e6e6637b11fa275b18977a20ab9d298eebd6dfa331e3993b4fd9635985df6f01245ea3adad0ad1d105d5532c97ea148dacc18f4a150e687720e44fcbb8aeaa5782b3d463b2175ed5995222904d0e61153d59c4acb8078dccf9837ab67e904e2b9a24361559a755ef4613436ffbb97d045392de212ccc1c8fb98fec150ee6f34f437bc81dc173706b25"}, + {"0000000000000000000000000000000000000000000000000000000000000021", "008957739f8368032503c0c0d8ceba403c884f47fd376c428a8ab09eaf8a72c60d0ee78f05a8cf7bc3f008c016a5f546919c569b15b385d19c49adf1f4878517cfd0e3f99223e96d703ba4d8e1cbf730a8dc71f516a704b768aadd07e52cb3c23cb0aabee6cbdf0415240ad311c38e84af43372788f75f103b4e7e1c911a48486cd1251bbbc3af4977ba00cf99023c3d1e3d2851bed2a4b6ab36b9b3ece83b49dfbb0654781a1d0403a3a11c491099c3b4c19057acec96a44e3fd2d3c33790dc7269a269e736db63be4cdfcb9755a1bd4cb116e3e6880655feb7378d22f36067624d71228ca3892702ba0a174ca74f26e9a7e46ce3f71669dd1c49870e538f00bc0daa21aca404f1f033e9b548101859b11cf464816a104f18e378823efb77b78210201dda222430dde4b5e19d9d169a152d4b745f01e1349604784b6de315229b2397747c851362b6966d637b332cab0250aff2b3cf629bbf014470efb7e571928d783ea92135190ace9068f33a56e21678457e316b106cd3860969edcb32462ea3dd40b4b88a763c8d6cf21d0bda14ac064913cfaf77a699c207fa38c42b89a03e5619037471ae7161ce93928310a74ed8323c837fd78cc11da101da5ba4e53f3a29b2c741589f1fac757f68680d684d2c586f9fe79d31b453f94354bdb7bffe54c417431e8d5ca6e61b85a6f4bf7c3b17b274d2b45acf03c8eeea9064d773884767040072f60634121aa76227b1d23a880ee22739cda293c47df89a8ff2f8fdd2102e2a2247767b05e1b651e8ca4a6361867ed561402183dde011da3f839483b62753ec456e177db6131b0d5913d18855634380e9c21a6445bcdd078b6bb87a1f61167fa118613d4172a264c9e0550665f3b476020eb8979819da4641a5de04703edfe03e18ab70c8b91712047f23980e3bbf51718c83f7afa8c73d1b7d72008cd6f437cdb99c8fadb4c52bbfef22cfe3fc78b71f38e70b5e4e6eac74e3abdab4fe2d331c19fbce7d30f146f168641659377c074758da263a547d1ef00d3ea11fcbcf294375fbbdd4c2945fabfa935bbb38ee03dd27b42a20ab5d14f2e131724fa2504ea991cc5340c3d44896d1dde96bc514abaca78df313173fdee006448ac3b4f38c67e1dc23b8ab362fddec0bdf27920969feaa81c72886f26d814535ba991a8a36b6105f02947556cf860c6c6a89f290622ed0032f99da9d7a10a8edc35c8a3dedbfc0344faa6de4554607d507622dabf2c6265abbd165f4b32e10f630f9e42e3253643f2655f4a018dd44f06ed41720274e756c45b25d06075432ed81100831b7a2d340ffa7c1fa78a09556970f558217da152f2d4423e1ae11c1eefa41273ddd3616184d4d4e9edc8fd10a046725da47f5b90a91a1643d614e7659529bc0d146d3f58c463895307d8ded190287cfc86b6eecd3818924d4e265b3155592ede39c4d6a2b0528a12569f39d4917ead726ea630afbdfda0c5c6ff529c32c6a7217a4399e5fc2b9a6a277f3441d0d4c7165505460892472d7bac66b61dada3da202066343d8ea053175b39de0b915fe05851bbf6c8c0c0e556601bb8d72614960d313d52e174e785cb4103a080ca928dba68bfd6ddee747c4be658eabd9f89f081841aa6d58b1ab819e77e8ee95e07da2af345e4104060c764b6eec95b3e073626a62962e022eff3c11dd2219c1ce3bcbb84b8fe3393f3ede91db3fecbca1ea0de806f7a3164bb922c212e32fecb692aa133639352325a73b13519bc49db9843b1af0c28113ff96ba9a0bef6fd8efb3bee1d3d3e2ac3b9c173e429653870e7e7f2de46d6611b1f88598c6b4d6714701ca986e6613fef55e98e691c9bca981c0844eb0edd6b8988b7c30cd3d7d63d1348792ae26cfb46f7c9b1300f8a197"}, + {"0000000000000000000000000000000000000000000000000000000000000032", "0048e4bdc5d95774d18d003d1482a2d0a53ac891451188363db21ee1adbefdd77457596a26d8a9d9ca740757e0bde6e06361211ef1f981e0e8b61931187d10349d99c1bdde2535d2550432e16bbb1336bc3c537d11ae58c0202e2911a862d1cddadc9b4e3f535df54423c573be55683b2fef4f13ec02fe73299f665941851311feae2f05b763d19ff7c785e58fd6a3881c53245e560d3eebefafc3cce4a5f24b4c333d83b27e4b9a010dd5c5d1e616fbdc2e83e5846cccea3e1e7b9ac0046f3cd77ae86d37809a2240f5b6086229fb94bfee0c82e7e6bba56b9f94e6b29c937a8f855a7b761ff24f32ecab04af5e257dbc55f4096084b1b0803639010169aa781d060aa593dce380d65c1106ec9b9bebe04b669f4c28ea07555dd3360d0cc6325a81bb9f40bb0eb1d993a4cd9a650407b1a3c4609c0167e3995e501af147c7dd60016fc83b744e47459e41cfe63efba406f7663204e7c72db87431b9df4ec1a0c50307d1681193f76a6213432cfe59c16d1d10f4bd655d8dba0533d11ed68fb45585c260878bb1d5a5aeb006df0a0e7a85ec79e1e984bbe5325a3f69ee418b02983e341f139da63c0cc5647a7b0ae522a5d82b1ddb6312dbf02e0d0a9e01cbe986a47e3318d9262938e1d56a048d187a03c39f8c7c6bd314376f62711f0acf581dee633864765b12d516b305bd73cd6ea6df32377e56cb560dd71da9748e7e99c089b2a38ddb6f16883757de970f01ed4cba4be400e6b151c93ca067af52973e250e1732830da150cfe30fb50490d1ed638d570157734241aac61410e025c3e78214eb817a15fb3c781b2aca13e645a1a085a59f8b6582e8d042a8da76789fe50722edd978ab222697cf14523a0d1f7f71bc4919a45a1bb7741d490d1a7b54c1a2ca34a34cf8c5c35f499e6b48668fe8f22681cadeea6f5b5e0b131a155b0dc8005ae2700b0443a0b6fc2378e831a10e9bee1db2400d20ac41d7d2970fb813021e50b729e51ba692da5c089acf8956ce7002f5d586bc497178c1bfdfb7b90613d1f0b51151dbe6c1fc14817d6054969213b942f0032f08a241eede35e7a1e0689bf9d7592c981f94712d22920a11934920bef336815b7bf8f1be162e63e1071619ba20c9da6526b0e364d224fdb0dba86b1a392aa866f516e8e2c7fcb643e9c77f992f3d415e859d00dda64b40f3f6cdae5ca8fcfe4ffe66ececdb7f6e06b55c775ac998fbec58520f3731bd856b8e4eec79024932283f60d7050b8e908e4da8135a51b81ba8401fd9eb8d2f08d8ffaf94024263bb88c8b261f2fe3c01c89fe326cc6c3312c5e14dc8666d555b12d712850dea96b7d3b15433a0dce437834d6295c874b8ff6a1bd15c40418859de76fc042d714d4e214cd2ed02281cdf4c000ee50727926082eecc3037379903bf04d40492a5f2b9e59b55b6de0396ad20f9918295d31bf62a33fa548a0dcb2ee7190315765724e1fa203aba8518e6d23bd099a301dcfd81a1cc69584182aef420ab3a91b744c02740935568175ad56bea2e1e8d79a0e607f000bd88e57bcf9ee070db96a0c93eda3a998ab541f56cf93fd1e415a273f8d9cbcc97fe56dd5c79ee0f22815bd18a958c6194d4bd9d4ff132a76abb323966e41e2c6a26b379ff7f3787cdfec059e682363a1707e5f134b5b1cf01e6b56268d9608dfd1c091f45381e6bfafb74f0885b8e9074519bdca169eeea15abc11a9377c79e54fc5bc244226121c5517979000da8522787b5b9ad64eb9d4d86c31c5675c3a70bdd9a5d491d8d62209c1d0da582debc48d17e261353b3dbb9503a11620d05d4c23eef86e49ccfc6b80eb144b769c839dbcf86da1a6a9581b026a508cd0405f2f09016925568b6073bad8a0383f206bb1c4101a63d77d4ffe3"}, + {"000000000000000000000000000000000000000000000000000000000000001b", "005dbb22f81206cef93903b33a2b1a9d8f0f16c939315a0b7c9be91debd4eb3531f36b8a061a1a9d7f03202e04820a0c2190ec7e66545071b7cf5724bb0e182cf372fc4e96e9e1e5e5ab010cf7a4f7e6dadfb72a12542a5bebb3d791c54fc1b80cb77855d89b1029b24974247018e5e8d9b082b51491f8d477ce783f1b6a2d9c7ba5ece813bda233536dd82b9625c460b9493937e8c1f19519f09709df7756c16d230a46ed164aa202aa107abd65b18b611d74aa8c6c89fe282b37430388b935da60b9e51fd167e8ce4dfd63b721b5dab59f02c064bebe37bc47be7eb22f37ec373a1bd9d7a041138c0c092c6383ab93f6a228277296d0b7a66d04c20af4fe077ded72d391b0a3658928d4bd467b123bd0438b33b99fbc7161e767162ed3710a41dabeef3a511a80726a7710dedb9a5e637384ecea626f4cdfa5b52f169ae168e305eba1f4c42427722bad27067bc75804b857ba87c7aa489b1dc43030ad6cea19cfb169090f8f58f4854da4e47f9cf43646b6011312d6fc206308e2bd2c7f5fa415279b97205a7b98a6a93a773720429c2a781adf92c3313909b86373831296ba5dfc530b77d58a259795d1a884720c55b944cf5b851f1c6e0faba3ab619409b5b4d89464b94f6191ed8074f5d70cee015c34a22ed97a06684943c25c62c08bb9e631234ee264985d03c9d6cc0435c06eb0b115917ad90b0e58f1f8831df4e5818e322701cb7c6d70da2cd1c213aae3c6a8cb7b05c207d40362a14e05c244983e481977eb2236cfebb1301f72c65075c12a36917a84582e4d476bb8defd5f55e7058a3a74919ded171ddda40f81b327cf8d89847bc8412d9f48e6e6f098dbf20b5ddb9617cba1be8744c1067171d02d79e0e8d6e319180277ff7c6336b5cb31e29478e0f7cab7127d5e02736b44af58de5fdb067b58f528dd3c66e5289820660084ffea594fe24f2f77d31ed454280ce7f72f90932a0dbc6d94de8f7d036e12b456c64a68ba1387f27a20577bd0fed186a6afe8a27d9d1a6102f9715e3b1277f7f6b5cfe32789c542cc1b8a60e6837a17fee7bd18229b787468625b85e1b4808b460c3d221d7744563a8cefc0b95711134bef16af1e3b020e0576b033c01af96a770b6796197ef5482957e333fa872a7e00383f3e1b2ef9e0ce5be0ed56f7f15b89821811519cd209d3bba12416bcb2dbb1b6b3d4e7d846442433087526b14958fe946e6ba55ee3ad943c9ff17dab521c0414785643366cc8d9787472f07cc94de11fcb7964ce170a4f25411b773da5fe7252edbff075b8bad6ec8a147bb49144dc6cf36497f1accd31244dc582de01df3045ce98889662438e8b259b1bbb78e60c75bbde9b1c9aae451c128acca17cd2d6c51e98d53bd139c3384a87e6c6d0258bafd6cc35bc1bedee9d7a2af679920300cc6508d4f7ff3f7a90d86bd7e528f1c7e92a1f14a9615cc50e601d66d615439a4ff4edeb093d062410f2e2cce49a8fa50bd813fffa526b973dd03ae25e30dcc2c30b986823123789895661cc5762233f992e047dda852a4b1646aef785aa1c2f13bda9da775a231e154a63b023e967c86c52277adade1e8ab4f7117d42a16630415dcfeb384ee5ca404d61b5f20db13a00490a26fa3de2e66be0ed4921b1f3947a8bb298a602043fc7b1ff5ca5efceae56fdabd3c2c69438f5dcae2c3c8760d34ee8757dcf87e2f4ec00c6619cbdb52912c13ef55f48caa94dc462ac4aa48795fe58de3fad3d9962ce6c330e51ceecd9a2abf603db98873ff5b31ae7cc98080b4858930475f5c57f7d364d8cf4a6fb28893f86148e4513ef9bb9e540ee2d8f02cababa3d3c022b98ece7bfb749810657be5877fddbd69f329944dc57c86817868bd215f6c7e0f7f7f762d91ce92a"}, + {"0000000000000000000000000000000000000000000000000000000000000005", "0030ba59901caed1aea05065478e12b6a83ef99b4f0be9f1d46a1bc92b7ef951a3e92bae5f94c05dc58025548b8ac59e56cfb073e4d822d2781350681b1ad855b1f41bf5a615677318b7a1517fff6ae289feb525022cb965d8856a7eca9263cecdd034920e939a7acb0b423894a115ffd1c71a83393662ca030cd5bdf57408efdec6f41bb68bf91d6571ae3febe567aced425b2f28cd3cf8cf6af6f154a7ae646f62f70e67bf87080596d7c3ff95e9b1c8e7b2bab3574488d0e074dda41aa0c4e37f98531d465c9514a53d7cc2cb41d7f91c0d0691b18416f03b219988154fc6408b39aa3abbc213bdd7a98ece15c298f2a3186ec033fdf2181afe8b064f3745915a15d5018231694ccbfd5a88c25dfb3619de5b1b1115fe75a6dd183b674a91170c6a7cdeee33c96e918e15629d3da6d5efcebf62378d893f51ff7f33d76890f7f1f9ebc719bca8764a82d1b4faef2c00865b2a46588127ab60f0710cc1a2b13ec26e14a11b9c0fd59b6a2fd1be0dc27ab69ecb557943f2f71a082d7f07e997d953b1d5844768c754cbd632ff0aec560d3f07e7358cb7f7bf55ed6f637fa23d27bd998e0721034b5120435199db368271c5c6920cc33c727014338d9b1992732ec418085a81d0070711c75f28a01df56cd9e6507a7e843302f61bf8c53d0b28b505504f90161f24f419e9a337268c67cbd46e9bd0f541e7010cb975ee9e46a9c2d602b7bff56470ee32579edf1b66d728459650feb68b62f1be50f61e06a510b10c1a2c4af583c9b5c5eeaf16452c4b3b0da4f95f5f703ade3ea3c9e6240da053398d8a684cc681b414d8c71947273a42270b356cf105e1a1f4751e7bbc7b44d125a277d6afaee397d20153ffe756a4255887f32e062289247d9553a32dc68c15c21ec53e59713a9834b057c99b2f06d981954ef22808d0461a1aa7d8b6ae6300e19316c945ce8946b7d66b917a7bf249993cd768080a5f5ff4099fb9c8ff4205cc6a945287679e47e80735875f81194e913353a6d1ebdaed2e4721f43ce52a6b2369e95e53d9969fc4538bcaea3ef0e2df5cf001988eb194ed45efd2fd24bfe0a63095d8b455932f320e43f9172ee1959316160a1140c62e987a39683a1aeedd6ed3b4e3c1a7bbc36724eb6b1963c632375f60aa8ff796df76ff5d4698ece6598cfe5a033cc83e017f6979de1d52bdad71a0f663fd19feca7f96980d4470447daff45c43b11c44c51c30af661003ba679e020d51706d01b7d4c113d036e5302988794a7b50d61d8a6bc8a44f01cac485f59d86c43d8a76079bdc0b05299c73ad0ebd68c4af90e5677b1e09cac9f9fab20c103c0e8ad1bcd0f83531e09cb2f749614c9130d3115f6d0ddd470d1357a81210e9de9491590e76f0965138261c3f60abe3ac94369d00cad9a61bf81d7a050166f212471bd9eb33d6215f631337212e8dd6c5a222c2c2945d90fd2f9dbb83af73ab27ba3e117eeefb054990c43cf653e3d82557b3455ab34b77ac5e215c13476fffaf54ae6920ba71d13021335748d59f143e088ac44f1594827172f290d8c5c0c15ec8d0bf785814b2a438a826da559721519146eeaebd4609bad6d54d049bd12e5c642fdbaab6f85fd8e7eb052b3adfa16749ff48405b38f52d8da72dbd7e232214f9d8636804bfe6d24c0fa2708ce717b69ff19fff0eb2dddb2a460682412611a557d6d8d4d1687a7825988891c6ea0b60bac446f46b6fecae24a05043fda2c6947b2f651620b3873de7bc21f148a64f37f3410608a2d2bc1c0fcff546ec56826b209ac2cbe437fa6972aeba251a23d8573a561aa00ef91253d2c1382f8ae3e2fe1ef71cad67902556683cd55b73781aa5f5c74942be9f9f68f69656e728fea57fa557da90fea49b89a49d273d"}, + {"000000000000000000000000000000000000000000000000000000000000003f", "004e08ffb44304c936c768942ad809067a90181680059d6aed5f0c138d393e455f29fb0e02ec195870d90b600ba9ed8a6bbab7964157715dadc1ccead510880ea238aa9150a2af030085f0ec61fbd9bd72fe86ac0302552a63d02fd387ded3514a5acb4b9279df24891521cc825172ab13d84d864787e2ff128a7299224a0f9e2ecc6a96fb4fccbcc256ec3b80761ad5f273bb27e4aa5b475048d32f039438bec151214359bebf0f00c9ff651d6876e5b4fa76d4e8bbb3af2dc1d9d56e3cead7ddc3b0b569e11225c9ccfd79aa2ed8fa962b063f13e52756810cc63ac17f9a443ac545057ffbbf573126561f5f4c61405bc6c45ac1a2029d823fa914061e78c59e66f251bb96932ce1be6074e4b70e035e0a6e7964ac4631c2779701e3549eb4247dabbabbb209a5fbab20ca1d1d0a6131cbc97b221e2e9016497e0a7dff78d35d8ae7ef18a37e4c4ff796ca6a3e339600b9b106f78e23c333ce11fb594f3fba02dfbfad2405a2e2e7722c2395f97883230e1dfa4590b45832930202d879651fe971dba3153dcc5a3a79727c78fdbf1b6281ddc5c99f2534e0a358745ab4999411fbccd304f13e7a02436b9a622901652ca55b95eddf36136029dd8ef35c0b80c57c29d33c97731e254972913dea0919f1c2cad14599de7581a25e44b87677697fb5c0364b97198ed3c686c0d643718437b991e780fe39b0030a57a424d14131b98c40e06c1bf51e2077f411f3686db7c64e655fedf44aba0f78d27e9ef5f8bbe15208a001acbf628419287965c7bac6a64dc56c5af2162a8c81dee2d9c870cf6986398cbb07b61f589b4875051de35e97cbd57678dc13f7b423edfa9ce7553a5045bf8d7e4511c8f5e591198d985ed78f0ee5b8f97a122eb723970683ee7ab7e19d4298a5f38be2df7fb723a52675add582bba4bb2586694b9546407c149654005e8f825d60dcb7b550d01a3176a936239c1a18631d1657aacb930102c43fa326c6690a2d18eed7c749215963851e1149535fa422889eb94844f6abd177de586e04c056588e37ea4088f1e56eeda6daacbcc2de1665f2de3216ef07abcb4520e540322d521aab39761e704eb0148b5400f54f38b9eef53a6f61e1fb46921ca266dcbe92b557d934e25c92a19538baee6a00f64417a76b69d435873960e9bccdd40e137ccd7ff17b03e24f0b3a2fa015fd4cf63d5379adba64b7db9eba2f84a75b975d826f1a0a64f25f63d7bdbb62db8a3b2444fbf9aa5c626d7ba7e29da1a024cdde949d018e2ee3a9818d5178057a8443efe7326fe926ba4ffe8e0910171754e34a6fbeb3b34e3b3be24e20d8bbdc74245f826585cbbf6780df52fc6456849181c5f52f340f81daa18117af44e7f67509333f3b81b46373b98a1ae73341b7094069022391d2c71ae03a81485ad8c9032e69a3b148168ab3f6165942dda7b29715fa42992671b4e2be362639ff0ab791ecc947473a383d94b818c67a164687a5de44420281cacce7f6faa53b0564763c5cbf1e9f4639f84ddc174b669c8b4ff4ddba6e055726b080c7a5ddc2f9ca35446ef34314ad5bfc6325aef3a1981a817f5981e25b1aa6bcfd9fed39bc4c18d45e8e4fe84d3ba29713b12760380ed3cc3766b937bddcca5f50d18bc21f939f9e6147163e127aab7903c8472efbd43a68de05459f21afa81a11abb5c9341777910db8dba337a2c752bceeda201d94f81194500c6af6bf3fc3626e8b94c36f856d3091e7d674ad921108822e3cc6660b74d161f1667b014cbdd06e3b6b05b39589594a52ea95eea96608e51b9e838a7e197a2d57cbf23c4bcfdbdfc9289bbf661703487d1be095272357dc918ba4bd5e6854c154466d8e18c45b06a348042479965e7cdfc40fb51387d1b3cecbfb1f1822"}, + {"0000000000000000000000000000000000000000000000000000000000000021", "0012e96e64e5660f51d4370b6d38613aa0e77795554c9285175a7235f7d817259048f2782305e79acb3115c482e67490a225043d52029d7af7517f84b81bf72e153ab9fbe01f69be8b93f4eb6dacdef54d5c14920c330c09888bf32b3ea092f0916c4cfd6985cba4ea426f4d8bf76b272b73dde5b371dd688a94845e6cf412bb71273f1fdbe30fa112cd6d4a5af8ec0c194f3b39939f2fda9d2ba98b77740d4ddcf13dad81b8daa1036367c33bc591cda2a17363537f4889dc99f3d7e01d533e45028adaf1514247b6537925eace91fd55d5091731ea5988c7df908bc1379bd48ca271f51c80f6185a4f553be4e0f5bcbdf77991ce4ec20ab3f2ee3b08e0775e252c0179dabb62a1f93595414b2810ce5d176d81798e8fad8aebe6bae6866a79f7245a7fbce41e2ae69af10b4d1e8f9e434027df695de0c1b864b935f8ada63d634b4db5cfb6412e4f4ffe2e9e16ac1700bfc036678d907523950116789400cdeabe92062602176d804c929d2da12503ef8dd3892560ae1d93e217ae3c37ea13087fa97142d60d98b7d4b6155d5ee81c9f96cd588b9ae760c22463fb3c52491bc34b1134035c56ed8765b443b901259cb7b93251a743fd3eae0757d9240d07713882c28199677fbc6206a91e23f922bf91ddf68c13bcd2c9347b69f693951f65a9fc5e385785ccbef58a1fbbad0680abbf3ca248d77e275e033f9683e84fb11db355f5b2abe4ca79c6e17e464d15c7676f63d4422ad8dee267cf9957c5ac0a7c364f19d45181a9c702232b60990aba4a9f327ce6f9d6a42683b5bd896b979dd3828419a3f39aa16575d2ce7004929b6ae05a33dcfa22f3aa7522d1ca2a3cd5dd3324a6dc7476580f64c55ea44f2ce838f37d76dd06680ac9f9e0c41b5173149234dd31618d75ae859c97060d97a967d34464f0702f42d1ff64b8953ba03c68a1009d9f1a9ed56a63b87cc05da38ab3c9ee8bfb76f41ac675915b98448b4938926a5e1584c56e8719ce3705601fb29bad2f1da84a94f200f1ac66409d35f59d20fd0922f7db79bb7e429553ef4508b66144d7269b09482e88f14d993bd24a80c76cfd80208b14b7042b1654bdcf04e07fb1c13bf4f72b633a094ae79b32500c6bd6222a5a124ae1d085b45ebf9b3f8d0dbe5a4b21a63a5b92d83e2f3e54e2235345b7d520f877ae320444b65eee2e5fc9c5e9e21ecefa780173a0796979045a2ef150e03ffbfb45815fb3f6cae295d31b0d130967346603218a2dbfbc13b629f84a22481095eca7104ddcb0569f4db54e7b21a733c715b0e59c7235c30b2bf63c2e244d35b6e631fdc711b1f63209bd7fa60c745089e10860c9837582ca8d4c2795409fd6a57d0eed70d040aeba0fff49b35c8e77406a38f516cf9e13ea397366e2394b9848026bf9365afa0cd352c2a1036773c276c25547277de1bb787f8cb4b47d2cb31a1feadf5a8e6b0ddbab8f963f6551ca56de1a98a6320add04e9b966306b3f2de1f18160127ca5a6cb78a733fe12da2a52c363d67bd708cceafad9ff80bbc90904c93315546187e39464b4495acde59e7a0e17f72a22d715d099523b9da78b537c61ebe8b90c828d46184508a2e54316d5f4c0aa24b51ce9b30d8acf515092478e0f7ac615028bbef6aaa35de7470359361f4d2603b6b7b7d08471f4d0d605d95eb758fe63add5a0ad136fe0ab1f9ba8a9e52f72fa7842a0fd03666ad58b2d019410db8e3a7765ed17dde6cbcd2f6ce6fb91c83d303780be0f500f81c5b64e9b6d1856af2c9f3182099cf9b196aeb52fba622183153031d20b79bfcbd62681e9d9b154b85f9d3246017a61491bad5a1efcaf1065dc312c1a46bd5c6f16318e49c62a0e33f6943e301d7fc47dd6a742f37a24de15a841c37e2fdf3c88"}, + {"000000000000000000000000000000000000000000000000000000000000000d", "00ae8256e7c241ddb0b4218e7ad012d50febd385380ead0cd7ee09b5daaa1c1394d673eab357c2fe89a5082f12e90ada450737fc43fb802937628ba755aa1c1a4dc93d488e4f7ed25d71bc1246e027441d5bc25a04d0fc3385951a9bc4b902b9e83a02fccddaf189a715284e7e58da3136dbb4339170e51a8dc5faef87b50732aece5ab3bad1e03cd536a2632b2d6f01b29efb09bf508c3958ed25f882f2b50c2255a8b8b04dff42092677332713be4d05b13318bc3a63eaddaa7a7a9e48f5d5fc8463aa6df2728c4ebbf55ec3c875ffeaf8188065ce583684abc991a47e3bfe5e6a35f536376e2cfb1c2a2e67bdb5c3da043567ab4fe137694d811b12ee72ffad977fa91e36429c3f594f04d57e1bc75a28098e6a962ec9c9aabc57c0bde965d1f4d1fecda4192951f2ef9661718be0dcc6837be9db87d81eb03c2f2e9c591ff05bc39d49c42eda795926b3fbfdc280016a4892a14ba70d193923a5ed660771f251117868570f0ff475e802479305c620146ddb099dc918f7612358375c7c2780375de01279ad6ffb7d1d9d7ed8332ce953ae281f73139e113360dd582f90dd5fbe7bda080160f7f09deb53b73ab65cf549d331bec2fb43d8196f3e3c17c7f3829eaad3337ca0f4cedfdf1927481d26ce693b0d5803c942d5c953ce1dd98be80ce43d2d11de1ca939a1bde691d6e546f4cae66c19fd4c5603466a79c956b439d826f1fb2ab57008f31a4969f2471cc687f759869fb39214871cce8355dd6e4f3e2c1c004e81d76dfe71dddfb23dfe3e3241239cd1b0651e0bd634078c3b078bf07634014df1e193f17f3d5c220376dd114d152d8b6665f0434cb75f053b5f4a934ba10a63a3dc93315395258b793cb2e222d99bc91134958e45f654521ad2a8964e79c11e4259a7f3add44ba44553d1a124c1c913c5729e3b800774247f761901cb99e6594dcd067780507562c7e3a1192437612604fe5f6674eb0c6989c5e340b1c3e6bd565133c2ff03734a31849ddee9fc8451c873f34ca483fc5e31a30f85718539121caf9dae31d4fd3d8e0548b974e555058fbb3dc647825d8d3f92bf46f7de8e3662d6305e247882f7fd95eb818caea4e401313049800e8c7471063a4750e6dc8a0f086531980b4ec5c154248fcef706b0e7b08c8b13adca3310ff0df75f1b88e3fe73ac02d98eaa7ec44c6c7e6a82004d6b6c62a821b9e0e71908d20d1ca1a41d1949d4f5c62d35797e3b1f775c036fc7a56b218aab0d39f580d570752d7e6d56417506b22763aa8ee57ecbb0d7eff5639adb80d51c6846057b36f9d142ba863541e3cff07a9fc651709e893159c79c5f1017fe1ba9cfb5d9cae80b597f471a90a32188b1b338cd61b4fb71e25865af478cf316082db8392af7abf7978d22dc84d4224a58b655abb5526fde02f1037970d6844b88f31884dec5fa8780a0fc87e00d3a95ef92d0f245c6d42157fdeb0e51ea021ffe2c04ddbabde45c7c413f78b1b8f859243629e096971b1e8325100bcc3f69a48228d096eee4a66b63bdcce1064fb1c1d8511b8f3705363bc7babb9e2d5432e5852a70b2c7af1554d5518b1befb163d89fda8bbf465225eaf4dd115fab47fdbfbb58f37d05a7ba11de89183bdfd728965a6de761a3e6284063c25b3bf57c29f807ac109b5b2c7255d1c05398cadc32f5bdb21e44d1154020e93ae70ae7ab089a378f69ef0fa276febf74282f61739e166c98e64879079779f8b69e0c3b449d34283a055f6c0ac9781c464f78b3db821b53f18f72105bf2c04e16e672be30729f1e720105c7ecf9e7d116a7e1ff46193229cce0a3331d542fad8484193a311fecb4dc6520ed617133d33cac4f34bd0bb03bfa7a35385f25f09924fb919606f56ff57541f6ad9b63bc"}, + {"0000000000000000000000000000000000000000000000000000000000000002", "009a698bd3a2e62fb6f030ca668ee1c93cda91172246c1bd245293961d5d24e5973a4bf09b353f7d18d40f7f0a2e1d2047cb2780e2008fff5cd532a019033a19da03a8f660a821a671c5b338b09fa6a9ec593df0026e13fe9d590cabff5d710fbde16a057b5571577f20d36d082163dfc54a25922be864aa4a7fb3b8949b17b0ace19210c4fdf123b4c5d27ee3a5bac13ff656225389792be28d23cc22a37633560145582c3aa0f205c2f5df88d3bd08a1c478752b6826c6dca4bfcfbe1c97495fb8d84a9d81fd75b787c540223b15145532226341d5446c42d3a7e432703d3197e5c0a9726ebf4fe96d0976e71c1946f8f8c737e51d366b4ebf306415e3fb33c48a35c7f1e3124257e2a7f0f292b8adc81664ab5601144608cb0b73c0db45edd96cd9acf24b19107b62ecce09aaf119c3376cc3cea3046b9f60fa5d1c3efdab237cf7a312f81539672ad253cdfe7e8b0195351436e360b18c8750baa17ce558ff40fdc8982beb962a5ba9583f9ee0748383a68869481bfe12a10d5d277098ccb5308cdbe2f210b6c2b53748f4e0292703b3ab6ad2d7690dade28475b79bad6b34b6309112d1ba3aaf87c835468eb17c31199a74629fbe81481aa6a9e434d721dd835fe2f3e0d8fcf9dc6357043d36296b5a0bb3473bcef08a2c6d6924af97591d65f367841bdd0b60f3053c54e7eb6b695d6dff9a5923640216e67d63deaf93592510c289cd5b4550ef302f7254d0074a58e18f47ac02a7d20df61e6b8ce63cb9ed2134e511e908aba9ef93b5f4fbc4e70e89b2f92ea227ac496f409eb0a9c0ad7462e03e67712f2cf9fdac057288ad2152dbdbc419f539c6c1977e7f4ab9db3d119d6294740dc8a29b0ee356d8435826dc39bd73820aef31d11ef584fbb9c751ae60bbecce160d1f60a12057099cd2e5fcc96e8468d681ced8967a69df59fa00b3e8c5a4ece76768f6b29060ee9320e955f25b3d3cd852f5d160f33b1e1245625c5aa5aa973755eac710beb6e006d48f85b2feb3ee0b6bc106063f7297d41997567057cede8acda1e2cefce4c529cf4e9f13a3040549ab530500ce7b2064b9f9ef8d39ad2a5276390fe652f85d684f9bf0e684c4f36ea90eab625692560521d9457aa3a615a0bfa0753b7da4ae4ad0ff77cd172217f07a499d7de3d07387e6ec66a339af7b310c01b42ce92d44c7b3b31b85c5c36dc4b9a8b619176c5e99df2e1bb1da07b48a669807b7e78df7a67d042417cc621cd28fa3c52c6d91e1041e37b1beff7886ae39fbdc34addec2732392b5c3f9bf246190def2cc1a0906e687f2a9efc7f8b593af8ea9664560a00d7d200ce538859d51f0cb3e05368bc041b64a39f31b66d21b85ca1f6c0de520ae36e1c35ddb9137908b3fb1c54c417786dfdf72a919e0b8faf8cfea7f3eba1a235802fbfe640fcee755d003408d780a44204f898408730a6713236c596fef4f11e0c26d6246e4cc1fb6d55408cdacdc906dcfaf7897d0d45aa59be27db69d44990b35819f85842d0aab3048a763d9c1f28816b979d90644c065e19c8d83924d0077a89ed4f526bcae8e752cae74f6ed94272943a8b3eb8f66ae4a134cbcdce606e15b4d4058f2f8d915d1d18d9c8c64973512b2a728f9c1cbae4b4168a588b51c68dc18eef4dc3c9f300bb5026186109ebde50af249606058867126da63e6288f416d21d58bf0e212b3e8144efcaa11a2f5dfb416ef6416fa20cfe19b4ec7df5045242b17fcdb0c9c3b35d7422e9218755078ca2f265ad026f0293f303d0db66d5b08ded4ad95cbc1482342766edafdbe2e25205b575af46dbf8bb4c8b34abc71c70dedc994bf6c1e570dee350b665f67c1d462cd56e0663c883eb41a5e4893d4eee9697595e836a9f7f4c8f600b1717b51"}, + {"0000000000000000000000000000000000000000000000000000000000000009", "0108ff4ff2c6b0164d5f743c7deef3114258faf21418b04db7620801a25957d7cf4ad61056aa269673c6027ad6c02bc15c6eabbd971f9e47772a159bbc13a211c897f7efa28b132b60e5bf1dd671058162180bc801d081a163161a78feda55bd1572715f64945f51e702b76b4f9dc4028ce8b613e79edabcff666b3e5dbf296d866f576ca067998102afbae1dab5f1ad7e415350444576ca25dfc54fa7c8d5c04ec4a27d3635fc10010ce44297df42af23a31100f59cd854de51b9ee282e0b2e25b616c7a4c295c92457eb2e9eeb28ff8085159544cd985fa90d1aef1583283db965a18b7b32f91b09cd53a566aee569a3f294111e23a98acf3e6fd00823eec5e506a60116d115c6973f3c597d64d987620a1ac5356ca2acd5aa363102ac0a3da74e935f56c60a36cf0eb6dc27933b1e40cf505b852e381c3ea5c52902d9bd65139f493dc446a894f7ec7a4ceb1d047c012379aad572eedfdca74222b133e32574ecac3153283c3371621567cf421945baf842c6762d9a9fa9ba0cf06126cc96dc599127e27b37368705415d8f93a9167f758374a3de8b826cc21fba787c16579e36923101413619784795716e3690911f665b9322b8feb76028dfa4f81f0f80c8afbd08de134a843f734d3fae0f03bbf626a615e761bc9522097feb3d2b93507eb702597735e7e0706d97eab0f61687f92042d88877e3af01254f90522314ff6fd3aa6ee26a61afe8083f8c94204cca52910c7cc8cf77c664fef4d9bb6a87bcf9c20aeb6b42d41f232efe91370a16cc533a4611d8c7720e24b0ba7e0e0c6b6f1ee9f473598b870ffd9f3f2201e9d373931afd334187c72941be740a4ebedad81a117593c5c38ddf914a1b57d00a5ee083a39f1e211b2fcf8fc31e9781e0feb1734076d5c3c285af95e238403967bd61530a951d416570cad61da5c872376f7701bba5d0365028a383aef77df074941b16745abda3575163b260d8ac9fec0f55763a3e9773552d5bfdfd1db783632d506b45274293bfa67c7edd8d0bde4c2f6c0a1f66495c278efd70779da8d95d1283845bd4ff02e31f2d53c2cae3088182d9e1a2ecedd8d51dcc6c06c687a53bd8f38af7f3b0d79273aec69d197dba581044a0db95da9f18dcd191d48fa8bdd560382fae562e909fb4d6932944f4642bb371f0dc3303e31af23609f77b51b9c9e441a5743499e051a5fe80dffd514c2d53c653bed5f569b20e42e4cec2fd61016b4ade750df954daa0a31f17c0cab2552fc1ad0ec08e36c2453ef14d3fc22bb5d3e92165adf271409debd8592e5916ad4ad80b4d444cdb08f4aaa5d2ff4a743f78f19329ad1d6359148cf6cfc2096b8ed3aa7f39563f0dd42f464ec28ce52267e307c8fc6173eafb1a7bbcd33643a1ec3fbddb9403848a954c42f094230aa99ae562074a1d731c84cba55660dc094ee754c313173fb04655c517e2352613759e93ca2f7c7f0912bd365f094c317983230f9a0240f84dd3427ff37eb2c92bda8c30541e95cfdd23084d838faa3b69eaf6f6b1d8995b671f2e37ed1ecc0ed5933664af75505395635cb432e9286c1503ca4bf52d536042fb18a5d30a1734133a35396163595120384f2d3654c591b8f651a99d3804354cd53f19c9592d79d1c3fa8889f95e3acfcfdc346a0871c7bfff627c1944d9a768944a4d7de6df90004613588dac36a68331861c1195de39622e0b9c5c64a81e222d7b038c6a6b0b23d50721b85c8fd146febe772fe597fa688df7ffbeac151472b1a461b83c4fce290e9dfa6c8c26fa7b4dcbb1cf21938add0598f7c7ea1e85b7d6b77b06b1fcf9b566b059ecba4e84fb2476290212d8ae2956d791e453ab95767d19d0171b34884aa16abb4e9f34d9171716f763397991eea5f91df3"}, + {"0000000000000000000000000000000000000000000000000000000000000030", "007101ca838bffa899cc61ad66c67ad75ea9dcbb72029d7ae32e10634edd96a189922d6591c6e9d9458e0dac3ca884932989b5a104524b788635977b782194378932567e5e049b1f8d58fc177929d34872beda5701e72206d3af2853e452e21878528c2e0d5abc75a11f3677782118da7ff82c78a6417ba11a807cbd9b0e312e732f025ba1f8e50e84c76c60ba664cadbb7be27c6d4417d7711249dc8ca8e1207f3eeb2b60dae61b0324504a708dd9698fe941df4e8f1a5e5259f51ca41cfb3292dfdd1548f37964fbc1ece79d728858115f1762391c660fb0afc7e7522ad526cda50a9f509f263b696b99b6150ab3a451053d45b65579ff2d142e6f03cb4f3b1872e6a5d023d1825362f5f1ea2fd12d581d45e6c68c11e151bd2355d7192f9cd6200557af6c08a9f04656e739f3a1ba433965f39cfd88023e9285184d06cf6aa376e7b511b45d4837e86a70e153e999011fc88e21689233a35b42f2d0b6a728eaaf132dda22d125c121914d67ef31a66835b525b623c1b4f7520665dbf96bf0b2fdab64a4d7063bfcc38461fc786f2b1ee5c4d0123823ad5d02ec10220381ea83d97c590592017f88164e0cf50dccab277354ff34163b4b906f632c6d6cb63e0de6cf3b63b85c87c348df5fc52a28937745b06a6625f4056394121fff89ced39a749b449ea318c451ff10a25da5dfbc756555ecdf9415f702242c11badbe0117fe8616cd42dd3fd88ec3600e22bb0e1df9d0cd05b5bf583cbf13b55496fe61e39c0171fefb7bd6e41ed8753c53f4cc53a8e43c7f4a0832f2b023f20a4e1774c0e466677be770e55b93529b622d542ee838baebdab15f3a896a193761cca57721482812e8aa9eaa36de7b41935a277cfb254b3dced6e28e10ef4d5d053c5e4d245d4c5fc97a1ca569149b83c6a35e537a72b83ac95942dd5c3f276f6c19a01a1023d61d4da9ecc310526d09ce152658c35a7d7212209ee74eabb58f1534c5cb3bde671a6972f607df73f0b5c27e5434b62ddbcd982984eea8d918d220de135192e76357ed63f51d1e832657efc5ae96f210dbeba076ae5778ecd1ea498c1b2bbcd6a7545fc013198ea17c5eb8077962505d52595b21a44865b3e2f1fd8a80d4ccde731cc1cfeb57843b842af6b1d73e70c72e1376bee5aa652a3eebee4f489f2d1e385e648991e4d0a85f1cb5ac5e8df27ccd151f30d2d285a24a410e243cfebf8a3a91ac38a434503dfcc02dd4b1f1c4d87118f0e7a88c668faa11b228a9ddbda396da7f1c74714113f9a68122ef960ef43b6a7a1cf51feb33bde560f8eca542a0f9e1eda0de3abd7dbadd99387faf6ca18eacf4e4f5b680fc15cd1e2e6e6d62a95f9799fbe2bfc62f2f98fa62cb8848a70525dbceb01eb38123b2daf2af32a8f453bf387937f406c8f6dda0b39dc6203acaaedbf2938d7515ec5af3e57bb6a899477e4270fbf2b644e1e103b1517518aa5dab898d16fe7f7e80ba12c9082dea30b901ea4d9336935ed67327d3df615eef5c5a6995e430f3d21c4a6736e207ca0e8f5ef0b7e50e464a23807b495d0fe61465254d3e456c35b1b9132d659a714dd7e4012c44e5c05f970f84c04780bf0bfc7e7d4ecf350a2c4860b2f6d662a5b7af1a71e211bad890f7f43ecab223c4dc97d0221db130ab40694b47e2f198274f24bb52b34a9626a2bc15983920c9e6c0075cebe40ce54640f3c2964693a3817eb193887cc747ad316bf83ee84e2b67aadca3115f7c6f448d19680f6eb82459ec1b5127f74d006e78adec0840c5d1a6cc015a72999aaf113391625a0b54239a6e1223c764ffb114a15fd7caa4b90e1d966bb1dbbfed8123855692dddd3333295e52b10f2e775c012b739051540cef5200bae4f5dee116c0245604082ed25a05e"}, + {"0000000000000000000000000000000000000000000000000000000000000004", "007c3be31f93e408df68e20890e05e5aa6737e343f38f943aeb892bf90c170645dcf73d4be4c3e36fdec0cd67b6a1f8fec1f440df660f9d71b324935ff99e53d706e60ce9779ad08e1b9d0e9fa8dc6e331b881930d4005f457a6fe21b7647677eefffa6a79b2bda24d3ed3c2641d1038c2c0c314721a3c05457f10329b440e1bfa7dab48f93335e4920ad8596f656e4f4c444a11275b415111e70b620829e9a452b142f9c1f9ae7807a7136eea13da41f6d37082a975d28264a3fe06e2195ecbc3026508c3b4ab3901b96a8c3e5071941a18157db8aecaa35fddd2abc2e21f75f9e9349358b2962249520c7a5dd88368d152b61f1fd4caa6a41f99e10b89d9960f88bddc5991547253d990823b5cfa49322eb3e7b422a68e69e8e3830d85a45be2b101b60145160e17a2ff4e3210ed3e43abb5beb4d5adacba79d336cf1d40719aec6356ca74eaed56cbb629de55970802e220a37fd8304eeac7d3a8c7d34b99af8fde920224300c75dad3a29ce7e8a6157475bb6323917c621125f909f98661b0ef484772e995b8b26d8006ecbf7a744ebe75e16471cfafb6b9d04f578f7a91539e6eb509a50763d5d81faccad442c165e94aadd15356f8ad28d50f1556d4ab4cafe6a3785431c5c910023da79d18983e0afce50571e21903cf93d255fda554f966ea474d4c6565991f6b21d9c5ff65f01eb99b9ab2c67703c54a7ef7a73fed5501933715dc14acd4c32e7d71190d8267a029ba73e10f92a87e1c2f5a79d37a6e311cc815c0b78eaef3676725c946b318f5de76b8cfb760e1a4afd12d72d38aae67ca295ec62a89635a3fc31a9fb31a7f20957bb94da39a36ac99f1690914dc3d2ea6ccc3001afe0b0ad454576fce0545d01552a19e1f84a562591fb3912e52d25cd59d0aacfaa6fc96aa25713f2e948c2ac0b82445755867027e5a39f60da60178f4d0a40c20590834c1c26b2978dcc3729350dd395ca3acdc2c3839d4053614687a124600fa9340ae0334556fa4f85633d4cfe192414ed2695aa83b07893b4ceb36aa9f92fd65f566aa90ec42e1c722150913041e570ccc05d1d35cc5f06e6435893e4aded4e7ed3e6eab8dfce578cb806ca8632b5775e789e7bff92608f56d62c261bf1587b352a513e26bc4c6d5982ced1e5d6b35794c086a975b82be30c55f7755f43d453608da9b7381cecd167c6470bf2beb6851ee07782b8e2ff73fd0bc94543b8fd573d264ee719dd305cf45f626d0ccba78ca65ba8216b281c4e650f2d8d4197b0b2bf83b01fb9c35d7b10cf34e853995b924088f80231301c796bccb3ed8d5d0b443da69125deb725b9bde40073542916f97b98d5274a5e6754be15fa2dbd73c17d44b6ffb14be33fbf67432b973d8663be51b7548411cee4f79966218c311b4e371d4468db812fe9b35036f54d3446461a9c1b77651b6e61ed65a189c67580dd56fa0112058710348730e87a15de9d66b38f4bf037bf668df44248576f4d27340b6548687afbe2896869c5fccfce808f1adc3b91d6ae8183714507c7a9a04bd97f0de58372927bfd9624bda3f86c7673ec6f6324b467335dd95034a2395b200d29c9ad36b7c1efa21f5c29b42c97a8166d347ed7eda4c0f91249e449b2ec7564663e8b6bf62b664af2c3239e56d0dbb55250445bd3621cf8619e9b8c4c6dae96b49823c94f2971ec4a211155cc93d2b72742663c712c518b133ed5e27ae6f330d4bdde7230b452f97667456136c15137d37a21b589e54ae03e712765e2e343cc1dbbb56b5ae080d6e15c517e1e9fe3097d586e956e29b7196860d0d5615116e13a3f5c69301fc60c1badd6c0fdabfe30c1bba72919fc685ae8df0c999b84fe64e21536ee1148980eca45271cde552a403d679dd558f5a57c039"}, + {"0000000000000000000000000000000000000000000000000000000000000018", "006f5f4be0d72389e0f425859ab17e7a3dc73ecc3f3d35237419528904c3af582845ef9f4249719b0689191ff6a3775ca8f7299f24c2c1f0c276027b38a56852e52e03566294e7971ca6d47eff20ade851d9baa11e4101f43197a2cec8a045e266608561a5af7c72df38eba2ac83d0cea2d062e43aaad010299169b7a5ac455662a374ddd0978612e560c24d363d8de3106b8b4ac855c7c893c7a4e4c73a72967629bb197fbb767e063d036e89126ae1ed4f3ab53ee35b2fa962fd56df17d07aa6ee0a34745b8c8258b326cb50ce9ad65d9b29d7a3f43c969ab7ec1375058ce046137e461f425b2d7da9c08522d6df56e024373443c9196774d30c8e0da67e5ca2d99f04ddde142adb7e3e293cc33cde9a13aaadda53a31f6f739255b1c4f3681603793074781547f218f965ba45bb0b62562e9ef8417cfab9d94d1b119ec3494fe2c7dc934357dd5de94d614ebf542400db3ecc21d8bfbbcc3f80eb8587e218d83e9601ff17f8cf529c4a7ee4bf42824e786b99954f435352673e3cceabec91247315fd075490badcede833556e345e4b5be8bd99a36957df168a6c706d4672ea59bf620d3ba63dadcaa1be6a3a51d7679bab465f4bf42e2a2305df438065c36b6500a56848e66bfb9aeafd1e501026dbe6d210f734b909333a0553f3eb09ecf9fbb71fc853e3eb9d61c9c18f09eaeed5348ebbb11c8465026b61eeebd9aa38dae4a24273cb42add6e1b70f743454fc14c0a7859782fb245f5bd58b0efe3e9c1a9f028da775cc8710db94ecf2925e4937b300c45b810b039ba77943ee2ea1f59340d9e4150b5dfced791a0a03516fc28596a77ed25d227c106cb4f4e967127ffb15b311ba6cc824c6c5edf61497b4116dbc6e73c4e418bc8979eb63db8f22b123a15560be2b1d43be0c023d261d954e2c03799d7ca7baf55a80171a1abd945a01caad4bf246cb3f30cef222e0b429c729f93cbc82223d0f53b354211b9ee7299adcfff6bf18067cfbb81b662ede92d1f5937be1a3c67aa1b065da4930f40b1cd345a7875910e5fef6f1fb52b603e4d889ba7a22036582f88a47ab46a19d1370de499f3e53d17deeec3b8e2c7b175150c90b051627c6d0a152598a7b5b091ddc9de18448f0310c8c958c9651643a6687d71d3d2d738e04d0cd9010b6302602bd7b05427f25d7adfc03c0c48501b71bb7d8a1f4d6e2b89d6e84d57d6a5a3dd6f2c9925731bb233966624a51b0f606c3bb04c80441a324873b331dda5f9317696098f55fc6d0789319597e84fb1986b1c3faa1a73892f9c5e2947a5c9d04c0e90ca30e280caa152064333e83721ff3f6ba2a0865936779aa2a6194e6a22c059cd9d9ce61b4cd1b0b77997c6143bb08604f21135431b1792e5bb704151585729b1e20ee6993c8b5a9b6d53a4f0bb299a3ac023dcebf8f26b7f3b30361df6ae3f56381197d23e70fec353bcd476ec8d331278746fe66fe97a83f1c621f022187b96a5265b40b84e89ffbb542a526d8f76245e2167cd15aa207ad95b89cd5dbe0f34fb01ff32c0536c3f03ca1a50b6fc09847154673fe76b05ca1cb2c97ef7b7d610e314358c3b0647bb445792bfcf83f0afd1d3a605d011134cfe2d746bc75edfcc0b7f7111ca4e9cff5478f80ad8dd2e645b7a4cb21a8da7f26066d2a8ce6c26fdda457354ac5b504018b8554efaf4465e4fbac6b932bc37da82cd7e9450e19071f1027218d5d220e498a82d0f122c179ff8b617f558e09ab7663d6b17ceec0eb7d078cd07ffa93bf56badd285b0b757890690bcadface5016f8619ece68ef71fcc950e1b122e42e444edb118939326b7c447851c5f5d5b0c2ee7291957d9393c2cc0c3c116045ea107dbcb405e720b974b18ba49ccc0b8a673603767539cddd7b6"}, + {"0000000000000000000000000000000000000000000000000000000000000028", "0027b86a64cea883bfadf2d685780a4a1fbd57038b0a8c0348655c4a0122abd1142d8e64c8d964f0c545177fc7188c9457befe7da612e4537c6abb8a566df643a78aa62da27f035eaa557aae33336d6b6d9bf5a1022fce4aefd6514ff7ca34e90a75a315e360d7d0dc141d0b4bfc8a72e3da6464d31edd67dd3e93b932963b5dde58ad3580d1f8e5e72078de69b1ddc0f1536b3ce2fa8d70d9cddf86cbf5aea8bd8cb2676474f58b03a0d4ce188731ed451691e44954912ce37bdca0134833cdfe6a21421943e9461ac271cefb520adabec0162e3277d9cb3a50fce4018cb61487b54bf41c701b275b778b338ecbd8dbd6957101efe621d3f17b9d3d0a12a65ae03b6847deb5e130d6450564615a1f9cf8175425c98d87193aeb57652101e8d565b5713cc88e16609d7926cfe552f84ee4442ab7b4a95833bf03f32d8a7bad06132388dc8c273166fee116e47dd740ac011002bc0685dc175c8527337b55641e398bbd700d08501422fbb3c00bdb6a0368c1e8c41cedf01c91ea1ccd593ad0505708bcb192d2b83a0d3143699343b2236d538c886a3d25ee0604191c76db5d8be93d744404e1b327662716dd38e4c186164a25aafeaa1b61f646b91701d63c7aefed898be8f3ed3d8f1a6cde2dc7213bc92d0f1a90774340640e02d92e8d2c67fb823b26b987fb2da02959ece354d44675afc6766e13f95806fe82407e4286c4e53d636bf9c0130544d833319b10ee760558c7d9d9b580382ef06eefce823095bccb072ac2915f5431916739a3e6afb52092737c7b1e9b17d7b96a0d46523f883d129d86d05375c684f839ab0aab3aa79656d13fa588b0ef5137c354b2f67adb7152463a99c0d820d9d4504948baeb5322e0877a164d31530b9c524d878ea4f15533ea4b065ae604f934473e27ac9aa11d1453a5b8253a5450fd0ba80ebf8fad01193fdd9d2854b9b8d2e4cabb37f461cb1d8eb9090324f8e8594c4da55c8f92e6af7a9026c1237bfb00055b3e9b148241cb91ec3364564ea439a2311f47411d77bceeb80dc2fd6d5582d7db7723b994382d7b41044f96b14988b1a3d418d87ce252932a8d5a76c06b29b3a2abb0e3ee99cc6c7407fdc21d46ced99e2f020ae144bc824ab4af55dd227b56cfb77a13009e370917ddce992c5c5743ace012430d7eb56aba1b15dc3c0637d6fb99c270e672f526203e393b29a60dd6aa1a38b4fc45a3ce8898e42c58a138d43b7753cb1ecb500745e45675dac219f7b0281e375b4a364e4dbc0bb62b3acc5e9b4c3a8ca823ea56f75fcac6cb6556a7e80a1264e343e3224569ab049bba61b5ce4b40540236332fac09af27b9e96a9c23a83e7e26d9e3611a356513a6bdbe340893fb1bb072d9853a88d28c4d777d5546af355c08ec6af9bc7e155f265fbe571979bdca480149d32d8c598056cef0b495a6cf309d95166d9a4505d55a3e6482d1929d0f3523b738433fd883bf3ea81d340e6263203f2590b51226b03589f931d9d8a2543c7aef6760916de7006f33f48b7cf22a3dca74cf350d318bddd95e886dcc5fa43004b2a5cd8899ee991d52e2160be49e2081bd6b17f25a7a64a21a8276508a41f17fc757e152539422754b31c8a0fee9f69da1559a57ed3bdd6bbd9785ba3b4bb05df7734820fd973703e674e4f3ce5e268aa8021f7077401612b4df3f7f18722bc7d19efd23059ec703c0669cde1bd71e7e421794935840dea4d7c897b449497cd9037500beb3642ceb067b8b358379fb1885b1dc2f023d7f642ede480663862db044e073f990659891457f7a192fd6faf31372678ff369c2efac7e522e2ac1249792441ca25b0721349497c7aef9b558f22348421c9e97f83d3f0311b7a1b8af04aaeeca0987dfe26220c9fd71742a12"}, + {"0000000000000000000000000000000000000000000000000000000000000008", "00a252f67d00340bf9f030ef64ecd502a53cfac828403e6ba98c110157ddd7da2f0267b7fb82fa3d98ab01c886696dac2a27f13520ffd5200f89e630543b5529946cc4b4254bdb7ea1b3a377da2bbd88d330626a10f7a9b785045ce4f3b276030c37f31a09e7bb4f3e20fa6406cfd53148af91e2f5c7ed38897c623900791dc09ddce2907d5997f1c86143e9a33701349f724e2eb8853599e2801f3170c4e9cf6275d24dc01777cf00e4f9a307d87d3d7d1b23b48c5401b5f7281df44d0854afe2ab0435add05a8351c751e4759d9cd04e340a4157521ae16e074c7886e6c1ef67469a1fd5de600c523faf146f121bd9ff15c97341a9ca08f8d9b3620490dfd9fc2dd231dc58b0ae9d5da67ca921b6cab20c7376367a541175c3ab068c2a44dc3ecf301ff32d157673e54fcc20f0c2f222ec78445a320d937ac0a74ac04bbd41d331d2cc6dc6c3fbca772af3a977fce103a4182ce252b0a7aac790bb087aa02926944f4e33317c72539fdf4ea77e30a75688e2f51e83d73cecdf080372d5b2a81e49e8a2f0aad69d0554c635f9a23527f856a8362c4f15ee3426d44abf00d5cc1c5da0552d2e8e3157dd8abaee35e337852738ad1a8e8ae02752db03a4796c28396d31c5a152684a4b4942fcb73b312ceaa2cccf6fd37b694476502b777ec151d671643b36d56a4a0ede41059c053f513222a605c032a93703a9d1d48236881bb4efa5254856818322d81a39f012420ede7bdd677dacc8547949bb32cd5c2f4c175f23612fcb469771e54d1ca3a0b3f8aaf2024450c3c442f6edb5b1d5817f7f6ed8f944ea774af1ea1d055e10fbde7d206d9d3de958864cd0caa065e7407339d81762d276c22553dbf74c43044dc1195e0976973b0a1e461166ea4e4441d84811e973918bf1c119fc4b912d0e1e9539180fc96ed722f654e5acf33ffb5c575700bcd2335926824b5766e1be7818f3d586ce1b07da06bc8490bc899a7321dea0fa2998ad573e2a5a144008e32a252fd347c5d22dc43d6ea3af9b988ddfcdea0c3fc6524d896a1afab606aec2d63051beb038a6b32305dabd66da3415d0bff2d959fc03f25231bde7542b8ed7cb29dc2481790058cdc1e72817070cbab04f24c6ca54e8cbf09b950b47fce7c4b7fa2ddcbe669865cd660eefa3307ff8549a8cc47faf22f9f09a19b0050d7e4c3b271425ff9e55a4275d66b98c633e6124114e74f697b04d85ee0073ec04e10cc367147c22552ffa93422b181792f72483b629a168fe7fd8f7fda37ab93fbfc1e582873ac4e920d36586069eadde8c8609dffd72cf0fd864f49299a50969e6c2ab03dae6b2276c1961d25e0c6bd9f233dc4e3cacce685b371cfa0f8e2ea7f32b8e8bfb54c89e9ef54b06b7c29e9fc433a93acfcf924b05884875fed3b6e97e72d4941c85035e229cf2488bfb44a2032cd3fd0a277b7d7e438d1a4e8615c6d8aee310eff435f6fddf4eaf30bf8f571e18dae0d396367f55b1e442d258936164e5353d48295c454b2a900ad1354a72d69d38d9c14d54d7881111e6dd5b61dafd9b030702b2b6299be57c761b86a653b79e35b9671a7fc2ee185d8a522a8e5cd5f3bb1744cb327abed59f355c82b617875a664236b03e78c9699656ca3aa453c76c9b586834dac35b202bdffb5d047baf4122ef260fc0f9c1e2c35a4988e4896fe722432786788e521cc92cad952f5c69fab2437f19fcc80cbfab9a32e5f89f81a76938aa764b97de6d9f2fa71af692d3e17db64bfc38d2ec015ca13971135858200eb91fd6f50f29d7e264b2449a2f6d3965ab9a216b238029b1da8b31d66b9693b1c2e1d859cf4290c70516f95741afcf00490de1822e715bbc168e66df6a286e8fd3cbb572eb31c9979828f974a366b4a315effd"}, + {"000000000000000000000000000000000000000000000000000000000000000f", "00380378ba7a2737d52ab5c5f54ffd6987b176275e1c90ff424fe5c4494052a39e5a34edce3bfb7acfb71f2fa78d2f26e13f8965340acb2cc85de717d7626d306ec22b8d94868f9a2815302943bdee2d6e32a34c008c6bdb2381e4ecbd3c1696a05008ffc7fa1f278e2bd95f7d720f7628b735636c91e194f639fb5410d80262120a0187a00467cfa1064db1f67a06a23e690e27dc8ff57d9b7285077024b9d0465e76c4ae1ef1460540c17a7a4f3bb88b193094a06d87a1d90a562dd70ce5cba8540e40b5b6130410af3efd8e9a9bd70dd3068f4247bfcd044e760061c823ae5c7526ed5fbe35371c8a5b80e9e995dfe685e0664cd24d7e7475b45b099aa4ea599297f4d7a18842c0fc26bb2c6d9deadb1d1403fd54d4bd7d9a873b422360b92308eddeec872910ca3268716307c85f84d5a1dca50aa5a75dc758502c0fa0179fecfb7c565542357d431222023eb1a001c174ae1b0aae387c4d30df5944abb22caa93e15f4b63cf81df53af978ee6b732387faa064357b533c81737727be767b615b765133bcc4fd3a2b2481792bd1755ddacf2a93bed8768f2066e96c7869ea197bd8202aa2f29122ac751bc0e68da93daa6a2d0fc36921821cda1dd4971e077cab0426272bb2c91fce514cd221f5a9f911d54082efa8647de2bc3671eafc7be9a222085ee278f257777ae6f5487a4723db1b0dc5839b809a32c5c03534cf2cced0220f03619bd632eeb37fa1481c590a530d215950264e7ffd81e56e0af788ef1117fb9297909cc6f3b0d23d77ea1270d49895d47652812b6bc4bd37a3f04bc054e7f4cd3a9b9be1b38c419370a469ac6d6a13132f3ce782076817acf4f9c9545e13d751ef1ee29e1e4d474634ebcc9df581520e72748a472bdeb0e67cb2ab27a71525c5f2dc55bd72746d0fc7150a688d7eb2d699ae1cd27bb03bc7e2eff00bb4ad7d74c19ff135ad4b5cbcf7315b7f39b81473aea96e9c27174bda3a7357cf16bf84e776c99583615927cfd1e1c9065e3c622187a4c126a279792621324b83dabb3d68d3b1497a423b848f296d983fb43bf0129f6af651b1471b71e20cbed33d0c443c6b7115401b6ccb6f3a9ae9f7e8e642fdd52492aa78c5aca0c2109fbc451cd65c301b04438b64c56ef71ad1fd2cf2e35aeb3d89154e9782ff5423ef29691f164de69ad02546066cb22a5592ee3419dd06eb4c47be3e76e37042ecbc00b03d318383211bf842f307b78c2bdbc1e0e5abe76f41759f2ec9fb13dd53b426a612cdfd234156deb1f1407db795f3b126e0fc47f98adf493bbea03c895048fc16cbe8194b6e40cd3c45bb0255e01e61acd8793f6cc40569478a8a958f98757a65cbf92680a81b8ad6918c7b8ecd2f2cdb8c198619a6b32b15a0cd0c229dc56a19b6e7ad85b53fdc16e30c2b7f64a013da7f54e6c4b798e94002e8c9a99cdd95cd7d19b2394e728448e485dc694f4e0183d852a19c4d87e19042d8ddfb12dedebfafc66d6c05b40a9e6ca3d4ab11293c0a781cddcd5b3b785dbe1696afdce68d9a59b02b0bd81a89748acba9ea993ecd043ba931ddb26091d27ccb22ed4b37de263eadb1871f7e2f424ffbce803f941516f0ffa72b19483abf9bba7d99cc5b6d2bb0f73e39e4f4aa90f239b313d2fdc850e855075fe5e02f839efe19c4944fb4a22f0a42b5f3535381d9e740fb0c20784a2a0d5acdad1c19dd1b090974557adcb05e0f1a11628323f6b42e462ec7a8a092290fc9c4e180595dc94a7f501dd4b96a47bc6e67dc80f703bd4070206649aec5a416a1c651163f3aac34f553d9b7809546864e56bdc1b7d54c9081d5748be5b08d65bb93396d1d1ba58b992c8eaa71c515f7e02440394d5fa3d60820ad75d19c1f06ef53fdaeb4667f10c3f9036"}, + {"0000000000000000000000000000000000000000000000000000000000000001", "001537927aec4a13a14c69088b53094ea35d7d0df30ef963132c9bd3954cfbc339b5e68110f45e1b9deb0b929e2e604715e7b53442e5eb2b2ff4c7b7dd33a10d810b80d226ad43b60ce712c9b9d6462464f1819b013ce20cd48a1e8595bae5896dc2b04a8ba95b73e80a793aa4a1df78cf4ccb6375dfc8069cdea6bc6961026d9d3cbaee87eb9c81a36f70a51dd652735a810522e80ce6cb927129beb02481dcccc7b7926a3e6ea10112493b5784632da024262cd3695eb9e0a19966e4093241eec76589699298a319e5b45d29701ef292330b4a5bafe7857a3fa3b5611f1f097a3167c6316a021d1549ba70e43ba7eba3c22da8541a476aeb9f641e0936ee8677a77dc95540a26b6b20a725fc7bd541e909b130d1b4d4b6acdfd7130d1af9d5b4fe92b51c0714a16b48dd5babed6ade66598e6c95b1f0397c63dd6f0ad47d602776e569e6b7a39dce10860b52bb3b80017418af928cfe59c0bfd867a64a073e3ec196dd6268a95610602f1715d6b267a6503fd07b79181cb3ed03dccf1523cef2269ad357618c5ac6ee14a736c88805d7322ca78d0d0099cf8362c46ca504ead910d8880414eb751b7cb03fffbf04407df66e7d831891e75b0de846799111be3f3cdf2566a9f9e67f3a9afcf9710a54bc19ef50e1d984e4b8af57dbdccf129bfa27ce4aaceebc5a5fe3e3fb543629cac1dd4d94983d159f040aef3ef01194a96d1014053ea0ba5ef007d91bd52898a44e9aced6beefc2351f5bf11d3741c09ce2ba0ecd132589485ecb283ae1012576a770b10af8ccf93db8f2d8ad0f7600e758048afcaacd8e8571d91a90093726002a690a87e93a28eab4f164b6f93c1c6ddf19fe8d9beaa2a0516eba51e16ab4b6ed361f9f43340e3052d7e6d2fb66ddc78a10e2db944a94e6fbcab837c767adc916a36df75a74492776b7116f3ffd695802e1124fca5403afa388137a913a85d9ca54f642b237d4135a75554c74ace8858acbbfa87e032038f9de091ca91a1e049bb1a95486dc43eab395fe04d43cbd1d2e92ed559a1614e58cc4dc3871f3965e4f5941290ff409b818ccb2836e198a8a2f6f75a7b9db7e59cd22b4b2881127a9c3acbe1afe4ce6a98b0bf67d701723dcaea19c1d68abe739554d53eab7bd8835708a9d7d9c7681cab94ffdf38758196e52efa609db72820f036d44f0d193cc1cfec025913168e992f8e29edcc41d32eac2f3d5ab1bb90962a4f5e901a502cdf6b568042edae57550ad0b16928239c8d67a414a082cf8b51fd756ba84c87fa66d729273b3459331193e0ca73703a6e01daaa14bd583cc68e1564aaec6c0637dc9730ce33cdcf64c05e3ca06356af46ec3fdb4d4315c9804c6cecdc9fc53a9f688409adb47e6ad77594db6001d88613b3ad911cf26cac5205ef1fb719ac0f1cd8e036c0a4411df3b45f6df77a28ac84403ccf1fe8e7a331dd236a75ca3d51cb744f1212ac95583c85f29b021b1a7b2574f5ce1086245d59560673a3513ff87d131e5fe62f9189ae346f8a3b2ea38c18224a6bf62c82c2853cd0a4f0e77e59fb3c88c206772583c770c1848a78ab00ebb8379dd15e4a005d0b66616b51fdc5e304df1bd1de491338a29d47994da288f450cdee89942706e9440255e4b7f90f71a7973c3e2a8df7764a709c6bf09cf49928d29f8413f73d8685144043b440b0ebcd54d0e0ef0a92bbe622522cd7c2a9175f907cd211962b2988ae64f8267b44c816efb7a7464d8bcbc3132a3e7d64ee79f04ecf45069aaeecf19cab987ff0eac70a888c47d6af083b2940c9c17457e7e3043cb2f50a35fe54cdab89ad9936e19e49a3e86f47d520c312183f68db395d3a858c34d07e50e79320370ab4431cec25235d1edd1caf616cd1dbfddda38a11d84ca"}, + {"0000000000000000000000000000000000000000000000000000000000000033", "006ae52a88212fc3fa62272a6e6e709793df7e57810d84eb2bb30add30c1dbd61bdf3f114284627b54a6049ee8366a492693b39705ff50dcdcbeba4e7d235124e8d2b57b5f3f33fddbf3fe0fc9b64914d2d0d96f0b2fb6c16bdcbf6ffbd6a5f01f6470d6da8659ae5c0b707f6cfe32402deb3c5793a1bd5cb6b0b0f6008f17ccdce31cca05bb50a82212c3e153dda6351b45751eda365a511456f57e52d325b5df7ff96a0bfdf37e0209e968ae8c6922dfae55a20d5e2495fbebd136c52167424a595fd554feecc8552cff017e629fffa949093af1725f65eb1d71cf15eb1ae1745191e05a47320c2fddc72ace491eb049b233c96e1bfa0c107ad5c4043e749223c9cbb95b24a64197fb095f1a10bc011c3223440c476eacc19e2906e0614f34e256fadabd810af8fa5c11eed68d7a1817076e5a739285f8380c180ce4b6b8118bf534f47311e667120a230b4118f0be029eb095d01a458b860d72067c209d29f666fe8d6f1861a3aac18e3af4fbe1c6f03d3f9852810c3cb6b7046096fa098803ff9cf2f16c61afba10ca229d4356121546db4b96ab38d627386d9948f70a241e57664e042717d5d18e6e09720273fb3fb824d1cef19e064426a22f2016ed48f9926da4bbb3376841900e7c85e9185923fe76c7f8846d2c74b259dc612d81cfcdd6cf39ccf63b4dd09f669c03945dc2b080c6319995870103d9f1de28627211fd4a51d9e1d003997d6b91434709871f29571f8c05dc1a426259d8703d86135a318518fb6f3bb90fde6f9e51324d184897a358899d137b1bf04205334eadccf921a208396dca795927b48c8a163fe409b557af210ec6f304f4ec721e7459bddf284775b7f8edaabc4b587544fe59ce1d931c515a36f11772afd2d529ac796598d2c559bac06a36597a06d123cb815fa4491a9cb94feaa2ecf6ccfb105c5c31ff01e562da1dac71e9e96ef04b997079c86070f15282196bffa3eacf2ccb0debd37681e813f68cc51b47ae1886729cf5cc4fc7b18ae60d55c23421ee38b89fcb18f71940f1d20ddbc518948374e3f17df1dd5f15e908ffe16dbf129ef33db89396f1f7600a756433d69914667cf26745c7df520903d1c3491d70fb42ef7f7c40e11c854978a797e431b53df55156e6d063df01f64612a5d375ddb01b032124ee7366d9fd5a4fdbedae053beb5302e94fdd70be31a9ce431bad3df9cc15694ab3bf1ceb641e2d3695c588bcf452576e7add60340c517a715db3f173f2b6d27ad59dd49203501f9fa92b208d8fb9505f56b2ba55b7e76076435e177daea6079137329c87a4c493ddf6b69a7fd9d632a07a0be314ea86a0869a066d4e97525f445136c9d6e61441d41662dd0d450e97050c4ab1911e5d1089c3a8de79c224c39eebae4e64c0c2d83326f4d61f5d1aefb63157034c5d33d8fc4cd7f8b473483aa6f5a671e89e1f4d5f33935c7a5c0e6585c329393c72204e5f459b29bf07457df343071e0731fc93c1a5d4fdf956aebcb7991bf62fc4b217b5f4fe319700b1ee826e3a85ff4e960658e9b93860d303d902e323b6a77aa113951aaa320f8e74a2ab3327cbc861c250017fcc2572cb11af0f1082ccafba358ed7ddbfa1a9ed3852b11e8d349af4459f854f049184ebbb059494594ed5f214b871ab1008fa73c1e8c258390978f5332f55537e9e2257c5de16c8e443d12f646dba7f51f0143e5ef5141231e5e21c8c521f285fc7cbfaeeea06a75926e3585a7ce65843e96fc346257a2f5ff6a491833d0cb656ded2efd21cb4fdb36466b6d1be65a9643069011666237f28cb248a1b02bc618a2b6b91a854ef6b66b743487fa0a73bfdcbce94e78121961f570346dbf0a9d729546ef1654abf3fa65ed1fbc9ff57481ddf2689ef15d2755a"}, + {"0000000000000000000000000000000000000000000000000000000000000076", "01a5ce6f920250c3a59ef4a248ea6201bd1e907346149cfcc5e5c7ea7f169c450049515bbfc345df46d209600d062c6b24f5670d114bbfb7f0b867cafa7fbc0e214291a41982cb0fb791f559dc6349ca43f5ef2502a937b6abd82cc5d9b52747dadf87c73c713aa9fa0d480cb4d0968a0bd36303c09ae397de9f9b1a621325aedb2820eb0a8dcad73382adae8cab2be5395f88330e23ae9b55aa5b4e2c568c7ee4db8ddf4133abf209f5d54295096d53046f80c586e78e3d91bcae5f263ec2bf9022e853abc080c569f9d53b799f95f881d80f2387b15fc89d9faed4128be0e30250e3e4b6349a1e732196a610dc429460661101d47401fa2797a0cf104213aa43e72bedab5c38c068cb7cff4dd5fd430b197016a12c927960f07d9278bec53f40f3a3dd38cc136cf562300a6374fe5ba29157cc018765293b35fa2e9a5609d4de7a57711ff744c7400e01eaf7550072031d845f7a90c0dccc292105e6172f9c89edfa2c4b1d3892efc559835afb6662d753c8351ee91a1d67e20c1ee99b034703d23bfb60d90c6006e219bb1b85260f926a815e4585fce750a295156081b11f909b910b13be41e167a68bb7bbba84697b4ec65183da119cd617d31adaab15c3cb34ff96230c7653558f9e7bd3681c808d65994732739a63024f873c9102175998d2c35896578d4f2f5b937b90c7e5f743342a6ab55f2fe40cbd5667a713aae89d5df48a387e6b56b66cb751063d19b4401011065d2728f8d9dc786092ffd75fd7fa32e0470cf917a953872e53a42a6eded5384eea16f73ffd93b6c0e59df92e56f4a84cd75df2e5c25f6e0810f3b211fe623ea57d6499e8417c8ee2a4f836cc31359eb684d679f22fe77d68ce6453a6fe7a92bb40651f787a83a6dc6473af674494d0b8742935d01043152b4ede767ddc008db54d8520a5aa635a1afa18e28503fac5b9c54263c4aa8a12a0c53459adf5c852006d0bd55d4fb774dd6dc30a07b389e67f1fcf43ffdfa823ebf30d22992a117be7aa1e16da7846d2759fe93163eab4a2d5e608eddbea79635a7a3f5abd127980961d56ab09aab05b0d919512d1e460556741661a926928a746a4c566e0ad5a7c67625c7ede2e06aa5bc51230b43b14d4f5bd8bbdc2f6e47dcbecc60f6e730ef041e085d53ce863414596f52b7b65b1ed89043a80ca03fc0dfe1f586c4be930554b74c921af49ce7c948f10da388f7715a488b532eb43c3f1ed6ae34b39fbca0712c2e206d91efbbda111259b0d2c1a7f4d53fe8c626b8d4bd75c678b2eace9949c769852e08df770280b466ec6af650c43a7d8e73fd8768a7eb47e5979041ae605b889295ec1beb8143766310addcccb93c2d90b92abaa239e8befa78270ed8afbe2a988287de0d921fc157faca05b01a675265b36ed5302b495f87a5603ff26982255eaecc294f19addf38cac71261b7e8e169056127b20e6f7f282b763b5c49d1647755471b30dd6658b8009d92367e7a5120cade449b6652ec6d2671d45023e6c934fffe0a6a17d63d0523cd1df53f4055f7daf4b8d1391149e2854ae474122201e52ca211675fb1bf386643d6b8ff81990fe8826bd1edd164405839cd2bd461fe7282851a8fcdb8b815c527a065f5ace57bd66d87f3b9f20c67abcecc0b76c03dfcf8c07261df8615ce84cfcc0f50617ddf2f9537499d0b80ee08e995da42d3f5316737d67fa6bd9604b962e5d3317efee1e61f7d19e3f138f54ab98698558f100934e5dc438cf59baead06c69fa165e0282b6467a01c609aeaef68242e45912eb75b4087000c1ab63f1cc260a87494285c8ea32bb98116cc1c2ee4df6ea7768891e4d8b41d5aaa6475960651d29752949829072a6872ede41937c0bf29b8500b58f96dba3aa18ec71947e"}, + {"0000000000000000000000000000000000000000000000000000000000000021", "0015e684091772537476c6496bf9144317c97aec631abb2c9d7d587155eedc54922cf3a68283009f644406bfe1766ad351e725d5946b966c82b942629e882d1dde7cc30ce489419c6b12741532c910d0df924acc02a683b3952bc43de944e0a8c21535ace1f1493b6003aa91552c14a33155d1b62dfabc476633e67fafcd0ba41dc649887c119ed7a2e15b242f561fd21ae0e615b45d0db6c87627c20d196284d512736587bd96a703d4f3b57a168eefd2d1b5ea96b8901dac0afcfbde4d271fd1e5548d69a3f578a011f4b76b35421bc8ee1c2dc4c6b1dbe28b0827b602a96127ae0e6cf43b8b25462403109e43ffba58c436f4aa3d190ee13b8ac709e2f1eef2d37b8b8f40a19f3c2fbb8f3d861cd4600f07812641606e819a75314c22651e28d5c90b6fd01b87bb185d177a59301251f4e44c9d36588c193ae93889554f25a378895c94f6e064d07ba5eb85d913b3023cb638207bcb47f339f45d35a785d63b9edea89e0b39916b8d30de1da7da811a6d5006a93b305256a7043cef758c96a52aee33b2e83269dc354c6f36289b2d46abb38bd356f5fe9e9336a3e5aaa9b3b0fc00501048b9997a8a0b8beb5531400e6414ccfd1e4cca417468ee4793ebbb0d804b5926d55fe4eb6761fb8a3214ffdbc57b4cd8135b4438c223dc1dbe7fa8fbd1a11afb82ad278843699889c1e8e167d7e9ab6c16945505eb8322cb118740be1c017ce88e1b992c81965fb00e3681dfe399df7d82d5b13d18b0ef7dae8c5e3be60a036fe80520b0d332f6c0ca05d84894e10f0a67200a5f5d6cfd98325aea60d1c1832f83a583ad5caf4d10c4fce43d9395e969d9f281f29621212a51bed37e29bca537caaa9fd3eb66e738d0725a5a8e403a06e91c5cbb97761e7ca71baa18b6e9f5c37a7d3dfc38992248cf548a0a44586dd223aeb7f06b1d2ad08b414e005390ad811bb1b19cadd9837b713282734ebe0d342330d29ed1160c3efc91c6fbce40c1267e3a77e99525c7df540edbce89050522dec82bd5ba1ef5d623ac38744485016444e7625483f904ed793514ef1ad8c306b184f2be9a9141eb6b54633a45bf1dcc197a07d10ac176ac1d960d797492f80c17ee6bbe4b90b45d33077225ae12cb4a669941037f1521ea8919adddf1690936e48289211b8b84e5e41540a876b92e0c9fcf230a32e078c0114f4fa1dcc139b675a2f5a7b3bca04d3c1f1a88586f1c1781170656dbd8b3b3214d5f18822a56167be953feaf39cfec043677e74f28ba5a9efc3bc234354fa214b7c20e44b4b64a22ef2b3f5b95460bf83cb795a3a11f25d19659b8773c571438d8b6d7231d238957528b1b8887433a2fc7ee7d447fca31e31788f737ae758b1db761b26a92f228f999386cca9820005925db88f9505f95f2ca1be6ab8cc05cdcbf5d016eda0c4738f3adf5fe70505811742ee8bcff5b9a08c216ae940749550756957088db20b9a265bd4f291d5f1f9c1918e52cda1fb7fbfd5346f6ccacde857229d67a3250255f8bb960b5c024530d061582d1f7e7059cc147dc8fbda4c1b8a093676abcccc09e28dc534d7905507ef58f53eea785d691e63b11960259b1a20c5e71394b9d169b35e532c88f197d99db5d0f2639236df5c9474c40effbaf28c2976765ea5c3d7ef4030652754c3dcb9973e3f243673fa254250a836d3b0f2fd3ab7a070c98d3f75bd521c8f46d3e87cc7eb6c11516ec27da0cfd4b999a9575aa5b8142bc7b988ca3160df2c332cfd921a72211f2f4b0cfdd05aed80dfa0d15f6495bd6f1c3ae0102bb442440da31797c1271633dfd6a9ce473638ed91771c9d54a620d6d16cc3718dcc41791c96f1a9f2542905439d814cdcf2918942194296eef5f2eb1d0de52fbca361a760c449e64e4"}, + {"0000000000000000000000000000000000000000000000000000000000000053", "0016b867d284c7e92fe6a0fc1acd82495fd831964e144b529bcd6d320db5d7e22cb6c68cf224147e169e033e41203b4dd0bce12b41a530314eb0ed226d8b822670857b59124a27e206e280a5d05dbe0e66d8d54306c94f65c88f1103af80f5c2f87c4ee584d9ef864d075dfb6d488dd91f7e3c62b8c24352b6667478228d192c599b994fb19adff6128a95fcb5bceb9a4d73653acaf22c57669f41a34be6cffdd91fdb34afbd5f6204ca743a2f1d09c3f82a28bf25c63e6e5ed8340bb71145ba998bd6718bfdd5f39d91f3b0326f0f78145925e60c9c2c5b3bcbdfcf83853f3895d18972fedb164e325ea30967999746c738f5cafb4c16561d79d1b90d933ed98765ab7b97f45587fa773f7e2f11de42cc2036855c469531e54c425224b74f546560a65b0b14163352999c50953d9748f1fcbe3a5abead61ba67896c6ac5aa21a5f38b99501823fc4be4ee480ed8def2003dff49ad40852059cc518928fdd57eb28877182301f1d97d0103b2587ec1463f5fe8ec0e36ab1c6a720d0fad8f63c3d34389e7f59e967062ed981b71b0ec0eb4095292d1bcd1b845223e6ea570ccee127a970e00cb643e154ae0e4e3fe67e25fedf99b82a4dc82c30313ffe16bdfde77300652a56ac50c75ce35cfb5611667be9064c6c05e9c05028716d6aa7d870e7294362aa2bdb33f1bf09aea2cc57180affba307ddd870f105ec6e64732865e58533c109817539adcc3f398a9c20fc1abdeca05333b256e27b1b7d83fb7f005fca791e8739af404e159b7020930915bd37faea46584265544307791a3330d1f395b55203fa1f8a8e3334a0970674ba4232c6dfced631b104b5fa95a864acbe521c07729148a32f39c7fa8b834661c7574cd1c4b9e4c60e657547be5aad71ec4636719c702f7a25c53498221e1b2f6b07c8ce02ff3c836eb7573924efa2daf51201cabbf0ff650745708694e51249f47694c4bb1fef12de650a6068433950d08245f6eb430d63a7d7808e14bb2d8fb01ee0491f3d553226721d91ff0a3492951facdb5653a66f39be26126daddefdff2c48bd2b10098f9cd761abffa5cccbda561654a4e2c894fa92620c4ecba87403eadad853c8e75b6a7b5358437e377d25096d6e1d188b9f47cae3f30541e79738d21f7b6b2614773dccaa545f859ed32513f2b4267199f8e5ca03a16220eeadcad7f010f48b5f32960b54e29dfb4f3666fee4f48ec424b72a6870bedb653684541509ed215e66ed2c5295af3796873b315ce76ad47ffebf6b23aed5a27253f8cf58aea3f6c2d4450537a6be4c2f050aa24088f29a41c1fd41b420a8f15e186d58eaa8305bf473c32622b1336e3d77026c7faf7f8ebc533a1e03d65d9117190aec2406fbcfd826d2a6fd1ccf96257072387e5c52f2faa178d6bfcef7f7897fdf753b02b878e39880d0e6c6bf32e21ebe9b9d9d8b765e980738f7d78587b8a9a3dc919eeb25b80d9d46baaaa71558977c2268e8815aadc6dc2efd252ba44c3ddbce3d8d24be4c5a9f6982f7a6679e486bd345023f34bb09f84dc60a0a9bd0afbecbf2b5eaf70f15eb7b89bc2c15c4512692dc7ea049f3573922092d86f7cdc8970e3bd985a4091c807b21146236a4d4bdc2327433fb1a1af5522f0cb1db0d61224203c3997b2d555b6e56042a4f1c1b0444d31c1243a5cd60295e592396018226a09781b860df01eebe12b7145250b9ff6373886819074dbb64900804aa2da2095614b1657eb87fc8532fc6047bd96e94079ab7857b994028232c0bdc97ed0b03510f7d49c50101f4c6a3907e85921af3fa564720645ab7926ffe07a0a316bb21f958f76cc4bd084914b5d1cd436f20d1bbb951ef3abccd1cf0863cc36f2175ea7cf3a1dce5b32b32843ddec1ad391e4f3a38"}, + {"000000000000000000000000000000000000000000000000000000000000004a", "006612642bcab443b11c802cc88802e50f5433d33927c0fea766db5a770fecb2ff7fc73a8a153ebbda380446df11b6d40251dc8444c1ab66bc3d45b81f052025fd8e85330ed0cbc7bda96aedcc06e706307c17b7062de9a91d5d129fb917056c8ed359367f143777b00869fea1a49e9b4d4868d4ba3d5b4fd2d0ae59f24f0c8ed5f4369523d5d4f8e6472964c4fadcf1f9bacd1104daad85c8ad230b49b74ddf7504caeec33e1ab3028dcc0fea33fe23e614e0be6536f2be0967d9ec4627f7c7dfef902e39d292e919304cbdaa70ad1c147809351eb7a026923b4305d2eec5a5e81dabf9b77a872202bd4d1ba2f8532310f51236d698f19103158f9005810b058e2d0083da71913bc892d6b93d50171ffe175882453c62b9e930e0b524d5e05b996b4c93e04a1c3b699bf1d47ff93c2471de1b23fba07e7c32fd692f7f851671217ea73a2ab3a5c6d42d713a1c156bf40253a5f4e88d79f8bb222378643577a9d0bcb318c20f9b50daced95a10e4ee32400d303cc20c66fc64e619e365a842d33e2ee249f429a9253cceb8ea7d04cf4d922b901f1cf16567d358747c45f05e529039e6b4110feadb658cc292aec3f2783d5de66caa6293948941686e92b06658df6919f5aac555994602e19ff6842766c3d4885e6793d1bc63d490bebc555720edfec83a95f650a5e1de73617736a3403e5ef22ccd1ec05e064a489bbc8b5406de0ad3ebef77a6653e53d484ea0ac0a447ebc77c8302fd50f7ca530c6c4f36c375c3072bbb427d4b0c754d31b174f66f2eb64161bee4e41f0aa442ae61bd0f300006b60a69cd96243a5b33de0a7e317d24eed4d3837096155d772aea7bd1b73e092ac5b577e9edf44174ce544217b8999dc4bbffa51e0d4aa931677a8b17f97694580fab7d852623cb83e92e0c252ce89ae660ea03da0f66f5351ef97dbc58aa0193b41d589217faa65b70607ce3bfc53f998d4425312f7a38348d168ddd883ce5df6c72e3d0fc3fb7f10b1864fd72c48ce962938a9b7265a28b20de9e6ca8128c16d4e508b91ec0ca24ec2fd1f7762dfeb5919f0458d9e8ca04e1f88ee111ccc16fe16b40899bba8b0e2818fcecc593833aba337f8b62a0d522f34d776e05fd510799cc482fd468a1271068755142584e05db24deb5bd6b498834577ac28a02ece7cde40874f89c01df4281f84742132cdc93c44ca80cdf873fde7ffe23ce2a3d160bc2298d0ee40f2b21e59790c67d262502614a9a3c836ef4ae2c41c2add2f9cb014df9e23a2e68a7ba0c257625f34f68e1c070321a7d969e88a40759f585489995898bbba2c51b276a425d2e9aca7d1f4e42ebc8d5f6fae74115af62e56131a0561ac768096bb419580da85d31e252308ea136735d421fbd9a0f980ad31792662ebfe1333af3327429faae14385f020e3ab328df498bf88d361e466e3fc27908f59a04244ae60037f05549c86372acad71a8c511115894701cef3154b5df3573ec19c223064f0d52711519863d4baaaf735f6ee7b7e4a2359b0dd317fdb3ec6f508e07876b8033ea8ad35cd3a7b1054f5b424a85bca4e112b2e7d9414f702d8a36b8f3e4f24c4af47c9952de0ef85145d086eb107db6e2a6957a1699adb478c3874e3463a8b6953411e2db26f3d15cc9aa64c93e7f660a6b7bc33dd33021b243b272fbaf86f8f89f38721c1551b4037c87dbab62fd3759a0bee637446dff69f91f0a26cd6a16dd739df212141a5998edb738b0beba2f0594a454ad73077f778a3fed53776ace169b962a0f72740db908584d532f71699c9358550ee9199efb21361da8b08cc9a5d8496542f37f2eff8c1cdfdea00fffad28e08f916dc05a4108acde45621672951c823579eec14562a43f486ab42bb4b1e63ab217b741a2"}, + {"000000000000000000000000000000000000000000000000000000000000001b", "002b7203e0edc2c3c30dd0b90ec59881af1b7f981f14527d9bfb1192939e93a1fd5312b3f0b08a2dae4b10e8d3fbd65f61c5f07c41658caa82bc8564d1fabf1460036ca724a1455d19779f5c7fd9ef8d495edc880d4c8ff853720311d9502168d572bb9e6c8ede75382b01f35d99932904aea192b26ddcbe767e4b98d4190e7000b7b58c0a15b3a1528537702c87afba3de2e1177482a2d3952dffe2ec3336dbf762e5566676666002879327f10f8d2197cd44b403dccb5e86cf1e6e362b0be9efc5d609cdbff2d3270b484fd994938d37b305f10db2317808b9e40cd3bf3e2d6b6fad19ff961419ab32ab52543681cc70756ac9f2b97a477b56caff093226a9fba82857d2a0217820c21f20f51334cb381b297d2cdbee65c79c408473542540e64a821e4a440bf442e0f144e58865647164aea5003d54a83f431f2fd2f3e6c79288a92ab136ccb35fc50f46131c738701b5ef4d83317c37f2634110a452d00cfc94a7f04e0a3e450a466a3dd5c3792829beff0bc3ea08bfec1c01dab187f9068fb15746c1da2bce25cc9c69a4f68914f1478b201c34f17f82f3c8a023b3b9451d8d985b055e076e49018edde26c61bf2de73c78f445cf901c221e2203750c9db94a13c3f74543e1211a42bfdcbd0ad907f32844cc49d73080bf0e5310121c4b7459b423d186ea974f1bcfa5b407bd5c4cf0c62ecd7b9c3c0542f076fd5c8aedb9b3a0a489d4be0c7e99e4544e33dda2d38963f12f7709934840b22f3f4bc8fe6d0412659777eae24f135c52d2d4cf52de75c46394a9c420036600a993f3aab4c4c4063ac10ed936d1d2b68614b51908c1abc0fbde4963b2813d960d2600738ac22af396c5a51758dfbe137308f7332735d69933994919650b5a260e52cdfc03063894715455f9eb1121cb47c177f9a9204693ff13c4ab49ab54ff81d25eb8920134a8f98acc6aafa618721fe9625bf37d069ebf54290bf1d76f0a534bdba34305c721e50305717924741214464cad10b8949d95d149dfa5a0d1c180dd944853becdbe78de074f0528d865a1c9244ac7465753cf03f37ea22c8f9ef7ebdd5429a237db1608c636e0b8136bd90d6e474d7845ba81a76e17de94abf57b54f3069fb6304a50fe43007900b2071ccea45a197e3efc19e98e24a995cbafbf0f45f62c5ecd5e373e92d1d3047db85f7ec7e382979786a21350130e0b127587950afe6652b247ee4a72ed01aa8664ca2d0dad504c6004915181c84446a3d83fa6459767f7163de478076a2da25d3b4957e80fb646d3b2f663ff6121a78cca19071a90cbca024e9b015f62d7abe24721029ef54e7e24593de42e12e88d9316f35abe6b5665e900dd7b022f23274b69164ddd2da503f10bf8906eaba7ba363634dd425f91e159bdf5ca2390f62620655b8fdbe8c9068ccff9a9ad20918ddb61f77dbbd15083cff6fd9a0709d51ebe533d9590efa26738366e8d62a97eb6451dded25163665185d58f7c520f7c552f5368fc486c2f7177884e54d38f28c8395d4a5d809f1ceafb3d9a13a7f6952c185108ed04252fcdd2a8d29942dbb3c638df74bf8ff32019aadca4e18a528fe6381852a8ea17d6a384f15063799ef6d38b2adb3ea9f83ef3a0814e336d4f6f1b55758dd3d71a7a63e4d25c6d3c1c9b0a0536de64662fa179abba11607810d2d0bfb775630a63b30afb1cc9b304b7a22315e3fabdc2d990dd4e0c7abf1d3998857dd473723f60250f1128e7ebdec7259ab2198c8b51eda40902a342af809a3fc87ded661ce114a2b2e87c53f16a264fb4ba820f391c9febc136562bc502aa4503cab9e542f7bb4082cd5bd93a0d2a2f352ed5ea5a5f7746b77b9b427aa20a3a7242ad31f10c3c37582afb14cf77544354c6664654389820"}, + {"0000000000000000000000000000000000000000000000000000000000000035", "00864b678b45c8f923b8e287b2ed8550a9b11a69af25d70318b898eb29761cb859e35dedee4ddd193fc3025203ea1cdae5a31828926001f089bcda1051d5e8173077a0754a86031de826ce8afbfe4653c0fe105c0618d3dac64b6e44aa5492800973df7906f6d11b592a06d55f8d9a45719ab3745849b502bec1d27cbed60ea7376e46d5ede7b4f811060731e84c8407c7bf743cc1e48decdbcca4f0574405404c314184e97d04f6102feb8d292f5ed3baa5f81aabd91d3238977e8af32910f9ffe14d6a2f515d7572d9e59cad81897ae35e14b549fb806efea57acd952f63d4dd0a92fa9600fb21bf27c4bb6a619967b396f08878272b6d517cf80614d4810f9cc7d9663f8ba51280baf2fd7cc5fcac992abb618567955a85da56f3cb56fcc0790d3b09a3091b573dc8738f9bbbd8eea88f3448abff4a573a5ea32bd2b3ff70d7b72ed835b39a3ed270c91fc14e87110239e7e22e12c0bc97dde73f4fc05c25fe235e24e029d1b994a9e39617d9c1c6ce2c60e0f7be07bf7dd7326cab424fa450a57f0e434db33c7889dfd8fe126237c39e5cd51bad51f43255348d4bde8e13b01d09250561790c610854a4d30d438d42548f1f27ab9aca0b474fe2b0f1e5b137ca0d765ca67e82375491bdfcde0d6b84a5bd45ab4d944613777af7fdf1b773fbf65020b02ca881671e6d62a7f6d60066224e5d38376f4b029e40564b415d60bc07c16650b68bf1827c9cde9a08ce9bf52c897546cdd3c2bd0fbab5e2e65c1cfaa61b729562e9f3b595bde47869be6a447aee6adf08032ba08bb64f5bf581cc71f3468e5895c9e8ffff7db207b727d989df6d5d178570fa55cbf302b570db4c684a737d591f59f26fac3df5e2aed9b995d093f7c3a30d9d4c5a24308ec5ea7dc2bb6d799e91afa030143a17cf17fe89be9239fea554c9b0d893cf072cdd8c5701202bbe5c088497534e2660b8b9fe2a38e83cf6173aefe71148f5729ffc5b150aa4fd6c0f2bd31e3e0a112793c2cf7a8c51e0c4969038d13746686a959b0c37052ebc69b23019acc58b27526220b305c179938e07c7c7b88949aff685dd51abdf58c6147ef63632bd18460bc0144eebd5231f588cdc522d7a74afb76ba90999bd421d2386fdcd1e07c6eac41e2705367da8961f035463dcde6d637a01863a30483f2643263d136e038d821b428b603779284293edd05de0ce35ef2c0e066641c2dd5e7217998599a29edbe13e809ad42cc1157af4c89e8a24db63aaa6ff2b46991dc8c1186e5f1d9c773ac1d76d4556e68383ec53fdee3be9bd8c2a061cb9a17451e0193a82a65213468c374aa43e4746192d56cd1dc72492b2f3167ddeb899da446a39d0f424ef99f404ac97c7d659b81c54c43ef6af45b8d9fd646153838b2bca3b7563c66724f73c822bdd945503014bd9b1ed9c1b7371c0765a2f704f81984ffe10cb277b1a84ca49f871bd5004eb214760a2fafe5fb4d71df299f806b51689b3fc672959d788122999147a544f257b92429c4aef1815255fdf61473718231e51df089071aff21e8d69faccc1b0a46a191074af2407590a6409ad2457554d7cedb22176fe161a6d83738daa0bf55ff01d0766049e0a787e226a47164eb4df599e0f148143ceda193dd7e3f26f5d9fd6525eb2fab117022b8b7ce18ada48f8f561f97e62f0c2a46f9f790e28482692cbe3ee899a8c92e8234cb405c2a634fb001714f6cb7e0a51f1d472c7505767d42ade3e5fe2b75a2e4751b91f4ee356e97674c8ef3efe2cde3900a018c64d6b2a200b353f434396a9bce21e42b175af00393b1c58ffe7b3e3653bc67507c39f89a1bf1f03bb1c67ee16df50ba3a95da443e8663deaf402f7c95ea43e466c30a9540e0d79a595a5463a3f2da9dbf9fd7"}, + {"0000000000000000000000000000000000000000000000000000000000000004", "0040949b4fdd92896644318ab8143430e9e3dd67f8079f1dda83e66fb18d1012a02065dee628cbf910b416ece9c7678ecb84b9b9388124530922802d1e3a772f271a6b2f212debc1ff967544feb4a26349bec6060717b5b927278e7d4efcc16a68376809000633858b1be06d4f0f5794cfeae954846d687532dabff7fd000bebed97cc99fe1b9437223dcfe488577be6bd23c126eb5486848bc3b5924854d540692542942c9e630902055cc8e031e39db4b762867415247208513b868b1607daf19d0c261e6fe74441147a5dd12b91cb7f2409040f0df64f95074d445413cc3dcc36a43bd761620dfb4505550db95e7a8375c00fe5332a18757400820615ccf9db02fe5b8da8f6581e6065a6504bbf25b01db7910d84d2d0db000c13963550a33582f699d37629b74fc3411a50473e76a3b20da6d7e5dcf5918a2d2ca91d245dee9fffde6f533dc4e415199529bb933300b96280e74dd28beb56b133b1adc0796003d0ebf74b9e6ab94ad482f92f861d2e4b772bdb988ebe3b860f8dff0166481b2d20082195471d4f6a6de4f4840122e627858b1cdfc384c93645dcc8cd223770f5222a043bcda4707184b5ebd3f198acdbc5c19543f92b1016f5a97a678b8a3495ad89c3215656debbc638c2240ce82cb5e6ebc5a1d526979d4ce79673a43eff326b684a058e03f46db5a87eb7fd2df4629785417ce6a506684311dbe68f25b896e2ed9650c4e1e9c07a5ff20909e6f93f151e53ee04963beb7cb8e2b5d837065d0b9b706c1409b047a2e21362c2cf3769fbe03f5e9710e5f53bb18da0f59dda61bc796b8b354a3fb9a12a0c37a2252222ed0f7fa400f474f87f9a729f7d67a91375a5539a470612b3ca34da3f4636870d5f1b7ce30e487373791668adf729f57b724608fd60e9b7d6b96c480564a13399c1c9dbcb8e536e1bfaf7959c2584005d6fee49c218aaf0fa725c85510d295066529e5b22966f4f73df0a3b96b43a2e75db6bf304333f50e10fa7316ef7acfa236c38733605e779bd204458e8e0387b9a2383e0d89dbd1f84856b2d452e19525c716103ab1d72891ca2f94b318486fce6b5c99ac397eb903dacb4944718ef77c03c979cb55f589e0e4bd61a340dbb03d2c01a762d5695320c2727f39e58a8b39ad7171e9e2506d3a8a5ee2624f6632802fab2405f03ed04b31e2c3848eaffd7b200e53d91bf1a35969f511511d309a132ebdd85cb3ef3b6cef86abe7ca93cddb009913082be50c497f47200c74b2d80d46c905af7d9125d353a3d84f519c79e14e578c44a72d344bd0b580e02e67e43c3988d62a69695ca63baa5afee9367f627b774d9f950ef637ac775caa4e1bb6de95833052017e4f602b3944396ca60b4a34ff5939139315803ce186557bcd91880079f47431ee66342e9b837552d6603662e4b589b4f33824397cd5a70b01a9c1555fe0e612226176598a55bd520b6a07ad1758a30f1d3901f04f4b2463805fd5b19cc41abb692b5e59f65dc1e2d08d80eee280f3f40e50f60b1b7e6086d7f2fad76500a65a48b7bc9a5838e1ff273fa2d3022c1d1bce0fb19809c0e2c8d58bd2a9fb573e9caede5b70ab4891b0a961f4c1f25ae25a9061677285f887b7ce9be8cd314164c8d1695b08adc70e7496fe18d9a03035d5edb09e45d69189b949707de33f3877aa26684ced6476e581cc76549dd941924aad6545339ce76228d16baf40c8f0ffe9a4d2cb9fa2c4a71a8787d06c037bfac401328ae7735d4bdc1f32a81661719bc987a7566900f0a898a266546283a90242317c8755e39e790d4080313689be623a2a0a32db3f3515cee8e8e400cdabd140f78751ed5af041fd95df6878a507c7e1a041a23d455513f1c85e0a33b1ebc87f2b2e592baa14578a9de"}, + {"0000000000000000000000000000000000000000000000000000000000000039", "00a47960158979604e0f6458f4db526ac43a7b7fba0d7933e0cc15de591ac51609cdf5096a4ba2bd89dc1130cb5d1665b825719ae304c3c432ee3a6e974dbc123884ba8f4dac57b78cb58d976d117de2a6cff63909e72e81e961ef335d4f92fc7d6fbf3286ff5ba9f51894014c6359c771c94ae3f1a74e91a2563c3a7c193d97f725c021e79b7ea0446aa678f561d0afbd33da9304f609ec6a3f6fd2942a8eca6ce5af80e83f6dbe018c8fea34d26fc7194c209554625e37cc8f3e8c8b1264f60b0477d37ff9f9d2060133134e59fa3f78c5149cc9924d11ef659850a404bfdd9789bcf00dea2b1a26f99be38875f7ff9543be8f6beb2d199d1e2acf069a307bdcc28c8e97cac11bdc34e488dfe2d0fbb144b9629b4a2bf0d5cbfe76349d628f6233da97f6eb17b5d71348965d835268b692acd8f71677bc3d202318739c4e68863adfe1a97366cbc39346054dd282cb0408eb4ed7843775e29203a70edc580a9eafb98d8a0d3d8acdd64486f90f6e41920daec82523f73f68b404159da87b296c93dc7bd302e9f451b959d57b50fa198d9e047c8c519ed6caf65955c6af4dafebd4183b07be0ffb2186e813a122e4f9a75152a5d659583f4b291965c40c1e912bc83192abddcc7099ab019b30941fd6aa975bd5729d0a9b94e8f75371529d739853e75fe00f1eb56826318de53994e5d4ac0a8d6f3e2c400e050c9479511d11ce8185945c7cc7ffa830fe36ea5c7ba79a243bf123f0f9b85cd4cf9ccfc4441ec82b1448cf3bc80728ae9d5f243ae5b7ae29ea70591c5f303b09a5dca5f713b901738487bcaf2afa4f5de383117ca9cc08f56a8ddaef61eafb7fcc9a8cab3df7491c5db76a7fcec312d4c4049aa7310bb59934f57c6b20dba71a75e520adb5a5f33ddee67cb709731e2b2a61f4f50f721ab1916d9086b38a4b56a5f9be9e625e03053a9193d8e87cd235640b53537c554ac3ab89700f2492b747505b5ff6892719b43adc628ab7f6e7b014ae25d7960be8bd6be454810f4c2d1db507d210c61bb0f7cb8bce59ac9b2bb1cc873d972b83129c3f8c042cc6a12328f079a74b42c04437e4c9294aaa80121a87dc0b558d4191a95ba32fc03b4a81713fedbafc1148750c0a9e0c1706413230b7f74b1dc5a95d43832b3a55abae63bca18f1af6f6d0ea72c2ee033dff3206717dfc6a041431c51301bcb5a06855abb3b2adf61c0f32aef31011b6c86f3397f6547f1571a17ec584133a05f62ec9c9ee7003c1d64c72c0f49bd2cd98d817b91cc1e44b55bb15f6b5038d33d191abbb174ba7096f13aa3ed0df110a49b0ae5df25eff611dbfc9170b1db4d38cf0106dd672d36a9a69db8d1343540dc938cb2c91a45fb82dc42d1661ed69515f5133bcaec4424a75fe3aa15959ef7de772967dafdb188878ec60034c57c356c156da65a205de9ec066d58a8c7c70252dc91dde06a3a635a55185beb5b35f65a545191c721342f102809b7952f814da6b8eebe7cef7e2bf86951749a5b0f7669e27ff7852b26d1cc03d1ade142407141dd23b200f2e6ab1a12262f55cda697615ce32f129bc51c52664c85fcde705cb13ba8311d937b0af17312bba2264112377feb8e40d8db7b3b91c27f6d67d32db43da9e4d10baf2cda62ab2bdec5a993bd79fb5061fc9ab40c4ca7bee4e42b51cb92776eafb5b68f61ebe393cca638fbda18121f644431d30ed2a5b58cf2380bdabc7a68e5b94ff64f82be503199bb87d675d3be3879913522747543e48a741db57df258c5d8b9708742289340ff648ab4b63fc16f00e0f7a173f1f8429a0ea7a026d9cadc730b6dfbe431d76227094424f145a35423f5b1ea169fd63488eb447b17bbf55b90123c2f24155666289a344d2cb21f6d54176bf8c47ad"}, + {"0000000000000000000000000000000000000000000000000000000000000007", "0122a66a281717dd3f46014ce8994e34c4af6c881702fe0b734588f50668bff66a61d6ea0bb6057fa312190c0c88a01d3889e215e2726e4d475e1d1bb787c94301bef97d5c9ebf70ea072cf35a4b1e4b417496a308ea1285d0093d2b4a7d70af25320d4100b7b341260e5097c5ab8d1f02c7e7c34a0d512159263170ea851b71c8fe2606f68f93a16908535bd742d7095c803c1baf39569613b3d2a140bd1442ecb8fb48eedeeffc013aab61acd53d71717401286fa0ba392334b47be10ec648934e952546f07c627da42ffc69925a1f17000a53c4556c1d1a0f804bc4b1c3aa081daa4bb3a10147d7c66989765c7fdd9b960376bff2565969fb046e033cc8e7e95dbd27c854544adbcd640a22a23533dd3445aa19dead299392badb315b73bd67816f1d554f05a16788c5d6ee1ba43ee298b374f548f86de9921c08ba40b6b75b1a4bb80ee498f2cefc2927c4148e590349bf206a93766ddec162c4bdbbbc8a51c1d880fa1366052a708df785188e653a1fa9f5dde0272f462d0995cc0d25c3a054bda16140e72a75b4ee137c2a800c5af3194ae9db45b017e104332fbd1cf982b9f2c912c282b93f8d4b4d80d1047e793fc15e1e4b5a738b27a7372de1689005680353fc325691c647bf56a1b0130b72442ed04b2b74dbe1831c8dce2329be1cb6e6422336b46591417691c3051d3733ce6e4dae752da70433cd940dd2a8a3049620ca34cdc06d09155f90c20681b7c12f0e28ef258828ed1050473f96333d28590ca977fbbf4a9a8b0a9d415640771da5999b321c7528ffceb1fea215894fadf8395bfcd0430780dde4921051fd84d42daa0dc751b13a93eaba8d2bad8af7c514fc73251b9d3d859031733a12680f28d3b10fae181896d9382298e7ebc874858995b8f92db3c91452ea1d3085822e88deac8c0c540abaf41cb115a91dcfc10198af1c9cf6672bd34ec102de388ed44d05de268a09632638905ce3fd2f99126679ca6a1587de0da5950bc38862405490290038b37e4cc6c2b0f8318bb52a17f9c5c272e0c54d2f0ff572ad655f26007e7abe7e01b18a0b03c7d62f0c49559a82ed4dadfb9afe7a98489f6761d1b54e73c9cd969cc7fd3f89cfe438b912166dd9ba46a515c5c14508c000d2b20637c515ee0d49e7fcdec2176a80ce99454428e678cbe197bfd7ca0641e493915db3ab0343866973f34a95eeee94636f25a9f5ff000c27f31d60d764de4e754ac4ab1b2b130fcf9cdfd213924cb0d6122644e75ac34b031c47a23b7f3686c6605225a5e004b4ad30672990666eb0ef0773c95a54d6b795aa22f3a84950af1917ac30d0e20f6d221e0e4ebc1ccbd9381b54fd55ffb3905e36bb3733726149a16f93a8d7f737e1bfa571eb76dadaf03879bfc556eed259e3a9041243e8bd858a822c9f5302792d05ff52ec758a2ac15a1d9cf64c5d3597bdf01ee56b8464cf6343b405e287002128666627565c290b2dd1066850406751dd626730478c552bfb14d3ad2743ea2d3b919695841164b245573ff77c275cc2bf088ed39ad0f31727c60683a897dcb62e7f2596cae40c3aa611c86ecaf7d608e4f36369a1f1a430f2a5051198c5190e9f0a59b44d42fda1e6eb1d1c31ccbc932ae35725665eaaaba6b2e4f927503cf6cd0e577723077dfff0e24fc8539a1b733e744591e5161052a07f35caabffe74f0af7bf2c262d8de9c3ce0b55d0a92e0874223f789a71b0f0b09179e1a5cbec831c0e93f06aa3ed561edd7b5af3d0276cc446b542e694ffd0bb1eca439762dc0d4bc219a3eb89a0ecee7a07badc2f38c14d406f2e29b37224351a1551f0263bbe777de71f33f4dd19de8d97cb9eca16007f85ff2d06dc184b237e513944df20efc156e2853ac91d855bdf6b0acd"}, + {"000000000000000000000000000000000000000000000000000000000000000a", "0024a236dde88c2b5252d124e2f6fb5d3881f43e5013368fcddd89b388fc4785c1e55dd1dd7bb22f4f9b5552fc62bddd8c71a210a5df10dc5c86ade79d201e6ea64f175be278b17ad0187de64d9d03b4979e951706e6320da49394b4e55a14414dbe0bca8d2c7e14081f19bfa1a5514366fb9a163553ce2e9a11ca55cfa50f47c9250d8ead3592e6e9148a5ead4ec44b1d07bb8f587d9d72a7c247696bab0a4cfbdeb6c3add7c6e908d0f0c7ffc396f32322d1db3313aced530f719f4024d2fc5a04f388d9cd7be38a58bb07eb7de2dd38c00d281edf504eb9b89e03f0ecde28e40e69581ce2e23445a2ffa0e5e0e9bcfde7ed42e685a6b92cfc2f8c09926ee0988462e04732d237e868174922063cbfb80bcaaef9329ae07f00b1e83bdac27a92197137045c0b6f7ca532b5cb73d85ad521ca3acdf9e14ff1c5560cce3418a30d94ddc3d0c1e79ed28640b5d2cab4c801627469ae4368a9e544558e89380d364f7bf35cc51b9ad8fd2b4a12edc530c8ecd3f8eacf40921ee56007c22db3c082c999fab16093e2da369d2ce81a55652d7274a64f8daf8bf629642fcdab76355fac315f48019e8b2980082ebf127d9094ef0fa1cdc7585a70ba1061ee3ff2e83f99580557bedccaaeaa47d117c75809676d97e1e05c6faa70355e21d62681b8a175997c5a308f8b75a074c398be064dd95afd39f80b5bfa7f0165d4e3aed90adb54dc326f7ba7bce5a08796842b385e3a4289b23199bb76d3be633309c565371fce900858d41fa99609f308a7e2158893aac97d358f3e5c2c85e42efa9e0c8d8631d6c590cbacd6e5101e913e0b5759828432865db03231104d1f22891d070a549431b652e857b29337adde04720031bbe69fa9fe400a1721e6683da0af0d4b2f57f1914d3bd731f7bd32ed1f9f52792c91b1cf2ba2f53b08ed771a0319189239019df57ba78ab95b4f9b49645d7dff37519a3d096b1522bc61136353bdf6cd021495ea6f5552afbc22df0389f6510719a467917c14e94ebc7b4dc164315e68198265ba0b9ea61fb3821215ee57f374adc137315c04f7c3f71d53a941737cc5993b70003769edbb65ab50499632e8d63a43483b45c13cfb64d6b67d5bdf28177a192d022c8d51a93b38d7184893674ed93f67d125587e526f6bf98dabd7c42bb5cd1f2a9044ffcb8a06ccb8bfdc686b5da79eb8124766bcbee97c9aabc30d1b1b63f11c07bf50cf82c93c68890cfc2071adf114bd54803ac5a74c5021f1781e8d0efc5ec9c8c61041a30f2753668357934ff639275e62f196a83b682e277922e811ced26dce69f33337e4ea1509c272c1e55138f556cca71f219ad08b7ecbede07b606d9e052c5faa74eb9f6be3c5cad946388c6dc48709f03c69c2777e8ed20ee59f436ec3e8bee865bde66a0815673101d8f442fcc74a5b169009573e613ec3805a5dc02d26c1f98fcf99b0e9f4bdd45e9c5b1cf540067aa3e803e14b76028704494e0ca13f6fb6eddd40e155115c27f4d33de1b5b7d9c94a08b111e806c6fddabb126b0206699911f31a43a36505595a5d808694db1cb972073b345e011d2e6d58d020f7a1c38380c9d2d1d9d80e6a5dccf2988c8120cb74c2ba63dee5612c51c077363c3b5c106be281a5af858f5334e279ef8638fcc6071d74d4380537392d2a04be6474c5a1c43a57f3700c00d6126d055e34a5aaf2b3f5b68e0d11340fa2041654be172412d8fb6d90b6328934771a529e15f14427927473449cabfb8dfad32ff2eb52b96a16733b5e080fb11626c81eb16ddae1adcfd0f034d8110e464113af87063e93c2cb2664c181ff9aef654d094c912a14b262e4d5f8e2c9fdcfa3f74f3016d1fc0ede134a244835ca510add95c1cf2491072572937585ddf325"}, + {"0000000000000000000000000000000000000000000000000000000000000001", "00666dcf2f9f3139cd0d1049672b2b6124dbb6d9d10398458e3d8f98abf96d81cb1212d454f7931496e8087ecc03734e6e1de7e112247f55621dbdb31aae174ab8fecfd4d50010b50e264c6868a10595f3558b460662eebbfc07e8127ec3310f94125bcdf1175912452684d436e9586761d0ab48100f6068c251741e42eb078cba1c88b17c1dcb17b19d3c449968938932c5280a62e0cd25a3ce99fd8c524a1c54c4d1c0ee1100b1015c15577ab63953f0ff7310925611dfcd3a1f5faa2228629e951a0081b62a63f32dbd475d0a077d5a43050b67031962a875cdb65310683305b0e374f38a5d4c31b4655decd33998c008ecdceaa2fa4c0d328fef0319e83fe5f1d9e5970ae17054706c69b1b25c5a260d65979c8b89e6df470a260fc96879fdbe6191f0de0dbdc724af1f59d71b06966911d1013f3ef63e599955a17dba4763d08dee757c56fc6a351fc1b89ee424031233350f91bbe7759e531d32322db18bfaf2fed70bacbb3cc45d246139e6030251e098e615c83f5be9088c253422e86515ebec260b52c37bf2a607b5ec3b8d8add5ca633fd7be03439a4bcf91efb1508bde27a088ce5a8ba53b5adad9a948181e4889b47e89bc8932c305421f664b7833288530e1ca9075de049b0eceb0cd22e05b1c97ce54d231775dbddfe6b7ea1fd44a143fa76c3dd12c9f2d71ef481b72947e645217c95c10a253d8a73d5ce58eb628324c9fa88e4e203489685376783485bd223eb2624358b27f9bd870acdfd0bdf0aae2d2a7a9c7797b5cd90ee5c100db493ec1d076c330cb66b906ab263a8ec03c7e0f71d04f907935e0d0ab17fa6e61dd0293657712a95a1f2b8ab98bb27e20ee527c349d6b156f6ea42e70aefbea99961549004201465f77610720ca36bb6582df7c452855a7a4dba30db0b9e4833e503bea45619bbd67a1b75a49ed05c0107cce147e48f2792adb30faceeb106ab3b3ab7d5070508c4df2ae36d58c4f3ac533e668d42a56b75630689ae860fc929dc4a0441650cff959e62b0536537107c3f0265ae929bf81f72eca738a941c2591a2dbb23637a1a5aa8dff77034f3fd0c4c35d985be3d8bdd23f22dc5a9ca3ec3a08f69006afc6b8a43affe70a227247e205ce34225a353a6ffc0e4c296ddd49fd30073fbbd66c45d1cabb011daa7567e421f42d99c8a6a016e3706ae1a8b1379fd9156828e31d1b831b916e3389cbda03dd8a5579b67f564a7d52bcab5b47a3c570615bcd96b690b317281931284c5b6468baf35c5504d4cce7f8870d4dbcc0bd99bb5ceb2aeee547bf0e6064fa9015b64eb79bd76f840e3610a362d2a963a87157c4fcdb3a1fe119dd921bc4cbc6c9da89c109bd21619ec54e4deb479d2dd22d593ac802aa58b36ab1334e10a4bcbe644c949d6e7dd54625cc653ef3879c30567d3258dc785dded6004c8e663176d9fbc95c6b70b6152805c860adb38e241808f73e41548150e3bca05ce258f194d4ccbca32f340d8513c2aea29fe235d2fab148f3fd1be619fabb3cc135cc89edcce7ef8ec0a68e0c2a4180909bcd4d355d52dbf3704cf7eb59737467a4739225bad6d3f44bf5d4e9a4a32c4b2ee661176ddf0946928bbda6783ebd0662c22586f1c5e393c84ab6fe2d1b7b1030b6a0ee76b9beabf42f9dc7d05f205056c82a2543ecf60f7ae08829ce7f2b67f96110b7a065604bdf3ae60f39423c26538ea1a8aca4b087f54dabf15d66ef90c4778f1dcb402c2a539c47d1d8e1fe88968f3874c88f5f12e7443cf21953a0930117b93e79e46f150516c21d64f8fb74e636756f2193583956099a81a6583ab66f291ecde1203ef7b8beb1b6b646b10d094528e35686bdcef08de2c899b21621c2ae2489f23530182b795b42ac3c0062a06fbd6c5"}, + {"0000000000000000000000000000000000000000000000000000000000000070", "002805803e1c180f2639655c72ddef4984aafd9e633349ec629890297cc21d034720df4d0916f00e291600e61b7c75080116db8c2363f6d96d092ef1f4205606d2ebdc3db0d8e7cb50a97c46f9cb7f989ebd78e802839debe506e144e80db2771665b6aa345c7700350e82090f6b9f21f8faea08753d7f586f81e9bd7df7074a14663ed6dfcdeaca95a7e24598e626ba955efb1e59e3d9187696a5f61382c50fb1d08b22385f3a3b0e4c6be3a853e6b8fd36a9d515637d5eee339d8e6a29406df8da57c836fb5aa470e2c7cc8d9a93b2981b1ceec65d9da415fd25cbf23d356f5d720f4a9bd65f475184a2432273afaca306acd36e81528a3f56157e2ce86e5cd2efd989cc7fd6f8a0f816eeb30f7fd7fc36b5ee712fda2e14f07e53a6bcceebd608d6ddbd133e2d2a22ba9e74699a9f74dbf6615381a2c1fa5d536185be4c31661f9df1e3076b17bb9b761bfb59be40007bbabb325702e3757ac387d9b5eb8ddfeadb78e20390a91c261e6c4d5def72eaa3d71d9b55435dc5cb01d1c1273d2d2d11bb54f1ba53e3813c9eb70f2bf61977797f6e109112a3e0760298bab09a4e33d330f00b44557d34e2eccf92be1343d5d4b46a28ca5841790c825632593025b7ffc0416ba65e2229e5169aadc40e1de08c01d730d5198f43113b6b517dafb51f93725c7475b21819d8255804b7b17f66dcea70749993760338a416ad013613967326fa89c398cb9de05e741215d794aca987f8666581c26b6bdc6c0e5df1988d9e058863cf9065afe5ac1e90679edaa3370a3038d1fb57931da71f989591927c764cd5d934a6d1bebbeca8047051a1f3ea1a6d8156b40e6f4dcc056d78afa5600d92e663d0540a1b48c6821e779ba09a35845d1ecd3493fd27c01e1c877e7d137819ba651fcc531ee41367b0955ce85fd305b9d049a055ded35289b7bf813f003dcdc72c7ed203f9110280245716790496f6f5b12cd13a1a6ecf4b111fdc955ee360eb71eca75f87a90e0f4c1c2853e648ad6db375f3c67bbe73a6ff3fd120af4f9bc1dfac2f6df0061862f4bc9dd12b36dc74050fddc3524961a6cf07d17634bb15ddbae53b10e006fb4b7464b61cc9b61970a6257e0695cd62cfd28330debb43bff70e37d76764f43fdc16a14c485871253658e3ac991a13195c5e05cf3178640e051d16dc79068cca66540461a05a0a55ef7a5fc901ff633f30fd0ea5ece30014502add5392cbfffabea264b7d776f3253b4e50b9cf223753da84ed81578571eeca5757736110c468ed61e5f7330a1a005ce6818ab76c7616ba1a1dd37f4448f45510b041f7ca99423127090eeeae2007827f2d2c87db75acf5149af4b75e29555b47091d51c3312d53a5ab4eeb943bd342ed0ac720bfa14220cc05bbf323e1118247ca2922eadfbe8e47f6b837006f7055824da0052667e15418da77586b9dac7bb90bc4611e65ad62c9840991b4fe3a0080bd931a1c1c0ed6556d62d1f276b15772da43e0c31e81bff9682b112702fc0047a1c68ab49bc5e07f04cf7093be127f0953df1385c8b74e63b490e98144dfc69f02153de6138198f54fe8d74dff1ac142c8aeb798fe1569a7e70c8965dbda83422f36f6d5036e2e7f72a0fd3c4720176c68de33f70957befbf257f2c86cb348d27d896109ccb3865fdd2cd12e8211eea73b57ad0a8c39d1b5194487b3d4090358bbeb685402c77d0bb7879f36750ff9aead7f11339f2321f6024dc94c3e47ae5333711f738ed039ee2e4fbc1663dc1e2c1b8b237a5febfb0a17f6690fa9ba0bc5c353b96d9fa2c21ede5cc4792bc601ab7220ce3feb3e1445465dcf6da521d41c3b10229602fd06f761a027421b0f95db28871a5c73a54339ca834dd41fe9f8baa60a035707dda2e69eb6f3"}, + {"000000000000000000000000000000000000000000000000000000000000000d", "0050867d7259499b2d0c624bbe5eaff95d3cb20aeb42e3dd75cb922ce91178079868c64c6a0529ba2283078c40f9c019568f499661b29a745ee0714b3786123fc703235462914f39784567e831ea126e2f5f07a7057b1697efdcaae75750e104ae24eaf24515df74c1150251b8f3cf255ac05a8289529d7830a2e6482df70f77cfdd450c484d09d55129fb0eed5dd9d3fedcbe15352a15d32c70d9a7a8b28cf647e45cae62b9af68015e184a75ab7b5fd5d6a1d2f80eadb641257fe3ee49ed5aaa96d5b3a9c9bb78f02efeeea6cbe1da88810dfab122d5265d55bff07425ae27caea02cef268c50ec768f4350979e3dc59a2d01e71627699ca1585870acb91ea895d8041ef1842377d224dd51aeb35a23b2f0dcb69c510c0da985be742fe4cf0624fe2bb1f130b8d24327dd5f36d98a570ecc6c07c08827213dd7f23d46d1d2422fbff49c7e33a433d162d6f0c30c5e4005e24a37e1e83998b9b9685d2d631126bcbbaf7844f102552849dcdc920c3871524445517a1d45e4211151899418573baf7de25d16d6e9600ed442014981125ff1f62a60dee68f0349357b7cf097de13a31ac7902896de500839d03ac28715e9ac22a54af7ad4ad5b06b902e2b448e05f20d400f92d4e2a5dfe3ad3ef660ccbb7f191e1562b77c3348651e5a19334fc9fd83a16fcd153bbf03e99e0d33486b1ee7205e4f87d0b51032fa8ec7d12b6850e36e0fc88f04940ff2fb52983216931147e11fc43af4323131ac73985d56f5f1f632957ad041caf30c9a89d2830c970f9769a0b958f0a6712e491a464907bb2ef28ed0e6579369720ddebb81446343e68102bc0ee37849666f8b3a97cdd9019b92f3e1f33299c49e3cb7465e43ef3039e65a71f2df8356d338497aab3b37437c4d10df3a0b376217f221335dd173d28d41915933e24aa5eaec55a248e1bc5ef01f59cd57c81c328bceb6189e8bc72e8f592cd55b006ee44d25a6ac8efe68dd103d4883e2d7bccecb56a090ac55dcde5d2bb7ec9c6dbc9dd981237a23566363a4f4ed8591110e6cb54f4c36fde85923ac5dd76b90493f786f2176c9bc798528f17d012354c621a02b316661959a959fef9dea6c3c3af7032522d9a5f0a110c7473164c094775d8e3436057ae23a11d333984a3168d7b10ddc89ecfca5ce388a9c53669afd25060f7026c24b9d4c472a3e8f1b17a2a9a6f206bcdf5416e094d72a8219b409d43e262a3b9c0c902d6d71d817517b5c95e9a4c189dc783118bc6180c137e093ddcc82b8e7b8f9ed6910cf16a336df33a0b12d9da5857fd029e8a1a6151bf3f603d306f21223fdb2432ba439f44bec28bb2d9a449bb36c638d14f78ad9d4e9aa5020a551974e2833711061cd480644370456251920105211464f6fe521cab328932d5dcbd466e031839e583022ad732e19d9a9deafb2042a13cbaf998e25d7e4e0cfdc9172b44045677c5e99264ff464a9d88dc8cb726d94c65032df1d3d62013d9af3b0d3ad578fbfdb847d8aeda92da71afe6b515e7def5719771f13ecc550d55eb0a830fdbe1d411b29f97edf139fbc27839f217d32cecaf0d8fe748d4356668ccd32ec833fef5932f609210868c128f474a96c7a2d6a3f67add57c6713d32ef6c5f21e083c9dd54b703aadd699164768aee04cd2b3d809b061dc3cad0b48fc9997059d1121f7f17d91f5005b2430199fd86b364d45239c483597a311c3c6a4de8884040b53a031ca8a0b438f82b7963fb1f61c9e2e71135bc976fa23556639910dd6b72efee07d835b07ce6f759aadfa56935663be99e853bed4d2d0ced74df0f7e5b5897541c2ffab0be7a447ebd1f08f37a2817aec81d967b71f74ea857c9216f9ba8a5173f77a901146d9f6d54850647c7fb21c7e6560c6f"}, + {"0000000000000000000000000000000000000000000000000000000000000066", "002c4b3420427f8ddf5922ddf125fdb6f7bb78369b144cd969d6d4723de7f6053b69567032082ff7e2131258978a7ae48187eb2c251db27e4111993d31bdf71e917de5aed71575f77f6386224dc6a0f6695a4d3c14a87f71be095226cfa9e255a56a60410fef33e29e24c73986eb5aa9c510ae527502ed59258665aeeffa1a7fc7e75cdd09a58e9a83932f4cfe79dc4771cd45219b45930627b3654065d5313a588472a3ebbb19b901178bc6142bb00deacc22bff2ef1764fc7d7df53a5a6b8f5a0be29e5d542c35f8ffc92ff2f2fe39e07f02b45400b6864ea98ef1e23f409ceff9135f9b0ee71cc5715f620a4a9c6c0828a0b36632d76c57db72df0ee19250003023cfcf69aad720dfe09f64333e935d166531e31bb27d1dd0f20b44ce783d078fb85e67701d81444403dd7ae5368cf514ddab13696436fcd1e52b67b9a2afe96e2fcf8a6936d9ebea066ff9ded3110105cc76c3a6ab89a4d0019af98edfc9e17e5182191f46c496c71f3b1571d1441369539e5afb80fef653065b92ffab47c8cbe2cd613509b2e9053a9f1fcc1c3889c581ff9117269b46557dd2737dea389c7e62440229b079c95b80b70b7c00d0d71e499e0b97df65300d54f9678a913f93c952f18b1d70a961f272d659d53117be505b20dabb17bb48930f7d16a77f8dfdcf5c37b34d870b1706357f8ba85065ece03a70d7d50e3103eee2aff665b4238c86311d259e009cc170ef7a4304760b0d13eae3d9d421f5d59bc73c8a70bfdbe72708c7c1e2bac65d45044fe2fd7d43a6a6284d35f2bf43aeb316895e534d862d781615d11ed6cf6f3affd604aff7275409b16cc4797348827d6161c7cc30a843093c234c5707210f0f39833b17ee132af17ede2a1a1ab377dcd3ce0ed35c62e55128d6d02635d659c0693d0f7fb5603555edef68b4c602b4a5d769b17f4d1e0285c8a5ab4fe6bfcecdd627e9fd5fcefa8bbaa8fa0c127f55328457c5faa1c1b3e46c17bdff2ebcd23a0906221b400b29ebceb1a21e831578bae8877e93e21f43144774cf939d9735e358e6b4d761629d6bf55f0300a85ea1437b37580981f9ba5404cd08ae135a6c0562e217b5c5a19dac2731b110cba22a8c9a36041a06d17470884528cf1769708796c46e488e883510db30b934759025e5574117551be3c1cf89fb2074f608029558f64b22104543e969b737df531725f29a0c0d0ca99d047ccc0853f036943acb6bbe02ea961f538b0d1d34d52ada0c996654b0f33a5ed36b6da77ed5fd2056822024509fbcb28d29391bee34570b86fa52d30faf495731a26f63c3e16260a4e18f3dfd419845541120f1b83e58f714f5f7e2d082c184def80859ce342532ae45354dd2acf81e625e2a71473f3a169e67a43be6ac7b2a63cc8b267105888f4e3ea5d52b3eb14604cdfc1bd045275d5daa74944c316d157a99540c3322ec81a90cab72d7b4b603df5448b07a826b5f6d721e2dcf9afcaae5b9fc4b476eeace3025f8a099d83f268055292dd94789c8ca2397b97e75a0e7778acadf05c41a909a92414aa98f30c59b6fa9916d6c30da1619ad5fdb0a3714efe2e058e1f457703ac85cf7149f14d1b3aadf0be819cf1ab5b028d997ca2ed794127a288b4ae54f500db8d0cc8355d41d05b68ea2981e4e04f8d9a3fd8ae22b348aa367ed54e3e691f23aeac3236abb6179d632f4cdfaa249a34934d6dc1f9a257908b63a44c585f770a13002f5c018c325dd4435cc3b1737ec513c2119ed9a539302d7b24a8934b22e49400853c09c11e5e17bc91bb658bd62a2d5b6650e3cff54d3fccd87ac7363e5af2b6c42ff5673bbf69eb6561c5006fad25fdced57b7362fe531a7fdee7396549b50c1a3b7a17239b7d514aa485ae24b7b639e1b33ec"}, + {"000000000000000000000000000000000000000000000000000000000000001c", "00028caffb8d2073c762d24ad39b11dda378ffa8e51421eb038a98952969c7731dc8b116ca27ef99f19215c7af8f21d72aed2337c2c7e47d5908fcdd4b01b54f1c230a9654ac2f18a1866b6ab746f5dac63df4c7097a00990a13fc05dd94c23406747de1ad6456038c1b5c66dd865d07d7494db2843016a7f558abff65950d621a35388ec7ed46457304b91b2fb0e14f73e9c214c15e7fa9e706dd3957550acccbdc2d5aeb2d20f800a9cdb4005f7b6d22e8c197d55d11790ba3bd04f51b2701d786957b2356198984f64c5f3286a49d28310c03034dbb8d3d25941d74b862f48aa97b29b55abc0dab3e230dd208154c4e159c9c4c0e0ab640f8d51e06d8bde1e69bffb11c2bb0cec4984831c56cbf1fd009d7f74f8b0541ccdee8e47cc85968e529ed8b1cd80f5ef8fb2191730f0994162b25d46b9e142e58cf791839c363060ef1fff335d4e745a741dd612a9467190193dacd18dad86af3819077058571594a4e9f178a068ee78350843c2d5a7bd8d676677f2aa748f6703405c25ff3f8d7447d60d8c21269f0083d9d63fe5221526cea9965e3fea1b1fcc6e333d99c128dffd7cffe2556b576fe156b52d3c614444f59ac2d893f8cd78e27e18b23171938e1eed593686cc6c28972f75d0f1a31e43be3a9795275fe2443a735a00c40facc1335c86b599c7fc55c3d1b950ca9582cfa853a6f361c97b204a06331e7915421ef30a07f02afac826272396e7f14ee898abcd7c5231777f6a1d6d321aba236fd326e0bb38b5cf36f7a63cb8a74d8a750e33d8407d163690c30995112d6bdc3a7c701bc68362ead3059ab79c906ab5b984e95593368875558a365fa89f53b3ab6fe12c84df6ad0cd3707b88d499cbcb8ebd52b9b8b7b11ce4ee10106a9ff986d3c37278e1baf91470ef37bf2049b9e621dfd9915b3a320c8da7ed8987aff8bab60026107dfe451b376beac1d3f718bf5954fdf7ae051ddb8c45a3337575d2ba35135bb2b1d555c81f9e88053eb4854f029c0316ed35c298c40ccee34b1ed8d20c7b7f1e03273c3fcd3a5a2d82d714db73cf7ce3fd01ba4ab0651fd19b2971859f77dffc8f483ddce5700cdfa2b9901ef7f5cc59925468b63991362f7cdfb62e750ee77b926f2b06c5a4be013f33a74b49bbe69430843f4fa274a4ade19a254ac64ee041ca41d5323d018656d78985d6b9e688f40763218ce264431c9d5f0cc6b133c3d292bdccc50691e06661dde3b67402f817a4ce7bb2d06a01282f729cf1596531a403d80a662c90f2ca320c24fc9286d8b81cddff06d645f98d03088272ed3220feffa524b9878eee12a293c358108f4ef76c9f3b57204d3437464428c19552cf483873c020d30b22ce90d47b879ef216156ff8869a473e3c8645b7dc37dce482c9957375ffc440105700a8dfa3cb0296358ba40515f24c75a407383002d2d8fabcffb46d9a7739fd2b29779768e883eeccaa8ac721bc71931112971ba3ee6fd9cf83628a392189397f1793a4cf11fe1a97fb8ef62a80515446ab540d9a082b3f09fd1e44bcfb934ed14df25976efb64870ef4328fa8f8d26e95e45e096f55b1a9e444917d64fb1932bb999c11e88e61c0113d53ec2b404a032ece3ad7e0f9c53be3fdf068210a4cdd9fbfddaa3c77fcc9ee1dcfd390002d450d7cae17f3de78b7c9ff16c7feb3ca31f594b224434b72f141f59aeccd6d74be8fdeeec331f7b91039b349b08e433479c2150a3bd19072c8bb91e6f590f3e278e52d58bfabc3ed3d29db7a5df65e2bf67c90d288a2acdcccfe3a8ff82255d7574113d45bbae3a108b6c870a16cffec73c623164604d95d6b3930a751214ec1f7dd168cd06e276fa99d89f8e769b5c0c682497c249ad6104ed362305acd34a1b9575d51bb94b"}, + {"0000000000000000000000000000000000000000000000000000000000000012", "008fb00dc861892720741683dbd7328f559b1bf58a16181d9b135ae6039c45783d55f18efa4588368e4b230871e5a0a784c77736b51c247c3975cdf0b0cfa4393ec595eeb05ee98d2d65465d5ee22edd88fcf44701d8acf88aa3b2f52c1500aec8d4107de3bbbe6558021bbafccc05a359757ce178380f05835a36bcaab10a52d0e727c769110aadb9191eed9b8a51cf187d7529f7affd13e6f8ff9d5926a97a46a96b103e1a7baa081c3ca1c065087f6038c0de1f17aae990523e3fdb09571b0a169f910995a7c656deb4be41e416125752230e0e52df4c37b562ee165ef7567c57a0d47eebff30863c9dc09469d550d6970a436845ba0648f9d96909eed8ac5c3c7515f9210342e3dd1162fdce1f52550d2dae15a49e7be737b0323ce45c5e1e0bd9d9467c0a38c7d96bb097c7db20329f4b6aa4514a3f51c8b716dfe211932997896e5ed49c3a3e443d67435d22e10117d983b40f7ab8a7e042b1b3acea4da74a0fb80305163af2be1d3853c93bb10e43f1530c7523fda843094c07953adffbcbdee5a45c2453fc8eb779ffdfc632dc17ff6f0e7fcf9d51633d11d07719df6b59101604f8f45038a03893966079a699d778630f801972641b11bd9787ca2f914a2112d2f7bfd848cccb8d02a1177e33bb78cd3d41360a5904f17ce18b7233de0c2a457557973451d775a79bf53e755c2df6bbe55ce1cf05774beb0eda6783ac1ef32aeda44df4cbb1f8d1a60d95a982e32325fbd15a85e4372fa831b6299504d007e0951f559a435196f5c24a823c47d98055b9d56b1b3f8fbb8ba658ff486c620fe45085d54463ef90060d9717e376d6b498e396a1bd8e4a397490a6e730932f0e56d3a96d5e6df75b0659203ce9d299e798758c150559e18dea8b5d8d3dab71317b1cc74acc1e0ba0208954769da4bd51de13d3b7957152a9699fb65b800100033c27f3a6bbc39852ff40db0dad6c435f4636254e3f9db817f31adbc9393bc05239cf21683faaa203b6f68a0201dfc13a05a110164b5c29efd3df5ad31913cd06eb4fd5f0e3cf1278272be401cb9f3f8c4803ea3b8b860b655ced4a607a8c4f18dd48aafbcf923bd40a3dbbdbf8f4f4537c468cf4733f8825fe064912b5dacf63cc586fb2f5d3ab5ebceb26a1e83d068b2e117ccb230d563320d824dae343e289755bf32d02042a134f8b1bc3057273e176fe77b69ca4c7b3a9271f58275f8c1bf921bdc61587e66215e1f6e3bf264a068bc639b49662e0c78a96002173af62650df3fea70b648bb81c53f4cce48094e2772bd81a5dbd5554190c4114b0aeeebd899834e331827bff093d6d50269847a887d80ca36af3bc4767a258e6147314e679c0842233abe5898a80b0b16b050167fe2b394261da75d745486c9cf69f060dcf00f669467a9f4a3c35bf8c0c019acba8a74e2941a8d3c48f655e0231d2d8f561541db39f90b5cc83a4f143d29ccea24528c4c5a8a8450e73aa7ac9cb426bd8b871f43d2996794879cd29f7504bf58fe41aef96dfe0b6a52effb8bf564fff7f92190a19f633db89a8fb72d37b81dcf3dd0ec48a000127a68614702c5135c83bc5a0a0e1d0027257fc28b82ad54ee8166aed1fed3c76e786e69ebee9099e8f6e5c3be4cb53df9375e56f07c04758e92e20683e1cf207a113c8df238c4f5bb162ce623705c696733f24d02515148a2fd101add94a05b5b47333797101518b690c3ebcecb2491567503494a868daa36e75b23c09f51b137b9c01894f737f48f43e7ef8bbca91e11f3937166eb4bdaf1e6687c7650c25606e04371858bbddce23aafc38014fad9eda9f860a8de52ff2dca219b0141cec71a7c84aa348b1aa751637fc5611dc57118cef284757b581ea2d2fc4b7e4f4754b066e2270df2127"}, + {"0000000000000000000000000000000000000000000000000000000000000003", "00ab4272fd88f6c8f608239e1ccaae0e1403947fa2086fc9c2b9af589dec62e480833604a5cae07bf7cc02851fd809a4f70b8fd6135595e11d593a3617761c3cf697668327d1b5e223d83f0f4774de78a95a5cc60ea13160301a8f7fe1f3611a9a923655745530c38c4c5186e310e13205d16fd7de21d18fca5011f9d78b1546a4c9959e85b950fd86b71d3884bb1e3c99e64516d5f8d02bd4f4d0f64df4edfaced5d232fadd2b02011effdd62c8e23fc462310fc8461df04be2d843300523e690b38f2547bdcf4182e1bc63858aa8fd1c000fd99fb49324d2c1a75ef20d2f6a6e6db7539812b7207576f1725c5ecd705f52c192e319bcbe7b4d8a4401d95df77724ccb3a25403f4cfbd94d54250ded64b0445ef9496aba249d49646ce047d4e7a048237a36a1a107f1e7dcd8283d79dc6ad4545ebda3efb3647fd65d2f3ef8621013f2cade7227b571d2e5a88fc21b905b26b476b73a8fbff3c81ea052cf8af4c1a5ee3fc2bcdacf349eb9e85ae7b5485006c5ed9a6ddfdc1951642f1fa6df6ed7fc20b12eeb9a99631715dd71e891f7d54d4a6d5892aea9b031004a8f905d50a5c6f1c07485d337131fb8f9efd35f24d4519b1b85dfcc3c21d5b4f404bcc2f71f92ff62c77b7cc6be1a85fb1110cf0a4ecb1a2c18d1cf732d7f3b390a358ca5cc35d31eac7d40b1bf655484fe38706ec833f0e775dbb5b06365dedf48faaf1661cc504587398cddfc7fa3715240937a9b70bc670e1e2c3249370c8ea0157dee00511eb5d0e0a2839f78308e33af4a43914f3d9954150233355f568296bf5b7b572bb00be36f54137f9d7241c40658e8391147d4ed5c30cee7e4dd8fbda5ef4f02261ad8a6c69e505c74022feafff38e22dc45f7e5129ca86f4542c7ac59051a3adb5eba8af044919b1f92d8704c34511040cc62373d73029a65190d7b7c1bb01a6e1053a49a275b94b3669a5b37871b4f67cd25906fea8b4690e6227a4af457e353f08aa3b3072cd801da223a9ed578f19dd92922f51634e5a48a076e0141dd6278f04162613a160f7079dd5826f917e1f40410900727db5a81a75f351a45134d434e2fa53598e180a18b5a0824d10cdf7d357ed475286831d3c7aa6710a755d1641f081af8db2a55eeaefa1bfa2c51db7eb272d03e12c1de1c7af253664b0e6c05a3410dc1e6e060a6526416387a5775759620c5938ab2d97fb2b69240a851a982203cda5a5676b29e2090e72d9d9c23207f54704f07847c7e238f32215a11f19ae45dffd7b112055f2caadb723852c8473ffe17015426af3da0a18915600aba5d88dc61592d1b7c2c772fbaddbdeba2342a9513c13f26b49e1895476637a4b0a56d8b9db1b0bcc93fb62f143276d39f5a676bdced0321e434c214397ab0c106f01fa2ed84686da98ba1baed2be31032334e09d4f04eb7c1af1b15f602770d639cd2615091ce966ced405518f34944e2bfb19358dc3eca7190c29d13066126699a157f4926f6687b97763579aa20e7b449191524360b97ef30b30a085d62472f386e6033cd46af5e5d15d6fe7fa1ec0ed10e6ed287a6aff0c8288889d8bd6913ad610fe5ae484dd32e19435df1038bd004649be0353537320b46c1f213936f9781921c356663de355612b69c363c07dcf44da394a91f90b9a3c02c153121f683434c8263c234965dd0b9e872f168720cb29101dee47d6600ef9843b14529cc09e0ba5be9fe8556c498c51b1aacaafaf8ae278b7a6ae2790d1b09ee2bffbf91f742276a8438247639f00a91186d3655ccb6c93bd2eb33eb9dae4c18b6c5739a926aed627d4cecfd18b57634385ddc1d9168632bb5816df98da973541b7e64af7598f747a09e258974cd45299764e0f35ffe1c1b8856208397b4ad4ce5a74c0"}, + {"000000000000000000000000000000000000000000000000000000000000001f", "0034410efaa05bfb8152805423b09b0a8be7d857f901a10908ccc19170907e9c9a7b73ebab43af3ab7eb0e95f2a8129f3dbd3df5813644368985a6445fda5f1b33d27f565eea8b36c8041048e6d3652b7f96803c0375fee70691db1742fca7367757af99f2355117d62b74f7f346682561f674e873286fa6df5039bfc143269853614c0f8913c7ef0778246a502a2d1b7965172dbd0b52e82a1787847a177a746ae03234213ae68f0450e12443f03003a600837c12b5125293589939330c24a429de9f3b9150dc73e1405d16be6681dea68a28c52e094a4d8dd7b15ca84bfae1ece274c3b5bb09601f7c91583cd133efa89755366526e6fd7d3fc712094e5a23461a01abac59d0a53cda9ac0c7c3fe71800fd64dd27528d2b978b81829c2f196925bbb1309ff101f10ef604e8f48d0c3c35d82cade7a7ee2946d131cb7457ecc87c1c2bd8ce40c8da11fb219ec161a6d01942b2cdbd26693084564415aecada6792b1455f844c90c10c396abbd102114c319b33211dedaaf81960c9805dc2f4fa0af2987b2c8d6ecd8e1a8a37561bf2e96720ae7a22d698cff93cc4fd7717d790b1353af01c7fa6dd4444bc23913a679735a4196f377fb3db30cdf89b9e8d2f0e7394755792bb013fb0618f958682b9c7c1dd82625e13a830370e1629e22c10196e779631fdc1ebcd96713774fd7bb40f07992105377e37202348502c98270bfa991315f71bbae0c8c98652ecf212e61d099096777546f25344cc217c9cd06debc221d3a3e33effb8ec1e30ed4554ddbc0b22ffed2f5a020de610881f3d6fbf45577450540140e7c98debafc0ee665a24cd0fa4cac2fa61c73b431adcf657ba8d0369e65358b63566feecb2a9e2fd63cd2ee1c585f71171b7cc477c8d0a5e3c049db23daa59ea9bbf5dc25208129f1d31e0f8d047e42d5f8b72cedf76d50efbb00f8594c6601fd3087d62186a290d7a0aab1fa565112a80cbf5246cfb0b22421a4aa425f17533e3e30740788aa04f3c75bf48285114c7db094475e711f17d71629d8fda5938605a3068447a355f9069b08fe976c0494ac0b8aea8395f8e04174d98bdc9e195df6357029278f0f8fa7a027f518c4e4a9e9e806ea263ec4290c0fb63660c8fee3b724478096f9c2fe14f83553e43416f3327a2e8aa7dd40155387d4b0816a2ad66960029389a9b74f6699e01b60d64c4dc119583ef1a26a25ab2e470c97f90fa6a572f69d2258299a0dd5f40a0cc66ee255cb2846e250f7fc54d897ca6aff3a12101914a4029fab11075f28d6229672ec35e6ab533bd60665da044c0288042562207b62b069e52928b1ba710cb86622e24b30e07bbb453797e62199cd5ffec9860ad0d3d6ea635a0372a6442b5f58f8ba278138fec036e16237580f38c72e8505ea39e83d0e50d61b4952026f8f1135d14b954c6721f3c61eed573c0ebfa99f2da2efcd38aabd0bfe3fe4c117eb4b971d983b2f4e101f1cecd8451afa55b471bf6bec178dbed75d02ed1d7f9a1d0bc808d17de318cc16d2567f49343ee2d50b381ef1bcf3ccf5dc6f0333a658e1b8e6f811fe432d0b1b7723d6d395d3afc59ce272245970398de40522e102d22a925bfcbe07144c1fff21ceb5f35daf572916d49f24b16d519e3b4940e3e785cb60cf3d3bab02d828d4690c884cde6b8163d21374856a25dc09f106b56540fbd5dea0d8d5071f0b49e8ae91d49a63bf0347849f5407406aad0645af9fd9cd62b0d61fd9c15070ac0f27984db1400f863835412aefaaf49e434f0a7cd1f2b2af37e9cf3eb41c592bb10d81834ef61936db36ec9d965c2f8ac1f6268dc888c64ee236b87d0c0f612289485d1baa1d03c0b6e238031b5838e8391d4c261a532e66f9c7a35613fcb0bd36a659399eda"}, + {"000000000000000000000000000000000000000000000000000000000000001c", "001f47c23d458a33b02b02219bf458ff31d5de1c2b3bd93a9d20e7d5834133f4517ed3adbda304b775a90449758b187e4739fdd280f7fbc2c4e5e7495845b332a0999a01131375c564245eb27fbb2e1bbdfdef31015f443d905344b3d7f6d2240a6dab6ced131617f652cd742033ad2515abf7f63aed678a65cb765653f208190b133f8b7c573bb1b1ea0ace01fcff427b1b4a4713561bfe15a1498bc8471b76ec87275b165c76720337f5d032524e79fbd25103a790a098600a45330142e9a7e44f554969b90d54ae8f5cac25c2b25d34b62a5fd6e73957c3f1c25dd4aaaff9927974dcd07c6a2dd3d769b60c892e894b57c2525fb402b4ef5c899f0d68b601120896a73e3d42504be44c52146177654323ecdc480cd361dd023765a5bce02c7981e655d7ac1094dccaf504576f04e311fa7c6664de10ee7f079e13ed3ade31993a6adc8265a4f5b6648db6ef7354de0d51e5eeee696365a9284539f8d7a499903a15b87315442319a5eadb45a3515363e8e282d4eddc1f78d415f4625f21a8294550b8dafa86758cbb163c5d06661e4cfcf6ed133c5b013599d1c7d75b967bcf1ebd6f1b19f8fb32c9cc1194fe643a274bd4de72c8f855d423eb43a8ec5faa5b8a5b26541174a4f1c246dcdb3b25f7c4adca12a5a9ef7de461a076378ad39999b57c32fcab98f21e6defa6cf6747af7b31aaf5bf1d95e610e798a813a32a9f7f4b92f67f27bdd8d26ede635d3fe4e273a25fd04b5bee54427ffc9462af8ef9ae4b1a881425bf4bd1416fa5621b3b696e65257aafaafc3d027485c9a51dffcf1054cf4e2ae0ae12f19aca351368741af420342719b954c21176c2b5e7dbd0640b20bfc1ffdcd1cf4933cb3461334b847d65de7c552b38d015654a25d1874488342085cc29c3e3565fce4b52c09adbfd5d92e79a641887485e054a8ee395543e01eff237b58dd6d2ff2fd054144dacb27a5edf4a1e17562b97e8a8a247bcdec4f18e63296dcd2393bee4028e949555cad46b652432591492fd59b8653c1abd2d489dfde461c9a9768067af135836b202e5516f2d07726a6c50f90e3bf40340d85f6625c129b9384f070fd15404a1c8e48c836a51c33e20c8f28d1fdc13380d5108a81b1779c304f251a65f6efbb109830de8042201794104a9ec3bb528c6d6b2c8e6aed0451d59b70291ad8586431661498ee132ac2bd69cf8a3d196562d16b1cbbe5fd997fade698fd67a983720899a458c241be7ce34cdb14e7ee7382234d3da3a7401f92ef524a53725d975d305b07f63637ea797ba081d9a444b129d3b1b2b85970aaaa4425b7dcc2f2cfb28fcfdf617e67605b946896ce60731e4606aca323e2a9625df2310c529a31a8af1dede230c2cd1e7d6553379bddf2c812d4a1a624c9318d3d30eb322447cf4a92a2c2c0201e1bdc6eac793a73849e2a566a0629d11f8a0801720341ec2c61ed87101131869bc8a9995de58a2160ca16b3a55da3b69998893de4954511d5a73f9da42134f55f68b4521767cb0515d572c9c85c94b2f089807c433d3f70b8bb68e1c187805eff04bc6bfbe9e930fa61eae26b6fa9dbae4e25d9e389b434daf5b80121cb34ee65d4ade5f3e3772e162f7925e1d9e53e0e34b259276311e6225098404fa69afeed9d049b5a16804106ee2b8cdc0a31272a6761159a1fa08dc92e24d0fd007d1ba4dae4d5ee2914a659bda513aa811ce912c54b48aa91a766d9016a32db744baba8051179d6555413c71e765708dd825367fb143a8c69fbedf4e3008369dffd3e6c283c9bea2892af5cdedbf0e9cb9690a0d6e54b1afccf1ebb9918f0a427b7c94693ca67709307e4f5f5dba71ffd23333f4651fba12789f73400f16623046e92f1f4a9393e28161bfe5198d4ae8ed"}, + {"0000000000000000000000000000000000000000000000000000000000000072", "001ef5180e0778c6da5f648e04abd8cb07da79fd5f0b7ac124238b01cb2d51f35f0048a6050cf950e55202ef268c5c64aa2f90fa370e57c3e532a9845ccd7e354a8fefad5edf839fc9045744b1defe002796b8170beb3e3dd46b494b74a50899dac6efbadf259cec4e1b579707f3581c9135e3b20e9ce1a76e4fe6dff64713974c9f005ebea39611e662dc70f1c6c31a9acce51518b0c1bc903da75d20c445edb9af170197dfeb6a06e78efbce07d69dc9d4c0c893a47b1c8090957ff815526b6fe96f671985f6174c15d2f6df422cda455a164d43fd5408da428fec980d6b6fada6c78bd9361e2e872af877d1e859e2530412cbb84c8e252dd8f8601042d8aa965477dfc18d85b5a875aa2aa213f79e857e802fa2fa70e441f370688931ee9a8b924e7f95f8122f62257f8aed7d4ab533912fdb667d88a3d2c7fc33ccde5d8124343bd68da35e835eaed1165fce17cf00823d50084837f057c8403bd60fdc16084f3ff68f03480717650d38deaebed8ba2f7559eeb3c5bdc0d32a9e130105567155aa22549ddbf16f9eb50bddc7cb460cd6b9ceb11bcfd33ab76822d176a9f197d8e2ec034717bd5dd2892943a660481baa7a5e4ef45f950007fd2a3dd689498f7888fa0fc4dbf76eed03bac29b1337523faf1423b7409808cdf47fc943675ffd44da3adf6bae2ff36267f2c28411537520121cb1b71a3200c45317df0c252dfaa940299014080cc665bc27f70fcec4a4870adf95f507a2aebc38b12eb361f9fe930895dc2a32e8601d44a3c1ceab49becd9512f5fecf53322e6f3169b2ebe82ee7877c69cdb6e2c2180d1700f3dbab76a70d8fe732f1c2410e630c72527c305e0ec0fd7af9160df597a3534267c3c31ce1f32ba60d22e0ad26cb8eed8b2f30c238aafe36e181b7d0334939de8d2c8f4ee20fee203708ca53f612e032fd078800a3bbde8715a475c5fba49ac37fecf96bf51f6265302d7437858d954f9374988f5bfe78fa413618722e074795d1425c2201845df1e5e2388da1d73bb44fb20812ce3d401e27e3dcad85aa022f12297e0371f3610199b44c8d7deaf5efed95f9c376085e2533bb49be316b35d06669fbadc6fb73481fd9b6e4f1edfe2aa7052a329b03a89873628bd1c21992ad866a8738538917ae944877cd6c1313583239d0fa39451a3ad24ad3031345a308504551479d2104b6e8de62de1077c9671198e8f0ca84a5856f22923b807caef4b7f4cb577607c6dc3d734c92b3a207f2d623c63aabb87cdf1a65318a2f2caa8c8db759072449302376fa6bffb576730bfe09d0c0d90780ed1ff180c41fe9db78845f553a2d2444e35d3297f5fc3864c802e5d01d4dc42c96990f811cdc690a345b3c68a374af27dd49841bdd36731ecf75c2ddce696fb49334eadf5716f5e018f623120114eb0d5dc5da04373640ab1ec630a8bc134f828632b699f7404f8e8fd4586502cdb5aaba22d69eb57546e58b947e546dd8b1edf5d478b85755a40116d77a4753f77b50e0da857ec91ab0427b9256c8c538225e025c4c2f27aceb25a2ad6827eb7b7102f0f29858470cfda347fffc00a3f9b41567527ddc1197ee53f6c81b953585d09c52d9d6d73a05245eadaaa6429a03471e887aeaa05bb17dd6e993cbda25b1dd0e6e2eaf45028595f41688c09144b6d1253b2faf7cf0db5b3bab08817f175c9ba3e79db3d80a86ed0a03d3b2ffac9215e541003f4928bd2da571a1355e7c18b816fa23ef1a124a65cd708f21c289b5d8eee98b06b16b1799ee0fa6b11a3550a41143fa33cce239377d11295da80e1abb1524251041b99021f76ad94c99a9f3533683b82e02df113e6ae4d59957d416f656289277847f0c0839863608705009a2c6a133cbd94a6b7f9c1a9e31a1"}, + {"0000000000000000000000000000000000000000000000000000000000000005", "01905f867a7cbc67fb52303209e612c52d273efbb448965d8d3365a53dac3ec6082de654a6b8ea95e6971a9e54c30e9257c3d8b8c6bbb4c2edc238e1fde2c9256c46d21c9cc631a7e618b37f536ef7ce433fc74601d2f6789bcf26daf9af1574527be7d1de0b333b5b2db7bff3fa6fe307852b344d597a44511463ba7461115f061f385137cf7f7c71667e42ce3dc76dd39d562a440279e32adc21890316f6e84897d240ef7f41ac04c57f63ec8cefaf22fe15441af44cb6a791db3ec330a8f2013121440989351405c3f177555bec95c8c30c00030ce4a587b5998e125676332461e24ab4c4d0508e42a82fe1692d6a9e976f0d5c5eb662f556d64c0b79d29f58521e637e79226a17db27d9708af90abb13742d53295b788ba9f803e195c8455e8ba0db581f0e76f7de99d1e624a28955f4a75b01662b7955b9fc1d7ba2db946986f7c95ff6fa8ccdd363395d3b128401a55cf03c5f1ebb3251622d5d747bc992443134033eba6dfa81a28505574255a1f8b01129c1d55c9a75101a792c7206dcd9221d36bff5b8048ab0eb76cba475da6c0f47ee74e7d11f487c93d039b711fffa7b421434e33c9b321b7bf76cb1a8aa3fca0cbb101cdd32504ac545b8b47ee1ae48957ef7badc6721a47ba68820ef378c0ed654b353e6d3bcc9591467d03f5f1ee3327ca721005a6103f3bc73f19bff518d770276486b02afde830408601acd5f90db34b6cec9f852f387fc211b81d0a71d92af9d748363ca1d919545fddbe5fc034388d9e2a65485863fa33aa7db439aa529ff5b1634aeb560ab65f89352612695946638b342bf3dffce0988b9a4d4df17e56369c7f510545d6af05d9e9c6a29d64eaaf0ce5e5ea9a732dfa142fc9ce5997b61270d53d9f1a144d15cee85e1f009264c6db759db8bac57a1463c325af0d3521e05fdbbb12b83466c7f038d0486cc51fc8e84ab4b9b60979f2d21b977442ce7fa14bceb081bdce8df250074ac175ebe1df9c591eeef0bd45cc2b86c54198c87120bf625791a4f659dcc0c13b19b2301495d78f389f4436f3a9bdf09d45ebaf107ee874fb622887744b9a5edb2d2a01e5eabdf5b86105121eba248471db93061b12e9a64ea0cf7993a0e2a974460b7917cfb5dfb95c05c6262a23b695a39f42fef02278691725dc1bac5025f68d21e50643b37c706d6b05fe34a8cf34cc311407b5018f6432175c17c13fc52763d875099576978804b5f7e6ad09a782c720e8826fd8cd695fb7563c30054e705e912cfb8603816b4fba5ffad7fb1bdbd91e34d59145d92d7bb2dc60c3ca3c9f69e0ea7d8b18170e19a4974d2fba6d56f65fbd5568f6618b1e3edaafd3ee4be12f3e3f98ae10ef306eaaf8db718b38331780ac850764f8f5de3883f7bd79378eed6d5d44da893ec4531ef47ac7f51a8050659c205d817595b76d169a44421acb04674f5b80a8d36bec69282539fb6b287e551c06d2620b0db951c1ce1bb34c727cb9ecea200e465de65f995f217311d8db4766289646c77a3029864d97c01e5dc589013088befca7c2698effef0d16f838dcd94f5da91e9e81b850295c8dbb61fdef3f4529f668bde726f9d86a41fdafdf7686bef63f55e044ca128e61d41fc4f2c05286517ad97942941317ed4e472fb00ba4f8958ed740b7338688f078699cc5260ef3575f694c1e8f96c890cdb378c4849caa2722c71f402f4ce822d9052a6db0ba7186216d8c06d3b0bf546b02bbc7ef8507aaf800e4be7df8c07afe3e36c963d93373409dac1b1a2970bac45ab7d09c503e11a630ed4bcd1ed1cabaeb6372c388209b21a91d6f4d992edfb4fdcb2be1fb945cc45efd5aca1189eaf194814f723e2c48dee27b079ed5e132b8b3c629969cb490798b27a48a65038bb5907"}, + {"0000000000000000000000000000000000000000000000000000000000000002", "004f9efc7b24a2ed28c8212a4c5b28ad6cfa4c0d5389ee3e8cd16b30efb8cdc94b2bf2684e922a7e8e1c0677dc8f0a64c229907830c148bc9bccdf86a938cf2abb9e05c08b9bece117349c5c679e9a9727d8b4ff00e36bda54cf28532aab84eb325d40fe04c91379ff1d024ded674fb3ad48e476eae23f3dd32b7dfec8891ff6aa81b62a9581b7c3b3522158f0bd0acc2c8c252632d9e01c8e38c3b5b4834fd69d519a5e9ad9bf6d11433a5dee757703e8cfc1ab2db7e335242f513e702162b2859ee24131d883d3aff9597d2d89c42f72301aa03c586357908b37a4723231501c0d84ac56a5341aabed1c161978c8d3411ba3956cafab2b8d3d7e4f20823f66c10bb1715c87663238e2b36ad01c1daa412b961f3274e0f3fbbcd5e3a546f164ca896057bc0a284fe5573564cecfa84e33e785e00412f9da9fedf580c8557e7b24c1554afa1855115f0cc23fdb9df47d00e2882f98451dbd92a343beb97fdb8167ed39df294b0accac6fa087b91d2125621452e1bd7222b9bcaf1d08e4e22b73ec13edf3473c71725d634512febe7b3186d44e62596dbde606674b5c69bf3a0618719e8202931465eba83c69b8ac014d7f6fd732dc8fdd14571b1b374d9e5097a1ca30d44a27f4a8223f5ab2a99d0370958dc271799bb28811c1b7b2f6049a9dac0b7e1784444d76a3978f9e8c06ba32e42f522e6d39bdd602b7ef4a92661d176ab843ca6a630278fb42ba59bb044e272cb1c18095107d70bcc87fd710b871c93e7e1132068567cd8ed4dee452d3d4409d3247ce9c322731340b5e75e12127a6f235223941f815cad51f935c09bebd88d158875eff8bc438a3a2462249fddea02810d816685f4d95e7a7ca611aeb9ef9ec614465f3fd12bb1a8b45e4ecabcf2fa23e6ca096660249182e134294c74910d739bd10c17bc8bb76a36b34b279e73a01a767ffe062eeab5e35f1e2d65206e49742aa6e86071c0fd1f18b1ec2dea4d25a75cae581d6bbdffdff021aa01ad6ccb926d00e72eed73b29ccc156491942113ea7c0fc795d95e4f062609dbc05e8e33ceb240b270fc1a8c8aa951966637822c15eefef1c239e507858eecac893201e259d41c63449f4f2df00cf3c31323dc2da5d7ae12ee3f03b97e2a662c14a68c83a0c724628273ace6bf65dd0ad989a9a6fd6ca3f5194e7f203cabb052ec7492d4e6ef7a914cee3c662fbbc1d420ffc2c3e1d328b3ff320841f3eba5e66138353ae52182604a1c8c6f110bb6bf5bf8d7098965e411546c64c7ccef1b597467fe646b66a52d5caa5a5f095104504e9d8551e85e3c3b4b0a7225aea5f6238fff54a1e432d548f19d3bea1a0aff8d88f6ac57b3f455a625306b06aaa9e185c836cadc4c3a3d2778658a01b45102e5e425b8a28ef01f6a964b0a73f5e4deed8bfb50005cbbba1f81e9e556a5de3aa07e499f581759e83a01035943a61449f7a86987b164862c8eb5ea41e323e0fde335638d38323c74d3263c79c30549c68376d2a1206de624edbce457287d33a587f38cd37475c12510c7cb1e333675b1991afe1c980293f24f6f2b2e1010de5278eb8179188daf01270e6b5aad30bb01ee48a259b1f7b3d9ab8214bd4527ffbd702e2ab715ccd293aedb726ba2d6885e23393b2a85e0925afa6bf7d3a0814ad80500bca598b5942646528bac49dd2737a5713256208200daced20a1f2aacbe7f656a3aa9df29f0f718e8fb89b2bd4e261f29ae6f35342689b5e0c311058d72276cd403d50ecd93980e9f2666f78bd94160e6ac2a554737dd3d083229eca6bf93915b7528fb7561b76a7db26d89fc55ec612afdbff4a41015f111f0f3f54159a879a050e14d1fa6bd5942f78dbdc7dc81ac11adabd65853f583afb370475a986d0d53e3619"}, + {"0000000000000000000000000000000000000000000000000000000000000031", "006a5ad1ab55b33187078526bb6dbd8ede187ff4ad253197c032d0ea530cb244c1c9ab319ac5c07c07780145562db3e45603c54f201a6f030d615ecef686141b5e423ec9d28e8df639924c505e7939ecc9db25ba062f4656064cb7edbb5fe4341d3c093d937296c5af146fea07e7aa109b64b9653cee5beb25832dd2e3bf1fccd3ba3cd6908d7a92477a37767e3f63a95bee612bcf1e5984adcad3ff89586fd965e01f08885ad3630347ec914b0f84eed42d907bd27f0e9c323a8567e0621f5404612d441bbc6fc82779ffdc92b62c5f16310cc55f15f34bcffef5a0b7c671e455132839bfd9f717fa2b63c6cbdf80cd67e66c02bd985e9175be926e07ceef134f707eddd955c6aa104bac6ba83fdef8505f3cac6f05b74d5fe83a4703397929aadb247e43641cb272946860ca43e395a6a645f475ea69d994ab8c21e516e70297b92fc50538e95c7ea86668f2be5b3a090003bdac5d6015af9151f2bee600447eea9995b5285bbe469816dc2ce2f5bb09f47bfb435a6a1fe1e41090376abc18c5435769e2f27b5d1afdf906f2eb3f11b6b40a030b34e700f8023e86ab35f5ff5d521c940c40162393a8b12178d313f6e1f6cb4d31b2f52de60f8efc123ec6e30daca3254f66c80d11e4dc7393a5112f86df6406c59c3ed6a4ec0d2e8846bd08f8a2611afa513cdb711a7fc4da33e1af27028979f30efe5212fec6e59d9391f96b2684dd6c7c592a284dfa3cff1c004f43131225536cdbd707955f92ea204a34585a2cd0dbba39a3cd19ea670414b32e5ba50d358bbc8b33bd352f6b107307669384554933b8154ceb0ffec11bf30a6552a6beb9c752b7c4db4c06a616f2bf6f606c3d27d68b3aa333ec84d9df11e3a4af65625cb0871e136e2aad0b973f7af482a712ed6b65746b173f835bbf9bbeef69889fc2900ada925a96a2c4c3b89720015c5866455a4d54fc14c4380b51c31575719faba80272b4ed58da7acf4c02d7c5865756c765575c32ce35856f93aed21beb65d903ec974ad99724bf1fb0d94c853c01d5e43c5faba6c4e9e64755ba629b9d0a5b0b6f167d4832854dabceb12726d3cbc1cf3b31a29110aee9851649b08b59db5200e5d89c0d5b220c15de4e997e65ad7440d5c201283a71f028376431df723457b79b02879ca40da957b5d4f0bc1ed9fa663c45ea02a77e159399fa8bcf8d6456d4f1a905a2137f13af2fe36e6fa71116893aaf45072a79159d7db158a22306b9b4d6712e8c1bdcee51ab2fa280b3be051ed7710df77a415755efa0dbf9f4de3e67968aa3ec5bac2b1318452b837ca70bf1d512ddcb58e122593a5adc721a8442c22b57e99dedf831cb9ad79be557c2b108cc140ec510efc5eb81cb8be553414faba9b1a0924e1014622b1290ccd1a176a8e179caddd050a8a9bd3ae50185ebccd41cb405fb20c096b4b33074922c1a57050a9e41e6f9c32d5466a563b9cc64e0c9a01e5a64cb0ab2359c91cee92de2778100aa6346b36d19bb8073222bd98c3eab816fced274914577226e7fa27e7aae0f07657e0b8bd53352f391bce3b35f018fcb4ea89a30ce0784dc5d13ede07e768d4571cceee97afe03751ebd3a4cae73b4b7a409027588210c3ab0833826503a53bdd0dbebd245b8ae89db9f613887bd21febd6705ca059bbd2d2d5b877571118417e670c80b0980eb1f4aad252b67405ba5ac880a2b654d2e39643df4f805e2268f5f90fe05f8c603772fe80ee577495e81220ac7f3bf3ad21028b73ff1a193d53a75558f7414480f1a8c584210b4871919e1c60dff6144b7f930e92f1c43a9e551ebbd43bdd2939badce23428418789c8e23db79a8fd4a659c71850380e9c54a0dff6d90c1fa5b02ac5bbeb108d9dbe906956b59df3affca1a882e"}, + {"000000000000000000000000000000000000000000000000000000000000000a", "006420a42a9b5c7fe5adc71d35e753d21ee7165791029daaedf08fc5b3e3bfe14ab95b77a5ebe0b9ed5033a452cf84964a5bf6382477e3add595f94cb1a907688a378349636b3fd840e790d4c8f44270e39e1b8303fd2951b155002f014611035421a5c6d19c56c75d109f1f1a5717d5c5eadc78fcf7efe53bdbb33f5a26164b732ced67d0379e4fb4266b354cde8a191c192120676fc9094f99f38e7bd542c72ee54172c48f95a004dc8af630151735781ff50e423048e18fb55713f61fcd8faf20e56197595d3c3d4df9ef0f3cf7de8602088eb9c30a227b95dc5ba24e86d4aeaae871bf8ca71e30ecb9b7de2591c894839678baba455e13bc99450df10498a3498868de4fe4edefd252171f3d7cdc7e3fbd547fc4bd89abee1c46fcf7758bbaaca43eefdb1633e4fb3b2b1dfdaacc8892ebfe56b24a53b9e29e201667cd25f27997cfd1c72a7a6c7c065742d40b3200a8c3ee1467f233495a60c39a7f69827a047b011d0e284c3a185e1047f555c5728f6b4fca305abb20940bdf3351f015cd2330b3f42111b2fb1b07a67d4e031ce5996aeda8bc6fa38253a1ffc07ae12e4bd167c51454db63cdebab5bcc3604250e4604c9a66512fd20366023e0e192abf4d60556c379b83cd25befd3e361405b32741cdfb951482285995343f1be4ce05f8693483a544078daafe3936a85592ed4ea236dcadc129d0be186d39351da5590bc85384b68b412bfb6fed0a13002827d304da2690dd003d00d365ad8fc186fb23f2ed54efc51e55f9f6a5fc603096c66aa20f294f2d74b9f44974b6c8aa7c781557e51406d96600c9c874f23c1318a05b71e03bd20685dd950cf6338acfac1693209e52522564a4143c564f51e2ff46e0bbc9f7d88490d43353f93995dc5a1254969ba6deb384e5e61e5592cecfb59e974ebca69dc17ac615477981bfd61cd0090bf16532c7b9dd23903a6dc7a6d6189655056cb176f1174c3f902dfc89d6219ee1ef32522689dc21309e3c223c6476f111de18209f32f4394f7e11d65010aaeba40b7a071ed805af368df6b9a02e1be3933ce05ed73bead4e81eadd925a027de83efb546c9b40b7694d83631edd790de33ea90e3a5fa3ab5fae9ea692060978a0b3e13a5d7b49a31cab3c1010d882b6a8bf129d4c2c0d8bed729d095492be3fe6de70beb7761f01fa87644e835347c196e6b41cb89931f47afd836b0d61b12edc2499a37709a313d4c79928f1dcef4d88031ae1d7798578f95b2314160b46654d46ad9672c311704ba6b00936eb768621c1a8ae7ba90399bd985f03046314a595497b96c3b3a8e6f9d15f3c53bc84590b1df6af8ed1a4f784ada2ec3a28c8019e40f13de80733c865f9da8db92197334f291e46adaca0f603b8570a936a0e5aab8b94d6667f604430de7c70de7d0101f6f4ff3bc514adfdf15131962f3c6348aafe84f919738a7c97d3c442f85b66dc214bf69628ae7f357c059791e8e12267197934d6eccd7ef23e972d7fdf1614d731a356de7841f61261ed1afa8f42ecdb380bbf023929ad7b20796982b89673b674f7e6f2ce9b735804c53de464a05a3b3562c139e8b1cb70dea4ba271e069b1b25f8851ca1b508d2abf73e9126b3a9fc81db564cd73fbeeacd09a739c6d56f6fa4e6f6dcf7def0056690fa3bc309b98e2e47504bfda4261b055440c90cdb18e8d309e11baaa9e153e5e903a894c0d7f38b10c4bc6df295cffcd3a5f1c125c758569ae6388da636777788bb0e48113b9a55b230740c3a47e7fba013094f65306b8cecddb25d830c792ba057081afa64f630bdd27cb3dc5bd77a7984c88cf3dd55db7fbf558e0d6a624c2ed109ab5788d3de9bac0595120f50e50825820a76854b09f4cdff47edbe7a506a229fb83798"}, + {"0000000000000000000000000000000000000000000000000000000000000009", "00826d0904c8fae9b8c771e8d35da3694c2b9dfcfa12bf0b3a4c2c21abc4edf701fd5f95bb77985e8f191c8c2add2154e43d947c1322cbca2970ebb0f805601ecc51ce54a93ebd6445f7901b54f24aeb9c791f6709fac4e590e06c5f92a823443feb7a6f911ebf82e30d1602410784a635336bd61178d22b6e7cb47ff8f90b43923390082e3d07106308a8f2409569cf90930f11c2f44cf421422f6bd09259a03efe812b2512032908e1e3a26f43f380435d7606e75428d9ea6cb6635a2361dc1a67dda0f8f74a167b2ce8e7cef9df3c938e28bd8a88f82fa395c8aca3c0a7280761df64d4b6063095fef07a101f28ae0a039a8ae055bf063b195b8b0c8408d897eebe7b8e72179945c47feb4ba79b3dc3191cbd4de08f458bdf2da398b53497363cbedead8a11173bcb3b05916a9f02926e1bfee7293dff4df2981335b5cf9575f447fa04522cc0424f3785ba1f805501cb1111df2d442da84ce233d69607b1982e7dc35d09fded148b1e6a93d0d018f8d4ee19ce79ae7662fb17e74ee279a134bbf227f49bfdfcb63ded1d196b5b3565228de3128b311f01e40c62f82c71bff39c0d750811dd5bbae53d5384e6d465d97cf8b7dee2df14ae14d10b42ed9010908424836eefe739c9271a8b363e11225c58e28863d7040a633172498cea8d933b53ea40e61cc6659e9d45f6a105f19bfac622670b73cdb4054bba42c08b72ef459a1648ef63bc377424bda21313a812a37b0ac2dafafb678d9058f47fab61fdb9ab22e513b3e06a78238effc5fef8e930c72beabd39322738f64f4f7502f3c231e3e252d71a51c03a7f08060793ec18204e65948a6952249c7180d5539991865e2fa23702eed89cd166c93b25bff9640f2b4dfee7a615ca1d650f0af5d7409d42f066f1aa6d83057313f030b15b409512e7577535e7c3f8f1b356ef2fddbf2d0107610ee04df68293893370c0a0896d106acea5333b5623755799e661b38734d4995052e9c4cb391bf30aa4bd3026875c5e3d1eb1dcc4eb526d50d5dba7a10bf66b1a710e56bdba7ab39dd8e984250e895972a9035c2c5f0dab2061f0b205dc2e445c9ace731849910c046c19c52efbad887254afdecf1932ae80b92dff35a66d9d012eb86f8f27a6315eef84b6edc19ac064408f4b01bb96dec179aa15299f7fe2d275a19bcbf808767227b2a132fb1ab5f0878aa6cb58e193397bc10c9ed8d4490e011ac2c6a54feecf331a1756df95751670ac0ef549811fac6b41a720b656cf05de9de7a4192b69c5690fd8af66e9666af7b880e19bab985b3b157ee1034264fcb57591732a187cbae975b93749712b2879bee55fa87905353367c542fb6aa85d9ec3912595df1650de4dbaf564b6a633462b19cb5c5019d9308ab34e152c62c5edfa7b49f66ef50f84281f561d03a2b671d986ab9e801c31eee3690cd4a8003d05351523bc6286e34b43b488047fb74e73c17293fe349c05d392a3058b2e54ab84252407c4613d70719895312dc61b875bdaa0ddaecca8d95fe7068e67ba58772903bb8329a9e44de5a1e6e607533aea52f7d45e57390e425fda20d2ba5196ca323ee4232e567aa4b7ccc611816d078a07b409b1c642f1916f681efd6cf92fbe1768f3da33d7f9cf1aabd553c93985f63ef6f58c62052a56a62365793b87dae158d8d55d052790a943a8220db7cfd611947ea20a42581258f3918c6290ffcf1934228488a32f91796241e52573bf5e7e001cca1d2d198ec840aa1afffa2f44317ee3bf0ab8d91b2141194d27f00a14d903dcefa2307a7b1633755b7c69652bc697726c927d7baa87e692ddfbe75ea143d6efba1b9f6c616e4b6ff1d6a572c4f458a478c79117435b5c1d7b96146f10fbcb7b76b5d1cea819d1537ab1bb"}, }; // NOTE: These tests rely on CreateNewBlock doing its own self-validation! diff --git a/src/test/pow_tests.cpp b/src/test/pow_tests.cpp index f780d313d..cba19d43a 100644 --- a/src/test/pow_tests.cpp +++ b/src/test/pow_tests.cpp @@ -37,8 +37,8 @@ BOOST_AUTO_TEST_CASE(get_next_work_pow_limit) int64_t nThisTime = 1233061996; // Block #2015 of Bitcoin arith_uint256 bnAvg; // TODO change once the harder genesis block is generated - bnAvg.SetCompact(0x200f0f0f); - BOOST_CHECK_EQUAL(0x200f0f0f, + bnAvg.SetCompact(0x2003ffff); + BOOST_CHECK_EQUAL(0x2003ffff, CalculateNextWorkRequired(bnAvg, nThisTime, nLastRetargetTime, params)); } From cb1246194e64d2dd0cd05e6b6b8f852124d9ba83 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sat, 22 Oct 2016 13:26:44 +0100 Subject: [PATCH 080/165] Update the error message string for tx version too low. ref #1600 Signed-off-by: Daira Hopwood --- src/gtest/test_checktransaction.cpp | 2 +- src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gtest/test_checktransaction.cpp b/src/gtest/test_checktransaction.cpp index 3849cf367..305977103 100644 --- a/src/gtest/test_checktransaction.cpp +++ b/src/gtest/test_checktransaction.cpp @@ -100,7 +100,7 @@ TEST(checktransaction_tests, BadVersionTooLow) { CTransaction tx(mtx); MockCValidationState state; - EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "bad-version-too-low", false)).Times(1); + EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "bad-txns-version-too-low", false)).Times(1); CheckTransactionWithoutProofVerification(tx, state); } diff --git a/src/main.cpp b/src/main.cpp index 58c6300ff..92f30319a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -854,7 +854,7 @@ bool CheckTransactionWithoutProofVerification(const CTransaction& tx, CValidatio // Check transaction version if (tx.nVersion < MIN_TX_VERSION) { return state.DoS(100, error("CheckTransaction(): version too low"), - REJECT_INVALID, "bad-version-too-low"); + REJECT_INVALID, "bad-txns-version-too-low"); } // Transactions can contain empty `vin` and `vout` so long as From a5fd8da7ba702c19944a3348f29a42e4f56b7ac5 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sat, 22 Oct 2016 13:27:42 +0100 Subject: [PATCH 081/165] Static assertion that standard and network min tx versions are consistent. Signed-off-by: Daira Hopwood --- src/primitives/transaction.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 8ded62c7d..1b144dc45 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -11,6 +11,7 @@ #include "script/script.h" #include "serialize.h" #include "uint256.h" +#include "consensus/consensus.h" #include @@ -313,6 +314,9 @@ public: static const int32_t MIN_CURRENT_VERSION = 1; static const int32_t MAX_CURRENT_VERSION = 2; + static_assert(MIN_CURRENT_VERSION >= MIN_TX_VERSION, + "standard rule for tx version should be consistent with network rule"); + // The local variables are made const to prevent unintended modification // without updating the cached hash value. However, CTransaction is not // actually immutable; deserialization and assignment are implemented, From 789914e7b0d946071b14e1257aceb73668fdd0b7 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sat, 22 Oct 2016 13:28:05 +0100 Subject: [PATCH 082/165] Update comments in chainparams.cpp. Signed-off-by: Daira Hopwood --- src/chainparams.cpp | 11 ++--------- src/test/pow_tests.cpp | 1 - 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 292c80cc8..28670c28c 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -42,7 +42,6 @@ public: consensus.nMajorityEnforceBlockUpgrade = 750; consensus.nMajorityRejectBlockOutdated = 950; consensus.nMajorityWindow = 4000; - // TODO generate harder genesis block consensus.powLimit = uint256S("03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); consensus.nPowAveragingWindow = 17; assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); @@ -55,6 +54,7 @@ public: * The characters are rarely used upper ASCII, not valid as UTF-8, and produce * a large 32-bit integer with any alignment. */ + // TODO: the above comment doesn't fully hold; make sure it does for the final start strings. pchMessageStart[0] = 0x9f; pchMessageStart[1] = 0xee; pchMessageStart[2] = 0x4e; @@ -72,13 +72,7 @@ public: /** * Build the genesis block. Note that the output of its generation * transaction cannot be spent since it did not originally exist in the - * database. - * - * CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1231006505, nBits=1d00ffff, nNonce=2083236893, vtx=1) - * CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0) - * CTxIn(COutPoint(000000, -1), coinbase 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73) - * CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B) - * vMerkleTree: 4a5e1e + * database (and is in any case of zero value). */ const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"; CMutableTransaction txNew; @@ -92,7 +86,6 @@ public: genesis.hashMerkleRoot = genesis.BuildMerkleTree(); genesis.nVersion = 4; genesis.nTime = 1231006505; - // TODO generate harder genesis block genesis.nBits = 0x2003ffff; genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000000"); genesis.nSolution = ParseHex("0025991209a4a7952e06c65febfd76424b11df202714b3e2083c8598a9083f098459638b2b0d269efcbf0d72d9fdccc92045835652ac372d51d0e23dea6ea31a7625d3c686a5f549aae270912751397f10bfcc89066e50df029f2fe9c72f41dfafc41beca6e9a9c21f2f903f234460610f1c01c54802b8f4edb5611263ae57a50307db731787a281d65046ea7619bc86b515e361e0d4d6e427970b72880952d9d2ab12783498cd5f00b895ab47cecdad71afb53db474875a6c409a863140b73d39d25bb034fa1ce7d4084cba721953de7de0141a1342cbcc28933d52d22624c725ed4a53b0920e29b93a9314e317abe1e1da0af153d8cf05579c2226021a21012872a903d9a5a2e15fade995d2bcdda25c1795cdfc021cf107b3aaf3652b5073de526356de1d09781c6027ec77c9a5f249b98dfd23fb038178aaf229558a30e94e32d9162d073e12ed988e1f1718bb7d00ce6e6b1b2ec8d97719d52e655781cd8279b9644109252b20210f0037696ed1b878cbc8f6b4db95dd1d01c6c53ec18fb4d38526c45a8bd163da81a6df360534b62267ac35a053c7abb5b40ee5a12e2fad1b61940e7269dcf95b12d7eabda16e16c1d5c5e5c015e19723f189a4e5a52161e4c842f4d869028143474fbb5110ee1cf0acf3ad1fecd8e2d58768633b55cb1ab8c518e5a4954ac66fdaffcd93d1f6ab0af4fc885ef15908b1c65a80d31475b868b57c8239676ea288bceae4190781906ecb5dd0fdc3959f0fbe64ea5f3f1f8c030ceafd4feb4c232fd3d4a19711d359051c62ebdb2b2ebc361a34323a25edbe9705f46571c60cfdf327c618a5529a6aea5185578ce1d62543a52141de8e52b819da2ca3dbc89d62db077200df2ceb3160664ff18e1b1cdbbb9cd1e368a3bed50db432202eb204dd186920bfce44c74eaaec7afe4284eab4ce78ef5b78cb9a009092f24ec999f3d7ae71e4dfe559323e5f76d99d3ebf4a663395b39f9657bd831afdab3f9f109ff2f003fe44734054a3c7915dd4a7de4dac7dcfc0f003532a913d2925e0edfd32b043284f66d93911ddd7e591031771fb4bc5d7a058fc519ee7a1a8f87d3a9fea42181da2335e37ddbde6c235425971f81a00743e9c210ffcff2875e8a191d8d2d381efabf801d7887dca33189bce10fb919b214f94a3047eb503d503a61fc76d086d5f1c1d88a663ecbae576f66d6ba1867a3ae1bd28f37c3744e5e72fe022a8eb4349b63edbbddae9291665470af215f63d506b12354a5ff0a332543a8bdf4d3aff12555aa237957939c2be676c4b11233948851823dda4d2d7c421af7241ae8dabf5ce25befb11e62c96c5c13e512bb91cae854e70b3c8fdfc727f117444bafeb9b4dbf637a297b63227cafa7e611c3bd3be507d6e756d6da7116d5eb761f76e0ec62f6a32c8d30176ac03960cd7790d6b218e89a215b86440c88dd40870b853040d8d2510ef918551b86e312f230c475702ee274271d9f9c4f0f880a5c43a9572a1b61dcd290e0d1231c3ea76f5f718a3481674297cd3eaceda2a05868bc0690201d506c8d25137a266daa5d216f7f2067e62db9ba8f841788611cbe5af6bc9532df1fb7b22e3be8e4713f23de2f692b271ffdcf4f43e0838942c9716ae8ea75f97d47ae405967977f6ebdcbc33e408163d8c504e1a6a7828940e44d66b816113fbeb5b24d1f42bd9e0c33523c5d4720fdea6c9a3d634029b1126e96b9945a2ec4c3b98c08b78e262daaad9ceda2e31e99c04507d557cc2077fda6f8cefb0a7df121a17778ea7a336ff17c3132627675d69d69b17da698b2c5756585a731f17c2f97332981efa598c66cfd1f93b61075427e578f57906946ce25a8f1a56c9fffa673fded26154990b27a8a7162e86e427cb50743bb4e8"); diff --git a/src/test/pow_tests.cpp b/src/test/pow_tests.cpp index cba19d43a..e0a18d3d8 100644 --- a/src/test/pow_tests.cpp +++ b/src/test/pow_tests.cpp @@ -36,7 +36,6 @@ BOOST_AUTO_TEST_CASE(get_next_work_pow_limit) int64_t nLastRetargetTime = 1231006505; // Block #0 of Bitcoin int64_t nThisTime = 1233061996; // Block #2015 of Bitcoin arith_uint256 bnAvg; - // TODO change once the harder genesis block is generated bnAvg.SetCompact(0x2003ffff); BOOST_CHECK_EQUAL(0x2003ffff, CalculateNextWorkRequired(bnAvg, nThisTime, nLastRetargetTime, params)); From 77175766f4de1774ee7dacd7321d28759f1653fb Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 21 Oct 2016 23:59:07 -0500 Subject: [PATCH 083/165] Enforce standard transaction rules on testnet Closes #1582 --- src/chainparams.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 523bd4e04..368bc9b29 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -219,7 +219,7 @@ public: fRequireRPCPassword = true; fMiningRequiresPeers = true; fDefaultConsistencyChecks = false; - fRequireStandard = false; + fRequireStandard = true; fMineBlocksOnDemand = false; fTestnetToBeDeprecatedFieldRPC = true; From f4f1b4b097f45de6bb6060a58752de5eb672dcd0 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sat, 22 Oct 2016 11:09:07 -0500 Subject: [PATCH 084/165] Update sighash tests for new consensus rule --- src/test/sighash_tests.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/test/sighash_tests.cpp b/src/test/sighash_tests.cpp index 164bba576..c825a8bad 100644 --- a/src/test/sighash_tests.cpp +++ b/src/test/sighash_tests.cpp @@ -237,8 +237,14 @@ BOOST_AUTO_TEST_CASE(sighash_from_data) stream >> tx; CValidationState state; - BOOST_CHECK_MESSAGE(CheckTransactionWithoutProofVerification(tx, state), strTest); - BOOST_CHECK(state.IsValid()); + if (tx.nVersion < MIN_TX_VERSION) { + // Transaction must be invalid + BOOST_CHECK_MESSAGE(!CheckTransactionWithoutProofVerification(tx, state), strTest); + BOOST_CHECK(!state.IsValid()); + } else { + BOOST_CHECK_MESSAGE(CheckTransactionWithoutProofVerification(tx, state), strTest); + BOOST_CHECK(state.IsValid()); + } std::vector raw = ParseHex(raw_script); scriptCode.insert(scriptCode.end(), raw.begin(), raw.end()); From 432bc22ade4a9aa791df2f66963a3b27e597c858 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 22 Oct 2016 09:49:35 -0700 Subject: [PATCH 085/165] Patch backport of upstream 1588 as we don't (yet) use the NetMsgType namespace --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 395bae377..a6f6cb00c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5082,7 +5082,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } - else if (strCommand == NetMsgType::NOTFOUND) { + else if (strCommand == "notfound") { // We do not care about the NOTFOUND message, but logging an Unknown Command // message would be undesirable as we transmit it ourselves. } From 9f7b947bbe75ee42f89d471bccb7f95efd50e504 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sat, 22 Oct 2016 18:45:26 +0100 Subject: [PATCH 086/165] Update unit-tests documentation. closes #1530 Signed-off-by: Daira Hopwood --- doc/unit-tests.md | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/doc/unit-tests.md b/doc/unit-tests.md index 687040623..f10ed9cf7 100644 --- a/doc/unit-tests.md +++ b/doc/unit-tests.md @@ -1,20 +1,16 @@ -*** Warning: This document has not been updated for Zcash and may be inaccurate. *** +Compiling/running automated tests +--------------------------------- -Compiling/running unit tests ------------------------------------- - -Unit tests will be automatically compiled if dependencies were met in configure +Automated tests will be automatically compiled if dependencies were met in configure and tests weren't explicitly disabled. -After configuring, they can be run with 'make check'. +There are two scripts for running tests: -To run the bitcoind tests manually, launch src/test/test_bitcoin . +* ``qa/zcash/full-test-suite.sh``, to run the main test suite +* ``qa/pull-tester/rpc-tests.sh``, to run the RPC tests. -To add more bitcoind tests, add `BOOST_AUTO_TEST_CASE` functions to the existing -.cpp files in the test/ directory or add new .cpp files that -implement new BOOST_AUTO_TEST_SUITE sections. +The main test suite uses two different testing frameworks. Tests using the Boost +framework are under ``src/test/``, and tests using the Google Test/Google Mock +framework are under ``src/gtest/``. The latter is preferred for new Zcash unit tests. -To run the bitcoin-qt tests manually, launch src/qt/test/test_bitcoin-qt - -To add more bitcoin-qt tests, add them to the `src/qt/test/` directory and -the `src/qt/test/test_main.cpp` file. +RPC tests are implemented in Python under the ``qa/rpc-tests/`` directory. From 6316cc2b481238141a92d5be63377b2649c10e91 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sat, 22 Oct 2016 18:56:43 +0100 Subject: [PATCH 087/165] Address @str4d's comments on unit-tests doc. ref #1530 Signed-off-by: Daira Hopwood --- doc/unit-tests.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/unit-tests.md b/doc/unit-tests.md index f10ed9cf7..97dcd701e 100644 --- a/doc/unit-tests.md +++ b/doc/unit-tests.md @@ -10,7 +10,8 @@ There are two scripts for running tests: * ``qa/pull-tester/rpc-tests.sh``, to run the RPC tests. The main test suite uses two different testing frameworks. Tests using the Boost -framework are under ``src/test/``, and tests using the Google Test/Google Mock -framework are under ``src/gtest/``. The latter is preferred for new Zcash unit tests. +framework are under ``src/test/``; tests using the Google Test/Google Mock +framework are under ``src/gtest/`` and ``src/wallet/gtest/``. The latter framework +is preferred for new Zcash unit tests. RPC tests are implemented in Python under the ``qa/rpc-tests/`` directory. From bc54cf06cc8ff965299af219adc0f05043138880 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sat, 22 Oct 2016 15:36:38 -0500 Subject: [PATCH 088/165] Fix RPC test --- qa/rpc-tests/getblocktemplate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qa/rpc-tests/getblocktemplate.py b/qa/rpc-tests/getblocktemplate.py index 2610e257b..c9777c0c7 100755 --- a/qa/rpc-tests/getblocktemplate.py +++ b/qa/rpc-tests/getblocktemplate.py @@ -48,7 +48,7 @@ class GetBlockTemplateTest(BitcoinTestFramework): # Test 5: General checks tmpl = node.getblocktemplate() - assert(len(tmpl['noncerange']) == 8) + assert(len(tmpl['noncerange']) == 16) # Test 6: coinbasetxn checks assert('foundersreward' in tmpl['coinbasetxn']) From a6df7ab5679608a0ee0daa7dce33dd61bc4b3584 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 4 Sep 2016 04:39:45 +1200 Subject: [PATCH 089/165] Add a persistent screen showing basic node metrics The screen is implemented using ANSI Escape sequences. Closes #1331 --- src/Makefile.am | 2 + src/init.cpp | 6 +++ src/main.cpp | 6 +++ src/metrics.cpp | 104 ++++++++++++++++++++++++++++++++++++++++++++++ src/metrics.h | 68 ++++++++++++++++++++++++++++++ src/miner.cpp | 14 ++++++- src/rpcmining.cpp | 7 +++- 7 files changed, 204 insertions(+), 3 deletions(-) create mode 100644 src/metrics.cpp create mode 100644 src/metrics.h diff --git a/src/Makefile.am b/src/Makefile.am index 7467919d4..8ded268cf 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -120,6 +120,7 @@ BITCOIN_CORE_H = \ main.h \ memusage.h \ merkleblock.h \ + metrics.h \ miner.h \ mruset.h \ net.h \ @@ -205,6 +206,7 @@ libbitcoin_server_a_SOURCES = \ leveldbwrapper.cpp \ main.cpp \ merkleblock.cpp \ + metrics.cpp \ miner.cpp \ net.cpp \ noui.cpp \ diff --git a/src/init.cpp b/src/init.cpp index 37564d951..a24a17822 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -16,6 +16,7 @@ #include "consensus/validation.h" #include "key.h" #include "main.h" +#include "metrics.h" #include "miner.h" #include "net.h" #include "rpcserver.h" @@ -975,6 +976,11 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler); threadGroup.create_thread(boost::bind(&TraceThread, "scheduler", serviceLoop)); + if (GetBoolArg("-showmetrics", true) && !fPrintToConsole && !GetBoolArg("-daemon", false)) { + // Start the persistent metrics interface + threadGroup.create_thread(&ThreadShowMetricsScreen); + } + // Initialize Zcash circuit parameters ZC_LoadParams(); // These must be disabled for now, they are buggy and we probably don't diff --git a/src/main.cpp b/src/main.cpp index 699b28b5a..ca8f0f8d7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,6 +16,7 @@ #include "consensus/validation.h" #include "init.h" #include "merkleblock.h" +#include "metrics.h" #include "net.h" #include "pow.h" #include "txdb.h" @@ -833,6 +834,11 @@ unsigned int GetP2SHSigOpCount(const CTransaction& tx, const CCoinsViewCache& in bool CheckTransaction(const CTransaction& tx, CValidationState &state) { + // Don't count coinbase transactions because mining skews the count + if (!tx.IsCoinBase()) { + transactionsValidated.increment(); + } + if (!CheckTransactionWithoutProofVerification(tx, state)) { return false; } else { diff --git a/src/metrics.cpp b/src/metrics.cpp new file mode 100644 index 000000000..ad58ab41f --- /dev/null +++ b/src/metrics.cpp @@ -0,0 +1,104 @@ +// Copyright (c) 2016 The Zcash developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "metrics.h" + +#include "chainparams.h" +#include "util.h" +#include "utiltime.h" + +#include + +AtomicCounter transactionsValidated; +AtomicCounter ehSolverRuns; +AtomicCounter minedBlocks; + +void ThreadShowMetricsScreen() +{ + // Make this thread recognisable as the metrics screen thread + RenameThread("zcash-metrics-screen"); + + // Clear screen + std::cout << "\e[2J"; + + // Print art + std::cout << METRICS_ART << std::endl; + std::cout << std::endl; + + // Thank you text + std::cout << OFFSET << "Thank you for running a Zcash node!" << std::endl; + std::cout << OFFSET << "By running this node, you're contributing to the social good :)" << std::endl; + std::cout << std::endl; + + // Miner status + bool mining = GetBoolArg("-gen", false); + if (mining) { + int nThreads = GetArg("-genproclimit", 1); + if (nThreads < 0) { + // In regtest threads defaults to 1 + if (Params().DefaultMinerThreads()) + nThreads = Params().DefaultMinerThreads(); + else + nThreads = boost::thread::hardware_concurrency(); + } + std::cout << OFFSET << "You are running " << nThreads << " mining threads." << std::endl; + } else { + std::cout << OFFSET << "You are currently not mining." << std::endl; + std::cout << OFFSET << "To enable mining, add 'gen=1' to your zcash.conf and restart." << std::endl; + } + std::cout << std::endl; + + // Count uptime + int64_t nStart = GetTime(); + + while (true) { + int lines = 4; + + // Erase below current position + std::cout << "\e[J"; + + // Calculate uptime + int64_t uptime = GetTime() - nStart; + int days = uptime / (24 * 60 * 60); + int hours = (uptime - (days * 24 * 60 * 60)) / (60 * 60); + int minutes = (uptime - (((days * 24) + hours) * 60 * 60)) / 60; + int seconds = uptime - (((((days * 24) + hours) * 60) + minutes) * 60); + + // Display uptime + std::cout << OFFSET << "Since starting this node "; + if (days > 0) { + std::cout << days << " days, "; + } + if (hours > 0) { + std::cout << hours << " hours, "; + } + if (minutes > 0) { + std::cout << minutes << " minutes, "; + } + std::cout << seconds << " seconds ago:" << std::endl; + + std::cout << OFFSET << "- You have validated " << transactionsValidated.get() << " transactions." << std::endl; + + if (mining) { + std::cout << OFFSET << "- You have completed " << ehSolverRuns.get() << " Equihash solver runs." << std::endl; + lines++; + + int mined = minedBlocks.get(); + if (mined > 0) { + std::cout << OFFSET << "- You have mined " << mined << " blocks!" << std::endl; + lines++; + } + } + + // Explain how to exit + std::cout << std::endl; + std::cout << "[Hit Ctrl+C to exit] [Set 'showmetrics=0' to hide]" << std::endl;; + + boost::this_thread::interruption_point(); + MilliSleep(1000); + + // Return to the top of the updating section + std::cout << "\e[" << lines << "A"; + } +} diff --git a/src/metrics.h b/src/metrics.h new file mode 100644 index 000000000..f1fa13d58 --- /dev/null +++ b/src/metrics.h @@ -0,0 +1,68 @@ +// Copyright (c) 2016 The Zcash developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include + +struct AtomicCounter { + std::atomic value; + + AtomicCounter() : value {0} { } + + void increment(){ + ++value; + } + + void decrement(){ + --value; + } + + int get(){ + return value.load(); + } +}; + +extern AtomicCounter transactionsValidated; +extern AtomicCounter ehSolverRuns; +extern AtomicCounter minedBlocks; + +void ThreadShowMetricsScreen(); + +/** + * Heart image: https://commons.wikimedia.org/wiki/File:Heart_coraz%C3%B3n.svg + * License: CC BY-SA 3.0 + * + * Rendering options: + * Zcash: img2txt -W 50 -H 26 -f utf8 -d none -g 0.7 Z-yellow.orange-logo.png + * Heart: img2txt -W 50 -H 26 -f utf8 -d none 2000px-Heart_corazón.svg.png + */ +const std::string METRICS_ART = +"   \n" +"   \n" +"  .;tt;.   .;t: :t;. \n" +"  :8SX8S;;;:::t%8@S;  .X ;S S; X. \n" +"  t%Xt%%ttt@XXXX@::XXXX%XS  t. X X .t \n" +"  8S;tttt%%tt8 @:;::XXXXXS8   X tt X \n" +"  %S:;;;;:XXX@@8 S;8;;tt;XXXX%8  8 8 \n" +"  8S.:::;;% S:XXXXXX     \n" +"  88....:::% %;::XXXX@    \n" +"  S8888....:%;;;;;;;;;   8t;;;::XXX8    \n" +"   S888888...:::;;;;tX8  ;Xtt;;;;;::XS.  . . \n" +"  t888888888....::::8  @:ttttt;;;;:::X  % % \n" +"  888888888888...:SS  %t%%%ttttt;;;;:X  % % \n" +"  88888888888888.t. ;Stttt%%%ttttt;;;S  % % \n" +"  t888888888888S8 8X;;;tttt%%%tttt;;@  @ @ \n" +"   @8888888888%% %%::::;;;tttt%%%tttt.  S S \n" +"  Stt88888888. %SSSSSSSSSStttt%%%tX  S S \n" +"  8ttt8888S %;;tttt%S   @ @ \n" +"  8%ttt88S %;;;;tt%   8 8 \n" +"  %8ttttt@@@XXX@ %%%%%%%S::;;X8  %. .% \n" +"  88tttt888888 X8888....:S8   .; ;. \n" +"  t8@ttt888@8888@888888S8S  t t \n" +"  :888St8888888%S88;  S S \n" +"   .;tt;:   \n" +"   \n" +"   "; + +const std::string OFFSET = " "; diff --git a/src/miner.cpp b/src/miner.cpp index 7693394e7..2a5c070b8 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -12,6 +12,7 @@ #include "consensus/validation.h" #include "hash.h" #include "main.h" +#include "metrics.h" #include "net.h" #include "pow.h" #include "primitives/transaction.h" @@ -437,6 +438,8 @@ static bool ProcessBlockFound(CBlock* pblock, CWallet& wallet, CReserveKey& rese if (!ProcessNewBlock(state, NULL, pblock, true, NULL)) return error("ZcashMiner: ProcessNewBlock, block not accepted"); + minedBlocks.increment(); + return true; } @@ -555,8 +558,11 @@ void static BitcoinMiner(CWallet *pwallet) SetThreadPriority(THREAD_PRIORITY_LOWEST); // In regression test mode, stop mining after a block is found. - if (chainparams.MineBlocksOnDemand()) + if (chainparams.MineBlocksOnDemand()) { + // Increment here because throwing skips the call below + ehSolverRuns.increment(); throw boost::thread_interrupted(); + } return true; }; @@ -581,6 +587,7 @@ void static BitcoinMiner(CWallet *pwallet) eq.showbsizes(r); } eq.digitK(0); + ehSolverRuns.increment(); // Convert solution indices to byte array (decompress) and pass it to validBlock method. for (size_t s = 0; s < eq.nsols; s++) { @@ -600,8 +607,11 @@ void static BitcoinMiner(CWallet *pwallet) } else { try { // If we find a valid block, we rebuild - if (EhOptimisedSolve(n, k, curr_state, validBlock, cancelled)) + bool found = EhOptimisedSolve(n, k, curr_state, validBlock, cancelled); + ehSolverRuns.increment(); + if (found) { break; + } } catch (EhSolverCancelledException&) { LogPrint("pow", "Equihash solver cancelled\n"); std::lock_guard lock{m_cs}; diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 7f2d01f88..935d2b201 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -11,6 +11,7 @@ #include "crypto/equihash.h" #include "init.h" #include "main.h" +#include "metrics.h" #include "miner.h" #include "net.h" #include "pow.h" @@ -193,13 +194,17 @@ Value generate(const Array& params, bool fHelp) pblock->nSolution = soln; return CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus()); }; - if (EhBasicSolveUncancellable(n, k, curr_state, validBlock)) + bool found = EhBasicSolveUncancellable(n, k, curr_state, validBlock); + ehSolverRuns.increment(); + if (found) { goto endloop; + } } endloop: CValidationState state; if (!ProcessNewBlock(state, NULL, pblock, true, NULL)) throw JSONRPCError(RPC_INTERNAL_ERROR, "ProcessNewBlock, block not accepted"); + minedBlocks.increment(); ++nHeight; blockHashes.push_back(pblock->GetHash().GetHex()); } From 4ace963c80a246ad10c4e4da226d9f71da4cddcb Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 4 Sep 2016 05:51:54 +1200 Subject: [PATCH 090/165] Show important console messages on metrics screen --- src/init.cpp | 1 + src/metrics.cpp | 85 +++++++++++++++++++++++++++++++++++++++++++++++++ src/metrics.h | 1 + 3 files changed, 87 insertions(+) diff --git a/src/init.cpp b/src/init.cpp index a24a17822..6a9eb6f16 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -978,6 +978,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) if (GetBoolArg("-showmetrics", true) && !fPrintToConsole && !GetBoolArg("-daemon", false)) { // Start the persistent metrics interface + ConnectMetricsScreen(); threadGroup.create_thread(&ThreadShowMetricsScreen); } diff --git a/src/metrics.cpp b/src/metrics.cpp index ad58ab41f..b835ddfae 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -5,15 +5,95 @@ #include "metrics.h" #include "chainparams.h" +#include "ui_interface.h" #include "util.h" #include "utiltime.h" #include +#include +#include AtomicCounter transactionsValidated; AtomicCounter ehSolverRuns; AtomicCounter minedBlocks; +boost::synchronized_value> messageBox; +boost::synchronized_value initMessage; +bool loaded = false; + +static bool metrics_ThreadSafeMessageBox(const std::string& message, + const std::string& caption, + unsigned int style) +{ + std::string strCaption; + // Check for usage of predefined caption + switch (style) { + case CClientUIInterface::MSG_ERROR: + strCaption += _("Error"); + break; + case CClientUIInterface::MSG_WARNING: + strCaption += _("Warning"); + break; + case CClientUIInterface::MSG_INFORMATION: + strCaption += _("Information"); + break; + default: + strCaption += caption; // Use supplied caption (can be empty) + } + + boost::strict_lock_ptr> u = messageBox.synchronize(); + u->push_back(strCaption + ": " + message); + if (u->size() > 5) { + u->pop_back(); + } +} + +static void metrics_InitMessage(const std::string& message) +{ + *initMessage = message; +} + +void ConnectMetricsScreen() +{ + uiInterface.ThreadSafeMessageBox.disconnect_all_slots(); + uiInterface.ThreadSafeMessageBox.connect(metrics_ThreadSafeMessageBox); + uiInterface.InitMessage.disconnect_all_slots(); + uiInterface.InitMessage.connect(metrics_InitMessage); +} + +int printMessageBox() +{ + boost::strict_lock_ptr> u = messageBox.synchronize(); + + if (u->size() == 0) { + return 0; + } + + std::cout << std::endl; + std::cout << "Messages:" << std::endl; + for (auto it = u->cbegin(); it != u->cend(); ++it) { + std::cout << *it << std::endl; + } + return 2 + u->size(); +} + +int printInitMessage() +{ + if (loaded) { + return 0; + } + + std::string msg = *initMessage; + std::cout << std::endl; + std::cout << "Init message: " << msg << std::endl; + + if (msg == "Done loading") { + loaded = true; + } + + return 2; +} + void ThreadShowMetricsScreen() { // Make this thread recognisable as the metrics screen thread @@ -53,6 +133,7 @@ void ThreadShowMetricsScreen() int64_t nStart = GetTime(); while (true) { + // Number of lines that are always displayed int lines = 4; // Erase below current position @@ -91,6 +172,10 @@ void ThreadShowMetricsScreen() } } + // Messages + lines += printMessageBox(); + lines += printInitMessage(); + // Explain how to exit std::cout << std::endl; std::cout << "[Hit Ctrl+C to exit] [Set 'showmetrics=0' to hide]" << std::endl;; diff --git a/src/metrics.h b/src/metrics.h index f1fa13d58..a9713f0e2 100644 --- a/src/metrics.h +++ b/src/metrics.h @@ -27,6 +27,7 @@ extern AtomicCounter transactionsValidated; extern AtomicCounter ehSolverRuns; extern AtomicCounter minedBlocks; +void ConnectMetricsScreen(); void ThreadShowMetricsScreen(); /** From d934e689671ab18a49bcf2a0e747d4b3e89e17d1 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 4 Sep 2016 15:01:01 +1200 Subject: [PATCH 091/165] Fit metrics screen into an 80-column terminal without wrapping --- src/metrics.cpp | 18 ++++++++--------- src/metrics.h | 52 +++++++++++++++++++++---------------------------- 2 files changed, 31 insertions(+), 39 deletions(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index b835ddfae..60ae8dae0 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -107,8 +107,8 @@ void ThreadShowMetricsScreen() std::cout << std::endl; // Thank you text - std::cout << OFFSET << "Thank you for running a Zcash node!" << std::endl; - std::cout << OFFSET << "By running this node, you're contributing to the social good :)" << std::endl; + std::cout << "Thank you for running a Zcash node!" << std::endl; + std::cout << "By running this node, you're contributing to the social good :)" << std::endl; std::cout << std::endl; // Miner status @@ -122,10 +122,10 @@ void ThreadShowMetricsScreen() else nThreads = boost::thread::hardware_concurrency(); } - std::cout << OFFSET << "You are running " << nThreads << " mining threads." << std::endl; + std::cout << "You are running " << nThreads << " mining threads." << std::endl; } else { - std::cout << OFFSET << "You are currently not mining." << std::endl; - std::cout << OFFSET << "To enable mining, add 'gen=1' to your zcash.conf and restart." << std::endl; + std::cout << "You are currently not mining." << std::endl; + std::cout << "To enable mining, add 'gen=1' to your zcash.conf and restart." << std::endl; } std::cout << std::endl; @@ -147,7 +147,7 @@ void ThreadShowMetricsScreen() int seconds = uptime - (((((days * 24) + hours) * 60) + minutes) * 60); // Display uptime - std::cout << OFFSET << "Since starting this node "; + std::cout << "Since starting this node "; if (days > 0) { std::cout << days << " days, "; } @@ -159,15 +159,15 @@ void ThreadShowMetricsScreen() } std::cout << seconds << " seconds ago:" << std::endl; - std::cout << OFFSET << "- You have validated " << transactionsValidated.get() << " transactions." << std::endl; + std::cout << "- You have validated " << transactionsValidated.get() << " transactions." << std::endl; if (mining) { - std::cout << OFFSET << "- You have completed " << ehSolverRuns.get() << " Equihash solver runs." << std::endl; + std::cout << "- You have completed " << ehSolverRuns.get() << " Equihash solver runs." << std::endl; lines++; int mined = minedBlocks.get(); if (mined > 0) { - std::cout << OFFSET << "- You have mined " << mined << " blocks!" << std::endl; + std::cout << "- You have mined " << mined << " blocks!" << std::endl; lines++; } } diff --git a/src/metrics.h b/src/metrics.h index a9713f0e2..5d8cca0dc 100644 --- a/src/metrics.h +++ b/src/metrics.h @@ -35,35 +35,27 @@ void ThreadShowMetricsScreen(); * License: CC BY-SA 3.0 * * Rendering options: - * Zcash: img2txt -W 50 -H 26 -f utf8 -d none -g 0.7 Z-yellow.orange-logo.png - * Heart: img2txt -W 50 -H 26 -f utf8 -d none 2000px-Heart_corazón.svg.png + * Zcash: img2txt -W 40 -H 20 -f utf8 -d none -g 0.7 Z-yellow.orange-logo.png + * Heart: img2txt -W 40 -H 20 -f utf8 -d none 2000px-Heart_corazón.svg.png */ const std::string METRICS_ART = -"   \n" -"   \n" -"  .;tt;.   .;t: :t;. \n" -"  :8SX8S;;;:::t%8@S;  .X ;S S; X. \n" -"  t%Xt%%ttt@XXXX@::XXXX%XS  t. X X .t \n" -"  8S;tttt%%tt8 @:;::XXXXXS8   X tt X \n" -"  %S:;;;;:XXX@@8 S;8;;tt;XXXX%8  8 8 \n" -"  8S.:::;;% S:XXXXXX     \n" -"  88....:::% %;::XXXX@    \n" -"  S8888....:%;;;;;;;;;   8t;;;::XXX8    \n" -"   S888888...:::;;;;tX8  ;Xtt;;;;;::XS.  . . \n" -"  t888888888....::::8  @:ttttt;;;;:::X  % % \n" -"  888888888888...:SS  %t%%%ttttt;;;;:X  % % \n" -"  88888888888888.t. ;Stttt%%%ttttt;;;S  % % \n" -"  t888888888888S8 8X;;;tttt%%%tttt;;@  @ @ \n" -"   @8888888888%% %%::::;;;tttt%%%tttt.  S S \n" -"  Stt88888888. %SSSSSSSSSStttt%%%tX  S S \n" -"  8ttt8888S %;;tttt%S   @ @ \n" -"  8%ttt88S %;;;;tt%   8 8 \n" -"  %8ttttt@@@XXX@ %%%%%%%S::;;X8  %. .% \n" -"  88tttt888888 X8888....:S8   .; ;. \n" -"  t8@ttt888@8888@888888S8S  t t \n" -"  :888St8888888%S88;  S S \n" -"   .;tt;:   \n" -"   \n" -"   "; - -const std::string OFFSET = " "; +"   \n" +"   \n" +"  :88SX@888@@X8:  8; %X X% ;8 \n" +"  %%Xt%tt%SSSSS:XXXt@@  X :: :: X \n" +"  @S;;tt%%%t ;;::XXXXSX  % SS % \n" +"  .t:::;;%8888[0;34;40m 88888tXXXX8;  S S \n" +"  .%...:::8 8::XXX%;  X X \n" +"  8888...:t888888X 8t;;::XX8   8 8 \n" +" %888888...:::;:8  :Xttt;;;::X@    \n" +" 888888888...:St 8:%%tttt;;;:X  X X \n" +" 88888888888S8  :%;ttt%%tttt;;X  8 8 \n" +" %888888888%t 8S:;;;tt%%%ttt;8  : : \n" +"  8t8888888  S8888888Stt%%%t@   :: :: \n" +"  .@tt888@ 8;;ttt@;  t t \n" +"  .8ttt8@SSSSS SXXXX%:;;;X;  8 8 \n" +"  X8ttt8888% %88...::X8   X. .X \n" +"  %8@tt88;8888%8888%8X   :; ;: \n" +"  :@888@XXX@888:  tt \n" +"   \n" +"   "; From 4482bd8fd70fc5b9ef2bf94ba45cc80514de642b Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 4 Sep 2016 15:04:22 +1200 Subject: [PATCH 092/165] Adjust copy --- src/metrics.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index 60ae8dae0..51f17d6e1 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -107,8 +107,8 @@ void ThreadShowMetricsScreen() std::cout << std::endl; // Thank you text - std::cout << "Thank you for running a Zcash node!" << std::endl; - std::cout << "By running this node, you're contributing to the social good :)" << std::endl; + std::cout << "Thank you for running a Zcash node!" << std::endl; + std::cout << "You're helping to strengthen the network and contributing to a social good :)" << std::endl; std::cout << std::endl; // Miner status @@ -178,7 +178,7 @@ void ThreadShowMetricsScreen() // Explain how to exit std::cout << std::endl; - std::cout << "[Hit Ctrl+C to exit] [Set 'showmetrics=0' to hide]" << std::endl;; + std::cout << "[Press Ctrl+C to exit] [Set 'showmetrics=0' to hide]" << std::endl;; boost::this_thread::interruption_point(); MilliSleep(1000); From d30273f9198de69a69008db2722e380ebeb08313 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 4 Sep 2016 15:18:44 +1200 Subject: [PATCH 093/165] Split out screen sections into separate functions --- src/metrics.cpp | 119 +++++++++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 53 deletions(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index 51f17d6e1..621f50ce0 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -61,6 +61,67 @@ void ConnectMetricsScreen() uiInterface.InitMessage.connect(metrics_InitMessage); } +void printMiningStatus(bool mining) +{ + if (mining) { + int nThreads = GetArg("-genproclimit", 1); + if (nThreads < 0) { + // In regtest threads defaults to 1 + if (Params().DefaultMinerThreads()) + nThreads = Params().DefaultMinerThreads(); + else + nThreads = boost::thread::hardware_concurrency(); + } + std::cout << "You are running " << nThreads << " mining threads." << std::endl; + } else { + std::cout << "You are currently not mining." << std::endl; + std::cout << "To enable mining, add 'gen=1' to your zcash.conf and restart." << std::endl; + } + std::cout << std::endl; +} + +int printMetrics(int64_t nStart, bool mining) +{ + // Number of lines that are always displayed + int lines = 3; + + // Calculate uptime + int64_t uptime = GetTime() - nStart; + int days = uptime / (24 * 60 * 60); + int hours = (uptime - (days * 24 * 60 * 60)) / (60 * 60); + int minutes = (uptime - (((days * 24) + hours) * 60 * 60)) / 60; + int seconds = uptime - (((((days * 24) + hours) * 60) + minutes) * 60); + + // Display uptime + std::cout << "Since starting this node "; + if (days > 0) { + std::cout << days << " days, "; + } + if (hours > 0) { + std::cout << hours << " hours, "; + } + if (minutes > 0) { + std::cout << minutes << " minutes, "; + } + std::cout << seconds << " seconds ago:" << std::endl; + + std::cout << "- You have validated " << transactionsValidated.get() << " transactions." << std::endl; + + if (mining) { + std::cout << "- You have completed " << ehSolverRuns.get() << " Equihash solver runs." << std::endl; + lines++; + + int mined = minedBlocks.get(); + if (mined > 0) { + std::cout << "- You have mined " << mined << " blocks!" << std::endl; + lines++; + } + } + std::cout << std::endl; + + return lines; +} + int printMessageBox() { boost::strict_lock_ptr> u = messageBox.synchronize(); @@ -69,11 +130,11 @@ int printMessageBox() return 0; } - std::cout << std::endl; std::cout << "Messages:" << std::endl; for (auto it = u->cbegin(); it != u->cend(); ++it) { std::cout << *it << std::endl; } + std::cout << std::endl; return 2 + u->size(); } @@ -84,8 +145,8 @@ int printInitMessage() } std::string msg = *initMessage; - std::cout << std::endl; std::cout << "Init message: " << msg << std::endl; + std::cout << std::endl; if (msg == "Done loading") { loaded = true; @@ -113,71 +174,23 @@ void ThreadShowMetricsScreen() // Miner status bool mining = GetBoolArg("-gen", false); - if (mining) { - int nThreads = GetArg("-genproclimit", 1); - if (nThreads < 0) { - // In regtest threads defaults to 1 - if (Params().DefaultMinerThreads()) - nThreads = Params().DefaultMinerThreads(); - else - nThreads = boost::thread::hardware_concurrency(); - } - std::cout << "You are running " << nThreads << " mining threads." << std::endl; - } else { - std::cout << "You are currently not mining." << std::endl; - std::cout << "To enable mining, add 'gen=1' to your zcash.conf and restart." << std::endl; - } - std::cout << std::endl; + printMiningStatus(mining); // Count uptime int64_t nStart = GetTime(); while (true) { // Number of lines that are always displayed - int lines = 4; + int lines = 1; // Erase below current position std::cout << "\e[J"; - // Calculate uptime - int64_t uptime = GetTime() - nStart; - int days = uptime / (24 * 60 * 60); - int hours = (uptime - (days * 24 * 60 * 60)) / (60 * 60); - int minutes = (uptime - (((days * 24) + hours) * 60 * 60)) / 60; - int seconds = uptime - (((((days * 24) + hours) * 60) + minutes) * 60); - - // Display uptime - std::cout << "Since starting this node "; - if (days > 0) { - std::cout << days << " days, "; - } - if (hours > 0) { - std::cout << hours << " hours, "; - } - if (minutes > 0) { - std::cout << minutes << " minutes, "; - } - std::cout << seconds << " seconds ago:" << std::endl; - - std::cout << "- You have validated " << transactionsValidated.get() << " transactions." << std::endl; - - if (mining) { - std::cout << "- You have completed " << ehSolverRuns.get() << " Equihash solver runs." << std::endl; - lines++; - - int mined = minedBlocks.get(); - if (mined > 0) { - std::cout << "- You have mined " << mined << " blocks!" << std::endl; - lines++; - } - } - - // Messages + lines += printMetrics(nStart, mining); lines += printMessageBox(); lines += printInitMessage(); // Explain how to exit - std::cout << std::endl; std::cout << "[Press Ctrl+C to exit] [Set 'showmetrics=0' to hide]" << std::endl;; boost::this_thread::interruption_point(); From 0ddd6d1cd8a3bc481d81d5f16279d055a01a95bc Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 4 Sep 2016 15:31:50 +1200 Subject: [PATCH 094/165] Tag metrics strings for translation --- src/metrics.cpp | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index 621f50ce0..3ee6f61fc 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -72,10 +72,10 @@ void printMiningStatus(bool mining) else nThreads = boost::thread::hardware_concurrency(); } - std::cout << "You are running " << nThreads << " mining threads." << std::endl; + std::cout << strprintf(_("You are running %d mining threads."), nThreads) << std::endl; } else { - std::cout << "You are currently not mining." << std::endl; - std::cout << "To enable mining, add 'gen=1' to your zcash.conf and restart." << std::endl; + std::cout << _("You are currently not mining.") << std::endl; + std::cout << _("To enable mining, add 'gen=1' to your zcash.conf and restart.") << std::endl; } std::cout << std::endl; } @@ -93,27 +93,27 @@ int printMetrics(int64_t nStart, bool mining) int seconds = uptime - (((((days * 24) + hours) * 60) + minutes) * 60); // Display uptime - std::cout << "Since starting this node "; + std::string duration; if (days > 0) { - std::cout << days << " days, "; + duration = strprintf(_("%d days, %d hours, %d minutes, %d seconds"), days, hours, minutes, seconds); + } else if (hours > 0) { + duration = strprintf(_("%d hours, %d minutes, %d seconds"), hours, minutes, seconds); + } else if (minutes > 0) { + duration = strprintf(_("%d minutes, %d seconds"), minutes, seconds); + } else { + duration = strprintf(_("%d seconds"), seconds); } - if (hours > 0) { - std::cout << hours << " hours, "; - } - if (minutes > 0) { - std::cout << minutes << " minutes, "; - } - std::cout << seconds << " seconds ago:" << std::endl; + std::cout << strprintf(_("Since starting this node %s ago:"), duration) << std::endl; - std::cout << "- You have validated " << transactionsValidated.get() << " transactions." << std::endl; + std::cout << "- " << strprintf(_("You have validated %d transactions."), transactionsValidated.get()) << std::endl; if (mining) { - std::cout << "- You have completed " << ehSolverRuns.get() << " Equihash solver runs." << std::endl; + std::cout << "- " << strprintf(_("You have completed %d Equihash solver runs."), ehSolverRuns.get()) << std::endl; lines++; int mined = minedBlocks.get(); if (mined > 0) { - std::cout << "- You have mined " << mined << " blocks!" << std::endl; + std::cout << "- " << strprintf(_("You have mined %d blocks!"), mined) << std::endl; lines++; } } @@ -130,7 +130,7 @@ int printMessageBox() return 0; } - std::cout << "Messages:" << std::endl; + std::cout << _("Messages:") << std::endl; for (auto it = u->cbegin(); it != u->cend(); ++it) { std::cout << *it << std::endl; } @@ -145,10 +145,10 @@ int printInitMessage() } std::string msg = *initMessage; - std::cout << "Init message: " << msg << std::endl; + std::cout << _("Init message:") << " " << msg << std::endl; std::cout << std::endl; - if (msg == "Done loading") { + if (msg == _("Done loading")) { loaded = true; } @@ -168,8 +168,8 @@ void ThreadShowMetricsScreen() std::cout << std::endl; // Thank you text - std::cout << "Thank you for running a Zcash node!" << std::endl; - std::cout << "You're helping to strengthen the network and contributing to a social good :)" << std::endl; + std::cout << _("Thank you for running a Zcash node!") << std::endl; + std::cout << _("You're helping to strengthen the network and contributing to a social good :)") << std::endl; std::cout << std::endl; // Miner status @@ -191,7 +191,7 @@ void ThreadShowMetricsScreen() lines += printInitMessage(); // Explain how to exit - std::cout << "[Press Ctrl+C to exit] [Set 'showmetrics=0' to hide]" << std::endl;; + std::cout << "[" << _("Press Ctrl+C to exit") << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl;; boost::this_thread::interruption_point(); MilliSleep(1000); From db853f8a4640b8a84186f97a78ea47f1a51c74f9 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 4 Sep 2016 15:40:28 +1200 Subject: [PATCH 095/165] Handle wrapping of potentially long lines --- src/metrics.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index 3ee6f61fc..8b41b5bfc 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -12,6 +12,7 @@ #include #include #include +#include AtomicCounter transactionsValidated; AtomicCounter ehSolverRuns; @@ -80,7 +81,7 @@ void printMiningStatus(bool mining) std::cout << std::endl; } -int printMetrics(int64_t nStart, bool mining) +int printMetrics(size_t cols, int64_t nStart, bool mining) { // Number of lines that are always displayed int lines = 3; @@ -103,7 +104,9 @@ int printMetrics(int64_t nStart, bool mining) } else { duration = strprintf(_("%d seconds"), seconds); } - std::cout << strprintf(_("Since starting this node %s ago:"), duration) << std::endl; + std::string strDuration = strprintf(_("Since starting this node %s ago:"), duration); + std::cout << strDuration << std::endl; + lines += (strDuration.size() / cols); std::cout << "- " << strprintf(_("You have validated %d transactions."), transactionsValidated.get()) << std::endl; @@ -122,7 +125,7 @@ int printMetrics(int64_t nStart, bool mining) return lines; } -int printMessageBox() +int printMessageBox(size_t cols) { boost::strict_lock_ptr> u = messageBox.synchronize(); @@ -130,12 +133,15 @@ int printMessageBox() return 0; } + int lines = 2 + u->size(); std::cout << _("Messages:") << std::endl; for (auto it = u->cbegin(); it != u->cend(); ++it) { std::cout << *it << std::endl; + // Handle wrapped lines + lines += (it->size() / cols); } std::cout << std::endl; - return 2 + u->size(); + return lines; } int printInitMessage() @@ -183,11 +189,15 @@ void ThreadShowMetricsScreen() // Number of lines that are always displayed int lines = 1; + // Get current window size + struct winsize w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + // Erase below current position std::cout << "\e[J"; - lines += printMetrics(nStart, mining); - lines += printMessageBox(); + lines += printMetrics(w.ws_col, nStart, mining); + lines += printMessageBox(w.ws_col); lines += printInitMessage(); // Explain how to exit From e7d59bbc1208b8eaaa1447885c3da222f4a1c495 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Mon, 5 Sep 2016 10:54:15 +1200 Subject: [PATCH 096/165] Add average hash rate to metrics --- src/metrics.cpp | 6 +++++- src/metrics.h | 1 + src/miner.cpp | 1 + src/rpcmining.cpp | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index 8b41b5bfc..4d339b919 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -16,6 +16,7 @@ AtomicCounter transactionsValidated; AtomicCounter ehSolverRuns; +AtomicCounter solutionTargetChecks; AtomicCounter minedBlocks; boost::synchronized_value> messageBox; @@ -111,8 +112,11 @@ int printMetrics(size_t cols, int64_t nStart, bool mining) std::cout << "- " << strprintf(_("You have validated %d transactions."), transactionsValidated.get()) << std::endl; if (mining) { + double hps = uptime > 0 ? (double)solutionTargetChecks.get() / uptime : 0; + std::string strHps = strprintf("%.4f H/s", hps); + std::cout << "- " << strprintf(_("You have contributed %s on average to the network hash rate."), strHps) << std::endl; std::cout << "- " << strprintf(_("You have completed %d Equihash solver runs."), ehSolverRuns.get()) << std::endl; - lines++; + lines += 2; int mined = minedBlocks.get(); if (mined > 0) { diff --git a/src/metrics.h b/src/metrics.h index 5d8cca0dc..4a2ca2264 100644 --- a/src/metrics.h +++ b/src/metrics.h @@ -25,6 +25,7 @@ struct AtomicCounter { extern AtomicCounter transactionsValidated; extern AtomicCounter ehSolverRuns; +extern AtomicCounter solutionTargetChecks; extern AtomicCounter minedBlocks; void ConnectMetricsScreen(); diff --git a/src/miner.cpp b/src/miner.cpp index 2a5c070b8..bde9babd5 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -541,6 +541,7 @@ void static BitcoinMiner(CWallet *pwallet) // Write the solution to the hash and compute the result. LogPrint("pow", "- Checking solution against target\n"); pblock->nSolution = soln; + solutionTargetChecks.increment(); if (UintToArith256(pblock->GetHash()) > hashTarget) { return false; diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 935d2b201..faa02b6db 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -192,6 +192,7 @@ Value generate(const Array& params, bool fHelp) std::function)> validBlock = [&pblock](std::vector soln) { pblock->nSolution = soln; + solutionTargetChecks.increment(); return CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus()); }; bool found = EhBasicSolveUncancellable(n, k, curr_state, validBlock); From f8ada2435bd3f6b7a1165eae5fdfd6ac8a96f018 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Mon, 5 Sep 2016 10:54:25 +1200 Subject: [PATCH 097/165] Be excited about validating transactions! --- src/metrics.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index 4d339b919..bb1fe66bc 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -109,7 +109,7 @@ int printMetrics(size_t cols, int64_t nStart, bool mining) std::cout << strDuration << std::endl; lines += (strDuration.size() / cols); - std::cout << "- " << strprintf(_("You have validated %d transactions."), transactionsValidated.get()) << std::endl; + std::cout << "- " << strprintf(_("You have validated %d transactions!"), transactionsValidated.get()) << std::endl; if (mining) { double hps = uptime > 0 ? (double)solutionTargetChecks.get() / uptime : 0; From 199b3aafd3780574456530f2296de805297e8158 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Wed, 5 Oct 2016 18:45:00 -0500 Subject: [PATCH 098/165] Use solutions per second (Sol/s) Part of #1422 --- src/metrics.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index bb1fe66bc..32fc4ba05 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -112,9 +112,9 @@ int printMetrics(size_t cols, int64_t nStart, bool mining) std::cout << "- " << strprintf(_("You have validated %d transactions!"), transactionsValidated.get()) << std::endl; if (mining) { - double hps = uptime > 0 ? (double)solutionTargetChecks.get() / uptime : 0; - std::string strHps = strprintf("%.4f H/s", hps); - std::cout << "- " << strprintf(_("You have contributed %s on average to the network hash rate."), strHps) << std::endl; + double solps = uptime > 0 ? (double)solutionTargetChecks.get() / uptime : 0; + std::string strSolps = strprintf("%.4f Sol/s", solps); + std::cout << "- " << strprintf(_("You have contributed %s on average to the network solution rate."), strSolps) << std::endl; std::cout << "- " << strprintf(_("You have completed %d Equihash solver runs."), ehSolverRuns.get()) << std::endl; lines += 2; From dccc140bf1c287aa646c9069f0068a142e8841c3 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sat, 22 Oct 2016 15:59:44 -0500 Subject: [PATCH 099/165] Comment out print statements in tromp's solver This prevents the solver interfering with the metrics screen. --- src/pow/tromp/equi_miner.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/pow/tromp/equi_miner.h b/src/pow/tromp/equi_miner.h index 2f6531fe8..9559c178e 100644 --- a/src/pow/tromp/equi_miner.h +++ b/src/pow/tromp/equi_miner.h @@ -300,7 +300,7 @@ struct equi { } for (u32 i=0; i < 65; i++) { #ifdef HIST - printf(" %d:%d", i, binsizes[i]); +// printf(" %d:%d", i, binsizes[i]); #else #ifdef SPARK u32 sparks = binsizes[i] / SPARKSCALE; @@ -309,10 +309,10 @@ struct equi { for (u32 bs = binsizes[i]; bs; bs >>= 1) sparks++; sparks = sparks * 7 / SPARKSCALE; #endif - printf("\342\226%c", '\201' + sparks); +// printf("\342\226%c", '\201' + sparks); #endif } - printf("\n"); +// printf("\n"); #endif } @@ -590,7 +590,7 @@ nc++, candidate(tree(bucketid, s0, s1)); } } } -printf(" %d candidates ", nc); +//printf(" %d candidates ", nc); } }; @@ -603,7 +603,7 @@ typedef struct { void barrier(pthread_barrier_t *barry) { const int rc = pthread_barrier_wait(barry); if (rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD) { - printf("Could not wait on barrier\n"); +// printf("Could not wait on barrier\n"); pthread_exit(NULL); } } @@ -613,7 +613,7 @@ void *worker(void *vp) { equi *eq = tp->eq; if (tp->id == 0) - printf("Digit 0\n"); +// printf("Digit 0\n"); barrier(&eq->barry); eq->digit0(tp->id); barrier(&eq->barry); @@ -624,19 +624,19 @@ void *worker(void *vp) { barrier(&eq->barry); for (u32 r = 1; r < WK; r++) { if (tp->id == 0) - printf("Digit %d", r); +// printf("Digit %d", r); barrier(&eq->barry); r&1 ? eq->digitodd(r, tp->id) : eq->digiteven(r, tp->id); barrier(&eq->barry); if (tp->id == 0) { - printf(" x%d b%d h%d\n", eq->xfull, eq->bfull, eq->hfull); +// printf(" x%d b%d h%d\n", eq->xfull, eq->bfull, eq->hfull); eq->xfull = eq->bfull = eq->hfull = 0; eq->showbsizes(r); } barrier(&eq->barry); } if (tp->id == 0) - printf("Digit %d\n", WK); +// printf("Digit %d\n", WK); eq->digitK(tp->id); barrier(&eq->barry); pthread_exit(NULL); From 02a4ace02c3d8a5fd992d63fa788d9dba85b023a Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sun, 23 Oct 2016 01:05:57 +0100 Subject: [PATCH 100/165] Disable metrics screen in RPC tests Author: Jack Grigg Signed-off-by: Daira Hopwood --- qa/rpc-tests/test_framework/util.py | 1 + 1 file changed, 1 insertion(+) diff --git a/qa/rpc-tests/test_framework/util.py b/qa/rpc-tests/test_framework/util.py index a8e260f95..bfb9bddf1 100644 --- a/qa/rpc-tests/test_framework/util.py +++ b/qa/rpc-tests/test_framework/util.py @@ -65,6 +65,7 @@ def initialize_datadir(dirname, n): os.makedirs(datadir) with open(os.path.join(datadir, "zcash.conf"), 'w') as f: f.write("regtest=1\n"); + f.write("showmetrics=0\n"); f.write("rpcuser=rt\n"); f.write("rpcpassword=rt\n"); f.write("port="+str(p2p_port(n))+"\n"); From 5626f8a8dcd0a3843ccff6c2cc14d416dc7b73cd Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sun, 23 Oct 2016 00:35:22 +0100 Subject: [PATCH 101/165] Remove copyright entries for some files we deleted. Signed-off-by: Daira Hopwood --- contrib/DEBIAN/copyright | 9 --------- 1 file changed, 9 deletions(-) diff --git a/contrib/DEBIAN/copyright b/contrib/DEBIAN/copyright index f76942d41..7658e7844 100644 --- a/contrib/DEBIAN/copyright +++ b/contrib/DEBIAN/copyright @@ -15,15 +15,6 @@ Files: src/json/* Copyright: 2007-2009, John W. Wilkinson License: Expat -Files: debian/* -Copyright: 2010-2011, Jonas Smedegaard - 2011, Matt Corallo -License: GPL-2+ - -Files: debian/manpages/* -Copyright: Micah Anderson -License: GPL-3+ - Files: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, src/qt/res/src/*.svg Copyright: Wladimir van der Laan From 5275df575682aeead11b223bf3abbcdfacfa77ff Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sun, 23 Oct 2016 00:36:31 +0100 Subject: [PATCH 102/165] Update license text in README.md. closes #38 Signed-off-by: Daira Hopwood --- doc/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/README.md b/doc/README.md index 81f061fd2..a08692187 100644 --- a/doc/README.md +++ b/doc/README.md @@ -16,5 +16,10 @@ Build Zcash along with most dependencies from source by running ./zcutil/build.s License --------------------- Distributed under the [MIT software license](http://www.opensource.org/licenses/mit-license.php). + This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](https://www.openssl.org/). This product includes cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard. + +Certain files under the ``src/qt/`` and ``scripts/img/`` directories are distributed under the +LGPL or GPL licenses. Dependencies downloaded as part of the build process may be covered by other +open source licenses. For further details see ``contrib/DEBIAN/copyright``. From d14207f6f4587daeaaae1e3fb9bc7d1d99d0dd60 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sun, 23 Oct 2016 01:00:07 +0100 Subject: [PATCH 103/165] Bump version numbers to 1.0.0-rc2. Signed-off-by: Daira Hopwood --- configure.ac | 2 +- contrib/DEBIAN/control | 2 +- contrib/gitian-descriptors/gitian-linux.yml | 2 +- doc/README.md | 2 +- src/clientversion.h | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index aa479792a..eae73b845 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 1) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 0) -define(_CLIENT_VERSION_BUILD, 25) +define(_CLIENT_VERSION_BUILD, 26) define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50))) define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1))) define(_CLIENT_VERSION_IS_RELEASE, false) diff --git a/contrib/DEBIAN/control b/contrib/DEBIAN/control index 936fdc469..2994441ae 100644 --- a/contrib/DEBIAN/control +++ b/contrib/DEBIAN/control @@ -10,7 +10,7 @@ Build-Depends: autoconf, automake, bsdmainutils, build-essential Vcs-Git: git@github.com:zcash/zcash.git Vcs-Browser: https://github.com/zcash/zcash Package: zcash -Version: 1.0.0-rc1 +Version: 1.0.0-rc2 Architecture: amd64 Description: Zcash is an implementation of the "Zerocash" protocol. Based on Bitcoin's code, it intends to offer a far higher standard diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index 7a006b343..69ffa33b1 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "zcash-1.0.0-rc1" +name: "zcash-1.0.0-rc2" enable_cache: true distro: "debian" suites: diff --git a/doc/README.md b/doc/README.md index a08692187..89c4b08ae 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,4 +1,4 @@ -Zcash Core 1.0.0-rc1 +Zcash Core 1.0.0-rc2 ==================== [Zcash](https://z.cash/) is the Zcash client. It downloads and stores the entire history of Zcash transactions; depending on the speed of your computer and network connection, the synchronization process could take a day or more once the blockchain has reached a significant size. diff --git a/src/clientversion.h b/src/clientversion.h index 4fddbe192..978271993 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -17,7 +17,7 @@ #define CLIENT_VERSION_MAJOR 1 #define CLIENT_VERSION_MINOR 0 #define CLIENT_VERSION_REVISION 0 -#define CLIENT_VERSION_BUILD 25 +#define CLIENT_VERSION_BUILD 26 //! Set to true for release, false for prerelease or test build #define CLIENT_VERSION_IS_RELEASE false @@ -38,7 +38,7 @@ #define DO_STRINGIZE(X) #X //! Copyright string used in Windows .rc files -#define COPYRIGHT_STR "2009-" STRINGIZE(COPYRIGHT_YEAR) " The Bitcoin Core Developers" +#define COPYRIGHT_STR "2009-" STRINGIZE(COPYRIGHT_YEAR) " The Bitcoin Core Developers and The Zcash developers" /** * bitcoind-res.rc includes this file, but it cannot cope with real c++ code. From 5c5f70f0fcd580dc9eabf773fa7ad64dcf3a440b Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sun, 23 Oct 2016 02:06:39 +0100 Subject: [PATCH 104/165] Update pchMessageStart strings for rc2. Signed-off-by: Daira Hopwood --- src/chainparams.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 68a47f8a9..18b19c108 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -49,16 +49,15 @@ public: consensus.nPowMaxAdjustUp = 16; // 16% adjustment up consensus.nPowTargetSpacing = 2.5 * 60; consensus.fPowAllowMinDifficultyBlocks = false; - /** + /** * The message start string is designed to be unlikely to occur in normal data. * The characters are rarely used upper ASCII, not valid as UTF-8, and produce * a large 32-bit integer with any alignment. */ - // TODO: the above comment doesn't fully hold; make sure it does for the final start strings. - pchMessageStart[0] = 0x9f; - pchMessageStart[1] = 0xee; - pchMessageStart[2] = 0x4e; - pchMessageStart[3] = 0xd8; + pchMessageStart[0] = 0xf9; + pchMessageStart[1] = 0x1b; + pchMessageStart[2] = 0xac; + pchMessageStart[3] = 0xab; vAlertPubKey = ParseHex("04b7ecf0baa90495ceb4e4090f6b2fd37eec1e9c85fac68a487f3ce11589692e4a317479316ee814e066638e1db54e37a10689b70286e6315b1087b6615d179264"); nDefaultPort = 8233; nMinerThreads = 0; @@ -169,10 +168,10 @@ public: consensus.powLimit = uint256S("03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); consensus.fPowAllowMinDifficultyBlocks = true; - pchMessageStart[0] = 0x0C; - pchMessageStart[1] = 0x9E; - pchMessageStart[2] = 0xD7; - pchMessageStart[3] = 0xA2; + pchMessageStart[0] = 0xf9; + pchMessageStart[1] = 0x9f; + pchMessageStart[2] = 0x24; + pchMessageStart[3] = 0xb6; vAlertPubKey = ParseHex("044e7a1553392325c871c5ace5d6ad73501c66f4c185d6b0453cf45dec5a1322e705c672ac1a27ef7cdaf588c10effdf50ed5f95f85f2f54a5f6159fca394ed0c6"); nDefaultPort = 18233; nMinerThreads = 0; From c5334c0c15b4bcdc9b4b2917372bf718cb80e132 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sun, 23 Oct 2016 02:10:35 +0100 Subject: [PATCH 105/165] Tweaks to release-process.md Signed-off-by: Daira Hopwood --- doc/release-process.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/doc/release-process.md b/doc/release-process.md index 8f5e04b82..eb96e5da1 100644 --- a/doc/release-process.md +++ b/doc/release-process.md @@ -29,8 +29,8 @@ previous release: $ ZCASH_RELEASE_PREV=1.0.0-beta1 -## B. create a new release branch / github PR -### B1. update (commit) version in sources +## B. Create a new release branch / github PR +### B1. Update (commit) version in sources doc/README.md src/clientversion.h @@ -52,7 +52,7 @@ In `configure.ac` and `clientversion.h`: - Change `CLIENT_VERSION_IS_RELEASE` to false while Zcash is in beta-test phase. -### B2. write release notes +### B2. Write release notes git shortlog helps a lot, for example: @@ -61,19 +61,21 @@ git shortlog helps a lot, for example: Update the Debian package changelog: - export DEBVERSION='1.0.0-rc1' + export DEBVERSION="${ZCASH_RELEASE}" export DEBEMAIL="${DEBEMAIL:-team@z.cash}" export DEBFULLNAME="${DEBFULLNAME:-Zcash Company}" dch -v $DEBVERSION -D jessie -c contrib/DEBIAN/changelog -### B3. change the network magics +(`dch` comes from the devscripts package.) + +### B3. Change the network magics If this release breaks backwards compatibility, change the network magic numbers. Set the four `pchMessageStart` in `CTestNetParams` in `chainparams.cpp` to random values. -### B4. merge the previous changes +### B4. Merge the previous changes Do the normal pull-request, review, testing process for this release PR. @@ -87,7 +89,7 @@ https://ci.z.cash/builders/depends-sources Run `./fetch-params.sh`. -## D. make tag for the newly merged result +## D. Make tag for the newly merged result In this example, we ensure master is up to date with the previous merged PR, then: @@ -95,7 +97,7 @@ previous merged PR, then: $ git tag -s v${ZCASH_RELEASE} $ git push origin v${ZCASH_RELEASE} -## E. deploy testnet +## E. Deploy testnet Notify the Zcash DevOps engineer/sysadmin that the release has been tagged. They update some variables in the company's automation code and then run an Ansible playbook, which: @@ -106,15 +108,13 @@ Notify the Zcash DevOps engineer/sysadmin that the release has been tagged. They Then, verify that nodes can connect to the testnet server, and update the guide on the wiki to ensure the correct hostname is listed in the recommended zcash.conf. -## F. publish the release announcement (blog, zcash-dev, slack) -## G. celebrate +## F. Update the Beta Guide +## G. Publish the release announcement (blog, zcash-dev, slack) +## H. Celebrate + ## missing steps Zcash still needs: -* deterministic or reproducible builds - * thorough pre-release testing (presumably more thorough than standard PR tests) -* release deployment steps (eg: updating build-depends mirror, deploying testnet, etc...) - -* proper Zcash-specific versions and names in software and documentation. +* automated release deployment (e.g.: updating build-depends mirror, deploying testnet, etc...) From e2a227a26860ed9fe632a23f2b03c858122095e5 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sun, 23 Oct 2016 03:02:29 +0100 Subject: [PATCH 106/165] Add deterministic build section to release-process.md. Signed-off-by: Daira Hopwood --- doc/release-process.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/release-process.md b/doc/release-process.md index eb96e5da1..cff4444cc 100644 --- a/doc/release-process.md +++ b/doc/release-process.md @@ -110,7 +110,14 @@ Then, verify that nodes can connect to the testnet server, and update the guide ## F. Update the Beta Guide ## G. Publish the release announcement (blog, zcash-dev, slack) -## H. Celebrate +## H. Make and deploy deterministic builds + +- Run the [Gitian deterministic build environment](https://github.com/zcash/zcash-gitian) +- Compare the uploaded [build manifests on gitian.sigs](https://github.com/zcash/gitian.sigs) +- If all is well, the DevOps engineer will build the Debian packages and update the + [apt.z.cash package repository](https://apt.z.cash). + +## I. Celebrate ## missing steps Zcash still needs: From 90c116ac5400da94a0329d5af441f8f2c24d0e27 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Sun, 23 Oct 2016 02:11:12 +0100 Subject: [PATCH 107/165] Add release notes and Debian changelog entry. Signed-off-by: Daira Hopwood --- contrib/DEBIAN/changelog | 6 ++ doc/release-notes/release-notes-1.0.0-rc2.md | 106 +++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 doc/release-notes/release-notes-1.0.0-rc2.md diff --git a/contrib/DEBIAN/changelog b/contrib/DEBIAN/changelog index 58ad61481..89d489066 100644 --- a/contrib/DEBIAN/changelog +++ b/contrib/DEBIAN/changelog @@ -1,3 +1,9 @@ +zcash (1.0.0-rc2) jessie; urgency=medium + + * 1.0.0-rc2 release. + + -- Zcash Company Sun, 23 Oct 2016 01:51:27 +0100 + zcash (1.0.0-rc1) jessie; urgency=medium * Initial packaging for Debian. diff --git a/doc/release-notes/release-notes-1.0.0-rc2.md b/doc/release-notes/release-notes-1.0.0-rc2.md new file mode 100644 index 000000000..27f115a75 --- /dev/null +++ b/doc/release-notes/release-notes-1.0.0-rc2.md @@ -0,0 +1,106 @@ +Daira Hopwood (22): + Add link to protocol specification. + Add tests for IsStandardTx applied to v2 transactions. + Make v2 transactions standard. This also corrects a rule about admitting large orphan transactions into the mempool, to account for v2-specific fields. + Changes to build on Alpine Linux. + Add Tromp's implementation of Equihash solver (as of tromp/equihash commit 690fc5eff453bc0c1ec66b283395c9df87701e93). + Integrate Tromp solver into miner code and remove its dependency on extra BLAKE2b implementation. + Minor edits to dnsseed-policy.md. + Avoid boost::posix_time functions that have potential out-of-bounds read bugs. ref #1459 + Add help for -equihashsolver= option. + Assert that the Equihash solver is a supported option. + Repair check-security-hardening.sh. + Revert "Avoid boost::posix_time functions that have potential out-of-bounds read bugs. ref #1459" + Fix race condition in rpc-tests/wallet_protectcoinbase.py. closes #1597 + Fix other potential race conditions similar to ref #1597 in RPC tests. + Update the error message string for tx version too low. ref #1600 + Static assertion that standard and network min tx versions are consistent. + Update comments in chainparams.cpp. + Update unit-tests documentation. closes #1530 + Address @str4d's comments on unit-tests doc. ref #1530 + Remove copyright entries for some files we deleted. + Update license text in README.md. closes #38 + Bump version numbers to 1.0.0-rc2. + +David Mercer (4): + explicitly pass HOST and BUILD to ./configure + allow both HOST and BUILD to be passed in from the zcutil/build.sh + pass in both HOST and BUILD to depends system, needed for deterministic builds + explicitly pass HOST and BUILD to libgmp ./configure + +Gregory Maxwell (1): + Only send one GetAddr response per connection. + +Jack Grigg (31): + Implement MappedShuffle for tracking the permutation of an array + Implement static method for creating a randomized JSDescription + Randomize JoinSplits in z_sendmany + Refactor test code to better test JSDescription::Randomized() + Remove stale comment + Rename libbitcoinconsensus to libzcashconsensus + Rename bitcoin-tx to zcash-tx + Remove the RC 1 block index error message + Disable wallet encryption + Add more assertions, throw if find_output params are invalid + Clear witness cache when re-witnessing notes + Add heights to log output + Throw an error when encryptwallet is disabled + Document that wallet encryption is disabled + Document another wallet encryption concern + Improve security documentation + Fix RPC tests that require wallet encryption + Add test that encryptwallet is disabled + Revert "Revert "Avoid boost::posix_time functions that have potential out-of-bounds read bugs. ref #1459"" + GBT: Support coinbasetxn instead of coinbasevalue + GBT: Add informational founders' reward value to coinbasetxn + GBT: Correct block header in proposals RPC test + GBT: Add RPC tests + Disallow v0 transactions as a consensus rule + Reject block versions lower than 4 + Regenerate genesis blocks with nVersion = 4 + Use tromp's solver to regenerate miner tests + Update tests for new genesis blocks + Enforce standard transaction rules on testnet + Update sighash tests for new consensus rule + Fix RPC test + +Jay Graber (7): + Rm bitcoin dev keys from gitian-downloader, add zcash dev keys + Rm bips.md + Update files.md for zcash + Update dnsseed-policy.md + Developer notes still relevant + Document RPC interface security assumptions in security-warnings.md + Update RPC interfaces warnings language + +Patrick Strateman (1): + CDataStream::ignore Throw exception instead of assert on negative nSize. + +Pieter Wuille (4): + Introduce constant for maximum CScript length + Treat overly long scriptPubKeys as unspendable + Fix OOM bug: UTXO entries with invalid script length + Add tests for CCoins deserialization + +Simon (17): + Fixes CID 1147436 uninitialized scalar field. + Fixes CID 1352706 uninitialized scalar field. + Fixes CID 1352698 uninitialized scalar field. + Fixes CID 1352687 uninitialized scalar field. + Fixes CID 1352715 uninitialized scalar field. + Fixes CID 1352686 uninitialized scalar variable. + Fixes CID 1352599 unitialized scalar variable + Fixes CID 1352727 uninitialized scalar variable. + Fixes CID 1352714 uninitialized scalar variable. + Add security warning about logging of z_* calls. + Add debug option "zrpcunsafe" to be used when logging more sensitive information such as the memo field of a note. + Closes #1583 by setting up the datadir for the wallet gtest. + Fix issue where z_sendmany is too strict and does not allow integer based amount e.g. 1 which is the same as 1.0 + Update test to use integer amount as well as decimal amount when calling z_sendmany + Fix build problem with coins_tests + Workaround g++ 5.x bug with brace enclosed initializer. + Patch backport of upstream 1588 as we don't (yet) use the NetMsgType namespace + +Wladimir J. van der Laan (1): + net: Ignore `notfound` P2P messages + From c0876672faa194ddd9f02c7c8b154793c2a89ad1 Mon Sep 17 00:00:00 2001 From: Joe Turgeon Date: Sun, 23 Oct 2016 10:54:50 -0500 Subject: [PATCH 108/165] Fixing floating point exception caused by metrics. Using default column width unless in a TTY. --- src/metrics.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index 32fc4ba05..8c4de496a 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -192,16 +192,22 @@ void ThreadShowMetricsScreen() while (true) { // Number of lines that are always displayed int lines = 1; + int cols = 80; // Get current window size - struct winsize w; - ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + if (isatty(STDOUT_FILENO)) { + struct winsize w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + if (w.ws_col) { + cols = w.ws_col; + } + } // Erase below current position std::cout << "\e[J"; - lines += printMetrics(w.ws_col, nStart, mining); - lines += printMessageBox(w.ws_col); + lines += printMetrics(cols, nStart, mining); + lines += printMessageBox(cols); lines += printInitMessage(); // Explain how to exit From dfe29d59882351fa615c1785de7de1d75f74fa8c Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 23 Oct 2016 20:41:18 -0500 Subject: [PATCH 109/165] Disable metrics screen in performance-measurements.sh --- qa/zcash/performance-measurements.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qa/zcash/performance-measurements.sh b/qa/zcash/performance-measurements.sh index 1ad35b65c..2e99ab2d6 100755 --- a/qa/zcash/performance-measurements.sh +++ b/qa/zcash/performance-measurements.sh @@ -15,7 +15,7 @@ function zcashd_generate { function zcashd_start { rm -rf "$DATADIR" mkdir -p "$DATADIR" - ./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 & + ./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 -showmetrics=0 & ZCASHD_PID=$! } @@ -28,7 +28,7 @@ function zcashd_massif_start { rm -rf "$DATADIR" mkdir -p "$DATADIR" rm -f massif.out - valgrind --tool=massif --time-unit=ms --massif-out-file=massif.out ./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 & + valgrind --tool=massif --time-unit=ms --massif-out-file=massif.out ./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 -showmetrics=0 & ZCASHD_PID=$! } @@ -42,7 +42,7 @@ function zcashd_valgrind_start { rm -rf "$DATADIR" mkdir -p "$DATADIR" rm -f valgrind.out - valgrind --leak-check=yes -v --error-limit=no --log-file="valgrind.out" ./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 & + valgrind --leak-check=yes -v --error-limit=no --log-file="valgrind.out" ./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 -showmetrics=0 & ZCASHD_PID=$! } From 1da44b346cf02b4a77c830ad79b73c9f485e14ea Mon Sep 17 00:00:00 2001 From: Joe Turgeon Date: Sun, 23 Oct 2016 21:23:56 -0500 Subject: [PATCH 110/165] Adding handling for ioctl failure. Updates from code review in PR #1615. --- src/metrics.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index 8c4de496a..a5480838e 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -13,6 +13,7 @@ #include #include #include +#include AtomicCounter transactionsValidated; AtomicCounter ehSolverRuns; @@ -196,11 +197,11 @@ void ThreadShowMetricsScreen() // Get current window size if (isatty(STDOUT_FILENO)) { - struct winsize w; - ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); - if (w.ws_col) { - cols = w.ws_col; - } + struct winsize w; + w.ws_col = 0; + if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1 && w.ws_col != 0) { + cols = w.ws_col; + } } // Erase below current position From 10d1b9098781b92432f3e0771ed57d19d6eab1c1 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 24 Oct 2016 07:59:32 -0700 Subject: [PATCH 111/165] Fix incorrect error message in z_sendmany --- src/wallet/asyncrpcoperation_sendmany.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index eaa245857..de3ee1077 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -197,11 +197,11 @@ bool AsyncRPCOperation_sendmany::main_impl() { CAmount targetAmount = sendAmount + minersFee; if (isfromtaddr_ && (t_inputs_total < targetAmount)) { - throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, strprintf("Insufficient transparent funds, have %ld, need %ld plus fee %ld", t_inputs_total, t_outputs_total, minersFee)); + throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, strprintf("Insufficient transparent funds, have %ld, need %ld", t_inputs_total, targetAmount)); } if (isfromzaddr_ && (z_inputs_total < targetAmount)) { - throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, strprintf("Insufficient protected funds, have %ld, need %ld plus fee %ld", z_inputs_total, z_outputs_total, minersFee)); + throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, strprintf("Insufficient protected funds, have %ld, need %ld", z_inputs_total, targetAmount)); } // If from address is a taddr, select UTXOs to spend From 27e3f362f0ba7aba2d4456b639947be7cac48147 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Mon, 24 Oct 2016 11:22:39 -0600 Subject: [PATCH 112/165] Zcash zk-SNARK public parameters for 1.0 "Sprout". --- src/init.cpp | 4 ++-- src/zcbenchmarks.cpp | 4 ++-- zcutil/fetch-params.sh | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index 6a9eb6f16..fea385480 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -615,8 +615,8 @@ static void ZC_LoadParams() struct timeval tv_start, tv_end; float elapsed; - boost::filesystem::path pk_path = ZC_GetParamsDir() / "beta2-proving.key"; - boost::filesystem::path vk_path = ZC_GetParamsDir() / "beta2-verifying.key"; + boost::filesystem::path pk_path = ZC_GetParamsDir() / "sprout-proving.key"; + boost::filesystem::path vk_path = ZC_GetParamsDir() / "sprout-verifying.key"; pzcashParams = ZCJoinSplit::Unopened(); diff --git a/src/zcbenchmarks.cpp b/src/zcbenchmarks.cpp index 6ea99993c..1d60fdde7 100644 --- a/src/zcbenchmarks.cpp +++ b/src/zcbenchmarks.cpp @@ -52,8 +52,8 @@ double benchmark_sleep() double benchmark_parameter_loading() { // FIXME: this is duplicated with the actual loading code - boost::filesystem::path pk_path = ZC_GetParamsDir() / "beta2-proving.key"; - boost::filesystem::path vk_path = ZC_GetParamsDir() / "beta2-verifying.key"; + boost::filesystem::path pk_path = ZC_GetParamsDir() / "sprout-proving.key"; + boost::filesystem::path vk_path = ZC_GetParamsDir() / "sprout-verifying.key"; struct timeval tv_start; timer_start(tv_start); diff --git a/zcutil/fetch-params.sh b/zcutil/fetch-params.sh index bf6a123f1..ae225347b 100755 --- a/zcutil/fetch-params.sh +++ b/zcutil/fetch-params.sh @@ -4,10 +4,10 @@ set -eu PARAMS_DIR="$HOME/.zcash-params" -BETA2_PKEY_NAME='beta2-proving.key' -BETA2_VKEY_NAME='beta2-verifying.key' -BETA2_PKEY_URL="https://z.cash/downloads/$BETA2_PKEY_NAME" -BETA2_VKEY_URL="https://z.cash/downloads/$BETA2_VKEY_NAME" +SPROUT_PKEY_NAME='sprout-proving.key' +SPROUT_VKEY_NAME='sprout-verifying.key' +SPROUT_PKEY_URL="https://z.cash/downloads/$SPROUT_PKEY_NAME" +SPROUT_VKEY_URL="https://z.cash/downloads/$SPROUT_VKEY_NAME" function fetch_params { local url="$1" @@ -96,8 +96,8 @@ EOF cd "$PARAMS_DIR" - fetch_params "$BETA2_PKEY_URL" "$PARAMS_DIR/$BETA2_PKEY_NAME" "cca9887becf803c8ca801bc9da8fcba4f5fb3ba13af9d17e8603021a150cb4b7" - fetch_params "$BETA2_VKEY_URL" "$PARAMS_DIR/$BETA2_VKEY_NAME" "2faffd2a5e2e67276c3471c48068a0c16f62286d2e4622a733d7cd1f82ffa860" + fetch_params "$SPROUT_PKEY_URL" "$PARAMS_DIR/$SPROUT_PKEY_NAME" "8bc20a7f013b2b58970cddd2e7ea028975c88ae7ceb9259a5344a16bc2c0eef7" + fetch_params "$SPROUT_VKEY_URL" "$PARAMS_DIR/$SPROUT_VKEY_NAME" "4bd498dae0aacfd8e98dc306338d017d9c08dd0918ead18172bd0aec2fc5df82" } main From a885ee4668967811c44158592d74e3baef3baa22 Mon Sep 17 00:00:00 2001 From: Kevin Gallagher Date: Mon, 24 Oct 2016 14:39:52 -0700 Subject: [PATCH 113/165] Prefer sha256sum but fall back to shasum if not available One is provided by coreutils, the other is a Perl module. --- zcutil/fetch-params.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/zcutil/fetch-params.sh b/zcutil/fetch-params.sh index bf6a123f1..f0ac71baf 100755 --- a/zcutil/fetch-params.sh +++ b/zcutil/fetch-params.sh @@ -9,6 +9,9 @@ BETA2_VKEY_NAME='beta2-verifying.key' BETA2_PKEY_URL="https://z.cash/downloads/$BETA2_PKEY_NAME" BETA2_VKEY_URL="https://z.cash/downloads/$BETA2_VKEY_NAME" +SHA256CMD="$(command -v sha256sum || echo shasum)" +SHA256ARGS="$(command -v sha256sum >/dev/null || echo '-a 256')" + function fetch_params { local url="$1" local output="$2" @@ -25,7 +28,7 @@ function fetch_params { --retry-connrefused --waitretry=3 --timeout=30 \ "$url" - shasum -a 256 --check < Date: Mon, 24 Oct 2016 16:41:10 -0700 Subject: [PATCH 114/165] Adds libgomp1 to Debian package depends Fixes #1610. --- contrib/DEBIAN/control | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/DEBIAN/control b/contrib/DEBIAN/control index 2994441ae..6d3b8d129 100644 --- a/contrib/DEBIAN/control +++ b/contrib/DEBIAN/control @@ -12,6 +12,7 @@ Vcs-Browser: https://github.com/zcash/zcash Package: zcash Version: 1.0.0-rc2 Architecture: amd64 +Depends: libgomp1 Description: Zcash is an implementation of the "Zerocash" protocol. Based on Bitcoin's code, it intends to offer a far higher standard of privacy and anonymity through a sophisticiated zero-knowledge From db026807b8fde707bcb3fea172619dde6385c3be Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 24 Oct 2016 16:11:18 -0700 Subject: [PATCH 115/165] Add z_sendmany rule that when sending coinbase utxos to a zaddr they must be consumed entirely, without any change, since there is currently no way to specify a change address in z_sendmany. --- qa/rpc-tests/wallet_nullifiers.py | 2 +- qa/rpc-tests/wallet_protectcoinbase.py | 47 +++++++++++++++++------ src/wallet/asyncrpcoperation_sendmany.cpp | 25 ++++-------- src/wallet/rpcwallet.cpp | 1 + 4 files changed, 44 insertions(+), 31 deletions(-) diff --git a/qa/rpc-tests/wallet_nullifiers.py b/qa/rpc-tests/wallet_nullifiers.py index 143963e36..ce18f8d51 100755 --- a/qa/rpc-tests/wallet_nullifiers.py +++ b/qa/rpc-tests/wallet_nullifiers.py @@ -21,7 +21,7 @@ class WalletNullifiersTest (BitcoinTestFramework): # send node 0 taddr to zaddr to get out of coinbase mytaddr = self.nodes[0].getnewaddress(); recipients = [] - recipients.append({"address":myzaddr0, "amount":10.0}) + recipients.append({"address":myzaddr0, "amount":Decimal('10.0')-Decimal('0.0001')}) # utxo amount less fee myopid = self.nodes[0].z_sendmany(mytaddr, recipients) opids = [] diff --git a/qa/rpc-tests/wallet_protectcoinbase.py b/qa/rpc-tests/wallet_protectcoinbase.py index f32ca6795..b3d554889 100755 --- a/qa/rpc-tests/wallet_protectcoinbase.py +++ b/qa/rpc-tests/wallet_protectcoinbase.py @@ -60,16 +60,39 @@ class Wallet2Test (BitcoinTestFramework): # coinbase utxos can only be sent to a zaddr. errorString = "" try: - self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 1.0) + self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 1) except JSONRPCException,e: errorString = e.error['message'] assert_equal("Coinbase funds can only be sent to a zaddr" in errorString, True) - # send node 0 taddr to node 0 zaddr + # Prepare to send taddr->zaddr mytaddr = self.nodes[0].getnewaddress() myzaddr = self.nodes[0].z_getnewaddress() + + # This send will fail because our wallet does not allow any change when protecting a coinbase utxo, + # as it's currently not possible to specify a change address in z_sendmany. recipients = [] - recipients.append({"address":myzaddr, "amount":20.0}) + recipients.append({"address":myzaddr, "amount":Decimal('1.23456789')}) + errorString = "" + myopid = self.nodes[0].z_sendmany(mytaddr, recipients) + opids = [] + opids.append(myopid) + timeout = 10 + status = None + for x in xrange(1, timeout): + results = self.nodes[0].z_getoperationresult(opids) + if len(results)==0: + sleep(1) + else: + status = results[0]["status"] + errorString = results[0]["error"]["message"] + break + assert_equal("failed", status) + assert_equal("wallet does not allow any change" in errorString, True) + + # This send will succeed. We send two coinbase utxos totalling 20.0 less a fee of 0.00010000, with no change. + recipients = [] + recipients.append({"address":myzaddr, "amount": Decimal('20.0') - Decimal('0.0001')}) myopid = self.nodes[0].z_sendmany(mytaddr, recipients) self.wait_for_operationd_success(myopid) self.sync_all() @@ -78,13 +101,13 @@ class Wallet2Test (BitcoinTestFramework): # check balances (the z_sendmany consumes 3 coinbase utxos) resp = self.nodes[0].z_gettotalbalance() - assert_equal(Decimal(resp["transparent"]), Decimal('10.0')) - assert_equal(Decimal(resp["private"]), Decimal('29.9999')) + assert_equal(Decimal(resp["transparent"]), Decimal('20.0')) + assert_equal(Decimal(resp["private"]), Decimal('19.9999')) assert_equal(Decimal(resp["total"]), Decimal('39.9999')) # convert note to transparent funds recipients = [] - recipients.append({"address":mytaddr, "amount":20.0}) + recipients.append({"address":mytaddr, "amount":Decimal('10.0')}) myopid = self.nodes[0].z_sendmany(myzaddr, recipients) self.wait_for_operationd_success(myopid) self.sync_all() @@ -100,30 +123,30 @@ class Wallet2Test (BitcoinTestFramework): # Send will fail because send amount is too big, even when including coinbase utxos errorString = "" try: - self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 99999.0) + self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 99999) except JSONRPCException,e: errorString = e.error['message'] assert_equal("Insufficient funds" in errorString, True) # Send will fail because of insufficient funds unless sender uses coinbase utxos try: - self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 21.0) + self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 21) except JSONRPCException,e: errorString = e.error['message'] assert_equal("Insufficient funds, coinbase funds can only be spent after they have been sent to a zaddr" in errorString, True) - # Send will succeed because the balance of non-coinbase utxos is 20.0 + # Send will succeed because the balance of non-coinbase utxos is 10.0 try: - self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 19.0) + self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 9) except JSONRPCException: assert(False) self.sync_all() - self.nodes[1].generate(10) + self.nodes[1].generate(1) self.sync_all() # check balance - assert_equal(self.nodes[2].getbalance(), Decimal('19')) + assert_equal(self.nodes[2].getbalance(), 9) if __name__ == '__main__': Wallet2Test ().main () diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index eaa245857..354cfc1be 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -301,8 +301,9 @@ bool AsyncRPCOperation_sendmany::main_impl() { * -> zaddrs * * Note: Consensus rule states that coinbase utxos can only be sent to a zaddr. - * Any change over and above the amount specified by the user will be sent - * to the same zaddr the user is sending funds to. + * Local wallet rule does not allow any change when sending coinbase utxos + * since there is currently no way to specify a change address and we don't + * want users accidentally sending excess funds to a recipient. */ if (isfromtaddr_) { add_taddr_outputs_to_tx(); @@ -311,25 +312,13 @@ bool AsyncRPCOperation_sendmany::main_impl() { CAmount fundsSpent = t_outputs_total + minersFee + z_outputs_total; CAmount change = funds - fundsSpent; - // If there is a single zaddr and there are coinbase utxos, change goes to the zaddr. if (change > 0) { - if (isSingleZaddrOutput && selectedUTXOCoinbase) { - std::string address = std::get<0>(zOutputsDeque.front()); - SendManyRecipient smr(address, change, std::string()); - zOutputsDeque.push_back(smr); - - LogPrint("zrpc", "%s: change from coinbase utxo is also sent to the recipient (amount=%s)\n", - getId().substr(0, 10), - FormatMoney(change, false) - ); - - } else if (!isSingleZaddrOutput && selectedUTXOCoinbase) { - // This should not happen and is not allowed - assert(false); + if (selectedUTXOCoinbase) { + assert(isSingleZaddrOutput); + throw JSONRPCError(RPC_WALLET_ERROR, strprintf( + "Change %ld not allowed. When protecting coinbase funds, the wallet does not allow any change as there is currently no way to specify a change address in z_sendmany.", change)); } else { - // If there is a single zaddr and no coinbase utxos, just use a regular output for change. add_taddr_change_output_to_tx(change); - LogPrint("zrpc", "%s: transparent change in transaction output (amount=%s)\n", getId().substr(0, 10), FormatMoney(change, false) diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 1bb78d5b1..414a5ce5e 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -3176,6 +3176,7 @@ Value z_sendmany(const Array& params, bool fHelp) "z_sendmany \"fromaddress\" [{\"address\":... ,\"amount\":...},...] ( minconf )\n" "\nSend multiple times. Amounts are double-precision floating point numbers." "\nChange from a taddr flows to a new taddr address, while change from zaddr returns to itself." + "\nWhen sending coinbase UTXOs to a zaddr, change is not alllowed. The entire value of the UTXO(s) must be consumed." + HelpRequiringPassphrase() + "\n" "\nArguments:\n" "1. \"fromaddress\" (string, required) The taddr or zaddr to send the funds from.\n" From 7a4e0e09320828dc49632622f54d7b2795051f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chirag=20Dav=C3=A9?= Date: Wed, 4 May 2016 21:40:28 -0700 Subject: [PATCH 116/165] fReopenDebugLog and fRequestShutdown should be type sig_atomic_t This allows access as an atomic variable in the presence of async interrupts. See issue #7433 for more details fixes: #7433 --- src/init.cpp | 2 +- src/util.cpp | 7 ++++--- src/util.h | 10 +++++++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index 6a9eb6f16..ae6437469 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -111,7 +111,7 @@ CClientUIInterface uiInterface; // Declared but not defined in ui_interface.h // shutdown thing. // -volatile bool fRequestShutdown = false; +volatile sig_atomic_t fRequestShutdown = false; void StartShutdown() { diff --git a/src/util.cpp b/src/util.cpp index b451b65a7..79806d7b6 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -107,9 +107,10 @@ bool fPrintToDebugLog = true; bool fDaemon = false; bool fServer = false; string strMiscWarning; -bool fLogTimestamps = false; -bool fLogIPs = false; -volatile bool fReopenDebugLog = false; +bool fLogTimestamps = DEFAULT_LOGTIMESTAMPS; +bool fLogTimeMicros = DEFAULT_LOGTIMEMICROS; +bool fLogIPs = DEFAULT_LOGIPS; +volatile sig_atomic_t fReopenDebugLog = false; CTranslationInterface translationInterface; /** Init OpenSSL library multithreading support */ diff --git a/src/util.h b/src/util.h index 336e2b1b1..4275d4d07 100644 --- a/src/util.h +++ b/src/util.h @@ -28,6 +28,14 @@ #include #include +#ifndef WIN32 +#include +#endif + +static const bool DEFAULT_LOGTIMEMICROS = false; +static const bool DEFAULT_LOGIPS = false; +static const bool DEFAULT_LOGTIMESTAMPS = true; + /** Signals for translation. */ class CTranslationInterface { @@ -45,7 +53,7 @@ extern bool fServer; extern std::string strMiscWarning; extern bool fLogTimestamps; extern bool fLogIPs; -extern volatile bool fReopenDebugLog; +extern volatile sig_atomic_t fReopenDebugLog; extern CTranslationInterface translationInterface; /** From bf3905fe8f40ccaf3a930b12bf38ff15f53cb3bd Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 27 May 2016 13:30:36 +0200 Subject: [PATCH 117/165] Include signal.h for sig_atomic_t in WIN32 --- src/util.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/util.h b/src/util.h index 4275d4d07..5c62450a7 100644 --- a/src/util.h +++ b/src/util.h @@ -28,9 +28,7 @@ #include #include -#ifndef WIN32 #include -#endif static const bool DEFAULT_LOGTIMEMICROS = false; static const bool DEFAULT_LOGIPS = false; From 3f97a535ee020fc8997c2492737782937445e6b9 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 1 Jun 2016 19:18:06 +0200 Subject: [PATCH 118/165] Revert "Include signal.h for sig_atomic_t in WIN32" This reverts commit 88f14b999cb70f6c556633f2889e698a05305158. --- src/util.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/util.h b/src/util.h index 5c62450a7..4275d4d07 100644 --- a/src/util.h +++ b/src/util.h @@ -28,7 +28,9 @@ #include #include +#ifndef WIN32 #include +#endif static const bool DEFAULT_LOGTIMEMICROS = false; static const bool DEFAULT_LOGIPS = false; From bf673640e39eed795f8dd9cfc27c3c867233a99f Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Mon, 30 May 2016 15:39:37 +0200 Subject: [PATCH 119/165] Use std::atomic for fRequestShutdown and fReopenDebugLog --- src/init.cpp | 2 +- src/util.cpp | 2 +- src/util.h | 7 ++----- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index ae6437469..9aea05b7d 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -111,7 +111,7 @@ CClientUIInterface uiInterface; // Declared but not defined in ui_interface.h // shutdown thing. // -volatile sig_atomic_t fRequestShutdown = false; +std::atomic fRequestShutdown(false); void StartShutdown() { diff --git a/src/util.cpp b/src/util.cpp index 79806d7b6..74a714b40 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -110,7 +110,7 @@ string strMiscWarning; bool fLogTimestamps = DEFAULT_LOGTIMESTAMPS; bool fLogTimeMicros = DEFAULT_LOGTIMEMICROS; bool fLogIPs = DEFAULT_LOGIPS; -volatile sig_atomic_t fReopenDebugLog = false; +std::atomic fReopenDebugLog(false); CTranslationInterface translationInterface; /** Init OpenSSL library multithreading support */ diff --git a/src/util.h b/src/util.h index 4275d4d07..9abaa1928 100644 --- a/src/util.h +++ b/src/util.h @@ -18,6 +18,7 @@ #include "tinyformat.h" #include "utiltime.h" +#include #include #include #include @@ -28,10 +29,6 @@ #include #include -#ifndef WIN32 -#include -#endif - static const bool DEFAULT_LOGTIMEMICROS = false; static const bool DEFAULT_LOGIPS = false; static const bool DEFAULT_LOGTIMESTAMPS = true; @@ -53,7 +50,7 @@ extern bool fServer; extern std::string strMiscWarning; extern bool fLogTimestamps; extern bool fLogIPs; -extern volatile sig_atomic_t fReopenDebugLog; +extern std::atomic fReopenDebugLog; extern CTranslationInterface translationInterface; /** From 666a401f4272ebd9e8ee514cb7d8b522f6eb0bfd Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 25 Oct 2016 16:14:38 +0100 Subject: [PATCH 120/165] Refactor README docs to avoid duplication. Signed-off-by: Daira Hopwood --- README.md | 52 +++++++++++++++++++++++++++++++++------------------ doc/README.md | 25 ------------------------- 2 files changed, 34 insertions(+), 43 deletions(-) delete mode 100644 doc/README.md diff --git a/README.md b/README.md index a3d416380..69e321f0f 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,19 @@ -Zcash -===== - -https://z.cash/ - -Where do I begin? ------------------ - -We have a guide for joining the public testnet: https://github.com/zcash/zcash/wiki/Beta-Guide +Zcash 1.0.0-rc2 +=============== What is Zcash? -------------- -Zcash is an implementation of the "Zerocash" protocol. Based on Bitcoin's code, it intends to -offer a far higher standard of privacy and anonymity through a sophisticiated zero-knowledge -proving scheme which preserves confidentiality of transaction metadata. Technical details are +[Zcash](https://z.cash/) is an implementation of the "Zerocash" protocol. +Based on Bitcoin's code, it intends to offer a far higher standard of privacy +and anonymity through a sophisticiated zero-knowledge proving scheme that +preserves confidentiality of transaction metadata. Technical details are available in our [Protocol Specification](https://github.com/zcash/zips/raw/master/protocol/protocol.pdf). -**Zcash is unfinished and highly experimental.** Use at your own risk. - -Participation in the Zcash project is subject to a [Code of Conduct](code_of_conduct.md). +This software is the Zcash client. It downloads and stores the entire history +of Zcash transactions; depending on the speed of your computer and network +connection, the synchronization process could take a day or more once the +block chain has reached a significant size. Security Warnings ----------------- @@ -26,9 +21,30 @@ Security Warnings See important security warnings in [doc/security-warnings.md](doc/security-warnings.md). +**Zcash is unfinished and highly experimental.** Use at your own risk. + +Where do I begin? +----------------- + +We have a guide for joining the public testnet: +https://github.com/zcash/zcash/wiki/Beta-Guide + +### Need Help? + +* See the documentation at the [Zcash Wiki](https://github.com/zcash/zcash/wiki) + for help and more information. +* Ask for help on the [Zcash](https://forum.z.cash/) forum. + +Participation in the Zcash project is subject to a +[Code of Conduct](code_of_conduct.md). + +Building +-------- + +Build Zcash along with most dependencies from source by running +./zcutil/build.sh. Currently only Linux is supported. + License ------- -Zcash is released under the terms of the MIT license. See [COPYING](COPYING) for more -information or see http://opensource.org/licenses/MIT. - +For license information see the file [COPYING](COPYING). diff --git a/doc/README.md b/doc/README.md deleted file mode 100644 index 89c4b08ae..000000000 --- a/doc/README.md +++ /dev/null @@ -1,25 +0,0 @@ -Zcash Core 1.0.0-rc2 -==================== - -[Zcash](https://z.cash/) is the Zcash client. It downloads and stores the entire history of Zcash transactions; depending on the speed of your computer and network connection, the synchronization process could take a day or more once the blockchain has reached a significant size. - -### Need Help? - -* See the documentation at the [Zcash Wiki](https://github.com/zcash/zcash/wiki) for help and more information. NOTE: Other documentation in this directory may be out of date and inaccurate. -* Ask for help on the [Zcash](https://forum.z.cash/) forums. - -Building --------- - -Build Zcash along with most dependencies from source by running ./zcutil/build.sh. Currently only Linux is supported. - -License ---------------------- -Distributed under the [MIT software license](http://www.opensource.org/licenses/mit-license.php). - -This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](https://www.openssl.org/). This product includes -cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard. - -Certain files under the ``src/qt/`` and ``scripts/img/`` directories are distributed under the -LGPL or GPL licenses. Dependencies downloaded as part of the build process may be covered by other -open source licenses. For further details see ``contrib/DEBIAN/copyright``. From 86b671eae08893300da732e23210061fde875351 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 25 Oct 2016 16:18:06 +0100 Subject: [PATCH 121/165] Fix licensing to comply with OpenSSL and Berkeley DB licenses. Signed-off-by: Daira Hopwood --- COPYING | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/COPYING b/COPYING index 943b31921..3043e4463 100644 --- a/COPYING +++ b/COPYING @@ -18,3 +18,34 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +The MIT software license (http://www.opensource.org/licenses/mit-license.php) +above applies to the code directly included in this source distribution, with +the exception of certain files under the 'src/qt/' and 'scripts/img/' directories +which are distributed under the LGPL or GPL licenses. Dependencies downloaded +as part of the build process may be covered by other open source licenses. +For further details see 'contrib/DEBIAN/copyright'. + + +This product includes software developed by the OpenSSL Project for use in the +[OpenSSL Toolkit](https://www.openssl.org/). This product includes cryptographic +software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), +and UPnP software written by Thomas Bernard. + + +Although almost all of the Zcash code is licensed under "permissive" open source +licenses, users and distributors should note that when built using the default +build options, Zcash depends on Oracle Berkeley DB, which includes the following +license clause: + + Redistributions in any form must be accompanied by information on + how to obtain complete source code for the DB software and any + accompanying software that uses the DB software. The source code + must either be included in the distribution or be available for no + more than the cost of distribution plus a nominal fee, and must be + freely redistributable under reasonable conditions. For an + executable file, complete source code means the source code for all + modules it contains. It does not include source code for modules or + files that typically accompany the major components of the operating + system on which the executable file runs. From 9cb7abafb55bcf7dac60c7f5dbdf2a350dc7dfe7 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 25 Oct 2016 16:05:49 +0100 Subject: [PATCH 122/165] Changes to upgrade bdb to 6.2.23 ref #1255 --- COPYING | 15 +- build-aux/m4/bitcoin_find_bdb48.m4 | 30 +- configure.ac | 8 +- contrib/DEBIAN/copyright | 699 +++++++++++++++++++++++++++-- depends/packages/bdb.mk | 6 +- 5 files changed, 692 insertions(+), 66 deletions(-) diff --git a/COPYING b/COPYING index 3043e4463..62038b6ba 100644 --- a/COPYING +++ b/COPYING @@ -36,16 +36,5 @@ and UPnP software written by Thomas Bernard. Although almost all of the Zcash code is licensed under "permissive" open source licenses, users and distributors should note that when built using the default -build options, Zcash depends on Oracle Berkeley DB, which includes the following -license clause: - - Redistributions in any form must be accompanied by information on - how to obtain complete source code for the DB software and any - accompanying software that uses the DB software. The source code - must either be included in the distribution or be available for no - more than the cost of distribution plus a nominal fee, and must be - freely redistributable under reasonable conditions. For an - executable file, complete source code means the source code for all - modules it contains. It does not include source code for modules or - files that typically accompany the major components of the operating - system on which the executable file runs. +build options, Zcash depends on Oracle Berkeley DB 6.2.x, which is licensed +under the GNU Affero General Public License. diff --git a/build-aux/m4/bitcoin_find_bdb48.m4 b/build-aux/m4/bitcoin_find_bdb48.m4 index 20a595270..bd5c2af45 100644 --- a/build-aux/m4/bitcoin_find_bdb48.m4 +++ b/build-aux/m4/bitcoin_find_bdb48.m4 @@ -1,11 +1,11 @@ -AC_DEFUN([BITCOIN_FIND_BDB53],[ +AC_DEFUN([BITCOIN_FIND_BDB62],[ AC_MSG_CHECKING([for Berkeley DB C++ headers]) BDB_CPPFLAGS= BDB_LIBS= bdbpath=X - bdb53path=X + bdb62path=X bdbdirlist= - for _vn in 5.3 53 5 ''; do + for _vn in 6.2 62 6 ''; do for _pfx in b lib ''; do bdbdirlist="$bdbdirlist ${_pfx}db${_vn}" done @@ -15,8 +15,8 @@ AC_DEFUN([BITCOIN_FIND_BDB53],[ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <${searchpath}db_cxx.h> ]],[[ - #if !((DB_VERSION_MAJOR == 5 && DB_VERSION_MINOR >= 3) || DB_VERSION_MAJOR > 5) - #error "failed to find bdb 5.3+" + #if !((DB_VERSION_MAJOR == 6 && DB_VERSION_MINOR >= 2) || DB_VERSION_MAJOR > 6) + #error "failed to find bdb 6.2+" #endif ]])],[ if test "x$bdbpath" = "xX"; then @@ -28,32 +28,32 @@ AC_DEFUN([BITCOIN_FIND_BDB53],[ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <${searchpath}db_cxx.h> ]],[[ - #if !(DB_VERSION_MAJOR == 5 && DB_VERSION_MINOR == 3) - #error "failed to find bdb 5.3" + #if !(DB_VERSION_MAJOR == 6 && DB_VERSION_MINOR == 2) + #error "failed to find bdb 6.2" #endif ]])],[ - bdb53path="${searchpath}" + bdb62path="${searchpath}" break ],[]) done if test "x$bdbpath" = "xX"; then AC_MSG_RESULT([no]) AC_MSG_ERROR([libdb_cxx headers missing, Bitcoin Core requires this library for wallet functionality (--disable-wallet to disable wallet functionality)]) - elif test "x$bdb53path" = "xX"; then + elif test "x$bdb62path" = "xX"; then BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdbpath}],db_cxx) - AC_ARG_WITH([incompatible-bdb],[AS_HELP_STRING([--with-incompatible-bdb], [allow using a bdb version other than 5.3])],[ - AC_MSG_WARN([Found Berkeley DB other than 5.3; wallets opened by this build will not be portable!]) + AC_ARG_WITH([incompatible-bdb],[AS_HELP_STRING([--with-incompatible-bdb], [allow using a bdb version other than 6.2])],[ + AC_MSG_WARN([Found Berkeley DB other than 6.2; wallets opened by this build will not be portable!]) ],[ - AC_MSG_ERROR([Found Berkeley DB other than 5.3, required for portable wallets (--with-incompatible-bdb to ignore or --disable-wallet to disable wallet functionality)]) + AC_MSG_ERROR([Found Berkeley DB other than 6.2, required for portable wallets (--with-incompatible-bdb to ignore or --disable-wallet to disable wallet functionality)]) ]) else - BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdb53path}],db_cxx) - bdbpath="${bdb53path}" + BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdb62path}],db_cxx) + bdbpath="${bdb62path}" fi AC_SUBST(BDB_CPPFLAGS) # TODO: Ideally this could find the library version and make sure it matches the headers being used - for searchlib in db_cxx-5.3 db_cxx; do + for searchlib in db_cxx-6.2 db_cxx; do AC_CHECK_LIB([$searchlib],[main],[ BDB_LIBS="-l${searchlib}" break diff --git a/configure.ac b/configure.ac index eae73b845..085786323 100644 --- a/configure.ac +++ b/configure.ac @@ -270,9 +270,9 @@ case $host in dnl add default macports paths CPPFLAGS="$CPPFLAGS -isystem /opt/local/include" LIBS="$LIBS -L/opt/local/lib" - if test -d /opt/local/include/db53; then - CPPFLAGS="$CPPFLAGS -I/opt/local/include/db53" - LIBS="$LIBS -L/opt/local/lib/db53" + if test -d /opt/local/include/db62; then + CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62" + LIBS="$LIBS -L/opt/local/lib/db62" fi fi @@ -522,7 +522,7 @@ AC_SUBST(LIBMEMENV) if test x$enable_wallet != xno; then dnl Check for libdb_cxx only if wallet enabled - BITCOIN_FIND_BDB53 + BITCOIN_FIND_BDB62 fi dnl Check for libminiupnpc (optional) diff --git a/contrib/DEBIAN/copyright b/contrib/DEBIAN/copyright index 7658e7844..04daeb024 100644 --- a/contrib/DEBIAN/copyright +++ b/contrib/DEBIAN/copyright @@ -86,7 +86,7 @@ Copyright: 2008 Beman Dawes License: Boost-Software-License-1.0 Files: depends/sources/db-*.tar.gz -Copyright: 1990, 2013 Oracle and/or its affiliates; +Copyright: 1990, 2016 Oracle and/or its affiliates; 1990, 1993, 1994, 1995 The Regents of the University of California; 1995, 1996 The President and Fellows of Harvard University; 2000-2005 INRIA, France Telecom @@ -129,39 +129,676 @@ License: Boost-Software-License-1.0 License: BDB /* - * Copyright (c) 1990, 2013 Oracle and/or its affiliates. All rights reserved. + * The Oracle Berkeley DB product is licensed + * under the GNU AFFERO GENERAL PUBLIC LICENSE: * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Redistributions in any form must be accompanied by information on - * how to obtain complete source code for the DB software and any - * accompanying software that uses the DB software. The source code - * must either be included in the distribution or be available for no - * more than the cost of distribution plus a nominal fee, and must be - * freely redistributable under reasonable conditions. For an - * executable file, complete source code means the source code for all - * modules it contains. It does not include source code for modules or - * files that typically accompany the major components of the operating - * system on which the executable file runs. * - * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR - * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * GNU AFFERO GENERAL PUBLIC LICENSE + * Version 3, 19 November 2007 + * + * Copyright (C) 2007 Free Software Foundation, Inc. + * Everyone is permitted to copy and distribute verbatim copies + * of this license document, but changing it is not allowed. + * + * Preamble + * + * The GNU Affero General Public License is a free, copyleft license for + * software and other kinds of works, specifically designed to ensure + * cooperation with the community in the case of network server software. + * + * The licenses for most software and other practical works are designed + * to take away your freedom to share and change the works. By contrast, + * our General Public Licenses are intended to guarantee your freedom to + * share and change all versions of a program--to make sure it remains free + * software for all its users. + * + * When we speak of free software, we are referring to freedom, not + * price. Our General Public Licenses are designed to make sure that you + * have the freedom to distribute copies of free software (and charge for + * them if you wish), that you receive source code or can get it if you + * want it, that you can change the software or use pieces of it in new + * free programs, and that you know you can do these things. + * + * Developers that use our General Public Licenses protect your rights + * with two steps: (1) assert copyright on the software, and (2) offer + * you this License which gives you legal permission to copy, distribute + * and/or modify the software. + * + * A secondary benefit of defending all users' freedom is that + * improvements made in alternate versions of the program, if they + * receive widespread use, become available for other developers to + * incorporate. Many developers of free software are heartened and + * encouraged by the resulting cooperation. However, in the case of + * software used on network servers, this result may fail to come about. + * The GNU General Public License permits making a modified version and + * letting the public access it on a server without ever releasing its + * source code to the public. + * + * The GNU Affero General Public License is designed specifically to + * ensure that, in such cases, the modified source code becomes available + * to the community. It requires the operator of a network server to + * provide the source code of the modified version running there to the + * users of that server. Therefore, public use of a modified version, on + * a publicly accessible server, gives the public access to the source + * code of the modified version. + * + * An older license, called the Affero General Public License and + * published by Affero, was designed to accomplish similar goals. This is + * a different license, not a version of the Affero GPL, but Affero has + * released a new version of the Affero GPL which permits relicensing under + * this license. + * + * The precise terms and conditions for copying, distribution and + * modification follow. + * + * TERMS AND CONDITIONS + * + * 0. Definitions. + * + * "This License" refers to version 3 of the GNU Affero General Public License. + * + * "Copyright" also means copyright-like laws that apply to other kinds of + * works, such as semiconductor masks. + * + * "The Program" refers to any copyrightable work licensed under this + * License. Each licensee is addressed as "you". "Licensees" and + * "recipients" may be individuals or organizations. + * + * To "modify" a work means to copy from or adapt all or part of the work + * in a fashion requiring copyright permission, other than the making of an + * exact copy. The resulting work is called a "modified version" of the + * earlier work or a work "based on" the earlier work. + * + * A "covered work" means either the unmodified Program or a work based + * on the Program. + * + * To "propagate" a work means to do anything with it that, without + * permission, would make you directly or secondarily liable for + * infringement under applicable copyright law, except executing it on a + * computer or modifying a private copy. Propagation includes copying, + * distribution (with or without modification), making available to the + * public, and in some countries other activities as well. + * + * To "convey" a work means any kind of propagation that enables other + * parties to make or receive copies. Mere interaction with a user through + * a computer network, with no transfer of a copy, is not conveying. + * + * An interactive user interface displays "Appropriate Legal Notices" + * to the extent that it includes a convenient and prominently visible + * feature that (1) displays an appropriate copyright notice, and (2) + * tells the user that there is no warranty for the work (except to the + * extent that warranties are provided), that licensees may convey the + * work under this License, and how to view a copy of this License. If + * the interface presents a list of user commands or options, such as a + * menu, a prominent item in the list meets this criterion. + * + * 1. Source Code. + * + * The "source code" for a work means the preferred form of the work + * for making modifications to it. "Object code" means any non-source + * form of a work. + * + * A "Standard Interface" means an interface that either is an official + * standard defined by a recognized standards body, or, in the case of + * interfaces specified for a particular programming language, one that + * is widely used among developers working in that language. + * + * The "System Libraries" of an executable work include anything, other + * than the work as a whole, that (a) is included in the normal form of + * packaging a Major Component, but which is not part of that Major + * Component, and (b) serves only to enable use of the work with that + * Major Component, or to implement a Standard Interface for which an + * implementation is available to the public in source code form. A + * "Major Component", in this context, means a major essential component + * (kernel, window system, and so on) of the specific operating system + * (if any) on which the executable work runs, or a compiler used to + * produce the work, or an object code interpreter used to run it. + * + * The "Corresponding Source" for a work in object code form means all + * the source code needed to generate, install, and (for an executable + * work) run the object code and to modify the work, including scripts to + * control those activities. However, it does not include the work's + * System Libraries, or general-purpose tools or generally available free + * programs which are used unmodified in performing those activities but + * which are not part of the work. For example, Corresponding Source + * includes interface definition files associated with source files for + * the work, and the source code for shared libraries and dynamically + * linked subprograms that the work is specifically designed to require, + * such as by intimate data communication or control flow between those + * subprograms and other parts of the work. + * + * The Corresponding Source need not include anything that users + * can regenerate automatically from other parts of the Corresponding + * Source. + * + * The Corresponding Source for a work in source code form is that + * same work. + * + * 2. Basic Permissions. + * + * All rights granted under this License are granted for the term of + * copyright on the Program, and are irrevocable provided the stated + * conditions are met. This License explicitly affirms your unlimited + * permission to run the unmodified Program. The output from running a + * covered work is covered by this License only if the output, given its + * content, constitutes a covered work. This License acknowledges your + * rights of fair use or other equivalent, as provided by copyright law. + * + * You may make, run and propagate covered works that you do not + * convey, without conditions so long as your license otherwise remains + * in force. You may convey covered works to others for the sole purpose + * of having them make modifications exclusively for you, or provide you + * with facilities for running those works, provided that you comply with + * the terms of this License in conveying all material for which you do + * not control copyright. Those thus making or running the covered works + * for you must do so exclusively on your behalf, under your direction + * and control, on terms that prohibit them from making any copies of + * your copyrighted material outside their relationship with you. + * + * Conveying under any other circumstances is permitted solely under + * the conditions stated below. Sublicensing is not allowed; section 10 + * makes it unnecessary. + * + * 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + * + * No covered work shall be deemed part of an effective technological + * measure under any applicable law fulfilling obligations under article + * 11 of the WIPO copyright treaty adopted on 20 December 1996, or + * similar laws prohibiting or restricting circumvention of such + * measures. + * + * When you convey a covered work, you waive any legal power to forbid + * circumvention of technological measures to the extent such circumvention + * is effected by exercising rights under this License with respect to + * the covered work, and you disclaim any intention to limit operation or + * modification of the work as a means of enforcing, against the work's + * users, your or third parties' legal rights to forbid circumvention of + * technological measures. + * + * 4. Conveying Verbatim Copies. + * + * You may convey verbatim copies of the Program's source code as you + * receive it, in any medium, provided that you conspicuously and + * appropriately publish on each copy an appropriate copyright notice; + * keep intact all notices stating that this License and any + * non-permissive terms added in accord with section 7 apply to the code; + * keep intact all notices of the absence of any warranty; and give all + * recipients a copy of this License along with the Program. + * + * You may charge any price or no price for each copy that you convey, + * and you may offer support or warranty protection for a fee. + * + * 5. Conveying Modified Source Versions. + * + * You may convey a work based on the Program, or the modifications to + * produce it from the Program, in the form of source code under the + * terms of section 4, provided that you also meet all of these conditions: + * + * a) The work must carry prominent notices stating that you modified + * it, and giving a relevant date. + * + * b) The work must carry prominent notices stating that it is + * released under this License and any conditions added under section + * 7. This requirement modifies the requirement in section 4 to + * "keep intact all notices". + * + * c) You must license the entire work, as a whole, under this + * License to anyone who comes into possession of a copy. This + * License will therefore apply, along with any applicable section 7 + * additional terms, to the whole of the work, and all its parts, + * regardless of how they are packaged. This License gives no + * permission to license the work in any other way, but it does not + * invalidate such permission if you have separately received it. + * + * d) If the work has interactive user interfaces, each must display + * Appropriate Legal Notices; however, if the Program has interactive + * interfaces that do not display Appropriate Legal Notices, your + * work need not make them do so. + * + * A compilation of a covered work with other separate and independent + * works, which are not by their nature extensions of the covered work, + * and which are not combined with it such as to form a larger program, + * in or on a volume of a storage or distribution medium, is called an + * "aggregate" if the compilation and its resulting copyright are not + * used to limit the access or legal rights of the compilation's users + * beyond what the individual works permit. Inclusion of a covered work + * in an aggregate does not cause this License to apply to the other + * parts of the aggregate. + * + * 6. Conveying Non-Source Forms. + * + * You may convey a covered work in object code form under the terms + * of sections 4 and 5, provided that you also convey the + * machine-readable Corresponding Source under the terms of this License, + * in one of these ways: + * + * a) Convey the object code in, or embodied in, a physical product + * (including a physical distribution medium), accompanied by the + * Corresponding Source fixed on a durable physical medium + * customarily used for software interchange. + * + * b) Convey the object code in, or embodied in, a physical product + * (including a physical distribution medium), accompanied by a + * written offer, valid for at least three years and valid for as + * long as you offer spare parts or customer support for that product + * model, to give anyone who possesses the object code either (1) a + * copy of the Corresponding Source for all the software in the + * product that is covered by this License, on a durable physical + * medium customarily used for software interchange, for a price no + * more than your reasonable cost of physically performing this + * conveying of source, or (2) access to copy the + * Corresponding Source from a network server at no charge. + * + * c) Convey individual copies of the object code with a copy of the + * written offer to provide the Corresponding Source. This + * alternative is allowed only occasionally and noncommercially, and + * only if you received the object code with such an offer, in accord + * with subsection 6b. + * + * d) Convey the object code by offering access from a designated + * place (gratis or for a charge), and offer equivalent access to the + * Corresponding Source in the same way through the same place at no + * further charge. You need not require recipients to copy the + * Corresponding Source along with the object code. If the place to + * copy the object code is a network server, the Corresponding Source + * may be on a different server (operated by you or a third party) + * that supports equivalent copying facilities, provided you maintain + * clear directions next to the object code saying where to find the + * Corresponding Source. Regardless of what server hosts the + * Corresponding Source, you remain obligated to ensure that it is + * available for as long as needed to satisfy these requirements. + * + * e) Convey the object code using peer-to-peer transmission, provided + * you inform other peers where the object code and Corresponding + * Source of the work are being offered to the general public at no + * charge under subsection 6d. + * + * A separable portion of the object code, whose source code is excluded + * from the Corresponding Source as a System Library, need not be + * included in conveying the object code work. + * + * A "User Product" is either (1) a "consumer product", which means any + * tangible personal property which is normally used for personal, family, + * or household purposes, or (2) anything designed or sold for incorporation + * into a dwelling. In determining whether a product is a consumer product, + * doubtful cases shall be resolved in favor of coverage. For a particular + * product received by a particular user, "normally used" refers to a + * typical or common use of that class of product, regardless of the status + * of the particular user or of the way in which the particular user + * actually uses, or expects or is expected to use, the product. A product + * is a consumer product regardless of whether the product has substantial + * commercial, industrial or non-consumer uses, unless such uses represent + * the only significant mode of use of the product. + * + * "Installation Information" for a User Product means any methods, + * procedures, authorization keys, or other information required to install + * and execute modified versions of a covered work in that User Product from + * a modified version of its Corresponding Source. The information must + * suffice to ensure that the continued functioning of the modified object + * code is in no case prevented or interfered with solely because + * modification has been made. + * + * If you convey an object code work under this section in, or with, or + * specifically for use in, a User Product, and the conveying occurs as + * part of a transaction in which the right of possession and use of the + * User Product is transferred to the recipient in perpetuity or for a + * fixed term (regardless of how the transaction is characterized), the + * Corresponding Source conveyed under this section must be accompanied + * by the Installation Information. But this requirement does not apply + * if neither you nor any third party retains the ability to install + * modified object code on the User Product (for example, the work has + * been installed in ROM). + * + * The requirement to provide Installation Information does not include a + * requirement to continue to provide support service, warranty, or updates + * for a work that has been modified or installed by the recipient, or for + * the User Product in which it has been modified or installed. Access to a + * network may be denied when the modification itself materially and + * adversely affects the operation of the network or violates the rules and + * protocols for communication across the network. + * + * Corresponding Source conveyed, and Installation Information provided, + * in accord with this section must be in a format that is publicly + * documented (and with an implementation available to the public in + * source code form), and must require no special password or key for + * unpacking, reading or copying. + * + * 7. Additional Terms. + * + * "Additional permissions" are terms that supplement the terms of this + * License by making exceptions from one or more of its conditions. + * Additional permissions that are applicable to the entire Program shall + * be treated as though they were included in this License, to the extent + * that they are valid under applicable law. If additional permissions + * apply only to part of the Program, that part may be used separately + * under those permissions, but the entire Program remains governed by + * this License without regard to the additional permissions. + * + * When you convey a copy of a covered work, you may at your option + * remove any additional permissions from that copy, or from any part of + * it. (Additional permissions may be written to require their own + * removal in certain cases when you modify the work.) You may place + * additional permissions on material, added by you to a covered work, + * for which you have or can give appropriate copyright permission. + * + * Notwithstanding any other provision of this License, for material you + * add to a covered work, you may (if authorized by the copyright holders of + * that material) supplement the terms of this License with terms: + * + * a) Disclaiming warranty or limiting liability differently from the + * terms of sections 15 and 16 of this License; or + * + * b) Requiring preservation of specified reasonable legal notices or + * author attributions in that material or in the Appropriate Legal + * Notices displayed by works containing it; or + * + * c) Prohibiting misrepresentation of the origin of that material, or + * requiring that modified versions of such material be marked in + * reasonable ways as different from the original version; or + * + * d) Limiting the use for publicity purposes of names of licensors or + * authors of the material; or + * + * e) Declining to grant rights under trademark law for use of some + * trade names, trademarks, or service marks; or + * + * f) Requiring indemnification of licensors and authors of that + * material by anyone who conveys the material (or modified versions of + * it) with contractual assumptions of liability to the recipient, for + * any liability that these contractual assumptions directly impose on + * those licensors and authors. + * + * All other non-permissive additional terms are considered "further + * restrictions" within the meaning of section 10. If the Program as you + * received it, or any part of it, contains a notice stating that it is + * governed by this License along with a term that is a further + * restriction, you may remove that term. If a license document contains + * a further restriction but permits relicensing or conveying under this + * License, you may add to a covered work material governed by the terms + * of that license document, provided that the further restriction does + * not survive such relicensing or conveying. + * + * If you add terms to a covered work in accord with this section, you + * must place, in the relevant source files, a statement of the + * additional terms that apply to those files, or a notice indicating + * where to find the applicable terms. + * + * Additional terms, permissive or non-permissive, may be stated in the + * form of a separately written license, or stated as exceptions; + * the above requirements apply either way. + * + * 8. Termination. + * + * You may not propagate or modify a covered work except as expressly + * provided under this License. Any attempt otherwise to propagate or + * modify it is void, and will automatically terminate your rights under + * this License (including any patent licenses granted under the third + * paragraph of section 11). + * + * However, if you cease all violation of this License, then your + * license from a particular copyright holder is reinstated (a) + * provisionally, unless and until the copyright holder explicitly and + * finally terminates your license, and (b) permanently, if the copyright + * holder fails to notify you of the violation by some reasonable means + * prior to 60 days after the cessation. + * + * Moreover, your license from a particular copyright holder is + * reinstated permanently if the copyright holder notifies you of the + * violation by some reasonable means, this is the first time you have + * received notice of violation of this License (for any work) from that + * copyright holder, and you cure the violation prior to 30 days after + * your receipt of the notice. + * + * Termination of your rights under this section does not terminate the + * licenses of parties who have received copies or rights from you under + * this License. If your rights have been terminated and not permanently + * reinstated, you do not qualify to receive new licenses for the same + * material under section 10. + * + * 9. Acceptance Not Required for Having Copies. + * + * You are not required to accept this License in order to receive or + * run a copy of the Program. Ancillary propagation of a covered work + * occurring solely as a consequence of using peer-to-peer transmission + * to receive a copy likewise does not require acceptance. However, + * nothing other than this License grants you permission to propagate or + * modify any covered work. These actions infringe copyright if you do + * not accept this License. Therefore, by modifying or propagating a + * covered work, you indicate your acceptance of this License to do so. + * + * 10. Automatic Licensing of Downstream Recipients. + * + * Each time you convey a covered work, the recipient automatically + * receives a license from the original licensors, to run, modify and + * propagate that work, subject to this License. You are not responsible + * for enforcing compliance by third parties with this License. + * + * An "entity transaction" is a transaction transferring control of an + * organization, or substantially all assets of one, or subdividing an + * organization, or merging organizations. If propagation of a covered + * work results from an entity transaction, each party to that + * transaction who receives a copy of the work also receives whatever + * licenses to the work the party's predecessor in interest had or could + * give under the previous paragraph, plus a right to possession of the + * Corresponding Source of the work from the predecessor in interest, if + * the predecessor has it or can get it with reasonable efforts. + * + * You may not impose any further restrictions on the exercise of the + * rights granted or affirmed under this License. For example, you may + * not impose a license fee, royalty, or other charge for exercise of + * rights granted under this License, and you may not initiate litigation + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * any patent claim is infringed by making, using, selling, offering for + * sale, or importing the Program or any portion of it. + * + * 11. Patents. + * + * A "contributor" is a copyright holder who authorizes use under this + * License of the Program or a work on which the Program is based. The + * work thus licensed is called the contributor's "contributor version". + * + * A contributor's "essential patent claims" are all patent claims + * owned or controlled by the contributor, whether already acquired or + * hereafter acquired, that would be infringed by some manner, permitted + * by this License, of making, using, or selling its contributor version, + * but do not include claims that would be infringed only as a + * consequence of further modification of the contributor version. For + * purposes of this definition, "control" includes the right to grant + * patent sublicenses in a manner consistent with the requirements of + * this License. + * + * Each contributor grants you a non-exclusive, worldwide, royalty-free + * patent license under the contributor's essential patent claims, to + * make, use, sell, offer for sale, import and otherwise run, modify and + * propagate the contents of its contributor version. + * + * In the following three paragraphs, a "patent license" is any express + * agreement or commitment, however denominated, not to enforce a patent + * (such as an express permission to practice a patent or covenant not to + * sue for patent infringement). To "grant" such a patent license to a + * party means to make such an agreement or commitment not to enforce a + * patent against the party. + * + * If you convey a covered work, knowingly relying on a patent license, + * and the Corresponding Source of the work is not available for anyone + * to copy, free of charge and under the terms of this License, through a + * publicly available network server or other readily accessible means, + * then you must either (1) cause the Corresponding Source to be so + * available, or (2) arrange to deprive yourself of the benefit of the + * patent license for this particular work, or (3) arrange, in a manner + * consistent with the requirements of this License, to extend the patent + * license to downstream recipients. "Knowingly relying" means you have + * actual knowledge that, but for the patent license, your conveying the + * covered work in a country, or your recipient's use of the covered work + * in a country, would infringe one or more identifiable patents in that + * country that you have reason to believe are valid. + * + * If, pursuant to or in connection with a single transaction or + * arrangement, you convey, or propagate by procuring conveyance of, a + * covered work, and grant a patent license to some of the parties + * receiving the covered work authorizing them to use, propagate, modify + * or convey a specific copy of the covered work, then the patent license + * you grant is automatically extended to all recipients of the covered + * work and works based on it. + * + * A patent license is "discriminatory" if it does not include within + * the scope of its coverage, prohibits the exercise of, or is + * conditioned on the non-exercise of one or more of the rights that are + * specifically granted under this License. You may not convey a covered + * work if you are a party to an arrangement with a third party that is + * in the business of distributing software, under which you make payment + * to the third party based on the extent of your activity of conveying + * the work, and under which the third party grants, to any of the + * parties who would receive the covered work from you, a discriminatory + * patent license (a) in connection with copies of the covered work + * conveyed by you (or copies made from those copies), or (b) primarily + * for and in connection with specific products or compilations that + * contain the covered work, unless you entered into that arrangement, + * or that patent license was granted, prior to 28 March 2007. + * + * Nothing in this License shall be construed as excluding or limiting + * any implied license or other defenses to infringement that may + * otherwise be available to you under applicable patent law. + * + * 12. No Surrender of Others' Freedom. + * + * If conditions are imposed on you (whether by court order, agreement or + * otherwise) that contradict the conditions of this License, they do not + * excuse you from the conditions of this License. If you cannot convey a + * covered work so as to satisfy simultaneously your obligations under this + * License and any other pertinent obligations, then as a consequence you may + * not convey it at all. For example, if you agree to terms that obligate you + * to collect a royalty for further conveying from those to whom you convey + * the Program, the only way you could satisfy both those terms and this + * License would be to refrain entirely from conveying the Program. + * + * 13. Remote Network Interaction; Use with the GNU General Public License. + * + * Notwithstanding any other provision of this License, if you modify the + * Program, your modified version must prominently offer all users + * interacting with it remotely through a computer network (if your version + * supports such interaction) an opportunity to receive the Corresponding + * Source of your version by providing access to the Corresponding Source + * from a network server at no charge, through some standard or customary + * means of facilitating copying of software. This Corresponding Source + * shall include the Corresponding Source for any work covered by version 3 + * of the GNU General Public License that is incorporated pursuant to the + * following paragraph. + * + * Notwithstanding any other provision of this License, you have + * permission to link or combine any covered work with a work licensed + * under version 3 of the GNU General Public License into a single + * combined work, and to convey the resulting work. The terms of this + * License will continue to apply to the part which is the covered work, + * but the work with which it is combined will remain governed by version + * 3 of the GNU General Public License. + * + * 14. Revised Versions of this License. + * + * The Free Software Foundation may publish revised and/or new versions of + * the GNU Affero General Public License from time to time. Such new versions + * will be similar in spirit to the present version, but may differ in detail to + * address new problems or concerns. + * + * Each version is given a distinguishing version number. If the + * Program specifies that a certain numbered version of the GNU Affero General + * Public License "or any later version" applies to it, you have the + * option of following the terms and conditions either of that numbered + * version or of any later version published by the Free Software + * Foundation. If the Program does not specify a version number of the + * GNU Affero General Public License, you may choose any version ever published + * by the Free Software Foundation. + * + * If the Program specifies that a proxy can decide which future + * versions of the GNU Affero General Public License can be used, that proxy's + * public statement of acceptance of a version permanently authorizes you + * to choose that version for the Program. + * + * Later license versions may give you additional or different + * permissions. However, no additional obligations are imposed on any + * author or copyright holder as a result of your choosing to follow a + * later version. + * + * 15. Disclaimer of Warranty. + * + * THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + * APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT + * HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY + * OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM + * IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF + * ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + * + * 16. Limitation of Liability. + * + * IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + * WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS + * THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY + * GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE + * USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF + * DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + * PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), + * EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGES. + * + * 17. Interpretation of Sections 15 and 16. + * + * If the disclaimer of warranty and limitation of liability provided + * above cannot be given local legal effect according to their terms, + * reviewing courts shall apply local law that most closely approximates + * an absolute waiver of all civil liability in connection with the + * Program, unless a warranty or assumption of liability accompanies a + * copy of the Program in return for a fee. + * + * END OF TERMS AND CONDITIONS + * + * How to Apply These Terms to Your New Programs + * + * If you develop a new program, and you want it to be of the greatest + * possible use to the public, the best way to achieve this is to make it + * free software which everyone can redistribute and change under these terms. + * + * To do so, attach the following notices to the program. It is safest + * to attach them to the start of each source file to most effectively + * state the exclusion of warranty; and each file should have at least + * the "copyright" line and a pointer to where the full notice is found. + * + * + * Copyright (C) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + * Also add information on how to contact you by electronic and paper mail. + * + * If your software can interact with users remotely through a computer + * network, you should also make sure that it provides a way for users to + * get its source. For example, if your program is a web application, its + * interface could display a "Source" link that leads users to an archive + * of the code. There are many ways you could offer source, and different + * solutions will be better for different programs; see section 13 for the + * specific requirements. + * + * You should also get your employer (if you work as a programmer) or school, + * if any, to sign a "copyright disclaimer" for the program, if necessary. + * For more information on this, and how to apply and follow the GNU AGPL, see + * . */ + . + ADDITIONAL THIRD PARTY NOTICES: + . + =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= /* * Copyright (c) 1990, 1993, 1994, 1995 * The Regents of the University of California. All rights reserved. diff --git a/depends/packages/bdb.mk b/depends/packages/bdb.mk index d0565c880..df5df6bde 100644 --- a/depends/packages/bdb.mk +++ b/depends/packages/bdb.mk @@ -1,8 +1,8 @@ package=bdb -$(package)_version=5.3.28 +$(package)_version=6.2.23 $(package)_download_path=http://download.oracle.com/berkeley-db $(package)_file_name=db-$($(package)_version).tar.gz -$(package)_sha256_hash=e0a992d740709892e81f9d93f06daf305cf73fb81b545afe72478043172c3628 +$(package)_sha256_hash=47612c8991aa9ac2f6be721267c8d3cdccf5ac83105df8e50809daea24e95dc7 $(package)_build_subdir=build_unix define $(package)_set_vars @@ -16,7 +16,7 @@ define $(package)_config_cmds endef define $(package)_build_cmds - $(MAKE) libdb_cxx-5.3.a libdb-5.3.a + $(MAKE) libdb_cxx-6.2.a libdb-6.2.a endef define $(package)_stage_cmds From ad0ba9467d6c248842ad4734a1f9bca5c7d84e10 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 25 Oct 2016 11:25:05 -0700 Subject: [PATCH 123/165] Add assert to AsyncRPCOperation_sendmany --- src/wallet/asyncrpcoperation_sendmany.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index de3ee1077..880555b19 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -196,6 +196,9 @@ bool AsyncRPCOperation_sendmany::main_impl() { CAmount sendAmount = z_outputs_total + t_outputs_total; CAmount targetAmount = sendAmount + minersFee; + assert(!isfromtaddr_ || z_inputs_total == 0); + assert(!isfromzaddr_ || t_inputs_total == 0); + if (isfromtaddr_ && (t_inputs_total < targetAmount)) { throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, strprintf("Insufficient transparent funds, have %ld, need %ld", t_inputs_total, targetAmount)); } From c5b9bd9cad3abcd47c3c0ad7838aeeef8e81577c Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 25 Oct 2016 19:48:38 +0100 Subject: [PATCH 124/165] util: Update tinyformat Updates `tinyformat.h` to commit https://github.com/c42f/tinyformat/commit/3a33bbf65442432277eee079e83d3e8fac51730c upstream. Makes sure that our local changes are kept: - #3767 1b8fd35aadfad6a1e55391f02add6076c8c9ea8f Make tinyformat errors raise an exception instead of assert()ing - #4735 9b6d4c5cdc1ad7b12b8b7ba05125dad9ba2d396e Move strprintf define to tinyformat.h - #4748 6e5fd003e04b81115b6b164b21f048472d575535 include stdexcept (for std::exception) - #8000 9eaa0afa6ec5d3dd01e4d01121314ef51f2bc305 force USE_VARIADIC_TEMPLATES - Add `std::string format(const std::string &fmt...` added this at the time, as we want to be able to do `strprintf(_(...), ...)` Inspired by #8264. --- src/tinyformat.h | 718 +++++++++++++++++++++++++---------------------- 1 file changed, 377 insertions(+), 341 deletions(-) diff --git a/src/tinyformat.h b/src/tinyformat.h index 73d49a1fe..0236610e1 100644 --- a/src/tinyformat.h +++ b/src/tinyformat.h @@ -67,7 +67,9 @@ // weekday, month, day, hour, min); // std::cout << date; // -// These are the three primary interface functions. +// These are the three primary interface functions. There is also a +// convenience function printfln() which appends a newline to the usual result +// of printf() for super simple logging. // // // User defined format functions @@ -86,6 +88,18 @@ // defined function bodies, use the macro TINYFORMAT_FOREACH_ARGNUM. For an // example, see the implementation of printf() at the end of the source file. // +// Sometimes it's useful to be able to pass a list of format arguments through +// to a non-template function. The FormatList class is provided as a way to do +// this by storing the argument list in a type-opaque way. Continuing the +// example from above, we construct a FormatList using makeFormatList(): +// +// FormatListRef formatList = tfm::makeFormatList(weekday, month, day, hour, min); +// +// The format list can now be passed into any non-template function and used +// via a call to the vformat() function: +// +// tfm::vformat(std::cout, "%s, %s %d, %.2d:%.2d\n", formatList); +// // // Additional API information // -------------------------- @@ -118,6 +132,7 @@ namespace tfm = tinyformat; //------------------------------------------------------------------------------ // Implementation details. +#include #include #include #include @@ -133,20 +148,20 @@ namespace tfm = tinyformat; # endif #endif -#ifdef __GNUC__ -# define TINYFORMAT_NOINLINE __attribute__((noinline)) -#elif defined(_MSC_VER) -# define TINYFORMAT_NOINLINE __declspec(noinline) -#else -# define TINYFORMAT_NOINLINE -#endif - #if defined(__GLIBCXX__) && __GLIBCXX__ < 20080201 // std::showpos is broken on old libstdc++ as provided with OSX. See // http://gcc.gnu.org/ml/libstdc++/2007-11/msg00075.html # define TINYFORMAT_OLD_LIBSTDCPLUSPLUS_WORKAROUND #endif +#ifdef __APPLE__ +// Workaround OSX linker warning: xcode uses different default symbol +// visibilities for static libs vs executables (see issue #25) +# define TINYFORMAT_HIDDEN __attribute__((visibility("hidden"))) +#else +# define TINYFORMAT_HIDDEN +#endif + namespace tinyformat { //------------------------------------------------------------------------------ @@ -247,6 +262,29 @@ struct convertToInt static int invoke(const T& value) { return static_cast(value); } }; +// Format at most ntrunc characters to the given stream. +template +inline void formatTruncated(std::ostream& out, const T& value, int ntrunc) +{ + std::ostringstream tmp; + tmp << value; + std::string result = tmp.str(); + out.write(result.c_str(), (std::min)(ntrunc, static_cast(result.size()))); +} +#define TINYFORMAT_DEFINE_FORMAT_TRUNCATED_CSTR(type) \ +inline void formatTruncated(std::ostream& out, type* value, int ntrunc) \ +{ \ + std::streamsize len = 0; \ + while(len < ntrunc && value[len] != 0) \ + ++len; \ + out.write(value, len); \ +} +// Overload for const char* and char*. Could overload for signed & unsigned +// char too, but these are technically unneeded for printf compatibility. +TINYFORMAT_DEFINE_FORMAT_TRUNCATED_CSTR(const char) +TINYFORMAT_DEFINE_FORMAT_TRUNCATED_CSTR(char) +#undef TINYFORMAT_DEFINE_FORMAT_TRUNCATED_CSTR + } // namespace detail @@ -255,18 +293,20 @@ struct convertToInt // desired. -// Format a value into a stream. Called from format() for all types by default. -// -// Users may override this for their own types. When this function is called, -// the stream flags will have been modified according to the format string. -// The format specification is provided in the range [fmtBegin, fmtEnd). -// -// By default, formatValue() uses the usual stream insertion operator -// operator<< to format the type T, with special cases for the %c and %p -// conversions. +/// Format a value into a stream, delegating to operator<< by default. +/// +/// Users may override this for their own types. When this function is called, +/// the stream flags will have been modified according to the format string. +/// The format specification is provided in the range [fmtBegin, fmtEnd). For +/// truncating conversions, ntrunc is set to the desired maximum number of +/// characters, for example "%.7s" calls formatValue with ntrunc = 7. +/// +/// By default, formatValue() uses the usual stream insertion operator +/// operator<< to format the type T, with special cases for the %c and %p +/// conversions. template inline void formatValue(std::ostream& out, const char* /*fmtBegin*/, - const char* fmtEnd, const T& value) + const char* fmtEnd, int ntrunc, const T& value) { #ifndef TINYFORMAT_ALLOW_WCHAR_STRINGS // Since we don't support printing of wchar_t using "%ls", make it fail at @@ -288,6 +328,12 @@ inline void formatValue(std::ostream& out, const char* /*fmtBegin*/, #ifdef TINYFORMAT_OLD_LIBSTDCPLUSPLUS_WORKAROUND else if(detail::formatZeroIntegerWorkaround::invoke(out, value)) /**/; #endif + else if(ntrunc >= 0) + { + // Take care not to overread C strings in truncating conversions like + // "%.4s" where at most 4 characters may be read. + detail::formatTruncated(out, value, ntrunc); + } else out << value; } @@ -296,7 +342,7 @@ inline void formatValue(std::ostream& out, const char* /*fmtBegin*/, // Overloaded version for char types to support printing as an integer #define TINYFORMAT_DEFINE_FORMATVALUE_CHAR(charType) \ inline void formatValue(std::ostream& out, const char* /*fmtBegin*/, \ - const char* fmtEnd, charType value) \ + const char* fmtEnd, int /**/, charType value) \ { \ switch(*(fmtEnd-1)) \ { \ @@ -435,225 +481,91 @@ cog.outl('#define TINYFORMAT_FOREACH_ARGNUM(m) \\\n ' + namespace detail { -// Class holding current position in format string and an output stream into -// which arguments are formatted. -class FormatIterator +// Type-opaque holder for an argument to format(), with associated actions on +// the type held as explicit function pointers. This allows FormatArg's for +// each argument to be allocated as a homogenous array inside FormatList +// whereas a naive implementation based on inheritance does not. +class FormatArg { public: - // Flags for features not representable with standard stream state - enum ExtraFormatFlags - { - Flag_None = 0, - Flag_TruncateToPrecision = 1<<0, // truncate length to stream precision() - Flag_SpacePadPositive = 1<<1, // pad positive values with spaces - Flag_VariableWidth = 1<<2, // variable field width in arg list - Flag_VariablePrecision = 1<<3 // variable field precision in arg list - }; + FormatArg() {} - // out is the output stream, fmt is the full format string - FormatIterator(std::ostream& out, const char* fmt) - : m_out(out), - m_fmt(fmt), - m_extraFlags(Flag_None), - m_wantWidth(false), - m_wantPrecision(false), - m_variableWidth(0), - m_variablePrecision(0), - m_origWidth(out.width()), - m_origPrecision(out.precision()), - m_origFlags(out.flags()), - m_origFill(out.fill()) + template + FormatArg(const T& value) + : m_value(static_cast(&value)), + m_formatImpl(&formatImpl), + m_toIntImpl(&toIntImpl) { } - // Print remaining part of format string. - void finish() + void format(std::ostream& out, const char* fmtBegin, + const char* fmtEnd, int ntrunc) const { - // It would be nice if we could do this from the destructor, but we - // can't if TINFORMAT_ERROR is used to throw an exception! - m_fmt = printFormatStringLiteral(m_out, m_fmt); - if(*m_fmt != '\0') - TINYFORMAT_ERROR("tinyformat: Too many conversion specifiers in format string"); + m_formatImpl(out, fmtBegin, fmtEnd, ntrunc, m_value); } - ~FormatIterator() + int toInt() const { - // Restore stream state - m_out.width(m_origWidth); - m_out.precision(m_origPrecision); - m_out.flags(m_origFlags); - m_out.fill(m_origFill); + return m_toIntImpl(m_value); } - template - void accept(const T& value); - private: - // Parse and return an integer from the string c, as atoi() - // On return, c is set to one past the end of the integer. - static int parseIntAndAdvance(const char*& c) - { - int i = 0; - for(;*c >= '0' && *c <= '9'; ++c) - i = 10*i + (*c - '0'); - return i; - } - - // Format at most truncLen characters of a C string to the given - // stream. Return true if formatting proceeded (generic version always - // returns false) template - static bool formatCStringTruncate(std::ostream& /*out*/, const T& /*value*/, - std::streamsize /*truncLen*/) + TINYFORMAT_HIDDEN static void formatImpl(std::ostream& out, const char* fmtBegin, + const char* fmtEnd, int ntrunc, const void* value) { - return false; + formatValue(out, fmtBegin, fmtEnd, ntrunc, *static_cast(value)); } -# define TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE(type) \ - static bool formatCStringTruncate(std::ostream& out, type* value, \ - std::streamsize truncLen) \ - { \ - std::streamsize len = 0; \ - while(len < truncLen && value[len] != 0) \ - ++len; \ - out.write(value, len); \ - return true; \ - } - // Overload for const char* and char*. Could overload for signed & - // unsigned char too, but these are technically unneeded for printf - // compatibility. - TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE(const char) - TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE(char) -# undef TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE - // Print literal part of format string and return next format spec - // position. - // - // Skips over any occurrences of '%%', printing a literal '%' to the - // output. The position of the first % character of the next - // nontrivial format spec is returned, or the end of string. - static const char* printFormatStringLiteral(std::ostream& out, - const char* fmt) + template + TINYFORMAT_HIDDEN static int toIntImpl(const void* value) { - const char* c = fmt; - for(; true; ++c) - { - switch(*c) - { - case '\0': - out.write(fmt, static_cast(c - fmt)); - return c; - case '%': - out.write(fmt, static_cast(c - fmt)); - if(*(c+1) != '%') - return c; - // for "%%", tack trailing % onto next literal section. - fmt = ++c; - break; - } - } + return convertToInt::invoke(*static_cast(value)); } - static const char* streamStateFromFormat(std::ostream& out, - unsigned int& extraFlags, - const char* fmtStart, - int variableWidth, - int variablePrecision); - - // Private copy & assign: Kill gcc warnings with -Weffc++ - FormatIterator(const FormatIterator&); - FormatIterator& operator=(const FormatIterator&); - - // Stream, current format string & state - std::ostream& m_out; - const char* m_fmt; - unsigned int m_extraFlags; - // State machine info for handling of variable width & precision - bool m_wantWidth; - bool m_wantPrecision; - int m_variableWidth; - int m_variablePrecision; - // Saved stream state - std::streamsize m_origWidth; - std::streamsize m_origPrecision; - std::ios::fmtflags m_origFlags; - char m_origFill; + const void* m_value; + void (*m_formatImpl)(std::ostream& out, const char* fmtBegin, + const char* fmtEnd, int ntrunc, const void* value); + int (*m_toIntImpl)(const void* value); }; -// Accept a value for formatting into the internal stream. -template -TINYFORMAT_NOINLINE // < greatly reduces bloat in optimized builds -void FormatIterator::accept(const T& value) +// Parse and return an integer from the string c, as atoi() +// On return, c is set to one past the end of the integer. +inline int parseIntAndAdvance(const char*& c) { - // Parse the format string - const char* fmtEnd = 0; - if(m_extraFlags == Flag_None && !m_wantWidth && !m_wantPrecision) - { - m_fmt = printFormatStringLiteral(m_out, m_fmt); - fmtEnd = streamStateFromFormat(m_out, m_extraFlags, m_fmt, 0, 0); - m_wantWidth = (m_extraFlags & Flag_VariableWidth) != 0; - m_wantPrecision = (m_extraFlags & Flag_VariablePrecision) != 0; - } - // Consume value as variable width and precision specifier if necessary - if(m_extraFlags & (Flag_VariableWidth | Flag_VariablePrecision)) - { - if(m_wantWidth || m_wantPrecision) - { - int v = convertToInt::invoke(value); - if(m_wantWidth) - { - m_variableWidth = v; - m_wantWidth = false; - } - else if(m_wantPrecision) - { - m_variablePrecision = v; - m_wantPrecision = false; - } - return; - } - // If we get here, we've set both the variable precision and width as - // required and we need to rerun the stream state setup to insert these. - fmtEnd = streamStateFromFormat(m_out, m_extraFlags, m_fmt, - m_variableWidth, m_variablePrecision); - } + int i = 0; + for(;*c >= '0' && *c <= '9'; ++c) + i = 10*i + (*c - '0'); + return i; +} - // Format the value into the stream. - if(!(m_extraFlags & (Flag_SpacePadPositive | Flag_TruncateToPrecision))) - formatValue(m_out, m_fmt, fmtEnd, value); - else +// Print literal part of format string and return next format spec +// position. +// +// Skips over any occurrences of '%%', printing a literal '%' to the +// output. The position of the first % character of the next +// nontrivial format spec is returned, or the end of string. +inline const char* printFormatStringLiteral(std::ostream& out, const char* fmt) +{ + const char* c = fmt; + for(;; ++c) { - // The following are special cases where there's no direct - // correspondence between stream formatting and the printf() behaviour. - // Instead, we simulate the behaviour crudely by formatting into a - // temporary string stream and munging the resulting string. - std::ostringstream tmpStream; - tmpStream.copyfmt(m_out); - if(m_extraFlags & Flag_SpacePadPositive) - tmpStream.setf(std::ios::showpos); - // formatCStringTruncate is required for truncating conversions like - // "%.4s" where at most 4 characters of the c-string should be read. - // If we didn't include this special case, we might read off the end. - if(!( (m_extraFlags & Flag_TruncateToPrecision) && - formatCStringTruncate(tmpStream, value, m_out.precision()) )) + switch(*c) { - // Not a truncated c-string; just format normally. - formatValue(tmpStream, m_fmt, fmtEnd, value); + case '\0': + out.write(fmt, c - fmt); + return c; + case '%': + out.write(fmt, c - fmt); + if(*(c+1) != '%') + return c; + // for "%%", tack trailing % onto next literal section. + fmt = ++c; + break; + default: + break; } - std::string result = tmpStream.str(); // allocates... yuck. - if(m_extraFlags & Flag_SpacePadPositive) - { - for(size_t i = 0, iend = result.size(); i < iend; ++i) - if(result[i] == '+') - result[i] = ' '; - } - if((m_extraFlags & Flag_TruncateToPrecision) && - (int)result.size() > (int)m_out.precision()) - m_out.write(result.c_str(), m_out.precision()); - else - m_out << result; } - m_extraFlags = Flag_None; - m_fmt = fmtEnd; } @@ -663,13 +575,14 @@ void FormatIterator::accept(const T& value) // with the form "%[flags][width][.precision][length]type". // // Formatting options which can't be natively represented using the ostream -// state are returned in the extraFlags parameter which is a bitwise -// combination of values from the ExtraFormatFlags enum. -inline const char* FormatIterator::streamStateFromFormat(std::ostream& out, - unsigned int& extraFlags, - const char* fmtStart, - int variableWidth, - int variablePrecision) +// state are returned in spacePadPositive (for space padded positive numbers) +// and ntrunc (for truncating conversions). argIndex is incremented if +// necessary to pull out variable width and precision . The function returns a +// pointer to the character after the end of the current format spec. +inline const char* streamStateFromFormat(std::ostream& out, bool& spacePadPositive, + int& ntrunc, const char* fmtStart, + const detail::FormatArg* formatters, + int& argIndex, int numFormatters) { if(*fmtStart != '%') { @@ -684,9 +597,9 @@ inline const char* FormatIterator::streamStateFromFormat(std::ostream& out, out.unsetf(std::ios::adjustfield | std::ios::basefield | std::ios::floatfield | std::ios::showbase | std::ios::boolalpha | std::ios::showpoint | std::ios::showpos | std::ios::uppercase); - extraFlags = Flag_None; bool precisionSet = false; bool widthSet = false; + int widthExtra = 0; const char* c = fmtStart + 1; // 1) Parse flags for(;; ++c) @@ -713,12 +626,15 @@ inline const char* FormatIterator::streamStateFromFormat(std::ostream& out, case ' ': // overridden by show positive sign, '+' flag. if(!(out.flags() & std::ios::showpos)) - extraFlags |= Flag_SpacePadPositive; + spacePadPositive = true; continue; case '+': out.setf(std::ios::showpos); - extraFlags &= ~Flag_SpacePadPositive; + spacePadPositive = false; + widthExtra = 1; continue; + default: + break; } break; } @@ -731,15 +647,19 @@ inline const char* FormatIterator::streamStateFromFormat(std::ostream& out, if(*c == '*') { widthSet = true; - if(variableWidth < 0) + int width = 0; + if(argIndex < numFormatters) + width = formatters[argIndex++].toInt(); + else + TINYFORMAT_ERROR("tinyformat: Not enough arguments to read variable width"); + if(width < 0) { // negative widths correspond to '-' flag set out.fill(' '); out.setf(std::ios::left, std::ios::adjustfield); - variableWidth = -variableWidth; + width = -width; } - out.width(variableWidth); - extraFlags |= Flag_VariableWidth; + out.width(width); ++c; } // 3) Parse precision @@ -750,8 +670,10 @@ inline const char* FormatIterator::streamStateFromFormat(std::ostream& out, if(*c == '*') { ++c; - extraFlags |= Flag_VariablePrecision; - precision = variablePrecision; + if(argIndex < numFormatters) + precision = formatters[argIndex++].toInt(); + else + TINYFORMAT_ERROR("tinyformat: Not enough arguments to read variable precision"); } else { @@ -814,7 +736,7 @@ inline const char* FormatIterator::streamStateFromFormat(std::ostream& out, break; case 's': if(precisionSet) - extraFlags |= Flag_TruncateToPrecision; + ntrunc = static_cast(out.precision()); // Make %s print booleans as "true" and "false" out.setf(std::ios::boolalpha); break; @@ -826,6 +748,8 @@ inline const char* FormatIterator::streamStateFromFormat(std::ostream& out, TINYFORMAT_ERROR("tinyformat: Conversion spec incorrectly " "terminated by end of string"); return c; + default: + break; } if(intConversion && precisionSet && !widthSet) { @@ -833,7 +757,7 @@ inline const char* FormatIterator::streamStateFromFormat(std::ostream& out, // padded with zeros on the left). This isn't really supported by the // iostreams, but we can approximately simulate it with the width if // the width isn't otherwise used. - out.width(out.precision()); + out.width(out.precision() + widthExtra); out.setf(std::ios::internal, std::ios::adjustfield); out.fill('0'); } @@ -841,170 +765,282 @@ inline const char* FormatIterator::streamStateFromFormat(std::ostream& out, } - //------------------------------------------------------------------------------ -// Private format function on top of which the public interface is implemented. -// We enforce a mimimum of one value to be formatted to prevent bugs looking like -// -// const char* myStr = "100% broken"; -// printf(myStr); // Parses % as a format specifier +inline void formatImpl(std::ostream& out, const char* fmt, + const detail::FormatArg* formatters, + int numFormatters) +{ + // Saved stream state + std::streamsize origWidth = out.width(); + std::streamsize origPrecision = out.precision(); + std::ios::fmtflags origFlags = out.flags(); + char origFill = out.fill(); + + for (int argIndex = 0; argIndex < numFormatters; ++argIndex) + { + // Parse the format string + fmt = printFormatStringLiteral(out, fmt); + bool spacePadPositive = false; + int ntrunc = -1; + const char* fmtEnd = streamStateFromFormat(out, spacePadPositive, ntrunc, fmt, + formatters, argIndex, numFormatters); + if (argIndex >= numFormatters) + { + // Check args remain after reading any variable width/precision + TINYFORMAT_ERROR("tinyformat: Not enough format arguments"); + return; + } + const FormatArg& arg = formatters[argIndex]; + // Format the arg into the stream. + if(!spacePadPositive) + arg.format(out, fmt, fmtEnd, ntrunc); + else + { + // The following is a special case with no direct correspondence + // between stream formatting and the printf() behaviour. Simulate + // it crudely by formatting into a temporary string stream and + // munging the resulting string. + std::ostringstream tmpStream; + tmpStream.copyfmt(out); + tmpStream.setf(std::ios::showpos); + arg.format(tmpStream, fmt, fmtEnd, ntrunc); + std::string result = tmpStream.str(); // allocates... yuck. + for(size_t i = 0, iend = result.size(); i < iend; ++i) + if(result[i] == '+') result[i] = ' '; + out << result; + } + fmt = fmtEnd; + } + + // Print remaining part of format string. + fmt = printFormatStringLiteral(out, fmt); + if(*fmt != '\0') + TINYFORMAT_ERROR("tinyformat: Too many conversion specifiers in format string"); + + // Restore stream state + out.width(origWidth); + out.precision(origPrecision); + out.flags(origFlags); + out.fill(origFill); +} + +} // namespace detail + + +/// List of template arguments format(), held in a type-opaque way. +/// +/// A const reference to FormatList (typedef'd as FormatListRef) may be +/// conveniently used to pass arguments to non-template functions: All type +/// information has been stripped from the arguments, leaving just enough of a +/// common interface to perform formatting as required. +class FormatList +{ + public: + FormatList(detail::FormatArg* formatters, int N) + : m_formatters(formatters), m_N(N) { } + + friend void vformat(std::ostream& out, const char* fmt, + const FormatList& list); + + private: + const detail::FormatArg* m_formatters; + int m_N; +}; + +/// Reference to type-opaque format list for passing to vformat() +typedef const FormatList& FormatListRef; + + +namespace detail { + +// Format list subclass with fixed storage to avoid dynamic allocation +template +class FormatListN : public FormatList +{ + public: #ifdef TINYFORMAT_USE_VARIADIC_TEMPLATES + template + FormatListN(const Args&... args) + : FormatList(&m_formatterStore[0], N), + m_formatterStore { FormatArg(args)... } + { static_assert(sizeof...(args) == N, "Number of args must be N"); } +#else // C++98 version + void init(int) {} +# define TINYFORMAT_MAKE_FORMATLIST_CONSTRUCTOR(n) \ + \ + template \ + FormatListN(TINYFORMAT_VARARGS(n)) \ + : FormatList(&m_formatterStore[0], n) \ + { assert(n == N); init(0, TINYFORMAT_PASSARGS(n)); } \ + \ + template \ + void init(int i, TINYFORMAT_VARARGS(n)) \ + { \ + m_formatterStore[i] = FormatArg(v1); \ + init(i+1 TINYFORMAT_PASSARGS_TAIL(n)); \ + } -template -void format(FormatIterator& fmtIter, const T1& value1) + TINYFORMAT_FOREACH_ARGNUM(TINYFORMAT_MAKE_FORMATLIST_CONSTRUCTOR) +# undef TINYFORMAT_MAKE_FORMATLIST_CONSTRUCTOR +#endif + + private: + FormatArg m_formatterStore[N]; +}; + +// Special 0-arg version - MSVC says zero-sized C array in struct is nonstandard +template<> class FormatListN<0> : public FormatList { - fmtIter.accept(value1); - fmtIter.finish(); -} - -// General version for C++11 -template -void format(FormatIterator& fmtIter, const T1& value1, const Args&... args) -{ - fmtIter.accept(value1); - format(fmtIter, args...); -} - -#else - -inline void format(FormatIterator& fmtIter) -{ - fmtIter.finish(); -} - -// General version for C++98 -#define TINYFORMAT_MAKE_FORMAT_DETAIL(n) \ -template \ -void format(detail::FormatIterator& fmtIter, TINYFORMAT_VARARGS(n)) \ -{ \ - fmtIter.accept(v1); \ - format(fmtIter TINYFORMAT_PASSARGS_TAIL(n)); \ -} - -TINYFORMAT_FOREACH_ARGNUM(TINYFORMAT_MAKE_FORMAT_DETAIL) -#undef TINYFORMAT_MAKE_FORMAT_DETAIL - -#endif // End C++98 variadic template emulation for format() + public: FormatListN() : FormatList(0, 0) {} +}; } // namespace detail //------------------------------------------------------------------------------ -// Implement all the main interface functions here in terms of detail::format() +// Primary API functions #ifdef TINYFORMAT_USE_VARIADIC_TEMPLATES -// C++11 - the simple case -template -void format(std::ostream& out, const char* fmt, const T1& v1, const Args&... args) +/// Make type-agnostic format list from list of template arguments. +/// +/// The exact return type of this function is an implementation detail and +/// shouldn't be relied upon. Instead it should be stored as a FormatListRef: +/// +/// FormatListRef formatList = makeFormatList( /*...*/ ); +template +detail::FormatListN makeFormatList(const Args&... args) { - detail::FormatIterator fmtIter(out, fmt); - format(fmtIter, v1, args...); + return detail::FormatListN(args...); } -template -std::string format(const char* fmt, const T1& v1, const Args&... args) +#else // C++98 version + +inline detail::FormatListN<0> makeFormatList() +{ + return detail::FormatListN<0>(); +} +#define TINYFORMAT_MAKE_MAKEFORMATLIST(n) \ +template \ +detail::FormatListN makeFormatList(TINYFORMAT_VARARGS(n)) \ +{ \ + return detail::FormatListN(TINYFORMAT_PASSARGS(n)); \ +} +TINYFORMAT_FOREACH_ARGNUM(TINYFORMAT_MAKE_MAKEFORMATLIST) +#undef TINYFORMAT_MAKE_MAKEFORMATLIST + +#endif + +/// Format list of arguments to the stream according to the given format string. +/// +/// The name vformat() is chosen for the semantic similarity to vprintf(): the +/// list of format arguments is held in a single function argument. +inline void vformat(std::ostream& out, const char* fmt, FormatListRef list) +{ + detail::formatImpl(out, fmt, list.m_formatters, list.m_N); +} + + +#ifdef TINYFORMAT_USE_VARIADIC_TEMPLATES + +/// Format list of arguments to the stream according to given format string. +template +void format(std::ostream& out, const char* fmt, const Args&... args) +{ + vformat(out, fmt, makeFormatList(args...)); +} + +/// Format list of arguments according to the given format string and return +/// the result as a string. +template +std::string format(const char* fmt, const Args&... args) { std::ostringstream oss; - format(oss, fmt, v1, args...); + format(oss, fmt, args...); return oss.str(); } -template -std::string format(const std::string &fmt, const T1& v1, const Args&... args) +/// Format list of arguments to std::cout, according to the given format string +template +void printf(const char* fmt, const Args&... args) +{ + format(std::cout, fmt, args...); +} + +template +void printfln(const char* fmt, const Args&... args) +{ + format(std::cout, fmt, args...); + std::cout << '\n'; +} + +#else // C++98 version + +inline void format(std::ostream& out, const char* fmt) +{ + vformat(out, fmt, makeFormatList()); +} + +inline std::string format(const char* fmt) { std::ostringstream oss; - format(oss, fmt.c_str(), v1, args...); + format(oss, fmt); return oss.str(); } -template -void printf(const char* fmt, const T1& v1, const Args&... args) +inline void printf(const char* fmt) { - format(std::cout, fmt, v1, args...); + format(std::cout, fmt); } -#else +inline void printfln(const char* fmt) +{ + format(std::cout, fmt); + std::cout << '\n'; +} -// C++98 - define the interface functions using the wrapping macros #define TINYFORMAT_MAKE_FORMAT_FUNCS(n) \ \ template \ void format(std::ostream& out, const char* fmt, TINYFORMAT_VARARGS(n)) \ { \ - tinyformat::detail::FormatIterator fmtIter(out, fmt); \ - tinyformat::detail::format(fmtIter, TINYFORMAT_PASSARGS(n)); \ + vformat(out, fmt, makeFormatList(TINYFORMAT_PASSARGS(n))); \ } \ \ template \ std::string format(const char* fmt, TINYFORMAT_VARARGS(n)) \ { \ std::ostringstream oss; \ - tinyformat::format(oss, fmt, TINYFORMAT_PASSARGS(n)); \ - return oss.str(); \ -} \ - \ -template \ -std::string format(const std::string &fmt, TINYFORMAT_VARARGS(n)) \ -{ \ - std::ostringstream oss; \ - tinyformat::format(oss, fmt.c_str(), TINYFORMAT_PASSARGS(n)); \ + format(oss, fmt, TINYFORMAT_PASSARGS(n)); \ return oss.str(); \ } \ \ template \ void printf(const char* fmt, TINYFORMAT_VARARGS(n)) \ { \ - tinyformat::format(std::cout, fmt, TINYFORMAT_PASSARGS(n)); \ + format(std::cout, fmt, TINYFORMAT_PASSARGS(n)); \ +} \ + \ +template \ +void printfln(const char* fmt, TINYFORMAT_VARARGS(n)) \ +{ \ + format(std::cout, fmt, TINYFORMAT_PASSARGS(n)); \ + std::cout << '\n'; \ } TINYFORMAT_FOREACH_ARGNUM(TINYFORMAT_MAKE_FORMAT_FUNCS) #undef TINYFORMAT_MAKE_FORMAT_FUNCS + #endif - -//------------------------------------------------------------------------------ -// Define deprecated wrapping macro for backward compatibility in tinyformat -// 1.x. Will be removed in version 2! -#define TINYFORMAT_WRAP_FORMAT_EXTRA_ARGS -#define TINYFORMAT_WRAP_FORMAT_N(n, returnType, funcName, funcDeclSuffix, \ - bodyPrefix, streamName, bodySuffix) \ -template \ -returnType funcName(TINYFORMAT_WRAP_FORMAT_EXTRA_ARGS const char* fmt, \ - TINYFORMAT_VARARGS(n)) funcDeclSuffix \ -{ \ - bodyPrefix \ - tinyformat::format(streamName, fmt, TINYFORMAT_PASSARGS(n)); \ - bodySuffix \ -} \ - -#define TINYFORMAT_WRAP_FORMAT(returnType, funcName, funcDeclSuffix, \ - bodyPrefix, streamName, bodySuffix) \ -inline \ -returnType funcName(TINYFORMAT_WRAP_FORMAT_EXTRA_ARGS const char* fmt \ - ) funcDeclSuffix \ -{ \ - bodyPrefix \ - tinyformat::detail::FormatIterator(streamName, fmt).finish(); \ - bodySuffix \ -} \ -TINYFORMAT_WRAP_FORMAT_N(1 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(2 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(3 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(4 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(5 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(6 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(7 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(8 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(9 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(10, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(11, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(12, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(13, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(14, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(15, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ -TINYFORMAT_WRAP_FORMAT_N(16, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ - +// Added for Bitcoin Core +template +std::string format(const std::string &fmt, const Args&... args) +{ + std::ostringstream oss; + format(oss, fmt.c_str(), args...); + return oss.str(); +} } // namespace tinyformat From 7ac57982d679e5b72cb27f667b7465e5b56a901e Mon Sep 17 00:00:00 2001 From: Paige Peterson Date: Tue, 25 Oct 2016 16:24:01 -0400 Subject: [PATCH 125/165] add zcash.config --- contrib/DEBIAN/examples/zcash.conf | 131 +++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 contrib/DEBIAN/examples/zcash.conf diff --git a/contrib/DEBIAN/examples/zcash.conf b/contrib/DEBIAN/examples/zcash.conf new file mode 100644 index 000000000..b0c5be104 --- /dev/null +++ b/contrib/DEBIAN/examples/zcash.conf @@ -0,0 +1,131 @@ +## +## zcash.conf configuration file. Lines beginning with # are comments. +## + +# Network-related settings: + +# Run on the test network instead of the real zcash network. +#testnet=0 + +# Run a regression test network +#regtest=0 + +# Connect via a SOCKS5 proxy +#proxy=127.0.0.1:9050 + +# Bind to given address and always listen on it. Use [host]:port notation for IPv6 +#bind= + +# Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6 +#whitebind= + +############################################################## +## Quick Primer on addnode vs connect ## +## Let's say for instance you use addnode=4.2.2.4 ## +## addnode will connect you to and tell you about the ## +## nodes connected to 4.2.2.4. In addition it will tell ## +## the other nodes connected to it that you exist so ## +## they can connect to you. ## +## connect will not do the above when you 'connect' to it. ## +## It will *only* connect you to 4.2.2.4 and no one else.## +## ## +## So if you're behind a firewall, or have other problems ## +## finding nodes, add some using 'addnode'. ## +## ## +## If you want to stay private, use 'connect' to only ## +## connect to "trusted" nodes. ## +## ## +## If you run multiple nodes on a LAN, there's no need for ## +## all of them to open lots of connections. Instead ## +## 'connect' them all to one node that is port forwarded ## +## and has lots of connections. ## +## Thanks goes to [Noodle] on Freenode. ## +############################################################## + +# Use as many addnode= settings as you like to connect to specific peers +#addnode=69.164.218.197 +#addnode=10.0.0.2:8233 + +# Alternatively use as many connect= settings as you like to connect ONLY to specific peers +#connect=69.164.218.197 +#connect=10.0.0.1:8233 + +# Listening mode, enabled by default except when 'connect' is being used +#listen=1 + +# Maximum number of inbound+outbound connections. +#maxconnections= + +# +# JSON-RPC options (for controlling a running Zcash/zcashd process) +# + +# server=1 tells zcashd to accept JSON-RPC commands +#server=0 + +# Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6. +# This option can be specified multiple times (default: bind to all interfaces) +#rpcbind= + +# You must set rpcuser and rpcpassword to secure the JSON-RPC api +#rpcuser=Ulysseys +#rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593 + +# How many seconds zcash will wait for a complete RPC HTTP request. +# after the HTTP connection is established. +#rpctimeout=30 + +# By default, only RPC connections from localhost are allowed. +# Specify as many rpcallowip= settings as you like to allow connections from other hosts, +# either as a single IPv4/IPv6 or with a subnet specification. + +# NOTE: opening up the RPC port to hosts outside your local trusted network is NOT RECOMMENDED, +# because the rpcpassword is transmitted over the network unencrypted. + +#rpcallowip=10.1.1.34/255.255.255.0 +#rpcallowip=1.2.3.4/24 +#rpcallowip=2001:db8:85a3:0:0:8a2e:370:7334/96 + +# Listen for RPC connections on this TCP port: +#rpcport=8232 + +# You can use Zcash or zcashd to send commands to Zcash/zcashd +# running on another host using this option: +#rpcconnect=127.0.0.1 + +# Use Secure Sockets Layer (also known as TLS or HTTPS) to communicate +# with Zcash -server or zcashd +#rpcssl=1 + +# OpenSSL settings used when rpcssl=1 +#rpcsslciphers=TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH +#rpcsslcertificatechainfile=server.cert +#rpcsslprivatekeyfile=server.pem + +# Transaction Fee Changes in 0.10.0 + +# Send transactions as zero-fee transactions if possible (default: 0) +#sendfreetransactions=0 + +# Create transactions that have enough fees (or priority) so they are likely to begin confirmation within n blocks (default: 1). +# This setting is over-ridden by the -paytxfee option. +#txconfirmtarget=n + +# Miscellaneous options + +# Enable attempt to generate zcash. +#gen=1 + +# Enable use of SSE instructions to try to generate zcash faster. +#4way=1 + +# Pre-generate this many public/private key pairs, so wallet backups will be valid for +# both prior transactions and several dozen future transactions. +#keypool=100 + +# Pay an optional transaction fee every time you send zcash. Transactions with fees +# are more likely than free transactions to be included in generated blocks, so may +# be validated sooner. +#paytxfee=0.00 + + From 9e044e509e1d1f92fc5b11fdbf6298c4fc4e6486 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 25 Oct 2016 15:41:36 -0700 Subject: [PATCH 126/165] Link to #826 in doc/security-warnings.md, link to new Security website page Closes #826 --- doc/security-warnings.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/security-warnings.md b/doc/security-warnings.md index 551caac5a..b43eed1f7 100644 --- a/doc/security-warnings.md +++ b/doc/security-warnings.md @@ -4,7 +4,9 @@ Security Warnings Security Audit -------------- -Zcash has been subjected to a formal third-party security review. For high priority security announcements, check https://z.cash. +Zcash has been subjected to a formal third-party security review. For security +announcements, audit results and other general security information, see +https://z.cash/support/security.html x86-64 Linux Only ----------------------- @@ -79,7 +81,6 @@ Users should choose a strong RPC password. If no RPC username and password are s Users should also refrain from changing the default setting that only allows RPC connections from localhost. Allowing connections from remote hosts would enable a MITM to execute arbitrary RPC commands, which could lead to compromise of the account running zcashd and loss of funds. For multi-user services that use one or more zcashd instances on the backend, the parameters passed in by users should be controlled to prevent confused-deputy attacks which could spend from any keys held by that zcashd. - Block Chain Reorganization: Major Differences ------------------------------------------------- @@ -95,3 +96,15 @@ The option `-debug=zrpc` covers logging of the z_* calls. This will reveal info The option `-debug=zrpcunsafe` covers logging of sensitive information in z_* calls which you would only need for debugging and audit purposes. For example, if you want to examine the memo field of a note being spent. Private spending keys for z addresses are never logged. + +Potentially-Missing Required Modifications +------------------------------------------ + +In addition to potential mistakes in code we added to Bitcoin Core, and +potential mistakes in our modifications to Bitcoin Core, it is also possible +that there were potential changes we were supposed to make to Bitcoin Core but +didn't, either because we didn't even consider making those changes, or we ran +out of time. We have brainstormed and documented a variety of such possibilities +in [issue #826](https://github.com/zcash/zcash/issues/826), and believe that we +have changed or done everything that was necessary for the 1.0.0 launch. Users +may want to review this list themselves. From 2399b1f9ad0baff1a138373504e45a85416f9313 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Tue, 25 Oct 2016 18:35:08 -0600 Subject: [PATCH 127/165] Add manpages for zcashd and zcash-cli binaries for debian. --- contrib/DEBIAN/manpages/zcash-cli.1 | 77 +++++ contrib/DEBIAN/manpages/zcashd.1 | 432 ++++++++++++++++++++++++++++ 2 files changed, 509 insertions(+) create mode 100644 contrib/DEBIAN/manpages/zcash-cli.1 create mode 100644 contrib/DEBIAN/manpages/zcashd.1 diff --git a/contrib/DEBIAN/manpages/zcash-cli.1 b/contrib/DEBIAN/manpages/zcash-cli.1 new file mode 100644 index 000000000..72741279b --- /dev/null +++ b/contrib/DEBIAN/manpages/zcash-cli.1 @@ -0,0 +1,77 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. +.TH ZCASH "1" "October 2016" "Zcash RPC client version v1.0.0-rc2-bf767aa" "User Commands" +.SH NAME +Zcash \- manual page for Zcash RPC client version v1.0.0-rc2-bf767aa +.SH DESCRIPTION +Zcash RPC client version v1.0.0\-rc2\-bf767aa +.SS "Usage:" +.TP +zcash\-cli [options] [params] +Send command to Zcash +.TP +zcash\-cli [options] help +List commands +.TP +zcash\-cli [options] help +Get help for a command +.SH OPTIONS +.HP +\-? +.IP +This help message +.HP +\fB\-conf=\fR +.IP +Specify configuration file (default: zcash.conf) +.HP +\fB\-datadir=\fR +.IP +Specify data directory +.HP +\fB\-testnet\fR +.IP +Use the test network +.HP +\fB\-regtest\fR +.IP +Enter regression test mode, which uses a special chain in which blocks +can be solved instantly. This is intended for regression testing tools +and app development. +.HP +\fB\-rpcconnect=\fR +.IP +Send commands to node running on (default: 127.0.0.1) +.HP +\fB\-rpcport=\fR +.IP +Connect to JSON\-RPC on (default: 8232 or testnet: 18232) +.HP +\fB\-rpcwait\fR +.IP +Wait for RPC server to start +.HP +\fB\-rpcuser=\fR +.IP +Username for JSON\-RPC connections +.HP +\fB\-rpcpassword=\fR +.IP +Password for JSON\-RPC connections +.PP +SSL options: (see the Bitcoin Wiki for SSL setup instructions) +.HP +\fB\-rpcssl\fR +.IP +Use OpenSSL (https) for JSON\-RPC connections +.SH "SEE ALSO" +The full documentation for +.B Zcash +is maintained as a Texinfo manual. If the +.B info +and +.B Zcash +programs are properly installed at your site, the command +.IP +.B info Zcash +.PP +should give you access to the complete manual. diff --git a/contrib/DEBIAN/manpages/zcashd.1 b/contrib/DEBIAN/manpages/zcashd.1 new file mode 100644 index 000000000..9d36e0791 --- /dev/null +++ b/contrib/DEBIAN/manpages/zcashd.1 @@ -0,0 +1,432 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. +.TH ZCASH "1" "October 2016" "Zcash Daemon version v1.0.0-rc2-bf767aa" "User Commands" +.SH NAME +Zcash \- manual page for Zcash Daemon version v1.0.0-rc2-bf767aa +.SH DESCRIPTION +Zcash Daemon version v1.0.0\-rc2\-bf767aa +.SS "Usage:" +.TP +zcashd [options] +Start Zcash Daemon +.SH OPTIONS +.HP +\-? +.IP +This help message +.HP +\fB\-alerts\fR +.IP +Receive and display P2P network alerts (default: 1) +.HP +\fB\-alertnotify=\fR +.IP +Execute command when a relevant alert is received or we see a really +long fork (%s in cmd is replaced by message) +.HP +\fB\-blocknotify=\fR +.IP +Execute command when the best block changes (%s in cmd is replaced by +block hash) +.HP +\fB\-checkblocks=\fR +.IP +How many blocks to check at startup (default: 288, 0 = all) +.HP +\fB\-checklevel=\fR +.IP +How thorough the block verification of \fB\-checkblocks\fR is (0\-4, default: 3) +.HP +\fB\-conf=\fR +.IP +Specify configuration file (default: zcash.conf) +.HP +\fB\-daemon\fR +.IP +Run in the background as a daemon and accept commands +.HP +\fB\-datadir=\fR +.IP +Specify data directory +.HP +\fB\-dbcache=\fR +.IP +Set database cache size in megabytes (4 to 16384, default: 100) +.HP +\fB\-loadblock=\fR +.IP +Imports blocks from external blk000??.dat file on startup +.HP +\fB\-maxorphantx=\fR +.IP +Keep at most unconnectable transactions in memory (default: 100) +.HP +\fB\-par=\fR +.IP +Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 = +leave that many cores free, default: 0) +.HP +\fB\-pid=\fR +.IP +Specify pid file (default: zcashd.pid) +.HP +\fB\-prune=\fR +.IP +Reduce storage requirements by pruning (deleting) old blocks. This mode +disables wallet support and is incompatible with \fB\-txindex\fR. Warning: +Reverting this setting requires re\-downloading the entire blockchain. +(default: 0 = disable pruning blocks, >550 = target size in MiB to use +for block files) +.HP +\fB\-reindex\fR +.IP +Rebuild block chain index from current blk000??.dat files on startup +.HP +\fB\-sysperms\fR +.IP +Create new files with system default permissions, instead of umask 077 +(only effective with disabled wallet functionality) +.HP +\fB\-txindex\fR +.IP +Maintain a full transaction index, used by the getrawtransaction rpc +call (default: 0) +.PP +Connection options: +.HP +\fB\-addnode=\fR +.IP +Add a node to connect to and attempt to keep the connection open +.HP +\fB\-banscore=\fR +.IP +Threshold for disconnecting misbehaving peers (default: 100) +.HP +\fB\-bantime=\fR +.IP +Number of seconds to keep misbehaving peers from reconnecting (default: +86400) +.HP +\fB\-bind=\fR +.IP +Bind to given address and always listen on it. Use [host]:port notation +for IPv6 +.HP +\fB\-connect=\fR +.IP +Connect only to the specified node(s) +.HP +\fB\-discover\fR +.IP +Discover own IP addresses (default: 1 when listening and no \fB\-externalip\fR +or \fB\-proxy\fR) +.HP +\fB\-dns\fR +.IP +Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (default: 1) +.HP +\fB\-dnsseed\fR +.IP +Query for peer addresses via DNS lookup, if low on addresses (default: 1 +unless \fB\-connect\fR) +.HP +\fB\-externalip=\fR +.IP +Specify your own public address +.HP +\fB\-forcednsseed\fR +.IP +Always query for peer addresses via DNS lookup (default: 0) +.HP +\fB\-listen\fR +.IP +Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR) +.HP +\fB\-maxconnections=\fR +.IP +Maintain at most connections to peers (default: 125) +.HP +\fB\-maxreceivebuffer=\fR +.IP +Maximum per\-connection receive buffer, *1000 bytes (default: 5000) +.HP +\fB\-maxsendbuffer=\fR +.IP +Maximum per\-connection send buffer, *1000 bytes (default: 1000) +.HP +\fB\-onion=\fR +.IP +Use separate SOCKS5 proxy to reach peers via Tor hidden services +(default: \fB\-proxy\fR) +.HP +\fB\-onlynet=\fR +.IP +Only connect to nodes in network (ipv4, ipv6 or onion) +.HP +\fB\-permitbaremultisig\fR +.IP +Relay non\-P2SH multisig (default: 1) +.HP +\fB\-port=\fR +.IP +Listen for connections on (default: 8233 or testnet: 18233) +.HP +\fB\-proxy=\fR +.IP +Connect through SOCKS5 proxy +.HP +\fB\-proxyrandomize\fR +.IP +Randomize credentials for every proxy connection. This enables Tor +stream isolation (default: 1) +.HP +\fB\-seednode=\fR +.IP +Connect to a node to retrieve peer addresses, and disconnect +.HP +\fB\-timeout=\fR +.IP +Specify connection timeout in milliseconds (minimum: 1, default: 5000) +.HP +\fB\-upnp\fR +.IP +Use UPnP to map the listening port (default: 0) +.HP +\fB\-whitebind=\fR +.IP +Bind to given address and whitelist peers connecting to it. Use +[host]:port notation for IPv6 +.HP +\fB\-whitelist=\fR +.IP +Whitelist peers connecting from the given netmask or IP address. Can be +specified multiple times. Whitelisted peers cannot be DoS banned and +their transactions are always relayed, even if they are already in the +mempool, useful e.g. for a gateway +.PP +Wallet options: +.HP +\fB\-disablewallet\fR +.IP +Do not load the wallet and disable wallet RPC calls +.HP +\fB\-keypool=\fR +.IP +Set key pool size to (default: 100) +.HP +\fB\-paytxfee=\fR +.IP +Fee (in BTC/kB) to add to transactions you send (default: 0.00) +.HP +\fB\-rescan\fR +.IP +Rescan the block chain for missing wallet transactions on startup +.HP +\fB\-salvagewallet\fR +.IP +Attempt to recover private keys from a corrupt wallet.dat on startup +.HP +\fB\-sendfreetransactions\fR +.IP +Send transactions as zero\-fee transactions if possible (default: 0) +.HP +\fB\-spendzeroconfchange\fR +.IP +Spend unconfirmed change when sending transactions (default: 1) +.HP +\fB\-txconfirmtarget=\fR +.IP +If paytxfee is not set, include enough fee so transactions begin +confirmation on average within n blocks (default: 2) +.HP +\fB\-maxtxfee=\fR +.IP +Maximum total fees to use in a single wallet transaction; setting this +too low may abort large transactions (default: 0.10) +.HP +\fB\-upgradewallet\fR +.IP +Upgrade wallet to latest format on startup +.HP +\fB\-wallet=\fR +.IP +Specify wallet file (within data directory) (default: wallet.dat) +.HP +\fB\-walletbroadcast\fR +.IP +Make the wallet broadcast transactions (default: 1) +.HP +\fB\-walletnotify=\fR +.IP +Execute command when a wallet transaction changes (%s in cmd is replaced +by TxID) +.HP +\fB\-zapwallettxes=\fR +.IP +Delete all wallet transactions and only recover those parts of the +blockchain through \fB\-rescan\fR on startup (1 = keep tx meta data e.g. +account owner and payment request information, 2 = drop tx meta data) +.PP +Debugging/Testing options: +.HP +\fB\-debug=\fR +.IP +Output debugging information (default: 0, supplying is +optional). If is not supplied, output all debugging +information. can be: addrman, alert, bench, coindb, db, lock, +rand, rpc, selectcoins, mempool, net, proxy, prune. +.HP +\fB\-gen\fR +.IP +Generate coins (default: 0) +.HP +\fB\-genproclimit=\fR +.IP +Set the number of threads for coin generation if enabled (\fB\-1\fR = all +cores, default: 1) +.HP +\fB\-equihashsolver=\fR +.IP +Specify the Equihash solver to be used if enabled (default: "default") +.HP +\fB\-help\-debug\fR +.IP +Show all debugging options (usage: \fB\-\-help\fR \fB\-help\-debug\fR) +.HP +\fB\-logips\fR +.IP +Include IP addresses in debug output (default: 0) +.HP +\fB\-logtimestamps\fR +.IP +Prepend debug output with timestamp (default: 1) +.HP +\fB\-minrelaytxfee=\fR +.IP +Fees (in BTC/Kb) smaller than this are considered zero fee for relaying +(default: 0.00005) +.HP +\fB\-printtoconsole\fR +.IP +Send trace/debug info to console instead of debug.log file +.HP +\fB\-shrinkdebugfile\fR +.IP +Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR) +.HP +\fB\-testnet\fR +.IP +Use the test network +.PP +Node relay options: +.HP +\fB\-datacarrier\fR +.IP +Relay and mine data carrier transactions (default: 1) +.HP +\fB\-datacarriersize\fR +.IP +Maximum size of data in data carrier transactions we relay and mine +(default: 80) +.PP +Block creation options: +.HP +\fB\-blockminsize=\fR +.IP +Set minimum block size in bytes (default: 0) +.HP +\fB\-blockmaxsize=\fR +.IP +Set maximum block size in bytes (default: 750000) +.HP +\fB\-blockprioritysize=\fR +.IP +Set maximum size of high\-priority/low\-fee transactions in bytes +(default: 50000) +.PP +RPC server options: +.HP +\fB\-server\fR +.IP +Accept command line and JSON\-RPC commands +.HP +\fB\-rest\fR +.IP +Accept public REST requests (default: 0) +.HP +\fB\-rpcbind=\fR +.IP +Bind to given address to listen for JSON\-RPC connections. Use +[host]:port notation for IPv6. This option can be specified multiple +times (default: bind to all interfaces) +.HP +\fB\-rpcuser=\fR +.IP +Username for JSON\-RPC connections +.HP +\fB\-rpcpassword=\fR +.IP +Password for JSON\-RPC connections +.HP +\fB\-rpcport=\fR +.IP +Listen for JSON\-RPC connections on (default: 8232 or testnet: +18232) +.HP +\fB\-rpcallowip=\fR +.IP +Allow JSON\-RPC connections from specified source. Valid for are a +single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) +or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified +multiple times +.HP +\fB\-rpcthreads=\fR +.IP +Set the number of threads to service RPC calls (default: 4) +.HP +\fB\-rpckeepalive\fR +.IP +RPC support for HTTP persistent connections (default: 1) +.PP +RPC SSL options: (see the Bitcoin Wiki for SSL setup instructions) +.HP +\fB\-rpcssl\fR +.IP +Use OpenSSL (https) for JSON\-RPC connections +.HP +\fB\-rpcsslcertificatechainfile=\fR +.IP +Server certificate file (default: server.cert) +.HP +\fB\-rpcsslprivatekeyfile=\fR +.IP +Server private key (default: server.pem) +.HP +\fB\-rpcsslciphers=\fR +.IP +Acceptable ciphers (default: +TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) +.SH COPYRIGHT +Copyright \(co 2009\-2016 The Bitcoin Core Developers +.br +Copyright \(co 2015\-2016 The Zcash Developers +.PP +This is experimental software. +.PP +Distributed under the MIT software license, see the accompanying file COPYING +or . +.PP +This product includes software developed by the OpenSSL Project for use in the +OpenSSL Toolkit and cryptographic software written +by Eric Young and UPnP software written by Thomas Bernard. +.SH "SEE ALSO" +The full documentation for +.B Zcash +is maintained as a Texinfo manual. If the +.B info +and +.B Zcash +programs are properly installed at your site, the command +.IP +.B info Zcash +.PP +should give you access to the complete manual. From 473389dfb470c8fd4eae5290018b5df34366dc49 Mon Sep 17 00:00:00 2001 From: Paige Peterson Date: Tue, 25 Oct 2016 20:35:59 -0400 Subject: [PATCH 128/165] fix per Jack's mod suggestions --- contrib/DEBIAN/examples/zcash.conf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contrib/DEBIAN/examples/zcash.conf b/contrib/DEBIAN/examples/zcash.conf index b0c5be104..d85c016cd 100644 --- a/contrib/DEBIAN/examples/zcash.conf +++ b/contrib/DEBIAN/examples/zcash.conf @@ -60,8 +60,8 @@ # JSON-RPC options (for controlling a running Zcash/zcashd process) # -# server=1 tells zcashd to accept JSON-RPC commands -#server=0 +# server=1 tells zcashd to accept JSON-RPC commands (set as default if not specified) +#server=1 # Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6. # This option can be specified multiple times (default: bind to all interfaces) @@ -102,7 +102,7 @@ #rpcsslcertificatechainfile=server.cert #rpcsslprivatekeyfile=server.pem -# Transaction Fee Changes in 0.10.0 +# Transaction Fee # Send transactions as zero-fee transactions if possible (default: 0) #sendfreetransactions=0 @@ -116,8 +116,8 @@ # Enable attempt to generate zcash. #gen=1 -# Enable use of SSE instructions to try to generate zcash faster. -#4way=1 +# Enable use of a different Equihash solver to try to generate zcash faster. +#equihashsolver=default # Pre-generate this many public/private key pairs, so wallet backups will be valid for # both prior transactions and several dozen future transactions. From 4340a34de83bcf99f86134011fd636dcf82e38be Mon Sep 17 00:00:00 2001 From: Paige Peterson Date: Tue, 25 Oct 2016 20:55:53 -0400 Subject: [PATCH 129/165] fix per Daira's suggestions --- contrib/DEBIAN/examples/zcash.conf | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/contrib/DEBIAN/examples/zcash.conf b/contrib/DEBIAN/examples/zcash.conf index d85c016cd..1d6d27acd 100644 --- a/contrib/DEBIAN/examples/zcash.conf +++ b/contrib/DEBIAN/examples/zcash.conf @@ -1,7 +1,7 @@ ## ## zcash.conf configuration file. Lines beginning with # are comments. ## - + # Network-related settings: # Run on the test network instead of the real zcash network. @@ -68,7 +68,7 @@ #rpcbind= # You must set rpcuser and rpcpassword to secure the JSON-RPC api -#rpcuser=Ulysseys +#rpcuser=Ulysses #rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593 # How many seconds zcash will wait for a complete RPC HTTP request. @@ -80,7 +80,9 @@ # either as a single IPv4/IPv6 or with a subnet specification. # NOTE: opening up the RPC port to hosts outside your local trusted network is NOT RECOMMENDED, -# because the rpcpassword is transmitted over the network unencrypted. +# because the rpcpassword is transmitted over the network unencrypted and also because anyone +# that can authenticate on the RPC port can steal your keys + take over the account running zcashd +# For more information see https://github.com/zcash/zcash/issues/1497 #rpcallowip=10.1.1.34/255.255.255.0 #rpcallowip=1.2.3.4/24 @@ -107,8 +109,8 @@ # Send transactions as zero-fee transactions if possible (default: 0) #sendfreetransactions=0 -# Create transactions that have enough fees (or priority) so they are likely to begin confirmation within n blocks (default: 1). -# This setting is over-ridden by the -paytxfee option. +# Create transactions that have enough fees (or priority) so they are likely to # begin confirmation within n blocks (default: 1). +# This setting is overridden by the -paytxfee option. #txconfirmtarget=n # Miscellaneous options @@ -125,7 +127,8 @@ # Pay an optional transaction fee every time you send zcash. Transactions with fees # are more likely than free transactions to be included in generated blocks, so may -# be validated sooner. +# be validated sooner. This setting does not affect private transactions created with +# 'z_sendmany'. #paytxfee=0.00 From d79ef011c1d87e05989e1014f186738df55dcd7a Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Wed, 26 Oct 2016 03:18:32 +0100 Subject: [PATCH 130/165] Tweak descriptions of mining parameters for example zcash.conf. Signed-off-by: Daira Hopwood --- contrib/DEBIAN/examples/zcash.conf | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/contrib/DEBIAN/examples/zcash.conf b/contrib/DEBIAN/examples/zcash.conf index 1d6d27acd..e9935a872 100644 --- a/contrib/DEBIAN/examples/zcash.conf +++ b/contrib/DEBIAN/examples/zcash.conf @@ -115,10 +115,14 @@ # Miscellaneous options -# Enable attempt to generate zcash. -#gen=1 +# Enable attempt to mine zcash. +#gen=0 -# Enable use of a different Equihash solver to try to generate zcash faster. +# Set the number of threads to be used for mining zcash (-1 = all cores). +#genproclimit=1 + +# Specify a different Equihash solver (e.g. "tromp") to try to mine zcash +# faster when gen=1. #equihashsolver=default # Pre-generate this many public/private key pairs, so wallet backups will be valid for From 5c23abb14ab0658095e78d711262da2301a845ff Mon Sep 17 00:00:00 2001 From: Louis Nyffenegger Date: Wed, 26 Oct 2016 13:56:07 +1100 Subject: [PATCH 131/165] Fix typo in README.md s/sophisticiated/sophisticated/ --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 69e321f0f..faa2549a9 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ What is Zcash? [Zcash](https://z.cash/) is an implementation of the "Zerocash" protocol. Based on Bitcoin's code, it intends to offer a far higher standard of privacy -and anonymity through a sophisticiated zero-knowledge proving scheme that +and anonymity through a sophisticated zero-knowledge proving scheme that preserves confidentiality of transaction metadata. Technical details are available in our [Protocol Specification](https://github.com/zcash/zips/raw/master/protocol/protocol.pdf). From 5cf1637ebf1dfb9492ffc692261656f78712783d Mon Sep 17 00:00:00 2001 From: bitcartel Date: Tue, 25 Oct 2016 23:36:09 -0700 Subject: [PATCH 132/165] Update payment-api.md --- doc/payment-api.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/payment-api.md b/doc/payment-api.md index 6fb7d4cac..dd10c3497 100644 --- a/doc/payment-api.md +++ b/doc/payment-api.md @@ -18,7 +18,7 @@ When a transfer involves zaddrs, you must use the new Zcash RPC calls. Zcash supports all commands in the Bitcoin Core API (as of version 0.11.2). Where applicable, Zcash will extend commands in a backwards-compatible way to enable additional functionality. -We do not recommend use of accounts which are now deprecated in Bitcoin Core. Where the account parameter exists in the API, please use “” as its value. +We do not recommend use of accounts which are now deprecated in Bitcoin Core. Where the account parameter exists in the API, please use “” as its value, otherwise an error will be returned. To support multiple users in a single node’s wallet, consider using getnewaddress or z_getnewaddress to obtain a new address for each user. Also consider mapping multiple addresses to each user. @@ -61,7 +61,7 @@ z_listaddresses | | Returns a list of all the zaddrs in this node’s wallet for Command | Parameters | Description --- | --- | --- z_exportkey | zaddr | _Requires an unlocked wallet or an unencrypted wallet._

Return a zkey for a given zaddr belonging to the node’s wallet.

The key will be returned as a string formatted using Base58Check as described in the Zcash protocol spec.

Output:AKWUAkypwQjhZ6LLNaMuuuLcmZ6gt5UFyo8m3jGutvALmwZKLdR5 -z_importkey | zkey [rescan=true] | _Wallet must be unlocked._

Add a zkey as returned by z_exportkey to a node's wallet.

The key should be formatted using Base58Check as described in the Zcash protocol spec.

Set rescan to true (the default) to rescan the entire local block database for transactions affecting any address or pubkey script in the wallet (including transactions affecting the newly-added address for this spending key).

**NOTE:** If funds for imported keys fail to display, try stopping the node and restarting it with a `-reindex` flag. (`./src/zcashd -reindex`) +z_importkey | zkey [rescan=true] | _Wallet must be unlocked._

Add a zkey as returned by z_exportkey to a node's wallet.

The key should be formatted using Base58Check as described in the Zcash protocol spec.

Set rescan to true (the default) to rescan the entire local block database for transactions affecting any address or pubkey script in the wallet (including transactions affecting the newly-added address for this spending key). z_exportwallet | filename | _Requires an unlocked wallet or an unencrypted wallet._

Creates or overwrites a file with taddr private keys and zaddr private keys in a human-readable format.

Filename is the file in which the wallet dump will be placed. May be prefaced by an absolute file path. An existing file with that name will be overwritten.

No value is returned but a JSON-RPC error will be reported if a failure occurred. z_importwallet | filename | _Requires an unlocked wallet or an unencrypted wallet._

Imports private keys from a file in wallet export file format (see z_exportwallet). These keys will be added to the keys currently in the wallet. This call may need to rescan all or parts of the block chain for transactions affecting the newly-added keys, which may take several minutes.

Filename is the file to import. The path is relative to zcashd’s working directory.

No value is returned but a JSON-RPC error will be reported if a failure occurred. @@ -70,7 +70,7 @@ z_importwallet | filename | _Requires an unlocked wallet or an unencrypted walle Command | Parameters | Description --- | --- | --- z_listreceivedbyaddress
| zaddr [minconf=1] | Return a list of amounts received by a zaddr belonging to the node’s wallet.

Optionally set the minimum number of confirmations which a received amount must have in order to be included in the result. Use 0 to count unconfirmed transactions.

Output:
[{
“txid”: “4a0f…”,
“amount”: 0.54,
“memo”:”F0FF…”,}, {...}, {...}
] -z_sendmany
| fromaddress amounts [minconf=1] | _This is an Asynchronous RPC call_

Send funds from an address to multiple outputs. The address can be either a taddr or a zaddr.

Amounts is a list containing key/value pairs corresponding to the addresses and amount to pay. Each output address can be in taddr or zaddr format.

When sending to a zaddr, you also have the option of attaching a memo in hexadecimal format.

Example of Outputs parameter:
[{“address”:”t123…”, “amount”:0.005},
,{“address”:”z010…”,”amount”:0.03, “memo”:”f508af…”}]

Optionally set the minimum number of confirmations which a private or transparent transaction must have in order to be used as an input.

The transaction fee will be determined by the node’s wallet. Any transparent change will be sent to a new transparent address. Any private change will be sent back to the zaddr being used as the source of funds.

Returns an operationid. You use the operationid value with z_getoperationstatus and z_getoperationresult to obtain the result of sending funds, which if successful, will be a txid. +z_sendmany
| fromaddress amounts [minconf=1] | _This is an Asynchronous RPC call_

Send funds from an address to multiple outputs. The address can be either a taddr or a zaddr.

Amounts is a list containing key/value pairs corresponding to the addresses and amount to pay. Each output address can be in taddr or zaddr format.

When sending to a zaddr, you also have the option of attaching a memo in hexadecimal format.

**NOTE:**When sending coinbase funds to a zaddr, the node's wallet does not allow any change. Put another way, spending a partial amount of a coinbase utxo is not allowed. This is not a consensus rule but a local wallet rule due to the current implementation of z_sendmany. In future, this rule may be removed.

Example of Outputs parameter:
[{“address”:”t123…”, “amount”:0.005},
,{“address”:”z010…”,”amount”:0.03, “memo”:”f508af…”}]

Optionally set the minimum number of confirmations which a private or transparent transaction must have in order to be used as an input.

The transaction fee will be determined by the node’s wallet. Any transparent change will be sent to a new transparent address. Any private change will be sent back to the zaddr being used as the source of funds.

Returns an operationid. You use the operationid value with z_getoperationstatus and z_getoperationresult to obtain the result of sending funds, which if successful, will be a txid. ### Operations From 55d4f13bb7999baa96eba73ce1ae35a05317ba50 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 26 Oct 2016 12:00:43 -0700 Subject: [PATCH 133/165] Bump version number in sendalert.cpp --- src/sendalert.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/sendalert.cpp b/src/sendalert.cpp index 6fac530e2..aed9b7682 100644 --- a/src/sendalert.cpp +++ b/src/sendalert.cpp @@ -76,9 +76,9 @@ void ThreadSendAlert() alert.nCancel = 0; // cancels previous messages up to this ID number // These versions are protocol versions - // 70002 : 0.11.2.* - alert.nMinVer = 70002; - alert.nMaxVer = 70002; + // 170002 : 1.0.0 + alert.nMinVer = 170002; + alert.nMaxVer = 170002; // // main.cpp: From 58c4c0bba36837d22f262a3920cd7f833949b161 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Wed, 26 Oct 2016 13:29:05 -0600 Subject: [PATCH 134/165] Change some Bitcoin strings to Zcash strings. --- src/rpcserver.cpp | 8 ++-- src/util.h | 2 +- src/wallet/rpcdump.cpp | 16 +++---- src/wallet/rpcwallet.cpp | 98 ++++++++++++++++++++-------------------- src/wallet/walletdb.cpp | 2 +- 5 files changed, 63 insertions(+), 63 deletions(-) diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 28aa3bc62..99e529ef3 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -623,16 +623,16 @@ void StartRPCThreads() unsigned char rand_pwd[32]; GetRandBytes(rand_pwd, 32); uiInterface.ThreadSafeMessageBox(strprintf( - _("To use bitcoind, or the -server option to bitcoin-qt, you must set an rpcpassword in the configuration file:\n" + _("To use zcashd you must set an rpcpassword in the configuration file:\n" "%s\n" "It is recommended you use the following random password:\n" - "rpcuser=bitcoinrpc\n" + "rpcuser=zcashrpc\n" "rpcpassword=%s\n" "(you do not need to remember this password)\n" "The username and password MUST NOT be the same.\n" "If the file does not exist, create it with owner-readable-only file permissions.\n" "It is also recommended to set alertnotify so you are notified of problems;\n" - "for example: alertnotify=echo %%s | mail -s \"Bitcoin Alert\" admin@foo.com\n"), + "for example: alertnotify=echo %%s | mail -s \"Zcash Alert\" admin@foo.com\n"), GetConfigFile().string(), EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32)), "", CClientUIInterface::MSG_ERROR | CClientUIInterface::SECURE); @@ -1068,7 +1068,7 @@ json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_s } std::string HelpExampleCli(string methodname, string args){ - return "> bitcoin-cli " + methodname + " " + args + "\n"; + return "> zcash-cli " + methodname + " " + args + "\n"; } std::string HelpExampleRpc(string methodname, string args){ diff --git a/src/util.h b/src/util.h index 9abaa1928..ef3a347fa 100644 --- a/src/util.h +++ b/src/util.h @@ -214,7 +214,7 @@ void RenameThread(const char* name); */ template void TraceThread(const char* name, Callable func) { - std::string s = strprintf("bitcoin-%s", name); + std::string s = strprintf("zcash-%s", name); RenameThread(s.c_str()); try { diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index e4840301e..789bd4537 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -81,10 +81,10 @@ Value importprivkey(const Array& params, bool fHelp) if (fHelp || params.size() < 1 || params.size() > 3) throw runtime_error( - "importprivkey \"bitcoinprivkey\" ( \"label\" rescan )\n" + "importprivkey \"zcashprivkey\" ( \"label\" rescan )\n" "\nAdds a private key (as returned by dumpprivkey) to your wallet.\n" "\nArguments:\n" - "1. \"bitcoinprivkey\" (string, required) The private key (see dumpprivkey)\n" + "1. \"zcashprivkey\" (string, required) The private key (see dumpprivkey)\n" "2. \"label\" (string, optional, default=\"\") An optional label\n" "3. rescan (boolean, optional, default=true) Rescan the wallet for transactions\n" "\nNote: This call can take minutes to complete if rescan is true.\n" @@ -182,7 +182,7 @@ Value importaddress(const Array& params, bool fHelp) std::vector data(ParseHex(params[0].get_str())); script = CScript(data.begin(), data.end()); } else { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address or script"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Zcash address or script"); } string strLabel = ""; @@ -321,7 +321,7 @@ Value importwallet_impl(const Array& params, bool fHelp, bool fImportZKeys) } catch (const std::runtime_error &e) { LogPrint("zrpc","Importing detected an error: %s\n", e.what()); - // Not a valid spending key, so carry on and see if it's a Bitcoin style address. + // Not a valid spending key, so carry on and see if it's a Zcash style address. } } @@ -388,11 +388,11 @@ Value dumpprivkey(const Array& params, bool fHelp) if (fHelp || params.size() != 1) throw runtime_error( - "dumpprivkey \"bitcoinaddress\"\n" - "\nReveals the private key corresponding to 'bitcoinaddress'.\n" + "dumpprivkey \"zcashaddress\"\n" + "\nReveals the private key corresponding to 'zcashaddress'.\n" "Then the importprivkey can be used with this output\n" "\nArguments:\n" - "1. \"bitcoinaddress\" (string, required) The bitcoin address for the private key\n" + "1. \"zcashaddress\" (string, required) The zcash address for the private key\n" "\nResult:\n" "\"key\" (string) The private key\n" "\nExamples:\n" @@ -408,7 +408,7 @@ Value dumpprivkey(const Array& params, bool fHelp) string strAddress = params[0].get_str(); CBitcoinAddress address; if (!address.SetString(strAddress)) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Zcash address"); CKeyID keyID; if (!address.GetKeyID(keyID)) throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to a key"); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 414a5ce5e..77d7773f7 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -114,11 +114,11 @@ Value getnewaddress(const Array& params, bool fHelp) if (fHelp || params.size() > 1) throw runtime_error( "getnewaddress ( \"account\" )\n" - "\nReturns a new Bitcoin address for receiving payments.\n" + "\nReturns a new Zcash address for receiving payments.\n" "\nArguments:\n" "1. \"account\" (string, optional) DEPRECATED. If provided, it MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "\nResult:\n" - "\"bitcoinaddress\" (string) The new bitcoin address\n" + "\"zcashaddress\" (string) The new zcash address\n" "\nExamples:\n" + HelpExampleCli("getnewaddress", "") + HelpExampleRpc("getnewaddress", "") @@ -191,11 +191,11 @@ Value getaccountaddress(const Array& params, bool fHelp) if (fHelp || params.size() != 1) throw runtime_error( "getaccountaddress \"account\"\n" - "\nDEPRECATED. Returns the current Bitcoin address for receiving payments to this account.\n" + "\nDEPRECATED. Returns the current Zcash address for receiving payments to this account.\n" "\nArguments:\n" "1. \"account\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "\nResult:\n" - "\"bitcoinaddress\" (string) The account bitcoin address\n" + "\"zcashaddress\" (string) The account zcash address\n" "\nExamples:\n" + HelpExampleCli("getaccountaddress", "") + HelpExampleCli("getaccountaddress", "\"\"") @@ -223,7 +223,7 @@ Value getrawchangeaddress(const Array& params, bool fHelp) if (fHelp || params.size() > 1) throw runtime_error( "getrawchangeaddress\n" - "\nReturns a new Bitcoin address, for receiving change.\n" + "\nReturns a new Zcash address, for receiving change.\n" "This is for use with raw transactions, NOT normal use.\n" "\nResult:\n" "\"address\" (string) The address\n" @@ -257,10 +257,10 @@ Value setaccount(const Array& params, bool fHelp) if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "setaccount \"bitcoinaddress\" \"account\"\n" + "setaccount \"zcashaddress\" \"account\"\n" "\nDEPRECATED. Sets the account associated with the given address.\n" "\nArguments:\n" - "1. \"bitcoinaddress\" (string, required) The bitcoin address to be associated with an account.\n" + "1. \"zcashaddress\" (string, required) The zcash address to be associated with an account.\n" "2. \"account\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "\nExamples:\n" + HelpExampleCli("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"tabby\"") @@ -271,7 +271,7 @@ Value setaccount(const Array& params, bool fHelp) CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Zcash address"); string strAccount; if (params.size() > 1) @@ -303,10 +303,10 @@ Value getaccount(const Array& params, bool fHelp) if (fHelp || params.size() != 1) throw runtime_error( - "getaccount \"bitcoinaddress\"\n" + "getaccount \"zcashaddress\"\n" "\nDEPRECATED. Returns the account associated with the given address.\n" "\nArguments:\n" - "1. \"bitcoinaddress\" (string, required) The bitcoin address for account lookup.\n" + "1. \"zcashaddress\" (string, required) The zcash address for account lookup.\n" "\nResult:\n" "\"accountname\" (string) the account address\n" "\nExamples:\n" @@ -318,7 +318,7 @@ Value getaccount(const Array& params, bool fHelp) CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Zcash address"); string strAccount; map::iterator mi = pwalletMain->mapAddressBook.find(address.Get()); @@ -341,7 +341,7 @@ Value getaddressesbyaccount(const Array& params, bool fHelp) "1. \"account\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "\nResult:\n" "[ (json array of string)\n" - " \"bitcoinaddress\" (string) a bitcoin address associated with the given account\n" + " \"zcashaddress\" (string) a zcash address associated with the given account\n" " ,...\n" "]\n" "\nExamples:\n" @@ -376,7 +376,7 @@ static void SendMoney(const CTxDestination &address, CAmount nValue, bool fSubtr if (nValue > curBalance) throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, "Insufficient funds"); - // Parse Bitcoin address + // Parse Zcash address CScript scriptPubKey = GetScriptForDestination(address); // Create and send the transaction @@ -403,11 +403,11 @@ Value sendtoaddress(const Array& params, bool fHelp) if (fHelp || params.size() < 2 || params.size() > 5) throw runtime_error( - "sendtoaddress \"bitcoinaddress\" amount ( \"comment\" \"comment-to\" subtractfeefromamount )\n" + "sendtoaddress \"zcashaddress\" amount ( \"comment\" \"comment-to\" subtractfeefromamount )\n" "\nSend an amount to a given address. The amount is a real and is rounded to the nearest 0.00000001\n" + HelpRequiringPassphrase() + "\nArguments:\n" - "1. \"bitcoinaddress\" (string, required) The bitcoin address to send to.\n" + "1. \"zcashaddress\" (string, required) The zcash address to send to.\n" "2. \"amount\" (numeric, required) The amount in btc to send. eg 0.1\n" "3. \"comment\" (string, optional) A comment used to store what the transaction is for. \n" " This is not part of the transaction, just kept in your wallet.\n" @@ -415,7 +415,7 @@ Value sendtoaddress(const Array& params, bool fHelp) " to which you're sending the transaction. This is not part of the \n" " transaction, just kept in your wallet.\n" "5. subtractfeefromamount (boolean, optional, default=false) The fee will be deducted from the amount being sent.\n" - " The recipient will receive less bitcoins than you enter in the amount field.\n" + " The recipient will receive less zcash than you enter in the amount field.\n" "\nResult:\n" "\"transactionid\" (string) The transaction id.\n" "\nExamples:\n" @@ -429,7 +429,7 @@ Value sendtoaddress(const Array& params, bool fHelp) CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Zcash address"); // Amount CAmount nAmount = AmountFromValue(params[1]); @@ -467,7 +467,7 @@ Value listaddressgroupings(const Array& params, bool fHelp) "[\n" " [\n" " [\n" - " \"bitcoinaddress\", (string) The bitcoin address\n" + " \"zcashaddress\", (string) The zcash address\n" " amount, (numeric) The amount in btc\n" " \"account\" (string, optional) The account (DEPRECATED)\n" " ]\n" @@ -510,11 +510,11 @@ Value signmessage(const Array& params, bool fHelp) if (fHelp || params.size() != 2) throw runtime_error( - "signmessage \"bitcoinaddress\" \"message\"\n" + "signmessage \"zcashaddress\" \"message\"\n" "\nSign a message with the private key of an address" + HelpRequiringPassphrase() + "\n" "\nArguments:\n" - "1. \"bitcoinaddress\" (string, required) The bitcoin address to use for the private key.\n" + "1. \"zcashaddress\" (string, required) The zcash address to use for the private key.\n" "2. \"message\" (string, required) The message to create a signature of.\n" "\nResult:\n" "\"signature\" (string) The signature of the message encoded in base 64\n" @@ -566,10 +566,10 @@ Value getreceivedbyaddress(const Array& params, bool fHelp) if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "getreceivedbyaddress \"bitcoinaddress\" ( minconf )\n" - "\nReturns the total amount received by the given bitcoinaddress in transactions with at least minconf confirmations.\n" + "getreceivedbyaddress \"zcashaddress\" ( minconf )\n" + "\nReturns the total amount received by the given zcashaddress in transactions with at least minconf confirmations.\n" "\nArguments:\n" - "1. \"bitcoinaddress\" (string, required) The bitcoin address for transactions.\n" + "1. \"zcashaddress\" (string, required) The zcash address for transactions.\n" "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n" "\nResult:\n" "amount (numeric) The total amount in btc received at this address.\n" @@ -589,7 +589,7 @@ Value getreceivedbyaddress(const Array& params, bool fHelp) // Bitcoin address CBitcoinAddress address = CBitcoinAddress(params[0].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Zcash address"); CScript scriptPubKey = GetScriptForDestination(address.Get()); if (!IsMine(*pwalletMain,scriptPubKey)) return (double)0.0; @@ -871,13 +871,13 @@ Value sendfrom(const Array& params, bool fHelp) if (fHelp || params.size() < 3 || params.size() > 6) throw runtime_error( - "sendfrom \"fromaccount\" \"tobitcoinaddress\" amount ( minconf \"comment\" \"comment-to\" )\n" - "\nDEPRECATED (use sendtoaddress). Sent an amount from an account to a bitcoin address.\n" + "sendfrom \"fromaccount\" \"tozcashaddress\" amount ( minconf \"comment\" \"comment-to\" )\n" + "\nDEPRECATED (use sendtoaddress). Sent an amount from an account to a zcash address.\n" "The amount is a real and is rounded to the nearest 0.00000001." + HelpRequiringPassphrase() + "\n" "\nArguments:\n" "1. \"fromaccount\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" - "2. \"tobitcoinaddress\" (string, required) The bitcoin address to send funds to.\n" + "2. \"tozcashaddress\" (string, required) The zcash address to send funds to.\n" "3. amount (numeric, required) The amount in btc. (transaction fee is added on top).\n" "4. minconf (numeric, optional, default=1) Only use funds with at least this many confirmations.\n" "5. \"comment\" (string, optional) A comment used to store what the transaction is for. \n" @@ -901,7 +901,7 @@ Value sendfrom(const Array& params, bool fHelp) string strAccount = AccountFromValue(params[0]); CBitcoinAddress address(params[1].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Zcash address"); CAmount nAmount = AmountFromValue(params[2]); int nMinDepth = 1; if (params.size() > 3) @@ -941,14 +941,14 @@ Value sendmany(const Array& params, bool fHelp) "1. \"fromaccount\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "2. \"amounts\" (string, required) A json object with addresses and amounts\n" " {\n" - " \"address\":amount (numeric) The bitcoin address is the key, the numeric amount in btc is the value\n" + " \"address\":amount (numeric) The zcash address is the key, the numeric amount in btc is the value\n" " ,...\n" " }\n" "3. minconf (numeric, optional, default=1) Only use the balance confirmed at least this many times.\n" "4. \"comment\" (string, optional) A comment\n" "5. subtractfeefromamount (string, optional) A json array with addresses.\n" " The fee will be equally deducted from the amount of each selected address.\n" - " Those recipients will receive less bitcoins than you enter in their corresponding amount field.\n" + " Those recipients will receive less zcashs than you enter in their corresponding amount field.\n" " If no addresses are specified here, the sender pays the fee.\n" " [\n" " \"address\" (string) Subtract fee from this address\n" @@ -993,7 +993,7 @@ Value sendmany(const Array& params, bool fHelp) { CBitcoinAddress address(s.name_); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Bitcoin address: ")+s.name_); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Zcash address: ")+s.name_); if (setAddress.count(address)) throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, duplicated address: ")+s.name_); @@ -1045,20 +1045,20 @@ Value addmultisigaddress(const Array& params, bool fHelp) { string msg = "addmultisigaddress nrequired [\"key\",...] ( \"account\" )\n" "\nAdd a nrequired-to-sign multisignature address to the wallet.\n" - "Each key is a Bitcoin address or hex-encoded public key.\n" + "Each key is a Zcash address or hex-encoded public key.\n" "If 'account' is specified (DEPRECATED), assign address to that account.\n" "\nArguments:\n" "1. nrequired (numeric, required) The number of required signatures out of the n keys or addresses.\n" - "2. \"keysobject\" (string, required) A json array of bitcoin addresses or hex-encoded public keys\n" + "2. \"keysobject\" (string, required) A json array of zcash addresses or hex-encoded public keys\n" " [\n" - " \"address\" (string) bitcoin address or hex-encoded public key\n" + " \"address\" (string) zcash address or hex-encoded public key\n" " ...,\n" " ]\n" "3. \"account\" (string, optional) DEPRECATED. If provided, MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "\nResult:\n" - "\"bitcoinaddress\" (string) A bitcoin address associated with the keys.\n" + "\"zcashaddress\" (string) A zcash address associated with the keys.\n" "\nExamples:\n" "\nAdd a multisig address from 2 addresses\n" @@ -1403,7 +1403,7 @@ Value listtransactions(const Array& params, bool fHelp) " {\n" " \"account\":\"accountname\", (string) DEPRECATED. The account name associated with the transaction. \n" " It will be \"\" for the default account.\n" - " \"address\":\"bitcoinaddress\", (string) The bitcoin address of the transaction. Not present for \n" + " \"address\":\"zcashaddress\", (string) The zcash address of the transaction. Not present for \n" " move transactions (category = move).\n" " \"category\":\"send|receive|move\", (string) The transaction category. 'move' is a local (off blockchain)\n" " transaction between accounts, and not associated with an address,\n" @@ -1595,7 +1595,7 @@ Value listsinceblock(const Array& params, bool fHelp) "{\n" " \"transactions\": [\n" " \"account\":\"accountname\", (string) DEPRECATED. The account name associated with the transaction. Will be \"\" for the default account.\n" - " \"address\":\"bitcoinaddress\", (string) The bitcoin address of the transaction. Not present for move transactions (category = move).\n" + " \"address\":\"zcashaddress\", (string) The zcash address of the transaction. Not present for move transactions (category = move).\n" " \"category\":\"send|receive\", (string) The transaction category. 'send' has negative amounts, 'receive' has positive amounts.\n" " \"amount\": x.xxx, (numeric) The amount in btc. This is negative for the 'send' category, and for the 'move' category for moves \n" " outbound. It is positive for the 'receive' category, and for the 'move' category for inbound funds.\n" @@ -1694,7 +1694,7 @@ Value gettransaction(const Array& params, bool fHelp) " \"details\" : [\n" " {\n" " \"account\" : \"accountname\", (string) DEPRECATED. The account name involved in the transaction, can be \"\" for the default account.\n" - " \"address\" : \"bitcoinaddress\", (string) The bitcoin address involved in the transaction\n" + " \"address\" : \"zcashaddress\", (string) The zcash address involved in the transaction\n" " \"category\" : \"send|receive\", (string) The category, either 'send' or 'receive'\n" " \"amount\" : x.xxx (numeric) The amount in btc\n" " \"vout\" : n, (numeric) the vout value\n" @@ -1837,7 +1837,7 @@ Value walletpassphrase(const Array& params, bool fHelp) throw runtime_error( "walletpassphrase \"passphrase\" timeout\n" "\nStores the wallet decryption key in memory for 'timeout' seconds.\n" - "This is needed prior to performing transactions related to private keys such as sending bitcoins\n" + "This is needed prior to performing transactions related to private keys such as sending zcash\n" "\nArguments:\n" "1. \"passphrase\" (string, required) The wallet passphrase\n" "2. timeout (numeric, required) The time to keep the decryption key in seconds.\n" @@ -2002,10 +2002,10 @@ Value encryptwallet(const Array& params, bool fHelp) "\nExamples:\n" "\nEncrypt you wallet\n" + HelpExampleCli("encryptwallet", "\"my pass phrase\"") + - "\nNow set the passphrase to use the wallet, such as for signing or sending bitcoin\n" + "\nNow set the passphrase to use the wallet, such as for signing or sending zcash\n" + HelpExampleCli("walletpassphrase", "\"my pass phrase\"") + "\nNow we can so something like sign\n" - + HelpExampleCli("signmessage", "\"bitcoinaddress\" \"test message\"") + + + HelpExampleCli("signmessage", "\"zcashaddress\" \"test message\"") + "\nNow lock the wallet again by removing the passphrase\n" + HelpExampleCli("walletlock", "") + "\nAs a json rpc call\n" @@ -2040,7 +2040,7 @@ Value encryptwallet(const Array& params, bool fHelp) // slack space in .dat files; that is bad if the old data is // unencrypted private keys. So: StartShutdown(); - return "wallet encrypted; Bitcoin server stopping, restart to run with encrypted wallet. The keypool has been flushed, you need to make a new backup."; + return "wallet encrypted; Zcash server stopping, restart to run with encrypted wallet. The keypool has been flushed, you need to make a new backup."; } Value lockunspent(const Array& params, bool fHelp) @@ -2053,7 +2053,7 @@ Value lockunspent(const Array& params, bool fHelp) "lockunspent unlock [{\"txid\":\"txid\",\"vout\":n},...]\n" "\nUpdates list of temporarily unspendable outputs.\n" "Temporarily lock (unlock=false) or unlock (unlock=true) specified transaction outputs.\n" - "A locked transaction output will not be chosen by automatic coin selection, when spending bitcoins.\n" + "A locked transaction output will not be chosen by automatic coin selection, when spending zcash.\n" "Locks are stored in memory only. Nodes start with zero locked outputs, and the locked output list\n" "is always cleared (by virtue of process exit) when a node stops or fails.\n" "Also see the listunspent call\n" @@ -2217,8 +2217,8 @@ Value getwalletinfo(const Array& params, bool fHelp) "\nResult:\n" "{\n" " \"walletversion\": xxxxx, (numeric) the wallet version\n" - " \"balance\": xxxxxxx, (numeric) the total confirmed bitcoin balance of the wallet\n" - " \"unconfirmed_balance\": xxx, (numeric) the total unconfirmed bitcoin balance of the wallet\n" + " \"balance\": xxxxxxx, (numeric) the total confirmed zcash balance of the wallet\n" + " \"unconfirmed_balance\": xxx, (numeric) the total unconfirmed zcash balance of the wallet\n" " \"immature_balance\": xxxxxx, (numeric) the total immature balance of the wallet\n" " \"txcount\": xxxxxxx, (numeric) the total number of transactions in the wallet\n" " \"keypoololdest\": xxxxxx, (numeric) the timestamp (seconds since GMT epoch) of the oldest pre-generated key in the key pool\n" @@ -2286,9 +2286,9 @@ Value listunspent(const Array& params, bool fHelp) "\nArguments:\n" "1. minconf (numeric, optional, default=1) The minimum confirmations to filter\n" "2. maxconf (numeric, optional, default=9999999) The maximum confirmations to filter\n" - "3. \"addresses\" (string) A json array of bitcoin addresses to filter\n" + "3. \"addresses\" (string) A json array of zcash addresses to filter\n" " [\n" - " \"address\" (string) bitcoin address\n" + " \"address\" (string) zcash address\n" " ,...\n" " ]\n" "\nResult\n" @@ -2296,7 +2296,7 @@ Value listunspent(const Array& params, bool fHelp) " {\n" " \"txid\" : \"txid\", (string) the transaction id \n" " \"vout\" : n, (numeric) the vout value\n" - " \"address\" : \"address\", (string) the bitcoin address\n" + " \"address\" : \"address\", (string) the zcash address\n" " \"account\" : \"account\", (string) DEPRECATED. The associated account, or \"\" for the default account\n" " \"scriptPubKey\" : \"key\", (string) the script key\n" " \"amount\" : x.xxx, (numeric) the transaction amount in btc\n" @@ -2327,7 +2327,7 @@ Value listunspent(const Array& params, bool fHelp) BOOST_FOREACH(Value& input, inputs) { CBitcoinAddress address(input.get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Bitcoin address: ")+input.get_str()); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Zcash address: ")+input.get_str()); if (setAddress.count(address)) throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, duplicated address: ")+input.get_str()); setAddress.insert(address); diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp index 5c7138a61..d4966b186 100644 --- a/src/wallet/walletdb.cpp +++ b/src/wallet/walletdb.cpp @@ -885,7 +885,7 @@ DBErrors CWalletDB::ZapWalletTx(CWallet* pwallet, vector& vWtx) void ThreadFlushWalletDB(const string& strFile) { // Make this thread recognisable as the wallet flushing thread - RenameThread("bitcoin-wallet"); + RenameThread("zcash-wallet"); static bool fOneThread; if (fOneThread) From 7662d72bf4af099daa8b26572ca316a2494b4df2 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Wed, 26 Oct 2016 13:57:22 -0600 Subject: [PATCH 135/165] Make more string changes. --- src/init.cpp | 12 ++++++------ src/main.cpp | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index 9aea05b7d..963082fec 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -157,7 +157,7 @@ void Shutdown() /// for example if the data directory was found to be locked. /// Be sure that anything that writes files or flushes caches only does this if the respective /// module was initialized. - RenameThread("bitcoin-shutoff"); + RenameThread("zcash-shutoff"); mempool.AddTransactionsUpdated(1); StopRPCThreads(); #ifdef ENABLE_WALLET @@ -531,7 +531,7 @@ void CleanupBlockRevFiles() void ThreadImport(std::vector vImportFiles) { - RenameThread("bitcoin-loadblk"); + RenameThread("zcash-loadblk"); // -reindex if (fReindex) { #ifdef ENABLE_WALLET @@ -926,7 +926,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // Sanity check if (!InitSanityCheck()) - return InitError(_("Initialization sanity check failed. Bitcoin Core is shutting down.")); + return InitError(_("Initialization sanity check failed. Zcash is shutting down.")); std::string strDataDir = GetDataDir().string(); #ifdef ENABLE_WALLET @@ -942,9 +942,9 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) try { static boost::interprocess::file_lock lock(pathLockFile.string().c_str()); if (!lock.try_lock()) - return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running."), strDataDir)); + return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Zcash is probably already running."), strDataDir)); } catch(const boost::interprocess::interprocess_exception& e) { - return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.") + " %s.", strDataDir, e.what())); + return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Zcash is probably already running.") + " %s.", strDataDir, e.what())); } #ifndef WIN32 @@ -953,7 +953,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) if (GetBoolArg("-shrinkdebugfile", !fDebug)) ShrinkDebugFile(); LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); - LogPrintf("Bitcoin version %s (%s)\n", FormatFullVersion(), CLIENT_DATE); + LogPrintf("Zcash version %s (%s)\n", FormatFullVersion(), CLIENT_DATE); LogPrintf("Using OpenSSL version %s\n", SSLeay_version(SSLEAY_VERSION)); #ifdef ENABLE_WALLET LogPrintf("Using BerkeleyDB version %s\n", DbEnv::version(0, 0, 0)); diff --git a/src/main.cpp b/src/main.cpp index ca8f0f8d7..1cad27fe8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -39,7 +39,7 @@ using namespace std; #if defined(NDEBUG) -# error "Bitcoin cannot be compiled without assertions." +# error "Zcash cannot be compiled without assertions." #endif /** @@ -1958,7 +1958,7 @@ bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos, unsigne static CCheckQueue scriptcheckqueue(128); void ThreadScriptCheck() { - RenameThread("bitcoin-scriptch"); + RenameThread("zcash-scriptch"); scriptcheckqueue.Thread(); } From 3483696bedb3b557a4ab169836df6b80ed1f6b41 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Wed, 26 Oct 2016 23:08:30 +0100 Subject: [PATCH 136/165] Update dnsseeds for mainnet. closes #1369 Signed-off-by: Daira Hopwood --- src/chainparams.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 18b19c108..69dac685e 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -95,13 +95,9 @@ public: vFixedSeeds.clear(); vSeeds.clear(); - // TODO: set up bootstrapping for mainnet - //vSeeds.push_back(CDNSSeedData("bitcoin.sipa.be", "seed.bitcoin.sipa.be")); // Pieter Wuille - //vSeeds.push_back(CDNSSeedData("bluematt.me", "dnsseed.bluematt.me")); // Matt Corallo - //vSeeds.push_back(CDNSSeedData("dashjr.org", "dnsseed.bitcoin.dashjr.org")); // Luke Dashjr - //vSeeds.push_back(CDNSSeedData("bitcoinstats.com", "seed.bitcoinstats.com")); // Christian Decker - //vSeeds.push_back(CDNSSeedData("xf2.org", "bitseed.xf2.org")); // Jeff Garzik - //vSeeds.push_back(CDNSSeedData("bitcoin.jonasschnelli.ch", "seed.bitcoin.jonasschnelli.ch")); // Jonas Schnelli + vSeeds.push_back(CDNSSeedData("z.cash", "dnsseed.z.cash")); // Zcash + vSeeds.push_back(CDNSSeedData("str4d.xyz", "dnsseed.str4d.xyz")); // @str4d + vSeeds.push_back(CDNSSeedData("znodes.org", "dnsseed.znodes.org")); // @bitcartel // guarantees the first 2 characters, when base58 encoded, are "t1" base58Prefixes[PUBKEY_ADDRESS] = {0x1C,0xB8}; From 7b530c7945f0501919fb8b3dcd1dc974e8ae2723 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Wed, 26 Oct 2016 23:15:23 +0100 Subject: [PATCH 137/165] Minor update to release process. Signed-off-by: Daira Hopwood --- doc/release-process.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/release-process.md b/doc/release-process.md index cff4444cc..c874e54f3 100644 --- a/doc/release-process.md +++ b/doc/release-process.md @@ -32,7 +32,7 @@ previous release: ## B. Create a new release branch / github PR ### B1. Update (commit) version in sources - doc/README.md + README.md src/clientversion.h configure.ac contrib/DEBIAN/control From a049dd2953a1fb655d33ca2cf2f90cf85646d8d7 Mon Sep 17 00:00:00 2001 From: Kevin Gallagher Date: Wed, 26 Oct 2016 15:36:24 -0700 Subject: [PATCH 138/165] Use fakeroot to build Debian package --- zcutil/build-debian-package.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zcutil/build-debian-package.sh b/zcutil/build-debian-package.sh index 07c0e0e23..4d2dc58fc 100755 --- a/zcutil/build-debian-package.sh +++ b/zcutil/build-debian-package.sh @@ -29,7 +29,7 @@ cp $SRC_PATH/src/zcash-cli $BUILD_DIR/usr/bin/ cp $SRC_PATH/zcutil/fetch-params.sh $BUILD_DIR/usr/bin/zcash-fetch-params # Create the deb package -dpkg-deb --build $BUILD_DIR +fakeroot dpkg-deb --build $BUILD_DIR cp $BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-amd64.deb $SRC_PATH exit 0 From 5551db88224c9c9e70b8bcf5f25baaaaad656eac Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Mon, 24 Oct 2016 20:27:50 +0100 Subject: [PATCH 139/165] Remove the override of nMaxTipAge that effectively disables it on testnet. This is relevant to #1609 because it hid the bug, but does not fix that issue; the fix is to regenerate the genesis blocks. Signed-off-by: Daira Hopwood --- src/chainparams.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 69dac685e..47a6ac9d9 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -171,7 +171,6 @@ public: vAlertPubKey = ParseHex("044e7a1553392325c871c5ace5d6ad73501c66f4c185d6b0453cf45dec5a1322e705c672ac1a27ef7cdaf588c10effdf50ed5f95f85f2f54a5f6159fca394ed0c6"); nDefaultPort = 18233; nMinerThreads = 0; - nMaxTipAge = 0x7fffffff; nPruneAfterHeight = 1000; //! Modify the testnet genesis block so the timestamp is valid for a later start. From 1eee125bfcd5530b128865dc80bdbfc2f7903728 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Wed, 26 Oct 2016 23:47:06 +0100 Subject: [PATCH 140/165] Update version numbers for rc3. Signed-off-by: Daira Hopwood --- README.md | 2 +- configure.ac | 2 +- contrib/DEBIAN/changelog | 6 ++++++ contrib/DEBIAN/control | 2 +- contrib/gitian-descriptors/gitian-linux.yml | 2 +- src/clientversion.h | 2 +- 6 files changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index faa2549a9..9db3c2d90 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Zcash 1.0.0-rc2 +Zcash 1.0.0-rc3 =============== What is Zcash? diff --git a/configure.ac b/configure.ac index 085786323..8cfbe6aff 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 1) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 0) -define(_CLIENT_VERSION_BUILD, 26) +define(_CLIENT_VERSION_BUILD, 27) define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50))) define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1))) define(_CLIENT_VERSION_IS_RELEASE, false) diff --git a/contrib/DEBIAN/changelog b/contrib/DEBIAN/changelog index 89d489066..9e8621465 100644 --- a/contrib/DEBIAN/changelog +++ b/contrib/DEBIAN/changelog @@ -1,3 +1,9 @@ +zcash (1.0.0-rc3) jessie; urgency=medium + + * 1.0.0-rc3 release. + + -- Zcash Company Wed, 26 Oct 2016 23:17:03 +0100 + zcash (1.0.0-rc2) jessie; urgency=medium * 1.0.0-rc2 release. diff --git a/contrib/DEBIAN/control b/contrib/DEBIAN/control index 6d3b8d129..05d9a43f7 100644 --- a/contrib/DEBIAN/control +++ b/contrib/DEBIAN/control @@ -10,7 +10,7 @@ Build-Depends: autoconf, automake, bsdmainutils, build-essential Vcs-Git: git@github.com:zcash/zcash.git Vcs-Browser: https://github.com/zcash/zcash Package: zcash -Version: 1.0.0-rc2 +Version: 1.0.0-rc3 Architecture: amd64 Depends: libgomp1 Description: Zcash is an implementation of the "Zerocash" protocol. diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index 69ffa33b1..d11f6322a 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "zcash-1.0.0-rc2" +name: "zcash-1.0.0-rc3" enable_cache: true distro: "debian" suites: diff --git a/src/clientversion.h b/src/clientversion.h index 978271993..bcb587551 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -17,7 +17,7 @@ #define CLIENT_VERSION_MAJOR 1 #define CLIENT_VERSION_MINOR 0 #define CLIENT_VERSION_REVISION 0 -#define CLIENT_VERSION_BUILD 26 +#define CLIENT_VERSION_BUILD 27 //! Set to true for release, false for prerelease or test build #define CLIENT_VERSION_IS_RELEASE false From b37870bbf3ffd65e8c85ef0c38647188891c2c62 Mon Sep 17 00:00:00 2001 From: Kevin Gallagher Date: Wed, 26 Oct 2016 15:59:32 -0700 Subject: [PATCH 141/165] Update Debian package maintainer scripts --- contrib/DEBIAN/postinst | 6 ++++-- contrib/DEBIAN/postrm | 14 ++++---------- contrib/DEBIAN/preinst | 10 ++++------ contrib/DEBIAN/prerm | 7 ++----- 4 files changed, 14 insertions(+), 23 deletions(-) mode change 100755 => 100644 contrib/DEBIAN/postinst mode change 100755 => 100644 contrib/DEBIAN/postrm mode change 100755 => 100644 contrib/DEBIAN/preinst mode change 100755 => 100644 contrib/DEBIAN/prerm diff --git a/contrib/DEBIAN/postinst b/contrib/DEBIAN/postinst old mode 100755 new mode 100644 index 43294f711..2e6ff8a8d --- a/contrib/DEBIAN/postinst +++ b/contrib/DEBIAN/postinst @@ -2,8 +2,9 @@ # postinst script for zcash # # see: dh_installdeb(1) + set -e -set -x + # summary of how this script can be called: # * `configure' # * `abort-upgrade' @@ -13,9 +14,10 @@ set -x # * `abort-deconfigure' `in-favour' # `removing' # -# for details, see http://www.debian.org/doc/debian-policy/ or +# for details, see https://www.debian.org/doc/debian-policy/ or # the debian-policy package + case "$1" in configure) ;; diff --git a/contrib/DEBIAN/postrm b/contrib/DEBIAN/postrm old mode 100755 new mode 100644 index f397166fe..bb442a682 --- a/contrib/DEBIAN/postrm +++ b/contrib/DEBIAN/postrm @@ -4,7 +4,7 @@ # see: dh_installdeb(1) set -e -#set -x + # summary of how this script can be called: # * `remove' # * `purge' @@ -15,18 +15,12 @@ set -e # * `abort-upgrade' # * `disappear' # -# for details, see http://www.debian.org/doc/debian-policy/ or +# for details, see https://www.debian.org/doc/debian-policy/ or # the debian-policy package -. /usr/share/debconf/confmodule + case "$1" in - upgrade|failed-upgrade) - ;; - - remove|abort-install|abort-upgrade|disappear) - ;; - - purge) + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) ;; *) diff --git a/contrib/DEBIAN/preinst b/contrib/DEBIAN/preinst old mode 100755 new mode 100644 index f07c5a240..7587b4a88 --- a/contrib/DEBIAN/preinst +++ b/contrib/DEBIAN/preinst @@ -4,20 +4,18 @@ # see: dh_installdeb(1) set -e -#set -x + # summary of how this script can be called: # * `install' # * `install' # * `upgrade' # * `abort-upgrade' -# for details, see http://www.debian.org/doc/debian-policy/ or +# for details, see https://www.debian.org/doc/debian-policy/ or # the debian-policy package -case "$1" in - install) - ;; - upgrade) +case "$1" in + install|upgrade) ;; abort-upgrade) diff --git a/contrib/DEBIAN/prerm b/contrib/DEBIAN/prerm old mode 100755 new mode 100644 index 5b2697824..6a4f8c033 --- a/contrib/DEBIAN/prerm +++ b/contrib/DEBIAN/prerm @@ -13,15 +13,12 @@ set -e # * `deconfigure' `in-favour' # `removing' # -# for details, see http://www.debian.org/doc/debian-policy/ or +# for details, see https://www.debian.org/doc/debian-policy/ or # the debian-policy package case "$1" in - remove|deconfigure) - ;; - - upgrade) + remove|upgrade|deconfigure) ;; failed-upgrade) From 475ae8cd105835c0b6dfec5f3a284999b8a3d27d Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Thu, 27 Oct 2016 00:02:55 +0100 Subject: [PATCH 142/165] Add release notes for 1.0.0-rc3. Signed-off-by: Daira Hopwood --- doc/release-notes/release-notes-1.0.0-rc3.md | 51 ++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 doc/release-notes/release-notes-1.0.0-rc3.md diff --git a/doc/release-notes/release-notes-1.0.0-rc3.md b/doc/release-notes/release-notes-1.0.0-rc3.md new file mode 100644 index 000000000..863df2000 --- /dev/null +++ b/doc/release-notes/release-notes-1.0.0-rc3.md @@ -0,0 +1,51 @@ +Chirag Davé (1): + fReopenDebugLog and fRequestShutdown should be type sig_atomic_t + +Daira Hopwood (9): + Refactor README docs to avoid duplication. + Fix licensing to comply with OpenSSL and Berkeley DB licenses. + Changes to upgrade bdb to 6.2.23 + util: Update tinyformat + Tweak descriptions of mining parameters for example zcash.conf. + Update dnsseeds for mainnet. closes #1369 + Minor update to release process. + Remove the override of nMaxTipAge that effectively disables it on testnet. + Update version numbers for rc3. + +Jack Grigg (2): + Disable metrics screen in performance-measurements.sh + Link to #826 in doc/security-warnings.md, link to new Security website page + +Joe Turgeon (2): + Fixing floating point exception caused by metrics. Using default column width unless in a TTY. + Adding handling for ioctl failure. Updates from code review in PR #1615. + +Kevin Gallagher (2): + Prefer sha256sum but fall back to shasum if not available + Adds libgomp1 to Debian package depends + +Louis Nyffenegger (1): + Fix typo in README.md + +Paige Peterson (3): + add zcash.config + fix per Jack's mod suggestions + fix per Daira's suggestions + +Pieter Wuille (3): + Include signal.h for sig_atomic_t in WIN32 + Revert "Include signal.h for sig_atomic_t in WIN32" + Use std::atomic for fRequestShutdown and fReopenDebugLog + +Sean Bowe (1): + Add manpages for zcashd and zcash-cli binaries for debian. + +Simon (4): + Fix incorrect error message in z_sendmany + Add z_sendmany rule that when sending coinbase utxos to a zaddr they must be consumed entirely, without any change, since there is currently no way to specify a change address in z_sendmany. + Add assert to AsyncRPCOperation_sendmany + Bump version number in sendalert.cpp + +bitcartel (1): + Update payment-api.md + From 8764ae0eb73949b942c47cbefd32989bf9a71fb9 Mon Sep 17 00:00:00 2001 From: Kevin Gallagher Date: Wed, 26 Oct 2016 16:10:34 -0700 Subject: [PATCH 143/165] Fixes executable mode of maintainer scripts --- contrib/DEBIAN/postinst | 0 contrib/DEBIAN/postrm | 0 contrib/DEBIAN/preinst | 0 contrib/DEBIAN/prerm | 0 4 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 contrib/DEBIAN/postinst mode change 100644 => 100755 contrib/DEBIAN/postrm mode change 100644 => 100755 contrib/DEBIAN/preinst mode change 100644 => 100755 contrib/DEBIAN/prerm diff --git a/contrib/DEBIAN/postinst b/contrib/DEBIAN/postinst old mode 100644 new mode 100755 diff --git a/contrib/DEBIAN/postrm b/contrib/DEBIAN/postrm old mode 100644 new mode 100755 diff --git a/contrib/DEBIAN/preinst b/contrib/DEBIAN/preinst old mode 100644 new mode 100755 diff --git a/contrib/DEBIAN/prerm b/contrib/DEBIAN/prerm old mode 100644 new mode 100755 From 71cf68da488fda0dc82e612612e8bad171657e22 Mon Sep 17 00:00:00 2001 From: Kevin Gallagher Date: Wed, 26 Oct 2016 16:10:55 -0700 Subject: [PATCH 144/165] Add DEBIAN/rules file (required by policy) --- contrib/DEBIAN/rules | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100755 contrib/DEBIAN/rules diff --git a/contrib/DEBIAN/rules b/contrib/DEBIAN/rules new file mode 100755 index 000000000..b79cce595 --- /dev/null +++ b/contrib/DEBIAN/rules @@ -0,0 +1,25 @@ +#!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#export DH_VERBOSE = 1 + + +# see FEATURE AREAS in dpkg-buildflags(1) +#export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# see ENVIRONMENT in dpkg-buildflags(1) +# package maintainers to append CFLAGS +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# package maintainers to append LDFLAGS +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + + +%: + dh $@ --with autotools_dev + + +# dh_make generated override targets +# This is example for Cmake (See https://bugs.debian.org/641051 ) +#override_dh_auto_configure: +# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) + From 590480bc750f59d1adc47153b6756baf2866e516 Mon Sep 17 00:00:00 2001 From: Kevin Gallagher Date: Wed, 26 Oct 2016 16:24:35 -0700 Subject: [PATCH 145/165] Adds zcash.examples and zcash.manpages --- contrib/DEBIAN/zcash.examples | 1 + contrib/DEBIAN/zcash.manpages | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 contrib/DEBIAN/zcash.examples create mode 100644 contrib/DEBIAN/zcash.manpages diff --git a/contrib/DEBIAN/zcash.examples b/contrib/DEBIAN/zcash.examples new file mode 100644 index 000000000..924659c02 --- /dev/null +++ b/contrib/DEBIAN/zcash.examples @@ -0,0 +1 @@ +DEBIAN/examples/zcash.conf diff --git a/contrib/DEBIAN/zcash.manpages b/contrib/DEBIAN/zcash.manpages new file mode 100644 index 000000000..a1115f679 --- /dev/null +++ b/contrib/DEBIAN/zcash.manpages @@ -0,0 +1,2 @@ +DEBIAN/manpages/zcash-cli.1 +DEBIAN/manpages/zcashd.1 From 9f15b823ac869fed69613cd100904b29f599b8b9 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Wed, 26 Oct 2016 20:31:16 -0700 Subject: [PATCH 146/165] Integrate production Founders' Reward keys Closes #870 --- src/chainparams.cpp | 69 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 13 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 47a6ac9d9..492c26f42 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -133,19 +133,62 @@ public: // Founders reward script expects a vector of 2-of-3 multisig addresses vFoundersRewardAddress = { - "t3QW3CN6TzmTVH8M5E5aJoKzN838zAEBCuS", "t3c6yYJxXBGr3A2KjATDwDsbn8iLP9AsXfk", "t3TuV45WwNVwo3Qc4o2Mr1TenrY9FwRM18Z", "t3hmq4gpfPGhbaRaCsmD2ePidaPxWf3upsg", - "t3Y8pxVmXa4URdCWLC4cmeGPQ9nu8eSJMvG", "t3aE5FYLigL7VZw6qjmM6ftjBiAvGiPkjo5", "t3eiUmJQGPykPH8U5gzbPd1SjGDK2k6SFvb", "t3N1ybrjKLyn7q7tpQSRxSZmYp7UgkEgHDb", - "t3c8uR6tn6KWwrPWApBXJQuQ6daAr8bcaMg", "t3PGLi4mkL5FkMNjp9ERHtTBQguHPjT3yqA", "t3NYWdEZKfKwvBGCtJM2oMWhy1Rzot3yL3Q", "t3N7PKyV2yQnciu9cx5UbaqDRCVtev9qHpN", - "t3YPB1besUqKeEtx9FZX1A6HcXnkXq9Vc3r", "t3UrKCimx2FA9LU4ZMHE5A9dWbxEzm5MgLj", "t3WF7VvMmEh5teWs3WnW6shMqMj3UbX6p33", "t3aBmkm1cZoF5dZuumscMjWviipvSx6hFLR", - "t3VMf2EpazVsr4mKy4Gyp9qizCdQLrWTm9J", "t3NtLU7S7fYCtLMCjJHkxGd8kr79w7UhtpX", "t3SwJTa8B4zCEX6fth9BMaejp3pQW11DTB8", "t3PCnGjULLqDUq91XNAwU7aAx6v2WkAP12v", - "t3MAXyTGySnb6b3No3LuoVuFL3fY7recEin", "t3hbK2KY4BQ1rQuzwufyxLzSKQQPiP9XidW", "t3aF3uT8jQSmVetYwP5qLAuTnNqWJRNLQu7", "t3PWLsr8ru9MXyq7YWGAHPcY3N9t3Zp45uo", - "t3WzEt94EcdNXWjL8sb2KFTawZPUcL42MoX", "t3cjgEXQH2dp4Gozu6Mn45LC5HGfjrSAf9V", "t3ZmskqAyBLXkYBMGfBBpVmR3sNKN79anu3", "t3hGLeywDDaiqBro2Mi2eLD1i8LUttrBfbT", - "t3eQdDzPZMdN4vCziFt5zar7qp1XyMwgnD6", "t3PXk3FyBi7q48paPDLtCKdzF1zDS4bpjM3", "t3W65DrnBYmU8DPJgQ44acpz3YPwoNE8pc5", "t3Tj5a6hNPksnpcRSXS2pv1f2mrPtL2bqGb", - "t3heu9Ty3XwHAJbux6Bm4MakzS8jUL3EkFD", "t3WFEk3WwAXF6ByHxfLohtz22J1TUwsL6iu", "t3gxDHAf8iW7xBFB7JsScngfJjH6h3QBfot", "t3bn1o8hx4jYjxgC8Pdt6Z6oeFrPQPtT8pC", - "t3XHGtWbALCLfY1jAtkUpVELPJMZpqxBtgE", "t3RUBEzMhjHpM2DQLsAmpAm9ZUHUxnEQAtM", "t3KdS1RGsiDXBKebyZvwVE2pfacNj28KLqB", "t3MmVaTutnXLqyD2F6EKnDtCKs38HxkVAdH", - "t3LesWouCkeWkwkaQUoGnD4k1pqmn3AYkt4", "t3PmV5vRVByLMTjR1W8ZCp2xy82kpb6n99u", "t3KX34whzndhhxPKJwAyETkeVA2Q1TzBhor", "t3SPSmxWnzNYr7WQooNxkHMhVYdAKY6M5Dr", - "t3KpcuJDA82TZhJoygng6eq72LWBCYtp7W8", "t3cHewjCnajURPGXA74kdLUkcqtRWpN3QkG", "t3a3zS49EqTFJWfDgNQhTNNFjkkhveqQssP", "t3eunPgNGpcSqEUSgAwip3Mm5nYQcPvacvX", - }; + "t3Vz22vK5z2LcKEdg16Yv4FFneEL1zg9ojd", /* main-index: 0*/ + "t3cL9AucCajm3HXDhb5jBnJK2vapVoXsop3", /* main-index: 1*/ + "t3fqvkzrrNaMcamkQMwAyHRjfDdM2xQvDTR", /* main-index: 2*/ + "t3TgZ9ZT2CTSK44AnUPi6qeNaHa2eC7pUyF", /* main-index: 3*/ + "t3SpkcPQPfuRYHsP5vz3Pv86PgKo5m9KVmx", /* main-index: 4*/ + "t3Xt4oQMRPagwbpQqkgAViQgtST4VoSWR6S", /* main-index: 5*/ + "t3ayBkZ4w6kKXynwoHZFUSSgXRKtogTXNgb", /* main-index: 6*/ + "t3adJBQuaa21u7NxbR8YMzp3km3TbSZ4MGB", /* main-index: 7*/ + "t3K4aLYagSSBySdrfAGGeUd5H9z5Qvz88t2", /* main-index: 8*/ + "t3RYnsc5nhEvKiva3ZPhfRSk7eyh1CrA6Rk", /* main-index: 9*/ + "t3Ut4KUq2ZSMTPNE67pBU5LqYCi2q36KpXQ", /* main-index: 10*/ + "t3ZnCNAvgu6CSyHm1vWtrx3aiN98dSAGpnD", /* main-index: 11*/ + "t3fB9cB3eSYim64BS9xfwAHQUKLgQQroBDG", /* main-index: 12*/ + "t3cwZfKNNj2vXMAHBQeewm6pXhKFdhk18kD", /* main-index: 13*/ + "t3YcoujXfspWy7rbNUsGKxFEWZqNstGpeG4", /* main-index: 14*/ + "t3bLvCLigc6rbNrUTS5NwkgyVrZcZumTRa4", /* main-index: 15*/ + "t3VvHWa7r3oy67YtU4LZKGCWa2J6eGHvShi", /* main-index: 16*/ + "t3eF9X6X2dSo7MCvTjfZEzwWrVzquxRLNeY", /* main-index: 17*/ + "t3esCNwwmcyc8i9qQfyTbYhTqmYXZ9AwK3X", /* main-index: 18*/ + "t3M4jN7hYE2e27yLsuQPPjuVek81WV3VbBj", /* main-index: 19*/ + "t3gGWxdC67CYNoBbPjNvrrWLAWxPqZLxrVY", /* main-index: 20*/ + "t3LTWeoxeWPbmdkUD3NWBquk4WkazhFBmvU", /* main-index: 21*/ + "t3P5KKX97gXYFSaSjJPiruQEX84yF5z3Tjq", /* main-index: 22*/ + "t3f3T3nCWsEpzmD35VK62JgQfFig74dV8C9", /* main-index: 23*/ + "t3Rqonuzz7afkF7156ZA4vi4iimRSEn41hj", /* main-index: 24*/ + "t3fJZ5jYsyxDtvNrWBeoMbvJaQCj4JJgbgX", /* main-index: 25*/ + "t3Pnbg7XjP7FGPBUuz75H65aczphHgkpoJW", /* main-index: 26*/ + "t3WeKQDxCijL5X7rwFem1MTL9ZwVJkUFhpF", /* main-index: 27*/ + "t3Y9FNi26J7UtAUC4moaETLbMo8KS1Be6ME", /* main-index: 28*/ + "t3aNRLLsL2y8xcjPheZZwFy3Pcv7CsTwBec", /* main-index: 29*/ + "t3gQDEavk5VzAAHK8TrQu2BWDLxEiF1unBm", /* main-index: 30*/ + "t3Rbykhx1TUFrgXrmBYrAJe2STxRKFL7G9r", /* main-index: 31*/ + "t3aaW4aTdP7a8d1VTE1Bod2yhbeggHgMajR", /* main-index: 32*/ + "t3YEiAa6uEjXwFL2v5ztU1fn3yKgzMQqNyo", /* main-index: 33*/ + "t3g1yUUwt2PbmDvMDevTCPWUcbDatL2iQGP", /* main-index: 34*/ + "t3dPWnep6YqGPuY1CecgbeZrY9iUwH8Yd4z", /* main-index: 35*/ + "t3QRZXHDPh2hwU46iQs2776kRuuWfwFp4dV", /* main-index: 36*/ + "t3enhACRxi1ZD7e8ePomVGKn7wp7N9fFJ3r", /* main-index: 37*/ + "t3PkLgT71TnF112nSwBToXsD77yNbx2gJJY", /* main-index: 38*/ + "t3LQtHUDoe7ZhhvddRv4vnaoNAhCr2f4oFN", /* main-index: 39*/ + "t3fNcdBUbycvbCtsD2n9q3LuxG7jVPvFB8L", /* main-index: 40*/ + "t3dKojUU2EMjs28nHV84TvkVEUDu1M1FaEx", /* main-index: 41*/ + "t3aKH6NiWN1ofGd8c19rZiqgYpkJ3n679ME", /* main-index: 42*/ + "t3MEXDF9Wsi63KwpPuQdD6by32Mw2bNTbEa", /* main-index: 43*/ + "t3WDhPfik343yNmPTqtkZAoQZeqA83K7Y3f", /* main-index: 44*/ + "t3PSn5TbMMAEw7Eu36DYctFezRzpX1hzf3M", /* main-index: 45*/ + "t3R3Y5vnBLrEn8L6wFjPjBLnxSUQsKnmFpv", /* main-index: 46*/ + "t3Pcm737EsVkGTbhsu2NekKtJeG92mvYyoN", /* main-index: 47*/ +// "t3PZ9PPcLzgL57XRSG5ND4WNBC9UTFb8DXv", /* main-index: 48*/ +// "t3L1WgcyQ95vtpSgjHfgANHyVYvffJZ9iGb", /* main-index: 49*/ +// "t3JtoXqsv3FuS7SznYCd5pZJGU9di15mdd7", /* main-index: 50*/ +// "t3hLJHrHs3ytDgExxr1mD8DYSrk1TowGV25", /* main-index: 51*/ +// "t3fmYHU2DnVaQgPhDs6TMFVmyC3qbWEWgXN", /* main-index: 52*/ +// "t3T4WmAp6nrLkJ24iPpGeCe1fSWTPv47ASG", /* main-index: 53*/ +// "t3fP6GrDM4QVwdjFhmCxGNbe7jXXXSDQ5dv", /* main-index: 54*/ +}; assert(vFoundersRewardAddress.size() <= consensus.GetLastFoundersRewardBlockHeight()); } }; From 2f5d62fe32f0426500a9f66ccae98c54d322cfae Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Wed, 26 Oct 2016 20:34:33 -0700 Subject: [PATCH 147/165] Remove Founders' Reward override from #1398 --- src/chainparams.cpp | 8 -------- src/chainparams.h | 2 -- src/test/miner_tests.cpp | 8 -------- 3 files changed, 18 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 492c26f42..05eebdf3b 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -398,14 +398,6 @@ std::string CChainParams::GetFoundersRewardAddressAtHeight(int nHeight) const { CScript CChainParams::GetFoundersRewardScriptAtHeight(int nHeight) const { assert(nHeight > 0 && nHeight <= consensus.GetLastFoundersRewardBlockHeight()); - // #1398 START - // We can remove this code when miner_tests no longer expect this script - if (fMinerTestModeForFoundersRewardScript) { - auto rewardScript = ParseHex("a9146708e6670db0b950dac68031025cc5b63213a49187"); - return CScript(rewardScript.begin(), rewardScript.end()); - } - // #1398 END - CBitcoinAddress address(GetFoundersRewardAddressAtHeight(nHeight).c_str()); assert(address.IsValid()); assert(address.IsScript()); diff --git a/src/chainparams.h b/src/chainparams.h index 853a43e22..ecb4f94c3 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -81,8 +81,6 @@ public: std::string GetFoundersRewardAddressAtHeight(int height) const; CScript GetFoundersRewardScriptAtHeight(int height) const; std::string GetFoundersRewardAddressAtIndex(int i) const; - /** #1398 to return a fixed founders reward script for miner_tests */ - bool fMinerTestModeForFoundersRewardScript = false; /** Enforce coinbase consensus rule in regtest mode */ void SetRegTestCoinbaseMustBeProtected() { consensus.fCoinbaseMustBeProtected = true; } protected: diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 5b21a3d35..955c37a80 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -138,14 +138,6 @@ struct { // NOTE: These tests rely on CreateNewBlock doing its own self-validation! BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) { - // #1398 START - // Current test data expects to receive a reward script for the address - // 2N2e2FRfP9D1dRN1oRWkH7pbFM69eGNAuQ4 even though the test is run on mainnet - // and not testnet, and there are many founders reward addresses not just one. - // When test data is re-generated, we will no longer need to do this. - Params(CBaseChainParams::MAIN).fMinerTestModeForFoundersRewardScript = true; - // #1398 END - CScript scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; CBlockTemplate *pblocktemplate; CMutableTransaction tx,tx2; From 2360dd64490edfbbd8d31a0e8d6cfd393e7428ab Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Wed, 26 Oct 2016 21:03:37 -0700 Subject: [PATCH 148/165] Regenerate mainnet and testnet genesis blocks for nMaxTipAge change The regtest genesis block is unchanged because the RPC test framework has an unspecified dependency on its specific value of nTime. --- src/chainparams.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 05eebdf3b..bb58ead31 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -42,7 +42,7 @@ public: consensus.nMajorityEnforceBlockUpgrade = 750; consensus.nMajorityRejectBlockOutdated = 950; consensus.nMajorityWindow = 4000; - consensus.powLimit = uint256S("03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); consensus.nPowAveragingWindow = 17; assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); consensus.nPowMaxAdjustDown = 32; // 32% adjustment down @@ -84,13 +84,13 @@ public: genesis.hashPrevBlock.SetNull(); genesis.hashMerkleRoot = genesis.BuildMerkleTree(); genesis.nVersion = 4; - genesis.nTime = 1231006505; - genesis.nBits = 0x2003ffff; - genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000000"); - genesis.nSolution = ParseHex("0025991209a4a7952e06c65febfd76424b11df202714b3e2083c8598a9083f098459638b2b0d269efcbf0d72d9fdccc92045835652ac372d51d0e23dea6ea31a7625d3c686a5f549aae270912751397f10bfcc89066e50df029f2fe9c72f41dfafc41beca6e9a9c21f2f903f234460610f1c01c54802b8f4edb5611263ae57a50307db731787a281d65046ea7619bc86b515e361e0d4d6e427970b72880952d9d2ab12783498cd5f00b895ab47cecdad71afb53db474875a6c409a863140b73d39d25bb034fa1ce7d4084cba721953de7de0141a1342cbcc28933d52d22624c725ed4a53b0920e29b93a9314e317abe1e1da0af153d8cf05579c2226021a21012872a903d9a5a2e15fade995d2bcdda25c1795cdfc021cf107b3aaf3652b5073de526356de1d09781c6027ec77c9a5f249b98dfd23fb038178aaf229558a30e94e32d9162d073e12ed988e1f1718bb7d00ce6e6b1b2ec8d97719d52e655781cd8279b9644109252b20210f0037696ed1b878cbc8f6b4db95dd1d01c6c53ec18fb4d38526c45a8bd163da81a6df360534b62267ac35a053c7abb5b40ee5a12e2fad1b61940e7269dcf95b12d7eabda16e16c1d5c5e5c015e19723f189a4e5a52161e4c842f4d869028143474fbb5110ee1cf0acf3ad1fecd8e2d58768633b55cb1ab8c518e5a4954ac66fdaffcd93d1f6ab0af4fc885ef15908b1c65a80d31475b868b57c8239676ea288bceae4190781906ecb5dd0fdc3959f0fbe64ea5f3f1f8c030ceafd4feb4c232fd3d4a19711d359051c62ebdb2b2ebc361a34323a25edbe9705f46571c60cfdf327c618a5529a6aea5185578ce1d62543a52141de8e52b819da2ca3dbc89d62db077200df2ceb3160664ff18e1b1cdbbb9cd1e368a3bed50db432202eb204dd186920bfce44c74eaaec7afe4284eab4ce78ef5b78cb9a009092f24ec999f3d7ae71e4dfe559323e5f76d99d3ebf4a663395b39f9657bd831afdab3f9f109ff2f003fe44734054a3c7915dd4a7de4dac7dcfc0f003532a913d2925e0edfd32b043284f66d93911ddd7e591031771fb4bc5d7a058fc519ee7a1a8f87d3a9fea42181da2335e37ddbde6c235425971f81a00743e9c210ffcff2875e8a191d8d2d381efabf801d7887dca33189bce10fb919b214f94a3047eb503d503a61fc76d086d5f1c1d88a663ecbae576f66d6ba1867a3ae1bd28f37c3744e5e72fe022a8eb4349b63edbbddae9291665470af215f63d506b12354a5ff0a332543a8bdf4d3aff12555aa237957939c2be676c4b11233948851823dda4d2d7c421af7241ae8dabf5ce25befb11e62c96c5c13e512bb91cae854e70b3c8fdfc727f117444bafeb9b4dbf637a297b63227cafa7e611c3bd3be507d6e756d6da7116d5eb761f76e0ec62f6a32c8d30176ac03960cd7790d6b218e89a215b86440c88dd40870b853040d8d2510ef918551b86e312f230c475702ee274271d9f9c4f0f880a5c43a9572a1b61dcd290e0d1231c3ea76f5f718a3481674297cd3eaceda2a05868bc0690201d506c8d25137a266daa5d216f7f2067e62db9ba8f841788611cbe5af6bc9532df1fb7b22e3be8e4713f23de2f692b271ffdcf4f43e0838942c9716ae8ea75f97d47ae405967977f6ebdcbc33e408163d8c504e1a6a7828940e44d66b816113fbeb5b24d1f42bd9e0c33523c5d4720fdea6c9a3d634029b1126e96b9945a2ec4c3b98c08b78e262daaad9ceda2e31e99c04507d557cc2077fda6f8cefb0a7df121a17778ea7a336ff17c3132627675d69d69b17da698b2c5756585a731f17c2f97332981efa598c66cfd1f93b61075427e578f57906946ce25a8f1a56c9fffa673fded26154990b27a8a7162e86e427cb50743bb4e8"); + genesis.nTime = 1477539945; + genesis.nBits = 0x2007ffff; + genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000004"); + genesis.nSolution = ParseHex("0198aa48905432f1be8fa21b207962b0aa694ac0490b30beadbe967576da5fc277f3590ba12c8d787f6b031e48ae9a588fb3f85de6b949db802ebcb59dbea00bada27db49fc4330af8d185b923bef5bc6b7cb1b6043ad2bf3f885ebd3b65c276adc7bfee3ec4dcd10f1551dc32b7effd23f88337499bc0a8ba31c5b913b12275d9b2c0cf2e64f24cf98dcde0d287acfbdff4772e5fd33342911618dbde042ae3da5c9a835a5ccfa3073ac0474309234c548df2ecfbc4004a7478d71f22119b9174075b586b5c80061cb1475486ca7fbe732408fb30f338506d46e022967f6ef12a1e12199bd7b858a6bc7a92209ae3670635b11dbbb22efbdf1edc990a3459d67fbca1affe7ed44807568f5a2cb9d2173b170b58bf23d1eda5390aa294baf3dea3586ddb9c660d512e1cda9cd435a52b5b72acee6ea6e6cc3b4bb71e388dd1dc2d2fcbfc15a3382eb65855a395f900280358a3b474cdbf0f0d32620207ecb033b7777dbd3f240afa0cafea3803d953b6021b73a561a976192a5d0d80bdd310ee3c7dab64b4257bd365ff2fd37d226d38d61732ea55906b7e8466e289f331ea23db71d2880baf7f13df97ffb4fb0a76cbcbc9071271a936ae1d1c01538a344b44cf5d348ac4876fbd12fc2a7a0b4830398707da3a327fe24379cc147873834a7c9aa4014003928d1f7b0abdfae458a115f85f3e2aec7472440a63c4c779446b86deb400f999dd2d608f7c556f2f2361c95c42183a6b7e19228e161d2845c538f334de103f00995beed3817d0ce476984da3be5531372c362fc38f42266140c34307189d7bdebc8347279d0c2d109bc23f06b59cd3b04af3c6d47c7f863f795a7b6b2c3006bfcf0b1a4774c124d157661c21dcbd6faa351123732106c9b728fe7bf42fe5ad25edcc743f7a9337c0ea83021beb7bda29148b223f04bbd45fff87e701dce0e8bfd6bf4d379025219b4707da27c35b367d5321558e4fa57d1387b738f13261c82a673af4958704f95edc7f0bb42de4cb96e523565dca172cdd95d80912b50a338eda932b18429baf68c591204a1cb8110d9e9a260718796f2286472e4f7f5a5b5bfb9f86772b90626cfc9c5fc7a114f68523ecabda0c8dbc255e17abcd1f5d15a4f9ab2bf33c0dbaa808f9704e263b1bc4df913152b832e68d668314c4d6c6f6b51eac700aa7e4b52f27cf236af871c7c915088510e0b1f1dc1d1920eae8489e6b226df46ee57beb619ef67bb0e40b701866bd1eae9ba315c4cebae585edafdff35f483788cf14c88e78150910438e046c992d1bb529cacd19c0fc59ecfb0235da22c69f5137f09a6ffbba4106263ebf00f1977d1dc43753aa8f2c2d6a33f7d1a4b82a4fdd5090b71ec7ca14c3b876da9f739c34ff4cd356f2cc6d501c85e771922581d6d645123e513a835401f6cffe2c4a9d2f2dd1898188cffb12a49d769cca1f425efb4c125f779fffd32ecd392be182337a7f2e0c4b00626389911d0070b38f0ca1d4431b7b1f38810fa059be149baaaf9121a1c82abf6fc78a4abd1754130e8a3599d1ce24c6c61176316c94d2e3a1395c70186956348b96eac1f472a2f5185939c61706bcdc9516dac41678de129dc73222401ba8017cf3883a2eec2d879f915a31d013cc0f59f5b9fb6b1b1dd6be000f04fbae171398b6e75aca58405eec660f0da51920cf18bb817c20d814012869d545ed3066d5adebd70e5c0f78d4f21770c8dbce9e31dc291e0fe22a0dbb74b82b249d1cd70c49bcc53b27cc8afe077e8f74dec35007a34dd0918e9e0d976384bcefd1d3472929daef9a3f663532d7a949c7f26584db3b2fcde64dc2155fd11549a16d100da0a8e32e2961d276f1beefbf7a993a2b87eb4495673dc9d15fe2c7ad9c61bdaa526e3d84"); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x00982212b34e545f873e3ce30b0babab7d2acdedc52867b2bee24a182538633f")); + assert(consensus.hashGenesisBlock == uint256S("0x055e4f392d6d63715db7b42e70a43c1faf99d5959a8e03ada11ac34a03e78667")); assert(genesis.hashMerkleRoot == uint256S("0xdc6c10ad2a26613ae9b8a156ed9ca15e3e355a994a7e32cd7a4c3d7a478f57d2")); vFixedSeeds.clear(); @@ -204,7 +204,7 @@ public: consensus.nMajorityEnforceBlockUpgrade = 51; consensus.nMajorityRejectBlockOutdated = 75; consensus.nMajorityWindow = 400; - consensus.powLimit = uint256S("03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); consensus.fPowAllowMinDifficultyBlocks = true; pchMessageStart[0] = 0xf9; @@ -217,12 +217,12 @@ public: nPruneAfterHeight = 1000; //! Modify the testnet genesis block so the timestamp is valid for a later start. - genesis.nTime = 1296688602; - genesis.nBits = 0x2003ffff; - genesis.nNonce = uint256S("0x000000000000000000000000000000000000000000000000000000000000001d"); - genesis.nSolution = ParseHex("00206211d02ae0a9f111f32b83725bca34081ff8640a5782bc4e8d60e306a7128f5d48d37e93851c61fc103065cd85a59943a364e38f1dc1b14242af5b21831864c6938faae7d5f1ef23124f514b592fd63ebde70f771709d587887080aec110a1740594bb747fb9ef143722a94b13394bf8a7a256bb471371aa440fd7ed107c058413639c89268353bb609f97b2c7365def1d2a0316b6f89dd317a4312a07a67e59ab04647fcf00015a0d40a5c78a9cc60b22be495713addb8c945adf2830fda88b517900fafa9976917edd7ea673fb12340279b7733d06eb284a48b0b39f8dda397f4779df2934a4a1cc7095f854e9ae74890f39ff3d9cd4745e4a0269ad941f6f195bbdcb929023364c3a2ce33af6715a218b1282a28e2f8c28075525dba772e4e95d63f5093ffbd1b499b0233427b1e21eabcce4c7b65b1f570b564497e9d7c88b0f4d21b09b2e78e74dd99bf2d902b08a50f1dc718bdb7893bee8c490127abb3a91d944145ab08e19e4259470365d8460135643aa5bf4020f566250782b11fba024b2332c596aed96680ef49d444a870eae5ea3218bc5b65a9e481dd70f3eff81c80b56be8aaa109fb555aef367961ef58338cfff8e5f13efc65daf246fc5ab45016b2cdc761932953b46f31c39d2b292971f77bbfe8461d13598876b6bbeef552495b9529a91956b3262741f6b250c4a3247fb656b07c64349c1cdcea7dddf24f28fb97ec69e76d6779125673e0110db2a61af8f72ca9a4114d93e1eee80831f87eecf001de2fb33c716e7ac68281e897ad6d4b737da42c080d4717eb17ee7eb2ae2e3762c11bebde107f84b79e596b6b97237e576a4b95a3f1758bef2ba0cfbb44da9f4b641ddbaa38aa56d88521aca5b8d382749b25b16cc5979c95b82e0115e0cca1fb3726ae637eddb2d3b14616fbff816afa25cba12a9231fedc300a2bff8e446c68752055209a16cf2d16af5363ebb4411a43c0191cffb2f42a8cb4f6b4b1a96cc190f02025719eaf449dc7ac83aa1e8829cdc909efe6922dd065109e407db885f6923833ce1e74a3511a6da28a20f43eba46a21594de3248a9b726bc5eebe76fb592f1955c6bde7cdb04b1d7666824cee2906d9f757a5a716f54a42f6a3fd59b36e92b44dcd5b325295b5cfbd227ba3f03c4a1765df12827484c2b1b8a02586d8c2048bf651e2d474450f96a5bb7c3ac0760392d8c324112e0b90cf652779b116856e0e71a3e33ed47ef2f41cd445781047e86da04a41df294ba208d76a15827e1cebd3329763ff45a9f512dfc43ada1db7bc1b357f120645cfa68f47992c128786526459466c08b3f54e5a3fdcebcf33b981f5b5d88f32df9e1e444bf970c320356f7f8511ae0b6502f519b3d8c41eea4a3a7ca2a0096df56fb5fa09d774ea3524dd9376b2c4f837e300c3411b07238e532d0f93ad16defd9a42737c814704544ab5742fdd21c84bf3f3f4e76201ba6691f639088f10fa409d91351a338672f9f279dad2701efa253807ba27296d851fb007b38476a9d8f242903ee620092a61d3d34357b5249c84453e370c89f53d33d9800dd0834f3d58943d4f12855077e3e3755eb3b38df73f68ae258616ddc9d385a80d09f9a9a21a42126e7b437a4aacfed26cf53c8d480f0e4b6f3b16f3df322303198649ef4d4f8d779a61c705edb7b17d1fdefab118f60e48ce62376d963ad69af5c1ad225c003f55201132b1a2e15e248cf947019a64d2767d99adafa2b71cc1a70698d2b5dd14f8c548e7ebe0be9c82f9435f06c95cd912abae35dae3935e92486eeb25539d733239773d7a55e07aa5ed29781bd246a48ac961bc1bf907f3f2a516d353ed0cc0b1fe3ede9dea60077ba1745272ecd0ade27581e362a684175071d2e8f39af430"); + genesis.nTime = 1477540580; + genesis.nBits = 0x2007ffff; + genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000007"); + genesis.nSolution = ParseHex("0022abafa365a23d879386c149729cca485979933d236f89a8202d0adba38fb3e08e4006494007b5a70608d3046c839d4a457b15b47397d49661feccdaed4516b4e34990c8f747d17a568cd8bcfd3a555136de9603c5d58933a1a4d34bf8b0bc7f1fd650d6ae5714b517a9afe01063a9312c4a91e15f763a7d5ad50d174c0f953e530adc50d1f28a023cad638bf552e59a4a6835119af649dd64a58289638f3dde370d6291f662c0032b32cd3755b77715c1b18c91583c1d190191b554149af773a09b1823546172fda11e0a4907854ac6d70886f28b1396d1d3e9be818f24aee3ee508bbb82fb38ec3f0ee0104f7b047c860265db138633c194645715085c2059a57b43891cc1acd2d5cc4c8bf8874a452a1ecb4b1fcd6319b10818a02f59869676111566881db437129f536e89818219f7c1e736671d663cd44c650cdfb9629b300d9c40f9d80f7533ae788a5f92d201828a1510c83024e907d73f0cc3cd2e7118beac170569efd6e891adc71ce3e384806759595d25cff23e32172a034f99f4df984ff32e05270f8dbb1d37df9b37c9f2f607e0ba8554c736eaf5d1de2239de7d0eb0069f1e3323d084a490a9027efa6644c1145b13ede63136e4332e148380fe02b5fcc37a278a5d9a571eda069faf3d39097264dc37e4abd6c5b0aded97d881fa0ab1b3158a06b896f4a2d6b7dbdfb525f784ddebb902bb496814d115970a95a1198fb80fc0855b6897381546225a15d9bf09221d873db8cfabda7f33f8ff5c197d3d6a3554fab16408499869e6779e674dd58ef52d2d2ccf83e83c2df25d9418b23b90cd53bb1c5b58049f3204ed878cb7da0f50c4613f02c4f480b069520644152e55e9efc9c4d0540524a345a7b64e5e2e891864c6f69aa2458fd61114e4d9c09555f4b08fbad22d85afc62c252bdb9cf9e64187c498e281223a3f4b042a5fc3a6902e076141f16156680b996b6e7fbb3b22dec413e5e8e67f4d1338e87de8a8328f65d5fa85445fc65ad129ae89d9b97ceae5746177dca89fdc426703a6031e63e9abb3bdd6cc04f117171d685ac2a30d44b90cf9187041784da60c0950048ea83e9b5f0a2c574eadf3cb8b83e1089595c9d3902665f934cf852c6a55e94fd4e25100636313a4d04ad527b7be47293db7e44de39550e3614066b22d630d020073d1f57c05eb5cb7ffaf7ae780c05357c8d6ebf0fddb9e4ab3123b6250c8b619bbd6f5f7ea4b5f501e10bab5680c1034424ceca0fe39764d23e98cee4f1f86575cf0e82c40ff7bbcf2a3a9dc9e02d8f8628946700cb5c68d0a1a6090b8aecabfc37beaaa1a7b676730f299ea051eeb5bded2528891ebe3a2fdf92bfe258e863edf1f10e9cad0821daa7ef177d24f93f96058a059529fc118d34f23182209e97efc7486dfdaca6af3071dd544046611c89d7095bbc419223f5c29a57d556f91614e332ca9e74a583841bd66ea6cfa6086c744613d875f07c0312c700241fb61206533c84fa50f2cf8dbbf252e8a3247b51e3ad56305b61123d6a69eb8641870a005ba3faa048ae054e43942391bed3265bbae567eee16c5c6539b2b66718a5b61841e200b14e465f53a13190a43ed4d8ff324f0e6fbf4c3e8c6938ac2dde8ed3641d4f8c3fbce65fb0e1b0486ede3431a00bd802a055aeeaa7be53aa784b4a3eb1558c4f1f293d6fb7a2f0cc7d33028bc6d5421232446f7a86cdb4a8d21a21a44c77e98987222c654558e56b9c4d769d7bc035021bfae25381f8dfddffa87647274e0b28ec7b8bc1b0dcfca73c922409b8c75d282faf2759cf78e54f578486a8498e726bbc7a83e64acc96d41cdb80336bf0b198b46d50817faedd560c404db47a43a3f21f795912d0334bd41599b8b1c7634c00feb1352b6a558a331"); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x01f4137ae8aced18e017119ec1a5ddd7f29a163e84e5809eb37aa6bd736b86a2")); + assert(consensus.hashGenesisBlock == uint256S("0x038a2d378418e20809465984056d15d04e7b32a5ab0956a3b448ace885c22a55")); vFixedSeeds.clear(); vSeeds.clear(); From ab3225490976c017bd09f747feeedddf3acb701e Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 27 Oct 2016 00:10:04 -0700 Subject: [PATCH 149/165] Update tests for new genesis blocks --- src/test/miner_tests.cpp | 220 +++++++++++++++++++-------------------- src/test/pow_tests.cpp | 4 +- 2 files changed, 112 insertions(+), 112 deletions(-) diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 955c37a80..5c26038e8 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -23,116 +23,116 @@ struct { const char *nonce_hex; const char *solution_hex; } blockinfo[] = { - {"0000000000000000000000000000000000000000000000000000000000000001", "015cf310f515405fd8647301f77b7d864c4f978a180405c8f50723891dd8ee06c5a15c25f9d42b978bf90170216d8859eecf320df1108f2b2e7eeb28bba20607eacdf6b945453883b8b205c2fd9079295bdba1c2023767120a84f8399d1f413dfbb0760ac8aa1821db2cb31e02c356c83dcbc6b5105f33c7a145a1719d9602ed345242dc1ebd23f913ba6ecaf022354f3c3f1b341343d8aa19c471a3791607b8e9c56dd7a492cdce0982c99614852258bb7ea46189ab98f6098eba9b860b2ca470628f58bb756af23fb54ef5bca1bd9625c70cda5e4ed7c6b30fcb4217d218f140aabc11dd037c1d24abc7196581e33943a41ce6b928216953b398c90b62954a8443e7b700ae81bf342ebd73798fded94f2d2a5b335fdd5969ef571637e340478e378a5938e310e6d78c50cb8a106b74e2a11d1ac87e2e50fd30311efee261dd8ce7954766c7cd5c5ceb3a8044be23c2024ea41e59c74d4b375f23ad49f079bd03bb1fe43a195b7232a26b6431f0dd241682a8cf16b1013f192e061ceddc99d8b6b9dfcc51ea407cb4edfd713ae69f101cf98c9da3173fbd8a37707948c4464cd0dc5679034fb0d4adda6963c75336a5f7c0811f6372bc1c690cb7344a7320e177bd6e92504b327b529986bed8f829ee740f609b07590e6127b115d6d89763921ebbe24db9ad9bf4b27d9f9a1a7642285d7599a37e57bf9c04670659d088cab86e63827dbce03fd4d1cdaae953262b2d924e4a49c07351f2cb613e6bc9a4f17343430ef33328199761d7062867c7d93eb936d5b13c989916545a4ec70ec65524eedb5aee5e0d3711b5bf7ae410095c91da28b13ddf1b82ccf0398eb5bd4134a317134e6e34435556a0e335e4d7ab4ead224efa3d9ff61b366d4fada4426d644372ec7fc461055f17970111384e1a25b0d3c1cba1a0c3ab527d01a55ba2314d0f02a542d5afd8cdfde8e5b0db14d6f42c4c59111bc26d2314ba99e80799a6c4f7368a3e1989f00faf972006ac87b225ae9f579e73b0f531f448ad265b942df509e7ed6a10d53f83877d34fa2a3a76fe1cb998301e17f989eb348b17ddfb7a85fa3778d7024762b870681eafa70bf59e09b8fbd78235bd7c39ea970c18747335c0b47fa564416d570644062837b2653af6dbd85e5a34c624df998a155ff8d751b3771bf9e0495052b505e971323f08e2bc49e3a0640b8a8f348807af5a163e03cad18c2c7931b3eaf66adee96d8b67fe1ddc860bacdb435a8692298035f15473d649c964ddb521491047958c12085f53f05815bf21fd8d5a97017ff80908edc538f248d04f56b698005268092695c299cfcf2e4b77965793e4ff80def32c0de86ebb0e03bad9360933776b714d2327243e84846959fa95b431afb05633620c8ed1d2013907df9605945daa2df146d1b5a20511fcf6da86c871e7f0765b4eb6beb6ac22b7f80e5d9be5c868de756f264b65eb80b9ad8e5a761c425a1417bb16b5cc33a6fb260444cbdf27953aac1507b423da6bdf640e2b4f68a373e546541af9f7a318b7620e7734fe8a849173cb673205824e8d82ba835fd6f351b1ae537921e35d9be799a8e77d4476ca63187173114ee2d8a1e16d758e84b281581f2b438ebd1ef6913a61bd927ba0affd576e83cde2e41ec718dc3a855205ba34c35b4b5ae9167661dd7d5965be10101e4cc50ff97db584d550a51c2fd11d163e9d407c0bb045f42523a28853233c1b20b5c4fc09d8ec414b7398dc252ac1920105eb26d9960c968fd5f72e0ae0cf1df2dd0895d96f5fc68fa9ddf959c374574aea79adf827292d73bbc43419b844fb21350014cb971f3b143a64ff16cbb29c10b97e11d04c8277ee9fc9caad3c5d531b2ea7eb28df9921bb49b0d3c5ffd43a6937f534bbbd"}, - {"000000000000000000000000000000000000000000000000000000000000003f", "00a763b9bced1e7bb574443c2eafcc81e78b562be944338d24f4fb1d7deb2aca517cd93f5328c49fcf902bac1e50496dd29bde870628aa4ea8d9f679f186274128ec29f917c859387ec42b7f6898455b04afcfb00b98b4d2fcdd397dc19cc3876cbcaefd0d68ab43750bb09d703b83ea9eb06be1d77cfa50fdf3974fbaa80b990e24f50a9441c9ec819f9beeda1553378fa04b0c14d2c1764e7843cecac4072027fab5d82f364ce203872f5faac94419209a28c41e5706eb9146bc8bf114cc0934f16f42e58a66927d929711d945afcfe59f0cadef167e292623d37012c1a9f70d5bad59be7ec31edb4bbdef925881988e12bdcb417034f2483f087a05837a242c9a2a37ab018489ccc204e948f7cee6f6553224c8a1d5f04573a7a5e1e34d3729cee39617b51691f94448558bbaf8a0a2f73b3829496a445a277c23bc1203981d7f497d17d300bee2a4554d3a59ea2b00ec980eb9e26bd99da2568a6de1f18a6a671cd0280868d5a1458e1df8736aa327f8f29c6963e418c8400835a6265ae9734f7974941be5e629fdbc4b1204c37d4395d513232daf4c7ffbb556637b0b11eb1b1b1e078120bb484374f3c128a29e19f8ad01acf6d5cb412fc324ed8e658d2daba383be60da868ea754d9698f085f79bc936707b761c5f0dfb8f4687888116e9450171bfe62a7983261e07e74785130a2266a4ab52e160137e4c3a25a25ff205815ac2ec7077e09481ede5b04592e3c0ece63b6e63a33e336d44de9ab655316bd1762fd5f4c1c851940b4b414cac56f428afc19cf08361e4b50d555a53928a49503d659a5617d08383a1b064647f852c1b1e12d8ce174b39760acd90c48bf8b8dc75d486aa90407535e0c0ccaf97e4f5ab69c1a8d69db8c2137eb880f750a67ff9b5160f793f85fdf318974cff430e6d677888f0b7087edbc8bb9e63f3b2a047b662d202e3bffa43f355b21f77bd5ba8199070d15a55785055252851f7c4170d292cedcfb90cab7f10b296d892366c9c1cf4f21c95ccd91dccd51475de537a327ebbe27c905d8cba4656f72c5ed98735c109e0fc456e89f08d55cc5e651274767684132a08de9080ffbd76130447373992c12ab075c1761ddacbc9b99143a531196ac1545d6a9724214e7baecbca5b81920163eab022555dcdf6fef62fe087eacdf75bedefac50e5cc0f3eec7831faca0d229117a80feb578fc2e9e638826a4e9b659a3c3165641544058f9973d916878193de8f9225285092d0651eded4a4e3933312af563351aec2901777101f62c7a455e7ccf1b2b6f7a771e1580d408a460f623a28415fc1136ba361b1859b52c31224a35406479435d05a5add6ae0c05995798b3da369c25693d9dbdd3655068f2e34ad0571c199f727b3c06a29266799741d7d1c6ce4447a3e786a93cf5b105470cd56906b573df1e62844d6afbf2a808b8a6b810fde3d29d84cde4f03ef2fbf9d512c6191e9e913e068ecd18edd0476d788fb12e7ab811a07b40f5730a1becaff21a12f412e925c255617654d715f25b0ef405489448eb32a529f7d865c0baed538225bb3dd1d306d30f242f8e92c93fa1a252d733c8ee4f1995d42023a97d21c3e90a2dca49d56214c47b8687a9567b1032c1cb043f6ad3796703033614c5d73d91a035040a0e1da377f0a20ffdadfb07aee875764b04fdd92760a8620ff36fb18ec7f5db9c90d2648c3bc6bb3f89590e2deaa2b01bda4d0704a40e9dcbe4ed6fd79885301ba7013b96253de768efa218969184c4ec4f3316451292bd775ce1406314838650dc779356c6107be7592976fd25bd62eadbf25ec6315fc7f49f0f5ffdd7ef1a01b66c522c6db9abefb25e2ccdb3e8c07da724ca1a2fb3a972656f7f4d87823ecc57b9fdec1455dd2f"}, - {"0000000000000000000000000000000000000000000000000000000000000066", "00a147e67d83aba0bf1621106ba1fe335e7afc41c8050146e0a2d8f8612a8323ef1c7a77672025ddd4f51128f3fb8e71dc1fc6c0e1a3a8200c5551bc1544351b4205599c1b2219c3e70233477ef504d01152ede501cdc9275f7b2fb7f18cf8f5e74fefa6626553e70f18270db7a321f8d7b327c368022d4602c969dfd915026c5abb85d45b02c951224030685f08de9f3dd1ee2f276bcc8428a2d36721d6f4153886722ddff1c6fa01a13a80506d1783a27881155b8e3d246e40b514031fda412c6d0d4af5f668e8549ad1d53ee8e4ddbfb8032c6c1facc29c8930416178d494a41a5d32db01a60b0d4f8eb483728783cec32f0ade80cd2e03cc1321026e33804ac0be0156e2b3f61be385450157a9a95f709304ad88e12551138e38bb7957bfce65a47b60660353b3d40247deb8a219a05741e102f4e6927897e60acd6aa383d1aaf1309810f1df4d23087a11575f33072f9ef7e05f453def2572de113cb066cb7e5f813a47e0fde91c92ae4eb847c7f10ef756a32d895e1f1d0d40d65898d10e0bbd8d52ddacf6f0c56a76cd704b2298b17bc80e2591351a432560205bbd12085d3fb010c49c82cfcb1e91c95be1d318c84bb146c7702e0f142d519d17c9e76d155eb296da33e21150f1f544d317ce0fefcf6bddf7a96b038179edc4768df63de3c422e36d69a42c06dfa7dbaa3fa0fd9baeb513f9dbbb078f9842e25c78cfe7d9e0e5a84227bcf6ae3464912aa4368e35e3a78fb40c43503c529925c6e6da688c0f18512257334113e69ad1e15b93bb04d86d1aadbe5e15fb2c3b23add5353e2929a4ce19a262621c1663122c31490dd32947774b23b4707a53e23569191c2b18107b9529c96752685d68adcbeed85e97f89e43561b05f8e230176e5b7c51a8ab09f0874a411d96d632264ff1ff478abd23d9afb4d0d7612855de27dfc45c02fbe414a304689a828b83c2249edb2cf089a79b190fdffac3efc4c79b113765940a371dadf610f3d43c090acb343d6b5fd3a1281608dfd19155d612dbd53e3cc325898fa498658f357414846b3d1eb6c2d9fd9a14fe05980be15a7f98ef7188c953dfa4627a5656e31cc0a332e24b1493ea9a973f31fa9d227b2e564be92ba601998257c9355343279373d6e3fe84063a46d94e8dd66f6060ed291547c701d940033a482b9646f2053a8e3bc14383ed1e0950735b2d8e08820b30cf452a7369e05dde62f36fff08299063abee3b727e361d09ce0557af1ad2472c2965b6cae68465d21c925f7f0be844d1829d344f7f7d00d1554703b9f07a192c2c0946cb9d45514b39488713899475643e9623978d990e5191998637c977c878838e5eb376773bbabfa5ed13161cf81bdb036b269d8136cfd083451ab8cada9c3b90ced370da0fdf0a7184d51eed6dfdb9dd7f7d660614d25ab147fec78283d2cb3f714f0d5ec3ebbe6b279a37b44cdade25b89db47fa44c85321135377ab3082f1b60d393f0172cd9f319e3bb0ea6939037a4030ae89f5499a9456b88c2c136ffe7c28973943d9e0e06176c81074ceb7cda95436c25e37e2bc6cdbe67bd10fda7c99695c311a8ca9128976384d88a4435d7bf19b617823c8ad8e78bc3a238d544cf72e5bb5f40f5488be599492e2dc5b8a384aa87d8cb82aedab9350109f8446de49de2ef3447f57bb9ddb8fa633237a4b00bed41196299181978ec57d86a68a712d778de56af0c1d855ec38d770ecd3ac1474516ad74a1b68de5a227a287e1081892d2ea21f45dc462d60a2b19b8cd4b13c1c5ce7348e8ae5d81b33f83461778d2a638ed951769451a6c757115da3e44ee78d2c57f191499c2021aef4bab9f0a9f967671e23b71e76864b506aa9c305c3e44fb97e1f8676628b6c8e25576c77b9b3fb53a"}, - {"000000000000000000000000000000000000000000000000000000000000003c", "000d13f539afe48fc940e8422b7e6c36c319978cdd1047a74dd30cd2569ba8e92527c9300266233764760208a015804634ee914e315bdc789c78eaa6b62bb00ddcf414a9d7d5c953a8426b54d8a2a92d3498c60f090e85590fabeab7d20cd48b3077f5c36d2bffe2b23c3cef4865e271d3289bb593b4c34f617e61fa45721a5ebd2d90c933d30a8d231ccc27380d84d9b271c8380c4fc3b9612523d07ba5b38bbc5d26ba11fe2b4501ba9e3bc36c7a118ceb34de5ff45f9d65467774501651c28a5d93f8c2c30171a227755c516ee5bbad020a9f1554dcc2fdf9fcc393a5964bfa0a5716ba63fe10f41b3bea8ae632b0a141e246fdeaa4b62e9769930a67d385b8c841f4d46b7630cb74951595ef0cb54c3fddb6bbb1d4d929ee3255adb03e4f1ad785dbfe1528690555a4d5fc715c48538c913b50eba4613e87e13ba6a63c58d95a35d51f76695050e82ddcfc94e93c01b2570d8e13205f82fa716001f12dda3bbf730fa925b9545fba10d420b9ef43354ea031c0f273b9def5489b6382762b599fdf3517bd62c238dfc45f9fcf644f1502f46356d591479fc4ff105abcc18f0fcc91d915b802295a85ab8c87e6e8ca5d6d3ac2a334d60dd4395dec6a9a13a8736ea3154c72f9f219b5b3390fea19374e0c331f09430a2581d81b5edbaea9e499b947353975f710d4954bbf7ec3d27cd1ba96501bf96160051ab0ab5ce00c69a9f9a1730627df4e3ef1bc25f314a5bc41490df91927aa228ebcc907920a59b114140a14697cb7a890fb4c1b52ba09988dfd714073456e26725f7ab8f16d2ff60fd26811a9b598cb67d45cbd16b90cc2104f07a8b4ef84ef15eaaceab907dd265417f3079c1fdce0f39045f4ad10cffd578e581f35da19d4f49b0b1bfaf15d3b930eaf48e9e9b45253522d1a20b4a4079224069a6c729cd7df6b01171adafae70050d675c4584f7fd855a679a1dfa652ac0876bcc70f210ef0d774215dfd6a26d4aad6d8221cdbf714c90a8bef5d242968738b74a0d10b5485d862066d911c2096a371f6adcec1e48aa3342ef467a10979aa118705581e8569c99483bfa5416bc718b1d0ba4d67ca6509199750889d3e7d13e49116e26a8a2184422cc7cc0bcee4adee534093bf7d12d3df41ae0dcc69d744300eccc73a6bc8b811297db1f0334a4d31cbb29963f40172f0c26bca021ba10c8151eefc29c58e869848cc216ffa8c0fef764bcf6c4381772c6cd103881f43710bb1d1c07dd8b4452c28bb24e1e732c77359feb6f10cdd69358693fb131c0680d54b7c5ea49a9f6a569c06395ba7467a4fd3ecd012ec6519ee45a2e174338b3312fad8fc5faa7f41c963584fe6e34740a67f53201ecc1752d18cb3d9f03c82a24b9eba499b8d3a624933bdb7237c70ca23d5fdf3cb372fa6456151794e200141af22924637e90c30c25dbda0c83524a24dfb2b064c64a8ba450cd4322c31db7a1ce9e4b3dd58f145036825af4282626efc0b56aeae6190db18f89f99f40a22036fa60cc83b182ae42b41b8549d826bbffcf801e59e591742a7d5eb4262a48a68df4517f0152190250827f557a922adc5f3a3981ef74529dccdde70ad042f9c2ad069376f85cdcabeb0e6b73eb32457717f39a46c1ab1d9090fe85714c945bfa5a5f60adceb9e04484fa26e482c909caa139edb5aef00e876fe9dee327ec770dc1900df006e261302e963eed9f85a13e205fecbab4dc51522396581e9937ecc549cf03281bc262dc6f92d527c2ab6dd5b9897625d76e91d39d17e14a22e477cb53659d9dee88ca679c966df7b5d09b67029b510099ed92b9fe2e83ceb750536a17ff8b2901d6acea1784f6782b8142aecde781c2ac9e278096e2530ffad485e738920a722922375c2a1124bd449e8"}, - {"0000000000000000000000000000000000000000000000000000000000000045", "0123c5a2979ce083cd5c9107cdd43265777a7fb8112b05cf8b4f9d893d8e22b3eff526a5a241d29f04fc11dc491f9fc5236c480c85af6049f66a59bb9e1c0c16d04cda1245eaf0700db62a22601822235d57e8290e4adaeb8c06e8f7cfe75248147989f58774d31d562a91ec82f35862d97b31f3d58a5b502a91fa1619a517438da7548977e76e32c21c0aba036d72fb0f80241ac8e498246f3fedd608d4d5422baea17fceecf32602e264462391571f6c22b48b7749354d28deb4441e1c1ccb7aaf4f46373b82c588ac4666164b17bd88631442bac49c9159791ea641f02c33b9d17bee73763d1670c3331591aab18f7a2170ebf95d70b78de68bc508b0cedc0843a195fc4a715713f9ca48e709cbf41721b6c52b4cdae9c5ec9f93038ba1bd8e4df2d6bad11013f1fb4f6f024fcf4f1466a0571d151acd72253325f0cd5e2cd0f94f95a74376adde2f01bdd66f546c052e3cd3a19191dada2670bc12393c70583f10429a141d03647691f121d6d693d9cb445a8faf861f3db814b7790b75df51ad3d7de3ce1d222a4205aa7b0ab11fe58e8d3e9871fae4fc025f95ae72b9a7adbb86b206ec99201d7a2c01db3f60fe9976b9f1a09fbb18740a1fa16bdb9b10ed93f1554f36671e7f05d73cee0d08fdaebabba8e85382e738ce4c6945ead2f336e1fc0a5625c45c5a9f7d71beb28f8924864ee8c9fc0c110cafbb9662a57c4133b901df4114e46d91835ae9f311d9224fb30a2193871092a96f69d1dcde22f298500ef8c544f689d51f47cba34378dc48c56e7b4d5681137c63aad5dcb6e2e625b28048c8baee45a2749a34142b6ea93910e503c5a0b68f9e40b891b5a37bcff2530cead5acf8cc91ecc1f7a1184787a2189e11fd0b1d1e9eeb75fc144dffcc2466b971a47d81333ff55322f4b502df9e3e75016397c339cb3d35fb77be90dd01bc4cbb923f0ca3fb22914905229816238f5319ef3afc7cf8c0a55c6d67943482c6f7aec2ae8b3ae06511d12d49bb110074f52218ab814f1de25fccd5f3eb4cd107a2ad21f443378e06e9aaf0c2be69ea39320801c480b0714f4257656dd3a713ebe275c40dd48fbe1cdc1b2ab0d0e0a5d2d202bc3afba84ea906fa1a7f12436318f4958f11ba0103bc0ca573ddde5cd5197326d157cac212329bfa8fd5a8f37744469967b51a200331d4f314d230cb1bcd15afc1783171fd945c65d6339b24d3c59be26f36cbe71274cccf5e230cb91a85165a574292da74b3c66c47a9596ce42a3dbd983e0d38a547cdc3104bb4989fd5e1427f2041ea3e1811e60845534cc11ae1931e84a1e3d1fe71c1118e183dd636adfb445e557e58fcfb076bdc730fee5bdb9ad00f21d31e8c31ca1386f1afa58e2f5288da85afb7e7a03e43446fdee8c99dc43de9e9f67ae0da888c17462a02c4f7324ac43389d037d2438fa9c20f130b3993071c2c17d79c4ad3acc5eca2f380bb85964c3257e2180bd219bd8a07efcefeac82e5c6cb551cd388f0c2ed0e3dce07801f1aa72f2f32fb03c4b673ae8dbeb16e0cce0c5d8c846aea81e5a83dfaf31c1339a83c8fd44483ae301f9fb633c5abd802fd444ad23dd37dc1ff1f91d60ad1f9dd9ff88693af2c565a5e8c5abd6da429eb1bfd90ecc0c1efee45a784df8cbed5ead9e812060e7349a9ccba4c78db227f854435fe67f5999c5335359eec73150839b75a846f2c3df8d17984f27d1622a5fceff228fde59d1862453d422fd5610d9529c72556967459d7de7db776138d122d3772c078d8739a0a26d39f9a9c3c7b3db2525dc87017c624a7f96841522543e4b2b0d595aa5bf6d63eecb20e031f1dcf4c15059bad6691a245a1f53574fa7ab40a062bde6f8334fdba89489825374eb9c35abd35a8f5fa4ddf81d3"}, - {"0000000000000000000000000000000000000000000000000000000000000008", "0056faf6a0849a7d34ea251f147b74657480ad66b01b1d8ce8a7c8f8a9004e22b5004452bb00c4b8a7582f371520d92d526ba31d85b9054fc1a6f7c1d8dcbb35aa52331f50836554bfe40b6627f0d6ac3cfc3f7b05b0f289c183bdd1029ad862e5d7fdda34ea988ece0ee2557bacd1e18e9d8792ef91c252795e69122f5707c49c4afa49f7c4ea08b4b633fccc2226835d7ac428ec9b4331d2085ceb3ca628006688c64dc11ed2d304292721c30562a7446f33b8eb66652e33495464ba17d7843e8f13b7f9b93603f680c1dea904d21524f705b38a6051866501f78226e2e3ca554f609fdc8a710a6d9bcbeae1ade5a66f41d14779853360e25ef85d05d0fa19f50e990dcc0a1574f5af8f0e4f81b7a9c622be91b56658139cfd38756b3d3cde12d211da09ce230827788769fd539914b87c006d061346eebca43325d212c2e09caad56ed164d44a42234f2d0fded4e5010190f10a14581db25f919f53a70df19869f5024126c76fef51687bbf9e847808817c46a66564d7013d026cf057a08907586d2481cf4cb89b5751d4dfd7bd2fe714afc0d3c570bb2995bcedaf9dd6eed09827d9027a1ade3141d41da48cb300427869815e11d1e4f71176f4747bd438b6fa3da1b4ae4b4579552ffd102315e483ac6f5f6e6fd14e53c635c1da859bd9d395d9251bda32c693332b250d466b5640609a432b1cc6ad01840c16d4c94111d32d493db6e3f15a546f5d296c1eb5a2358ffbe71fe6a6160d3fccfd358c77139aa40d4b310e27da4653f64763042a67fe651b35ecd15f6a2a5c99b8a148ddcb74987b866fa6823b165363560222e9e9a8948ee6c752f61021c35c2621a43c0e6036c3ca1e5e706419b7cdc4bfad3028aaf5e218a5fd2184df6e3997965b58aa7828cec3037ab942dd0e474a6aa29c18f313abd5f95511a1d2ed654bb8d4565601be1de660cb6f698d58d15f8e208f5cd791ffcda12cc0c5d2a79fd40995f8d33855ab5e956b50db542c30692c1f2f92b9c49ed456811ad0aa7b12f87f016664b3aff5e2df56e7ed33889e2ecc79faf4e3381bb80582fc3f4308521f61c415f7f2c835ea614d5cd4421a20595ee8effa45c05bb30374f450a8defd5c877e16d087036aac36a5c3e8d24e293673658f0a5dbb491bbbe9a202eee62fd741564b76d8629aa326f5294d041f926853cd9fbd13eef3ce0a7d2e496ea69be0900c17b5e7c6669bc1de55932f011c9ba1eaf993f9aa0526ed229e81de1788711604e1bd454a1a55d9df8d27c36669c7dd19bf680167629254ef9a93fc7d0e2a0802b66896626403ce9ef669ad5991ce3ddbb47d2f11b895fb71cf10a8ee5c02bd98746675c1c8b0d4b40c8c52eedea65001fd2306c5c3f652e648beb9f3491f355dec0b5144ba9fa5b50818b20c8973a45505bb059bc8ea8f44759e6c12b4900f2de0b9525c7b566b3022cc0ebb1174397224c30919b9075a67a296c5bb0d9e17486e9a41618e2e667968b96109daf137e48513acc15df61371afd138632e2ed00adaa812390eef0cfa7e678806abf49901624262d9759d4d23db4d143971d5dc4511c5d6e4326440a575f18701aadf0e1e17b03a0ca0e73ac5cbe832abebb0b77e4795738165591192e8f25df56d6bbb459c15ad6d49846f8d203f06685fc6a2c26a3f833fe19577ae2e596518754a8d20c694c74871a5f5fa641401d1bc8766f7729f26df369e8cfbef200a3b19f5061deb6d5d034a20bb43976cc747136e9d1ea519a3771e12fe59db8ef99f770a0ea27e68c3884cdea57b2247e0c5c349f0e7f7e70e515bb7b48be0815f512537a651e04c366b91dbed6d0fa90c027654c4459ea8146e6c2a562d989edcff933c54fe1e1eb0bc03c43c23c650ddbe697795bc8787"}, - {"0000000000000000000000000000000000000000000000000000000000000046", "01291b3876d9b21571b4425d471f2f60c8559d0f2f19da5a3ed527d78dd0f893b2d2626e852c73d080c70609813dc92bbb6fcc9942597534b24b04727a3cc7109ea99e0dd126cbeae6022e952361131463ddfed70349375e4ff3da43e6c8c5eb34424295eb649167fc0e48f074f8977b42dfb5c1fad7778046004d58801f04dabdf326581e28c62e94ccbe57cff18783f6253e093a5f4bd28f480696c9a145c73652ae93e4d8566a054be5c4fd150543c3246096e9dcf1f0939117731a05bc9f31fc87664662b8247f1ead2c8d8b86ff762e098c28a0dcc556fd062ec593e261e9030bfefd179a17311abddbcbcf08675b150c75fbc566159791ea3e129c0eb69cb6cfffeff2a2b7c5584aceb54f3fdfca20274ba9010c332153a34211181931bca5c11e6a3c20a2478038a91237e764a9d50c5c6d2ee447fefb813182d7a34d2661bbb3db755332728ea9b08f19e6b4013ba69df28f1e06d78343c03ff44fda6fab9e1b8950bc0f8eda97ac9970dc86d90978fca9ce73d1083f01499f2c17dc2b08f89fa8301f641d3ea5a03c5e5417cd4abdbaa1db3bf0e0a5951d6d6c32466d596d030a6eb75fb8cdfbb583b5b43945dde759426f92892d166f844d81261d515c1df27fc5ea1798a3b8467c140b8a970d878767535502f89bd9edf022836bfc90960ed2f43a57851b12dcafa67ae6e926f23af315923802895512284599c6494f72835cb90b1b0bd67e0bf32bfc53ab545a0609c44b491132e264ae864675d00807bf86b3c7dfe555fbecf44617a56301158f5232ed0c46e9008ec5bf7dccdc011284555d6d9f5f1bbf550bac8d4b760968a4ecb72384f53630b1018e1c5a6d2a97f36147e9ca2582639acfd9e47cf6c9fefa0cbe0d2d27493970e763b9f2221581f2d0b959ccb7ec09546bee7a84a1f7d15d053d123d6d275f5605fc076601ed8a463d9cc6478b00215c9a53b441d7fa55588f0a8a1518460f82ebdf4c957df278799211d3dec8a83f9aa481d6d5125d09f5e656244c18b9f2c9127da15190f7c30d1e2b893ed99704b6563de9d88716157e07e5124c12dd30ecf951351d8e688e85ca7e70383d6a5ec4f03e6a91fdd8a0783e2ee1c87ec1a41c48be0a3c951229f0f84593add1b4962220955e093dcdf818c70df68d1f98eb7dc1c5c81cafc09a783e757d8b048282a0a571527dcb8b1483113b5a8e9fbd1f27e90df952a965860ad7e33c74f63bf9893a2416795ce0285596550d95079ecdae031eed470f476bd5df6fa247d623c4a29e2af57ab1f67ce6d29b463a08b820d80937b4d89c036c04e286a336545d27e4d4455d6075410c4612dc1187ef9f3597c566e3650e7be67f874d09e6f0d3fdcf6e50cb4300b724363fb2ae0bdce7ff28401ed64ed07b55c404a481ba7721eac160bc624c02da13522816e35744b9162fd3dce43a030977ca5512897283668f64c7f48d84c4384d028257991ab16b1cb2bfd7bc5f6a6d2e13c36256c0dccf96d99cc6c14dde0b5e42dfaca5ba02da8833d7e52b6fe99f1f5f0ddc9d75b1e3a2d1ec9fc29f3b188545adbf16dd9d112cd12231ca9a6d610321c4009defb2c7359fa5e61dfc4911bc8ef38dce38e7ee6ec2dd3e6fb1fc599a27e33570691d509bdc00642d982e6e16a1c55c9fee079259f8aaa4038779ca47ebcdf56ae64d7d727c860b27e911bc2923f9eab2e794c877e996cf5d96daf013c4bf0eee15d8a32a07364e376ba7beda0f1edf9534d81331462827cb811e396dcf6e7b86e02e180b1208fee9112d55cf19abf632be8fd8967669f416cf8b2d95b4f83eab6151a78872f2d43dedba40839406460f590e6c1548413e8ce1427f04170fb612fe97c7d51d337dc197d0d0e4be5392033a703675cad2318590"}, - {"000000000000000000000000000000000000000000000000000000000000004d", "00223e23d2afd1df9f26f3456f4c4e9abd1c5803eb189f828507a3ddbd5865c25f822df807310859e4ca1c7fede73107210abfb561e238220fa0d23568166927ed4b0b775ddc9b6867a39bb8d63ec671a03c3451077a594839affb3ded0fd0b52314ce816cdab1ccf01528973ea28cd2b9d880e39111f0613f2859ff784e0908463b2a87d00ff155618067756d64ecf6bb5f86379fd7a88f9b8c0f6f96160bfa51e14a89c93dbf4604ac27f160caa1ac9f9f6339c37305210450ed9f5419bd8dcd5f87988e83c8d38c3d5d1e2389623e6f3b071b27f8e4913ceee36343604d4c4016dab2fc00820948646c4c038cc78a36c4d857679fb995cc75a6060650dbe2acc53fd99d4512bb3c4596256aef3be7411cefc7cd53f052c3cda0424591642ffe332b73beb30d59919a7cacaf9d98c3349405fc6962465695a3fa0fa347e8f59f1ed3e257f53995f4a6a5654edfe2b203c2c29b63ba5983dd08c5ad60b145a36c727ba4df16a8fa15a906cc5044c696e7bcdd7a723e5bb6d9c72f4dabe5765726bdde9acbb1e4e7d803309ed9e3eb7075df926534dca1febeb9af3ad553a38bd3df25e111552925a017eecbcf59746e25d548a16677cf443c116ebf0e8324e4759b565298e11c1f90e465fef570427f8e4dee192563b3c7d5a8d4fd57672fa6ff7f505345355ab86f18818047075a22e51bc2fd9b7f3a8804c2d269a9e9f261c30681aedc29a61c9df8a91bcf3a6ce71a22e2ce498348b4240e6e91b521752c05690cfe95d37e85841e4208e85534d949ba9a6216cc730e960f907cc5ad1b904fe5190d2f209a0975bcfdce17eeba2a23b2136fb7fae9b5ce6d74e712699a956f49108a7ae730c0d78b26783a0cc7ca8285a11fd09a2bb6e79418f40307fb66a55f7a6f22ee053a3435534d4fed04d21bed3fc311168546d94197b908df75450039cc295f0031a4a419c2f53323428db242fd680f01f1377bee0d6523dac4549f5934d12de797725b4d1538dd9e6f551a4f51de5392b9ceb28b2ea45eb6445a92d7400f989b4758095a7367d658aef2edfb7b4c01420b745e65768ff240b267b644c8ca7c5354fde417143ed39623f3ad9f06b317d472bba15616cc2d7301b6f48451cc5102d4fbb42c1eb62fa6734ad4a9db087fb0b66ed1685915c8d21914dcc05dae48ef166705c247b076d06c9ad638890c0e78c0a2ace2d6c8cd228fa6807bd15df96d048ad3005f8fcb4f419d5df41173c2151c4b6d4a8a29d1d1ccba3e78d4883b3bde17fd71e4a76812a754846532b0fc910eda023c589408d3a52140ce1ee2d74b28aba8649596616177505416a9aed9004f84978cf96c299563464f56b17eccd22524b149e65bd8e1d72b7504dad8b50e991f7d6ec826653f9b814de002d325048b613ef31d851b3779f90170a4dd63b28197e0a2a4ee58e7cc65b25a1ffd2613a1f7220f557654d62991b90f746ae9382d98322e25029df0408d0f3531f5470c3a7f0272679fff22e747650d137317b36bfbb3d6f1883bab35e3664f9c950ac68ddb5e0315c99313666e9e46c366a45a1b12de0e3c915ff3845c37fd980680ce348bc6110ff58ef814db1d1e830a0178667dd651e63c5573cb819eaca649f74b10a6557bbcf1053a8d3c60fe0fc88ffff7d401d5f5b001cee35dac9d721885ad9c9ada5af7725d0612e568be418b1d143573982bbdd7a521f14dc48419558a5f03a13c994479919c8862f6249b7f571ead3c0c57012adbff41606a84a969c9b0cece9b3751cc07832cd3e902544e9ef470b00d71fed2021d5f0e3224d1db7cadcef8d07810f4a0fea943f96b751c903816f5fd20ce8847628d1332ca1032d4d4f253dab1581a8d8eeb9c4e004d9436f79f49d87353652abdb5e5"}, - {"000000000000000000000000000000000000000000000000000000000000000b", "0063c5d29f8465da2a2ee19194bf8ab96154ec0ced19fba444ba9606d6e185744f33a6897a9f2a3aa6e72e3035095cb99177d9dda3b6c43a288689fab951574d7c32f242206525b7263b30a5e4ee4b8d573ec71407af2a4acbd1b2895b59c0f53e57739894b92ded36444f22c265aa3e41cbb01764c03c965b32ee9b721b0d8d3799bc215eb7f094e23bf74a8cbca4d9afabce1175e22f571e8c9af540691ed46895af1e6a5fe84105197e6fa0c768d729b001b60c561f512aadbc1b470f33af7117d8471d3d25f1759431f63a0ba55e4be813d2122de6e3b0cb5661c4d56a30aeaad7fc7a4e7f1bb5427e4ca1e45f2f69136173ff84258d74130d5f07457b6f9025665d58fc517bedf6abf0beb1bd2f5d142a996d000ccfe78cf6b414a146189d65c9501bbe14899ef7058ff8b1d8b083ff1f307c751bf38c3b9121d6738f500e1f01248d9659053b4e031d1e9a3d2302a61879440a6d0e7c5440b77b77938dd9cc59122520d394b42015d1157a31245e23cc23de0242bb17df0df0c5eb9a71f549dd57a6e1923b4102c5d797bf5a5d98e40981bb927dfaf8f6a5516715d6216716687005c7d1c618c910e52a661112dce90322effbdae2ed06ed1a07cc9a2e1f9d6717c771419fb68e929cbe2709c191d009cd6cf8ec4073fbfdf287c557e8fa6da01b61d9624787af0b6206c7e47f6c7a4602ae768c5009bba2ac52ce0cf2eb0f1184d1c8de031802bf3b8410ba6647746afc455f2be13bcd947b31b8f84e44720aa391c5dc97cd9addafa78735592b126769b9092c13557d2c3cce48b571b4c439814236ad9cb7f41c240edcefd7fa93627bd8a28628c83f6f8203cefebe61140f173166066e1d5c9671bfe020fb7955bdd8b23f2b1831ab92e21eb7d418852900b030ee182dbd408b37a44faa941a15c3276135040b2d5af6601dbec7960141a7ed86c5642b1823701c05baf8147defb500141bacc271a35dc855b361430ce7ea48e19de1ae1b411b16ca41b3536f6cda80444824e94ce9191fdb696f42e7eec13f99656547fb362b02d9991db2227955de0858b6efea0b1db4e09745044035d9e2ce51dd47960d6ab4e489de09ad4d4477790cd2823674cd3f581c14dbbd8c00571d49c22ab458164eaa91765af7deae284b4de9bd4b10ea77e91531e63b6c25770dfbc68a046fa5cc3b0dc12fb22e64ff42dcd7b2f475bd4afe0f1ada6ff9afd263c30f47dd09ed60739a775d6470310f17a4dcb025e3d443b762945c13a62eca7b73ca33abb4efc1d286a9bcad94ceff3e5051ab42d9d1a508e64728fd1a06a321e4a35256595a19a50533a4f861140d07d0af4637d37e770c8f44df76b6099ed0861e9d9383c29fc275b412165303e9aa6e9c9677f878357b178cac8f45aea7d0a6432543705214b6ffdcaf03024d93d64f106f130b904b2b5611f494b75e78b71f9ec40907e793e36ec8d3923e2f9e18ff3055194c090bf1a7a9944bbacef956a7515410cdacd2d58b4c14ceac151268d009c5295a02e9f7ff7b6c243bb9d504d8b7df55679e99d66d84bdf836eea729fd9e5e8527cade966818d1ef220677776d515791e3a99e47ec1bb595cf45d41817170f51e1f2761e80ef5ff9f7a1341e1fcfcf62a2372a3275d2edf0812d9beb5253860b17ceb60f9bff59abbc20e04ed4f9b4da31b5995311c6e26f8ccf76038d2fd3883a227b3900b0df4c1e3e0b2fbca5189dfacc32745e3b5b6b9b195bde25ed7cf18f359de58bab8c266803ab7fd7d2b9a79c1cdc10da468fd98722e9cd0af20d40fe22053dbfdc3c933aba8ba9e51f95dface409f7d9fb8cc2b2827e0aca1a6df933f2603b4bc535ca3d28f80ebebcdc5b9dce1d176da9b5dc96613636a46b7330a1f9b5c95b1ead"}, - {"000000000000000000000000000000000000000000000000000000000000000e", "003eb79fd4e80b897353723d6e61de80e3aa28764d109f38f6ac4b39d55d1942428c67bdce0191fee5fc114333d28709de23f71df5fedaf6c07f920cdd948216aa71774725d80d544cb6e56938e17e0e11ff02d00256ffebbad2961b3d45632d1ec2eba1bd1e147b100d7f71f14496b875308ec2f8b66f6f567898982b2a0fa16492a8cbcbaef5db76f4fa610aaebab3566c86543fc2c45edb468542cbf65badc7c5ae3b3178598e069b789da1e2976d6ca17557bce535e2b8bc3d85371fd67f616d6ec359d4b93706a8472512ff8d9f5bdf16a1a4476ba3b9ddc9c046509fc4ceda73935759f024541da58470f567bcab32e8a4460fba1e8c15adbc24b5643b6f699e9ba582e297a8edaff65224ba978c29df4fd67f5121718f704849efcadf6ea1eb38ff6732f029e134abcd6766eca3df6de1ced8ff13cd19b4516c7322405dd4e57f148983e4ea64175ee77c3bbc004a600d55478369bd2c423619b2e3a21c367fc8c2114b77afce53e474d611c2abd0521221dbb0d47b92066ddcb298af0007b94461ccc8c0b8fafc9bde3f8b0861dd62cb8a25f5216592bc71351c68f860d1fcc00a07a6f0714a40b35aa51333785e105d75e1964b718430bd1cf767a315d717da39fe56ee7b184b7f996511f0b250c3ccbee513ebe24fd17debbcb62e77e0b4362932f03413baf5ef8896bd916169eaac93df9e3806ca69dadc6b680faeb037acc7c83dc6b737dfb00718d379443fcfcbf2da307521d85d333e0e963232c81a84b3aef1a4629f8984d57495adb07f06e5dd813384f634461338949bc60b285d14c5c03f11319c13240715610003c5351a3d4f309d548602d7a1f25d23a738a4cde22953d614fbd6a3ce20d8584d2f9b7fa353114434fdeb5304afca2571cf278f89f8c6ff15a629554e0b5d2afc54c9e4da865eeff392964eae1dd847006be24737469357655993431cbb17a4d8ae9ae2701b9b17101ea7fed5fc00973035460b6f22cadff2381c7ce0f424122525795c82877c75ee8ca2793500544f9e54d92ae582618876f53ceac0f102d34e5a188909d11eaedf6993c76ccb25bfeb4dd17671af93c83e297364b76e522ab495b4662333c71abd8c657596e10e482b783bc8c3657a4b941a4ae9597d496b2ccf5f31c10ce55bb4189bd114b3776151765626071e4e1a02b7d284fb84e05146416447fee430e9ed23ff376615ba22d0be9542b56f248571074a4ef6a7b5bce81105fb289fdf5be2352262d48edb629b3e1b2e9509251cacca19abaa49af86d7e303e9ea6e5588afd9fcd011fcbdb4d21ee2c14b1b2406da46121339003e705f147dfc03c6080329664a236217713af27105dab62d1cf1df3288560900e3ef24117cd7604dd1a6bdaf0a318a8e0973e50afd744314d93d470ec6ebd31d985301a942f9436302eb362cd6a311f9193e334e7fde300bbbd923b551568d1716c50f2378731dcbcf3d596d06e44f7c4a94cf61a00f03bd6e5cb3f11db99a1c0f263b0ec577740f5def19962b7adc5b562ed8f2911a08e89ef78f876dda525be4cc71b934e24b42b32e431f4ffd08f95080ca8842a820e9fd8e566f6c1625601d1716692158f5f57055e5c916ee9cbdacb554cbdb4affaca725136c710b9835eac16bff06ef357cbb10039a9645a303305c74ee945ca3706705766b73c3521c81d7147cca3bf26926381baf55bd4e4d485761cb228cfcd63b15a8237b02c81bbafac41ae820faec9645296aad18d584596b3549e6cb57f11ee9fb1adaff03e89a612c1208a73f41a3358c539599a60c70339f16d366b62da78c5b5c2b0a86ef7d08d2dace5b9d1506435e2bcc88abcc805061d3d841c12eac1279b3d410082e05c21244451e3bd128f3477a54f7fcdddf26"}, - {"0000000000000000000000000000000000000000000000000000000000000099", "044d6dc9a8fa8197e99ad123f0635a7d2c4938574904a21655fa872d25dd7f0296e6b604755fb4f6210809f8c1b0096b5d378da19273659e5ac5c45b3f28a11711fb023e93cb89582701aee270ec7a091037321308f5420b955458b73e3a732a79590beda5df12590c646d172a24f1a175af271830ae55e8c2669f79068616b5179c6d1328531702874f8c4a937a8bb836e2024d9e564fc2775b2bdc43f6c6b5dc9271eec2b2ce040f0b4f3d3d5d1d5b9277d2122144cf9dd1569e9aed1b2c799d120898eb1d1316ff074319321fd0753c72302db2cc248cead0d8b993559b7ff0e1f92d96c7bb9706d5f4d22db175c29a8b910c7f5e1724eb5a77011243843575488c4f57e4828360454ab52a6abe2faa26dd3bebff22d5affa9248642fe94b1b7c871fb16118ab5cd98c520194d3a26368ef9fbdfd891bb355fe2448045dcf5e8acba160b2deb43331e9497c3b45c50aa05be1cf4be9c560186790f0fb62a69e8fdd8ccd5fd4af2780a47c81bb642631917c8c8ae2655ea3932bf1e6f7619e3abfc771c39a99b4187d1d7488f96382a35567a8778f1dbea27ca381e9bc1b8cad3e09aa18613afff4ab35398872b3ce937dda4e18f65cbef34d42353ad166eea1ed7daacea15c8872c09a1de67719ae1bba4f09a661c66912acc9cbd288e52a71811b5fb993842e29e0b57ffd89a5def4c173297afe58440cde179d214be875e95f944880b36e02df715b80593ed593f75699a7e78756e40c95e5e6e50bc8db1c04150427ba95d1d8a132934a6dec631f5ab13dfdb04d3026fa97aecd2822eb7c9be099fa6bbb410d5ab76212dc432c29cf194490c9a2008d2778faebd33a9ccc48424ad4a5ac4253e9d25505453ca679a772bb18af26eeef98623b9275e75f32af662cb665a46c576af73a36cd0a19d849f71f78347a674727954d6ccf06ed05344eba800cedcb4bfabe0ddf768c5b8a627e97e305b60bd40bdcbbadc5c9f2bccb7b8748c7a6d5c20120832994e7ba3221fd7ef2fa329f1f253acd19efae414b7ce2955b2cabcd43859004425ae22551db35c30b24acd6cd6fa319d1d9b2b51947ad51fb04b0bab61716614ce9cc52bdf407a34bdfbb676113ea5fc89111cc414fb690db793515e1ef606c6efa6a8356219e2904ebbaef1c5bb73f527869b7f966736a4e1c642906777364bf9910d58e7513508adfb181a7059e73ad3bde9f2e285a8f75a818759daf7bcbba361615f3631d988492b2dc5437e748d232fd91f34cff585401621ddb4a5b0696dd5ebd99a3ef3aab4061d648327ec81164273727a6b3e553e015da23afa06586dd9ceb1d3069a21ab691b834d245c37b485d8e26cac7bdc79717ccf47b8809de1467e4dbd4cefca27bafe57fe1b91de9a498a04c52f72c02433dafb507a5f627be8c7a070c13cc218df4b2956a870836e74402bc1a7cc7c93de3e7fd75163b45705963e8a07b585f65e75c2ea607e679dbde90b9edd08311abe99f7d412bd6cadc8315f83a85e124bd69988a222f91bfab955d2f58580a09656377c2065ef561a4d6bc2b524b35d8dbf79a34101941d08d888144c44092f179683c525f4ed7d7dd2a6621e0a2e617bf86f7f60658cef442ab4838e62148b2034a94d67a78da5d252ea2eaf3060c8e7ac3540755e36ebc31e441eff2a61e7d674ae5e9f0538c8e398a774815e334ed81f6b7ad236b564a2cfe12e1881c85752246cbd39bce0654620de1d8e5ea603c08ee4acb97e9c122ce4333fdc9d58f54b8e2a84efe3c930898c151a858efbd1f1b94bc096a699184e3b987870d5f7ca67333768ddf8ef136405bf9264519175d9d0c4829ba41103b71a206b2f44bd4d64a411b14adab0c94a5638399233b1c5eb2d15e75e7c97c611dbe5f"}, - {"000000000000000000000000000000000000000000000000000000000000000d", "0004254a6d113251b3f47251d72c7345c98bbd760a19a05bef5ee50d5f809e47e47dc9abe6e45e3f3ea802967edc5409919cc56774bb326f9c1946a7940d623638324bcb397787ee04c93945730446d7a179d7fa05a176342a8d672f9fa9d1dde5fe45197849708d671f1c96db8bcb37eef170574d53d6a12255c394d9911a6bd43867d721671a9372fad4bbb4023584fce962864574b7ce267209694f18edcbf297328f409cb5560096bb8b4c58c685bc91708a0e8688064350f974352ced6df8836ddbef82e456a06340d2e31d7e7992e817e34d3c1dd56b7d4fbfb861a6de8e0a1e49bb5b464cee42f895d88d94d46344d96647738e1f3353cc2900af5c00b8d76437d7437187d2bbc543588b9bac3e042430bf392b8079b06a37ee345622f20d33fe865d06ece8eb69b746a7ed6d72e75be239019fa855f17e1f53e64e0d5afd25c33e52fed15745a9ac54337eb60405287f5d9827199b8d735a3df3229bb7701e4b4b17adc19b3ab89541f1fdc1bdf6ff4c8d7eff7a941624645ccf2b4dda336f87ba3cade9481336a5bbc104264a31ab5c9c09d587c255d6fa5aeda67ab174228505d4f3846f8b21717c68b0ff403c723970b853b8691b81f959740c7b8d600202c82a6b72d734857d493d103fca69a8063feaac384278e22893e4eb934b19b213fe759dcf07eeeb1ddd82becb273dbdc1adf5b7870648c477fe6d63098342c24aa27049551e12794d0b0ea0d0ab9e07a8a673a2347148627ec644787c78b20c82bbc25106956674ba044cba465c356d84d5ef1f5d6dd54099f6179db75c0a3aa0f34d5ba748fe8d740b69b9c0b6375c75f42e43c14f4b73753d5aaa942e1641acffe29d95933dff372a8a7b531e5c505cac9e1f9697c0920c0da27c7603199cce8124f97eff67de307f6fe50a8e5d3d3359e744597858b225ae3516320149935c7a1af87b4061e3b0ab460169ff9cb4baaf32347dd55c907743caff656895bddb468d12fe177c064c4773a0ff4951fc88d0721b92098b59975cd2690ade79ffae2aa8557b4673a178b2cb95e8719c44a50890d9ad7ddd22b9b92e545472dad9355b259e4b3b1d9ee524ec9055b9456dc2102b198045e29db2dc0215ac01c1b487ebb377b643d968bd989eb8c11e15011b77223f945aceb1da1381f31f6a5128e1c66edf9d0579bd404ec4591abc62945619e4f3b63889749db20a55a2c39ecb3be384b5f6700a4cff8ab9e4d751f70d9aa68a25d0ef6193d10623c1dcbf35f3a77c0eca41073ee686d05f4558bc75f9d06ad5a327c01b9fd2093893c1cccf8a3ff874668be7e7b469de8c99b48d13b70c93aa8f694976b013a759b229b5f28c522f640d7818cdeff5f2bfc26a15d088d290a34a67dea22b171ef93f5396be034b4b2301ccc2f095dca85d1e0a02b9b360c6d25eea99f2b17ee7cc9c3cf6570e00192beb2f992b4d1acb09b8d5dc3042cd8184a84d44ed0e5973601d2556d5d117d1f7a0d949b6da10d7744e379feea9f66d109ddd29e61b41beb661beacfa1345071d13b90a87332abc3b532c1ab1ba09cad6530b003eacd260d218a938f18b6599c4d4c48648f0be2c24079843dca35bee0f5748775d72bc6fe5db937245aa45987dd630aa48bbf8bdc46c4e62ac553b3753330a06a6b8d6bec89c751161d387e9614e36f00c7d89dd183c440e02e8c341ff97f1f354dfc641aa2c3780a72ac944ca8a98ce77629ef454d4d5ba4d8b6aedcb07304b01bfc1e2a205a836345289b4fe4d163a30c9ae09ece1945d56347923d3d413fda4146d8f1e793810107495d7618fc080a95b97aa16c184cb9bdc3f5e401b05c7192bcd238901ba74d301e3745e983f3e50191dcf4c782c8ddbafbe0664e611766f9e459f5cbd3f"}, - {"0000000000000000000000000000000000000000000000000000000000000015", "00c71a06e848c0019120a1a80a4b6bc63b79145d280bd42deb58ca4a3f5beca3f6b2fc8f9335f29bb0df1b4dd7976750fdc1a1c9d46600ab47212fd2d0f36c23401db7bfa9e35be00ef4116fb7e829ac0adc249f0a427143ee665d33d2787165c0e8bcad76f3cefa0d1a591d2a8408744bd24e69d20575addf17201f04651739f8c039a30c83b8f4c4a53ff7f3ca2fdf798d3146c43477149a4dc1f1e095854634ac0d64bc9e7d8b04dd1644c68284272f92d08a00de6c9d03cf0eb7482fd6e2427fcf8693a479e3054439ae1d97b6b46549070eb0ac3aed10cde6685269c8d459ca914157478220eead51a890d33f0aba4377c9b47a91007d5b579e07585b42a98eaef6df9f01cc4c591bda6dd77bc1862c1e2bce830c27ee80a637f0c8d39f7b2a3bfc92ab09371c42f9919ca9d198a1f365eab091a370d9830427c7fd8d08a6d08d391c45daae77d73717bc7b9eca023054e91643ef00fe09f1f7ecbcb5d8cb528a5aad1c951c50e40b3d1b48d07885257702829ecab68d7d139bcc3feb8e5b0dbacb42ff53d7184d102894665013cdb7973e4e48defac5d5e637c6f569ea2fd7a9530381ea92548289370b1703107ad98e15c4cbb5449915e3b6da55507880e6747b4f25dbbf3b4ef1faccde0633dbbbc24abc114d21d5ffb5b48021c70fef90003045a98746aeefe3e516c5e2da5f34863b7a55b5de05848b6ea5e631cfe1b0912c910f29a9b0a62fe5040b6ad3a35c5fe437d38fe2b50ce0b700ff745bca290a6ec0f6f094b5c37235f4721b7b165154a7140a6a7986b52f29bbc651e8a167b27a7205aa5daaf745030ffb31dd1ca300c72ef5c1fc7feaf258f3eb51cd8e2d7b0da5ac1d1a2fc1c085320fbd3a79f82df6f88a13a15da936cada9f2cfc27377b58981e136ff47fa51f48831f844a4f9cc18954f4dc657be7dd151ff70e0116fbca16999519cf78f4c8ddd385316576ecf5b72644af68dae454a92823052eaf6cb9b79dd15d7f79032252e57b16d9ab2906d09f7aa7845891af8f47be67199ef7d65bad3f9eda47d5405f9892d5409f9edc02ee8cf304058769b35401bfedc013da33af95f5a808bf96a87f023c93c84cd2304cfad150f1a4ec51e007c468c8a00d891501d586390040186e00d47978586db82fccd11c5931cec64a4688e59cab2d9d3a62350125f3e8b2471692caaf10dcfdb47365b283bfe399344369e86adff5935fc46683a8dc4496a3fefd2bea19a6e12d0f99ad77e6e137d43cf0881261d0ff179a349eec8f1ca19865589ce434dac94c1e80c87f3af9045ae98df4056f3fde40a23686b10091673acc574015ec66871367d779c11a28a00deece167e017eeffc05d4cbba076825adaa1352585db1e19d820a7b49c20d51a61fb108dfbd4627128c2651d0f62dd37fac29021c83df468c5fc6689a404ac4867748d33332f6bd255e21c88f1c9951bd65456bd44fd376020bbbfb200729026196cd98bf7cafc39522b9cf9104d54e4a5f1d11ac03a36f7a01ee5763192a351035237fbb5732068c0b622ee3fdc7701170caf3eee5264a9d3ec82334b78a188c56d8339429841143fad64140d5b18387154ee27e011dc2f5e87772027b5fb9b62cbd1c0d493849f9f12e28279990a77413ff5b8379b50ed30ec5058f03502f4d0946ba30649aeb2e768e5e8f7cff970896b3bef3937ff77b55d36c22bb034da341dc885909d5238b4147cbcfcdc01a143472674ea02a196d091aef05b7848e43bf32317448534aabda15c4d194630fa0f7f2b0f2e27dbfa232ece5a8fa055199d623af18674ad37cf3cf5ff2cc560f74e033574fc6bbbcea28389af8af616ad7caf0342ba27e30fad899b8a1ed46495dafcbdbb061d57d3a29d2e21b22cabb798c20"}, - {"0000000000000000000000000000000000000000000000000000000000000012", "013e48732f88b5efa1d10123498937a481c2bcf5390f814df4675ea88542f9e4f387f8d98543fa70b9d90ad506f8965a268d16e35844195c8053247159428e325dabe285e3b48bed66f582014de11e2f7c7e87950458906d98d89386f1f8fa7263e86313699d1e3cfe144987fc3fdb00d2e358944769b34d29a8826f30a925dc7e29a84af8c68669a42f8ade91e954c1126b7931e1c2a7e5d17f4092d2753c0770dac1bd797817bb0a46290b7dc5baa3aafe156ebb4b2e63380b1c09b81dce2d06e5dcdc75826f33fd9c3756a175579ecb0e193288e38e0be7f16a108358e9286d85cd025bf0d12e7fc2903ed33f39761ad8597846dd8e186fff27f20cb6aebc9f2502bb66bbd15b2166f39614589dce292c101ebfdfcd2795fdb28583b47a62517c967899a41ddf9f9a986397e9ab52338c76a4c8773069bb957238ce4bd8a2944921842004efae60b3ea37061c84e002563e2c7a43bc8bdbcaa4e7145494c9491aefb1901074589f6fc847cacae612a7b9c18ed3aa12fe97121ca61fe0656fcc51805d05a04beae7d5d57f7fb89c40ec7ec062a365ddae5f64c89e76a59579a596ad480b8637fa06892ae88e5ad355d1429a2d216ab76fcc21543e6c2fadaebd7a7ba3851a7c0529bfe4b8123e159183fec2d14308ad5b135e5ab9127107de16a26044881d355320826fcd85dd426aff1887c8fd7fad96030cf7c4c656e0cac42d318896370edabe00d68a1607dec7ad9651b7c5a3ce72da421ec9e9db8313a6dd07865d7f2342312f4030852e1eec77fe0624f37ac72f156b41c4afafc9ac8394c016da82e58822f3a8a70c6842826f626343395a36472d7a67222455de10173de7ab0824dabef16989a45608d411b27963b8be7b11272931ddd69a00d911c1cb25149f4271b5d8763023dc96d4dd8dd5e1530854e2a255676eeb86fca92a01f485edd3ee4285f8e478f105dceea27127993d1b24d016540c8ac6fffa2054250438172d0d06fac3e416e1d12e3a554916ab8e536f98b2df2a02b9bc427a470d8a80bf66ddbb859179a815e929cf54e5db4814148e42b146cb3b91587f082f52542b42d0c07f9f8734a6cb5d75dc8ef1853c26419ef30111f0611e945117883c1afb0a74beb9cda33c6a229f1b1f7a79352e3270c5ba6719271559cda4d3a978b7b64f4b5d3ef104e7a94f7b827b5b8bb3807fd2f0a57c8db6268bb019d1ca6ae8aca7d1ee7c929291ccdf61a479f0c53c13f9d42763e9c24b91ffb224824e3c08b8799cbda321d3c9b67bed9069f1b7256c9de9581b42f25c4d640b2686246ad2e568d62f7195e27fdb44dc43bdf7d6386aadd538dd3557b26524f580e030f7859a9cdad732490537afd7edf1ef24e499a8d368263cfa1f8abf4a34a3d85433d63fba8eb4f033e4a072615fd874ce01fd4d4e7067f735fc6a92dd84f100f920b6f096b40f253ef8c55bff9f9e27c27769e34dbcbba758941311aa0f6ab1679f67c3bda3b07a5463811df1bef12d1b9399f7e10a2d41166452a34054833f5327df59ad036f5f53e5d075df34b2342631df19b911e15997ab0acfa2a83659a8d3d3410b648cfda5c739cafe6722083bf8a6d08803755435ca7524e55e6f2f1ebc7f9d133265b225ee2bf9f738f6a52f38920267ad771db302ac4fbc93c90b93cd61e1c367d4fa0134e57cb0c74d438c5dcb24fb3369f906bddd599aba30e6542b640997e5fe27dca3c5cf3621ba4960683d61370caea210b7f145424a1ee759096196bc6b1f8ccb03274b0c11e91726d7c7a809faabf1385cad6adb75083d8b0a3fcadcd852f0fd13c18f0683a4ffcee20df2581669144f94075a4660e449bb45d754558a9ef40c5fb603247801adca2da79b898e062c4270240e61255747ce"}, - {"0000000000000000000000000000000000000000000000000000000000000011", "018e5b15f98d8f38ed281041db317e28968e078b4014fecc09c1ed2f5f71cc9321ecf6604553fdb1658b01e072d7b548671dd7f5320ff15ae8454e68fca2a635b849f612d3ab5d90ae338d093d2badc575114a0c04738ae1269b711dc794d3fd35e08051631815a2df0c156bcf13f6b5cbb62983faa6f02cbed16cfb3966054ef6fad58232c47487d3de16d5e40575f5f26b6613d43b664b95afbdc252f6bd9e50116e0a43f07910076b3cc776932e23b5d1437bf5f3f4a175b4fb90402a0a1ebbcd6e5425edfaf50ef26dd58e649a1d054215708278ded439d93e41a6c33bfc53daffe5fe0bee1c7cbd89fe93c1d4b16ce2a51d2de0b6a6351da2920d1e88a44defeb49c9b6f24a3664c21640a0d2a3310ddc42c8ab9cd9d7edeb9dab83ff5d1f8a52df1d050d617d66954a1df4e6bf44cf0cc51b3d4efe5211483baaddc7da558a05071244a6204f73fa17f83ebb0304e553c66a62ce8d2450b2dc25f39a01e48ed3cfaa45c76bc35a2a3bd1f5d9b9e08dece74b79287bf4ea101592584208c93e6e9622427ca2a76d3a5a579fe2462ced0e7aed0f23eb1b36355af27ece33153c63290b59451eef989c6d94d6e0bb34a7c28859d44a33051595db7ee4a4c2a1a723d183507778d6c2de1a023e0bc49f924a6f985fad96729ae0b4fc8dd24f8fc7bc20acc9f7c64aaefce9485384179cf0be5dca97405605ecaf564fde67b5c9ece0f235f0a5fc8f5ff60466060113c8b9dfd5833c3c30e67d3493f4707e74e36d1add2df7829c5fdbe34f51f99ac5ac051e0dd3d718223c962e1cca36a9cc31f4a54bca162608ba1a6eb20e34aa86ea44aeb639c95717e15379661b8bf498a5310bae112f651fc7d65ed3a1dbf07f318df9b671e7494b6747f765285b437615cfcaf95ff62cfedb93ac65397529c2a4a307510c77de4776e7d2c3ef96ce4305aee2c21e027cfbd7d511a328653c11a8b2577542210f159ff7f05e159822e2657df1aec6334ef8915221d062b89da45d134b6ef3919f58a3ca85c0954471303bbc3eff8ece12f6bf23ca532a81c613b47779d20d46e457512cbfa7667c62d7975ad1311b283ce95c2f12ea39bda8527da57707109a5c1b29fc94da7170161421a0620a4ddf2faac18315ada78ef8e79d61b82d1a1d1fed4dfbcd3fa4a6dc624da9b5da5636157d085ccdb7a34fdf0cd8c1b56f4a6f982969f73c45ae451b139667d55081a0aeb6dbb4d40366a6bd5b060b22cd264f689492eb6ee6a74daee9efedd3d0f0b83e5c5264a0eee34bc920fc9658d0d87d6a9bb81798620ae24d3b596692adfb73c37c73bd3d6512e00fc40b1763597a19d1c15c97ed117812d4a55a48367cbcd2143fc53b3edfa4ed3ff9f16091223ead27335dadff5963f55d5caf3a07829056b6d33cdf63ad7c3e88fe068d7917a6202ff79d242549c26e6ab98ff979e251466b1b50d29cbeb1543cb47295d25fca57937774b50a3801c7ef94276d5765c2697314c4f1d7e9f85b7521d9e16934d10ba9e05a793192fdd71aebc9fde6260b38edcf7e1c6bb5e75b834169ddbbe8e3e218153f1fcb2672c8338ae3acf734b09748db999ec458a2492703c50028da4e2fb51554c697a8b82adf4e7e89b079301d13a3af3f5bc31c6a662a5b2df6e05e9813fb0788d5daa9175e876e5237d4d2610e727a41de50841c4baa5b01ddb41dbc00f3be41a7d77d18b24f6e0736ee03947e10d10ac9f9340e94b54211787937e4104c3cb63082560c5558b296d4a8cc1307a146dfddb424da22ee44285919595b44042ca29ad771583dd5182e4d65480de4df454329c4e51cca58818268b621403600966031122cf6e894042d863fe3597a12730c37587144fb191aa7e30c9fa66d24c6c4b2b8e67efe25"}, - {"0000000000000000000000000000000000000000000000000000000000000013", "008ab6fc6b1b2b24fb2e53289efa1619c760dee2353a049fd50113280f3725c92998e9e8175fa2bb81b906c6dab431107837c4a35234a87c1e6e560c1abf7d0b45131238452f32c14133df05f0012cfbfd4c429f0ba818d17be8581bd07d435a1146a3c99aa6db15a32bf1d2049cdc9c15f4c8e3e0dbc35dc707a49ceb340fedc4b68f06d8d8e65bf89e88fc702e342f94623539594ad6009d686db63c647eb6c80f19359d0d48f300bda36bbd9afe41c567e2a289b7780a5b0ff9fa1a1c306acb62635a314d81979c86f8e965fb36bd33a61dc8e71ac161b27bad74a435d27d84c1943310fc5a3baa976b24673249f7de449fa37a92e532ceda1443010a3cf8b8812442dceb901dc09e32edc562d1cc99140c493bba9ae5c3bfcd96b410d46475de49cf69bb1744b7b88ff18827b97e94e1c3c9f2b5caf69008d9642c2f120faa2449a43fa812d17be066c2a07fb8ae012eaa5954c2e4f7b30ea1919b6cf115b43bb791bb15d7233ead05f70267dc7378b7468a61e09e9fe6dc2bb03f6d43ced059b69866fa26c5ca45eb06fd3692542035fd3421da51491e579bbcbe1f536c063de0d00cd6b62c80aa28737412641e7c2c96f5ec8a3c23222c6339a9591e99c72b5fa3dd4838b9971de11a5bb70d6e0a7733a7deb9b46a02e6ed4faf1dfd1e7d5d5612fe7e8cb587306776b1b3123741d02514d0d58c9b0779b9efca71bd81b63c92ea98a7418aaf73bb4fcd142709f560ac7327f3385789e6c5724aa7453dbe4b0c9c2a7ba962f68bbdb4a212663834ba11b63bad4d332eca383312d321ae0333c75c3731f1a101d681980c987409718f7507cae0a2a66e97bf8286e27f2eaf1d1cc0fbafb01a45eca707c81365516712539a70cd10720d61688922beaeaba3734e48f3cd019e2d5ca970a3648099e03619be813a144fe1871aa6b49705b10326c04110a7e931b42ad78ed763483b832f9e3e834b56d66dc3e60fd1ddbf34dcf7f0b90363681e395515303109271e145de4a29355cd220bab26509e0c0d3270bf8fb78d2e2351a413590f1c2739a9f80ddf24081e46575323bd11b4f952988f71ac651a0ecd33e117528be6af391785d50913af44439222976716d7dc1fd1cf96fd144e43327806a788e6a5a61f25bd160e2b1b775ec29ea7fd5f14d7bbbb60d341ef2c9ad1a507219ce0a84dbdb9f0d8b537bb65672a49e5dcbb30142046e7fec694677ee5a24ef59facf0a0085eabb80975737784829951d8c3b0a3d817d435ac5ad1434a3cddbd0f34e294853b61e83d786cac6f68941c0c182609e1988c4c2df4b1b5b6429dc41725b3fb1e67523a54a3bdb19ade936855a577b375b891f35d91178960280b02ec1d383f93ba49d34c5abda6a7fc7d9aee674d35b0a7a2f66fdd94b8e2067be172608fdb23be052e1415384221d5b7f7d0cffd8b4a607426bc5c70071aab29482327e1deaa22d6aa75ea95b3f19739ce230e0bd57d507f18977b62ffc7cea028dd20b46a882992d43c61cbf51882bb6672a7dfd72ecc7ab763420eddb9522724dcbf4212a92aa677c6e75e6bdc7b3535738ac6db2ae01995ae56658f3b53c297cbb4c8dc1369267e4514a1a2a66e65562256aebddb61f069651bb4b75c0007853078c355956e5b5bf2fcf198a7bb0694497264856d6dba64277bcfed55feb6b17a863a1d864d57a749dbcda3a4423b4c1f297d193b16f48006fe66efa022c79b78d8f446b9b3fdaaf64f5a794f0b306a8775d5b3cf0275f18081557c98e375b5a56a08995dc8dc0d2631619cc26dc5ac4df2662dbca74f540b7b1ad12ac17981ca15bd1368020eea5d1e7d5a0cdfac3ef950ca17c2f071ce0e0ede0a9992dbb2a41179a8be910b039ad993132ac2c1c663233c3d9baf"}, - {"000000000000000000000000000000000000000000000000000000000000001f", "0008da9390c87e0795fec608b1c8bb0dbb9274474007ecc0fb90cb0bd35e24e5cc16f9af51eb8bde4cc80eec238718c88b4d3527d4f4376bf4a95daf1db75f43e3d523a19a017f0ca906e7d0be905a9d9bbc98cb0033a6a3e5c08201d936c1bc6867a50c74c0397c3d2dd1c9f6351df51b3b76c5066ed2373da49014f9d237c867e56311003176a54864a7f6553771cdff97ba554567d399212e892292a93fec7bea0e7e45fd4fc403fd9ef2044baf1dbb0f338e8e1dc73d09425d1f561c5352b10e1dee5f68ec43821b36f916246239b8a41bcf76f329c73269a569b3427e5d4cf99803345d3a32196d6e3824709f4fe8739e615a3ba13ad7aefb430af227e182b83019fe72014d9d3d0134f1693ba8b918f73b06fa668973a45a4278f51c957a1112beb16320c3da7856585ec1129482f17ac51731c39cfe52dc211d3facee0e0f31707b34ea2039c8d738205b4166007d15cd17c71abe48c6338c5bb0593ddb89fab4c0247fdfa51a8f0232fcef797234eeb846efb27cf1d41b8026ca03e54811c2e8c45c2ec42e0642921ab2482200aed1678f93638f6ac27542a27dc1310f7ed9be0fd176e24dcdaaccfa9d112487fb002b4666fb281d178216f0a019a3a9afd9219a609e83a32809db03e63572e4dc6952309aa7adb407513555c9cf42d3dd1538f79f88772ca067ca003403b44dccad2ed38a8d900082a6e733d5de61d80d4435844586958fce8cccfb08c159ff759a06abb7c611f448b1a4f0d865ca86a902b7ee4c05e8a7a1e22bd057eae211e81df37012394b40e3ab14dc1603407c18109dd7ba475575dabe6602ad80c200029b7bebfc42419c2a044756e99e444509fe7f0b5f57dec3448d523666eeee58c5095d68c318420b9b6f24cd31b3d35503ddb81d8e83f379643d3e2ed4d9f75df5a3ae4a370711cd1a55c4baf34b8a00bbc6a35289233d1ec1a4be7d6b13c32599ba3ad001357247174de7854ec7f0bf7bd32fc2b7c05ca91e064a8d4ca45f047b4896a42e13fd1176a8f5db7638244f237a02de0f77c92b73a9df2ef7e5a2b68d16700456872aed9eac85885dc2f760a4788d57d05612542963c66c41d57b136ea0b2f294590a0eec12ba42f62af1fd7c5d65e42f8a1c6482824ecc6137f3ebf4c467ead4d99edd1bd902f9a6d4b93daa735fc7fd980d0446855b084748112892a3e3d731fa2236cb5c5983164486517685b0c3ba6451d4d766472dbd32d5cf1607fbd79044d75e295f7565f01a378886068230bd911965649943a7643fc64ae6022e6c10867e0d5964ed0d9f93c637739987b858e18e89addb60f47bb0cc3a299fed4f1d546b98bfbad33f0eb208831c78be0cd92b09af16e60f56029a04a2fb8e7a44da1c3b965f8946d4026e9ba42e6f6b2ac58fc9eb88199096b5731701d4ed3d41dbff713e3fe2ad21ebaeb1efb25d2f3b0301647ddbe0336f7d563062896b78c1023956143308f878fd9b86fe88e05a1544825703e5a6c6173de819a6f710bd9c3bcd7633f45028ef9f39e3b5728304044bb53961119c2f512e643f26daa0fdaa265982a11c7268e7919eb61977f132d966b89633747cdf8edb0a7754956895d37594b382ddadfbb302c057bf19771cb8a40efcdda2cb986bb2417e367d8de0681dd83102b009f6531a66f3347b54a9503d150ae6b899d01d5e5f16744f9a2d854ffdf7ded86db3eaeee17807460a445c28368514aece2680f07d60420ad250d82f780b67b4f6c3997495aa6d62fb533cc1cd82d771edb005fcc1f74f9254e2fae7d66714d9920fa8605f0efe17865b80ee08209488cbd6ffb279456232745f9bb9075be3f03162a0974d5a607f1fe28cc23aba165f372d0b1b32fcd4f7d923a3d46ed6ee632a95279ab395"}, - {"0000000000000000000000000000000000000000000000000000000000000023", "0002f61ed2da64ffb45f619b3043bae5efa21bbc9f108edda8eb187e650188310c19a8ca50ad4765cc2400e94e265860f0c1249ef236544d5ff589c2db2aaf04ea8ce21e8b650b539f63bb3a469308f993f49415019b01ffe8a7cf81c93fe1b2035ebe4ad065bcbddb0265f43ec0851d40c60f55a1745d59063e28b4a4c502b40e0627e54d2b6ac900398d0d71683fdef335e62edfc571cd90ee4ce33ef32f3748fa2e51059c93dd00114daa965036492a5208e35ed0ae923e35140f3c0e78de8fea0f1c10c5f90331a7562c78cf2187910e15a9b24b2285cc21b7fd76338ee64bbaed94ff79861f1d7c83178903d8badc83b163ca952547f63c0c220d968f37f6f33821fa85312342edb1d155f677f1781253bcf536d287bad19333997c6946c9f27d3c0de6102043ba986e531fcfa456ca687eb40e09135287502b7cc48d61aa2197edb9b6c79272d3262e45964333007e93ff9ad0f2e4da45d106fbf0dcb145f2f29aa21c2dfd709d8871b6b4a9d430143fcf7d15b2b0166b01dfad9ef009b4a7cd9df13f485f08d99047eee892194a11aabc89d51bd8a84693d2d1e3fa399052158d086b1c430a2f1f45a22172ae772fe4acec5ad0ee4159f2b6b14ce2a8013e4cad16877afabf50dc5d3cc03eb2a54b51d9ded0d9a2c8d7ad529a4e7be3969bd54c7abbe6d05ea7554478072bb75e0d45d6d6cf85880142daf91cc1e6ec8533b19dd2a366413f9f5baa240f815365ed99462b842ff6d699e1c8f313ea9922fc1156aaff9a2bf203914c142ed13bcdd9d63d1c338415aa729b90930891569a2487aa4a0912203bb3893c1e1a8e08f361ea1116c3547091ee1e86031f9cc6b9235772ff82ecf39bdd7192449d995f911842f5fd5b2154d6119616b0e393c0d6c9d3ce0bdf513ffcd9a34d1c4449c7eb2eefdf9e85ada4b7d989e5df2f4a09000f4062430e56009be78185797472ed15143a75ae00a93b760fdcf3454a7afabe06db64779c00fe224c020629cce340efa3409c21a594d149853277d81dcf03e6124c770e53098f97e210efde72017ff5d5b05b046901b37098f3cb9a3aa253babfd53d72622c19ba11a7ae485528f393c64a81d1322de7414d5fef1def13d7529b6fe17a07e2d88190bcec61a26b2e5619c1265c6a8d56ec59ad79b3e65abc7de9ce58be3bec600056d410825df31d80abe249bc27bba4aa484ba3f42294a13ccb6c0ab7a37386ea67d91f81f14eb6aca6006cc49f4d996179e51abb640560be3f5998dc634f08777dfad105facfe93434e74a4c321959078c2c98013ddc596a58a98ec734b0b3fca98ad0953726cd7e4b6b443cea6e44c986da95f478478b41c9525acc7d0f40464f085cbf5f963854f95fbc6ba673a513b84b22b3df4a3a6303cbf05de4a586ec4217403e1fdbc206e27c9c48c9f1f596cb79483070a71ecde61a7c4d32c9ba32329d074b8556b33614a293458734bbe46a0bd1f126d0e97503b78a421dd739b6452fb8f304c3214303686ad0a4c1207e854effc437f17b421000750977b2687b6b66a7cbb1353fc13d5c09dfa87578500c5c42349a3c1423ec48020fc74df59ec4c8be84ed173aef301ae6a7556ec691e746d62fbd0ee97724ad4aea9af9c793c3c4e6b9c5a238ae2f09ca81fd89470e499f68289dfd67416015eabcec974b56a0de29d8142b8238be5053d3d59185a31e756b3a6051bc240a1c0e3571bbcedd1f6cbc93fe1e74bad18e457f3a0738f3d249910e4fffb904a48eda685322a5b0f71d7a1600aeccea8fe5b97cb26728b2f577cdd678d80a3e1f67df6e7862a62f535a38004c42cb9a251358bfa823a525259fd5c834f7f70294aff8c82a3bfaf2461d587a7dd279a09d6fb86e3794ade4c3a2ed851f4602"}, - {"000000000000000000000000000000000000000000000000000000000000002c", "000f3151de4df181beed60212246dc399163d1750f0ef086ca2d4ed904dfef6380e9a7ea6225f7fa29e815d60bdde0078fd308e226799c772129be537d9165269ca4a52bf1c135b86b75db2236cec621ead9aa03010ad91362aa7c0f9884e23ae2c29c2397de9ce4080501164ca156182768a465a43cd03aa5e57d71295e25bcfbdb761a04a758529368512b3289dd373e221f26851c9f1e0e6225c2a3d5fcc0b7b76251e2fddebb05a4426c5654a57df0d6e5d79072de9979e4d890aa57f43e99d858dfecd91b069dbc5f08be57e0f48482178ffd9cf6d6e500dd0b351190ea0a66221f9ccf951954358ac191a246d065138a81b9983d44c33691de14455565c80a19709f85358fcac7f3f1abb5ba09841600d7e7bfd4b7d594bc53dd86df4a810747a94dfd17c9565f0fa033530814820897eb40f2922b555b5b29d13f3752e3c37fe0f9f2c1252d5abe2a34351a8f007d2c3a45e255912730c0c141c8be2922821cbefc39da7d62349983517abbb4c517646745bf2e5e51c50cfbb86b264e9e8df365314de413fce877ca6fe41b21a6caf1d69dd8ab5b1b6245d2bd8a80e016b2afd8008c6b5bec94199f809cb1f80437fb8f62a15d7a2c1fb15c0a095e406f7275b24754b11dfcb403d33570098ede9e1dd6fe659a2f467b93e9a6b25ab87801d226d5c38afe89e7b1d472c33771a75c2164d0f2b3b2033f74888112b7ef9267266114743355e5e23493290b23dd046b5a19058179c46052c17e7984563ecf27231ee368811226877757b296fb4458f2e3bbbf82912342215b919473d4ce4c538690d96eaef53afc5e37073ee8b5b563f6d3fbbb231d4477575569289d393f0cec3fd41efc6947fb65fa641dffce7ad53e5c7cdd0d3e0c57080a1a3335afa3a166d0d9f67b0b3c5f1114ff9ed11715873384acb516c3cd70c1d46819e69b0043767d08a66117d5b511d7b3d753c5d4327a2bb5243936d39ddb94ef07ee08d9e16d6bbe5c30732fe702d5366767840af06548b1f26cbf2f93db2bdfdae239a9bbfc61947795ace455ded47e33d65fd175c632049f07387304c93258b884a876d73532c10236dd8630c75486d4ccfde5493344be8b7034d59d614fa9281a6d3a372495705fdeb21656a1f8e50297f2d7348f3261f756cd9646dfd811259e98e4b2d9fd4a721fe206460d01198a1d25417ae0b5a749b772200e5865c5080aa5853ea74445859b010d23a274b9067f0ecc9a0bfd249ef8ac64fbf722b58a2a41cc3270f5963d8824f5eed0175584956cd9e58e012f80bf6ca6bcbdaa0789af0b795c7ab38ef7e6137b63cda694013a4e5120996163c65046cafe49e23a7240f80d9ffcbb5c0112791c1edf1cb175c2dee58d8c3329b30508b8cfdb13295204cbcdf58ee2ba172c9e6d9acab0f23e4c980707620489cb1273b6bd82b5e852a43565f2df5df60a3e6c898ea3227bdffc03ae6a46f5865a8b7c8e0a115969d92caad39f6aee519bd5e9512983c16fd66b2b90fa2e402358274d194438b7c28d0d43a997c69b14fe82875096e85ba217e70c88f61a7ded3c9e20273f440f8bc79785a5e43ab6a713f4f8f2362995254b2729aaa0048bdeef561ea34a0026eac1aa585c8e6350943d5b63d9bf6ddee527969b50025600ef53648e089807f8fad630a3603f90cd9b34e9e5251297d8543a8ac466a0e70001cf72742f09af721d15e5351cc81a24446d1594d0491a8ef56c6460abd73077baa77d25908624feb089ad9cccd85f85c6e1da38609c19fa0c43664fca9238d2d177b2d9e5dd5a59a73414d6bc53d3ae34d1acaabb84db984e275fbf930361db8441101f59cd116930c17cf693597162fe51212c3db0a650999e5ea4a14d55f7f125e52ec823d2380a969b00"}, - {"000000000000000000000000000000000000000000000000000000000000000f", "00aab49764362f15f5e7203f03ea00cc3d007936375633f72da55aa84b777af5fc985f9f41d926bf3bcf07e1cbee96c31e899515d44a953ec4e58e0a0d1ee809a6fb043faa8a2b8dc9cb5fcd6c41bbd08d9eeebf0457f15d53c2b45335ecd22bcf64ab618c4db36b100b12393e2f9f8d810eaf2271e77447f7d3b0febff705c93a4f9adb65a8e66e62cd2ba7e055a0d8f48bae15d2eb53d118126d0f3d68f8dc53e80f4026de3de701b29027969fb6a5aff321a92fe226b2743a75f721094368defe5c4b11b6489241cb5e77af2f061dae4126dd2a3c9b197a92ff87b4d8c2c408cd631a5d1e094bed8e4fcd6333f9c36f0582b3e04c577b413be32802dcb79154268221c2459183c3ba0fddd1fc7b15d90dfc368ae210f9d29d631655eee63d32d7709e4efb196bc2338b22653f704431e2accd8c01bcb578e6691d22fda9c8c97df0c91426a81efaa9f6dffc3fbd3e042a4f9f31a0a10d9e8250b46f95fd3cf8560856740b5e754bba07a000b50a3a6aeb7dccce9e71f8b89a0d781dd809551f0eba52722bb9d15032431d382a5210cceeda1a94b754ab260112eb4b4c0dffc9d1d3ce045f8bae3ecc757d9d11e4144f3377ca675b7b105304917d8919f49b29fd92a1e8163b5f0ac312b834020dea1459fdc87e16f9735774d86d3fae05cb1c1a8215bbf99f99502a874300a83f31de666aaf3178808305bdc2c9f84ace4cda68e0e5e7557c807e4b5ed6e611ccaafd27676a69b64ca6c19a488dc6520d7e54125dddf4510a197439d04f18990af4eaa26f88ddc3eb720d450d992ff793a3ce79b3d37109e27cb8df3b460bb86c259e2f9413bad5111bad0ea4ecf246d9fe716865b7d6fb9d037d8df1d76fbdde1491f57fb083801d2b2c39901f74054e3811d4b61fd674809e3f42a13e41979333d16e1a926a374ff97fb39f3529dff33e01393abc93c7b0ecac7f163c927a40ca39ba35aec10431bd67505abaddf03ba4c77bf5e6657ed7745aa2094c80ca9e831a2c9b5b51525f60965f12b3da027911b07f08cfe2e6c96fe7041babc8ac45e89910a51a037bdbea78705365f223f154504a85eeca255f4cd24554ee18c259ade31b11c7e37cd40afafc6379790a16407e2760246447fccb7573e37e44a9ba1bf481972f0755d5668cf171d84d73afb34c88dec061dc538f04f85898b2930818bb1a34072ae261f2c9ad381dd42513a6312861d37dc8dac8081cec12e749e79cf5e40f38fdcab218b054cb89f12bf6a00f264ff9ba323918f4959a75519601d8d244346a7436c71a9afe1abe05167b60b9d0dd1893ce621a9be58bf6189679aaa70d886165a651e05510eec19b5e4af234c905f554080ce1d4458b4ddc3323a7e71c1f6269de417515f84e1548952a05081a858aba91774d75b64687261b2e4802c53fee7e105e7fa98f414fed307ba51ef6b1665a1b1dee167f2a0475c802c282c6ab89c0d1e7363e101097623784de768b6d56d84159668226bd67d8324b117a81c6f8cf14d576ce93dd532e8e51571cdcf8b507f3c773c9480a547a84337c0039c055d5be3b82cc1e523e1aaaad2875792864b7ba35b7577fa33f4b790d7b2e9731d9d5cd31f21623e9790366e74cfde2792fb011b75d176051713bd3d46033461686f83bf037048c1f29b0cb8a3f1bab267bbe68f541ef1191959c085476936aa686a1408055219e716a3a90a7b87b491e1f5f1a9714d041dd7e02370d254eaf06a99e1c3429e3de4bcd0d469d1aed32db63c2b39db9217416780b1c96648b905e0483c9210dbe11620ddb2072b6151f6c2986329c0cff06fbe28638cd854942f81892881f69047c17a4e171c926c33f1e7c9df9e490faca6c244ee125d7e387698b3e74074b515a7da8ea4e3ce5"}, - {"000000000000000000000000000000000000000000000000000000000000000e", "01a9b97648cebb6b9f0c20667192130ae2369d8dee39b943436c514ca8c5f3858576ee1b41d3677be4840fb4d14e9b8aff6d9a72e59d36d8fc1215ecb7003433ca37b2bd2183d9308e6486467952070fe5b994f60f221b0049a9c5b9a385a1a0c46c797a5be954f29f220e6b6cda0d4f0d816b558ebfc7718a2e5cfd975a13d3966e9dd3f649f9bb520b4db4e0c9d629146ba73affa4ec7ad71b43da87d677a7648e3a67ddfabb7901fc07483e440cebb72c29954962ae66745d5a431405ac119e1fe0180b760e50b98833e1d134becf1a3205bc62220a4b50b2cdb921beaf5582546fc6f85e105eadac66245aebdb5d9ee7f866781e5e1dd15c78f109b1a399dc18db7b28e486fca7c1c48dcd964f2f1712583cf9f3de82233412329ff4d8dd1d19be7f2f5c2051ff5c50d75cd1d5bf52960ba6958733011fc89c2383e2af710a64ef3b4e82d2e49cdfe4c488f5623102ea07f004115078b33ba266e72409753ed07285490ae79633451186e7ca9e21f72b43875e0f491d6c2a042f697a194c95e7307831b70b3f3e65d087fd667c290881d9b95e83e7c352d2fc3a7ab2c297ed79a093042388b3b385365bac9917e52ddc3fde5caa1bf8a30ef7f991f0dad196fb5ac27adc4ce36a4f27d4f468064074678d8253a159f2a42a99c9bced1245ea3fbf2d1df28c8912cceb88f7b6b0607f298a53f097a24b073014e7dc899bd47db37b6919f0c06f8f3b1dcb562c3fdc4869cd49b92c17d434b8e64c6562411a41da0831eae4fc2882b3a2a151fbcfdcfb0a7fec15e49a28742b196091a93f0b7334d57e5cf37da3aaf6909113d0f438924b1c2520bfd46b7965db4e15d199983673a057a6fd3102fffb6bd7e852e518821b781eb7071c441abede4bb2a4b24c64d6636b8e56bc021fee9d33b02b1d7a1f8a15a5d0265a9e4ad11adbcb375436026b146b8fccce5ec489e0fd72e0d64e8116fa03680ec98b2e7470a105bf79d63eb55aeef5d9763e85010cc85ab253cb0ec6cdd103d518707ee5853e5e44573d50350995d0750089c8d5eb5ad19fe1e4983a9c1314cefb21e890cb6ced8bb411afd41fa23e20ddff262158211c1798d580eaa2b779a354fb9e97a69f782423a8f3aced931d43c3a092b4469a1f39c94c1883602c541522b29b6287e09213c859334dfaad1d5e525b04ab13708061f73bf0634212a1bbd140f1ff087faf2e712e74150d41a1bc0f92e97425407cc2815aa46d178db7480228ba234d0df1aa0e5edc2d9f5c32c3cc18fe5a2a60dde4dd6005744849b584fa5fe47596f808f35eb8ea87164c5dab719b73738ecd806d1c67f22af80577cf94ce419c64e35c6db99d155f9414087228a862bbbd0ccafbc4182570d85aec263cfa5d7bd02ca83181478d2b92bf4fe3af179f8ef640193f753202c1ca08a111f197514d842e4deab5d1591d1bc9d1284fed761a326e85f2b936a669c9aa6edd7d5a4c3a117369940ce7494f561247d93a5867e7b53a1eb6dd3dd9ffbd215b3e89f284f42ed844ed52996a7ae25b066d8bb06230bf61b907113583df76c1610fcd26750b813155cc9a463f256373ec7828e7c6abf7597d8212b87764c647e60f37cfe7b9cde519bf58817cb80e12d70bd98613f34ae55d07511ec380ca07967e832403fb26f19c15243d8ec611659827f25de84bd1c4380f5df89e388da720c721730943630cfcefa5eda7fd05d620ebd407f834ef8d97e3b65a4c9a1a8ef429880ed7a51bd88c8923f76361d0fa3387e56c66d6741c0e6c4a3e438ace178f7ee39b7ee33e322692395a74146c7ed1590fff32d3d0f1c09ea6edfac2e9bc66cd171dae74c5522643c1180217c2cb6e1391e0ff391d20c722d3847aa0d3e43fe3676aeabffa556eb7d143"}, - {"0000000000000000000000000000000000000000000000000000000000000036", "01d449dd86052642ae1784b4da2ad82db3a575d5a51af64f562911b792cc3b548872fb1d5a4cf33b173803dad6af1944d50f25183043d6f60f64e5cad67e234086ab7746b41c95ee54571f7fe56a6e274f1eb5e802edec44fec244b1c2c2013b9eb45340578bcf3f5d4735ae21151a9adb7a0dd47dbbc793568b4a3b875b35fca6b5b29a97f70691752e8953ee7f586bbe24ea443d07cdffd53c51cbce881888d7110a3e17d8578e0bf6c4176344dad3c425e4b9a63f958d2f58abd7c119b69b0fa997c9dbcee6227439d0c04e5bc9de44de15cd15da8390a5e3e217b9cd3c72203ad3eeddaecb28390302b356194775c4f4501e408d4283be5c9ba41b71ce3b75699345698949fd3b60b8efd4011facee2b6cbed652936fc8bbbb45ec6fe05eca4f343ee3643072f1d3ee9edd05bdf416b206fee2923f2bb5ac9d50cbb72f0c6751b5b3a4e879ae50a73288ab96bc2a022efb0810cd1c3ccb41d17edcbbe891bcd3f24a4f1bee87c76b947a3d3270252054ee86395ea0cc463c0b5b45b844c6546b44f2f0baba798dfda41f1f9c4617e20c705b193eab5e13c5eab6f3ffde9868352681216d7afa80a1d103f61e8608f0f7404a32531f3c0a4b39655b6c141249492606f0ac39e22b101fd8bfca47c11b81169ae7db02e39501ab4419dd6b2b8f58137bc83523482913d1f3ea8b91e9f3e6c6f6cffda1c114761c824cb0075dcedc11f43a58f7a896ad7f38f66b28069aae302c5192fe08c83ee0466e465b1752523a30cb58dc53813732a57607267abef709c53bd7ee3c726a58b6a2fd67bd2e98d6dbede5f380ca9e6a6215f91b03326c5455fdb62552c34c5595eb5fb80af61c80ba0789d904f171370bbf9066e86770393bf8581eadc6ac44e90f4b8cda8718965a930de13eff4f4b2edc8798be52a97d201b83e7f2785dc2bd7e1ec9a902c8e3701258b2f72e7ca469544cc4ab79751f8a42083c826f368c42d0a40b85d08fdb6ebe0d3230ca7b0bb41c33a8c3dc829c4812fc2efcee2685b81e56d2117e53eeb809fef2bd7e45e849b5a1fd8660f6b1cc1618b71f9e0a68b8de1975fd0038ba2b5046feea673cfb728d279cefb1618a48ab9cd753237334bc480d262f9953941032aab2ef06082b655f36d789ff91d727b66278059e585af4de7301883a345eb971fda6630f3b2797afa17fa98d74a5b511c7116ab086f79e072f24ad524991997f2203b3e6e8d2475df2a0b3e4bb1359e9346dcd02373552d52656dde5414a68bcefeb18145ea4f766cae3c368a6a6d3f12eb2394bbe86f50f7f9eaff2a1d76f75ec51c8fcc7f424a05bab89e253c0cb8a709cedcf0a2fe6799c4ca5e1c1c65c6df82ee91d1c0f5fb56ff688d5099f41e9cf2d841d9ad142251f24766e6f81b6414a17c6dbee1754f8bea5fc035866bbd171ba1f98832037864756fa9926357c501486a7dd8634a2b7b9a9064620bdcd568f721dce620f08760e335ff8f3b17e4502a14c0f7a14ce90aab612d9d46b190d83eceae6b17ca89585bc92495beff20701f58dd472c44ff361d081208df358f556b442d51f2b790078e10577ecdb64ff35707f0a1ffa1b18fb0f5b553d92067fe12284839f6379cdc78da09db809115c60992ecf0c65fb53415e4663b0f8ac5e3ff5a00e684421e07061f3bd9074082e27c0433bdcfeae872a7d77b6c7e288abacd5e4b5f9efa767274b5e094e1f8ade67039021c55f0eb6f581c6ace20973f9d4472469a413d1918714db2c048a55f8b1395bc0f59b0f0f9e77136cea7db3c726f26faeea248268e47f31c5419e87e4975b046977557458e5b97abe4754da6d6945e6141db62cb2e58bf084bcc4446471b84f79720c58568c92589b1a59ae38d5d8036e672195613323c9"}, - {"0000000000000000000000000000000000000000000000000000000000000024", "000d9364d89baaeb29b1905172b08f6dc80bb06da511f4856b78b759bdbc60158b51c6960a00d4969de905b24a40990fcb2e98a480a2719874588d2c51d55513074a15b7c61193e7f8c1637f20d36d2380beb3e207a279797712fffcaef9c27902aca55e6e8b1ce4c43661c75c14f0aecbba1bf6276f4aa016357557f77c1cae0208ed8d887eb8724868cf689faf1212fc02db31c07e33ba90d6dd0089e36beb6da2163787126e3b012b6effdaddc86500b291692022829226973ed8d14abacfe2879821f7046ca567d66da0d5c8ce9d1b971054d98bf146395a4420e1b2a1cb3176cbae1d987894f13f65c1a87fdbc058ca29e16bca6f50a2baf2820b3fcf7d0b29e915d45830e5f4134b6ef5e83819d222e477a7728cc6568f20134914c4906157369cc4290f8a309adbc67f7fd28991316eb3efcc5fadc8352121e91337b952941783bca56e8bb95509aa3897b6830209fc25bfce1bf0ca73e659b3f87c19b2355866f50e3aedb909c66d2b26f03418d27ca14593b29f3504031a7eea44077c46cd78d21d75a9bea201107d4d4f0b50e774490d9da3fac5e2f9a4b0444db47bf0bb3003958bc4ac2a4b7d9bb312f143a0833dbf10dc98ac046c3f34574ea4913f9701beb3e1f0f8dcf688ab1507a05714cb316c7b9157758c1bb1004ab1131b000f1ec60b7bb81d92f3a88de87a494fb1ae7f00b6830c0376c5faa220a9cdab1fd27836efc4a64a05d3e17d35d80a1ddee158ff6a62a59a49dad375c182bec54f0559bd498ac299b5a100984574614faa9cb37abd752e3ece1967bc6dc7ec2b438042cf913cf3dad35065088a81472ad23d5fc841c4f9c0da062d688f50687e174ca28f5f4cc07116fa22574933a7bd88571a21482a14fd84cc58b19d3624c7fb3561036a9110b4a9d5351e19b572f158f7915806441fbcbb55934f9fb80300c76c609456eddcd945913412ac0dad549e4fb35216a24fb2d325af65b849c48e452b5ee686659e39df2ea527c099d3a720a5ad9b43ddf84032ed353b7a1054790aef6e205ac96154692137eeffc6a78dfdf6460dcb91f4cec746ba6307b3bcd0fc995de65e716a051a7d7c7dcf16fb8b355903b72f7b8245aec7f48a0815b02e883251c86dcf5ab33bdf6be84638219540c8445863e3a1512709e4a7a67eff59ed9ac4d53ed28101da8f238983e8c0b28b1542313e3f1de34e3615df3fb773ac5c3252efba94d9c887e8dd071cb9de9e441a6df973f317b96982ab530abd338bdae2e618de1a1c721416ab22967f45a913b043f51a4978b9f0285409cd49d6d5434ca2a689129742b8ce7d7dc88f0fec0c218580974e93737a16542f734eaca18f4bee4fae0b427cb62a84d9b29740131cc74c2e2a9c2f16a62b12cb2d71c01419e77b29b3a739d10fe236e5fbd96201b42f36c45721e7d5ed22d0bd5c369194a85bbfb52337a7ee42e7248d811602400cf3ef89f12f9eb32904bc0b1af537d629e0ff03840464267d4497ca791b47844b613cfd2d8bea6fd47b4766089210d33a8e691d8d7b3f7dd740f97e7ff8d3bdf33876d1b71a76c244b26715d864e8bb9452f6a55d6efca61919335c0128ef3f2670d3fdf76c0d9325e2726d4dcda7b34113620afe84afec56c7b64f66496d4b47aec7c8fbaec40d5f7f7a6883f3c9b5e491e8cb94dd71d20111bfb21398f8feafccfcb5595862ba221ab61a48e4fa9335189f7df01514bba79f65a19a24ecb6e62343d326a422cf923550e5c14d31e2e287826dc00d83777ea1280fe3c0fdfbd2c20ecf6bc6c4e0cc1819d803bfd3b934095b475897ebabe56008d3ba74ddab9dc93f0ca41f53b5ab6e1b7285f667568ff3d8a6a5e2343d79152c306cdc4a103f7fbfb033d8dbad6966b4c6fd55ca"}, - {"0000000000000000000000000000000000000000000000000000000000000015", "005bf4a34a0f45dbdb1206f906e9858a7fe4f4e952067de6df17038d1e6cee2099001fccac5668c95a51023c03b7590b49b1d2c84236c1b8add553115401240323c5d8b29f50b5329cc36e86342bc4e3ac32524f0df920f465d80cbd14c3f1c06bc18f0255fbff9d0424c2b5ddcb62ce5dfef562d596f75eadf4843fb1194a87afd09f9d7d9fbf0ea5b224f5018171f36e171353139aa600d993dfb33265746540f437b3063e866702a51886ca10b7d97c21d42b27cd7aba542d9e26df38310570d4a5de29c4a393b63b3477b28965d4cd1e04d33fce321ed9d3eea320a583ada5b84d876b0a17175d8cd3df8869333ff45845f35ffc7e776237e06b06825e04eef0f095a30d25cac4d31686ee16dee27206994c385e4bb6c33e34daf67273bc6ec2c5dae67a18ad11df6e5de7d1829e05b987f6075d991f9a1c72211f1f4c7d22662fa45c06ee207baf96e638b8d8b601f1751f694fadd69a2e438d175d651de49eb717233450d24bf2cf4437a3b1c689364e5aca3fa7d9bdd407046e9e8fe11a0df64e75bd37bcb9e2c44e985b9b14ba25e581cbb6309a96953c685612595bba6bc0e40c4b6c3da1930ef6c4f78134b6286c797cc4fc920d1f46c2c19022e88323fc76ff5472f02de8549b79c7256a9c398a5d09c929b48299e4d14e6dc31c5f55fe394ea40123e4d933fdaa1b2658746f174851be6fc50346aa95c88f398d13b7d1d30115b8976e505fee202c445af1f04b1bf9ec407317dfa98b61a889b08fd91352579caa99e1d93d9d214657bec4d6a5dd56ad21159dc1d713ca31130ad2f398a86a51be21375522900945c511d21b166b123c92590cc61761545e5db5e42ed3ddd1eb91059dfa074669165b22d2337bb826c21d1a955f2a4e12e9c790b357342b552572b6cdbcd53a817be4c85179a8ee6a2b11c35f2ededb389968a600e7057e35e480c144c7441221ae1851fd77121dd13647ac95429665b3e1d183824c236b27ce75beaef8038a1b2ba6f55fabaf8137aacbfe00f24824df638106d13b841b050a27632b18e6d8d7cd6a40e3b70a040cc0af24ca32a849e60af751eac758a2d3e018a5f616e3c9bdac8e8bcc7f2a424205664bdd09895bb82d0ed329a1800c8793fbc52ae9bee4b9ef47e1fcbf42240c937d1ef7be2bcf5458fbab4aa832d7fa78bdd00723a65fed681a19f24fe10102b1952909acd358c40ad1557498ac6b71968fe175905d12b246f895907951ba54273c647d0527f7d6d7447dd0ae3966979a145a402e0273b53267dd5747576a7b7196307233aeec124b29e8afef3447eb4d13e9aac6c37e52fab9ea4a1b9ca256611b98ff1c82b2e3491a14d15ee8b5740623219e4a644f31df6df6d37099aa6fc95e12efd7a73ca78e87b6d3e3b4a5dad49b4d297606e18dbdc20c02984dceb066dcdb3ab3e238c4d55f8a4808dfb5ae162b62b11f602329272563f1defdaad22d39f2f63c12e586cc1796a7990b2651c68b2789ea24ef9e4f0823d39353ba0b98bd70d155606fce9da353c65dcfcd09e213abde8e7e49e0fb677e0cbe4d76b09af7339553cbdbd403d6faab3e6c98ee92f5e47e9a165eece6121c51cb57214c5b6a1c653251f541d27aa558c3c91565d74da38b3233591911dfe38f91dcd89cfd220402ea3663df99e0972c4083fe1e748ac1005eb36c2906d4cdec0ddc8ccdc0e9d4b6cd4efa9215c9ff0d5705c05cb0b29e7603946ed6296ace8b2a7854d76a0e0c3511de59c406db061142528f4653f5c00cd338700eb5fbab68b2e6ebf9e9f5cbc358e5f2facb7f1ae726356eaa16ce72c55f93e5ee2cf4d8b99c4f75571241886f413fd7fd5db875b7334947310efde7fbc88c4a02f60ff1299081ee05176b40d7c5e6609d98476a"}, - {"000000000000000000000000000000000000000000000000000000000000001e", "002b1b2b771a99695799400cfeafd73528b6ca05f70118c905b178006ff535c8fe20dd30a68c3a74e6980c39aa93c055c4cdb3fd08c83ad9b2e6aedcbc89f51eb471d53272a7c5a52b12eb671ba95b75545bc5ac05299acd7b9ed7358716a283d7ef1f85eb2a5d5aef3c4ae9fb4c54cdfbd38cc4593a6031f16805d1035d0779cef7120c99a333d1214570f1b049c6d3b7dc6f4fdd8fb04c28cf5b9f9ef5e476d0b275e86f1e062b00e9054b75c3a2a6bcf8912fc33908bc870efdcff509edb4843c4edd00c2a1697b4855dddf37dc3e56db096761d38dc5c957c4bf79e878f4076f44163b169614fcb1db95ec0f95e416116a75eef58db7fc9a71330f31cc1e4c085e9d08b9d2cc0df1273d968cd571da2a7beb29cca2d08725da36f9b8423eded58fda5aba27fc2bfd129b936545d1080cb4c53136b1ebd61d782ad1bd397e65945def69c4b4ce6515dd5bcb372446022c0c568fdb72430a3c22ac7df60ae8b386b5367538c09cf8c2ebad69eeba585133fae89e79ad3b31a00de5378fcb5305f341f9b13d40d47c30a33130b8470e412af4ed9a6dbd4776e1c1d62f2079aa18de40fc03df4534bfd10d66bf78f3fc16db68cd5b45912efc18955649c508203a5ebd9ae8ef5bb40763a8db23d2099d6672d79444cca9ca9122024c8705ead6ffd5153ee993fedfedac9fd07cda1bee5f6a7fd0277eb30b08b84573495a4589a5e9e3006359052db01e3804fe08d1de744ff39b27dae0a286c2fafe052d6c12fff3310b6a352f4ee44d3e7c542d3cb1d359ad567c05b5461d1cc77d971e7ce6e796fbcd51bbc716559fb164114a153a2e245763923d224acefde08629cbfb47a32c85e4d48ea6f389ad5ff4f205adb3767c8b1c7c5e17ffc67ac0e06a7ddce9f6da2c6730623822374591490ffafa1515a7f74a8ce59974c20bf9b32cd58773013fffa95eaab9499ccd19147af4410253a9d3bf131c890231cb944a6336c7370c40498a8adf717ea49207da50c7819871bcf591e2c8551f34c918248fc06427c9646568af232d81a1e45c99d8ae8d2a5532e0f30143b2125084b36480e7e10e4ffcb5f45ec0d7dc59049e0796751b6083bc2539d53c7c85473152daa3a51f5be5f1308a7d217d131808b2624267b4bade39d125d5b1609b63327d2ba5d4fcb7e3c242a2e3ba2a911284a28fa2d90729d12544274cf80b61f291394377267e04b895f7bd4bf206c27a4fcc3356155d50ce3d2f2105147e91209ee2643471a5c3e7c5afbd9f4596b286c7010b33892be0bf9e6f42f3d187c319ff17c51364f9a934081a6928a0116c556107a9cec2d8c8e2364b92206c553c898155962b4f50b21f1f89fae8ef195babd07b17e467fcca563587c2c836085bb1e22f2169892ecf29dc35a45b52ffad72a9133bec3d1c73016676c1e098464d9bf3a196c7654089026d1b62da01935ea7882cb4577351934b155e81d5c5e014d84723d0571b280f2dc539008afe3678ba9af2dd1c7dbd5500d4965c163d0d7d88b6f429bda6ebf08f1f90f6101e921be804e5384875774ac3414b9e20f83aea351e47c37a7f1a1773850e863b204037a5e7283dde6112acd46261d907a15630b7498c7b3c5a7e14f74a4b2e7dcfe013184465eaef9667fcd6fca1f17c12bf980490deaf0d2d785dd181f05b336ad9a5afc415caff3f4c1e2b3fe37fd1ccf043f8eaa1ed6e22e27cc0ba22eec70f95630aa36bf722ffb77242291d62318e132b4435ea661875ad8ff8636d71ab128ee9f2bed5d208142638e444f6fed8ca1396a5789cf560bc331d2f0dcb59bf65457ff3c1f593ec66dd729fb3e43f4d7a2e7aba84379e752d642dc34f3666a97ce0a64d6e8a6c7ac754f07205a1d64d4c0899e718e703ebdf2c16"}, - {"0000000000000000000000000000000000000000000000000000000000000008", "0034c8aad30821d9812a785130547866c8d1d7d7c90951990ba1e76efd49f83390d8e1ba71c1aeda387a0373d177710bebfee094f5a635dd10cd755fd1c4b331670ca09f6ff077c00127d5f15bf9629edb395ad40c6ee97bcbcf7bb2a2c407149d5df1c67fe37c078a1a3de70442d6afa6b609b33dd5d72769e195ffbffb1073b9cfd6ce0617ef1573e28cfa9a9d089656259a17370b7a64e144f35c4eb1b136fd6d02aa9a5a4184007a75455e0684aca617e87b1e79392b3bc37fd2e15224f4c4bfd852a36b6c8bfa7b78cd8f7c0f3ef42b2254b9cadbcf527c96556632a3d498da67459b2e3e3dde854e33e512efc374b8fb2b7a084b03357a7b8209b7733333a2da53cce650de6e59098cb10e8b785f36249ec788557d4fc1e0081582d3873e238852e4e243a60ca581aa6acffaf967fd4860c5aa89cd155b994a4ac372e015986d4cb4b7563b3bcb92584adecf3401718484ca089e7fffe2e12490930956888c9c562502184239cd86d14cb73c60b7444b2a3e4b4cd6fe9f21586f69c1219e493f9f63016fd7319ac8e2d82d8e22a74299f7d03ff1e7e1529bb9b13fb6281c18421c068be7b8fed606d7f0a011cc51adfb2d85431622fd0f28bf585cd43841b6bb782b57dbe6ae471b9ce2591d538381ba8f1e02b7c6ccb6516815d35f2d1f5e2b4769ac1155e4416f7944a7a422e65df5f3d11b4509028baa4e9258f8f4e78e954ab14fcd3a4108f4013837686da60ce0d6d392ec93a3865c3a0d166e709ffb18ec6dccb36cd10d981d53fa6bf25d032f8b9d060f42617f1768986ad6c83cc4c366dc8221cb81f7884f1790ae4c1d11f96f0f0121af66330c525d20594299382606b7fba929414b3b25a0ea497d81a0dbfee22927855f72bca6ea4f9dbca4aa92552ecab07bf7882263c50da19c99a5adbcad36b07a7cbbd2ff65de8ee60192611172859ceaefee0059a79e02b0e372b3936a1dbad798421f816f1255687f0ce68086b86ad9ae010e3138a47f9f130509c8356901f802418f01b320ec45592d5ee315a5c8edb624b0f12ccf4d5d99314836050130dcbcc2db37597334bae54d5e6b91055f67a106e50597440f26a7b50fd341f62d50fd115fd7c9cc11babd4d8ae14b0beaa6520c6dd3aa2681b9d5a6be5d226df2a5e760a14148f5fb85dd6682a8d6fcca0402c1b147c15b1f86ee9efc660d65804363037c3da607ac01d1b3f0a183afa4c1a5bae98df995c5f6cec92ed0a7c30c65adcf399004f824cc11f67dcd57279744acbecf97e6ed0585fae7df23c287a2ad255d4ca4060d7e2dd869834d4feca33db0377229088432a4f320e31db189c88249775368ed88d150335f34db4440169297a94936d69bbd37d34af0233b2ed4a9f6c2875095da9b74dd3d7f10f71a53ade9638b03be9b6af9069087808f223249e43423c054480e52dcd63adea5130ae3b973a3edc9e56184b4e02829eb426f9b5d69084ee8b4cbb3416be2cf81d5876256d095d3a8e97e3ca11e6a26b612c1cb738439175df30a78395ec91b0ded59fbb9cba570717824f8d7e424556b29d5ee9d0fa75d7f764a166b243181b9cc54706d458a560dff18b1e1f711602f09c2c1c2c148d82bc28e7f7ef28a42702fb4abd3d9b0cb19747ea3abe0aa140410cc3e0b0465f653c2e0cdaf2964e265bc753646f55b82673d0284736ba53237dd9b25a30659dde5cd97b319a21bc6c92e6f49f256712f18cb4dfb058a4136bbcc57619457165562f17da591e6aac63aef1eb0323f1f9c0f66ed003b5013cb0154467620d4c767a9281e77132513ab9e7b8a30c270bd9286cece5dd0feb1edf84918a34ccc22f08a15d7a27578ec53be5d7e96fb891522d575cacfd630daefa0e2b19efcbd213b0ab749d7"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "0063bbda5f0581b59b4234584147b1a9652e9fc2d9272677de42ba07ebfca70289fc28ad25b3281fe51002455781038b0662fef0d1c0bde04d08ed517047620e428f0a891a9ed749bb34c5a27a749d6a1af1f405056e59bafac449bec554a127ccf0ed355ab9fd82ba09362c989b44b11702ded57eaa66fd42f2829debaf0a1cb2cedb0822e04b8382a7b2e2265768b79d7d4e0a52f48eb0e88c3b6272c4bcc6fd030a0a1f1471ff01e70baae5cd29fe7a2191335795e24085a5dc058a207c79cf691fd56ba9e5b22790c590e936bc6db9a90a06c4246255f7cf587c96b56f42281f3a891e60f815c976ce83480371fb5271827623d498a5f72b1a530687436777a0d0773f83f13dde5bced0eedd0a30920e4ce2fa35a4716957a712c319272c18c42f7055a007d6aafd79590017a7ec525b104cc8850128cbcd41098f720962afa921fc661497c04a580527608f4c9c017f96bc985d71dd85ea717b1beeec5f269d5cbd3d2e6e770466d8695178c7b5bb4cafdd7dbcc270fbbd0929acad7276a7c1ebbabaf4ade26426bd69dcf2e736b7beaa6b6c6ce1e59b1373f5e13295ad998f78600c772f7eaa9e9ffb201ac0fb28970a55c14d4eb0fc31c9b75a2522cc111a2373b2197e2dbd7b21bda20b2a28eb3026556452d40894782565e079235dafbbc75ba15be81aaba39bb13406a08c4725c7588d5e9bac03ac2affead0cfa9a14d5722b7f2f281dca510835e235155e31f9e9e813932a6e45c573faa6b8d9a3d600c29dc46a55f882d15b5619f6694c7ef7ef3fec58c24168bb648304a859d24650ce0b2ea05979d963aca077dfd90cf57b9bdc68231df88b14431cf939e03e713ab1bd85695df754e9622f163be167baf543e0eb614f40f07e5290c09a6bae1ce892c66792dab90f09216975c1d92a893c961bd945082fa3762378d19f4b4007299259f924b037597d01c1a13fee52cb157f1ca57964ef334db4329359647c29aca31322ca056b7d510403329b6df40dfd00b564601719f3f48797c73861b3e2d80786234c38215020bebee704b243edabfa7081950fa5d710a23944652e41b7469b5b484dfdacc362dae93f836661ddfeca55e3f59a52dfa2f5feb3a13535f0eb406b2fd01e4e38bc6ff782de0677cb1bf174d6d82e18d758b614766b3f850fcc5b6da95c1411007d1bca649e3e560b824e4e2ac9a2e709cb46c3d4cba4362a21c5092ede917832c51d83df52f55bef91adafed96df735fbeed50b5b99f302b7ac963f02f32b28e7b14324346fbe7155a4a8fdef3aaa791cab011f4aa624d6640be1cd55336e9b6c1829de3cdccfe42f449a8400eb9145e60ba5d382371029d0bcd271f730761d9f995c0023f1855514a970c209d3fa38181759bb7d9704231e895c2f06ad086d534e72aa1bf2b70085f942b9860532e2e213cbf44c4be70a75fa818304f7edc87d13161dd65db29fce51e6b5e7325c35b12997027ef227f97d416953b6dcf8bf061c39d45aba779ce521336381c7922678b8d54caa0642e65adfc103344fdccc0333b5597ee3ca8f355a39167499e6b70a5e04d19499e1abdeec999959e921ea9eec3911e30d6412e3ac9e434776d4833a1ed6b25260d899f29d39d5afe0e26317f37d20e3fff43205626af074457c01ccc255948b45752b1e80feb1fd03934ad7ba9d3e0ee0f87e0d525351adb316c2603f348ab71bb763a6077414e009d9c1cde2c4a1ebaa2340d0fb63fcac570f1417a88666e487feb6715fe56042a63499fbae050524621b70908967adc6437d606440d19ac0592e04171dfc3dc0deb795903e4a88ac6c31d2ddc4576908144631c6f063c53f8b01b18c0291a09944687694f03d233780bd562391fe9b04799f6cf6a1b5bc0fa590"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "0045b702d14de9b9e8232186208dbe329278db39be05a53320f68a419ad8021301f96a1c1532d515f436283251b3541a8ee30f91940abaaf6322f0be3a47cc3999ae32129f14dbbe3f46730ef44185d49a9b81b803a6287dafcf6795b860d413ceb6fe7df3b374633e3154b6636f10fe53e957e41c51310d11f6c8fc9c4c0b8e07ecb0a63ee73fc750f769bce9970dbe7a1e211234de9827235ab1e114931633db69e0cb22472789059565ec4fdcf1b1c8a230876be485dd114131b67a116f535da61c3c47981dd188d37599a0bf6bbbada818bf31cf48086b2f467e3286e3cffaa1bce1d366df1c2849945907771f5c941253eccde298e68bd559fc07a94da64f925926b36223d4e6f514fd314cd4f93c4436329185343293eed3e44d78c6a3b74b253b906d17ab99c3110fc88f1f7ce24c6b3a234e32b554e48b3dedba7c05e524816fd28726f3d8345e215938d65b03440fec5e11a16b35fe2069a4b6cbd862e884daf80c3091e2cb49d4210247e74a97dd511eab6c75d7990bb14738ca51a23dc384d5196f58a4d57dc0de36361c18010d976ae9a9a13174446533f199de48b781e41b10e98a0823a99179f2e2246cf18279746a1db3491d05fcf51ba7999976511438153377ba9b10362bc421f7bf904a6bd16364a9642c64b9843651e1370967257c15471c0a9bb1ab48790201df5aa287a43d2ba9058207af2bcf6004e88471285a3361f9a432f703aa0771e5a4d192d5659123b40a40d30735575b4b063705d1a8cde7e579c9db1e9513342b281dd080db991c1cdd9db2ac6ab52b9d94c36f2deb3f3b256ffcfe5a07397d433050822f465bc24cf056e3e9a34293de5f0ba39489fedc80ebede770f5d222aef20bb41a48fe086c48b72e5ac09f053e413723cabaa5c86ff680280b2f5f6070033f9ac62a3509ea637305e20cf92cca00dd84dc689d4c157da4b5e5ee65c1b23cb396e2130beadefc9e04cbd93eba03b846f52ee23fcb74ac9009a50bc617562350da31d244672dfe1d69d5fd7c0d0d7920996ce1bd99a4c37197df4a0ee2d0c4b6a195092a688c3de7d56d9c8ea0e50fc51bc6383e3634810dc8d6b05c4bade10f0387b19fda5d3afd2eddc3310b561bcc92275783705d90edded93a9d962c2d8245264bd7f4ef2c824d93c262fa872de7b72c37fa485500e7cf58a2d764bd7ad773a7af73731cf2800e78d74cb95e12a3d3c014a7579ae26dedef4ae5307f492712cd1115d784d931d89624676b6cc3aa27befa7cfd14975acedc9c37e3702415bfafe83f2e7d0af9bbe80c57ea7e0b65ce2bd67d13fd52c66c450dd46c482c47e6f3693b580a85ce4e4b47e1efcbfb4f4d3aa5fd26591f05c612a90f92379592a5cfff09df439fd1e430a6e555c094db47f3022329ac368f111f11d6ef2102d689c58ee18d05b74b9074d2e911c5aaf19354ee42db435f57ec783bbbd9c4993f2a410da1bff448411ae0de592130b20fc5b44256db145888a634da8d021c0ba736edd64f49084811e11c4f22d57daad01ccd0843ba906c4b9709c209b2c88c74c81a7defb59a0219f2add37408b27ed69fa1c56224358dac095b7a712980e1dbe52019bd0496b54b24e3bac1ed5e52ca206802bfbc31bb952fff5399745d65ffeaa1a837fa0f0337ba8af8451580f9aef48da473347201eebcab8d06d3fa798a6b4271a37ea0921f225cb4a5bc18321c1de721434ae999cf64cf5262bde1dc327a19dead7e3acf0fac51b3c273eec5a912af6bea4e5bab551ca60e5175f90205d0a297dfd3e296f169399994fe1088193738f087d7e9cf9614234202a032393f818f95e02a3b9eb4902c732fac9278f307d94abe5b78fb077c3abfa79a4d4f2d1b6c731c3be66f33d3a2247e2805"}, - {"0000000000000000000000000000000000000000000000000000000000000024", "001724dd5709537fe60e3207db58141e1d9754c6e6233f6294a2a42323b119056aa7c85ff6b15e5f4f4d00d69600475bf6edb2ad025ffb577e4ca81568928c09aa5dcc794d175a82befab759d928f36c29fbaf970060e4c4179da5194a10931a7d9ed7cf04321e17bb3182d7a922cfc5ecb2d025d65262ffa5fa45dd4ec113a452663546a8431fe6818035539862c667bd2edf4b7d74255d21bee9c4d3b5b288ccfb8a0b8f51cbcd029adcb5496e70edd796e162393a4c47053cbec87518efdd61a9aef0fdb35b06a0a37edba60e901c9c3d17b4d442e0584968fd4095790254fdc5bce0512f9c442b6a5f1d617653695855a93631cacd93a39e7b0b12803a77be9dd5e9a5e4f8ff7a55646e7a73fe78f61915defb8c5053789600659243e2d8e5fe0c19e12a21994e79a758c9b7a98cf2666d3e233e44581d25d82bbb995ef49a65baea71738638f80dda2e24bddcf00078fa3ff0428bc1952629325557a59363315f53ab424dfed13b1ef9d3c404254bf0db293710e91c80df0f213ef9e4c4d7b363f873ca96c3243e1c1834a5313520b5af24729d0ba3d436965cd746022a1bf82e1902e8fe9cec055486855d85a404f9b025e9985fa4dc31ba149e494cb539420d855ff33addeb32e09b228f033964f2bb45e5d6445f64c848fa701d41a47bd7460bbf464c64f20801d05d929d35efa2f792681f842a07f2c175048a786d9d5b447b575461d1751cd31d1d186c33ba1ed50f8f97b92298182414cb8ee31eda561602d2a4be067671c9e635911dc12901f1cad246e118bd49a01ec7a1856fe59711c450bfc648cc967ba91d4b83c69cd0c083821819ed70e0eafea8bab88be140b01fab3a9d9223b53f044386626b81d698b12996227e35b0b8a3c2ede4c4c6db7afe6832a827d705905bf72d91739f9880ff776aeda272fe7f3e40be4f6d00f01a1bb88bf3b0ae9c6521e5f3bcadbfff5fa2fb2d1b59fe1836557df8a8b4f6a178455b09ea39241907334a2b4ed3f2b30f79f60fbec148d9f3503b32786ccbb42853dd04b56aee6cc9cff4e95f6dd17f0f6c0eea86918b48f898c037a2b93e2c6a5dfd49fff50f2204ec8a51969c673a32224caf23f28b072bba547f0fb3c1ee2797b2f1cb4c2225c5e6fca094ea5b86912e2cdb4f710e02987a5154ba152ba4ce0b681d4c70075d95b1eb66621148bd82fe8064b21a08a956cbf61536340b00797f11daf0242977e6d61e2ea1d6ae69177ddd6ca5488e735f9898530bf33f82e6647c0a0f2f498ec22b17349382de7598445fbd79cee8d3be410957d1a03c37f319f19da17f3dff1b8cac687e49be1319f11c5d1aadb31c5372d45728fab6a7e5777e25180845c20992549565d6f3ed674aec313ed4abc4af219356f8dd5710f77d41da5ab8fdb22b50209de784022f9eb519af984bb9e9033a563b39856a461d9e0d5b6923fc4127ff1ba6abf93a74e761969bfb5e545305b69ca60285eab8aa0842c075a6bd89d1638fa61a2ba75eba9b5bd0115fb142ebdbced3f1d18b522cbd0a1b87d457c8e902d1cb015236bc3d085b852b98d2163e79d81ab22aeff654b1be1676db58bf3ea9b414372c3f3076e261a98373e8769249b64e6c531efda548986f442aed523f7a61a5c284f9d94986e0be65570b4b29df996a79e1cf8b01e441405f94ce2458c8a61ba3961502ae0a83cbd3c9adcfe604bec94f7dc7541112870efacfb7d72d7eb3fbb133ecca8479b7154c3f53f60a24199d7d3bad5957d8fcc546ab0dbd0ef90d939f430f9e2a53ba80558fe257b7ab3eec1b174f10c862c842782787d88341591ccf20289407d9e72b26ea4d454e6da2a376ffb377f7a7767e68b5542aff3352a24d5725c60f4bf7e5592d35ff52886936d143"}, - {"0000000000000000000000000000000000000000000000000000000000000028", "00acb95affdb4d7f0dad81e49dc315a3ef1affdeac1fd12367c1e21f031a00534bc93bb8d516e45c844c0f487673a9c8abe1b97ce58c5143baeae1f25d79c326b1c153219222418b5998d0616bd0ba66ea1d839b0319ffebcb2d6435cb07041ad8f2479941ad1e9dce13050ad66d581ffd64ca723817f378e53e39f2b9370abcde8fc166258ddcbb015e6b33aad576c414fc4c354c0560281bd5a770c073796dbccdee8b15f6168601963aa08857d7874379606a41673a8df308fdfe5b2e19d6ee9abbad7bdd84a340b2778c9a101219db63032cb199ad09234f10a962cb38c306917002fe99b4116c9e4925c80b674c16c6923ff4bd11aa50507cde0e1edf631c336c37abb432515c928e65cb00d7ed592f2daa0a8b26d3ab955767d3454f177f5a0cfe3f6c19041d624a9b9321e5f4868e30fb2d22a1725a66e91c5aeefada98c3c71923d6012b7f3ecb521f9dab0300bea17a3013bb232f287357f05ef1376f32de8648021d3e7e541070a9a801b19f44d19509b75c168745062b6e6f4a8eb66beaee131ed89afd30e2654829250768e3be11c5ae43696f52d22599b55d1eb4d4e2330387061555507510ac824059bcf04f656a3cb88b940ca8d4cd148856859547d4c0a7e64bddd1dc9704f3064e792cd69bfafb72ef82df20d15ce0ee3e3cf2c30bd71d0561cfec42813f14865e3b8d5349211cd64202cb7d22f94997bc9798a03a0dff05412e4e1b6179150c4b17eccd39c6991754475eff984e9c8bf576d31beb974a169684bf0f8d73707c66b7576e0d3df32533f8adf0ef5bc45544f163ebcd78a1722f82fe44fd067398b6c495f2593602b134efb4a7e87d0d524c88257b8b555d95b556e6f23358f33d24c51701988de6448f155fcc9545a592d025888d5776626dd25d604857937ed0dc976f1afc8bc78418644f5a07cbb7609400d5afd9525f7997cf9953f84fb7222b29887e8cc00c88bffa50a901298f936197eb53db74c734d0116507691f67311d8c5f61a8218aa5efd1cc9a7bb8c3552f3d1e142d6e0d998c301412e2fbdb85b89414b2de04821601779e10b7e28ca298871588ecd206fa8228184d31a6b278e769e1b9371132c76b2a72db39983512aa08a1f6d7224fcaf245e02476b3568eccdac2506a8c87d7caa01de957cbe99d286f0746d68036bad206f7f3cf761319e7284e830371eb8701402796ceae128775daf948030956bc327c1d3c4905a1e06d98390fa6de9b214f57e97438d61ca0ec6bd7167b3ab9c12d860982221359cca88604ef49e652e6d22457534c0d5732503385236515dd70ee602b941c4f91ce14b01351ffcf9c868766889ae1a124e899219cfb52ebf62b84962dd1940618cad416c13ef7ba660345581caa49f4538c6718e806fe08c5d32c2f81d5e8f90f9d6d0164aa7e4acb4c11a7c350f1d7ea99991edab5e43a1496a9cbed5dd5f96dad11ec371f2261a30eafad4a13ac1cc71a0fc90d2c65a2949535035d1652133b684cdd2ad1ff9e5c2d528b6670885a43ffc9e45ea3d10703f03f9f5f6381624d50b0699028993de30d93f30fc8992f658c4fbb56b911b17a458fb5b7eb95fb642d83e3857730395fbd90431d923db289738acfe10b2fcb8ed087201d3f06015345d86ead8cec2e1a4aca034e213aa3cc07ada6dca237e030345bccdfbedaa82579441636d024b532ced26c6318b19d86bc8c7f3905c73914b7fe58e9f4a787a4f4dcd12fa4391ecff31585544650ad1469da23c2905c65b2d9b8b471e71d0c6cd20c2ecfb6f6a0cbf4f385d3ce3753be1ced88154e554c17e2b87d66d3f84fd85be016cfbd990c4e15721de3599eb62baa434274bbe7d80a6ec45c62e2350ede37052f01a3f6c7244784527dedd15db14e93"}, - {"000000000000000000000000000000000000000000000000000000000000002c", "003227939dee6ad79f3a50bbe8d6593ca3340e3f1a08c947cb2008eea733d263241462d274f0174995d504cdcfe2b26a5c8574a3039f34ce8ffd1915c8f53b0a25fd2f9dc7386f18aab2a700ecef90e4b250a4e304d18cc9a90e3ad3aaa5636051e8aa1a969f1b1e6a1e7e7f9411a6f96becc9a235623b61e16238ab22d30907867d4484331e31d406dfd5fdb4f67d46fceb1736d84fdd444fa8e9b177839681cda48e78dddfffdd082605ab0e0a62787c6632369d6c68be999edd795c0ada534cad8ffd2f188dd1d38c50dbbb11ea5e6aac49ebdd6c2a63e60734dac7086279e6c67bf01aadfd4e4537446cfc73dbf61196752662480b5a719c180a09888fafc697ca9aff197447114d6ae24689b2c5b80cfa2ffe4623d9f120ee22eb503e3b95b11a3ad7a92a766ae8b2191c6bea99eabb6afe77971dd77bc2852db444f7c692f57b0b2384379acdf93635dbd3b5ae0142a767abc6e168ccc9f0e6c8f786643d0d6bda58237a7ffb17dc3048e7e92a5ed87970e71f983f5fe3035825fb6d82bdbe561642071adbb53160745eec540638c476ce1ccf736675a35089ca7146001dd20d6c09b1d4454bb902a3fb8f17848c6f92f2408e3748bf267c12de53aa9d4bfe3af4b72dc4833a0b05b162af0a1594f20fe3b8878f1ae0f3b1f8f2c58f38908858568814de4e5c596139ad057b9c4c646ea01177435a0579b277ad2daa11ee8c5b50e8e9b3a2e33f9ad9e50908762ce5644749a5cf425e6e7570f2e8e75c439a3418fcf080114c7b0b7cf3e488ada8eda5b456980a39a3359a173682dfe5ec4593c4b242c2596613b0b4120d5b8558e710478c64b6e373d2792e48d139faa723c7465c6d548bc3033023fba4d4decb10a69c00b713e86e0650cdf2890c2807b104e7d1b29750d5f8291bc61d3ece9c2d09862a69418557363fc62f5e80e301ade548fa677f6742126093e8c8179d6a7c9c999802b7b255d0509ec31b0b542461b89899c8015566e84c0e2c353c55e85b69bce712f6f784e6c79e9ab63f7b73d78351ad88efae1df8585b54a5376bb11e31c91841d6ec93a9daa1c041925fd51bcf723e2c7750d939bc5a8b63cf2acb6f37e406f6b0e635add3b9b56d18735354e059471b9112375d6854ae9e9451ff1a485a35074f56eaaa49e15dd8b0f6d1aa0a5345744a8d027c4e955f21bffd8acf3338f3d096be0f9c5e4a462815067dd88b4879d6e06a9115db03faae89b7e43a0f0a2e27346020ed4259c224cf950482a6f2f6de5e1101d7b1698b46d9206fd1868e2cf9d10a30526c46037daf890a11a59b0aa531ba41386c3883c879203d2ee6d55c1893f48f8ccc8900bd781ebf34e5bdb4d3121c8e5671f4f555b8c4e555e5580c8aae14de264e60f81cfee8722d2fcdf566cfe95f503de5b8560a8506444e06189711fb33c3b0fe1c9d58d11e4c32f9ee0fccafd08b89ccefcd61b59d6de9a66adf2a19ecb30d1e8444b1846b716b3d550d9b593cd9f4d011c3bb2f41f9e0af9ae25f6cfd34c492dda195d4f9182e46152407a33991a22acc61e39976f8947e03e9591c564450de4a24a4dd572cc4ba9ffdff7537b2301e877a1af6e3860e230c07f4cce360e03e81a9020d0a744f769914fccfe2ba3d4f358872345f033b14f9fb80ce0a98a7f390dbae938bb4510e16e8707d7923f09b4b3b6deb7433cf45c707d395b4002f2ead8ab2be8fbf2234dd25b91fddd326c284624fdfa9fddefd3503176a5d3ec5f0b007f3c77f5aece762aadb2c06db6f7c0e4ea7f7cb06b97a925c915871fbcd78dca4f1b7db27f6e2ab8d3d64a7fe73e319003433023902b37d8114bc3bc8e8729fdbe3d3c2f447e8823a0b601fc8a949da0e2a5d6373a94a21d8c52257a3a64894fec625"}, - {"0000000000000000000000000000000000000000000000000000000000000070", "004b5c01504495e247a5514f10a13dd28b3a1df9dc2c9a59724592872ffe30cb262f62a7c2e21edaa1e1069e3bb42a238ddb28d066510146a7ae2ec29c901a07719954b39e3379fcbeb7235b5d60ce6c7d9ca78b0664584b76e8e7a5a6c741d6d8e176790288be0ac02a6da41dee52897fb3a578370046e70666d596205a58428b668add1b9b1b6ad64fa443d8aa3520f37a465f268db45ba433d73b0f6830b8f958b24073dc78e00167cf90a6443e868b725ad76a68d13f5228bb7728149b6531b096ccfafd48f1b0245d342685c93b2a400af825bb92176e25a258d46d42d102f676e65e291e0d56b12d6317a9bd646263953d455c090bb7bf1b360254367ebdacaf35de1fe73d98cbd6fa91387e0ae73704735b82dd0068fe9385503dc6539fdbd67fa60b054bd0be415731270673d0efc0f47de5fc7c170fd70bf5e28ba98a9bbf77b780ef72c9e6b2f809bfbd48039e059478c8eb2c567cb18dffa46e906a2f3e70a827615da03a4be6a5075ca380c72d1081ab59d491dc04aacbdbae04c40962bed8e1a9f26c9b4d82fe9e732afefd9d7e14bfe336a24302dac38bcce969f313af0dc146b9ab05eb46a91a53e441d61d4ea2efd761d119564c051a4ac3cde1545379975a76b2c005bab9a721a65f7e5d6c60d3d69f7348f843a64dbf8dfc6bc023a384318c8986351f0ac2dc7759f3c55aa6d998330434d57b83691cdb4ca69223c7369a92b053babc4a2c78e581ef6550bf8e4023c4c8e9a7f5915f3c4a2909d0e1e0f895000ac24b12b7763e7f59a2288e8ffa1f9e8d8b211f41f9e5424248a3aa545905782c3f6a0452b1c1e6d97bfd851e25a3db7ffafed56b3b56470c03a23e7ddaac8eeba592c099ad68c1f1a5b7799e0cc2532bca515bff195c63bee02367850bba5c8000400da74665a5992fa54ec6c07ef4d3d5da21f5c0a80089420bb0513d1985eb27455ebb998ab3c93d954d180c7bb667148bdd92f1430d17324004e9a4f530d80ba91350f945aa89168b53ca8b30c4b166eaed6f932f2d050bfd98c805e44db56e2df95a669d751dce670a8c8365998853313ee320ff7afefa9cda64ed2116251bcee16463b7adcde424608dc09c9f954d3db1020b888a8216c41be4ccd231843462fc4d78a3ad2d904eec0b91122e4ed7e4b136336def6209d808139e8b0c485600f522abcf86cc821d2c9aa255f0d51a0b6725991ac8c916221720c59546fecc4d1e2242559a8b0fd2440d6bdf7d3d85f9c31c6fbe5cb266875bb0972d7acdbe17d4893cc7c8a38ae2eb8221607d4d90bd12e3b3e8bc12b8577e7b228c4a32ffad0f8abf8aa536461507b45964496e3455e8136260ca51b11772de24f30d2c1b97fb3ac5b4d93ec5ca1aef620dde264026c06f598998696dbf6a43867961d22e6532d69ff301703774146a97c5a6d1360f0cf67d9e6c8239f3a807c4a749bb1b66c3ad1cb0e6951b200cda0f7ae0f6122965a3c71a7126e51d71e70a164d91d1a7bfaa5c19ef4e5c6f247abb414a432784fdd785bd3f397e4c19f9bf8c229d7caf5fa9a2a8efb1435f3b499c0140249bdeb0a7634b79ee5485d45771b825b617ef132924d05564facb9201638dd4e892f176b67fa7b96fd22a73fa76ea517e63bf67f6c1f8f55261e584b0572e0cf0820100e56f65922a3423a9441af26f4d3c762f0e9d7f4226ce47fad63e0224fc914ef6e2dbdb5d261ce5f42817212ebf51216a8b2d59cb0f82499fc3c02f975d126ef45b85ddd3344f3243e442b353193f201040839ae69650239eafe42e02b17fb526c490085868c8a51ca4218185df673bc026f736a7d2d7bfcb7122b81dd8119e3ea59db8234adf55e3c147bbb10dcd242e27f138892e6fc0ba0253e8cd84acd61eefbec3"}, - {"000000000000000000000000000000000000000000000000000000000000002a", "0003842dbe1cb555fd48620beca67f6a3dea59164f2130a582201b59b3b41fc6723b37ce7389d3bec08303654e1846845c269f7b22e6b4e5c6c0edb4d5f36e0616015f003d1e2bf03a944c76f44a0f02843883e2081af22c528c740fc577a18ef8d825f51431396ecf1270394d8216cb0cfd34451bab3ca14149981738be12975c6c65b00c35db9ea9fa9aeccd1b9991bfd21e1776d70336b394c3b66912ab50d6e5c26014f8c1d405aba3d9cdf1fde1b9c5c12654b595bcfd3e6b43b214ad1dcdf0aec81bce1b83b26141e2271cfc1cae591201b8f1c00ac757ca47314bb415da199af35c0391199856275a2e814b765185e742cb73eaafd9dde4a506613effafabaf0d86b99957f153fb1ef566b88fbf2e04d23110f489cdedabf48c31b231e2c9595f07f0074c1c9d08906983948c0485da5c75096c2a92357837ee84a09017f2b0f2fd6431a1f15ab9ded73db2bb04529e3760a871dd9d91d10cb6e20c607e79bee6a306452a51add5a94bbe810ad67e7f65f2d63ff783ae25f35d5c639a7e353ad273dddbb995a5f60b355ce754f32c9f401fc929dccd75c0cf39c49e30b07b907a22e4e9dd86c93045dbe8d33fb4d6f5e680d4b81f333f9e627c1fbb8a3fdcc8a58260fcb12190c80ff15b382d972bfdd2793dff05c3b125b565c8f6344d3e0f4548877349320a61c917348844e1e9bdc6763fb29a05c69daf6ceb7ba7769b31c34c46b5b0c08eb7778934ed277a8968480f910615220c5c9eaf5405fafa001f2ba5ad7d1081e9fa072384cc468ed558745322763931cdb662ede10dd2af36119f799559adfff7939e0c5466d918d1ad0d8b17317ca81b5031cd0cd89ba6409f6d7269986a95174e85b1087113cacc525ec3f329e1e61f232e1ed77d1395ab61e42c4d9ba8db6dd4376f61c272d1deb7402f45e070e52fe9a7ddd4dd530094dc6929864890cd3e307da6565854808e5c24001049667350a945e39f46810e820dd03ac9d7175d2b040aa778af040aa465cef49ab8dfb7953d88d184e20c541f39da041181a2aaa4b2b64d5b51ba4ffa3db806fde153364c2fa17bbdf7c8bb62124a804a9ef1322866cf5c5f991981f8d564dafe774e618d0ad7052d3b3a5b4990d6b46f0cf48963827adfe6ee9a58e3203fbb3c059ede97a98cf7060e835a357a261c51be1a026fcbbf794e55e0e57c7460212fcdfdc87f6f175d13f7c5c52849946ca3b202ebd81fa414f33e5b6ee80df79dc3b049d8255165a2fd816d958e2919b6969a3f892590681b661d7532c42f70313c061db23120ba11b279b18b2a3fb3d022b646b9cad293322a9e051f21537292ad1d970b6c47046a1f284162dd771ff3d21f974d1925d46b4371782381c8e70e4ea5b49f9ced2f16ed0f04a56a6fa184e7be7de0623633a455e730018a661d5a40cf064ffce0a9785d1ac1a27453a50b03cb8d10295785fed6ed7050fe0fcabd9ed377ed6e0ef0f14198a5a985871bc71a44f78016d4343b6adf23231dbc69964d4ed48825c1f956143ab4e1d77c9611590e7e4fc4eb2a29bf4190d8d1690098b0f12f943998abb85773d20fa2a29624e3586da229ef7208dd36e732d206e5c145ea90c6994035a6a2d124b9d77857d9f2f26c69ea83a5695ce5dcfd18cb79049eaa3d026d496b3aaaddc1f7734a2ff9db3c2eea6c3b23cf2d44728c735efdf32be4d4111d5a452912b1781a0103ebb1d51f04594033ad5585526a372acd4216c85913f019d7c7ce81eaedbf63a84c4a0f25ad7256e5990592b84f89da650fbd69d1194b143e8c98370b9d470bf53ed3e4c9c2a1b125e44a92b4b0a9203b2f1cbc06693cebd16f5c8fd51e3123c51d27fb54b81f3b8510a3fb74ed86df979c943193b3b07ad9f5399d0235"}, - {"0000000000000000000000000000000000000000000000000000000000000022", "00228011749a6146e145c0a565648c26408cfcc4cf057f57661c121b5e953de3e5f0242bfa037e78691617429122a318972908e8968c8f7262078034dc27543ad2358895949d43f87db4df74422e52c37abb80670110c5b3ec17edbdc2e24081660b527d8c13b5d7c635c7420df05c5bdd9c9f585802e06b962ee31e9815031f47c5389e13a3b7f9f6af513f4f4a0c32f42f1904ecc2e84e455707e2d1f1206949963c9e04c63ff704408bac13452e8296d8f4993c511151ede2bc444b5b5ce3c3f6782157c5f525ff5fc951b6e48a9c20f00abb94577b45b71b00a18760b4e17449fd8cd0107b1d54192346dd22c1b577556b743e20028d1bff615a08e05b9808cb3464df60e4b3b3712c9d336bdca0b63ae47bda23611715c096d5f6ebf9e02db9db7d4d1e10522c985c0dcf95e998b18ece74ea12b36b1e39f810d0408b275f62fd4c18122f53dd4c6d266c78bba701a054f8c1f52fbdae2b70cecf0bef558d2d170ede492723e28aa3a7eb77c238bf4c7103d357b7ddf51e1a4b30f46b132421a26265a6a7ed5bc9b016d0082c29c56387ad1115e98e1f484f9efe40ae3447f7915f08e3a490eb4e7ff4de45e81a06f635b257ec7dd9a134022d7ea4eb4deb624e56a8b3e0b46231e85a7c4e25deb209258d0cd9408562b8959b86610ff4b7ca352fa259f6ffd53d23367cb43829e5021138252d4caa0539c41c04219ba1b310913ce692399f684b7df06327e861b79010d3d1ff7264e847d43e1ec3ee583d041a7db2751a681065784e41f5209400cb6eb23d4b66605596502ba9295ba1acf6924e6df2ee41da55152109caf1a70203b2e71948125690cd573c9eab4976ea196b9e7c6a18aa3d7db59248e4f2824118745d493809e969d7c84555927a7fd15d5c6a355b1ffb3de74a19e57c9be6617c33551054e1686391ff3bb0dde8f30058067d40d3128b38ceb1603068a822da9e1e6a1605b119f25758562556c7a1725690de98b983ededff1f422b534c1204a1be58581711c67b12569897d74a33a5d47bc9afb233ec9234f880d2c7db37cbf9bf7b1e62d6cd69e58f9bdfea4a66a7e677bfa608ff11f28888c75543e5516fb53209f45871a0fba6087f318936d0a1d1705dd0bdb562a44c2ddc407520e791442147ccc3d2b160b9837d3e479e4347c86df570feee4101051602640e5dfeccff03b5bea83765059e7450281d1d1d7a021e5a8fa77797c522748466762a5fe9750fe05269f258aac2d25be333084a69b64a71772af310f739f774e63fdf9720e40c9f3c920b43abfefab114350bf8dbd207f958edb7846fdd6f2ac1bdf752e5254094c05ee02455d9944285954d84792babfd50682b7acda26710999d836c2693b34fc71db8491e2b343595b1b34e8f1b63473974c36eac46c5c0ec7c89ba0059d461025af41b46fcd7fba5f4bb3213cd5a637c33da450360ce22d6787f15631435acb5923b74ed50011f731189d2306d7b43b1bf35d3f969dc64d0a9f45122c6323fa7d477a2d6757a0bb6ff99803391fe3a059065184587d4993af540ba678d6e7afd117ef039226744112e0ddda4b8c3430f1fcbf91a6b19f7ea881336dea7925281e1c0dcc28af857d1b92c6655539715cd8d255c0c50a6b15343e0d437237afb739df40402b0360c3fdb161fab73d1e829ec32307da6764bb521921643d0109e9d97326371a2c4664675e358045e110a0a10285742b1ccc3933998f32bdcfbf331024726e9a7d9ae5d68cd7f44d40c677c33813dfa5ab7ba032ffc32cc054872f3fad20cf6e5d9eda8a0db1051170b3ab00da2ab07954401ff85cb719d06da6f407416f983b74a47792aa33e54f8be30bc75897fdd7052338809ddabd525bb0fb94461c85d0119c655af7688"}, - {"0000000000000000000000000000000000000000000000000000000000000059", "01b55c33d069f5d7591bc26b4a1dd0d5a5a61efba6059792fdfec96d6d304e40a9a81d84bd860e8d330214a9edf56e7388e7bfcc95401bd074b5d721be638239c76ac331d7b855daf7d8690c627ea74af37f649908d20afb2e27fb3778b6319d52265b194fed38d8f30f3feb3e0c580ec4e23294500c6d518a5208f404670bf68af4601e3ffd2fed229a99294e94d45cf59ffa179b6b8194299d055bd56309c5a4961334557e6bb105f8884057dd8d636413e0de88ccd3ed2dc51bd094347039c51796c2f9677317898f7de20279a37bd4940f19c2aedc93e98918ba3271f9ccbbbc9ce2ed6c71306253d9f159b815075574af095081dd49c58fab1d0a5ee5ac908abb53ce97125c4ff4e8a902e793ef381c4dde07951881bfabcda1d6271ccdf2f1a19d8129213b74e0b01ca8293d5a06cbb9c66c7ba98b3e222b2577adca5512a1e4fae9e7140bf650b776585d9cb304ae93ce3711968942e8c1da06c6e69d80103f74da237a3d955e9196ff33adf39eef4e4a2e911e9a4882147b01f3f36faa79f49f94f1207af67ed7055b64761bf966855f2ca40995d2365b01e0005b2e10bd393006c37ad77aa016dfe42f362e6063ba12078c13cbff36803dca0b9c968cee4253918f6df2259ca310dca315e7811c5e8a8db1cee0f3980b9f3f69316d2f13f51a2cdf90082014730ee1698f8a53e562e26afb3d250de2bf0853484ebbab0182d82038c371569bfd1747104c4dc58a388621fd1961fde2b79753025379e7002a3c8441d41a1aa7393df2e025a43185003a756344451d5b51709251dfab0e6757773fe9d6b0fb1e6cf20e80e4c0abaacd65c53411ec3173a9fe166c9282881d279511db361227bfde53b80032ff763623f8349b197a13e1ef1dd8bd94aa3328b15c26f9542e8bbff71f8a275a794a14754470d640bfb20605d0575c6dc402549aac64c9ca1b9d8ad2a374b3ca50bae72af49e0a518903449d113d0e91d6236d4201423df5984947271f624273f89fa9ccf4a6afe54b36762549368fb52b7c4de138d1672953501521aac569ff3a43dbc6950da1fd7a4094c8014f5ea73cb65899ae65c5b34a712e7675cf3a2eaefba9b3ea055b717306ac53369af10f2a0f68cd90913d55d59119478ef5b47c9b3bee7c2264a526ac0c5a4b7da8a443b45e75767041b74d7c0406ebea0a6c03afcc99030fd969b86e2330355db6349f0d610e2607b78151a9c17cdcfd430616b9bbf007ea3c30a1675589a7e611626e55a35a2ecfb21960094e46fe0daffef3cbad07e0e9fc0f7318fc7eae16120852f8a1df1871af82c187bf54033868407ed95b1afdf3423994917d30482257c21f4431848d1e67e713446e55e0d83980f700e49fe9bb8e2f944d3f29de3a989fa523d26784f705e3e30f267bb121712d0c0e05f37efb7b5751c6faa0328e33e78380cfc4dcf36a25f76f938dccc5251c2ec33e18d9a928ddf7193043133f395d391025eed1ada24817d4923ce9d5ca9b6e68be6c69de656c1b752bf86fb84a86876663ff06470e83e7449750daa3ada8413bf1def42112f0de8bdc1b77e74287623fcd6f48b39624a4baa5f5e974d0f313ecdbe6fd5e8f112b4a121a33e4e7c56700bbed6920c59d06778cb216a1d8f7f976f427b66478def44c090ea86be79ba641b14d9461d6737beed7931ae8d4185cce89169aecc3718d530b3f57ea85e6533e256a0e8bb37dae33f585a1d5311e3248a388d1d56f9a6417cc4c39611f064dc917042097ab580ddd756fff0d193dedeb2108e02cf435870a027b46e668b5160d041997311a558b8a3871a461a9f13ce9b52500b8d6056bfc53d75d2e9fadd3ce07cbc16d5dd68608dfc02a70e99c51f09d26894a7e4bf36e69d29b13959a826f"}, - {"0000000000000000000000000000000000000000000000000000000000000015", "01471833eaf9ad5be636c3b91157e7b0fae2d4f0706b765e8b7fe1e0e55f43db5d0b68fe02d77cbbd8831cb1d0f182ceaefea29e9722b746f04644ad553bbc33274fab666403abbe4de62d83e4c10b1e145de7cb139371531fdb464b4e6cd4eb5edc80f5de8b9f8be719810743298f429bed9db58e145310d9710557826f1d1aee7a9fd4e2a2ad5ba279341c6593b8957fda502fa35debd0e965bf7ece435766b61f4934988f61e50396177a84c3368077c2231e9125fae1041174ed6120effa5135640d4133dcd37513fae721b430d68a83043601add58d13c1cc529328fe300cf9a533f8a6eb052ede71741bcf2fd7ab343df7363b2376783d080f0f120e0efd08ab3987d830f77e64c2a224f496dc661f762c786618114d5b77073da74927ea8ab1deee76118bbc7de88697013686763b6ae21279ee275659731fd03f1db8abd0e7d640146afaa6b98e07d8946f27016f7221850f829cd09602cff7b769054cac6e02f42eb32f72c8a91d3ff4daa553bdb0c1ce6e113d452e1955793a81549177487df300bf5bcad5c2ed99169b3b2c253c372655eddd47cc036df4e79f31127cc84505d3b4b1ff9f6115dbbea06fcd407f41b75c746b544bbe46776d399369eb3415b67630244a72275d8f7606f07c9b30dcf00541340286f1150416e6d99d912009b32f70bd044f0bc29e0281a2ed5252c8fffcb37b052bf8abc522d13f7143a6254078e79aa1a89bfa1522276e05b653422141114a14dc60f226a85c187223275c19fe67d7062f1b6ff49881f7dc56285594b8975102e375dc94cf636c5d864f424bec7637f8bc0275179fdab1aa8dddeddd2f9ad49c58e72747781b5d0629c849f0050f5c237c29f31f88efb4c1b988b1ff8819aaea438019de8cf9ef033458b55e1e7ed47ef1d176411754c2f9cff5eb3cb7d20463b71ee3037a547201f314988d245a31d9ebf3ed8a32bb5555c55caa1e033dfc28b0aa1c45a44aa06f4d5a556c396e13365c047c7141d30e53f695e6e859c752e6231ed7be18a80cd9c51b0435fe0bea490754beec5b66f28e9e5c0606eafdd5a15338df61a203898375d6f5e096384c981011d4e31ed4e5151999e58626f92c2229713e9d631de2c4d932df4101e8102cb0a1fc3a5f72051f91f849aa92ad9c6e4ee5c0997a96c971d14b53729f6055057da0cca508c2809b0040718807f5bb18a9fedaed8e7f6d05b4a6b101de063d58cfeba8b7aecc5f8375088f9a0ba011b68bd34b53bfe9274c2cf05afe86023574153097aa07ebfb12b96b09f5dc531c0c39df9b1cd192f946b4c71dae5624a002ecf77ddd6099c3883b9a339d97f417dfa50853fa7bc04a61eac89a466d2a5e3bcc0da759359452d526733de97ed32e9d31ba3ef60d3bd899da3377f53889b0f4646fc699dfc07f0540899a7a5ae1bf634231c381d0e3b0970cdbf860167e031e388823c0aff8e22ef5dac11ce9f31f435a0adb0b0cf2ae1c11cfc0b1e7abaa0274f63069ebfe3044d289570ebf0d947963256ab27cd34753fcb10e0a638a460507fca470f4f3ccb0272e7dcd68d61f9d37639b601ed19c67035043872d4d2f9df17b704b8113c851c199d409bce48ca2425a6b9ac8e0b297c47c3cb646a1b5573e0b2b112565696e077f4a29baf93108dd6e9a0c044ee1e6b0f254716c0d45a588f8d76e1ffd04e8ee5e545f397c42641e37f55dc4975f12fd10e283c7c5544643ea01825e2a573f6922a1d2d1ea1539f68e591112b7ff79a476d56594c9e885359e4c118fbdc4e4dd6f31453dd931e4de526e5506b40c28224fb1c648594035e673527cefe5c9553aaa7967e01343b0ab979cd7515cde33e1fbd717e5c019cfefe51c100e50033d5abdfaddb3e2d0cb36cee8899cf1de"}, - {"000000000000000000000000000000000000000000000000000000000000002c", "002f1e6476c87011265c3527e3d79b1a21621ad5b015ea25c1749a5be1d42ef22c7574070a5b083408680b7785267dc9de4e753d4675a87efc1f43989a9eec789bec4553e99ba7eb825b17c66e55eec623d8821d0e19ad546f5faf433d3fc5cdbfaff1e22df5dacfea0f3cf2d502862db7809f14aab1afb741d916f4822c1fe05fb42f0c1bd26163a54f8ebeb0718b8db3de4a2350ca81f4d33dcf12b7062b22c51bda5515be0bd402bd9356db58957f3f1340326fd9c4d97a56ecde141375b914ca1945698f6b584b37ca6222eef79f7003084210a4314ecfa94f6bc08d8f45f6f34d1b7e01fb3d237d575a28a4d1acb8c61e3df7b79e49e454a3080e09f1b235f8fbfbf0a823eae457a9967f2678e1f23029a375f09115a13bd3352276e373e1e088bae77f2a5553afa451c2c3a93ad52f8bfb684dbbebb5350e32200f5a649f6ee7a326d3a0ec9dc84980557f13ee020b0303b0303e2faeacc13ba93c48a92a8774e97405248ed836eb98095cf173c6cf298f9a9d2876ace509f0260cd95b2a3f6f4f473c1e5e422e0c347e147d2f2cb24911bdee83f93363fdab59a232a6fd1cdd4b0c236bcc2d065b5bada762bff6413e0d0066fd68031ad707dc9e6a6665a08488ff21d929eec91ddcefca14fcee070f8bce20a0b571651a67100710e6bf6fc0290b3343a2ad933ba01a72955d1540fdc5857735380b48323e6e0b47485beee21210d368b2f2d0dfec1439d9ea520899b539d30133c51376f9f70c2c3dd4b83176eb9b9a9a0156d52f848685b85699c9ca127d23331a3230ef2694856f54a4226cbd5a6dd2d876a91812bcea90789cd011c241a1913b7d96d081008f990223f56c65ba1e074bd2c02313463edfdacf5f9c42ff1ce091e863483d3cb94b03068365d6dd2f9f5494c14fb2ec61647747bbfb1c766ca14a5d19f7237e717d0075a5ace65179132085006427cdd2ec6f337abbbc16c6ee8100c85b9f987df60960d90591ff7813547e057fd3cc4490484f2bef81f743409e698d5651e83c12f75c8f6b946fffb06a768401f59e0e1a647e656d0626399787e942bd5f0b02cdd9cd946b35e9bcdf7510a51c863ac5f0adbab80381e22a0ec634891f2fea09cd869b44554577b440e4b62f3003d55f08f1ec0210df13f52b7518ddeea144c1df569b955ca7cf166a04c96f0cd74fdb45adf410c2cdf0327c76e998719f076ccca00aa4a553258234271c35085e47c239d1f808476fa5e89bf3dbd821777a11f75eaf27b979d94b3dbc74e08ddaa7b35e16f75833dfe94645b0d3ab4a06aad60df31d4db3770901245e6e12f99fa9342e9c22f77e690766de21fd9bd6c163ff8b4dfb0b3f29680f2668d6f7090b79bf00b16f1e129e20ffca5041e20fec45ec968de700f63842ad32f64009707e5e0b8301a89e1fb719186dd437e8068779d1124a9cfd8c0369325b89ce5c1b17a2e756fee13eab8e97b078deef036465d3edda1bbf359928b742d496e71a8a9ff6a91d44e96f902ddd71d2de13e5aab8d6d915753bd0c801d98206915ce73f4b92e23013c95b40c9a1eb6d0010b1c934d0243441f760732fc6e0f8f8ccf79d4bab0ba355bb581e84f76d6642b8f19f8d775ea33cfd0d46b22f941656f714c918750f5be86242cc0dbd5b1a0239be02e0c800c36d55c5c4877d6a59f18bdbf4ac0b764b52d470cb95c9a3a155966c20dd96898d2add0acbdf448060e09bb827d14c063a8eb86182d9680748df6a94eba161d50ed8d79a2665990e7fd41fbeb3063680447525682f7c1e516b60701448b4b01d3a681132e114514f1a83eaea85569365ef2dfbc1b0082c353b760af4588b95eb3ae4f085ff4a9e4626994392441402bc61a377d15093888c52fee973cd7f5f6c59"}, - {"000000000000000000000000000000000000000000000000000000000000000b", "000eb34aa096fde786ee651436ad8381af81ba9e2d499673472c343595f908b7bf9c57a862e4c23f222409af1c9042a0159bca1cf6c630c45475f3f27b0bcd40d8ace71c942f3570df852e1356c7739d28de9ceb01e68c5e37945e210baf701ede86234cb7de3db04b047d85b8e69c20e3aa43617b25fd2fb4cab97036d2147fd3be0c89fdb15978641f34db1d9d3be62e2bd648f88d5f6013d7e0adb955253cbd5d86c60bdce05d02be9e1e05b180f9b3c5942a354f3f79488bbab8315996f35aa1d979eb61094609696a7bfde4b67598f312765f5f5a5844f7ea6eb1eb6e6f58dd4f3d8b2a8e3ea6affa10d49bbdce36e570585b1199bc38b89d630cb8dfd34e6367b597dae248cde5c765c8b77bbe682362d194226466c330b253012a477f02fb43399ceb194eef181e5e593f371d25e40672e61a15841b1b2f1d1b9c8d568fc3f3c6fb2216cd6e0070e0327a39cc01290468478fb42fe6eb763174c6f595e159fa86d636b442c4ab64eb573b77f9be65d3202f76ce7df1ab01d28b44ee10615cb7c2a27d2858b102eb40f841b11ac3c96049ce81a5c47c0381d672a0ad246d9b1ec30597f6619f570cfbaab0547c834117b928245cca131bc033251ceb0e999b955603f3e0f30b6ac0bdf72725c639b0d3b00161b441c2db45f9424bb45dbfebb630d1932a94222bcd5f1784cbfeb8063e7c70969afd046d2efd6a82c03433a570d3dcc1863bd366ff178c0dbdd18dcec80418b68e34d1b6d531ca68abb3c4a213fc11acf00d9e798d5ef35dd4fe1521e5feb0c27e373edb835e9630cf3193d3e9caa495211e9c3f2b850cef075df62069cda8ab20feb6a8a59c46bea459c140c09703d1322ee7ce7bb722f97adeee9d1218828715a113d6d7572569a38f68d8676d889a884fd8dd432df9ff1282da2acf4f0647acf0c392eaec4f7aadd50060e9af0664cc51b68360d170386b2d01263a18061c2f9d6b48dd5c5747ca64b5605fc6b1ad023102f2139609e7f0319177d51e42c92dade25100208a4a623e93cb2b521e23b9152eb5be706f408a8506b952bb0221983c375e91cd4c51661dfa7af7621a46fe41da2b4a8daa201ae1cbc658d5636d308bdb1cb13b9b8f1fd6ded050d0f5ba999852ff17e7a494c160f88bae2a540b8414179ebaeeb4447b917c96a672899d81820405a8fe455676a1e0c950b24f137ff08f2265fa2b08e88a7cab437dcfb45b093ec575281e63939d2efb240456c8f0207bd5082415c71c734d562975558da6272bd33d4ed33ef7d56243971e7f1b910c353a1b070cc4bda1d0e02b6da2a6d1a05c5b1d4544af700af02d377ccfbfa52477577a347dabe863c599be1cdfeb28a99184ba2c5e55af2ef2c9db9ad2f63856b43e61413c3c38b498a70b39074bdb5266452712abbe329f008d3b733e455c64b429f2e0eb5b0458f13cb0f53908392a8dbcd04918e2cfa32d9cf56c8d87249135f3086b5b1078cc2e1f85f6b0aa4dff85498ab2dd1be5253cacdbccca205ee2a204febb760af25551581b3e030b614306d94f48f481618d11ec6ce52e187925e5090bcc3a55c90bcaac0cc56dade0cbbe2b1c329d7b07d52a8588094a8769d9d11f24e165fc6ec86ac6a711e0b98e01487d698bc801b2878dbb22ac78fb286500ef0fdfc781be0679f947979c78c7ef4e8c7ae3e36e88478448a1d9a75135774762d90dc714f6ffc644034c806a8a29cd0f7b95524cd47abab22010dd19ca3ad694aaf37812a5cc6b85b51057ca1bc42a3f75030400e67ada4f9ce6f96427c1557bbc3fbda6dfa4ab2cfa21b80e3262cd9aa844e9a6691d05c409b3bdf230a224112319fed33fc885fa5d4f168f58e23f5bfa4331c7ecbdf5af39f6c5b57d9f463bb295f89c5003"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "005002d39f1863939c7200cbb5dffd65aa1a6f161d268b8c10b8e5495b48f0a6407b62a6ce63ebfe8820303dee1b00a4791f712294ebc1c94dcef0cbffdf0a503324502e5a67898c7735830fed256e465c33d1790a6970d6398c7cf7686a424e9a6624ad2b7aab1a5520171cfaee75a7a9f72bb6238c37691661bd7aa49c219fa410dce6db797e7cb44b19df63959576af42ce3df17309d01e0e99df0e05e508c9363b08e23ccbdb04d84d855221e8bf2babb0bfb751ec81a9fc1624052efc648317d9f0abb131a36ff9ad6e41b46cfe806d24a1e1a7a4d7db1fcd7765e7fb549b1d8a3750b55f273e69a413a037edc36de3ac84f9fb60f917ca58520deee0be4999fb639344f69da85177bdd95170a0f5249b7dd7f996b07afe6f63ab7fae9d2765be7c7d6d402e1ff436ea85e7b6e2d76521e728134e8c9c9ddb42768b3cfb57db39cd0646023455d03f7a437f27a2006f5145bce8dfa7fd1b421fa4fd0189176dbe7310a4746e6fa5329029a66c9afddeda2daef355dcd8de0071537e338cca5cf892a18d1f472042e90a3d95d04eca057f421f4d4f1a23f6f8f44215c60365d707800bff35f3bd07f2413532e183811b740c6bb93b198f35f18399fe9efaff3ec493e49027a79aaeb53dd06e1c76f974741c5ff387db84491bf154fd5e729ad73e42c8fe6755a5c35da5880690ffd861bdb16d503f4b04003b2a15389d6dedab5291e140b72d1a34b5c606117ee73ac8d0327d98b742cfd3ad285e0b181d1a4a0c15fdae0d90271993e5318cf7e8ac2950ac9aa5d34582de77a6e489c95921c7a6e07e5b4ec343782bef0fb837ffa46c547389f453a3413340870d953b7ec32b4ef199946eeeb5d1f3f63cca7278ed9af6f901ed1220c95dd65d38efaaa431a8007d0f699656d0ca4c148f4eef36a664c5532235a273b4b6eb240f59298b00c28f57bc8ab412a499f02315b2c1bde0c2bd501b2d893ac65e662f7fc88302edf4694379d0c3fc394b06b82dc4aaa2b61d8d0c12c2c6d341b4ed50b6e6bb51342baab723f247b31a56e6d0f6834de16ede6a7a0ac5ca34ae103e3ddeb263710ca1ec795314da9d4b206b85857ed133dbb057f4dd884862f6210f9de8d31f06f6e2a2229fab1cff84ffe830df31d3793aa6f82881dc312acd0625e54015529977a3a62c85da66490141d53a5ed95367794174f5ed73df6db3c79b834510a5df04b32b6c65e858142150d132991e934d045d0c86327d02587ed9c16df30a19c080499ccbb102e84dc42f28fce89cbd6c19169a84f15ea301741d94ab01582a2acc156c64af61a924867c04bbc0023fbe47248f294aca9698577f2915065951fbfedd037bf020040babfe03c5e55deb4ea5113832619e5746174b081a8cadaf409736eb834d030033d312217f70f8a15e01aad02252976ffb867a2025c4d5c0044a60bc77cd0f4ba544a8ca96710fb173b9014214113c217df61915fa7efa66d0791d38e7d38199d1f71e5e7b5d03d81729a5dfe88b025b395f323699ceffd4f16e2d1bfc20f891cf50d546fd1714c5a421c2462db471548a8e5b8f33f7f7aa9e6bb749f5d9b1cfc8f9ac0bfd07c33e7d57085ddc00dd9fb4ebf96e68040b71c79f430849a37eb3909419f5aaf295db2dce67f233e6ff067c0221f2477cddc917edb303d44aa093519772b1ea810326b569b520f273b83b33b68cabfe6337431bbb77124df986824bb293e349e4961679a46a726b54960f2b173fb2578e350b2aa514c25bd1bd315336124676061739af0446ffbe8cc9c0ad3244871167ac540ab70fb63f9f9887ee125b849233c9c3022d84c9f659941d0d5c2fa76c409ddc8ef4d0b3af2d6df044fe852530cd4479b656193b76a7865182c99899d156fb172b"}, - {"000000000000000000000000000000000000000000000000000000000000003c", "00742176c1474d003c61a17df7c9c70538111ad6b42bfe672cd4e879b9717338ba5b6f4f5a60e8d45e911d194bf8421d41fb98073328713bdea13856f84b2e2023c3da028a4614991bd20acc99a1850cadfe632d07660b6583cacfd6d5ad66573e3b22b5e102b0918734584765bc605bedbd354816d756a88aeaa5fa2e1d094be6b8e3662c1fc653142a2369f43eebf81bb58e0c3d2698cb297399763cc1d3562110e194dfcd287305616d1a3de7a40364f2339792721631c3a29a8f0a36542cbb97abd2ebf74c960114f7d9a9cc73184070075e155ead44a127fe25f15a32ec95376e82fcfa1d15e9f49ad8d9d295dfd0631333251d57cff97faabf0a9e22d68b4f5e07abfde3116367764971b63cdc521153fdc871d15146f1ee52344ee0f39bd2465fd5e50b090432f749672ac4e8e6c1787111ee3f0fd39f2264a17dc73ae93253fde296b4f5c6c059f9bfb49eb600957e57b945b841cfbbc2cf03576c23206b7e359a0b7c7c64eed858ebee37b10e56f0168d44a2523c98043db5d08d19b551a480432111fc751fbfdb1fe48a061fce1a8f057f1ed34d84028e4d40d1b4ad7c1f7802adcdb4d8c477398586007dad438f12ff8bb9cb8e1827e8fe990ae92b63a8c2d8f3e1acd9eee0561de105eef37db51a28a747667590f4ca3411755fd737651655443f5b634df15fa47324eca2b2012dd955291c017645406fb84a3fe574032477995e9ce80fab8a540c4d286348d51241efd0024e4daeb10d57ac9db9cd080b3296aa591fdb39db41f03a3b5ffa0a9cd4c6ce0cbeee8be46972e1a7fff50df8d702327b887764d90250e5c5af306d4fc748014e12e79c54b5938bbc1417c56617f6d328cdbb2d7289f9a45e973c1d1d143119d6ed6e65d84bc91c71537ee97baadd4aa47865d32f8b34962613d11cf1b4c369016abdcac68c5cfe6001489f416c513c18f877725a5866b1d73465de120204427c582fcd1aae7085b2dd839aff2906ab99e78a081cc211ac0ecdfbdcb6c2decb635cfdab6cbe42921e2f6b9464e1cec55e20e348d82d7f717adff6b638016098a6842d3091a38d842355cdd15d62b47e41d80e5096dcb2488f4fb755a48ce5f48f399c9837242f14ccf8f3232d5b1d6e8e825689f30fd2916158e45b3255eab9930ddc2f7163c7160e50c09b24683a5bdb0221fec78a118d3ce5bc521716401c194b88b691621a633e6b6f1dd49ddfc5f3b67ffe431310945975901241945390d25177db29f2029b310ac968dc5f0397355e124fceadcc99e3418398f0589c64ed82cf19231c951326cfe81f639aaac251a21f9a0914a109753c256ef70abfa2016d241f38cc0b7ce172bb141e26221e9dba4ddc9ed86bdcd0663bffff4663968d3cf90d200a891d9a5541e0fdb558de42e08fd23bfd968ae703e7ba1293c56ea54a88c1ccaaf18bb19f2ed01c9b13b9142f5c8925af9355b222d619a71a4efabd70c30ac2f6ffb257f12be741049b07de9067389d7ef3e225f023b439ac8e0d784a539f936bea3570e95d159615b9bcca73062c4d43c5a53a007d4d9605129517ad39cb2b9eb6ddd9e55fab75ccc0ca3ca67bb5b71b6d15ff891e02458d174dbc91c0876d47610e4bd0d7513c0fc2c1796e11d1a21144938ed0883668c675d1c908cd0931e0e107631359d6ce0d717beebb2f1a6c721cc4a18992c7f18a97407355a4ee9f25f18a7314d22ce654a2c512c3f949a439e2897bd3db08edbd604b56782c68505e88a7e55007cbaf3feaf2f2a6b7c9ef0bb1c875d997912d0e89a347822a069d23504a7f0c24cee3aa9b26909999f5d65c05d63f8f92fb3eed2837b58f85ffa209b371902796f75d1babc3a9fe2b9046908bf76b61bed5e555260bf2ff8a9e5136d2c6c0"}, - {"0000000000000000000000000000000000000000000000000000000000000056", "00a679901f44d94ade6fe2aee854ff9b2398bc4b6e3383461114d8c749fefb35177633b9b1b031f8ce2b104b561284b24fcbb4a3f31828c16719b2a4af0dbc15812335bd08d074ecf186b2c55e98e6d2c99e66e9072a5aab941ccc1d94b782e8d0597c658a635e20540941fe86b49908c7f14187923b44138fa18e7defaf0d22ea56180a67b1c42262152a2dfa54c0f27b7abd0e825913f40982c53c54f7a28d3e30b228545897a0012e0dafa0889ed2e01aa02226d24a344cbba7250d03cdaa9fc5414008c71fc4ae0c7d84e9ebe8b6a1570adbdc2712c604610ff982d1dc408ac903c31ef0a63c8b06ab01194d5f06849567b932fda6214219c91c02835e4278c6d951aed7a375064d4b05b706d9f7774c9ad2eb10535e52bc62a528922c36eb14debf07cb05afaf9ae3163fdf7c45e14aeb60da4265bd3ffa4434a9afa83b505db7c2ad93a51433c20bd6c49f06250286f92e54c65c20eb711a5b287f0ad2f47f583c4106c8360a9381f078b7cdb73667d948c9fd7358d75616c5017f5b481a13291f32f06a3aa591bf6b330b947a692e5831339569f9f4692842f0fbe653aff6ebc20e934dd0610c54b5916162d6f9528b41ac9534b8f816a065c6b19c1adae4475189c71d992d872a593bee1d20258101cb1558ba77777b92754a765a78f30236480b043088dafb78eeaf984e77e8da9ad6d5beb905088fa11e378e6de79ca602722d300af32cde7f2f6669de6bbf5df31525af5ad85c8f591f5e28b5fb323311eec4a41212c58b6cf1f33f906655998301b6889d22f8927d5e247ae7a4b967d6b95ca47e2e599b2eed0c2c8ac43f6ce3abe68baa9aa765312311b93f7efe0cf3a94cb187be75ff6b02c83371d722bcb61ae3cc0c71f3d70211efc1f3572421ffbc9a15436e1f193f0d2b1b1857cafe3ae0b1a532e9e939b68a6337c6b8010954e4494fa5f692f56429c131bd45e1bb35e1cd122a14a02190d7f4b9c28311f77eb8d94010343edf07dab858df0f2297d5d815095e64d422cc1e78850d1da497c78e50e6fcf509266f29f5ecd2a3b0dcf2070785207b18126befbf5c57008e643159dadaf5c9c50aae38f2b8c513285a5f90af081aafa14478ef5f0325a3751e8422510fc21e0990b95448feb88cfdd0da305147194912b4279a2d241623bf8b59a6f55069b4019e8baa79ef8c0b8276aa3aa9f8a14b7f523c2d3d07f2126840ab6715849e30ab0268a6f0356a9be59f2fe75bcf9b907ae5b244034a5e26453688eb57f9f55079e6328ad828a0e16cf919b7e0e006e0b6ba8c97073a1169d84bcc0948f0a518bfdeb1c7079a9a6079533fdcb450a336ab86f41a27367724bee7e23b39b50752fa0a4a14f28fad2143749145a62dc19037ccf92afcbd57501d393f2c3b54d98ccaa06a020836497301bd30ac0188d606d86fe6304cc4bf4660d3b4ae3305c236bf5d5f3d9f5dba12a62076b050ff24e88fef0a74a93f8cf944fdd6f5d0eed1fb9e1c5f738f008b1694c22cf58cb822fe80d438c1b36145ccdf6ea25709e025fcf0167f54d8cfd682af3874e9c6f77ccdad1b658b1b8c3a8e61e137f5ff3965b932380af6a15614371925cd78ae83cad6e3282249369d0ce2caa86d3d54268dfc18650fa88624608af24836aa293acaca04e3d1631697ae738e29d2807fbd038969e64df8881afecde973115441fece2c64356d0dd7842fbf0c7f0bed5bd4ded1edf7c634c1e76ccccbf5bb43906e2414d7ade1023b505de8f91262ecaf3279d864737fa3056a7f18b14440156679827d0a54723ddc3efc57f032be42409026d2b950dfa669df7e558dfb52dcc0581a1ed2761711e18abf608309fcdf196240a5d58c0a2e87261c510c67d5795c05382bb633926857f46a97"}, - {"000000000000000000000000000000000000000000000000000000000000000c", "001de0f2b5f7c891ea2dc00b76071ff45ea99ffb761a6ed2962ee481e1badb923c9b7494512d492d5159167339133ddb730d2be0c4142da1dbb754bebdc0c919e81d534052b13cc586d1b8810ea6b9eaf80f872d032a92c8ae511dbee2d0f1a9d75a20fd6fbf8bfb82285381ca82f2da7fd58303c4947b6ec2bef2df80f504c132c22c1d97c7cc3789974c4cf40af8993c4ca1550dc4fb4a95d2f34908db37297f2d6f1fe3dd7fe70185dd54c909d3d1397181b5c81c3655b0a597382624a5fdae022be18b96ac02f840425d89344417c43b10d296b25b6644315e1194ee61dcb435b7c1990db120579df8a66021e5320af73d66fa54c9eae3f53d1a07ecb48bf5c366f39aad246bc44098b37df67e5b241a95d6fe4e08e64d456512ff27b292553d719a378c11fb644a44e723c1d476c315a5412af16fa3cc2ff7380ee2300de8a5bbc8e0d77af35d69badd851756aa00c7dcf7b6b42909b37438d5856ab11a86499da79b29b544d8e3231ca178634456eef376613cb1fda327058cc2c45b2d9dcfd88fe619987681978b12bf1b397b9edce80a60689b88e89852476f811ece65f9380c045ac65a3ea5480d9cc1a758226b2a8e0908f86a306234b7afa36c0d1b69f996f9e9cdf186556e9afcff07324fe3a2cd5508b645209b1d3035819ee85da34b078713fbb39e399f7ab685674cedc02df737382df1027659379a61c73f445650e4657874ec42aeb61d5b20ab578f0d3085358c728498dc6dd0aa4e4cfeae4a118bf8c7decc3c91847b14025ecedc0df191b02d291c4a43e5021e769ff4e806b0776fefa1e5bc3bb6a610178e777cd066a55182326c689a408725529b636d2395f4a515da266394e9b4f3c24fe73ea5f75bd82b3b2b57bd774f3ac8cfdc05ab12aef9b9fe9dd1f6df3e8e1a41afd00ae9c0fef64ddacc8741cdef90b27100bae4a7204ef9234a9d55dfc940fe9610d15f8f69545ddfe7eb634dc75be3880cd8422566451e98cb441d0b1f17174e907108ac55b6a93cfc663a0f57771a2e1f2a94e790155ca1acb4466aeb5e758a6f3de6b90108ace09ed4cd7711c4b40bbfdfa9e6d34edefa0945ece5d75b52fa8da48bc58b89b12a71d73edef6cd056034d332aa86fdf8b4e56cd3fcb0bda4501d013324bf238e42cf7f7db891c25e5bb7297ad96bff3f9702032975744f1f4b5330b3acdb6aea056caab140582b5b3b7b280cc9cf37eec4081b4f587331eabbbe5a0d0d4f64cc993ab31ace36f472ee77f1c605f6634d433f5dc9bdb0509bc89c27cba1d790029bd5d8c92a0f73ba2fcd24856141e7f5dc10ec87f692a1b92ac4177c7b617654c972cc08829f3da7520d7a86122e961820330fcb241593572782954dea892f5618fe82c91d7489b3ea9fcd19804af3ff0d41cc62bd25fc179f0214166dbecad209e4f9a20d7966a2beb6bad83b8a0a798c34d65811cb477be21022c31e96b957bbd72913e8a2310b9d74e0f693e78dd848039ebdb49e24431ece030abe1b3a134391c5df6ab7599274f53de7dd02a11b098dea2d23c71fa58f6949eca98e5d3e7ec812a973c8d20ad3438e31b2beb550f87b407ffd29bc02b358dd6f41419ee99c905c2ef8e634552bdd58db334053f8cf59285b69f6a9f938f452d321299d11c6029899e419c6148d42d900c735577f0ca8f5f0c7c32e37b701d9e358932ba21791d5d7784e4e43943da705f9cac2a1c453e153444294fa9b219a9f465c86bf18740fe5dc236457ddbd81ae6b7041689c69cc841103fa8e9cae7a9e11f964c1529be7d0fba12edf0d4c0b4aabf87726fcc5395f630082eb85f503550ebe6407580fab95915ba735dd92a4bc2ad3bd03371c2be50ad133b440099bbd6ab662ba391f670cc10cff416f"}, - {"000000000000000000000000000000000000000000000000000000000000000f", "009a3fc5b61a051f8fb03403f259ffc1e2e75dcb034009bd4f816564979906a7a3f2d3dad731773f8ca41c996b398bb6c0afc3054322861cfb18e9f2ff139b38a0ff92642d6bf3bb369817dd50de921f80944e7c0de79daddf4fa8b79ca264c98eaf12c20b8f12da801b84a6143495e037bd6792bfaabf9ba17477123270127a297090988e799f347153e626101307f3bef44337cf336a4a3dbecfee61a4c3e0d356fae1b49ca2ae015f2cd22ec3febf2eca182f446bc6ab0d289c1bc8534913c272ecfb5de5acf55838fc6c22940cd92b830ed1b9bdf29eca85c428f1473c1ef82c893713d0d6279d8b7ce80dd82ced2a2498467d65dda512b6663c07970c67ab0becb0a9c4d451a7a8ea6a17297e1fcd14800c83e1d1719de1585296dfb35d28c908d8a9e01632a11a8add654561e352aef74684df91b6dc9f1621ad0d9b908ef719414286dba7402b334b697d4649041f425485521462f65cd0f78478dc5533ffbd66f233c917638539af35d909733c9738d7d5ff509330680f8dfc3822cb53c57949584e9c5a821328325f19a510f3221408a49f01c2fe95d73cd99b5dc51f3a6b3d0943eabd5283cf34766bb3a666331b910582a83bb3281762549b9075bb35ec94afb96bb1be927b1a608b0ed2d237a5486384ff6eb4a29ed4471f6e355c92be4379fb1f73a9cacfdd6834781bd2a3efbf99fe757705c6bfe9feae704ffe73f09875f7b70b57f81d4e8b71b78cf4b1df68bd125df92cda7b4bf344a73d2503160ec17f87d81c8946b38347432125d15a498b1edd470334935994df6f629ce4ce4fd46bfed5665a133309f47d6b78d46d9b16a9080f756a68d2860c553ba30ff07545be4ae840f9f491a39bfdb0a636b7ba35c50ab6821110543d23d78706a6fcc940f9ad3f3734b61bd67df5018bd781e61b43645ddfa0a1bd23d73eb1024d2902bdcbee4bca93e312c0b7021977716ff23c7e1eff070d63c337cd60a822894515a3356e7b9b5a14851bc344516839978bf2b806aa9b0175696c39701eade71178e22d1fed5f88494aef82aab53cd6336017895ee5f99b8a0d1c0c86542159b0eb5abddfbe501b664314245e0359746ce2155fbc8c11395b90abeb20df93dd01eaf983d74a267cc07b732a206599274e2698d3c9569be26d5879a44351dc80f6959ffd723a0ca7e3f3b51ecc7fd791a5ed193199018b831a9baf0e8c359bfdb8556dc7d142e01921711d16c18a5a700fc27ddde604e908e82471f322ca012d5cc64e29e83c064c1c261f59ff1e78e7ae355fbc6afd651d847410cb54d6fe9b11890103980b60fa8fb72ec93b379127b1cf740d5ff85d64bef49c67eb2fbe49ad76fa9f2dc30aef1a104d38dd630b66576ed65708007c4f503201a5be70d94de167f318060950231359c63b6d2802d42924738aca3aaef0e38e92e84d1a4ec178004e16bfe4679e0f0dc0919692700155f5e60b5eb7c8b925255b081938cb17eddcc3426ace65aa1ad09ff6082f4f644fb6225807131203902465599d7a05f5b1fa125cdbecd2f67e89c50df1a3145c109bd4ef3fe92a19f0f4932398c1752e73b1dadb1cded140296b89e42eea3ddf25db38853db4e6c56e401a4dd94f512e383c72320cdf4fab23a28fe3eac43b814138ac8a527f05efeb2611da5445542b716f7016c17d35262bd24837135c2ab71ad7f93eb5891c7fcac6b28fa51b43f10a5e23cfc4958e95672cb16774a9166d97c2939cdb0d0b21e4e3951dd9db23228c0abf354cfd965aa0c714b21cce4491e507fec1d1738b186f1320e7dad6cc35a5fbcdef0f0db760035c1f29fde4d38191fcd504404d4ae28d2001939d1c85cad5b661d2350a3da381526f3cfc48a8ef39b7c6790615dad67acaca7a7ae6"}, - {"0000000000000000000000000000000000000000000000000000000000000031", "0133b0ba7728708fd9d9552c727f5cf65ee6d5ffff1d839acb6a489bf7a1b4f22f2bb618f30fe3fb98041a6251808e62e9edf45f31c42a8f0ab753727ecf912be2347345da6a39e0d6036f404c8929e2313e78b50a1fcd08d91852b8fd8d971258389809f5abf2e1120f4a6d778462cad9de1b34a4ceabeb65a8969440550c8e1b373154df8edff692dbd9a3055a392c96246c0de687a6c9e7ecbd7d60b5812d74fb43a3a85fca73016d2e873a4284c2f0b257a1b77313b2582a535aac1aeafcde3f7acecbf9ff01fa074002e356f83d2419195087a3ad34cb59eac711a77e64a5d50fb0159342247d6e220e9e38f917d443b872ef45613f80f001900b4ed1f85bcb3f259382843587d1bb8e1a4893abb60c046acea4a261bd3758b0d74f327d66314efded0910d34894f004d6d3f711530eb73608ae4cdd1aca791b62c3b7f6d61e6f04963357cd520fbad1281c6ddd0a3c608ce98a139fb67761e0d5e871cdd6bbd182c22712228c025cd4a1476de31bb46ee9951e1f91d8cc131a6ef86fe49e83311cd1816d64521b7973bf44241b957ba9a5f529f5b91ae51a51e567b563d9d22a44104251bdd5b1aca9d9ae141752af1b4eeec9bcb7d4405a7a23c823f0b9facf27e18d5468372ef15c53ad203266e462d9f30372d9c5e49fe79fe2d9b89c9c9b3c5ccfa1be95c573dbfa78a89d4c539ebf49984f1c11d34401f45ea401a4f5634a9a47161e66371bf33e26f5666fbca47699e4a0e54f2cca59e1d8c513369d2c3f6734cf558a6f08d344801fe26fd992c135d6173218fcbf5b14a9c5007d43a688427f7379aabe9f681538752c359317091cce836541c1268278e1598143328b3f7822bbcebfed62f56bc22dc06d620ecb52281d55eee3ce4ee453b51d12641c9572bd5838fe838a49946b51272257ebfd35669454d64c22b2125d5362018e77f1ec57041cbebfc380d03690aa50067af1f32fc807fe5b4f96eca5ef8330a86b67c5e3211b78ed1955cce8b6c658e30cb195dc0c6324d7056c58b93a48ffcbb152e589eb6c14c4b623fe804e82fd371cd70602d151ba46a130680520d8c57d8b9978de77cbb106f853c87191d22d32f480dff26a4238bb0fd25c190a3db394455845c2e7b8d389e0d38b6d2a6a765776153568eab054d1a90fb596764f42dd5a2f69b66c90085b2d25c2ae4dd78dadf5bad2f3ebd1ca62ff80f21eda0f2ba758a9ff256f953170706b974540fb66e610e816231ce612399d6393d706df9bc3cdd47f8cf055fddba95ae0728119bba6bc4abb0bd1c1e951e28c08b70f4c4d8e9ef3089fd6f3b04f8f59db20fc6517272f43a9b4da8b5bbb8506c3d766d83211599222b90d32e1835f49b81f129911812e70982c7c44765f404dd62ec4ea1fbf0faa301694626eae529baadc698302c2e4a3c6074b8f7dfff2d3d8aa39c4d0221348fc4b751318361dd3ef3b9b352e2bf2c612299c99c09807211ed9d98cf30a963951ef0956285b31737f4c211ec64b707cde547f211a54e84db0e549978df9d5a203642408fa53044fd26a56c552ca55c2738ab7630109a7a0c0a9f24b29a8714398f74f2cbcfe2e51088813f4d0b55fd04df68716b5db42313edb39e23f22cd4aee8544b371ecc990d114d92c2d2cdd3935f251ff04b5ea76f87391a5dfb925dab474ad1f0735bc2f504cbbf2e4835db6feef2d18bb9d66dfd32c74bb2e90054e6534589ba343096eb07dbce49c102aa25eb80f12ecb16ccd679c076b05027a1b3e30b6c8d39bb95507f379ee298fbf57de3412b68d5188d2fa2c9c7b641fe4aaeba18ed6b2869435ecc8b1f9da236e36044c2c403c78084f1b4ec77ea5b4914a32b5c2b2d3ceac412d8328a31874e52498e58b293fd06b89b8fcf7ea"}, - {"0000000000000000000000000000000000000000000000000000000000000003", "0052a2ffa05a7411e2f501d5ed1c82ce23aed6e0697324d5fdf9a3ef31436e6a65407adc2b271d9c06fc00750493a488dec2908895ac08cadf3e7787bbf2f918c623f963e3e21199b5142bb26e3a219916fdc9ac0822e1ad9c8dc12a7852448eeae82d4241d17a558a0bfbb94b82dd87895bd6125dbc6480e6507ed3d57a17bc06fac82026095ea1f5e1036827022293d202ec5239d3d678ea6933f16ce641566276d759bdbaf9c80cfe996b66493cfa64f531bd9515e081a76f9424cb53439d0801aaef4dcf1586d54444c98e90e97c01560d058986beb82b87e9f13140b7e5530d3bea2e264f1c1679112719d8eb80a2d777615360e60cf73a865a20d5252cbb08e11ee65f622788f5f06966c3b344692da60bd87365ece9a0b0a35931cb3b91b64d5fcc5921225e8fa764c74b303d94ffccef45671ca39c156049f3d60724e1cba72201c64cb67e432e86ab9e441701b8c4b30009b4d2f026d27e5e9bd371c8a42e5b4f186c3ccd1f4e7d2bbca5b4e781606cf1ac993784cb0c2c7ae3f64f5b2b4cb901a54b7b4475318cd27b2c133199390994391dabe592483148d092244d3a5d880e2eea9e48a66b117bc72414266603e612c27234d70f1f63eafeda2907729e13038acb663fee963fd2d621fc7a95e9519badeda99361b062e0e2266878c40c62bf8b95919abb6318ca27b34ac273bb28657e6bdf0ba5b9294a1aa223bf56820cc84859254de771c8c03170f78310e6b451c177f38e4048eff7e69b3fe5590e2f844ff9d1ddd79eadd40c73a3f0d52e639fd32a44161c2e6822c4bbb8c8c4fab057a97b9d461fd32b10c6234fcddcee333469155c08584e8e66d1dd275622606d45b915a9b1c5a612b0cb4cbfca3c3f57957522224bffd5992047c77254c570da0ae18ee012467a3ffc95538092c14cd57734cadd30d92d45439f5b4400af028c4f93eedd9bf7b07d9c09b88f42975bc51c0af144dae6a284f3c6714231e1d64f59fbb2d83b600e49e1242b4dcbbce988711788958671803a6cac9e33eda376075ea7d7c4d6e46d5f6f95d5a0ca94640c10cb125f6ce0b40b1edaa342e077c6223e3d72c270129b61219e678d77e94ee829526c76c6453274a0a517ef69c225cdc5996a39235598671cb1ba1d9effcd1ebe4b5f13e960c17548c29a9b9e669fcfb37eb7dd0ba733510e04d68ad875e31ce2fab4b109360c309a19146a65fa522d79d6f2229e023c678d1174af8a97101d7af68a64529d9e4ab4b7c3fce7adc2a8118f4139809cd7731867f96fb5675b4abf28cf0e671ef529125c02fed320a2c9344bf19ce3e53d4933778ff9c51f9b3f13caea496da345e434394f08915a7cbb87513221e6ef15650c296a4c19904ed5a4a39427bec45b481adb9a5b538df8fa5577a00bf147c63d573f2c99070b435ca750403fccccd1e406a6ba6b63631ed57d51b77e8b8cb5d207eb2145508966981dcba6fcf0010a495a151d4377bca6f6c2492e59893ebfccf6dc233b78fbd58f918925d1a3958a27b401adc863fe08a509a48c031043850de193e81be8505b1a592f5c89f11795e67f780bc57abea151e1111ec4b2287e1d2812168728cf725c531f49e9a2ea1e7cfba1c1237c62ad252444aa638a45438e0564df9cbdb68151556afccc0889336b29e214ab3370b2184b52a294c17e1406011121b9d1dd25ea3ba5a3b18c6bea8c026b53bc47912764aed22f563833c35a6827a8785d7a6f99fde98f3819c9e1736ad2cff5cb25bb1b6d91b9cd4bb753480943fe93cd659cdf5023f1e97c788f8cb08c3f2f7a09a73bd245daba856eee9112d2bf67bdeca4f0447e09558cf97d12ba2b5e5b96cb35e68a333737fbb71e1065d94223c8c4578256b41190a7a2fdad8a57c706"}, - {"0000000000000000000000000000000000000000000000000000000000000021", "001520f1024fabe6e3b67320d74a2f9db27919a381530ce6290a58966f467e39cf70f5d1169489750c7b0f2b4617588e0888d432e287092bfe25161399433510d6e610b7cae4832e0371f40fae0d98e0d85d08f403a421ca3518fdd9f47f23b70c2d9a594c76591f0d1142716b8f9053c57740c3e4adba514dcf6819cdae1bf19d732087bdcf5721b30ab851bbf20f1ab25f6e68991b81e5e0fccf3985c6be303b2aae3829df7f5f081a863c702079abc38af30c2f69e68d634d4c6d191d88ba9cd66c48996c3f5985f863d33681513ae13d185ffb453e4efe08950f6350e42fa74957628b8d531b0d90f2495b54dd27aa92b133d8bb54f9efba4ca10a3f7aaceed1cf73cd9a81985318b2c8df12f09a97406c97754c1ab86585c5553114459c2b49bc9d17df3c74dd5f1ba03b5dd53e34cfdbc377428aefbd69fa3ec995def2304337f7cbe725dafceaa358fc9ff248032c65fc4aa102b7ad1c10cc631f7e66cc415a167127726e849e1460f5f50e32f3d55d5d25b7386ebbf51009276514cdd73abaf87bdc99f51f52f75a5f99a83aac3a7ddd13848334bf8474b15fb309b0343c89ff098ef59b07613527a38268a9846845b7561e1fa4255a2f9e440eb1ee4ddda1e93dae6ad79673c27d0015127209318ac5964a709bb21a16483dd2707b3be14e14d9bf3ee23e4f4ff5f9d356b5b66119ba261f357b09d39913c899d24531ee2269e274fc7140c55bb43a100e2b6c668cb0cb0f1c97c58e5977764d9619f1cd18616bf4955f80f747dc5493ffff3a9a6d68939f4f4255a6c818586dfccf4d066812db291344e73ec9070e74129fbfdb06e4f3cf53e898fff93612f67e7cc51c98c608a18f4593ea01443cb059dd59236773f76738c6f475d29b202567f4b59d754fce25920b1785e944af0e053354dc2eef3dd7a3475524ce9b171aaa52012b66ec31174313a1c5a252173f746d10dc6e688f28d233c80c9c9942f90c48e22159df82ae4c3817d7029d0cf3169c6deb3cee81939dee4589a2623bfaad42bcf3181029937777b9f447432bb23e7e9e18eb300a1daffdf358bbbf3b62e0c0e4a18d745ac7dae67221596987f42bd73ff37ac38b6b5e49013a8c8ce01727822cd7ef9683371e11043eb5b378057d07586e21295dcbaa8ad0d39725c0e4ee35c021a27ac2b9b051029f1c1f0650bcdcc3d6b2032fc5d47d4c087795071c419ebeaf5e3ed1e571e2395baf2465fa7e7ff3ed1e1517fdaccab04acbd3c304ea5394693d20759d39351444acb8de9697112056942b51426e250bbcec000dab6a349813c05f0fed33912bd9f1f9aeb5af1ec70e72c895252494a14d68b344c5288f8982adb4b3ad130fd6e9ed0eb508db6a55e4313edecdb02bdd22e6176c6a974ee2fc47a02cd365af2f45ed735356afe6036279181ce5304db38c3193e523de66062af6b3642a70f3e0115581ddab2c4302aba151e13154eea81e131c1d07bb66250f3715d1b9eea975509253c5ae531ac730df202979edcd71b47edc53280557f2dff6091f2fe98e6f6318b9ca51e261bebe6421a9c871dd463d39cb1a8954ede3939d69f1fade9a6eab67bd6f97280b3d3a89e07d397d68028947aad7dd3f80f26de42bc40fb9d8a3c703f9c864b4dbb4120134c98be92603c62198c103f42950a2a5a594f5e38dac16ce2ba11c68ec61d6657a1748c9f31ce2f89a80d581734bc724bdd79e928d63ab23c276919cec3f1201d235517e36df144fa01b701b541665fb0beeaefdef981970b20fcd4b6f7465b4394d61530afad90cc0d637897e6c54596c096d62c84de9bf5a7870f32b8315129f5879379a3efdc366853feb716713d5f0619e4d22baa60e45a28f7c51e60c354def25a5b4c2b2426c97dbeeaf"}, - {"0000000000000000000000000000000000000000000000000000000000000016", "005c31fb5958b7b4de24f28d96ac802a9265bc7ca834ea760090a480735ec784723777c211498819f2d004f323cf1a66e0e3823a20e93d30314a4368fa4ec4236af375a720985b09721466cb50f762002e9f7dec0244a9744beee4afc873869619c90d52ffe41818df30f2db8c785134cd79664a3b8ee84c5eb9b2bc25cc283edc7b85cd35f6a35de3e806d521c9cc2453c24c3d6762fc545d1141e636281ec1eae2438bdabe09d0020ac6d3f4e5e2d5ee3d51c3fe0f877a11d49926580e57af0e0a673d75ade382ed91b6f344be012cab0f1455c91525993711fdd6f40a3b3bf62736991c321214a74fb43bcf011f0903118309f9bd90a4b52e4a680227b02fa08810b513a570bffc28e4b32edc1ea8a105735c4f132a480dd086e2e46440a48f1f1fdfa4891bad4ae0988d02c1081bb457aa7e2ef6e1b7dc7505455e95169f1ccb6d45475689ffc398c1feea76f813024c9a120aa8a7fba83cd189f0aa8aaf8fb5fd96fd158d25fc076be1aff320c6e8cb686e66b2111db1ff2d18eb388a14237568c7c3910c7194f5d3c9593b494b40f5cc6d9ab0e3931f66789b778e7dab1b1eac3e0d848f98f8866a8b81cbf1d847571f60c10abd895710429e3cb1d5f414c464549890fa39ceecdc1d96c519718573528fe51f81df226cf14cc999c9d12f07cb3f3924e7a951278f0d66859624726e767b4bd8d96e062a22a9245bf6a50eca7142b6c60158bbdd1324ac066036be6d9f8b3d5f1be58b78544e357cd6fb20ad160409b7ef9cdb5b458c16ed0e72ad0e6a6c1e5b77173ba90bdfed61a995296280524ba2214a637e29a007a613c19fad8b6fb962932655c2960e1417d593951064425a670c74377db808956a79a0a2585cb723aa0f54bbdb48c7ea7f1bb824ed37f917be9c05bd9fe52e95e27052cdc01137c4d52e28c1a9a6a46d1628f700e68853af66444fcd50d2a650a32a1350111d0f0c023b0e1f948b861ca33822f7dd28322de264dee4da12b2d60cff8b7cf6c297618ab29342dc6e7d9bad102b552a5aa9d155b2bdd3e8ec8b6331db0f947fc0f7070b69bba694a5f943db644b994ba0812e61b5ea7d5be296919e67b1039e5497b711d8ddc6cf763f8fd10f0be9431a113d9bbdbbb53465c518462a1894236036b104feb99fd7afc112458a67d9cdb629cf7a39cc091d44f73519c1a9b6bad2fb8d1c7bd6d8a939afae14b61625d08a38ae6910321dc054b0a5c1ac7428163b66b35b7ce88ef1956653f9466b862a0b643cf9a33dfa7667e956b47f534e65e8f73b76b625bcdf08f1117d4c7351e29a27d169c3263fc37ac2548ada910f1b6fbcde77e3b15fae3487c99ee9e3722700f708c536b2c4a49de813a797a354ef4fb547da0c201df8943debb380781dd763c1d1b620be7a90f9a7302fff200212651c0b41c56fca55233d95fd9694e89b7624b31aba03d918b68095c6a4687471c9f26731db3e3da90a85c5beba79223fd2d731695e7b380e65a89e26241a1d7110c50955e69943423582ff316cd9eb4fc299093a8e5c3603d219d9d6023e034b06251680b3390c3582cf8a19207ed3dde7e6b5a4d32dede7d63455de1445d3555f06b34bce9209d180605377077e9eff5637a7fc60eedd34bf404b23bf3bdc295aa248f81a6902ad03576141cd36787221efbdaf5d5a38c75218ab14264267b0214af7a631977886565369ed3d32085808352a0d7688dbe9bf08e296a8f46f89e4f07485e7108da0b93d4ad90a6f40627f47f58a24e077291d9303b880f6401e60513f00610df5b34f84856299443a34d52fa4a8d0a328dfdc06effe5fb02643d45bc6c404609a1cdf87dfd25dd660da65c8da84b041c9498d06649c8e4198151aedc763cce3bc4fc0ff55989ed6"}, - {"0000000000000000000000000000000000000000000000000000000000000003", "0002ef2ed48192c2a24ce5bb9e5d78aacb08d7272804514dd7ee04de507a1df441043d619d14fa7453ac098835a3b5c2ea2cbc3e146fc1cf0935fd07fcfc7814d2fc41c4c84375ecc591c0dea7e24707d4b9d35409505a1d7489ae2874a312623016608a46f0d58a570a1d8d22d2454446c2c3773a00f7866220e2d792ad0c287ac2622f81b1847001ad4654a8c915efde98de4f15eef5e7daf83141aad947c47e382e5fd5fe4edf0ad0afb3bcd2f909f172dcab496c17135a8dbfb7cb1d4724d37349af07702a84f81e64fa19fe48bd152f0bf899c2af5104fef56fb196f8acc607a60f3dd6db3b031e4a04183f696bc0f6514b3ebfef1626194d5d13c2863d8a071b03c6fa783d90e838cfac2bfea6533eca4d98816a21496bbe0490ee5ab57619e2b5155e168fd252e4ed0c0ffa11e231374aed3dfb2219d06128131380ce19804b3613c61955d7e1c35851de70f003dd89d5c9989fd1e606936058eecc3dd3e47300d73a62bf7be4a077f5042e0ab6f2ff8132d7609777620df7e6eb71c40c77a2c0a1f039eed3edaec1110132281797b2c66c8ccf6b2ed5bc2eb78faa2823fefcde1032b2e465dacd4b5c1a658f45ef269e594d73cb62432e1367177372c1c17aa5edf6f363a5ff899d5a611ba7b30de109f447689502640bebf9cf7df27ca7c61ec01a4c790819e654b117ab51d88f2e68e4970d3e0a84bdbe6d5d0919f83304914ad2e8e594c4989d0f53ecee47d15b0a05f55605b93c7b91ab06e6d9cc64135c8acb0469d417bee3820c2631cdc303f479ebbd3eb9df988b5c7eb52018d63484bff3874a5b1b5fb00d344e50950d8818cc085b7d0c62994febf77fb21f61b34e965bed15f173551656d461fc49995cd4939d1b16ffb5664e2854cfd3f1ebd17bf08cf05857d552233393285354045bef5a8482b3335b461289f1acc000311fdbf9c805d19336d0fbfd971a3875c18e10932292adea46895a148f7c825d833ce161545fd98d76170ad9307ac7ab7feae434a83eb3295dfd91f6ca642d97668841105951536f72ef8762413f45565cd5f2045b6c367cc1584c1a79f65960b6eef9aa803b44ce1de94eb62594313fc26a742c42334065f1cc5a5961054dec7d3a4c936a8f1082310e7efac9d24ed4a0a820358c46cbb43923ca1a224c193523a6cab7ddfe6901bba1aa1e47c24369ef05475fb9d2e373785bd9a9084f5ee756938dada78e17b00845307ac7f35ba00408fc9a232a0866f291a311be15958b7ec30aff740d2f5346e75c4dd6e5456bc90634e61eda8c997a687d089fbcd41b038a38756c01fffca663bd3a2275c2ef2dd64a6f36cf0f1e79e59335e0e0a5b9aed1ee997b0b80f41e61d490ad454506a10ffd873e10dcb949bc19253a0e70ca8ea5d81b73df0365b5c7183059e8220098134010919736d031b0de50d69aba31027302de285705d1220d1d7b859a067cda5b0bde7e109c000204f052f0ff47c06486f6d2103b4d2fc132bbf325ca088d991cbc45bc55902742d231cbea9937aa9258f701c65fcdc28f22f99aeb340b042c24970198b9875f1011d726f0851de46f0f81625d555c9e6e633e7a7f1bac1ac8fe50d49d57f4334a8f41a908f4a41d06e555cc5548851b76653eb616c201da638dfd427903ca01e81dd922ad6cc7cbd7c4be265fffcde3dfb028130fa65cecd606cc8fed19c12c989063dfd550bff8df0a7b124e489af9ab9aa9366b4cbea10e7109de69a72851d7e565915adcc68215c94c45208db8221137560d2ddd866552355362232187ad942b69e5e1d4917d0f051b4888633787225501bee722b616e90d7a4c6b247ac566d1abbde1bb3828c71c7587dadd8158084038bc37a34ea049adc0c8b3bea3746baa723bdab353"}, - {"000000000000000000000000000000000000000000000000000000000000001d", "001d124d24a1bdc1236d0310dafd84c223ced4b42c0f9404f6631b1fd3873fa6fa666280da2b7c1e48e413b0cec69ca22b01716616cc8253c8c6d92cddc7ef149022699accaa2773d6d93f1079cfff7df4be124c05dfc932420c8b6357904566e9d351d5cb67f6b114254b6a9361a0254f1c7ef90868ffc61e4f60f2b3800d7641e8a22e444de323549126c66b4251603df39f2d812f1aa1132d0d83b8f4e025b80ece830ebf0e9302bb12caef9782d563de54fcf576d321cd1b72c8703f124bfa82148496cd9d1407f66cb752f19e7de55c14a0c72e5491b59100d283cebf5df2495decdf20fe2153067529300a3d9dadd5c967d563dd90224d7b0c0b3a9a5f13e61857327d74ac4a5b6ac6d9c71cfd683f5a963957de10737846977b8d588a2a8a643d2ceb26e767fc049312afa52f84aee8d22eed31775c1b9e4789826bd0efa1d98af9248b115fde4b0f34ff09f0005f24ccf4c7d059cc77b14eaa5bc268d520fad73a1831ce8d8a4e0027db07c3b2863a04a61ce07c9ad515a5f67fe99909b5ff5efa34c469a27af9c35ed0f856ca5d31c719048772dfb8d1c8cf85c7c0dbfe82770a830762011353d3944161e373e4321c91019bfbb410db179a26dc9549a9cfe6d7406b4405e47c4f8c2717c0391261cbe30bb74583644722b8550145574b812505f1a47068729f8750750f61711521930ebc8c400175760b17d0a2a8da6387409ef5c135dab2338a9a0d1f8bde30d7c519e386629b852c6106ab93bcb8a802c8866ed982f974cf7a803e4a40318038593c465005fae2fbde606e31ff01c6aa0bee7caf3b9dbd277004d7d5272d305e9985c302ca9afc821a1d5238091b3e6557b24161fa638cafe79d8d692ea373359d2304172e547a2468a85ff84a1351cb37fb532454b9dc662e4e7ecfe0a017c555c384a1dbc8b7374b57ba8767006a77bc4502d155275f0936077f865300c3f906b415014a65ec2e36f3899192203932e8a95e223c5dc305c904014b27d83d9274421901463c9a9ebaf97455082eae358787a6a0d97ba30508e16845a8138ddaca008322b5d70d5c60aab0e25ecc5e4546ce7e1be7ca02bfd077d8985c857a4c060f32e1750a2580518c2b07d8e3a1a085fb7a7ec004eced7e0322612cd769610aba8d3aa5131f2385f12811cf60c166ca2d983c5e0a226ac2244f68359d7b47c83751c1b78bf29ec69a1678aa4f2cce0db98fef25eab5d85867304afdbf811123a0b45684c3990a9903f5e86290e50f12eb71782a9b248a8d9621d8c57a74c13c6237956bcf5821ca0c0699cf69d85e97c194a2ed7df66b3601dbd37d6830a1a3787f9e136ffdb914469a54146246899a4d881184359faa4fc6cf547138c4eadc520f2dc81a182e120683c3c4d0898fd24772a20c4c0f31e1f1fcdf0a00b8470cfd2b62addbd5d086111c015c3e3f82722332c1d7594317dea7848af38a91b29c8522ca9ff40e0419c92a729f6ec965dc96491fb3da6bb26b7ffb151712751b26894018893b037fcea417c6b6059c82560870b3bae1d0d285e2ffd498003f73ae10be5a1e1c29b022a23b59755be92913c5df4ff379fbdbba144c2333642cf111ae70fc924433a83899cb784ebe665f2d2af415de19dc3d7cae65c762d7bd0e90225fb8df0371b648f04ed5169ea3c3b19fdc68a9c2d4ba0dbf0a841edf5a0ba676aa3541c9c4f931a976efb7a9cc0e08933eb9da6f4987f455a8abdc9b92f5a7ddafb31577b3071d2d1bcd98e347dd1dd9119b16221c9b990517f0e58bca78f38779b0a10896138d5b3edd41ea2609f4ec13cf4fc6aa1ed5d272366401ded434755f0b1866121ab03d17b973525893bc4e2509ff2e161c1898ea7f5cca448310bb044b376e9d3d4023ac5ffb"}, - {"0000000000000000000000000000000000000000000000000000000000000000", "012c1376ac2860cd45ef71a3a31c9908e42e765a181756249c8b4d78d118bf5187e547f39dd0a89d962b110b61216ccf05b6eaff13093a653b8b30dcfadff468ad149165af5ea7ddee9798237a95b69d961ca088093ebe3f9e27e267ba0084891969396dc1b251b88a115816a4f211fc129ce583794aca059d93a37dd5f821135a93a5e237453422b4924e75640da576331c4174777735d7b6b70dfbe66933edf1236b007f590bbd02c97ffbafe03115f24c525a5f7c988d18217b643a13cec3fbec8fb7856b35566992796acf36b89a13fb2e18c4c39da0ef7537878494da3d197e46dd5eda136a22ff7296dd4989eb30bab0d66a381eb92abc24080771076ae6682c7bbcdd33bbcdc59e7272c2b784f52a1acd50888c0a06e17fb580ac682291a471d8370f0dd479729a486d9451a8a108bfbaba0474a774c08424152d15fb2c9057cddde592b8d2b4422fae7886b9021f44a017d6805af386924a88f6806d14ec54452b1af2b75dc0206ba78937f6c4b73c58faa5e77e7bf20987bfafce487293a247e47127fd33f5364b575cbd23f571775ce596bfaaff761a94ccadddb9a87d5712041f630247cb7fde7c7740717be09dc334133ae66c08f2b6b7fbd2dbb19c5a30a131f81c0443571b791d1ec4afbdb8cd79e87368851be5b30b96f92ebc802f3c4e1e40166684894d52f969915fdb4e98bf15f559022f7d661eb784d1f6eef2933d3af5663bd3bd446108e6e933d213c10dbb3a046e29b1a83644c297c26702a5850863908fcbafd0218fa3fcebd6a0b13faded0cd445e580e2d7f3550093513d534ea35fc95ebda20611da09c28c2bc7b9d683707f6db04d6a53b2c8230fcc4f6da50c81fcf78c95139acd34ede110f7171a090eb601f7c581d986a1721fcab2f858ff888c1dee0dce2f16251f7123cd9ea4d3cae5756e15f0db92660209894bc61296e762b464633bf49d0336dadd6e0f4f7152cd38e06ddfb9fd05b398440455be2774705608483160885a8668e93220d5279070e97ed2bf99c534368ef9d95e3aad777ec50aadeb95e5fee933247d08e97e5332635ad38efd613dd67b110d8be29c2e690efaef7312a741bb898c76aec6ecd4066639339ce72492cfe4aad3b3bed0714387afc539d9eebb30a56436fe9c2ecaa2c6bfad8ea373e1ca3bea7e92b5ad2e035c5bbe2bc75e557c96841ba9f524ae8d9f3c46b00ded246395e02e1d2e8ca408f3468a613b8e6d96390d624270f8d2a8f7e8cc11485a498bb75879ff9f9f10d86c7fcc180da3f7b2a2e9d35d809e40c7dfdd5d13d606ea0d0c3b83933585085bf0a497221dfbd3071dd9d4e489221a4123b32206feca74e6cb039aab8b1be2e714e78be4e1b93269b182e57c2f90345fe2522c21b6d10d1c6f8aee8cc629a8e12649aa4c3ff4db021c4d1081caa05b159b39a9776a7b82b3ecff08bf03fb7172528531da7ceb92c2e0c972cd52c61c02c30bc9042f5cf124bbfd9411b4f31a8e1cb364f9fe18280771955025768188ba936dc87b5e1d98d5ed6c67073cc4c624d4ee44de5452aba2bd9e54d9c35c32220a8f5e300313e469c3d1639161c5be729eaf9d9c024ffd633fcbf32d87fc3857032778f552883adc9cdf53294f859638fc69cfd8f67876c40af3137ebeca770d89cd6c2b0d100da5ffe281af21ed3189c7ad72752575dace38d4e1b7dd0862c26972859cdda6f5281a1006796fda9db4f93dc3a31582d40a71785d1eac3929686777cd15d439c6c2a5525ed6a471c37eb260d514a1948d25a31d3d651254305971c82279081a301949cae5f1105a7d3b0816e6f02dd1f57240953e6d6f14b565d117f189f7e74723d955a1ef97066338e4e22ca447ef95d96e9edf2be3158046973211c654b13e"}, - {"000000000000000000000000000000000000000000000000000000000000001e", "002a073b8dcc79649d3a0030f75b70dd814bccbb1e0bd1ab0aa61aee9fbc1f9577ef79333f63cb9d38040dbb3640bfdfbadb69afd0fa45623280c1a85842cd2a1bad10498b043504b513c94dd0e18614d457bb35035e70863f2e82cfd5a4baf9bafb046f6c951c11232b1f53a39e619fab80f827abd4f5b91aad2d3f97fe1483f9f04545f6d96c8467ae40f07a665093db6f4e6e11fed8b25ed4ed76f938be5868879e5a48d9a6200560394a696189457bb3e5e820bbf54f41827d894a2a6a822bac1b9edd18c9f43afe478e7548fc3fe11f1536c5c46f28473f8e89232deaa7fb0f01977fa0f71e382b29a75c2addb71d04c5b52ad84b4b085c699d0de248fcfe4394e02a37344c1d586776e82a9f6ff32df37c744731cd29bb3a6558efc2d932e16f98384d16916e713293e79ca32053e2ccc40e42087f1adc6a1c939e306f278c23a93e83cfc5675f6d28c61a90b40068d750f605f21ab0f643f2e32b956a0172168d4a42462e9119631ddf3a2c34ec007ae0d57694d51d4304f7a9515acd742b460ee1e4d86ed12d7a3537bd5d390ec466e61d20ab27b0856eb6b8700705ac9db7c30188f883a1042f8a62d25072b3304294a8584f379b287b9b2808d2ea7f62abb4a97be1713a2eae1df613047e4b493499de8f19e12316787853297f70cfe43309c4b459d253acf75eb8a0d23e1aa53d264e0d405d00a129f263e04d477349d6762347d7d398383f50291faed102614f5b1ac90086e632448f6b22b05af70a19940169350c1857e25a5a63b65605bea5467cb6d81d3fa16bce076ff59c1e4245e725497db636d7fe68068615f9caec3af1c344c1cc2197b346b12e1dde333eec9ea2fe1471eccbbc247ce739dd71c984b15284117b4cc90b4dadf1011e07560bf51dbebdd43bdbaa3ae0c31c7d16c0a946fce4914efdbbf5dda111d196037821ec8455d03360e1b0b5056b64f503a6d3bcaf18479349c373e2adcd7f02b6f7e4ede97fa07eb5f62120f499cdd8eab35356d4af31bb9e8531929ae92c23fcaf0b8a133b29f67a02a36095d8b17afbed4d6a044e08579fb82351f0926325e2e2c4fd2fba75a0b1160e656605953ff56e9b423fa17306270e17bbdc8026e9ae2bec6903774dc6149b92324942734978ee71422a83fa036edb458b919857b04f13bea69bda2028160aad487bd41de8f39da26dc32f0521cda8fce3b81fae19389979ef71ef0e13bc7afa3faa4f767619b01f524372a82b3371e56ee3137c5c567d4743d7987d2082573b185348c9da8c1c42fe6be82b3a673c65bf161af6f938941350da1b31ae7fa75654813e2dea351fe17dfa669a5ea5a1750229999528f998e7747959277f43fb4260182dc64764aba5d63197c0059e4037290c3696722cc2b3ba14143a69d412ce99ce95e2d704893127e96538cb72c2725ca5a0495a3fbf757b5e2969f4f66ccd9588b5bf8a3bd2f8a1db2ea89f7ef308cadc4e28b7c685f9f0545f6fe14d99631339c7063f493d0b75e1cc5393e6e884a5ebafc2b476ba350e0505a486222bafdbcc5e61ec7e90f52d11891dbf5e09f03ca310e52c7bf5c4537989dbe625673f9ccab90ff863d9392b6a9f6d6855d32cd56f768baf58b9e71d3746f1b72b077bbf465508e0b804b586b83c0dfa05b04e3886165ea96bde01cbccefe7096018abdc555ac4e4fb5ca9ec4bb31616a9035ec54f80a01d4c4b51ba149fe39cce0103593d370c76af63624e5c50d58f35b78bb6b7f27fd671893e7371806651e336cde70756efff8a44123d1563b1a1a914e2e5a99770e2be437c5680825a9a69933064a916fe50893571175056159c79865ff808cbc7b8e4e469f0e243879cded50c2644e73d64cbd4ee7f5692b07695a6838d547d421e"}, - {"000000000000000000000000000000000000000000000000000000000000002a", "01a78eb8b913c9b8dcc7a5c961cc0e264e6cd91f2c41639c1b6d6348d57e03745ea124da362df09b94661e3e57b470095dd2b32b537adca3caf285c1ba559e2a9745c7ae7457bdd46775d197c2b5fecf395ff4df039fd2ed9b8493897b5c551d1a4cd672172e19c9db1320b108cbca4ee1c67dc2bcb958e825434073143505e787d0a3b77429d04d71866e21e59d36ab3180964288c29219e52447e88544f56f3a5d35ae8bb4ea530ceb546411c3a88522b9c9e0bf7ea26b64d01cc04e112a3f90afe31ff99a7d12219ced01c682d31947b619b831fbab50fa5bbf1473b68577bf96981f7cd36935256d38241ac58d9e8904256ab43d171b063e41ab11fb84e252d38fef699e046fdd522de99357edae1044aa4ec8c793dd51799894d1015f9d05630f7a5ea11a41fff0189468d5c62a82affde529116d27dbcdb9292d15053796a0b96c2bc781f961f4cf6fd4bf6b100360ecfd9c8318d0b2a244ff8ff33fb7622fbedf8b0966df450491a0f95d892af03764f69acd765a82e50785e6ee4a2b66855f6082da60c051bcf901f0b8320f5dbfbd579fc639d464d24d7f60ee361dc4d7434b0a6eab599083e1656906a546b4b3e05efdb79e5b33205589cf94107553e28f04990eaacc9a35c813a0c6163f9fd26729d52f9cdee23bc0c391be365e9686bf18b3f50609d5ea299fbec58bdd7030ca021d12f23d072188563ad587bfcc43760519c5c971e70c0f85167782156d1dabf567ee81ea997f6dea2fc6d03f534a0c9c72bb61aea241ee4c732b79535348e8128bf35a1e9e75f651980bebfcb482812e482068f12aef56c5075081a054d90e993f5b33f4a276f2dd06fc778eb9199abfe5783501f3d529736202342a79d58570457321df5abec75cebffece754cc42bd93b2b1f1f8718d33a157cd47112c7ad16c83b07cbfbc2dd2d81e115201c31e74e999929994ff91bfd74a6bee3d767a9a601485d6e63de1a755862a661c08fe124a793959b08224c1ffa183e4454527b983990a7f2e35145a8bb84a3ba8b7a411b859e9da4e586d1ae4d2df0e65bb6eb60fe1057be0076663ed4ac35741a63c352ab2bd021e16846fe74e30955dbe53ba129752e2ae996e34fac01cc81f750d5ede81bcf1e580bf3b8e32ebb55f16c848c0b7df2d5acf97e95d57222542813b6d317ed1aa04e001602cb7b245ccedd2f1706f6c80c50dd125090f7533f8d9cd21b1d0da052130503705969c1c6f2b1a54de03f107e178c9a9d31f4d9a83b18610d348bd25818386c2718255c5f7e2a96247e45619bc5c58ed0bff40cb46d25eb8f3591143aea794e8e849723b771f4493699c0e6df8f0b4e4707aaf2e4f20183ddecc1833d4637d1ba632e57e9b1a7af20a4b56d3bfb6df18ccadbc9b19ee6b8cb7036c56779a010426992e09039398ab7f0a2491a19dc4497ca3451e3082fa29eb3fe1dc76d266c521b45b559893c75f1de5293ab962136a4c6c4d341641f6c161e0cf1256f8a076bfb1313511c401f1e285911ea6844af6c919f1847595272f0662a58b9e8eb3d0a7fc70845b114b35d297b318741d6b0b00c0da4f3f436ed29e692afdd3d9195fb2f209bb74fd7f0506e367adb9bee2f44e73ad74fdc1601c58311227c90e115927c5bd9dddb085b6a58ee05905075617774310e1134e8cde5fe8727b5feabe5c2e0ddb3f413de644d757db2353059e0472aa6d7896d110b77599083536bdd5d291ee337fa7d5a49c5c4b3e44445e1bd5df4469e44b450940e45aa700805da29a0c297f2e74cd98096feb645f8471e7d9c6c5b830cb3741f2f4434f0355485d792ff8dfe8c6533bf45a2723fe8b0bc209c32e52d7757128e679a640a0328e6024f62b62d5240a29f54016b26d3e6966a3067c615c"}, - {"0000000000000000000000000000000000000000000000000000000000000012", "011d015a14f2690baf98830bed249ba258a8df05d109bfa8bd23f09d09e04455205fff800d90ccf6692c24bc13aa4ed133a095c963acb8e12599ede17448db30a4a749fa53335fb7e39ab4f4de6276d03d7b529d072d5e8bcec6654ecc3570f75c4689ae3969bd4e59256ce7471a4af21071658338ebafc32264f7d6de750c1f3abd558fa044a3bfb6d8e24d18f2d60f9898e84518be66e358a9d1fb460600e272e685b19574c04d01f392baeacc38ca871fc2b1a05ffab1e21bbe8ef504d5d2c8705416135b0a4074402adb4c729b99184313a725321b89b02258ce33675ef39342da1e7cd2c52cbeb5448fed2ffb85fe64d154ad9819ae94197a1f1adfe96323205bcfa97f523a32a0362905b21eaa842cc432f1ab96e1daf444e4466b7ae8a291149bfa5d372b4c6b475b3be5cbca840e2ae85bd94d627292a447812cb1e55a7d0b8d3c74b2013829d5544c5834c302770c59e9d397cbd8dea50cf842874abf051b997d0377f46040682e0992a8d2bd97d0125a6fe71517d30f60ece6b5da9c67e886c55a9a77e2de24779d424b24618a757d11a40b1c8ed2af84667ddcbf57b6347a07b0b48cd598d00d8e8216a6f14ed7c5c55e131410425224dd04d53887595d0539adf027e22e97fd14680c63940f7e46afb157a2d5c824ff8e6b21a31b856215a2650aaea060777ed2754cafd4f9696e17d6ebef07a359535c15a3f5169bd5da82fda7eed90518cb0409798c8b03ad8c818e4680fac8227e304bfd0e66ef0f6d4f746c1a6895ac40d3920b3cdfe9797599133028c18bc84052b8693ccb746b2562fa61469016df330a8b60a07f0f2444cf55c34bff7854e93baf3776d5309da24a7053370ea1ddc324f8a916ff71b15fb3fc15421c74f74facd7a7539289827941b9ba4a5015b61d61410b020df13fe628d5d791623393236b597e52026bd762c2e304dd76b0162864e0b0eb097bde330a13bcd79cec45b17ec24715060458f51988753c7be9332de25d648f1c228024f55cfaf985e2b58df93bed43ba32cc8573739dd66b07a8ebeb8fddebb2b6e1680e49a90de7c7366ea024a4a882b1b4f55d101178ec1e20b7b6218d3da3d46404cd38b692d2229ebe666c1ce60afc014ecfa8851773a2c5c9f80a22bf5a1ae43a3dec4b5e0fe27ef79e555a0e4a4c12193e11276d073b386ddfb39209f8f8315d30d887f1648ef54575113e6f9ec4a3b815e436e2924e21d69d2b60f96abc09acd41f4c1f96a978a3f207dfbf419ae24fbaf1d0152ccc868f52cb5755e81af349e3171effe35e95450779caa4404dc5f1f87be459147bd52d5720d32ea75c66b49d12ed5d65d47b363c92cc4081cb6af42e4a2f85c37d6fa9ee91ee303391335989c2b28e3d6bae34c0cdec182295f7fb0a966f2bbab4baf499bfa4e70815cd14d8509c4f66698162a5e2e5a1483b93cd2556dd0cf58020804589ff8689fcf83d8a2191df242029513ff4c323d1ebeb11745a4336627dbbec4ea61c4d28c47f899ecf6104a765f69a5d6a5ac0a1197aaf12fa834d338f024b77f4f1abdbefcd1d78c7d3d9e21b18c5a6cf1eac851738da014fe0f4970c6d58933026217b3c61db6f97c5b64b199afd8656e5f49c7def59c43ade2beb9f2bc9d54744f3d1a2362571f4dbc40be45e76dbe014db44adc1cac2244dd8e9aa949dc46a211e5d21de661921a4c75e18d975c2af4b9b85ab10445cc46be0b4350fe888ba9c57287f2516dfbc5654041eb86f268a4f48f5996491f6f9e6c1c99cf2cc11b3d9e96dd59929e7fdf345df76b4897f8774237b1591c44a1c5792c999b221d9b21d2551139ab2809b1a875101140a519b73d652b626e3985147c27b97e31c81141f19f0ca7da58f13064c55ae55be4e4e2810"}, - {"000000000000000000000000000000000000000000000000000000000000001c", "002a15d84ac4b285cd4cb232bb21cdd14647168b3647cfde754c5aed135cdd9676a2edd69e6d4e1e3f870659ab8c360d287f7783925a02770cfb9341de3c764da705d0ac3838b5d94426918ad5bd968c783930ab0326fbc1404b634594a5875fb5cd97be57b1568bef2205cc4a591402ccab11b26a982ebda52f3aef6392096f834d61c82b513d2ce33a967de031e06b7c07ab0fc2af07af46654727f09119e0bfc9b8f82dac1a70095da0c82ddae3ab99afa1548d3b53a864e30f83a30cf44f083ad54ca51fe922919c6919b0a4c2c66ab7139e3b5c89c9bc70eb25483aec6af5ce94fc5654991a6acca963af9c278f2cb3ca0a776e0ae75a99e1ef0bc441df84d521f9b044a26c8d715f53b8df5fd36f255e6246bf98bedda9d362875b611ff8df889a96c61a0c30d93d9909e9d3e5b3f564d0fe6a701cdad6051b292ecfa137e5fbc74f483cf5cc6e0e5985932dae00314a152fd8153d8ad9f7f5d36fb986a43f97d64e2242fe7dcd64be29bb59447982f29feeaf0876a3134ab9466d22ae1269b6b4b65267d10b31f8d21669475be7650f231c625bc0588790f9f228be91b53ab8e603ab48d2295c1d3f20775106ddf617c5be8ef200ce0919be890c8cb49ac5f647e064c2ec9edc86d8e6f214027e33fa45dcb3c7dc0498f0ffb987dbfa9f0e763b145be787d3f056c2ee49e6c569ba2b6541bce9f40657f2d7e88b147f4fd1f14079a78b51149a6b1d3c3537e28d228d4eef3bb914823b3affcd22211de7740f444f8317eb557f9d24031c4daee7ce773ddabc0627981cd4a1f17a4790fca51b3b4b3585fa64b26c010ddee235ce1a1701636db71e3ae07dba8944f56987138fd1c84cd40c65597bb25d18bb3e1da945b6c7590e53c51ca191621bdebcc374b970faed9d5f99f28f160bf720a85ccacb103444a3b643f352c17cdb84a7019c6242ba40895f31d2711eff8cff493be2785b3b0631756d991079d0e143724f294a24310cf328f55607be72fb44e9a1b5a56472d7316b77533f415c7d1b28f0facc2adca90bb461f4b78ae5a702fcdf79ce550d6b48ce9b84e208c163a1748ccd4441799d70e6e8318e44c06e9e72a980e2e7ef907080924155780168374c7c0b7c4fd66883c235239a65b6b9aa15cdab1350057cb7f05673bb16bad852b9d4fcd27e35d82f8b02c79b727f8b1edd51f5b2c0497531322e183c51da298df3e95ff06d17d8ff23fe654350ad2eada9f06812f396562c46e4f9aca6e383435aea68fbceec2eff2e9f043b82e47bb9e5ca461cfcf919c9ddd39fac4f0518912f292cd5f9a1c8f10b1c4ef684e6cd14f53428a07fcd80cb82ef8f2d65118aef8b8dcfadf25cdf0961da9c9d436e1be81c96bf41683221b56155feab1ff944821f32b27bee2bc72b1578be7231dcbde777038e4368a65094e2ab9ae33935e1f20a1472d91ebd27e04ed4c3d5fa27751b163f17ca7dad97101491d2097569da0f7180f5fa77f35dbbeca208db51f863a81020d8a77ae4c83189517119f4b34f79326f73367f044656996f53287108f9849f5963b5ed79c3b95121246434d1fed8fff6d53ad7e26352ba6fc97bfe844b0d65b74e102735c57f71016e185cadc252717800292840a9a3404ce2fead4742f680c854b75b23db114e0615c318a9dba1618e3a22e93d2c19f3681cde8b2e1bdfdbb78c4cfc91336b844f5dd148cf061f99e45807469b8ea2f5d785bf8bf2ec1c9a6065a0365f5223162c649167227e61ee1e55dd4f37fc2a2947d8ffd40778a7d0945046d8f63b14160dea0106f28e37a4d82618bb47d69e166d9caf4332f2501220e6801e0d171937354e31f46093be96d9105660570ad403988bb62f941dfb44dd6beb6bfffacf507fe77bcba4ff4740"}, - {"0000000000000000000000000000000000000000000000000000000000000004", "002cfe327783b189176983eacf7ecc0576496d51c52b207a635497197bcae5c67f9f6af0f6bbb41a3a4503ecad3faa9aed95171820b7b478287e17a27379c10eb58395b9222fe52235f16a15df7a5e0129b10c410ea72552386a3f3ba893c2f2d658118d13ea890ad116ad6d71f6f29fdbabbf21bbd9a10dd13ade5f522318b9e1fac6a47485c1f412c0bab123c4ecee9af2be21f53c62578bdb3cda56582941452f9e108ebbb19a00b1d4b79c816d24439225258c7a97a1858d7905653144fe52f39739b7296334898dd377055fa6d5ce0f247ef4db4e6dcba1c5f374862e747b62563896544327643a1ba16b6f8595f87774fdf07dfb5d89dbf7a602cf547e18ec0c01a2cdd19adbe4c097238bdbd28902f377e4cf846109964841722c4110a2c904b6557e0ef914bf1389f7619f54012d9332b68d027a15107312f587b1713e7c7bf78e62925542b135fead34d04b00b70c9b09488433a516320aa9ffa670e29279ff9b01765d289f06b5e7cf6082130df175363fd6fc18dd09355f1c29e812c1ceeef1c59ff9b16d016915930e0b91f96dcf504b628f69c20b2d6e0920e0d5e87ac403b3941f4b90c15789c5f3bcbc63b7d771821c580f2440f96d6e6752e18d19b5827db18379b771bd874d115b4b82e0134ea57d17a545b4462867520ddaa0c5153da3c8745626bdddebf1b14c305f1d15a77e5d7001fcedb5530f1682ce14408918f08a2c492c5625f826e076f2089432d8d962d9ef01ef43a6eabe585f68040fe904175243dfb94526e69d4da28dc3aa753eda04d2ef39bd1a7db3194dd48a74539b7b1578392d020c4243eaa8a98c576e3db4eaa6da44d2967e5cfd25550507905c24e6afaed72a053e743f0b641c1bd8c6179437d8dce365d9c8de31de80b9fa51e77bcfb68325ec7bae88542af0d3587517c83aa8a19c1f2f781a007ba45234e03c7f2c6d307032131978f2c52e1ad806c326ad469fe77b9478c59ed335fcb19369d58847215a575208caf69d2923f3fd975b2bfb45a67f36a75380f594f75bc3a5f7e955b6f855034177accf9e53020f984b3ec3038e24ea7473c6bab9da52c0fe300015952ec995d73f350cad4344e7696490d582762ff10bab260ed49bf184fb0262f59b6fad66610bba42010e899ba153d44e8b1bc4330991bd4cc96f660d215303e203ed51c1304f6543a2541fb31448b5bcec04481437e57b9d9a3765f7df022939cd54baa7b45982af0ac576d9b88e9a29689215566c366d5720635beab82e5cc335eded78856f6d57feb6758a8ea940df1e31042a1631524e33127ea6b0d5ca0cb8eaffffde750a2afbb2e5571e3a9308755692113b8dfda4c133a94d0bf94557e4624303b72554afccf151a5ad8fb923410ceabf24ad21944dbd6be4be8f452d521a8ad3811a00a75090eb0fb651c71fc83d05cd60d2c295fb835d1c3099c535118ea93868b3bd1bbdc36a582d34e41c081779a8dd82dfd52d6ff2616e76b680f62e7b8e8437916db69c1745c3c7b754ed2a49532556d1d16eb00a67a9c33a5c66611847975289e58f01e7330fb94715da2cc05a8bc7a4c386d379eac649b598f7376e92173c12cb32670039640a659abe41b4d9fa047ad1d0396bf31424b3383fe1f4167cacb91b65ba749ee71402db419d224eab34c93e706b689dce6cc7630fdc5844ebffc1f6e5aed17e62062bacf1803eae115ee21d034f968026d68fab97ce003ad73d83ae4f12fdf8056df2d7c0cd6657e7d90e1884cd5d7dc74775bab7bc121066525c362185ef3fc2adbadf2da561624d260b42639ff88b6ab227d0904594e33c79d6c7a137ccaa1c29d1de4eece0a3b8aec41fa94b980920abd37c052785afd287132e9d35890b808cf2d98b06521c02d6"}, - {"000000000000000000000000000000000000000000000000000000000000002a", "005c6b1abf823d2f076a133d0cfbd2e11d38dc6fe16d4c1ebb47a9b0e978f15a61dedf44433d5a9afd600ae2bddc6ec8d53df3ee22ffdc1dca554ffd76470123c24e8823330ac5e52d84257ab602c9b9746dd37d03cca08399564e4bcd8d2375f36bce27c45fde3ad928781d6eb68f7814f5a44633f54d0f65c844f28bc2137800c75e5bfbf33fe8c3371ca1030ee46adb897c14f8cee46512e795fe97449fa9fa361738e45d1993005dfd878994585bd7579094647ff07662f0f637ab548a84eebfe93f1f74f447053de917aad576fdc5a5093bcba4edd62dfb73f3a130bcbc736730f25e29171e702acbddcc249ef6ce0245e5cf98dd150cbb095104b0935c729480179ad2639595ced0857d92ba26ff1d4dcf9bef084279dd4db46d50b70b8ae8279dac0d31f34fb56614e69d87c2c3d745ec764d820393b6694894b562095cde31344b74b6f7c1b559f3c7d9292c0439a8a4a7c7f5649c5c74a246ccf6b92944fcc502a35e6d3e1ce9b405930e9a60545612c2b17738e0920ddb02cfaa4d36a89feb6127c99e4c7a36abf8dff64001be053198cd41b565760ca0e59412868d750cb60ef76cc9e070018fcd81d6c0a4c0876b02321920bb146b6917e145bb92a841031dc9a3632d0b4a2c8650221debb309e25c3b35d4234802206f3e8d7c5f4e92318ca674c2d3f5dcb55e5577c3c2f70d657ead664305368de07f42dfc456ec11d3e1d1bd6d2cd6ae24480c8ec71b89b6e35dd7a3f17d759752e1880df464e90daa62ba96c6f10c7019c2fbe4e33885445ad7c96214b30e319356004bcc3721b1ab2e952f1c02bdf6e60d9d412f8b049042e54382c6b27d97c0cb398e871f1092de545261a4292b33fa0adffff762ee30fa855c1d99ded6c859c8736866b2c2fc27a9fa581e58e3694cf985af689470aae03c0b7266f7ccc781f2fd391102f4e1b4b7cb7bae8001b403ed2a9a914244f4c1dc4659048123b76895fe6ac95af7599d5eb024ff80fa137fb610304fa26f9ee5316fa02ded2e6c5814194721952460b62bfceff3a3b68c49f8ab3e999196cc3122e9f796ed1ad4dd218fb79553bdcd722dfaf2c8d230a05795361cdbd954a1c456f6a877da0abedb0b5f39a6bc6d38935eaf16cb770835e5f0829955b4cc0b5c7becd6539abe6cdebaf605d6581f4df06476483c0531fccbd24da096ed6e61d87e3b1010b6f7aab01c16431fc18c52cb3db7d0a550f36245aa78babf89592b1e7a1afe113621c8dcf9978cfee7db93539cb40f3f080ea4f0f4a8b9c5d3b53ccbbab189b7251f75a90f175f0502615687870b0396f5aa8af59aadbedb861c8387dfca48b63e75b0b4667de906b637a47a8dc812b99bf12e238ddba490b3528434ec7e3de63cc2fb25fd2cad49dc46df3d4526d7e1fb8a52e36c3fb72e074d4f853ed26a9eae39720f5f9f73054dc253515e2eac0e688bd8cca2f76c55fb44f9858a013edbd55509f9ec940b59170b3bd17262cbf72e811ebe6dab4527aed9ab1aeae32dea4bf5756e6c31265f59930b3a08a97b6783cc9562e85a917d5b711fd87fde5f679a11b66d0bf1de82c199bd337647c4c2f34be93ab6830bf50085ea439abcae35e69deebd61fa4f77d2f3c911d0e195b4c584ef5c2ab1ab33afb71c7e00bfa6bd0936e0d5aa971d672845236ce9371865c84438a0d82feb443a0d52995f0459b4c41bc7c9efc6557fa1cd0fa0ddab0fc9344be15c830a5723d78f48b7fabb061aa78a24168824f9d3e3e3ea1ccc338f11c77e2c5b0a455635dedf9edf67dc48b51456a392bf7b56ba9250140c278db01d1de600f55cd25f4e6ddbe773bc0811f31c390e1f1dd727fe93db47af463d25f47366105d5e26396066a1955ef9971462e28bcde991f81347"}, - {"000000000000000000000000000000000000000000000000000000000000002b", "0009204c89477d93d9962067dcfb49203d1be68b85404afd76bbede261ee51158cb3f8b775770cecfa160fa0aee9052005ddac9931eb1f5b084d17c42e24ce10d131c68a0618e152f323fa4c49bd56420132231b02389d7a231ea7bf68d6a077581cc6914b6e2df34c3bdad5f7afeadd5b9daafa1bf366c6e34c5d1e1f1b0ef9aa63b74fea85d969019c8529a8cd3d2d11d8f5145c22322aa406039d2f514ff15d61bb25b43cfc880a5c6d3f960ba6848cd334c2804a8666e2803b61db11ee2520ea060c672476c50851318f36ba737dafbe0deb4cd75f0e9b1ea94a06982db73139e33b5e64e65b3cf347d55f49497d454610c13b6e99d2c0f236830f2c7665e8863c75a145b4396074685eda645aa8a012d5c5166771a29bfe3d030abd18d24d1a7b5faa4d1135445a52ed2b778246145df7e24126216c3ff7f62a00c522b40f7570901f94fe28c272c25f8e1f525f03979a68f4cd87b926d3531a55507bea128ed9e43c0b986313db60f7816fb0c548786e51dd89dab41b931bc61ec879c893f3e65e784ca46b640b78215d9ea2569dfb85eae33f37f5e3256fe7745b5eb9fcf90f4b07d527c2337c9b57fa6ca4304027f8426859571827391dfe145a7a883bf57ba3db594977e98482dc17501ad1256f21477c3e7f52d85417f31d72a5f398785934637ae165218df5d72d24e242fcb4ceb68c778aeb083b707adea5956da4bd0282e7c4a883a03a5d9c7c1f60ed36d855b366c81c024733e4b0854ef3ecd3630e90a9d81b331d8b9f6b13a52c41d61301a55b256153d5d47dfcd5f7a6ed56c7745d69156ed9c21d3ad81705ce161d942216cc8ab20916d965d9c023f5c62434f604dea694bb76fcd775562b6c0acd851dd3093818429da2874fb47d8f7fe9cc6ff20ba31d9a3b67a12e34134bd1a7e7c9f421f36d3f4f593deedbdad8f003ea2cd994d241a0f65061f1cffa3a83289c7b2ef90f911d58b91828bcf0a60570273b1e2182e8f03bfe18170fee6fccaf00ed77b494b0d8d29252d7b750e129520735820a6e0b148fbb5ce6fc894f75ea9f894e06db7cd6de4e6bddad06c27c9ef2c2f948a12f647e4ec9b49f6d2884378e0d1595ece7debaaa91955fd02a0676648da8b3b963ca646e8be98435a15672cf963e0f3bfbb6137b26efa097c14575fe8a0fbb1e6ab4089cf5e30d1d76314fb033748eeca1da11de11e8620b71288b2a2b88a5fe5e122258c1c429664edb691d29fa2f3928df9bd37da6736b6cf3db528ad7dfad353d16343549949bb7a9e4f46538d27f3a2378fec85b08ccabdc205e828d3376028c46a9fec6a3cbbda5b23026c1a39b998f67e952b5a6ad3e95aa149757e56b0f123171300a2b93a7b8c3f990d394cf9af11e58c231a3ea3b60cf4c757eadf765126ed11ad107be304404c3d3cca4664c4338dc623ba633f44cbe3d33decf073da4f1e52d93c7ad49d43f4b5339be1e4a7b26511645066bdad587c2f516f38ce7b16a15a74c8e7ebb313e64f630966a48d769b68ab8e860535a645efc6f0507a7e10160d22f25a4470a28fccf4af6bd5e93a518bc44bb370c208c9dcd67b4f1717ef62bb238ad171363e2f59a854ff6923723243541405b1a85daf90830bba68aeb9a9131159d468d335660e6962e973eb409b2f602abd2a17df76f42e29e759262d1eed8f7d62abe170234e12e07e095d49363628cc5788e353d020f40d210ecf6b6c5d6c98234c27fbfd9a62b3cb31c25259aa35e91789b14d2159484dc869259ecd5f6d80bde69799b897ee6a52f64b221e19a1344ba5c1dbe2ed95ad3e9124eb0a2e684b8a4fad7f1eb8c75b6d411671d2cb1a1985d1944913bc6fe47220ab2740f0144be1e7369913dd309dac63959f239afeb60dfbb05"}, - {"000000000000000000000000000000000000000000000000000000000000001e", "001fe03e06ec6f9bdc9d94d1bb59c48b25609f5bc1181933b89d06aa77a36564b47936922e9d7e3d3b01010d6506b10da1e1315f22746160943a21c55d310c5046937c88d86ac7357255b126e3ced3c3affec02f1cc7c0ed2ea8ce51eca353cab9a1c3960182f3b9cd32eded346596e08308c2c672febc67266be6f811db2a0b7e7934187efdfa90c437a9a44bc5e823bea50e3777e52890a60c9d9bf14b9322fe4a979e2d1e3ca3084c9b01c2613647430516e099d03dc7640c5dd5d65890d7ad48d77a80f2c177ec43c2e56bba315e9a243d244a9f1aa7da716612eb487b5ef9e7becffe15e5412f0f3a0b9c23c3eb76143df4ee5b45c1811072b309b31f622e476bfde0c4b6b1fee9474dcdbbb16b0953016b94e856c1b7001e966121b9d29a7f1c542b8e199b7c692f5fd5c3d86bc29000ce99cea04bfb8178247d2e4027e2ca171c1822daf198a78233115e7bb8002e19a4b35e44053a9c41c65835970e2066d23ccd1b5cff8bf5f6dd91f00327f8fe5f6502fb94bb315b31c0b425c9147c45de60f521134f7a697c217d528363b8dfd88bf54a97ee62b9e7d0e38402b8d07c671b034ce9c7978178ef27b6e0532cb28b00836a0d0afb1dc51467e3eb837de9d12a10baed38d2f2569986aa23f8abbd1de4af0f33f33752f0439015f2ff35354a2f5315e31e371527e6e3871e9961a469dee292f87900f020d73f8f6be5e9c62282f031b833875d9c78ba03ebdcfab92315bf789924185b73336113fa7d78c0022b3d0e5d02a071f83345046e5a308a88b39f09aa429ab7534d64ec9b791244e18edbe052b08258c82301683659cb9f400fd5d7d2818367b46d94ec5ed7090884dc421459b8694107d512654f8c5f6be79fafe011f1e5b95df47a5dd58eb5d533eec925fc20d2d8042095f29cbb8c1ddd90cf0344b965db0aa490d9731100989efb644c899d4eeeb233aee1794e32d4b8e6f477f2ae9d7beb8177bca55989de72aca2b953773db823bacb506e4e72dfc477fcd7fe716adb46e43c74f128a1fc0a2b4abc84a32e68786d5030bef5531dc1af0d6c33c0c38d30e18ec81288a4613e4d8b29947fce28149d3a3369afd3a24d42eb49d9c1b1db87b8ac0a124639b998d865b13451bacc11ff9ed79b357d1e29237bfa87952ac5b3b51228149c62ec021c6c5845210699a663150be2179ac07557873d55beba5196c8b63678d380291bad095c6f13e50db908f2f9dcb934d60d4edbd28de7fe477c334582053f6c59715d34e42f2f649cf4dace76e8799658349be59a5b2e1159a173135e9b86fc661ca73274c237892350e1e8bcdd783036d18756d5cdc533863c873b737b6fc5f7a2f16c731a3b7b198972707ff6f3e9f7e05de91acb1ebb171029aa55e04e917f5dd8f65413f4ea78952a0fb6e5c402f65083054878b9bb762360e2fd3a7ebb111d578d0f5a2ce7e0e06cc1f884d296b1d10184ac095c234d1493bc03bf09ed19e15e12fd946a53b61ee0581b6f22d57547998d75d31b98b24d1ec325d60d63968e8c0a334c25a1a49f2190040a1177f91cd7b3631e7fd85e89b4cbce2b649b6b76ee9635fb2b37d2009efc3128abde126c655f8de0b8f50a675fdcfdd6607c1e6765776c41819c039fc64c59fcc56810a2fd5999c3eb03b17a2db242f3b75b37342a00f122b67c8c742466057b37ec59031d7cedb6b334c36ae998cd58d2cc740cc2fd49c6c7d78d98b8f4f85635fe2e6a6ed7f1da16db4135cad1d7de9e59f96152fb127e7ade1f8f52173afc29a1464abfeb5ac751e179174dddf9d6f2ef1bb4694071575b37f3ce867666cc478e5aa7160c3633b48383ee104613c2a265c8136e6ab1cec6501e613896aef8854effaaf35f251d743eef5602c154045b"}, - {"0000000000000000000000000000000000000000000000000000000000000027", "00133ccd04947c31668e6400c82c4f813ce7fed7a0066beb20ffb3b349c545b0cf5edc9b709bf82d195a0e490aeebdce000b760982bbc59bc4bd53e00af3832338f9c1bb505f7934acb65539dc193dabd2bd86c10e005b283272b4cfac9098f33cfbf78e76d15f355f107b2553731a48bf8cfd347c814cb2b16f8b8e4a312175d784a924e49f973e5269d842797d6e970f31e336ed4f1f302019b9b8b683abfee38d68ebf672ac7e0536e673c212876d1ed046168cca5f91c7cebd21b9278b75b10a2fd7ab94e983ce92dcc2a95c27cd65d222740ca32e5866b3ff72b39aa27254b131471e4df62ef91c9d238ccd679c2c440d5c3762a92ff611bfde0cd0a9bfdb50f8b1524f00ce634acc5899528d43282c138d9bfecbed7c859a93a705407ec52973fb56201879135d7bc6a633fc72621115fee78d84bb6cf6ae1afb63bc565f5bf9591064831cc343c9363339183b00dbc25c1c9376057c52214653f57c797575b790a5139a3240fd112b996be491c5905395af4dff5e581b0e30e8d1daa569f35ba8397d26f515c275be18fa130fdc9acf114aa15e6b99c68e9dbc8072df55ddfb14051c3054eca2e0f9ff356287306066ba7b7c7bff54072113b8f685c7ca833590b31e88becda028b3baf7055f40f4086bb22573c851af0ab4dc0b6e861f8cf41120cac7d90abe5b762cb2d0ad3c1ce6d6151eef03044cf6e570a452fbeb5e61c18ae0b57da3c115efa10471991fcbcb278f6afd04e0a0b5cb03764adce7a5046da1addea8278bc98f92b2d697c1dd813c77644a240ef55f6049249b02aa23cccf7e74bf660a5cfa760589b733921e9c1d79dd019b0e42ce04f9eead06c0162d0f500b46782f936975827ae230b17680f6f9b013d69416d5dec9efba1545ec093aaa799b52d04ea738ac9aac5b9080ef77bd380351f66306c3b3975b11004445418e60a6151b12c652c7ec80bdaad25ab27d05eb3e6bafb19793f982f4119a6f094dbe23d9b3761219034db697245ae9522574cfe8e6bd60c97b76181a218bb022cc02d19771c3f39fa24c85a4de3059761a58259f88d407b338092506e65c4b1e46d0f61f5b2bf26d215c63a075cf9fc2f41e6521b3b7ce9f705a241f95b2671f35fd50273a8127eb196aa4857f8e5f4ccf52a46b9712c6ba0dc789945ab56f1abf39a9ff0516fc3a3747139898f6e0c0d8bfe2baaec53dba8b1e2053db544d78e945a203391bfd326966d3302755061f4c2424119ff2fd13e2d27c2177c102c5ae49201ca6ba7748bbc481fd09a675d7529f8f63311d916c0a5d37f5db0464f26ce576cd735b60023c5c95a088203fda3814172855ed6433045847e292faee5d739f2a024c9f3e62b511400528d1c473c377aab0be5c9f3a571a33968fe207ed59e687cf6c7ce2d7121e85b906c92fd6d3a2fe833e5d50c97307782d8c8d8e1d570c6af54f6106e3b6f69d353c09ee762b8eb13eb53e221a43686799800765fde610cecd60999307900ba04db51331d8f5287be42689c2a3e583e72a55bce83e0cc4c4ad0c9b79a50ed705437d6a90a1d118b4b1c31a245937b9246b35c81f51f8e272de616821b3977a10a93e68ed5500e15741c220cfa3c30abcf6db874a2bd8945ca2a49283289a5585c0c858fb7a741ffe2f1938e3887d50e5872c09b39569d7bbe9f58d7656b719463dbc310f20e2e03172df745fdbca70a8df60731a465d80e41882f526b691a6ed106bfcf44315faec375455682bddc743af3f55259b63012998691f6fcf19bbd93fdfa51a512f6e3c0bc36b4fd303509af8e41fe1ebc179640e77214427fa76f4a04ab6ecb8fcaa43fb4e7f61994d1de7a4d65a35dcfb2dc6063b756d5db3aff6b17050a3a4d906e77e652b96ccde3ae343"}, - {"0000000000000000000000000000000000000000000000000000000000000009", "0010f226955967c142c9002d59715850725dcf2808045115f4c3cc075ccdaca17a6af31d48e78638df440114a674e5c2d8e6f6dd00d7cd35924769a65c776206f432a74be27a77b54b6148d89a814fb40eff72b51a714604d11cd35977242ac410764752eed8183a8e1b1a131ab4559b05e062b6416dd9d1b9de54bd728f1fdd5e7baa23eb1fb37b837792e6f3721d063588a724203687da5a524bce8543c445ed58ef07da3ea307024a771edbdd1aaba652c47e9325b42559911e97264255d2f99fd1d1c6b1a1b6a3d0512ae9d27733eb230300c87549c75b7c695577ffc74ebf460b09b05a95100f7a270f2569c994f6b2e828d53d3dd6eb50ea94097e851127792ccfdf8983e8a9adb76d0add6a8ff06bb3066a9b369d01cd3067dc54ec8e5e4a157cd91c0c6cab3c4edd3d5afd5e146c77ed6b42f65a78d6872d9d9cd844dac1dbc2b5a72776e2297f3a697be969026ae90292b347c9cc9de3ec4a2f19661387dadf660354ef6c711fd7b12ac9737b1bffd5ece85119171e170584e39020e1178a7d421f8ba1619100ceb17c6120be016702983287b15a7b14dbe510ead7935a694a0a7d2227ca9262c8c38c32e2c09ec096d8b6d9f72f17b1e94736e29d114137540da3fc6f91719e740c2414917f592bc68cfb0e7c2481dd3a484922516a502126b259b9b60be907688ba511dbdfaeed497e0ff8fb12cc31130951af92c998937412d4485abb61d6911e3a8313e66c6dcad7cc1f64d8e32c295ed2565fa3e2155ea65ded9b6245de31d72db063826e459b14e9501bcf141ac8e4b8113f9663997ce2f7995d40effa841eb59d157df7231fe2e161ec6356b368a78ad78ddd1ebec763c27245a3f8aca578f178f985fefdf2d94b285e0cc54d95f6291eec731708ba8e13ce173e9a383c1d421cec5353430010d6be4ac5707382c85d1d310172d6d1fa5507b6ba30da4ca15ef1bf36ea5becb83162f44835977bdfda8604b8ee63b7267ddcf9264c2817231987ee19637a6a0500b032db319f446f1b4e2a2c9de7a93a74b7ebb979e3ade05a5ef5235e5a160266587cab0e0e627b0da41de059c3f10fac15f2182173672e0ff1308bf30193528cf04650f198f80e93063fb1e971bdd541fbe8742681f41fd917cff28f2306684615108cbba3589f93787ec6c52ab3d5fe984603c54db5b3aa60e5d47774fc0fffeffed39d3939872b770f86f80dfde8f13a740a41ef93b21d5adae18f05473e888c6dabe9cc93048dd8ad6b6a3525f209721b4dd498585da3496cb0651cc5cd0d057d3fbc1d8f04c4a71de9521f81e84d69b48ffc9cc6acc8fb0d5a14dc9b16cc32e89bdd91a564dc762a21859476ea020544bc8a1619e3bf2399f19773f5c404bc5ef1ae9b31e3940ae4cfb2834fde27f69ced8c6f32611efe82047fd31cb3867adcc97090b6507298c61cbc36902253431e0512deb6cb6ba6f64a4bf458962e79b561e2075578bd6953bb1a9ff9b360fbc4704da1c4fc40970ccd1f0938c538b4f9b343e2582414c232b1975ce706ba327dfa1c9ed9830258b64d6d5dc68da3774f391c6ddb6245eec1019963a48742eda33233eb7dfbc40dc67c813f5a1e5d482e669637c42d9e580a7eadb65d6ac5ff2f20b755c2cc68625465b6528ce21ecf9c04963078b75f5a956e021cab7cf176d7574f5b961408d416af1b47d879956ff36e064d00965cb35980ce0e045dbadbc9673c5c5b118a233403b16d1d76904836c0c67089d16e06b03548d7477b7e52ab395e94e6137881d733a4ec6fec6037882d7f8b3df878b0ff7f14d39bb32f328647fcdb45baa9642369e43ebe8f75395757bd05550830b859942280fc2a154a9a9887a8519f86cc7da6a7333bb405ad60df05be72ef15ea03"}, - {"000000000000000000000000000000000000000000000000000000000000001e", "001eb0e622138420f2e53421b0db346dc47b9f2e1815583e6ce56768a53ecf55840a2dfcb57015721f3a0168addb6247716d3a84b06a9798a9006ff6af5f5614384a6984893338fa6c35fc207313caa671ddfd300948a1503211f5fdf3e455f7994f0a9f2d195df45f1b9f0260f2a0e6b96c23a50ff4489d7352349e0c82128ff7ffac44d7dab88da2b048e1972193b50f1284329252fbd8d19c63a35ae35542f9af3d45e6ece12c07e113ebc60ca634efd062ee3fd29d2d32a752db4008be47944ed431b9991307d7f57686f600a4b2b05516bdcc8cc6ca919682b7821497ce2b195afeb129af292fc14b6317fbc79be1d3d2a468ba795499cf32ba0b72a223bcc9f7789dc8a4f7d17f05ba2d71bda4ff48ac33a647e772959d483522d3f610be0e0efeb2fa0e848a3564c9ab393a549208f8f99455f00ab554c225b44519de512b0f5ac4237e70309515363cd1ebe3004a6954a86d5725c4d8533ba3b05348d4da53268b3055ab35065ab521183a63f69dade856ea69bc566618de3eab0a1f3127bfe2f3c973d761f55362379c9422a8d2f8e64fe2cfb3f81251a1ddb93938f76a8e9c04d0c2b72b07e3cfc7b674dc1ecc83d74b241c957139bc63d3ba22df354d00e73cbc595ea2550695b7860bfa16037a5ad224d70bf75868c09a82a716fd8bf01660d44ec4d6ca28e11214a8fd431d35af621bc9e002763a8fb552e4c9f56ec1d2e2929ea0fa8f0dfafb176e0775b58a4ed45c12470daeec60afb0d3feaf3c058e1bf9bf03a57938cda0a2fb6dc5ccd4310faa6113ddc5b618d1d0e1e785d301d968af6edbef99158a0642af938a5be0b91bff0983c2dc86076ae89effad0a6639e3b91f0b59b68e141d0c56942e2ac03fabe80bbdb9d8704aa2ca728331ec437a8de70fca38c470402fa7fab59c9993148f2b61f7f43296fcab9ccb69002fc7d67dc4e3fb566730f77ca2ee358f439a373b6073efd689652f31409da68963b5586da4b77bd0f2308b51da0d97c5433afc63196fb8e2c16420980f6062661d7f9aa24d5f2c9db97f0f682f929b73bbd5290aa768af2ec4fc91c9eac2a6246dcb54b2c4b73a7f18206ce84b69fde3c5e0319a41f93b44fdc34b211d18745e275ce4ff77c647c410eec7881246353c64052ad91508420e543b4b06e3c76d450bdd0d7eb2268804c06b54a00fbc0d0f6080a876b2e40e49eebd1fd60840ca1a6e120bbd57a4a23a65e75f38e0635ea7e70588bd2e0f832455f55721dd33b65a5ec212b92bba1cc1fe274091266df368a532434ae5da596d7f9b320d77fd60cc5e06a1aa37e4be005c49dab0b73ad80f33d485f7d3e34cabab23b36056e4b25e64dd7661b9220fdd7286d6270d05b3a4414b6f34723e687fbb182242cd72dd62f795e147125ee9d390d546f0d913d9015b31b0dcc90babb4bdb17fcfd0f71a51287713bd0264d59588df82e35a3f929c1325b00770b51e95e601ab0f6b3a4e20c6df8c14ab2acac062846a7784a004597af1424d5dadd667127e9e1e0a613e0c8b0a171756f2ec6820ae47eebce1d0c324ae32d5f8bd0e481c88fad65661145d2606720e32d0407ea284993e033346928ee6d7c08de89dc484896ac1da3867f8fa3a3ec6bb282da8827792f1d7a95fd3861b5559dbb2b4048495462f0506ff3fb4a29dd5f6a4d273013b6a99257cfb4553387513fb6cb78d643d3c666f9af49927096dbb9b574d3b9f223813738d6c4750f079fe8ec81dbb1c9be5083e23149b26ae9259bd1e61ba7fa3320e4610a4ef44c27735a76a8927d568e34e62bece1631468af478afc549c196c39dadafbd81f78e7036ee1041bef75fd8fa772cf2c80b7264e48731b9fd00425f522d80d719c2e54e677c27a8fc461756333c88ae"}, - {"000000000000000000000000000000000000000000000000000000000000002d", "00acbe964492304d6d1ab0c81275a2e2256bdb89cf2faf56a3cd9a75e2f02664c3a4f152d3316e3eb71b05f6867ce1c77ba37826860481f82939dc33f3b2011066509f440c3769c544d63fe2770342fb255fd16c103e779ce1aa7845672b357d1c2d67779d5fbdf10e3f46f6351b600a41dc333593326dd761ca01ddae0a1d57f4cfc9983787967a13fa17bc121dd3629eade5346de2eb0ceb426de5c314e3d95a50896cabb0ce0b00c6c3f2dd913f212e7576e0ffd94b8e39d17f4d211e3d374e0625235dbdeea5e89c79d046f2fc1961b50443f824c8175522fc80f0c4edf45811177fccbd122e8ede51ddcf40e9a156568141c16d0f70eb5bf90c09ba2a31ef0b72809eef63b1ee5ca001bed3f975160a4caa60939ca37d91f9a1b2a72bd66ee4b69cfa3323074336320ec151e77fd324a46dd29e5c5ed34dbf23ff6dd14c4913f6b47c530f04f6bc54da11392727051033702191cf72e0aa1091e2b4167e0c3336a9673d5762a3196d0d33ef10293b5dd266929458b827790f6467f641e009afe88c2173a2ed498240c7fe0e532edc86dca6a1e441461ba3b5b9bd1025e40dfea57105e3febab491a739154742b61462a942d6579e942709b14abe2788e50c7a255395a83a11dd56801c9c070d67c21fd112bca6b936c63298e77e27844dbda5b423062bb6b80a5618a92d82ed44d83bcde4f0bff8d0060124e0ec2630c9f6b0d563423e82c57eff6d699308f841dcedcd3bd6c2b372052518e1688b4b88376810aba61345574d73968db3962fc229da32fb17d37c311d7a818dd9f4793b4fe486ca710242cdcdfde0560c8d8565c950a0e1d809e105501ca98dec9cb895b117bb549521cb8d756f71a3c165aa1c7d13e2dcd64810226baa2607ff4f704582b4e89c654e227ad1ef4228e72d0020132dc2c5be68b0944ac91633f5dcab6d0230d2d6395b86ef66cb415943ea6e3a2371336f9e38aba787f4671bebcf43a4bf3039b8fdab17ceb9801055e48cf8dc0b68ff287496ba31d77e52bf5d44f726898fc8254abd9f724fd417f13f3bb62c3997a5c302c3541ec98a1aad7668c3171c3b7d7e80199bd5610900bb740b4d195d2b95d757785ef04656c9d30fa60758e8f5fba86a258eadf5a96f5e43767a805bcc12464327e5565b038981acc8076c59887256f97585c6064edc6b1f884d76c63d14b07843a15e18d8b7a70b0d560d8fe064f493567166d10f50eb96060d96eb8c092552def3c48ec967a47351f3456fb0f5fe15912828aebacedb5d5b0510920aee9efaf10304b0d965ff06c3afb6e2551d11fa5df5f58bcd1c99ac5cb1388d2122a3f115917108a343a24875eb1e0aac02dca4bb097daa2706cf7dc97e047233519b4899b284f243dd342f42ce54db65cdd34134e9bdad523998d2f4f9c6036a7afd7f589bb7b9c1d0924ed1c47881c4ca4457079940b70218846786d6a2835a67b7dd859279c2930d5d9ef79a8b5233ada9c2392cbabbc91352f98ab223faf5d8e652d570dcdb06e7ffc0f9e261c55ec50b0dbdaffc400d2ed34c9a58c482653e22c79ebde7bd5dd0f4f7549cc7a9c919864574c8147db83dde3920167a0dc680756667c7ce018c5eba3f0d34ff2fd25923d09c68dd6bfdcf7e716409e1b3cc3d981fb1048f0b4e1dcc73986a77161ce2e7d1e2c9c1f88857144f0b91f50797453ba440d9254ceb530c7620081248db21d3fd8f126d358f7a3d83653aa52925de1e3e135244eb7f3ac91fb751f41f29ad71d99b570c7f5c7a4619029c06fa7a6cc5d6c3b8077ecbcf9b2b613ba2d42d3b8c502350fdaff8db33dcdd526d778f86fd9df0284fb650cb3cd443e715043e99c4fd371fcf1e980e41dcc4e74f209cc9b66287db827a5236246d5c711c"}, - {"0000000000000000000000000000000000000000000000000000000000000057", "000637c5fbebb8518fcf8223cf977bfa2f3df69c47139899882790a8def51d75bf4be563e5af891800394c4b34537266dcd7760b951bc92a505e418b1554de4d0e1d6ab5fc54dbfdd70b928bff1b1ef6231cfca400717f0bf0efb2e3cd57f61cb141ae828a5afcba1405068ca5369768dd027e02041defa8cdf688ff6bd91d57ea60c8cb4b4517bd74b82e390d0d86479ac3d31d894527300ae2fcdc6e140abcfe42e9e94b93107b04518ce8e2429e6672430a55ead4fa9ace28173f6f0ea8cf36cc91becaae033722c966b9d9fa127c496f20630f9e6894d51548c6b51044c4d7897fafec1a6e5458db89a222759df55167dad84454aa89b2d5aa53320ad21189cf49213abebcf56e68ab5792f63cce5535aecde29593486f6dded7d4cf4ccfee7067ded0e0348a2d9b400dd489f60f65a4275aecb335817af32f373775dca93189a5c3d6a9783052017687f1dd1ccc0080b81e125c10c10938d21a9bdb172adaeadbc9c508073deb36177267d17751ae0dec61c9377a9fdb8f05dd64b61b4aaccfd35a25126364d4f60a65dacab432ba726448f2a4b79c0b43db69e7559648b77d21dc045ed414291fe7073378b33ded73ac69d02d3e3ac810d93b1b46c86034ed2d772a6ed0ddef005579160010fd710e774562f53f08a468b2257e521142dff65413c07adb7452b4ed34ad81d63a203075e401fe21ab02fcc373dc88c7cee90cd3060cb4270d29190ef88c204244610b104ea1992b725492694e711acf3653600c213cdfe8cbe47322805488ca7761aa91069b9a331b8ea0e240cc0fcbbf6e847747470a65254e9bed9814e1d355e791bdbcbd38e2aa0e9ef7322312995e152403d99ae6246975268862e0ebf8e9faf64d380e1115d93ab150857a9462f421d90622301edb8c5c97fe209475cf9dcc49aec32ee3303ad1f73d286bec1d0e008f8269082da08b9133b10d87368ed5d120dc87592b7309c372a16cafa632632fcea97525c7765f73391f7a19646bebfebb6db9c4fd4cc4ddf2c7403872e127cb0409857bee95e78448343f7ab8565fd6da30b3035cbededf86f4acaf1f8138ac222756a920d6fff157de860ad32e84d5fc917625e168e1cf043cdfa3c82191bbecb3ebec379230d494e8c59ea1bf1c2fbf3a23a9139831cffb69b61fc4431b31b63334ddfc03cf147eddb56fe455dfa25f16f4a9f58485f19830a6cf15f3a914844679ed139184e9dec6a257a2a81fbb16206033cbbfc913237ab3a61676e8465650aeb53cb5234abdbccb2ee5ff8f031362cf1eb02d2da58e6f671876a9b154e254c77fffa238dd6ded324f16db2acc1e5c65ef4a955657906042ca05a7dd714efa19219a2ea0a22ab74e0adb65218c0bb6f8e6db0b5af9b88e3c1915f29120cafb7b6604952fb8831602017aca0502e01101c62c2af9ac3cb38a8552c0b972ca4fa41b118df5b04c9cbf53496445eaf7f3b8b718d73df4ca03566f505f9939fb3338707f0fd4747cc2b5f7a24d0b766eea5587f877678a410663fad03325199cfb6921e547714a524d0af6de824ec86ed44e8bb4fe8d0b5af693a4e52a149d923408601d5fac96b7531b20d230ca6eef2b9a27dbe88fe33befa5a698f8ee147a8a52b62dcb77e47d4f6a3275d99e56d94dc8fa1ead8102fa5a489c4e85599f13d1a15257bab4d0dd5fc819126b28e06868c8956e7ba22a67b7668d6c066d055e134dd7b1634d53c4c7e581ed6dc18a31180d351fc0328379eb0a6f3141b46918316c72431771e43c2ebd22b5c966689a149719c265c11ae050523b6f5dcadc5e8ebcc26e34aa15e26c45fda6b3d99649829fc49c26b5abbe72cee97b31c693500fa4cbe31c4039195e5052f3ccd46452cdf58226f2904430d9ee3c5f1b23"}, - {"0000000000000000000000000000000000000000000000000000000000000025", "007a540aa14d8833bf8051892ad40db520612ead4228593aa7e614d589a752e42ef35efee2d9d6fc0dc3046d9b6fdc954786e6d484d532e11911c7fdd5a9be0b6d7dbab859c5b5487c26dbcaf26b02e737bebdac074c92b4c1d19fdb384cd0e8279c0dee86f4b60cda0fc26fdcdb6c2cfb87c3d1cb71c63a6b475eff0e4f0abd12bde7667e0bad8341f72ac1b2c658c7f598cc1fe703fffba5478dfa69267f7ec828b9ab5a713246056be55562e3470f5d3f6110bef18e80c50ff1dd5f1884d67f8ec6a5d305f84a33987320befe8bb91d9c0977d58e078b1a02f8f1a0f81c337cfc4d43ded9d75905a505d2e75b6d65dab59d1b42986eae9076d5b10f8194322e9ac6938245b4e5554468cb6f677c186a1aefe344e52c6c4fc736e2d49c3ce454d7ea3fc97321be87402d61934d8db1f56352f6e915f9a11c18f5441954102f97f609439cc84c13f65a961e0538608600d149bab3e07403d436f075e599229e33981c90e50c566fb02bb0476dbddf320ef7e244ed0df6f45c811233a2f7abf9b4bdee95f18c28711b707aae1788b83f1ab2bcf8f032d5942a26267a417201974179894d0258f5122b43980a961023939adad870ffc17b7005372524f58017a3398e650407f2e13ca1343719f4ff068cb31d0c5ea09364d7f14ef9695af1aaf8fb2b642e7169e61c6d4287b6a46469d1283f0a0e9ffcdeae0249a9ef81409e424b7ff0473f8be25673635cf8770fd402db0ad999fd3c1403deeef60dc9450a3272ad0be75bd70d8fa45f43b524bdc3f29059a9de3793331cf643179125640180fdb5fb56d630822cde7d961e1037edac9c0f3d71e7757187bce52d695728bfe4533486075b4add9ad57d0e84e43a7e49d99cadf0d1242f386d7a332ca3b16dd25434b24698119b8b37c31a404162806094598b17fe08d7e252644f92bf3cb32000a64b62b31886fce743eadeb1f9aa66ea42bc06632004cb94a06c8673bd6e947d9fe411ed259eca504d2e6a1e66fe63da61f88806a9285474daa0e9bd8db45bc657b6a2b8c485cd5caa6ffc7f821779e7be55580127fc31460e48ff44fd91d3eab2aeb92e90eb1a291531a4a25329869986b3f20bcd1f33ea0f757606270967e93843f3e231f3ebb1bd09bd45b5bda39dc8070e233c4de86ecc1ba49ce1a30f52fbbe79849be96002821213521cfd4d61aee3cedec9ed553adc0e4b633482056aa9a2989d8391f420ab25d2516a8d75be092ed8a4644098f3d3167d4514706c6a967d47986ffe578767b5b6205677d91ff720583cd1d5ca5c9ed85f0d95107846c5d4fb790d01cc31f3cdd3e52fff8e8d173d7f417cd3f348e67805fd4cf89a27150d98f59633845aa17420e719eb3a437cc52c049a65681362483bb17e8a48947659e81bf5bcaac527b58895b8b09300bb2dece41de079ebddc7ba4344d17a1065ff880c0b338b0e8ace24e298e1d29f0538ef40d28ff5b4f30452f3ae421272e5c5c2a49ed2cc6f71a51b996bf71f0c8335ad6b6935b46ad2c2979d7910b190dd1b1b0210169bae98f305f01f750f19f3fc9206885af1bb189b45eec4c75fa7ff0815be9672a07f7c5e9dfe0404c0c5a13da14157e24002428b42cdc09d09ee947325e26262776c0d19760f53ddfebb163755b15d94d200def7878b02b7297bfb409350ccc8e159722bd7d51704c3fc196adec9d5a052ee016c3c921f67d3b34812ff01d70fab4b83e2d0a194d271d91ebf44b92b2b1f76f63f21e56199a45162b2b9c66bed024a8d2161019d086a29063a65c9e8b23a793989e9df19ba432b0bbf85c96e09c5ab151450fade1cd224da381742112ddd39eff7691cb35a3695372fbb926572cef1c59d45787d53e8262627dd7a25ac3f7805d9efdab849e3"}, - {"0000000000000000000000000000000000000000000000000000000000000032", "0036f80cc26a7bc15ca764349657c3e933731eebde040452e7acc6f0eaa3e590b62106788e232eb2c906046c010a3517a2e9bea22451f7af5b9b4bc1bc2c8140934f9144d6ee5fe55ce658f139022789913cae9d0063361bcaa60acfb12f132a9a74f0f8f401b5fe702412547f9e975712fe6c92e05bf6e1f10acea896ba09e3defdaf84b578ebde70f6df986c5c8d45b8ee701d2f3e8f4ccfdd6f27ba84927259db4b4c36bfbe2e006fcd893f96da9f5d10c07c8ddc7a8449db4f410b225fa2cc53d50c38d4d6451b2d528c79a5eedc687f00962d0cb54eef95599e7172cc24465ed13c1fc4b535a9bb3702bb1e9ddcf9e3def472699118b3eb01f90aa6af7d381070a4ee8b462d6cfcfdd595d0798645116dfd380d057f8deb359393ca713cbd003df3633f0b5e167971aa36c17b8824bd9540a41d815238062e13f4a15e3cb4709ff650c205437a26714b07eaa52b01968c4814e484d37a0882d02e401da1099ad7035e7907b4bee2a100b784eea909c2fa33b690bc97822c034cfb65ac90b6856533bc558be68b7b3f1ebb8c0223d592facc6fa12dcd00c2dc3864fd35b81a7343b405bbbe02edbc446fecc5c94875d52fdb41779b6a4f2c7fdb39aa9b33a17133050f06f6efc9c03d3975431438b973f0ad2e17cdcb619c9bb5687cf381ea123547c3ae7b2ea9e1fbad17a60e71e37af26e7f5aa19809f297ffed1fe3b3736a4444604cc34d5b6b9b04a925e3fa87d85477cd51d5c34bd353f132bac659c2101e0152265fafab31f5bb3531cbe76afe5bae1e1afe28303fc170703e13fcc38378c743ce520261155bfd0a70e15928abcd29d080e25d64f2ea8ab7b9b8b8806162756937b9ab19d7ff8917834ba0ffa2e8ddf4a2155c39ba5af69841da3281eca45383e2a01378a842279c96951ed69bf0d310b3ba44f97755447edce208005eedd1fbf464b9e24c02bdd9d8e6c9c6c09d6b191cba2730f55920ffa624965bd2c9f1d2330b3bf939187f7777ee20c5e79b5293589b2f6ce151de35f8f4426c966274de638f46cce6c0eef69f9aa0a4b5152302b29a13f422eb7d9e6c945a16e629b9b4a0fc4da23827de04fd92c1d2a43d776eaed61a3e52969a4c77044d793e5c1c65857092ca0e7cd0be3b752a5ec24409fdbae03c46826e4761563779390b360f58b5fd24022892a4acc54ca1b6bdc2c3f6cb75be71e43e2d7d05583bc6b6098e210b6f763883626b86fe9b59438f049f140e165883f13001b40a45ca16d910204fc3b636a87a9d5d4fb79379c4237dbd498a8d7c9ed656cf088351311d4dd7b48860e37b085f3565ba825d86d018ad9fb8018c0485c29098e2b3df19e656c51fefd72b8245cd34129db2b9a5a368dc9c2641d2163c07ee3fdf7a1962e71933d0c11525cfadbd3a95cf16713102a901219017a6a3c7925524482f4c99dec30f558049bedc58759712dcce12f522cbac98f9884856b3b307c1ccebd8973b1b926bd0e31d34ea80f892ba301320a5b5eec3cb76bb638354bd3751e0ad5edcf01fb50e377d64a6d63773996291ad004124093953db563c2171b3b4f48baccf5f38639799669cb5a7d30dcb041b6f0ad54fe80789ccfd124134321ca3da37bf2dcf23b03aac6d515808db9616fbb7ead7ab7571dc3f0e044e2968ebd6bb5d8023945c94e6f5d2e60cd75e551d0dd57aa38b1587815ff386a7e27fd14e801c32d31a77c8e30777d019f45f559261774c896c06b68c411f676e478e8caf975ebb246b7d2d36c6b5eddb06cf0897d95b00c848aba3dc251e174acf76aa4657ab5e3f54ac7c72d359651d4a3546d6ab92bd5a6434fbc20f3b4aa6d214412f0d1f516972b52c8aa18ad95ae92649cef6b525040f322ee3edef49e55dc8b0d14012"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "0054c00bc1369887c24b41584632bd4b2b931fb2cf02a211f6b20f8aade79911b47a420e04cf3c07a72a0e633bcf339b064100d9eca122ed22eb31375993b64126b3a61468eb0978a01681abc4fc91cbb8701ed701a7d709be951096c132019fd039cdbe849697dd2951d81b6fb9d839895697c548323521226ea959c8ac11847c979fc9050cec14d14a195c9265257239f1be1240eb23cbb32c77c581c66581c94bc1bf57f0f7e60873e47048086daf483705ba0e483cc2939c9dc5595c3e569b54dec52baee386473f36b2a2b4bcb99a3b145a61afc3a08dbf17240161765b46229bf79dc8ef41728cee77dbfcfd2e2ba5662d37a81a5d9f189ce7087b21b4430da9d90f43f188594d704df4d3b1062d26d9f33ef5af0985ffb845a4c148adadddc074e1bd0d0e6ed6c6e6054d85f61474c4c957bdd386f00ae46c61ac6ffa9b41b2f1c98ae784d9277f66117c82d9016d46a7360416dca3dfc15a1f4ff32e39a7db943037c6cd932f8f5448b7bcc424dab70e4e197574abb70bbf1d9df984ed91e57df6ae57402447730ffe643d2c88d384e468e4a998d9a4185bdef5ba5517b9b044036f76896183ebe6ece3508b67e3e6e13c994c387c249e471dfb911fc3690ee27c6e201c166e0abcaf6d05ea6ee36ec8f392c13ac5509b3de802e0f5192da11acc7f6e07111db8e7b9829dc64f81add8dd10c946019c177cbc099cfcf01c8228c920722d24e378524140218c1dbf20ee534a4cb55790bed9ba39dcdf782c1ce81b5151a3b3377ec903a3bf3f87d22294388d613af68e62e51a9a96ddcb4b31bf5b35d78250bf83220e1fa19f74acfa19b6e1552a93c6e20557011144011195cbd3cd21323df3b4a3697d569c9901ff0fb0371d788c187c113958ee84a2a1da7042cb452d7c748227986c1699eefd15ef9176e849c3354e5b23bf50f90105df3c25e562c7304bfa65a4fcb20f70dfbf27722a3bd6e1ce5454f2e1ef76ac3c3f1e3b521d7d753b07770681e5705669d4089680957133ab5353df6b1712718a22f3a4be25dd72d17647dc8c057e7f7fd5b502746a91ae1c2ca7a17b673f37db8cae8ceaf9c5a31e6373df8c28610ffc594285f8db1fcca2669e96770c08294cf425c93ffac2713b0dad06529b22de94c11df82e6c9fd99a9f84aee257b09c3e8dc28fd14f18049653d1ae0c32d8773f51c9a6104704a63606054809c60d5f4dcdc4847bba6222137d25049741efcbea0e6ae5bbf5ca25e3a70ca1ca89d4b3c4b500314bb830bc7dc4e91252954da71437987b80fe19109766150af8c7b8866909b58b9f73b25c6e05298f1fecd1d1170f7697ba1947c746ac64b502526601be33b4d3d90dea98a9e2d00da17440a674584b9d39a2f39e30761714d34ffe08e909a452823d30ec87e5124f1ac18902e6b4d3c2aab659ce61b50551408322847bfe373103976c43897d8ab1fbd7f2816fd78a3543090a8f40082b80f8edda7bc53ddbd1f7f9d8176144905cc244120cb3fe929add8cde70018d147b6b0b0106dc76fd0a792b123da6bf1fc771c1560c66a1be7767595ced0bec2698940843f71896f132684ca50d968ef001af15eb49cd3eb39b49c89507a55fefe78aa9fabc77d64ad345222b6181cd484ab5e164fc5102349ab59ad008aab68fdddd3a65d06aa51f38af735746207e2e991ba7bd74dca9b2197f3d85e961ca6e2b24db7e27400e91e905e946bd7ac690f11d57b8d2f96e06d9ba4b65108762ef1c0dff0ac9d73f9c712682df3e78e392200b5bd1864853b673fea352fb7964799c3b9e62ec3c396eb32529c8bbf051846b15e2fcfb34ef9c4d7a484cef79662194f58165ed17d1f503d365b91f6d3d52a374d5eca8958fccef2645e1e5aa1dc46b7b93e4"}, - {"000000000000000000000000000000000000000000000000000000000000000a", "00319534b636a015cdadb61090fb1b85c2fb17df2202a5f7926d42498538adb111aec37d167aeebdc1c20552545fa20e7eea74e5e363a8d57c0d109e3dac472e8463eff68c24333b7e94118bf38c55bc781174bb0d85fc3294d0c98cf45822d000b8999ce0072cc8eb18ceef219e474f4c7a8cb41aab41cab112230bc81f0e96ad8c76ac639d9635a3efe2a4721f39c69cf54d13be964715b042b3aab4a1fbadbe20f30719b97f5400d98d887ed0dfc7d07b362bb47a31324cbb7bd92214719437dc6487b1534291b5efdb6b94acdbd08b1015e4c115f7dc44790303b2007dd2109da8a44fd60a19b1bae099900a217ba1a628a4427e16b76f7b34ca0567c7f427f3ac03ed7c8688cfb57675df6c34cf0f2a63ccd2506a4d8bbe7615d45ce410825b80fb39e108d63fe6d6f3af91a880844ba0da0355ecc533d4e4231c9ba6a76c74d386041238686b0315b3e253b21a00e79224aba907a3e7012577b5fd70b71111dad9e416791da3b8676fb1d5fcd42df4397ad11c03f42d041a65577d528710973c7b142fe422151932aafb11551ffb2ebc39205e031e93339871dc82e1ae64982825050d6b62f684a1e3ff6d32f1e5e6ff4d7260afea3307524de9aa04221d28bd027ef9e81229390d6c9cdf07a68abb6a6c6f49f898f28272aed11a645916d3e513e9c9463f53ab70d09143ef31fbf8e6eca3787c7e03988cbdbf60d9ad581331869fa68ca2ba23b7b38c0ff60bddf714d68d276dc90bbdcc06878abe3ef15f0efc6a7ca99e96beffb8432685c31e8d53881fcb911a7b5d8af6dd2478f83de292b8219b9acf6a1d863505dc46ad4a717dadfe74d159b39836b14c50afeb2e08ddee9cceb4a05fe0a663bc97ddce2e292775ba7b1bde7a5fc20e75952d236230eedd3e0527d7bc8b3078ef05fea0292be16f505895e47020623216dfc2fe01e614a9ffcd1fbe7209217e171b28186a3f5a0b6339ffac8a0068bc174cb6b575c948e141e758ba4ea904f7656c87eecd51b8a0b293257ceccad0c956e885329992fff051a8ccedffc3a148d3e7053a127ee890029dd56ff1815ddcafdca323d0d150d7379599f4e762d5651d9d2bbc3bbdcb89ead570d37bf06f9f96bd0b9526e1a046c9db636dc6cf7c5a86a9ed0b53e543376f0ac7a2af97a18a268390c2b548bddd496fea370692832ef11b10a7363eb0929f749e195dab1715310d37e2e4c612207c940a01b1f6615b3ef3291bac9010039ea3c82034fb065bf544876694ee0e309868731c619ce15f96eb6de9add1d991f6d492e2f89da1fe09bfd2bde9b80123dd78b312322c6888da53f1fb780d84f2caad9119a5fb23220294b895eb37d8de5b3a104b7b6ec5d37c155eab83a10b1ee4418be2751370173e2145dfcb11345d60719b1f44e651f3b23bc644057852b7d3abd113fe8a21d0f1279495dceefec431111b6441dfe76def65a5c1edd31dff855547fa9c8d1575957cc68ac1f0de36f393c0f1d0939f223dddd02b424764581bf94d82a1e374dd9fa0961f397ab2f0120ba5a8c94a3738ad2222687e49c0d5131036cefd58dc26e9a5fa4f5bf44e27758ed0a98a4b12ddbddc31c586372cdb072140f097bf1ec473ef3183fa86c2481444477e926ea5c87374ae41c6d7a33c43dd2885059b0fc5cc3016639127a101e5476d57a269ffa7723020b419a61e44d5c795b544c53de52772693fb0e014b459b13c904174969fa427f740e0091e213cf024186b291421cbf0d8e0e515b7d1bb7b2a44ceb743da1c47ecec2b5742375316422fd7c1142c9786b79c451d7d41a646389ee7e8080331266d7c80f751d3ea1c205fe5e1348aaf43c556e2c5d758de9599f2fb959a359412cbc4616b17421f4869c2d9c29ac0e518b45d"}, - {"0000000000000000000000000000000000000000000000000000000000000009", "001ec01c9e8d8f8dfdb3327a2779f3e53fe617539b20f73f37b5a3c049ea0f02f738e644537655fe19f711db5c5206103df2f1a8c5a9486f1e9183550fff3948a486d305149b33646efbf820e3a9deffdc39f4b30e74e18cdd9c464f858032edcde053b51630b661e817cc05d58f54b687a58211d6546bbe4ec7f65c29d50fdf947075044a607dc827621e54339e63d95ca4a21779ee5a30f1043b8d9411cce8ff8bf0bcb09e648d034ddbffb2d056510f9ee0ba7222e584aa1aa68e7a23d04f5128d6a7d6fdda6298065b6dfa8bfb797904137b1528055eb253b14c642f2aaf815b32bb79c21a1d6b25127d694e235545c1eb2217d22af6b13ffa22062dd66d83991b3f638223bec6496b530c247b12ce21ddfcdae54f01e9e9a18352bdd1cd0e982ade40091d5ae2b86d1a52a7fddc9a246d6d2dc6e3355725023111f4cc9a8ed14105f84691f2555325f50cd2f6a8011dff2bfd7d4757f7d1c59382f6e00db9c6b18b5f164183fd5c9eaee5fbed834fe96ff3d21ce57e0f7f0334f616acc197274c9f8ccc80e868eb8f0b7c98d220dbc5378a941611e00fc39f1d40da2e2d157fdf130284b7631f8f0aa9c33caa737b61afbb6ab01eb98028b222d373f5fbc1dd29c3c58f1ed09ee26d9dd1880c4cb7187d616e255ad3d3e6da34db3dc6221ffd711a061a50ed945b9b5674b49887e62e1deb6413365008ccd45a8705e7a6c0722b02aaf805aee092bf4a74331d8f1a284da083aa3063ab98b7effdefd85cc1f71522b736948647dc3982b428193679dd7e997fc15e20c0f399b88a64c1e38d84ba42ecf2563d9c5330c011c70cb9bad9214d1499b221cd3e9e8cc49eedeac512b4809aa186c77472a715c01cfe1d1df6abfe344d2b0c4bfc596f2317fc062b2114de5d53a0f1bf8a502cdda460691dfa0766d1242137a70e899a68ce5e0001289d0fdc1ac324e0d6a114412b836609303999a20d75f7b0590368b8f4e425bc6c755a59ad297eaef90a9b820c0119dfc922e6265bc46cbf01b36250403515e3abe279d0a58cd9a904885bd404523ac8189241025967d214c5159da5b617a915df6f7df82ed56d270ed6776882688a0b9d15363c8de95ee69ed15f382b355d2ac561193f76ca66644fac592e71f13e9645cf3ac916fc2b93e724b79903e95462c1c9a0d71625ac0743fa9b841d4dfb3e6f263b9d5af2d6fbac5aed763cd42fd0ae1c67a17d2236e427bce456140a3984b01cd123fbf8dbc58ba6d3b5e447624c45bbf85271b72f0e526b40b15473c0bfd38b73cf5a1af1663bc458159d72215a383675f7a1f78b9c4f39a61c63f9f8513ad61f1a03184b4fb015989ce6d0b1c3886fbda6e039e62a53cb9d32d5fd5fb417a1d9a609e89879a6bb49cd94c3c5da9def0335b676166c3e91ab8d531335023da67faf041d03685b16a22ec11d89fb8e1c769d0ae3f9f840102b0bd8180458f07695c2450236779e02f3dc239e5fc2fb78f3426f2672240d748a35cb71058784ccf2206a41cb1a53687ff4bfe0ef04735df50ab3a236148588d2e22d73da3543ce5e02a3d26f2e19811b03d70ec640891759c3cad8f29ace6efa37c10fc05d175192b867f704f8e4acd239eee33939f6a915e17f7a03d21bef507816808774d86b21031a5a790de7f8ab435d78efc8322458a54de729587fd4511540fee690151793d2fd27e6e6637b11fa275b18977a20ab9d298eebd6dfa331e3993b4fd9635985df6f01245ea3adad0ad1d105d5532c97ea148dacc18f4a150e687720e44fcbb8aeaa5782b3d463b2175ed5995222904d0e61153d59c4acb8078dccf9837ab67e904e2b9a24361559a755ef4613436ffbb97d045392de212ccc1c8fb98fec150ee6f34f437bc81dc173706b25"}, - {"0000000000000000000000000000000000000000000000000000000000000021", "008957739f8368032503c0c0d8ceba403c884f47fd376c428a8ab09eaf8a72c60d0ee78f05a8cf7bc3f008c016a5f546919c569b15b385d19c49adf1f4878517cfd0e3f99223e96d703ba4d8e1cbf730a8dc71f516a704b768aadd07e52cb3c23cb0aabee6cbdf0415240ad311c38e84af43372788f75f103b4e7e1c911a48486cd1251bbbc3af4977ba00cf99023c3d1e3d2851bed2a4b6ab36b9b3ece83b49dfbb0654781a1d0403a3a11c491099c3b4c19057acec96a44e3fd2d3c33790dc7269a269e736db63be4cdfcb9755a1bd4cb116e3e6880655feb7378d22f36067624d71228ca3892702ba0a174ca74f26e9a7e46ce3f71669dd1c49870e538f00bc0daa21aca404f1f033e9b548101859b11cf464816a104f18e378823efb77b78210201dda222430dde4b5e19d9d169a152d4b745f01e1349604784b6de315229b2397747c851362b6966d637b332cab0250aff2b3cf629bbf014470efb7e571928d783ea92135190ace9068f33a56e21678457e316b106cd3860969edcb32462ea3dd40b4b88a763c8d6cf21d0bda14ac064913cfaf77a699c207fa38c42b89a03e5619037471ae7161ce93928310a74ed8323c837fd78cc11da101da5ba4e53f3a29b2c741589f1fac757f68680d684d2c586f9fe79d31b453f94354bdb7bffe54c417431e8d5ca6e61b85a6f4bf7c3b17b274d2b45acf03c8eeea9064d773884767040072f60634121aa76227b1d23a880ee22739cda293c47df89a8ff2f8fdd2102e2a2247767b05e1b651e8ca4a6361867ed561402183dde011da3f839483b62753ec456e177db6131b0d5913d18855634380e9c21a6445bcdd078b6bb87a1f61167fa118613d4172a264c9e0550665f3b476020eb8979819da4641a5de04703edfe03e18ab70c8b91712047f23980e3bbf51718c83f7afa8c73d1b7d72008cd6f437cdb99c8fadb4c52bbfef22cfe3fc78b71f38e70b5e4e6eac74e3abdab4fe2d331c19fbce7d30f146f168641659377c074758da263a547d1ef00d3ea11fcbcf294375fbbdd4c2945fabfa935bbb38ee03dd27b42a20ab5d14f2e131724fa2504ea991cc5340c3d44896d1dde96bc514abaca78df313173fdee006448ac3b4f38c67e1dc23b8ab362fddec0bdf27920969feaa81c72886f26d814535ba991a8a36b6105f02947556cf860c6c6a89f290622ed0032f99da9d7a10a8edc35c8a3dedbfc0344faa6de4554607d507622dabf2c6265abbd165f4b32e10f630f9e42e3253643f2655f4a018dd44f06ed41720274e756c45b25d06075432ed81100831b7a2d340ffa7c1fa78a09556970f558217da152f2d4423e1ae11c1eefa41273ddd3616184d4d4e9edc8fd10a046725da47f5b90a91a1643d614e7659529bc0d146d3f58c463895307d8ded190287cfc86b6eecd3818924d4e265b3155592ede39c4d6a2b0528a12569f39d4917ead726ea630afbdfda0c5c6ff529c32c6a7217a4399e5fc2b9a6a277f3441d0d4c7165505460892472d7bac66b61dada3da202066343d8ea053175b39de0b915fe05851bbf6c8c0c0e556601bb8d72614960d313d52e174e785cb4103a080ca928dba68bfd6ddee747c4be658eabd9f89f081841aa6d58b1ab819e77e8ee95e07da2af345e4104060c764b6eec95b3e073626a62962e022eff3c11dd2219c1ce3bcbb84b8fe3393f3ede91db3fecbca1ea0de806f7a3164bb922c212e32fecb692aa133639352325a73b13519bc49db9843b1af0c28113ff96ba9a0bef6fd8efb3bee1d3d3e2ac3b9c173e429653870e7e7f2de46d6611b1f88598c6b4d6714701ca986e6613fef55e98e691c9bca981c0844eb0edd6b8988b7c30cd3d7d63d1348792ae26cfb46f7c9b1300f8a197"}, - {"0000000000000000000000000000000000000000000000000000000000000032", "0048e4bdc5d95774d18d003d1482a2d0a53ac891451188363db21ee1adbefdd77457596a26d8a9d9ca740757e0bde6e06361211ef1f981e0e8b61931187d10349d99c1bdde2535d2550432e16bbb1336bc3c537d11ae58c0202e2911a862d1cddadc9b4e3f535df54423c573be55683b2fef4f13ec02fe73299f665941851311feae2f05b763d19ff7c785e58fd6a3881c53245e560d3eebefafc3cce4a5f24b4c333d83b27e4b9a010dd5c5d1e616fbdc2e83e5846cccea3e1e7b9ac0046f3cd77ae86d37809a2240f5b6086229fb94bfee0c82e7e6bba56b9f94e6b29c937a8f855a7b761ff24f32ecab04af5e257dbc55f4096084b1b0803639010169aa781d060aa593dce380d65c1106ec9b9bebe04b669f4c28ea07555dd3360d0cc6325a81bb9f40bb0eb1d993a4cd9a650407b1a3c4609c0167e3995e501af147c7dd60016fc83b744e47459e41cfe63efba406f7663204e7c72db87431b9df4ec1a0c50307d1681193f76a6213432cfe59c16d1d10f4bd655d8dba0533d11ed68fb45585c260878bb1d5a5aeb006df0a0e7a85ec79e1e984bbe5325a3f69ee418b02983e341f139da63c0cc5647a7b0ae522a5d82b1ddb6312dbf02e0d0a9e01cbe986a47e3318d9262938e1d56a048d187a03c39f8c7c6bd314376f62711f0acf581dee633864765b12d516b305bd73cd6ea6df32377e56cb560dd71da9748e7e99c089b2a38ddb6f16883757de970f01ed4cba4be400e6b151c93ca067af52973e250e1732830da150cfe30fb50490d1ed638d570157734241aac61410e025c3e78214eb817a15fb3c781b2aca13e645a1a085a59f8b6582e8d042a8da76789fe50722edd978ab222697cf14523a0d1f7f71bc4919a45a1bb7741d490d1a7b54c1a2ca34a34cf8c5c35f499e6b48668fe8f22681cadeea6f5b5e0b131a155b0dc8005ae2700b0443a0b6fc2378e831a10e9bee1db2400d20ac41d7d2970fb813021e50b729e51ba692da5c089acf8956ce7002f5d586bc497178c1bfdfb7b90613d1f0b51151dbe6c1fc14817d6054969213b942f0032f08a241eede35e7a1e0689bf9d7592c981f94712d22920a11934920bef336815b7bf8f1be162e63e1071619ba20c9da6526b0e364d224fdb0dba86b1a392aa866f516e8e2c7fcb643e9c77f992f3d415e859d00dda64b40f3f6cdae5ca8fcfe4ffe66ececdb7f6e06b55c775ac998fbec58520f3731bd856b8e4eec79024932283f60d7050b8e908e4da8135a51b81ba8401fd9eb8d2f08d8ffaf94024263bb88c8b261f2fe3c01c89fe326cc6c3312c5e14dc8666d555b12d712850dea96b7d3b15433a0dce437834d6295c874b8ff6a1bd15c40418859de76fc042d714d4e214cd2ed02281cdf4c000ee50727926082eecc3037379903bf04d40492a5f2b9e59b55b6de0396ad20f9918295d31bf62a33fa548a0dcb2ee7190315765724e1fa203aba8518e6d23bd099a301dcfd81a1cc69584182aef420ab3a91b744c02740935568175ad56bea2e1e8d79a0e607f000bd88e57bcf9ee070db96a0c93eda3a998ab541f56cf93fd1e415a273f8d9cbcc97fe56dd5c79ee0f22815bd18a958c6194d4bd9d4ff132a76abb323966e41e2c6a26b379ff7f3787cdfec059e682363a1707e5f134b5b1cf01e6b56268d9608dfd1c091f45381e6bfafb74f0885b8e9074519bdca169eeea15abc11a9377c79e54fc5bc244226121c5517979000da8522787b5b9ad64eb9d4d86c31c5675c3a70bdd9a5d491d8d62209c1d0da582debc48d17e261353b3dbb9503a11620d05d4c23eef86e49ccfc6b80eb144b769c839dbcf86da1a6a9581b026a508cd0405f2f09016925568b6073bad8a0383f206bb1c4101a63d77d4ffe3"}, - {"000000000000000000000000000000000000000000000000000000000000001b", "005dbb22f81206cef93903b33a2b1a9d8f0f16c939315a0b7c9be91debd4eb3531f36b8a061a1a9d7f03202e04820a0c2190ec7e66545071b7cf5724bb0e182cf372fc4e96e9e1e5e5ab010cf7a4f7e6dadfb72a12542a5bebb3d791c54fc1b80cb77855d89b1029b24974247018e5e8d9b082b51491f8d477ce783f1b6a2d9c7ba5ece813bda233536dd82b9625c460b9493937e8c1f19519f09709df7756c16d230a46ed164aa202aa107abd65b18b611d74aa8c6c89fe282b37430388b935da60b9e51fd167e8ce4dfd63b721b5dab59f02c064bebe37bc47be7eb22f37ec373a1bd9d7a041138c0c092c6383ab93f6a228277296d0b7a66d04c20af4fe077ded72d391b0a3658928d4bd467b123bd0438b33b99fbc7161e767162ed3710a41dabeef3a511a80726a7710dedb9a5e637384ecea626f4cdfa5b52f169ae168e305eba1f4c42427722bad27067bc75804b857ba87c7aa489b1dc43030ad6cea19cfb169090f8f58f4854da4e47f9cf43646b6011312d6fc206308e2bd2c7f5fa415279b97205a7b98a6a93a773720429c2a781adf92c3313909b86373831296ba5dfc530b77d58a259795d1a884720c55b944cf5b851f1c6e0faba3ab619409b5b4d89464b94f6191ed8074f5d70cee015c34a22ed97a06684943c25c62c08bb9e631234ee264985d03c9d6cc0435c06eb0b115917ad90b0e58f1f8831df4e5818e322701cb7c6d70da2cd1c213aae3c6a8cb7b05c207d40362a14e05c244983e481977eb2236cfebb1301f72c65075c12a36917a84582e4d476bb8defd5f55e7058a3a74919ded171ddda40f81b327cf8d89847bc8412d9f48e6e6f098dbf20b5ddb9617cba1be8744c1067171d02d79e0e8d6e319180277ff7c6336b5cb31e29478e0f7cab7127d5e02736b44af58de5fdb067b58f528dd3c66e5289820660084ffea594fe24f2f77d31ed454280ce7f72f90932a0dbc6d94de8f7d036e12b456c64a68ba1387f27a20577bd0fed186a6afe8a27d9d1a6102f9715e3b1277f7f6b5cfe32789c542cc1b8a60e6837a17fee7bd18229b787468625b85e1b4808b460c3d221d7744563a8cefc0b95711134bef16af1e3b020e0576b033c01af96a770b6796197ef5482957e333fa872a7e00383f3e1b2ef9e0ce5be0ed56f7f15b89821811519cd209d3bba12416bcb2dbb1b6b3d4e7d846442433087526b14958fe946e6ba55ee3ad943c9ff17dab521c0414785643366cc8d9787472f07cc94de11fcb7964ce170a4f25411b773da5fe7252edbff075b8bad6ec8a147bb49144dc6cf36497f1accd31244dc582de01df3045ce98889662438e8b259b1bbb78e60c75bbde9b1c9aae451c128acca17cd2d6c51e98d53bd139c3384a87e6c6d0258bafd6cc35bc1bedee9d7a2af679920300cc6508d4f7ff3f7a90d86bd7e528f1c7e92a1f14a9615cc50e601d66d615439a4ff4edeb093d062410f2e2cce49a8fa50bd813fffa526b973dd03ae25e30dcc2c30b986823123789895661cc5762233f992e047dda852a4b1646aef785aa1c2f13bda9da775a231e154a63b023e967c86c52277adade1e8ab4f7117d42a16630415dcfeb384ee5ca404d61b5f20db13a00490a26fa3de2e66be0ed4921b1f3947a8bb298a602043fc7b1ff5ca5efceae56fdabd3c2c69438f5dcae2c3c8760d34ee8757dcf87e2f4ec00c6619cbdb52912c13ef55f48caa94dc462ac4aa48795fe58de3fad3d9962ce6c330e51ceecd9a2abf603db98873ff5b31ae7cc98080b4858930475f5c57f7d364d8cf4a6fb28893f86148e4513ef9bb9e540ee2d8f02cababa3d3c022b98ece7bfb749810657be5877fddbd69f329944dc57c86817868bd215f6c7e0f7f7f762d91ce92a"}, - {"0000000000000000000000000000000000000000000000000000000000000005", "0030ba59901caed1aea05065478e12b6a83ef99b4f0be9f1d46a1bc92b7ef951a3e92bae5f94c05dc58025548b8ac59e56cfb073e4d822d2781350681b1ad855b1f41bf5a615677318b7a1517fff6ae289feb525022cb965d8856a7eca9263cecdd034920e939a7acb0b423894a115ffd1c71a83393662ca030cd5bdf57408efdec6f41bb68bf91d6571ae3febe567aced425b2f28cd3cf8cf6af6f154a7ae646f62f70e67bf87080596d7c3ff95e9b1c8e7b2bab3574488d0e074dda41aa0c4e37f98531d465c9514a53d7cc2cb41d7f91c0d0691b18416f03b219988154fc6408b39aa3abbc213bdd7a98ece15c298f2a3186ec033fdf2181afe8b064f3745915a15d5018231694ccbfd5a88c25dfb3619de5b1b1115fe75a6dd183b674a91170c6a7cdeee33c96e918e15629d3da6d5efcebf62378d893f51ff7f33d76890f7f1f9ebc719bca8764a82d1b4faef2c00865b2a46588127ab60f0710cc1a2b13ec26e14a11b9c0fd59b6a2fd1be0dc27ab69ecb557943f2f71a082d7f07e997d953b1d5844768c754cbd632ff0aec560d3f07e7358cb7f7bf55ed6f637fa23d27bd998e0721034b5120435199db368271c5c6920cc33c727014338d9b1992732ec418085a81d0070711c75f28a01df56cd9e6507a7e843302f61bf8c53d0b28b505504f90161f24f419e9a337268c67cbd46e9bd0f541e7010cb975ee9e46a9c2d602b7bff56470ee32579edf1b66d728459650feb68b62f1be50f61e06a510b10c1a2c4af583c9b5c5eeaf16452c4b3b0da4f95f5f703ade3ea3c9e6240da053398d8a684cc681b414d8c71947273a42270b356cf105e1a1f4751e7bbc7b44d125a277d6afaee397d20153ffe756a4255887f32e062289247d9553a32dc68c15c21ec53e59713a9834b057c99b2f06d981954ef22808d0461a1aa7d8b6ae6300e19316c945ce8946b7d66b917a7bf249993cd768080a5f5ff4099fb9c8ff4205cc6a945287679e47e80735875f81194e913353a6d1ebdaed2e4721f43ce52a6b2369e95e53d9969fc4538bcaea3ef0e2df5cf001988eb194ed45efd2fd24bfe0a63095d8b455932f320e43f9172ee1959316160a1140c62e987a39683a1aeedd6ed3b4e3c1a7bbc36724eb6b1963c632375f60aa8ff796df76ff5d4698ece6598cfe5a033cc83e017f6979de1d52bdad71a0f663fd19feca7f96980d4470447daff45c43b11c44c51c30af661003ba679e020d51706d01b7d4c113d036e5302988794a7b50d61d8a6bc8a44f01cac485f59d86c43d8a76079bdc0b05299c73ad0ebd68c4af90e5677b1e09cac9f9fab20c103c0e8ad1bcd0f83531e09cb2f749614c9130d3115f6d0ddd470d1357a81210e9de9491590e76f0965138261c3f60abe3ac94369d00cad9a61bf81d7a050166f212471bd9eb33d6215f631337212e8dd6c5a222c2c2945d90fd2f9dbb83af73ab27ba3e117eeefb054990c43cf653e3d82557b3455ab34b77ac5e215c13476fffaf54ae6920ba71d13021335748d59f143e088ac44f1594827172f290d8c5c0c15ec8d0bf785814b2a438a826da559721519146eeaebd4609bad6d54d049bd12e5c642fdbaab6f85fd8e7eb052b3adfa16749ff48405b38f52d8da72dbd7e232214f9d8636804bfe6d24c0fa2708ce717b69ff19fff0eb2dddb2a460682412611a557d6d8d4d1687a7825988891c6ea0b60bac446f46b6fecae24a05043fda2c6947b2f651620b3873de7bc21f148a64f37f3410608a2d2bc1c0fcff546ec56826b209ac2cbe437fa6972aeba251a23d8573a561aa00ef91253d2c1382f8ae3e2fe1ef71cad67902556683cd55b73781aa5f5c74942be9f9f68f69656e728fea57fa557da90fea49b89a49d273d"}, - {"000000000000000000000000000000000000000000000000000000000000003f", "004e08ffb44304c936c768942ad809067a90181680059d6aed5f0c138d393e455f29fb0e02ec195870d90b600ba9ed8a6bbab7964157715dadc1ccead510880ea238aa9150a2af030085f0ec61fbd9bd72fe86ac0302552a63d02fd387ded3514a5acb4b9279df24891521cc825172ab13d84d864787e2ff128a7299224a0f9e2ecc6a96fb4fccbcc256ec3b80761ad5f273bb27e4aa5b475048d32f039438bec151214359bebf0f00c9ff651d6876e5b4fa76d4e8bbb3af2dc1d9d56e3cead7ddc3b0b569e11225c9ccfd79aa2ed8fa962b063f13e52756810cc63ac17f9a443ac545057ffbbf573126561f5f4c61405bc6c45ac1a2029d823fa914061e78c59e66f251bb96932ce1be6074e4b70e035e0a6e7964ac4631c2779701e3549eb4247dabbabbb209a5fbab20ca1d1d0a6131cbc97b221e2e9016497e0a7dff78d35d8ae7ef18a37e4c4ff796ca6a3e339600b9b106f78e23c333ce11fb594f3fba02dfbfad2405a2e2e7722c2395f97883230e1dfa4590b45832930202d879651fe971dba3153dcc5a3a79727c78fdbf1b6281ddc5c99f2534e0a358745ab4999411fbccd304f13e7a02436b9a622901652ca55b95eddf36136029dd8ef35c0b80c57c29d33c97731e254972913dea0919f1c2cad14599de7581a25e44b87677697fb5c0364b97198ed3c686c0d643718437b991e780fe39b0030a57a424d14131b98c40e06c1bf51e2077f411f3686db7c64e655fedf44aba0f78d27e9ef5f8bbe15208a001acbf628419287965c7bac6a64dc56c5af2162a8c81dee2d9c870cf6986398cbb07b61f589b4875051de35e97cbd57678dc13f7b423edfa9ce7553a5045bf8d7e4511c8f5e591198d985ed78f0ee5b8f97a122eb723970683ee7ab7e19d4298a5f38be2df7fb723a52675add582bba4bb2586694b9546407c149654005e8f825d60dcb7b550d01a3176a936239c1a18631d1657aacb930102c43fa326c6690a2d18eed7c749215963851e1149535fa422889eb94844f6abd177de586e04c056588e37ea4088f1e56eeda6daacbcc2de1665f2de3216ef07abcb4520e540322d521aab39761e704eb0148b5400f54f38b9eef53a6f61e1fb46921ca266dcbe92b557d934e25c92a19538baee6a00f64417a76b69d435873960e9bccdd40e137ccd7ff17b03e24f0b3a2fa015fd4cf63d5379adba64b7db9eba2f84a75b975d826f1a0a64f25f63d7bdbb62db8a3b2444fbf9aa5c626d7ba7e29da1a024cdde949d018e2ee3a9818d5178057a8443efe7326fe926ba4ffe8e0910171754e34a6fbeb3b34e3b3be24e20d8bbdc74245f826585cbbf6780df52fc6456849181c5f52f340f81daa18117af44e7f67509333f3b81b46373b98a1ae73341b7094069022391d2c71ae03a81485ad8c9032e69a3b148168ab3f6165942dda7b29715fa42992671b4e2be362639ff0ab791ecc947473a383d94b818c67a164687a5de44420281cacce7f6faa53b0564763c5cbf1e9f4639f84ddc174b669c8b4ff4ddba6e055726b080c7a5ddc2f9ca35446ef34314ad5bfc6325aef3a1981a817f5981e25b1aa6bcfd9fed39bc4c18d45e8e4fe84d3ba29713b12760380ed3cc3766b937bddcca5f50d18bc21f939f9e6147163e127aab7903c8472efbd43a68de05459f21afa81a11abb5c9341777910db8dba337a2c752bceeda201d94f81194500c6af6bf3fc3626e8b94c36f856d3091e7d674ad921108822e3cc6660b74d161f1667b014cbdd06e3b6b05b39589594a52ea95eea96608e51b9e838a7e197a2d57cbf23c4bcfdbdfc9289bbf661703487d1be095272357dc918ba4bd5e6854c154466d8e18c45b06a348042479965e7cdfc40fb51387d1b3cecbfb1f1822"}, - {"0000000000000000000000000000000000000000000000000000000000000021", "0012e96e64e5660f51d4370b6d38613aa0e77795554c9285175a7235f7d817259048f2782305e79acb3115c482e67490a225043d52029d7af7517f84b81bf72e153ab9fbe01f69be8b93f4eb6dacdef54d5c14920c330c09888bf32b3ea092f0916c4cfd6985cba4ea426f4d8bf76b272b73dde5b371dd688a94845e6cf412bb71273f1fdbe30fa112cd6d4a5af8ec0c194f3b39939f2fda9d2ba98b77740d4ddcf13dad81b8daa1036367c33bc591cda2a17363537f4889dc99f3d7e01d533e45028adaf1514247b6537925eace91fd55d5091731ea5988c7df908bc1379bd48ca271f51c80f6185a4f553be4e0f5bcbdf77991ce4ec20ab3f2ee3b08e0775e252c0179dabb62a1f93595414b2810ce5d176d81798e8fad8aebe6bae6866a79f7245a7fbce41e2ae69af10b4d1e8f9e434027df695de0c1b864b935f8ada63d634b4db5cfb6412e4f4ffe2e9e16ac1700bfc036678d907523950116789400cdeabe92062602176d804c929d2da12503ef8dd3892560ae1d93e217ae3c37ea13087fa97142d60d98b7d4b6155d5ee81c9f96cd588b9ae760c22463fb3c52491bc34b1134035c56ed8765b443b901259cb7b93251a743fd3eae0757d9240d07713882c28199677fbc6206a91e23f922bf91ddf68c13bcd2c9347b69f693951f65a9fc5e385785ccbef58a1fbbad0680abbf3ca248d77e275e033f9683e84fb11db355f5b2abe4ca79c6e17e464d15c7676f63d4422ad8dee267cf9957c5ac0a7c364f19d45181a9c702232b60990aba4a9f327ce6f9d6a42683b5bd896b979dd3828419a3f39aa16575d2ce7004929b6ae05a33dcfa22f3aa7522d1ca2a3cd5dd3324a6dc7476580f64c55ea44f2ce838f37d76dd06680ac9f9e0c41b5173149234dd31618d75ae859c97060d97a967d34464f0702f42d1ff64b8953ba03c68a1009d9f1a9ed56a63b87cc05da38ab3c9ee8bfb76f41ac675915b98448b4938926a5e1584c56e8719ce3705601fb29bad2f1da84a94f200f1ac66409d35f59d20fd0922f7db79bb7e429553ef4508b66144d7269b09482e88f14d993bd24a80c76cfd80208b14b7042b1654bdcf04e07fb1c13bf4f72b633a094ae79b32500c6bd6222a5a124ae1d085b45ebf9b3f8d0dbe5a4b21a63a5b92d83e2f3e54e2235345b7d520f877ae320444b65eee2e5fc9c5e9e21ecefa780173a0796979045a2ef150e03ffbfb45815fb3f6cae295d31b0d130967346603218a2dbfbc13b629f84a22481095eca7104ddcb0569f4db54e7b21a733c715b0e59c7235c30b2bf63c2e244d35b6e631fdc711b1f63209bd7fa60c745089e10860c9837582ca8d4c2795409fd6a57d0eed70d040aeba0fff49b35c8e77406a38f516cf9e13ea397366e2394b9848026bf9365afa0cd352c2a1036773c276c25547277de1bb787f8cb4b47d2cb31a1feadf5a8e6b0ddbab8f963f6551ca56de1a98a6320add04e9b966306b3f2de1f18160127ca5a6cb78a733fe12da2a52c363d67bd708cceafad9ff80bbc90904c93315546187e39464b4495acde59e7a0e17f72a22d715d099523b9da78b537c61ebe8b90c828d46184508a2e54316d5f4c0aa24b51ce9b30d8acf515092478e0f7ac615028bbef6aaa35de7470359361f4d2603b6b7b7d08471f4d0d605d95eb758fe63add5a0ad136fe0ab1f9ba8a9e52f72fa7842a0fd03666ad58b2d019410db8e3a7765ed17dde6cbcd2f6ce6fb91c83d303780be0f500f81c5b64e9b6d1856af2c9f3182099cf9b196aeb52fba622183153031d20b79bfcbd62681e9d9b154b85f9d3246017a61491bad5a1efcaf1065dc312c1a46bd5c6f16318e49c62a0e33f6943e301d7fc47dd6a742f37a24de15a841c37e2fdf3c88"}, - {"000000000000000000000000000000000000000000000000000000000000000d", "00ae8256e7c241ddb0b4218e7ad012d50febd385380ead0cd7ee09b5daaa1c1394d673eab357c2fe89a5082f12e90ada450737fc43fb802937628ba755aa1c1a4dc93d488e4f7ed25d71bc1246e027441d5bc25a04d0fc3385951a9bc4b902b9e83a02fccddaf189a715284e7e58da3136dbb4339170e51a8dc5faef87b50732aece5ab3bad1e03cd536a2632b2d6f01b29efb09bf508c3958ed25f882f2b50c2255a8b8b04dff42092677332713be4d05b13318bc3a63eaddaa7a7a9e48f5d5fc8463aa6df2728c4ebbf55ec3c875ffeaf8188065ce583684abc991a47e3bfe5e6a35f536376e2cfb1c2a2e67bdb5c3da043567ab4fe137694d811b12ee72ffad977fa91e36429c3f594f04d57e1bc75a28098e6a962ec9c9aabc57c0bde965d1f4d1fecda4192951f2ef9661718be0dcc6837be9db87d81eb03c2f2e9c591ff05bc39d49c42eda795926b3fbfdc280016a4892a14ba70d193923a5ed660771f251117868570f0ff475e802479305c620146ddb099dc918f7612358375c7c2780375de01279ad6ffb7d1d9d7ed8332ce953ae281f73139e113360dd582f90dd5fbe7bda080160f7f09deb53b73ab65cf549d331bec2fb43d8196f3e3c17c7f3829eaad3337ca0f4cedfdf1927481d26ce693b0d5803c942d5c953ce1dd98be80ce43d2d11de1ca939a1bde691d6e546f4cae66c19fd4c5603466a79c956b439d826f1fb2ab57008f31a4969f2471cc687f759869fb39214871cce8355dd6e4f3e2c1c004e81d76dfe71dddfb23dfe3e3241239cd1b0651e0bd634078c3b078bf07634014df1e193f17f3d5c220376dd114d152d8b6665f0434cb75f053b5f4a934ba10a63a3dc93315395258b793cb2e222d99bc91134958e45f654521ad2a8964e79c11e4259a7f3add44ba44553d1a124c1c913c5729e3b800774247f761901cb99e6594dcd067780507562c7e3a1192437612604fe5f6674eb0c6989c5e340b1c3e6bd565133c2ff03734a31849ddee9fc8451c873f34ca483fc5e31a30f85718539121caf9dae31d4fd3d8e0548b974e555058fbb3dc647825d8d3f92bf46f7de8e3662d6305e247882f7fd95eb818caea4e401313049800e8c7471063a4750e6dc8a0f086531980b4ec5c154248fcef706b0e7b08c8b13adca3310ff0df75f1b88e3fe73ac02d98eaa7ec44c6c7e6a82004d6b6c62a821b9e0e71908d20d1ca1a41d1949d4f5c62d35797e3b1f775c036fc7a56b218aab0d39f580d570752d7e6d56417506b22763aa8ee57ecbb0d7eff5639adb80d51c6846057b36f9d142ba863541e3cff07a9fc651709e893159c79c5f1017fe1ba9cfb5d9cae80b597f471a90a32188b1b338cd61b4fb71e25865af478cf316082db8392af7abf7978d22dc84d4224a58b655abb5526fde02f1037970d6844b88f31884dec5fa8780a0fc87e00d3a95ef92d0f245c6d42157fdeb0e51ea021ffe2c04ddbabde45c7c413f78b1b8f859243629e096971b1e8325100bcc3f69a48228d096eee4a66b63bdcce1064fb1c1d8511b8f3705363bc7babb9e2d5432e5852a70b2c7af1554d5518b1befb163d89fda8bbf465225eaf4dd115fab47fdbfbb58f37d05a7ba11de89183bdfd728965a6de761a3e6284063c25b3bf57c29f807ac109b5b2c7255d1c05398cadc32f5bdb21e44d1154020e93ae70ae7ab089a378f69ef0fa276febf74282f61739e166c98e64879079779f8b69e0c3b449d34283a055f6c0ac9781c464f78b3db821b53f18f72105bf2c04e16e672be30729f1e720105c7ecf9e7d116a7e1ff46193229cce0a3331d542fad8484193a311fecb4dc6520ed617133d33cac4f34bd0bb03bfa7a35385f25f09924fb919606f56ff57541f6ad9b63bc"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "009a698bd3a2e62fb6f030ca668ee1c93cda91172246c1bd245293961d5d24e5973a4bf09b353f7d18d40f7f0a2e1d2047cb2780e2008fff5cd532a019033a19da03a8f660a821a671c5b338b09fa6a9ec593df0026e13fe9d590cabff5d710fbde16a057b5571577f20d36d082163dfc54a25922be864aa4a7fb3b8949b17b0ace19210c4fdf123b4c5d27ee3a5bac13ff656225389792be28d23cc22a37633560145582c3aa0f205c2f5df88d3bd08a1c478752b6826c6dca4bfcfbe1c97495fb8d84a9d81fd75b787c540223b15145532226341d5446c42d3a7e432703d3197e5c0a9726ebf4fe96d0976e71c1946f8f8c737e51d366b4ebf306415e3fb33c48a35c7f1e3124257e2a7f0f292b8adc81664ab5601144608cb0b73c0db45edd96cd9acf24b19107b62ecce09aaf119c3376cc3cea3046b9f60fa5d1c3efdab237cf7a312f81539672ad253cdfe7e8b0195351436e360b18c8750baa17ce558ff40fdc8982beb962a5ba9583f9ee0748383a68869481bfe12a10d5d277098ccb5308cdbe2f210b6c2b53748f4e0292703b3ab6ad2d7690dade28475b79bad6b34b6309112d1ba3aaf87c835468eb17c31199a74629fbe81481aa6a9e434d721dd835fe2f3e0d8fcf9dc6357043d36296b5a0bb3473bcef08a2c6d6924af97591d65f367841bdd0b60f3053c54e7eb6b695d6dff9a5923640216e67d63deaf93592510c289cd5b4550ef302f7254d0074a58e18f47ac02a7d20df61e6b8ce63cb9ed2134e511e908aba9ef93b5f4fbc4e70e89b2f92ea227ac496f409eb0a9c0ad7462e03e67712f2cf9fdac057288ad2152dbdbc419f539c6c1977e7f4ab9db3d119d6294740dc8a29b0ee356d8435826dc39bd73820aef31d11ef584fbb9c751ae60bbecce160d1f60a12057099cd2e5fcc96e8468d681ced8967a69df59fa00b3e8c5a4ece76768f6b29060ee9320e955f25b3d3cd852f5d160f33b1e1245625c5aa5aa973755eac710beb6e006d48f85b2feb3ee0b6bc106063f7297d41997567057cede8acda1e2cefce4c529cf4e9f13a3040549ab530500ce7b2064b9f9ef8d39ad2a5276390fe652f85d684f9bf0e684c4f36ea90eab625692560521d9457aa3a615a0bfa0753b7da4ae4ad0ff77cd172217f07a499d7de3d07387e6ec66a339af7b310c01b42ce92d44c7b3b31b85c5c36dc4b9a8b619176c5e99df2e1bb1da07b48a669807b7e78df7a67d042417cc621cd28fa3c52c6d91e1041e37b1beff7886ae39fbdc34addec2732392b5c3f9bf246190def2cc1a0906e687f2a9efc7f8b593af8ea9664560a00d7d200ce538859d51f0cb3e05368bc041b64a39f31b66d21b85ca1f6c0de520ae36e1c35ddb9137908b3fb1c54c417786dfdf72a919e0b8faf8cfea7f3eba1a235802fbfe640fcee755d003408d780a44204f898408730a6713236c596fef4f11e0c26d6246e4cc1fb6d55408cdacdc906dcfaf7897d0d45aa59be27db69d44990b35819f85842d0aab3048a763d9c1f28816b979d90644c065e19c8d83924d0077a89ed4f526bcae8e752cae74f6ed94272943a8b3eb8f66ae4a134cbcdce606e15b4d4058f2f8d915d1d18d9c8c64973512b2a728f9c1cbae4b4168a588b51c68dc18eef4dc3c9f300bb5026186109ebde50af249606058867126da63e6288f416d21d58bf0e212b3e8144efcaa11a2f5dfb416ef6416fa20cfe19b4ec7df5045242b17fcdb0c9c3b35d7422e9218755078ca2f265ad026f0293f303d0db66d5b08ded4ad95cbc1482342766edafdbe2e25205b575af46dbf8bb4c8b34abc71c70dedc994bf6c1e570dee350b665f67c1d462cd56e0663c883eb41a5e4893d4eee9697595e836a9f7f4c8f600b1717b51"}, - {"0000000000000000000000000000000000000000000000000000000000000009", "0108ff4ff2c6b0164d5f743c7deef3114258faf21418b04db7620801a25957d7cf4ad61056aa269673c6027ad6c02bc15c6eabbd971f9e47772a159bbc13a211c897f7efa28b132b60e5bf1dd671058162180bc801d081a163161a78feda55bd1572715f64945f51e702b76b4f9dc4028ce8b613e79edabcff666b3e5dbf296d866f576ca067998102afbae1dab5f1ad7e415350444576ca25dfc54fa7c8d5c04ec4a27d3635fc10010ce44297df42af23a31100f59cd854de51b9ee282e0b2e25b616c7a4c295c92457eb2e9eeb28ff8085159544cd985fa90d1aef1583283db965a18b7b32f91b09cd53a566aee569a3f294111e23a98acf3e6fd00823eec5e506a60116d115c6973f3c597d64d987620a1ac5356ca2acd5aa363102ac0a3da74e935f56c60a36cf0eb6dc27933b1e40cf505b852e381c3ea5c52902d9bd65139f493dc446a894f7ec7a4ceb1d047c012379aad572eedfdca74222b133e32574ecac3153283c3371621567cf421945baf842c6762d9a9fa9ba0cf06126cc96dc599127e27b37368705415d8f93a9167f758374a3de8b826cc21fba787c16579e36923101413619784795716e3690911f665b9322b8feb76028dfa4f81f0f80c8afbd08de134a843f734d3fae0f03bbf626a615e761bc9522097feb3d2b93507eb702597735e7e0706d97eab0f61687f92042d88877e3af01254f90522314ff6fd3aa6ee26a61afe8083f8c94204cca52910c7cc8cf77c664fef4d9bb6a87bcf9c20aeb6b42d41f232efe91370a16cc533a4611d8c7720e24b0ba7e0e0c6b6f1ee9f473598b870ffd9f3f2201e9d373931afd334187c72941be740a4ebedad81a117593c5c38ddf914a1b57d00a5ee083a39f1e211b2fcf8fc31e9781e0feb1734076d5c3c285af95e238403967bd61530a951d416570cad61da5c872376f7701bba5d0365028a383aef77df074941b16745abda3575163b260d8ac9fec0f55763a3e9773552d5bfdfd1db783632d506b45274293bfa67c7edd8d0bde4c2f6c0a1f66495c278efd70779da8d95d1283845bd4ff02e31f2d53c2cae3088182d9e1a2ecedd8d51dcc6c06c687a53bd8f38af7f3b0d79273aec69d197dba581044a0db95da9f18dcd191d48fa8bdd560382fae562e909fb4d6932944f4642bb371f0dc3303e31af23609f77b51b9c9e441a5743499e051a5fe80dffd514c2d53c653bed5f569b20e42e4cec2fd61016b4ade750df954daa0a31f17c0cab2552fc1ad0ec08e36c2453ef14d3fc22bb5d3e92165adf271409debd8592e5916ad4ad80b4d444cdb08f4aaa5d2ff4a743f78f19329ad1d6359148cf6cfc2096b8ed3aa7f39563f0dd42f464ec28ce52267e307c8fc6173eafb1a7bbcd33643a1ec3fbddb9403848a954c42f094230aa99ae562074a1d731c84cba55660dc094ee754c313173fb04655c517e2352613759e93ca2f7c7f0912bd365f094c317983230f9a0240f84dd3427ff37eb2c92bda8c30541e95cfdd23084d838faa3b69eaf6f6b1d8995b671f2e37ed1ecc0ed5933664af75505395635cb432e9286c1503ca4bf52d536042fb18a5d30a1734133a35396163595120384f2d3654c591b8f651a99d3804354cd53f19c9592d79d1c3fa8889f95e3acfcfdc346a0871c7bfff627c1944d9a768944a4d7de6df90004613588dac36a68331861c1195de39622e0b9c5c64a81e222d7b038c6a6b0b23d50721b85c8fd146febe772fe597fa688df7ffbeac151472b1a461b83c4fce290e9dfa6c8c26fa7b4dcbb1cf21938add0598f7c7ea1e85b7d6b77b06b1fcf9b566b059ecba4e84fb2476290212d8ae2956d791e453ab95767d19d0171b34884aa16abb4e9f34d9171716f763397991eea5f91df3"}, - {"0000000000000000000000000000000000000000000000000000000000000030", "007101ca838bffa899cc61ad66c67ad75ea9dcbb72029d7ae32e10634edd96a189922d6591c6e9d9458e0dac3ca884932989b5a104524b788635977b782194378932567e5e049b1f8d58fc177929d34872beda5701e72206d3af2853e452e21878528c2e0d5abc75a11f3677782118da7ff82c78a6417ba11a807cbd9b0e312e732f025ba1f8e50e84c76c60ba664cadbb7be27c6d4417d7711249dc8ca8e1207f3eeb2b60dae61b0324504a708dd9698fe941df4e8f1a5e5259f51ca41cfb3292dfdd1548f37964fbc1ece79d728858115f1762391c660fb0afc7e7522ad526cda50a9f509f263b696b99b6150ab3a451053d45b65579ff2d142e6f03cb4f3b1872e6a5d023d1825362f5f1ea2fd12d581d45e6c68c11e151bd2355d7192f9cd6200557af6c08a9f04656e739f3a1ba433965f39cfd88023e9285184d06cf6aa376e7b511b45d4837e86a70e153e999011fc88e21689233a35b42f2d0b6a728eaaf132dda22d125c121914d67ef31a66835b525b623c1b4f7520665dbf96bf0b2fdab64a4d7063bfcc38461fc786f2b1ee5c4d0123823ad5d02ec10220381ea83d97c590592017f88164e0cf50dccab277354ff34163b4b906f632c6d6cb63e0de6cf3b63b85c87c348df5fc52a28937745b06a6625f4056394121fff89ced39a749b449ea318c451ff10a25da5dfbc756555ecdf9415f702242c11badbe0117fe8616cd42dd3fd88ec3600e22bb0e1df9d0cd05b5bf583cbf13b55496fe61e39c0171fefb7bd6e41ed8753c53f4cc53a8e43c7f4a0832f2b023f20a4e1774c0e466677be770e55b93529b622d542ee838baebdab15f3a896a193761cca57721482812e8aa9eaa36de7b41935a277cfb254b3dced6e28e10ef4d5d053c5e4d245d4c5fc97a1ca569149b83c6a35e537a72b83ac95942dd5c3f276f6c19a01a1023d61d4da9ecc310526d09ce152658c35a7d7212209ee74eabb58f1534c5cb3bde671a6972f607df73f0b5c27e5434b62ddbcd982984eea8d918d220de135192e76357ed63f51d1e832657efc5ae96f210dbeba076ae5778ecd1ea498c1b2bbcd6a7545fc013198ea17c5eb8077962505d52595b21a44865b3e2f1fd8a80d4ccde731cc1cfeb57843b842af6b1d73e70c72e1376bee5aa652a3eebee4f489f2d1e385e648991e4d0a85f1cb5ac5e8df27ccd151f30d2d285a24a410e243cfebf8a3a91ac38a434503dfcc02dd4b1f1c4d87118f0e7a88c668faa11b228a9ddbda396da7f1c74714113f9a68122ef960ef43b6a7a1cf51feb33bde560f8eca542a0f9e1eda0de3abd7dbadd99387faf6ca18eacf4e4f5b680fc15cd1e2e6e6d62a95f9799fbe2bfc62f2f98fa62cb8848a70525dbceb01eb38123b2daf2af32a8f453bf387937f406c8f6dda0b39dc6203acaaedbf2938d7515ec5af3e57bb6a899477e4270fbf2b644e1e103b1517518aa5dab898d16fe7f7e80ba12c9082dea30b901ea4d9336935ed67327d3df615eef5c5a6995e430f3d21c4a6736e207ca0e8f5ef0b7e50e464a23807b495d0fe61465254d3e456c35b1b9132d659a714dd7e4012c44e5c05f970f84c04780bf0bfc7e7d4ecf350a2c4860b2f6d662a5b7af1a71e211bad890f7f43ecab223c4dc97d0221db130ab40694b47e2f198274f24bb52b34a9626a2bc15983920c9e6c0075cebe40ce54640f3c2964693a3817eb193887cc747ad316bf83ee84e2b67aadca3115f7c6f448d19680f6eb82459ec1b5127f74d006e78adec0840c5d1a6cc015a72999aaf113391625a0b54239a6e1223c764ffb114a15fd7caa4b90e1d966bb1dbbfed8123855692dddd3333295e52b10f2e775c012b739051540cef5200bae4f5dee116c0245604082ed25a05e"}, - {"0000000000000000000000000000000000000000000000000000000000000004", "007c3be31f93e408df68e20890e05e5aa6737e343f38f943aeb892bf90c170645dcf73d4be4c3e36fdec0cd67b6a1f8fec1f440df660f9d71b324935ff99e53d706e60ce9779ad08e1b9d0e9fa8dc6e331b881930d4005f457a6fe21b7647677eefffa6a79b2bda24d3ed3c2641d1038c2c0c314721a3c05457f10329b440e1bfa7dab48f93335e4920ad8596f656e4f4c444a11275b415111e70b620829e9a452b142f9c1f9ae7807a7136eea13da41f6d37082a975d28264a3fe06e2195ecbc3026508c3b4ab3901b96a8c3e5071941a18157db8aecaa35fddd2abc2e21f75f9e9349358b2962249520c7a5dd88368d152b61f1fd4caa6a41f99e10b89d9960f88bddc5991547253d990823b5cfa49322eb3e7b422a68e69e8e3830d85a45be2b101b60145160e17a2ff4e3210ed3e43abb5beb4d5adacba79d336cf1d40719aec6356ca74eaed56cbb629de55970802e220a37fd8304eeac7d3a8c7d34b99af8fde920224300c75dad3a29ce7e8a6157475bb6323917c621125f909f98661b0ef484772e995b8b26d8006ecbf7a744ebe75e16471cfafb6b9d04f578f7a91539e6eb509a50763d5d81faccad442c165e94aadd15356f8ad28d50f1556d4ab4cafe6a3785431c5c910023da79d18983e0afce50571e21903cf93d255fda554f966ea474d4c6565991f6b21d9c5ff65f01eb99b9ab2c67703c54a7ef7a73fed5501933715dc14acd4c32e7d71190d8267a029ba73e10f92a87e1c2f5a79d37a6e311cc815c0b78eaef3676725c946b318f5de76b8cfb760e1a4afd12d72d38aae67ca295ec62a89635a3fc31a9fb31a7f20957bb94da39a36ac99f1690914dc3d2ea6ccc3001afe0b0ad454576fce0545d01552a19e1f84a562591fb3912e52d25cd59d0aacfaa6fc96aa25713f2e948c2ac0b82445755867027e5a39f60da60178f4d0a40c20590834c1c26b2978dcc3729350dd395ca3acdc2c3839d4053614687a124600fa9340ae0334556fa4f85633d4cfe192414ed2695aa83b07893b4ceb36aa9f92fd65f566aa90ec42e1c722150913041e570ccc05d1d35cc5f06e6435893e4aded4e7ed3e6eab8dfce578cb806ca8632b5775e789e7bff92608f56d62c261bf1587b352a513e26bc4c6d5982ced1e5d6b35794c086a975b82be30c55f7755f43d453608da9b7381cecd167c6470bf2beb6851ee07782b8e2ff73fd0bc94543b8fd573d264ee719dd305cf45f626d0ccba78ca65ba8216b281c4e650f2d8d4197b0b2bf83b01fb9c35d7b10cf34e853995b924088f80231301c796bccb3ed8d5d0b443da69125deb725b9bde40073542916f97b98d5274a5e6754be15fa2dbd73c17d44b6ffb14be33fbf67432b973d8663be51b7548411cee4f79966218c311b4e371d4468db812fe9b35036f54d3446461a9c1b77651b6e61ed65a189c67580dd56fa0112058710348730e87a15de9d66b38f4bf037bf668df44248576f4d27340b6548687afbe2896869c5fccfce808f1adc3b91d6ae8183714507c7a9a04bd97f0de58372927bfd9624bda3f86c7673ec6f6324b467335dd95034a2395b200d29c9ad36b7c1efa21f5c29b42c97a8166d347ed7eda4c0f91249e449b2ec7564663e8b6bf62b664af2c3239e56d0dbb55250445bd3621cf8619e9b8c4c6dae96b49823c94f2971ec4a211155cc93d2b72742663c712c518b133ed5e27ae6f330d4bdde7230b452f97667456136c15137d37a21b589e54ae03e712765e2e343cc1dbbb56b5ae080d6e15c517e1e9fe3097d586e956e29b7196860d0d5615116e13a3f5c69301fc60c1badd6c0fdabfe30c1bba72919fc685ae8df0c999b84fe64e21536ee1148980eca45271cde552a403d679dd558f5a57c039"}, - {"0000000000000000000000000000000000000000000000000000000000000018", "006f5f4be0d72389e0f425859ab17e7a3dc73ecc3f3d35237419528904c3af582845ef9f4249719b0689191ff6a3775ca8f7299f24c2c1f0c276027b38a56852e52e03566294e7971ca6d47eff20ade851d9baa11e4101f43197a2cec8a045e266608561a5af7c72df38eba2ac83d0cea2d062e43aaad010299169b7a5ac455662a374ddd0978612e560c24d363d8de3106b8b4ac855c7c893c7a4e4c73a72967629bb197fbb767e063d036e89126ae1ed4f3ab53ee35b2fa962fd56df17d07aa6ee0a34745b8c8258b326cb50ce9ad65d9b29d7a3f43c969ab7ec1375058ce046137e461f425b2d7da9c08522d6df56e024373443c9196774d30c8e0da67e5ca2d99f04ddde142adb7e3e293cc33cde9a13aaadda53a31f6f739255b1c4f3681603793074781547f218f965ba45bb0b62562e9ef8417cfab9d94d1b119ec3494fe2c7dc934357dd5de94d614ebf542400db3ecc21d8bfbbcc3f80eb8587e218d83e9601ff17f8cf529c4a7ee4bf42824e786b99954f435352673e3cceabec91247315fd075490badcede833556e345e4b5be8bd99a36957df168a6c706d4672ea59bf620d3ba63dadcaa1be6a3a51d7679bab465f4bf42e2a2305df438065c36b6500a56848e66bfb9aeafd1e501026dbe6d210f734b909333a0553f3eb09ecf9fbb71fc853e3eb9d61c9c18f09eaeed5348ebbb11c8465026b61eeebd9aa38dae4a24273cb42add6e1b70f743454fc14c0a7859782fb245f5bd58b0efe3e9c1a9f028da775cc8710db94ecf2925e4937b300c45b810b039ba77943ee2ea1f59340d9e4150b5dfced791a0a03516fc28596a77ed25d227c106cb4f4e967127ffb15b311ba6cc824c6c5edf61497b4116dbc6e73c4e418bc8979eb63db8f22b123a15560be2b1d43be0c023d261d954e2c03799d7ca7baf55a80171a1abd945a01caad4bf246cb3f30cef222e0b429c729f93cbc82223d0f53b354211b9ee7299adcfff6bf18067cfbb81b662ede92d1f5937be1a3c67aa1b065da4930f40b1cd345a7875910e5fef6f1fb52b603e4d889ba7a22036582f88a47ab46a19d1370de499f3e53d17deeec3b8e2c7b175150c90b051627c6d0a152598a7b5b091ddc9de18448f0310c8c958c9651643a6687d71d3d2d738e04d0cd9010b6302602bd7b05427f25d7adfc03c0c48501b71bb7d8a1f4d6e2b89d6e84d57d6a5a3dd6f2c9925731bb233966624a51b0f606c3bb04c80441a324873b331dda5f9317696098f55fc6d0789319597e84fb1986b1c3faa1a73892f9c5e2947a5c9d04c0e90ca30e280caa152064333e83721ff3f6ba2a0865936779aa2a6194e6a22c059cd9d9ce61b4cd1b0b77997c6143bb08604f21135431b1792e5bb704151585729b1e20ee6993c8b5a9b6d53a4f0bb299a3ac023dcebf8f26b7f3b30361df6ae3f56381197d23e70fec353bcd476ec8d331278746fe66fe97a83f1c621f022187b96a5265b40b84e89ffbb542a526d8f76245e2167cd15aa207ad95b89cd5dbe0f34fb01ff32c0536c3f03ca1a50b6fc09847154673fe76b05ca1cb2c97ef7b7d610e314358c3b0647bb445792bfcf83f0afd1d3a605d011134cfe2d746bc75edfcc0b7f7111ca4e9cff5478f80ad8dd2e645b7a4cb21a8da7f26066d2a8ce6c26fdda457354ac5b504018b8554efaf4465e4fbac6b932bc37da82cd7e9450e19071f1027218d5d220e498a82d0f122c179ff8b617f558e09ab7663d6b17ceec0eb7d078cd07ffa93bf56badd285b0b757890690bcadface5016f8619ece68ef71fcc950e1b122e42e444edb118939326b7c447851c5f5d5b0c2ee7291957d9393c2cc0c3c116045ea107dbcb405e720b974b18ba49ccc0b8a673603767539cddd7b6"}, - {"0000000000000000000000000000000000000000000000000000000000000028", "0027b86a64cea883bfadf2d685780a4a1fbd57038b0a8c0348655c4a0122abd1142d8e64c8d964f0c545177fc7188c9457befe7da612e4537c6abb8a566df643a78aa62da27f035eaa557aae33336d6b6d9bf5a1022fce4aefd6514ff7ca34e90a75a315e360d7d0dc141d0b4bfc8a72e3da6464d31edd67dd3e93b932963b5dde58ad3580d1f8e5e72078de69b1ddc0f1536b3ce2fa8d70d9cddf86cbf5aea8bd8cb2676474f58b03a0d4ce188731ed451691e44954912ce37bdca0134833cdfe6a21421943e9461ac271cefb520adabec0162e3277d9cb3a50fce4018cb61487b54bf41c701b275b778b338ecbd8dbd6957101efe621d3f17b9d3d0a12a65ae03b6847deb5e130d6450564615a1f9cf8175425c98d87193aeb57652101e8d565b5713cc88e16609d7926cfe552f84ee4442ab7b4a95833bf03f32d8a7bad06132388dc8c273166fee116e47dd740ac011002bc0685dc175c8527337b55641e398bbd700d08501422fbb3c00bdb6a0368c1e8c41cedf01c91ea1ccd593ad0505708bcb192d2b83a0d3143699343b2236d538c886a3d25ee0604191c76db5d8be93d744404e1b327662716dd38e4c186164a25aafeaa1b61f646b91701d63c7aefed898be8f3ed3d8f1a6cde2dc7213bc92d0f1a90774340640e02d92e8d2c67fb823b26b987fb2da02959ece354d44675afc6766e13f95806fe82407e4286c4e53d636bf9c0130544d833319b10ee760558c7d9d9b580382ef06eefce823095bccb072ac2915f5431916739a3e6afb52092737c7b1e9b17d7b96a0d46523f883d129d86d05375c684f839ab0aab3aa79656d13fa588b0ef5137c354b2f67adb7152463a99c0d820d9d4504948baeb5322e0877a164d31530b9c524d878ea4f15533ea4b065ae604f934473e27ac9aa11d1453a5b8253a5450fd0ba80ebf8fad01193fdd9d2854b9b8d2e4cabb37f461cb1d8eb9090324f8e8594c4da55c8f92e6af7a9026c1237bfb00055b3e9b148241cb91ec3364564ea439a2311f47411d77bceeb80dc2fd6d5582d7db7723b994382d7b41044f96b14988b1a3d418d87ce252932a8d5a76c06b29b3a2abb0e3ee99cc6c7407fdc21d46ced99e2f020ae144bc824ab4af55dd227b56cfb77a13009e370917ddce992c5c5743ace012430d7eb56aba1b15dc3c0637d6fb99c270e672f526203e393b29a60dd6aa1a38b4fc45a3ce8898e42c58a138d43b7753cb1ecb500745e45675dac219f7b0281e375b4a364e4dbc0bb62b3acc5e9b4c3a8ca823ea56f75fcac6cb6556a7e80a1264e343e3224569ab049bba61b5ce4b40540236332fac09af27b9e96a9c23a83e7e26d9e3611a356513a6bdbe340893fb1bb072d9853a88d28c4d777d5546af355c08ec6af9bc7e155f265fbe571979bdca480149d32d8c598056cef0b495a6cf309d95166d9a4505d55a3e6482d1929d0f3523b738433fd883bf3ea81d340e6263203f2590b51226b03589f931d9d8a2543c7aef6760916de7006f33f48b7cf22a3dca74cf350d318bddd95e886dcc5fa43004b2a5cd8899ee991d52e2160be49e2081bd6b17f25a7a64a21a8276508a41f17fc757e152539422754b31c8a0fee9f69da1559a57ed3bdd6bbd9785ba3b4bb05df7734820fd973703e674e4f3ce5e268aa8021f7077401612b4df3f7f18722bc7d19efd23059ec703c0669cde1bd71e7e421794935840dea4d7c897b449497cd9037500beb3642ceb067b8b358379fb1885b1dc2f023d7f642ede480663862db044e073f990659891457f7a192fd6faf31372678ff369c2efac7e522e2ac1249792441ca25b0721349497c7aef9b558f22348421c9e97f83d3f0311b7a1b8af04aaeeca0987dfe26220c9fd71742a12"}, - {"0000000000000000000000000000000000000000000000000000000000000008", "00a252f67d00340bf9f030ef64ecd502a53cfac828403e6ba98c110157ddd7da2f0267b7fb82fa3d98ab01c886696dac2a27f13520ffd5200f89e630543b5529946cc4b4254bdb7ea1b3a377da2bbd88d330626a10f7a9b785045ce4f3b276030c37f31a09e7bb4f3e20fa6406cfd53148af91e2f5c7ed38897c623900791dc09ddce2907d5997f1c86143e9a33701349f724e2eb8853599e2801f3170c4e9cf6275d24dc01777cf00e4f9a307d87d3d7d1b23b48c5401b5f7281df44d0854afe2ab0435add05a8351c751e4759d9cd04e340a4157521ae16e074c7886e6c1ef67469a1fd5de600c523faf146f121bd9ff15c97341a9ca08f8d9b3620490dfd9fc2dd231dc58b0ae9d5da67ca921b6cab20c7376367a541175c3ab068c2a44dc3ecf301ff32d157673e54fcc20f0c2f222ec78445a320d937ac0a74ac04bbd41d331d2cc6dc6c3fbca772af3a977fce103a4182ce252b0a7aac790bb087aa02926944f4e33317c72539fdf4ea77e30a75688e2f51e83d73cecdf080372d5b2a81e49e8a2f0aad69d0554c635f9a23527f856a8362c4f15ee3426d44abf00d5cc1c5da0552d2e8e3157dd8abaee35e337852738ad1a8e8ae02752db03a4796c28396d31c5a152684a4b4942fcb73b312ceaa2cccf6fd37b694476502b777ec151d671643b36d56a4a0ede41059c053f513222a605c032a93703a9d1d48236881bb4efa5254856818322d81a39f012420ede7bdd677dacc8547949bb32cd5c2f4c175f23612fcb469771e54d1ca3a0b3f8aaf2024450c3c442f6edb5b1d5817f7f6ed8f944ea774af1ea1d055e10fbde7d206d9d3de958864cd0caa065e7407339d81762d276c22553dbf74c43044dc1195e0976973b0a1e461166ea4e4441d84811e973918bf1c119fc4b912d0e1e9539180fc96ed722f654e5acf33ffb5c575700bcd2335926824b5766e1be7818f3d586ce1b07da06bc8490bc899a7321dea0fa2998ad573e2a5a144008e32a252fd347c5d22dc43d6ea3af9b988ddfcdea0c3fc6524d896a1afab606aec2d63051beb038a6b32305dabd66da3415d0bff2d959fc03f25231bde7542b8ed7cb29dc2481790058cdc1e72817070cbab04f24c6ca54e8cbf09b950b47fce7c4b7fa2ddcbe669865cd660eefa3307ff8549a8cc47faf22f9f09a19b0050d7e4c3b271425ff9e55a4275d66b98c633e6124114e74f697b04d85ee0073ec04e10cc367147c22552ffa93422b181792f72483b629a168fe7fd8f7fda37ab93fbfc1e582873ac4e920d36586069eadde8c8609dffd72cf0fd864f49299a50969e6c2ab03dae6b2276c1961d25e0c6bd9f233dc4e3cacce685b371cfa0f8e2ea7f32b8e8bfb54c89e9ef54b06b7c29e9fc433a93acfcf924b05884875fed3b6e97e72d4941c85035e229cf2488bfb44a2032cd3fd0a277b7d7e438d1a4e8615c6d8aee310eff435f6fddf4eaf30bf8f571e18dae0d396367f55b1e442d258936164e5353d48295c454b2a900ad1354a72d69d38d9c14d54d7881111e6dd5b61dafd9b030702b2b6299be57c761b86a653b79e35b9671a7fc2ee185d8a522a8e5cd5f3bb1744cb327abed59f355c82b617875a664236b03e78c9699656ca3aa453c76c9b586834dac35b202bdffb5d047baf4122ef260fc0f9c1e2c35a4988e4896fe722432786788e521cc92cad952f5c69fab2437f19fcc80cbfab9a32e5f89f81a76938aa764b97de6d9f2fa71af692d3e17db64bfc38d2ec015ca13971135858200eb91fd6f50f29d7e264b2449a2f6d3965ab9a216b238029b1da8b31d66b9693b1c2e1d859cf4290c70516f95741afcf00490de1822e715bbc168e66df6a286e8fd3cbb572eb31c9979828f974a366b4a315effd"}, - {"000000000000000000000000000000000000000000000000000000000000000f", "00380378ba7a2737d52ab5c5f54ffd6987b176275e1c90ff424fe5c4494052a39e5a34edce3bfb7acfb71f2fa78d2f26e13f8965340acb2cc85de717d7626d306ec22b8d94868f9a2815302943bdee2d6e32a34c008c6bdb2381e4ecbd3c1696a05008ffc7fa1f278e2bd95f7d720f7628b735636c91e194f639fb5410d80262120a0187a00467cfa1064db1f67a06a23e690e27dc8ff57d9b7285077024b9d0465e76c4ae1ef1460540c17a7a4f3bb88b193094a06d87a1d90a562dd70ce5cba8540e40b5b6130410af3efd8e9a9bd70dd3068f4247bfcd044e760061c823ae5c7526ed5fbe35371c8a5b80e9e995dfe685e0664cd24d7e7475b45b099aa4ea599297f4d7a18842c0fc26bb2c6d9deadb1d1403fd54d4bd7d9a873b422360b92308eddeec872910ca3268716307c85f84d5a1dca50aa5a75dc758502c0fa0179fecfb7c565542357d431222023eb1a001c174ae1b0aae387c4d30df5944abb22caa93e15f4b63cf81df53af978ee6b732387faa064357b533c81737727be767b615b765133bcc4fd3a2b2481792bd1755ddacf2a93bed8768f2066e96c7869ea197bd8202aa2f29122ac751bc0e68da93daa6a2d0fc36921821cda1dd4971e077cab0426272bb2c91fce514cd221f5a9f911d54082efa8647de2bc3671eafc7be9a222085ee278f257777ae6f5487a4723db1b0dc5839b809a32c5c03534cf2cced0220f03619bd632eeb37fa1481c590a530d215950264e7ffd81e56e0af788ef1117fb9297909cc6f3b0d23d77ea1270d49895d47652812b6bc4bd37a3f04bc054e7f4cd3a9b9be1b38c419370a469ac6d6a13132f3ce782076817acf4f9c9545e13d751ef1ee29e1e4d474634ebcc9df581520e72748a472bdeb0e67cb2ab27a71525c5f2dc55bd72746d0fc7150a688d7eb2d699ae1cd27bb03bc7e2eff00bb4ad7d74c19ff135ad4b5cbcf7315b7f39b81473aea96e9c27174bda3a7357cf16bf84e776c99583615927cfd1e1c9065e3c622187a4c126a279792621324b83dabb3d68d3b1497a423b848f296d983fb43bf0129f6af651b1471b71e20cbed33d0c443c6b7115401b6ccb6f3a9ae9f7e8e642fdd52492aa78c5aca0c2109fbc451cd65c301b04438b64c56ef71ad1fd2cf2e35aeb3d89154e9782ff5423ef29691f164de69ad02546066cb22a5592ee3419dd06eb4c47be3e76e37042ecbc00b03d318383211bf842f307b78c2bdbc1e0e5abe76f41759f2ec9fb13dd53b426a612cdfd234156deb1f1407db795f3b126e0fc47f98adf493bbea03c895048fc16cbe8194b6e40cd3c45bb0255e01e61acd8793f6cc40569478a8a958f98757a65cbf92680a81b8ad6918c7b8ecd2f2cdb8c198619a6b32b15a0cd0c229dc56a19b6e7ad85b53fdc16e30c2b7f64a013da7f54e6c4b798e94002e8c9a99cdd95cd7d19b2394e728448e485dc694f4e0183d852a19c4d87e19042d8ddfb12dedebfafc66d6c05b40a9e6ca3d4ab11293c0a781cddcd5b3b785dbe1696afdce68d9a59b02b0bd81a89748acba9ea993ecd043ba931ddb26091d27ccb22ed4b37de263eadb1871f7e2f424ffbce803f941516f0ffa72b19483abf9bba7d99cc5b6d2bb0f73e39e4f4aa90f239b313d2fdc850e855075fe5e02f839efe19c4944fb4a22f0a42b5f3535381d9e740fb0c20784a2a0d5acdad1c19dd1b090974557adcb05e0f1a11628323f6b42e462ec7a8a092290fc9c4e180595dc94a7f501dd4b96a47bc6e67dc80f703bd4070206649aec5a416a1c651163f3aac34f553d9b7809546864e56bdc1b7d54c9081d5748be5b08d65bb93396d1d1ba58b992c8eaa71c515f7e02440394d5fa3d60820ad75d19c1f06ef53fdaeb4667f10c3f9036"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "001537927aec4a13a14c69088b53094ea35d7d0df30ef963132c9bd3954cfbc339b5e68110f45e1b9deb0b929e2e604715e7b53442e5eb2b2ff4c7b7dd33a10d810b80d226ad43b60ce712c9b9d6462464f1819b013ce20cd48a1e8595bae5896dc2b04a8ba95b73e80a793aa4a1df78cf4ccb6375dfc8069cdea6bc6961026d9d3cbaee87eb9c81a36f70a51dd652735a810522e80ce6cb927129beb02481dcccc7b7926a3e6ea10112493b5784632da024262cd3695eb9e0a19966e4093241eec76589699298a319e5b45d29701ef292330b4a5bafe7857a3fa3b5611f1f097a3167c6316a021d1549ba70e43ba7eba3c22da8541a476aeb9f641e0936ee8677a77dc95540a26b6b20a725fc7bd541e909b130d1b4d4b6acdfd7130d1af9d5b4fe92b51c0714a16b48dd5babed6ade66598e6c95b1f0397c63dd6f0ad47d602776e569e6b7a39dce10860b52bb3b80017418af928cfe59c0bfd867a64a073e3ec196dd6268a95610602f1715d6b267a6503fd07b79181cb3ed03dccf1523cef2269ad357618c5ac6ee14a736c88805d7322ca78d0d0099cf8362c46ca504ead910d8880414eb751b7cb03fffbf04407df66e7d831891e75b0de846799111be3f3cdf2566a9f9e67f3a9afcf9710a54bc19ef50e1d984e4b8af57dbdccf129bfa27ce4aaceebc5a5fe3e3fb543629cac1dd4d94983d159f040aef3ef01194a96d1014053ea0ba5ef007d91bd52898a44e9aced6beefc2351f5bf11d3741c09ce2ba0ecd132589485ecb283ae1012576a770b10af8ccf93db8f2d8ad0f7600e758048afcaacd8e8571d91a90093726002a690a87e93a28eab4f164b6f93c1c6ddf19fe8d9beaa2a0516eba51e16ab4b6ed361f9f43340e3052d7e6d2fb66ddc78a10e2db944a94e6fbcab837c767adc916a36df75a74492776b7116f3ffd695802e1124fca5403afa388137a913a85d9ca54f642b237d4135a75554c74ace8858acbbfa87e032038f9de091ca91a1e049bb1a95486dc43eab395fe04d43cbd1d2e92ed559a1614e58cc4dc3871f3965e4f5941290ff409b818ccb2836e198a8a2f6f75a7b9db7e59cd22b4b2881127a9c3acbe1afe4ce6a98b0bf67d701723dcaea19c1d68abe739554d53eab7bd8835708a9d7d9c7681cab94ffdf38758196e52efa609db72820f036d44f0d193cc1cfec025913168e992f8e29edcc41d32eac2f3d5ab1bb90962a4f5e901a502cdf6b568042edae57550ad0b16928239c8d67a414a082cf8b51fd756ba84c87fa66d729273b3459331193e0ca73703a6e01daaa14bd583cc68e1564aaec6c0637dc9730ce33cdcf64c05e3ca06356af46ec3fdb4d4315c9804c6cecdc9fc53a9f688409adb47e6ad77594db6001d88613b3ad911cf26cac5205ef1fb719ac0f1cd8e036c0a4411df3b45f6df77a28ac84403ccf1fe8e7a331dd236a75ca3d51cb744f1212ac95583c85f29b021b1a7b2574f5ce1086245d59560673a3513ff87d131e5fe62f9189ae346f8a3b2ea38c18224a6bf62c82c2853cd0a4f0e77e59fb3c88c206772583c770c1848a78ab00ebb8379dd15e4a005d0b66616b51fdc5e304df1bd1de491338a29d47994da288f450cdee89942706e9440255e4b7f90f71a7973c3e2a8df7764a709c6bf09cf49928d29f8413f73d8685144043b440b0ebcd54d0e0ef0a92bbe622522cd7c2a9175f907cd211962b2988ae64f8267b44c816efb7a7464d8bcbc3132a3e7d64ee79f04ecf45069aaeecf19cab987ff0eac70a888c47d6af083b2940c9c17457e7e3043cb2f50a35fe54cdab89ad9936e19e49a3e86f47d520c312183f68db395d3a858c34d07e50e79320370ab4431cec25235d1edd1caf616cd1dbfddda38a11d84ca"}, - {"0000000000000000000000000000000000000000000000000000000000000033", "006ae52a88212fc3fa62272a6e6e709793df7e57810d84eb2bb30add30c1dbd61bdf3f114284627b54a6049ee8366a492693b39705ff50dcdcbeba4e7d235124e8d2b57b5f3f33fddbf3fe0fc9b64914d2d0d96f0b2fb6c16bdcbf6ffbd6a5f01f6470d6da8659ae5c0b707f6cfe32402deb3c5793a1bd5cb6b0b0f6008f17ccdce31cca05bb50a82212c3e153dda6351b45751eda365a511456f57e52d325b5df7ff96a0bfdf37e0209e968ae8c6922dfae55a20d5e2495fbebd136c52167424a595fd554feecc8552cff017e629fffa949093af1725f65eb1d71cf15eb1ae1745191e05a47320c2fddc72ace491eb049b233c96e1bfa0c107ad5c4043e749223c9cbb95b24a64197fb095f1a10bc011c3223440c476eacc19e2906e0614f34e256fadabd810af8fa5c11eed68d7a1817076e5a739285f8380c180ce4b6b8118bf534f47311e667120a230b4118f0be029eb095d01a458b860d72067c209d29f666fe8d6f1861a3aac18e3af4fbe1c6f03d3f9852810c3cb6b7046096fa098803ff9cf2f16c61afba10ca229d4356121546db4b96ab38d627386d9948f70a241e57664e042717d5d18e6e09720273fb3fb824d1cef19e064426a22f2016ed48f9926da4bbb3376841900e7c85e9185923fe76c7f8846d2c74b259dc612d81cfcdd6cf39ccf63b4dd09f669c03945dc2b080c6319995870103d9f1de28627211fd4a51d9e1d003997d6b91434709871f29571f8c05dc1a426259d8703d86135a318518fb6f3bb90fde6f9e51324d184897a358899d137b1bf04205334eadccf921a208396dca795927b48c8a163fe409b557af210ec6f304f4ec721e7459bddf284775b7f8edaabc4b587544fe59ce1d931c515a36f11772afd2d529ac796598d2c559bac06a36597a06d123cb815fa4491a9cb94feaa2ecf6ccfb105c5c31ff01e562da1dac71e9e96ef04b997079c86070f15282196bffa3eacf2ccb0debd37681e813f68cc51b47ae1886729cf5cc4fc7b18ae60d55c23421ee38b89fcb18f71940f1d20ddbc518948374e3f17df1dd5f15e908ffe16dbf129ef33db89396f1f7600a756433d69914667cf26745c7df520903d1c3491d70fb42ef7f7c40e11c854978a797e431b53df55156e6d063df01f64612a5d375ddb01b032124ee7366d9fd5a4fdbedae053beb5302e94fdd70be31a9ce431bad3df9cc15694ab3bf1ceb641e2d3695c588bcf452576e7add60340c517a715db3f173f2b6d27ad59dd49203501f9fa92b208d8fb9505f56b2ba55b7e76076435e177daea6079137329c87a4c493ddf6b69a7fd9d632a07a0be314ea86a0869a066d4e97525f445136c9d6e61441d41662dd0d450e97050c4ab1911e5d1089c3a8de79c224c39eebae4e64c0c2d83326f4d61f5d1aefb63157034c5d33d8fc4cd7f8b473483aa6f5a671e89e1f4d5f33935c7a5c0e6585c329393c72204e5f459b29bf07457df343071e0731fc93c1a5d4fdf956aebcb7991bf62fc4b217b5f4fe319700b1ee826e3a85ff4e960658e9b93860d303d902e323b6a77aa113951aaa320f8e74a2ab3327cbc861c250017fcc2572cb11af0f1082ccafba358ed7ddbfa1a9ed3852b11e8d349af4459f854f049184ebbb059494594ed5f214b871ab1008fa73c1e8c258390978f5332f55537e9e2257c5de16c8e443d12f646dba7f51f0143e5ef5141231e5e21c8c521f285fc7cbfaeeea06a75926e3585a7ce65843e96fc346257a2f5ff6a491833d0cb656ded2efd21cb4fdb36466b6d1be65a9643069011666237f28cb248a1b02bc618a2b6b91a854ef6b66b743487fa0a73bfdcbce94e78121961f570346dbf0a9d729546ef1654abf3fa65ed1fbc9ff57481ddf2689ef15d2755a"}, - {"0000000000000000000000000000000000000000000000000000000000000076", "01a5ce6f920250c3a59ef4a248ea6201bd1e907346149cfcc5e5c7ea7f169c450049515bbfc345df46d209600d062c6b24f5670d114bbfb7f0b867cafa7fbc0e214291a41982cb0fb791f559dc6349ca43f5ef2502a937b6abd82cc5d9b52747dadf87c73c713aa9fa0d480cb4d0968a0bd36303c09ae397de9f9b1a621325aedb2820eb0a8dcad73382adae8cab2be5395f88330e23ae9b55aa5b4e2c568c7ee4db8ddf4133abf209f5d54295096d53046f80c586e78e3d91bcae5f263ec2bf9022e853abc080c569f9d53b799f95f881d80f2387b15fc89d9faed4128be0e30250e3e4b6349a1e732196a610dc429460661101d47401fa2797a0cf104213aa43e72bedab5c38c068cb7cff4dd5fd430b197016a12c927960f07d9278bec53f40f3a3dd38cc136cf562300a6374fe5ba29157cc018765293b35fa2e9a5609d4de7a57711ff744c7400e01eaf7550072031d845f7a90c0dccc292105e6172f9c89edfa2c4b1d3892efc559835afb6662d753c8351ee91a1d67e20c1ee99b034703d23bfb60d90c6006e219bb1b85260f926a815e4585fce750a295156081b11f909b910b13be41e167a68bb7bbba84697b4ec65183da119cd617d31adaab15c3cb34ff96230c7653558f9e7bd3681c808d65994732739a63024f873c9102175998d2c35896578d4f2f5b937b90c7e5f743342a6ab55f2fe40cbd5667a713aae89d5df48a387e6b56b66cb751063d19b4401011065d2728f8d9dc786092ffd75fd7fa32e0470cf917a953872e53a42a6eded5384eea16f73ffd93b6c0e59df92e56f4a84cd75df2e5c25f6e0810f3b211fe623ea57d6499e8417c8ee2a4f836cc31359eb684d679f22fe77d68ce6453a6fe7a92bb40651f787a83a6dc6473af674494d0b8742935d01043152b4ede767ddc008db54d8520a5aa635a1afa18e28503fac5b9c54263c4aa8a12a0c53459adf5c852006d0bd55d4fb774dd6dc30a07b389e67f1fcf43ffdfa823ebf30d22992a117be7aa1e16da7846d2759fe93163eab4a2d5e608eddbea79635a7a3f5abd127980961d56ab09aab05b0d919512d1e460556741661a926928a746a4c566e0ad5a7c67625c7ede2e06aa5bc51230b43b14d4f5bd8bbdc2f6e47dcbecc60f6e730ef041e085d53ce863414596f52b7b65b1ed89043a80ca03fc0dfe1f586c4be930554b74c921af49ce7c948f10da388f7715a488b532eb43c3f1ed6ae34b39fbca0712c2e206d91efbbda111259b0d2c1a7f4d53fe8c626b8d4bd75c678b2eace9949c769852e08df770280b466ec6af650c43a7d8e73fd8768a7eb47e5979041ae605b889295ec1beb8143766310addcccb93c2d90b92abaa239e8befa78270ed8afbe2a988287de0d921fc157faca05b01a675265b36ed5302b495f87a5603ff26982255eaecc294f19addf38cac71261b7e8e169056127b20e6f7f282b763b5c49d1647755471b30dd6658b8009d92367e7a5120cade449b6652ec6d2671d45023e6c934fffe0a6a17d63d0523cd1df53f4055f7daf4b8d1391149e2854ae474122201e52ca211675fb1bf386643d6b8ff81990fe8826bd1edd164405839cd2bd461fe7282851a8fcdb8b815c527a065f5ace57bd66d87f3b9f20c67abcecc0b76c03dfcf8c07261df8615ce84cfcc0f50617ddf2f9537499d0b80ee08e995da42d3f5316737d67fa6bd9604b962e5d3317efee1e61f7d19e3f138f54ab98698558f100934e5dc438cf59baead06c69fa165e0282b6467a01c609aeaef68242e45912eb75b4087000c1ab63f1cc260a87494285c8ea32bb98116cc1c2ee4df6ea7768891e4d8b41d5aaa6475960651d29752949829072a6872ede41937c0bf29b8500b58f96dba3aa18ec71947e"}, - {"0000000000000000000000000000000000000000000000000000000000000021", "0015e684091772537476c6496bf9144317c97aec631abb2c9d7d587155eedc54922cf3a68283009f644406bfe1766ad351e725d5946b966c82b942629e882d1dde7cc30ce489419c6b12741532c910d0df924acc02a683b3952bc43de944e0a8c21535ace1f1493b6003aa91552c14a33155d1b62dfabc476633e67fafcd0ba41dc649887c119ed7a2e15b242f561fd21ae0e615b45d0db6c87627c20d196284d512736587bd96a703d4f3b57a168eefd2d1b5ea96b8901dac0afcfbde4d271fd1e5548d69a3f578a011f4b76b35421bc8ee1c2dc4c6b1dbe28b0827b602a96127ae0e6cf43b8b25462403109e43ffba58c436f4aa3d190ee13b8ac709e2f1eef2d37b8b8f40a19f3c2fbb8f3d861cd4600f07812641606e819a75314c22651e28d5c90b6fd01b87bb185d177a59301251f4e44c9d36588c193ae93889554f25a378895c94f6e064d07ba5eb85d913b3023cb638207bcb47f339f45d35a785d63b9edea89e0b39916b8d30de1da7da811a6d5006a93b305256a7043cef758c96a52aee33b2e83269dc354c6f36289b2d46abb38bd356f5fe9e9336a3e5aaa9b3b0fc00501048b9997a8a0b8beb5531400e6414ccfd1e4cca417468ee4793ebbb0d804b5926d55fe4eb6761fb8a3214ffdbc57b4cd8135b4438c223dc1dbe7fa8fbd1a11afb82ad278843699889c1e8e167d7e9ab6c16945505eb8322cb118740be1c017ce88e1b992c81965fb00e3681dfe399df7d82d5b13d18b0ef7dae8c5e3be60a036fe80520b0d332f6c0ca05d84894e10f0a67200a5f5d6cfd98325aea60d1c1832f83a583ad5caf4d10c4fce43d9395e969d9f281f29621212a51bed37e29bca537caaa9fd3eb66e738d0725a5a8e403a06e91c5cbb97761e7ca71baa18b6e9f5c37a7d3dfc38992248cf548a0a44586dd223aeb7f06b1d2ad08b414e005390ad811bb1b19cadd9837b713282734ebe0d342330d29ed1160c3efc91c6fbce40c1267e3a77e99525c7df540edbce89050522dec82bd5ba1ef5d623ac38744485016444e7625483f904ed793514ef1ad8c306b184f2be9a9141eb6b54633a45bf1dcc197a07d10ac176ac1d960d797492f80c17ee6bbe4b90b45d33077225ae12cb4a669941037f1521ea8919adddf1690936e48289211b8b84e5e41540a876b92e0c9fcf230a32e078c0114f4fa1dcc139b675a2f5a7b3bca04d3c1f1a88586f1c1781170656dbd8b3b3214d5f18822a56167be953feaf39cfec043677e74f28ba5a9efc3bc234354fa214b7c20e44b4b64a22ef2b3f5b95460bf83cb795a3a11f25d19659b8773c571438d8b6d7231d238957528b1b8887433a2fc7ee7d447fca31e31788f737ae758b1db761b26a92f228f999386cca9820005925db88f9505f95f2ca1be6ab8cc05cdcbf5d016eda0c4738f3adf5fe70505811742ee8bcff5b9a08c216ae940749550756957088db20b9a265bd4f291d5f1f9c1918e52cda1fb7fbfd5346f6ccacde857229d67a3250255f8bb960b5c024530d061582d1f7e7059cc147dc8fbda4c1b8a093676abcccc09e28dc534d7905507ef58f53eea785d691e63b11960259b1a20c5e71394b9d169b35e532c88f197d99db5d0f2639236df5c9474c40effbaf28c2976765ea5c3d7ef4030652754c3dcb9973e3f243673fa254250a836d3b0f2fd3ab7a070c98d3f75bd521c8f46d3e87cc7eb6c11516ec27da0cfd4b999a9575aa5b8142bc7b988ca3160df2c332cfd921a72211f2f4b0cfdd05aed80dfa0d15f6495bd6f1c3ae0102bb442440da31797c1271633dfd6a9ce473638ed91771c9d54a620d6d16cc3718dcc41791c96f1a9f2542905439d814cdcf2918942194296eef5f2eb1d0de52fbca361a760c449e64e4"}, - {"0000000000000000000000000000000000000000000000000000000000000053", "0016b867d284c7e92fe6a0fc1acd82495fd831964e144b529bcd6d320db5d7e22cb6c68cf224147e169e033e41203b4dd0bce12b41a530314eb0ed226d8b822670857b59124a27e206e280a5d05dbe0e66d8d54306c94f65c88f1103af80f5c2f87c4ee584d9ef864d075dfb6d488dd91f7e3c62b8c24352b6667478228d192c599b994fb19adff6128a95fcb5bceb9a4d73653acaf22c57669f41a34be6cffdd91fdb34afbd5f6204ca743a2f1d09c3f82a28bf25c63e6e5ed8340bb71145ba998bd6718bfdd5f39d91f3b0326f0f78145925e60c9c2c5b3bcbdfcf83853f3895d18972fedb164e325ea30967999746c738f5cafb4c16561d79d1b90d933ed98765ab7b97f45587fa773f7e2f11de42cc2036855c469531e54c425224b74f546560a65b0b14163352999c50953d9748f1fcbe3a5abead61ba67896c6ac5aa21a5f38b99501823fc4be4ee480ed8def2003dff49ad40852059cc518928fdd57eb28877182301f1d97d0103b2587ec1463f5fe8ec0e36ab1c6a720d0fad8f63c3d34389e7f59e967062ed981b71b0ec0eb4095292d1bcd1b845223e6ea570ccee127a970e00cb643e154ae0e4e3fe67e25fedf99b82a4dc82c30313ffe16bdfde77300652a56ac50c75ce35cfb5611667be9064c6c05e9c05028716d6aa7d870e7294362aa2bdb33f1bf09aea2cc57180affba307ddd870f105ec6e64732865e58533c109817539adcc3f398a9c20fc1abdeca05333b256e27b1b7d83fb7f005fca791e8739af404e159b7020930915bd37faea46584265544307791a3330d1f395b55203fa1f8a8e3334a0970674ba4232c6dfced631b104b5fa95a864acbe521c07729148a32f39c7fa8b834661c7574cd1c4b9e4c60e657547be5aad71ec4636719c702f7a25c53498221e1b2f6b07c8ce02ff3c836eb7573924efa2daf51201cabbf0ff650745708694e51249f47694c4bb1fef12de650a6068433950d08245f6eb430d63a7d7808e14bb2d8fb01ee0491f3d553226721d91ff0a3492951facdb5653a66f39be26126daddefdff2c48bd2b10098f9cd761abffa5cccbda561654a4e2c894fa92620c4ecba87403eadad853c8e75b6a7b5358437e377d25096d6e1d188b9f47cae3f30541e79738d21f7b6b2614773dccaa545f859ed32513f2b4267199f8e5ca03a16220eeadcad7f010f48b5f32960b54e29dfb4f3666fee4f48ec424b72a6870bedb653684541509ed215e66ed2c5295af3796873b315ce76ad47ffebf6b23aed5a27253f8cf58aea3f6c2d4450537a6be4c2f050aa24088f29a41c1fd41b420a8f15e186d58eaa8305bf473c32622b1336e3d77026c7faf7f8ebc533a1e03d65d9117190aec2406fbcfd826d2a6fd1ccf96257072387e5c52f2faa178d6bfcef7f7897fdf753b02b878e39880d0e6c6bf32e21ebe9b9d9d8b765e980738f7d78587b8a9a3dc919eeb25b80d9d46baaaa71558977c2268e8815aadc6dc2efd252ba44c3ddbce3d8d24be4c5a9f6982f7a6679e486bd345023f34bb09f84dc60a0a9bd0afbecbf2b5eaf70f15eb7b89bc2c15c4512692dc7ea049f3573922092d86f7cdc8970e3bd985a4091c807b21146236a4d4bdc2327433fb1a1af5522f0cb1db0d61224203c3997b2d555b6e56042a4f1c1b0444d31c1243a5cd60295e592396018226a09781b860df01eebe12b7145250b9ff6373886819074dbb64900804aa2da2095614b1657eb87fc8532fc6047bd96e94079ab7857b994028232c0bdc97ed0b03510f7d49c50101f4c6a3907e85921af3fa564720645ab7926ffe07a0a316bb21f958f76cc4bd084914b5d1cd436f20d1bbb951ef3abccd1cf0863cc36f2175ea7cf3a1dce5b32b32843ddec1ad391e4f3a38"}, - {"000000000000000000000000000000000000000000000000000000000000004a", "006612642bcab443b11c802cc88802e50f5433d33927c0fea766db5a770fecb2ff7fc73a8a153ebbda380446df11b6d40251dc8444c1ab66bc3d45b81f052025fd8e85330ed0cbc7bda96aedcc06e706307c17b7062de9a91d5d129fb917056c8ed359367f143777b00869fea1a49e9b4d4868d4ba3d5b4fd2d0ae59f24f0c8ed5f4369523d5d4f8e6472964c4fadcf1f9bacd1104daad85c8ad230b49b74ddf7504caeec33e1ab3028dcc0fea33fe23e614e0be6536f2be0967d9ec4627f7c7dfef902e39d292e919304cbdaa70ad1c147809351eb7a026923b4305d2eec5a5e81dabf9b77a872202bd4d1ba2f8532310f51236d698f19103158f9005810b058e2d0083da71913bc892d6b93d50171ffe175882453c62b9e930e0b524d5e05b996b4c93e04a1c3b699bf1d47ff93c2471de1b23fba07e7c32fd692f7f851671217ea73a2ab3a5c6d42d713a1c156bf40253a5f4e88d79f8bb222378643577a9d0bcb318c20f9b50daced95a10e4ee32400d303cc20c66fc64e619e365a842d33e2ee249f429a9253cceb8ea7d04cf4d922b901f1cf16567d358747c45f05e529039e6b4110feadb658cc292aec3f2783d5de66caa6293948941686e92b06658df6919f5aac555994602e19ff6842766c3d4885e6793d1bc63d490bebc555720edfec83a95f650a5e1de73617736a3403e5ef22ccd1ec05e064a489bbc8b5406de0ad3ebef77a6653e53d484ea0ac0a447ebc77c8302fd50f7ca530c6c4f36c375c3072bbb427d4b0c754d31b174f66f2eb64161bee4e41f0aa442ae61bd0f300006b60a69cd96243a5b33de0a7e317d24eed4d3837096155d772aea7bd1b73e092ac5b577e9edf44174ce544217b8999dc4bbffa51e0d4aa931677a8b17f97694580fab7d852623cb83e92e0c252ce89ae660ea03da0f66f5351ef97dbc58aa0193b41d589217faa65b70607ce3bfc53f998d4425312f7a38348d168ddd883ce5df6c72e3d0fc3fb7f10b1864fd72c48ce962938a9b7265a28b20de9e6ca8128c16d4e508b91ec0ca24ec2fd1f7762dfeb5919f0458d9e8ca04e1f88ee111ccc16fe16b40899bba8b0e2818fcecc593833aba337f8b62a0d522f34d776e05fd510799cc482fd468a1271068755142584e05db24deb5bd6b498834577ac28a02ece7cde40874f89c01df4281f84742132cdc93c44ca80cdf873fde7ffe23ce2a3d160bc2298d0ee40f2b21e59790c67d262502614a9a3c836ef4ae2c41c2add2f9cb014df9e23a2e68a7ba0c257625f34f68e1c070321a7d969e88a40759f585489995898bbba2c51b276a425d2e9aca7d1f4e42ebc8d5f6fae74115af62e56131a0561ac768096bb419580da85d31e252308ea136735d421fbd9a0f980ad31792662ebfe1333af3327429faae14385f020e3ab328df498bf88d361e466e3fc27908f59a04244ae60037f05549c86372acad71a8c511115894701cef3154b5df3573ec19c223064f0d52711519863d4baaaf735f6ee7b7e4a2359b0dd317fdb3ec6f508e07876b8033ea8ad35cd3a7b1054f5b424a85bca4e112b2e7d9414f702d8a36b8f3e4f24c4af47c9952de0ef85145d086eb107db6e2a6957a1699adb478c3874e3463a8b6953411e2db26f3d15cc9aa64c93e7f660a6b7bc33dd33021b243b272fbaf86f8f89f38721c1551b4037c87dbab62fd3759a0bee637446dff69f91f0a26cd6a16dd739df212141a5998edb738b0beba2f0594a454ad73077f778a3fed53776ace169b962a0f72740db908584d532f71699c9358550ee9199efb21361da8b08cc9a5d8496542f37f2eff8c1cdfdea00fffad28e08f916dc05a4108acde45621672951c823579eec14562a43f486ab42bb4b1e63ab217b741a2"}, - {"000000000000000000000000000000000000000000000000000000000000001b", "002b7203e0edc2c3c30dd0b90ec59881af1b7f981f14527d9bfb1192939e93a1fd5312b3f0b08a2dae4b10e8d3fbd65f61c5f07c41658caa82bc8564d1fabf1460036ca724a1455d19779f5c7fd9ef8d495edc880d4c8ff853720311d9502168d572bb9e6c8ede75382b01f35d99932904aea192b26ddcbe767e4b98d4190e7000b7b58c0a15b3a1528537702c87afba3de2e1177482a2d3952dffe2ec3336dbf762e5566676666002879327f10f8d2197cd44b403dccb5e86cf1e6e362b0be9efc5d609cdbff2d3270b484fd994938d37b305f10db2317808b9e40cd3bf3e2d6b6fad19ff961419ab32ab52543681cc70756ac9f2b97a477b56caff093226a9fba82857d2a0217820c21f20f51334cb381b297d2cdbee65c79c408473542540e64a821e4a440bf442e0f144e58865647164aea5003d54a83f431f2fd2f3e6c79288a92ab136ccb35fc50f46131c738701b5ef4d83317c37f2634110a452d00cfc94a7f04e0a3e450a466a3dd5c3792829beff0bc3ea08bfec1c01dab187f9068fb15746c1da2bce25cc9c69a4f68914f1478b201c34f17f82f3c8a023b3b9451d8d985b055e076e49018edde26c61bf2de73c78f445cf901c221e2203750c9db94a13c3f74543e1211a42bfdcbd0ad907f32844cc49d73080bf0e5310121c4b7459b423d186ea974f1bcfa5b407bd5c4cf0c62ecd7b9c3c0542f076fd5c8aedb9b3a0a489d4be0c7e99e4544e33dda2d38963f12f7709934840b22f3f4bc8fe6d0412659777eae24f135c52d2d4cf52de75c46394a9c420036600a993f3aab4c4c4063ac10ed936d1d2b68614b51908c1abc0fbde4963b2813d960d2600738ac22af396c5a51758dfbe137308f7332735d69933994919650b5a260e52cdfc03063894715455f9eb1121cb47c177f9a9204693ff13c4ab49ab54ff81d25eb8920134a8f98acc6aafa618721fe9625bf37d069ebf54290bf1d76f0a534bdba34305c721e50305717924741214464cad10b8949d95d149dfa5a0d1c180dd944853becdbe78de074f0528d865a1c9244ac7465753cf03f37ea22c8f9ef7ebdd5429a237db1608c636e0b8136bd90d6e474d7845ba81a76e17de94abf57b54f3069fb6304a50fe43007900b2071ccea45a197e3efc19e98e24a995cbafbf0f45f62c5ecd5e373e92d1d3047db85f7ec7e382979786a21350130e0b127587950afe6652b247ee4a72ed01aa8664ca2d0dad504c6004915181c84446a3d83fa6459767f7163de478076a2da25d3b4957e80fb646d3b2f663ff6121a78cca19071a90cbca024e9b015f62d7abe24721029ef54e7e24593de42e12e88d9316f35abe6b5665e900dd7b022f23274b69164ddd2da503f10bf8906eaba7ba363634dd425f91e159bdf5ca2390f62620655b8fdbe8c9068ccff9a9ad20918ddb61f77dbbd15083cff6fd9a0709d51ebe533d9590efa26738366e8d62a97eb6451dded25163665185d58f7c520f7c552f5368fc486c2f7177884e54d38f28c8395d4a5d809f1ceafb3d9a13a7f6952c185108ed04252fcdd2a8d29942dbb3c638df74bf8ff32019aadca4e18a528fe6381852a8ea17d6a384f15063799ef6d38b2adb3ea9f83ef3a0814e336d4f6f1b55758dd3d71a7a63e4d25c6d3c1c9b0a0536de64662fa179abba11607810d2d0bfb775630a63b30afb1cc9b304b7a22315e3fabdc2d990dd4e0c7abf1d3998857dd473723f60250f1128e7ebdec7259ab2198c8b51eda40902a342af809a3fc87ded661ce114a2b2e87c53f16a264fb4ba820f391c9febc136562bc502aa4503cab9e542f7bb4082cd5bd93a0d2a2f352ed5ea5a5f7746b77b9b427aa20a3a7242ad31f10c3c37582afb14cf77544354c6664654389820"}, - {"0000000000000000000000000000000000000000000000000000000000000035", "00864b678b45c8f923b8e287b2ed8550a9b11a69af25d70318b898eb29761cb859e35dedee4ddd193fc3025203ea1cdae5a31828926001f089bcda1051d5e8173077a0754a86031de826ce8afbfe4653c0fe105c0618d3dac64b6e44aa5492800973df7906f6d11b592a06d55f8d9a45719ab3745849b502bec1d27cbed60ea7376e46d5ede7b4f811060731e84c8407c7bf743cc1e48decdbcca4f0574405404c314184e97d04f6102feb8d292f5ed3baa5f81aabd91d3238977e8af32910f9ffe14d6a2f515d7572d9e59cad81897ae35e14b549fb806efea57acd952f63d4dd0a92fa9600fb21bf27c4bb6a619967b396f08878272b6d517cf80614d4810f9cc7d9663f8ba51280baf2fd7cc5fcac992abb618567955a85da56f3cb56fcc0790d3b09a3091b573dc8738f9bbbd8eea88f3448abff4a573a5ea32bd2b3ff70d7b72ed835b39a3ed270c91fc14e87110239e7e22e12c0bc97dde73f4fc05c25fe235e24e029d1b994a9e39617d9c1c6ce2c60e0f7be07bf7dd7326cab424fa450a57f0e434db33c7889dfd8fe126237c39e5cd51bad51f43255348d4bde8e13b01d09250561790c610854a4d30d438d42548f1f27ab9aca0b474fe2b0f1e5b137ca0d765ca67e82375491bdfcde0d6b84a5bd45ab4d944613777af7fdf1b773fbf65020b02ca881671e6d62a7f6d60066224e5d38376f4b029e40564b415d60bc07c16650b68bf1827c9cde9a08ce9bf52c897546cdd3c2bd0fbab5e2e65c1cfaa61b729562e9f3b595bde47869be6a447aee6adf08032ba08bb64f5bf581cc71f3468e5895c9e8ffff7db207b727d989df6d5d178570fa55cbf302b570db4c684a737d591f59f26fac3df5e2aed9b995d093f7c3a30d9d4c5a24308ec5ea7dc2bb6d799e91afa030143a17cf17fe89be9239fea554c9b0d893cf072cdd8c5701202bbe5c088497534e2660b8b9fe2a38e83cf6173aefe71148f5729ffc5b150aa4fd6c0f2bd31e3e0a112793c2cf7a8c51e0c4969038d13746686a959b0c37052ebc69b23019acc58b27526220b305c179938e07c7c7b88949aff685dd51abdf58c6147ef63632bd18460bc0144eebd5231f588cdc522d7a74afb76ba90999bd421d2386fdcd1e07c6eac41e2705367da8961f035463dcde6d637a01863a30483f2643263d136e038d821b428b603779284293edd05de0ce35ef2c0e066641c2dd5e7217998599a29edbe13e809ad42cc1157af4c89e8a24db63aaa6ff2b46991dc8c1186e5f1d9c773ac1d76d4556e68383ec53fdee3be9bd8c2a061cb9a17451e0193a82a65213468c374aa43e4746192d56cd1dc72492b2f3167ddeb899da446a39d0f424ef99f404ac97c7d659b81c54c43ef6af45b8d9fd646153838b2bca3b7563c66724f73c822bdd945503014bd9b1ed9c1b7371c0765a2f704f81984ffe10cb277b1a84ca49f871bd5004eb214760a2fafe5fb4d71df299f806b51689b3fc672959d788122999147a544f257b92429c4aef1815255fdf61473718231e51df089071aff21e8d69faccc1b0a46a191074af2407590a6409ad2457554d7cedb22176fe161a6d83738daa0bf55ff01d0766049e0a787e226a47164eb4df599e0f148143ceda193dd7e3f26f5d9fd6525eb2fab117022b8b7ce18ada48f8f561f97e62f0c2a46f9f790e28482692cbe3ee899a8c92e8234cb405c2a634fb001714f6cb7e0a51f1d472c7505767d42ade3e5fe2b75a2e4751b91f4ee356e97674c8ef3efe2cde3900a018c64d6b2a200b353f434396a9bce21e42b175af00393b1c58ffe7b3e3653bc67507c39f89a1bf1f03bb1c67ee16df50ba3a95da443e8663deaf402f7c95ea43e466c30a9540e0d79a595a5463a3f2da9dbf9fd7"}, - {"0000000000000000000000000000000000000000000000000000000000000004", "0040949b4fdd92896644318ab8143430e9e3dd67f8079f1dda83e66fb18d1012a02065dee628cbf910b416ece9c7678ecb84b9b9388124530922802d1e3a772f271a6b2f212debc1ff967544feb4a26349bec6060717b5b927278e7d4efcc16a68376809000633858b1be06d4f0f5794cfeae954846d687532dabff7fd000bebed97cc99fe1b9437223dcfe488577be6bd23c126eb5486848bc3b5924854d540692542942c9e630902055cc8e031e39db4b762867415247208513b868b1607daf19d0c261e6fe74441147a5dd12b91cb7f2409040f0df64f95074d445413cc3dcc36a43bd761620dfb4505550db95e7a8375c00fe5332a18757400820615ccf9db02fe5b8da8f6581e6065a6504bbf25b01db7910d84d2d0db000c13963550a33582f699d37629b74fc3411a50473e76a3b20da6d7e5dcf5918a2d2ca91d245dee9fffde6f533dc4e415199529bb933300b96280e74dd28beb56b133b1adc0796003d0ebf74b9e6ab94ad482f92f861d2e4b772bdb988ebe3b860f8dff0166481b2d20082195471d4f6a6de4f4840122e627858b1cdfc384c93645dcc8cd223770f5222a043bcda4707184b5ebd3f198acdbc5c19543f92b1016f5a97a678b8a3495ad89c3215656debbc638c2240ce82cb5e6ebc5a1d526979d4ce79673a43eff326b684a058e03f46db5a87eb7fd2df4629785417ce6a506684311dbe68f25b896e2ed9650c4e1e9c07a5ff20909e6f93f151e53ee04963beb7cb8e2b5d837065d0b9b706c1409b047a2e21362c2cf3769fbe03f5e9710e5f53bb18da0f59dda61bc796b8b354a3fb9a12a0c37a2252222ed0f7fa400f474f87f9a729f7d67a91375a5539a470612b3ca34da3f4636870d5f1b7ce30e487373791668adf729f57b724608fd60e9b7d6b96c480564a13399c1c9dbcb8e536e1bfaf7959c2584005d6fee49c218aaf0fa725c85510d295066529e5b22966f4f73df0a3b96b43a2e75db6bf304333f50e10fa7316ef7acfa236c38733605e779bd204458e8e0387b9a2383e0d89dbd1f84856b2d452e19525c716103ab1d72891ca2f94b318486fce6b5c99ac397eb903dacb4944718ef77c03c979cb55f589e0e4bd61a340dbb03d2c01a762d5695320c2727f39e58a8b39ad7171e9e2506d3a8a5ee2624f6632802fab2405f03ed04b31e2c3848eaffd7b200e53d91bf1a35969f511511d309a132ebdd85cb3ef3b6cef86abe7ca93cddb009913082be50c497f47200c74b2d80d46c905af7d9125d353a3d84f519c79e14e578c44a72d344bd0b580e02e67e43c3988d62a69695ca63baa5afee9367f627b774d9f950ef637ac775caa4e1bb6de95833052017e4f602b3944396ca60b4a34ff5939139315803ce186557bcd91880079f47431ee66342e9b837552d6603662e4b589b4f33824397cd5a70b01a9c1555fe0e612226176598a55bd520b6a07ad1758a30f1d3901f04f4b2463805fd5b19cc41abb692b5e59f65dc1e2d08d80eee280f3f40e50f60b1b7e6086d7f2fad76500a65a48b7bc9a5838e1ff273fa2d3022c1d1bce0fb19809c0e2c8d58bd2a9fb573e9caede5b70ab4891b0a961f4c1f25ae25a9061677285f887b7ce9be8cd314164c8d1695b08adc70e7496fe18d9a03035d5edb09e45d69189b949707de33f3877aa26684ced6476e581cc76549dd941924aad6545339ce76228d16baf40c8f0ffe9a4d2cb9fa2c4a71a8787d06c037bfac401328ae7735d4bdc1f32a81661719bc987a7566900f0a898a266546283a90242317c8755e39e790d4080313689be623a2a0a32db3f3515cee8e8e400cdabd140f78751ed5af041fd95df6878a507c7e1a041a23d455513f1c85e0a33b1ebc87f2b2e592baa14578a9de"}, - {"0000000000000000000000000000000000000000000000000000000000000039", "00a47960158979604e0f6458f4db526ac43a7b7fba0d7933e0cc15de591ac51609cdf5096a4ba2bd89dc1130cb5d1665b825719ae304c3c432ee3a6e974dbc123884ba8f4dac57b78cb58d976d117de2a6cff63909e72e81e961ef335d4f92fc7d6fbf3286ff5ba9f51894014c6359c771c94ae3f1a74e91a2563c3a7c193d97f725c021e79b7ea0446aa678f561d0afbd33da9304f609ec6a3f6fd2942a8eca6ce5af80e83f6dbe018c8fea34d26fc7194c209554625e37cc8f3e8c8b1264f60b0477d37ff9f9d2060133134e59fa3f78c5149cc9924d11ef659850a404bfdd9789bcf00dea2b1a26f99be38875f7ff9543be8f6beb2d199d1e2acf069a307bdcc28c8e97cac11bdc34e488dfe2d0fbb144b9629b4a2bf0d5cbfe76349d628f6233da97f6eb17b5d71348965d835268b692acd8f71677bc3d202318739c4e68863adfe1a97366cbc39346054dd282cb0408eb4ed7843775e29203a70edc580a9eafb98d8a0d3d8acdd64486f90f6e41920daec82523f73f68b404159da87b296c93dc7bd302e9f451b959d57b50fa198d9e047c8c519ed6caf65955c6af4dafebd4183b07be0ffb2186e813a122e4f9a75152a5d659583f4b291965c40c1e912bc83192abddcc7099ab019b30941fd6aa975bd5729d0a9b94e8f75371529d739853e75fe00f1eb56826318de53994e5d4ac0a8d6f3e2c400e050c9479511d11ce8185945c7cc7ffa830fe36ea5c7ba79a243bf123f0f9b85cd4cf9ccfc4441ec82b1448cf3bc80728ae9d5f243ae5b7ae29ea70591c5f303b09a5dca5f713b901738487bcaf2afa4f5de383117ca9cc08f56a8ddaef61eafb7fcc9a8cab3df7491c5db76a7fcec312d4c4049aa7310bb59934f57c6b20dba71a75e520adb5a5f33ddee67cb709731e2b2a61f4f50f721ab1916d9086b38a4b56a5f9be9e625e03053a9193d8e87cd235640b53537c554ac3ab89700f2492b747505b5ff6892719b43adc628ab7f6e7b014ae25d7960be8bd6be454810f4c2d1db507d210c61bb0f7cb8bce59ac9b2bb1cc873d972b83129c3f8c042cc6a12328f079a74b42c04437e4c9294aaa80121a87dc0b558d4191a95ba32fc03b4a81713fedbafc1148750c0a9e0c1706413230b7f74b1dc5a95d43832b3a55abae63bca18f1af6f6d0ea72c2ee033dff3206717dfc6a041431c51301bcb5a06855abb3b2adf61c0f32aef31011b6c86f3397f6547f1571a17ec584133a05f62ec9c9ee7003c1d64c72c0f49bd2cd98d817b91cc1e44b55bb15f6b5038d33d191abbb174ba7096f13aa3ed0df110a49b0ae5df25eff611dbfc9170b1db4d38cf0106dd672d36a9a69db8d1343540dc938cb2c91a45fb82dc42d1661ed69515f5133bcaec4424a75fe3aa15959ef7de772967dafdb188878ec60034c57c356c156da65a205de9ec066d58a8c7c70252dc91dde06a3a635a55185beb5b35f65a545191c721342f102809b7952f814da6b8eebe7cef7e2bf86951749a5b0f7669e27ff7852b26d1cc03d1ade142407141dd23b200f2e6ab1a12262f55cda697615ce32f129bc51c52664c85fcde705cb13ba8311d937b0af17312bba2264112377feb8e40d8db7b3b91c27f6d67d32db43da9e4d10baf2cda62ab2bdec5a993bd79fb5061fc9ab40c4ca7bee4e42b51cb92776eafb5b68f61ebe393cca638fbda18121f644431d30ed2a5b58cf2380bdabc7a68e5b94ff64f82be503199bb87d675d3be3879913522747543e48a741db57df258c5d8b9708742289340ff648ab4b63fc16f00e0f7a173f1f8429a0ea7a026d9cadc730b6dfbe431d76227094424f145a35423f5b1ea169fd63488eb447b17bbf55b90123c2f24155666289a344d2cb21f6d54176bf8c47ad"}, - {"0000000000000000000000000000000000000000000000000000000000000007", "0122a66a281717dd3f46014ce8994e34c4af6c881702fe0b734588f50668bff66a61d6ea0bb6057fa312190c0c88a01d3889e215e2726e4d475e1d1bb787c94301bef97d5c9ebf70ea072cf35a4b1e4b417496a308ea1285d0093d2b4a7d70af25320d4100b7b341260e5097c5ab8d1f02c7e7c34a0d512159263170ea851b71c8fe2606f68f93a16908535bd742d7095c803c1baf39569613b3d2a140bd1442ecb8fb48eedeeffc013aab61acd53d71717401286fa0ba392334b47be10ec648934e952546f07c627da42ffc69925a1f17000a53c4556c1d1a0f804bc4b1c3aa081daa4bb3a10147d7c66989765c7fdd9b960376bff2565969fb046e033cc8e7e95dbd27c854544adbcd640a22a23533dd3445aa19dead299392badb315b73bd67816f1d554f05a16788c5d6ee1ba43ee298b374f548f86de9921c08ba40b6b75b1a4bb80ee498f2cefc2927c4148e590349bf206a93766ddec162c4bdbbbc8a51c1d880fa1366052a708df785188e653a1fa9f5dde0272f462d0995cc0d25c3a054bda16140e72a75b4ee137c2a800c5af3194ae9db45b017e104332fbd1cf982b9f2c912c282b93f8d4b4d80d1047e793fc15e1e4b5a738b27a7372de1689005680353fc325691c647bf56a1b0130b72442ed04b2b74dbe1831c8dce2329be1cb6e6422336b46591417691c3051d3733ce6e4dae752da70433cd940dd2a8a3049620ca34cdc06d09155f90c20681b7c12f0e28ef258828ed1050473f96333d28590ca977fbbf4a9a8b0a9d415640771da5999b321c7528ffceb1fea215894fadf8395bfcd0430780dde4921051fd84d42daa0dc751b13a93eaba8d2bad8af7c514fc73251b9d3d859031733a12680f28d3b10fae181896d9382298e7ebc874858995b8f92db3c91452ea1d3085822e88deac8c0c540abaf41cb115a91dcfc10198af1c9cf6672bd34ec102de388ed44d05de268a09632638905ce3fd2f99126679ca6a1587de0da5950bc38862405490290038b37e4cc6c2b0f8318bb52a17f9c5c272e0c54d2f0ff572ad655f26007e7abe7e01b18a0b03c7d62f0c49559a82ed4dadfb9afe7a98489f6761d1b54e73c9cd969cc7fd3f89cfe438b912166dd9ba46a515c5c14508c000d2b20637c515ee0d49e7fcdec2176a80ce99454428e678cbe197bfd7ca0641e493915db3ab0343866973f34a95eeee94636f25a9f5ff000c27f31d60d764de4e754ac4ab1b2b130fcf9cdfd213924cb0d6122644e75ac34b031c47a23b7f3686c6605225a5e004b4ad30672990666eb0ef0773c95a54d6b795aa22f3a84950af1917ac30d0e20f6d221e0e4ebc1ccbd9381b54fd55ffb3905e36bb3733726149a16f93a8d7f737e1bfa571eb76dadaf03879bfc556eed259e3a9041243e8bd858a822c9f5302792d05ff52ec758a2ac15a1d9cf64c5d3597bdf01ee56b8464cf6343b405e287002128666627565c290b2dd1066850406751dd626730478c552bfb14d3ad2743ea2d3b919695841164b245573ff77c275cc2bf088ed39ad0f31727c60683a897dcb62e7f2596cae40c3aa611c86ecaf7d608e4f36369a1f1a430f2a5051198c5190e9f0a59b44d42fda1e6eb1d1c31ccbc932ae35725665eaaaba6b2e4f927503cf6cd0e577723077dfff0e24fc8539a1b733e744591e5161052a07f35caabffe74f0af7bf2c262d8de9c3ce0b55d0a92e0874223f789a71b0f0b09179e1a5cbec831c0e93f06aa3ed561edd7b5af3d0276cc446b542e694ffd0bb1eca439762dc0d4bc219a3eb89a0ecee7a07badc2f38c14d406f2e29b37224351a1551f0263bbe777de71f33f4dd19de8d97cb9eca16007f85ff2d06dc184b237e513944df20efc156e2853ac91d855bdf6b0acd"}, - {"000000000000000000000000000000000000000000000000000000000000000a", "0024a236dde88c2b5252d124e2f6fb5d3881f43e5013368fcddd89b388fc4785c1e55dd1dd7bb22f4f9b5552fc62bddd8c71a210a5df10dc5c86ade79d201e6ea64f175be278b17ad0187de64d9d03b4979e951706e6320da49394b4e55a14414dbe0bca8d2c7e14081f19bfa1a5514366fb9a163553ce2e9a11ca55cfa50f47c9250d8ead3592e6e9148a5ead4ec44b1d07bb8f587d9d72a7c247696bab0a4cfbdeb6c3add7c6e908d0f0c7ffc396f32322d1db3313aced530f719f4024d2fc5a04f388d9cd7be38a58bb07eb7de2dd38c00d281edf504eb9b89e03f0ecde28e40e69581ce2e23445a2ffa0e5e0e9bcfde7ed42e685a6b92cfc2f8c09926ee0988462e04732d237e868174922063cbfb80bcaaef9329ae07f00b1e83bdac27a92197137045c0b6f7ca532b5cb73d85ad521ca3acdf9e14ff1c5560cce3418a30d94ddc3d0c1e79ed28640b5d2cab4c801627469ae4368a9e544558e89380d364f7bf35cc51b9ad8fd2b4a12edc530c8ecd3f8eacf40921ee56007c22db3c082c999fab16093e2da369d2ce81a55652d7274a64f8daf8bf629642fcdab76355fac315f48019e8b2980082ebf127d9094ef0fa1cdc7585a70ba1061ee3ff2e83f99580557bedccaaeaa47d117c75809676d97e1e05c6faa70355e21d62681b8a175997c5a308f8b75a074c398be064dd95afd39f80b5bfa7f0165d4e3aed90adb54dc326f7ba7bce5a08796842b385e3a4289b23199bb76d3be633309c565371fce900858d41fa99609f308a7e2158893aac97d358f3e5c2c85e42efa9e0c8d8631d6c590cbacd6e5101e913e0b5759828432865db03231104d1f22891d070a549431b652e857b29337adde04720031bbe69fa9fe400a1721e6683da0af0d4b2f57f1914d3bd731f7bd32ed1f9f52792c91b1cf2ba2f53b08ed771a0319189239019df57ba78ab95b4f9b49645d7dff37519a3d096b1522bc61136353bdf6cd021495ea6f5552afbc22df0389f6510719a467917c14e94ebc7b4dc164315e68198265ba0b9ea61fb3821215ee57f374adc137315c04f7c3f71d53a941737cc5993b70003769edbb65ab50499632e8d63a43483b45c13cfb64d6b67d5bdf28177a192d022c8d51a93b38d7184893674ed93f67d125587e526f6bf98dabd7c42bb5cd1f2a9044ffcb8a06ccb8bfdc686b5da79eb8124766bcbee97c9aabc30d1b1b63f11c07bf50cf82c93c68890cfc2071adf114bd54803ac5a74c5021f1781e8d0efc5ec9c8c61041a30f2753668357934ff639275e62f196a83b682e277922e811ced26dce69f33337e4ea1509c272c1e55138f556cca71f219ad08b7ecbede07b606d9e052c5faa74eb9f6be3c5cad946388c6dc48709f03c69c2777e8ed20ee59f436ec3e8bee865bde66a0815673101d8f442fcc74a5b169009573e613ec3805a5dc02d26c1f98fcf99b0e9f4bdd45e9c5b1cf540067aa3e803e14b76028704494e0ca13f6fb6eddd40e155115c27f4d33de1b5b7d9c94a08b111e806c6fddabb126b0206699911f31a43a36505595a5d808694db1cb972073b345e011d2e6d58d020f7a1c38380c9d2d1d9d80e6a5dccf2988c8120cb74c2ba63dee5612c51c077363c3b5c106be281a5af858f5334e279ef8638fcc6071d74d4380537392d2a04be6474c5a1c43a57f3700c00d6126d055e34a5aaf2b3f5b68e0d11340fa2041654be172412d8fb6d90b6328934771a529e15f14427927473449cabfb8dfad32ff2eb52b96a16733b5e080fb11626c81eb16ddae1adcfd0f034d8110e464113af87063e93c2cb2664c181ff9aef654d094c912a14b262e4d5f8e2c9fdcfa3f74f3016d1fc0ede134a244835ca510add95c1cf2491072572937585ddf325"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "00666dcf2f9f3139cd0d1049672b2b6124dbb6d9d10398458e3d8f98abf96d81cb1212d454f7931496e8087ecc03734e6e1de7e112247f55621dbdb31aae174ab8fecfd4d50010b50e264c6868a10595f3558b460662eebbfc07e8127ec3310f94125bcdf1175912452684d436e9586761d0ab48100f6068c251741e42eb078cba1c88b17c1dcb17b19d3c449968938932c5280a62e0cd25a3ce99fd8c524a1c54c4d1c0ee1100b1015c15577ab63953f0ff7310925611dfcd3a1f5faa2228629e951a0081b62a63f32dbd475d0a077d5a43050b67031962a875cdb65310683305b0e374f38a5d4c31b4655decd33998c008ecdceaa2fa4c0d328fef0319e83fe5f1d9e5970ae17054706c69b1b25c5a260d65979c8b89e6df470a260fc96879fdbe6191f0de0dbdc724af1f59d71b06966911d1013f3ef63e599955a17dba4763d08dee757c56fc6a351fc1b89ee424031233350f91bbe7759e531d32322db18bfaf2fed70bacbb3cc45d246139e6030251e098e615c83f5be9088c253422e86515ebec260b52c37bf2a607b5ec3b8d8add5ca633fd7be03439a4bcf91efb1508bde27a088ce5a8ba53b5adad9a948181e4889b47e89bc8932c305421f664b7833288530e1ca9075de049b0eceb0cd22e05b1c97ce54d231775dbddfe6b7ea1fd44a143fa76c3dd12c9f2d71ef481b72947e645217c95c10a253d8a73d5ce58eb628324c9fa88e4e203489685376783485bd223eb2624358b27f9bd870acdfd0bdf0aae2d2a7a9c7797b5cd90ee5c100db493ec1d076c330cb66b906ab263a8ec03c7e0f71d04f907935e0d0ab17fa6e61dd0293657712a95a1f2b8ab98bb27e20ee527c349d6b156f6ea42e70aefbea99961549004201465f77610720ca36bb6582df7c452855a7a4dba30db0b9e4833e503bea45619bbd67a1b75a49ed05c0107cce147e48f2792adb30faceeb106ab3b3ab7d5070508c4df2ae36d58c4f3ac533e668d42a56b75630689ae860fc929dc4a0441650cff959e62b0536537107c3f0265ae929bf81f72eca738a941c2591a2dbb23637a1a5aa8dff77034f3fd0c4c35d985be3d8bdd23f22dc5a9ca3ec3a08f69006afc6b8a43affe70a227247e205ce34225a353a6ffc0e4c296ddd49fd30073fbbd66c45d1cabb011daa7567e421f42d99c8a6a016e3706ae1a8b1379fd9156828e31d1b831b916e3389cbda03dd8a5579b67f564a7d52bcab5b47a3c570615bcd96b690b317281931284c5b6468baf35c5504d4cce7f8870d4dbcc0bd99bb5ceb2aeee547bf0e6064fa9015b64eb79bd76f840e3610a362d2a963a87157c4fcdb3a1fe119dd921bc4cbc6c9da89c109bd21619ec54e4deb479d2dd22d593ac802aa58b36ab1334e10a4bcbe644c949d6e7dd54625cc653ef3879c30567d3258dc785dded6004c8e663176d9fbc95c6b70b6152805c860adb38e241808f73e41548150e3bca05ce258f194d4ccbca32f340d8513c2aea29fe235d2fab148f3fd1be619fabb3cc135cc89edcce7ef8ec0a68e0c2a4180909bcd4d355d52dbf3704cf7eb59737467a4739225bad6d3f44bf5d4e9a4a32c4b2ee661176ddf0946928bbda6783ebd0662c22586f1c5e393c84ab6fe2d1b7b1030b6a0ee76b9beabf42f9dc7d05f205056c82a2543ecf60f7ae08829ce7f2b67f96110b7a065604bdf3ae60f39423c26538ea1a8aca4b087f54dabf15d66ef90c4778f1dcb402c2a539c47d1d8e1fe88968f3874c88f5f12e7443cf21953a0930117b93e79e46f150516c21d64f8fb74e636756f2193583956099a81a6583ab66f291ecde1203ef7b8beb1b6b646b10d094528e35686bdcef08de2c899b21621c2ae2489f23530182b795b42ac3c0062a06fbd6c5"}, - {"0000000000000000000000000000000000000000000000000000000000000070", "002805803e1c180f2639655c72ddef4984aafd9e633349ec629890297cc21d034720df4d0916f00e291600e61b7c75080116db8c2363f6d96d092ef1f4205606d2ebdc3db0d8e7cb50a97c46f9cb7f989ebd78e802839debe506e144e80db2771665b6aa345c7700350e82090f6b9f21f8faea08753d7f586f81e9bd7df7074a14663ed6dfcdeaca95a7e24598e626ba955efb1e59e3d9187696a5f61382c50fb1d08b22385f3a3b0e4c6be3a853e6b8fd36a9d515637d5eee339d8e6a29406df8da57c836fb5aa470e2c7cc8d9a93b2981b1ceec65d9da415fd25cbf23d356f5d720f4a9bd65f475184a2432273afaca306acd36e81528a3f56157e2ce86e5cd2efd989cc7fd6f8a0f816eeb30f7fd7fc36b5ee712fda2e14f07e53a6bcceebd608d6ddbd133e2d2a22ba9e74699a9f74dbf6615381a2c1fa5d536185be4c31661f9df1e3076b17bb9b761bfb59be40007bbabb325702e3757ac387d9b5eb8ddfeadb78e20390a91c261e6c4d5def72eaa3d71d9b55435dc5cb01d1c1273d2d2d11bb54f1ba53e3813c9eb70f2bf61977797f6e109112a3e0760298bab09a4e33d330f00b44557d34e2eccf92be1343d5d4b46a28ca5841790c825632593025b7ffc0416ba65e2229e5169aadc40e1de08c01d730d5198f43113b6b517dafb51f93725c7475b21819d8255804b7b17f66dcea70749993760338a416ad013613967326fa89c398cb9de05e741215d794aca987f8666581c26b6bdc6c0e5df1988d9e058863cf9065afe5ac1e90679edaa3370a3038d1fb57931da71f989591927c764cd5d934a6d1bebbeca8047051a1f3ea1a6d8156b40e6f4dcc056d78afa5600d92e663d0540a1b48c6821e779ba09a35845d1ecd3493fd27c01e1c877e7d137819ba651fcc531ee41367b0955ce85fd305b9d049a055ded35289b7bf813f003dcdc72c7ed203f9110280245716790496f6f5b12cd13a1a6ecf4b111fdc955ee360eb71eca75f87a90e0f4c1c2853e648ad6db375f3c67bbe73a6ff3fd120af4f9bc1dfac2f6df0061862f4bc9dd12b36dc74050fddc3524961a6cf07d17634bb15ddbae53b10e006fb4b7464b61cc9b61970a6257e0695cd62cfd28330debb43bff70e37d76764f43fdc16a14c485871253658e3ac991a13195c5e05cf3178640e051d16dc79068cca66540461a05a0a55ef7a5fc901ff633f30fd0ea5ece30014502add5392cbfffabea264b7d776f3253b4e50b9cf223753da84ed81578571eeca5757736110c468ed61e5f7330a1a005ce6818ab76c7616ba1a1dd37f4448f45510b041f7ca99423127090eeeae2007827f2d2c87db75acf5149af4b75e29555b47091d51c3312d53a5ab4eeb943bd342ed0ac720bfa14220cc05bbf323e1118247ca2922eadfbe8e47f6b837006f7055824da0052667e15418da77586b9dac7bb90bc4611e65ad62c9840991b4fe3a0080bd931a1c1c0ed6556d62d1f276b15772da43e0c31e81bff9682b112702fc0047a1c68ab49bc5e07f04cf7093be127f0953df1385c8b74e63b490e98144dfc69f02153de6138198f54fe8d74dff1ac142c8aeb798fe1569a7e70c8965dbda83422f36f6d5036e2e7f72a0fd3c4720176c68de33f70957befbf257f2c86cb348d27d896109ccb3865fdd2cd12e8211eea73b57ad0a8c39d1b5194487b3d4090358bbeb685402c77d0bb7879f36750ff9aead7f11339f2321f6024dc94c3e47ae5333711f738ed039ee2e4fbc1663dc1e2c1b8b237a5febfb0a17f6690fa9ba0bc5c353b96d9fa2c21ede5cc4792bc601ab7220ce3feb3e1445465dcf6da521d41c3b10229602fd06f761a027421b0f95db28871a5c73a54339ca834dd41fe9f8baa60a035707dda2e69eb6f3"}, - {"000000000000000000000000000000000000000000000000000000000000000d", "0050867d7259499b2d0c624bbe5eaff95d3cb20aeb42e3dd75cb922ce91178079868c64c6a0529ba2283078c40f9c019568f499661b29a745ee0714b3786123fc703235462914f39784567e831ea126e2f5f07a7057b1697efdcaae75750e104ae24eaf24515df74c1150251b8f3cf255ac05a8289529d7830a2e6482df70f77cfdd450c484d09d55129fb0eed5dd9d3fedcbe15352a15d32c70d9a7a8b28cf647e45cae62b9af68015e184a75ab7b5fd5d6a1d2f80eadb641257fe3ee49ed5aaa96d5b3a9c9bb78f02efeeea6cbe1da88810dfab122d5265d55bff07425ae27caea02cef268c50ec768f4350979e3dc59a2d01e71627699ca1585870acb91ea895d8041ef1842377d224dd51aeb35a23b2f0dcb69c510c0da985be742fe4cf0624fe2bb1f130b8d24327dd5f36d98a570ecc6c07c08827213dd7f23d46d1d2422fbff49c7e33a433d162d6f0c30c5e4005e24a37e1e83998b9b9685d2d631126bcbbaf7844f102552849dcdc920c3871524445517a1d45e4211151899418573baf7de25d16d6e9600ed442014981125ff1f62a60dee68f0349357b7cf097de13a31ac7902896de500839d03ac28715e9ac22a54af7ad4ad5b06b902e2b448e05f20d400f92d4e2a5dfe3ad3ef660ccbb7f191e1562b77c3348651e5a19334fc9fd83a16fcd153bbf03e99e0d33486b1ee7205e4f87d0b51032fa8ec7d12b6850e36e0fc88f04940ff2fb52983216931147e11fc43af4323131ac73985d56f5f1f632957ad041caf30c9a89d2830c970f9769a0b958f0a6712e491a464907bb2ef28ed0e6579369720ddebb81446343e68102bc0ee37849666f8b3a97cdd9019b92f3e1f33299c49e3cb7465e43ef3039e65a71f2df8356d338497aab3b37437c4d10df3a0b376217f221335dd173d28d41915933e24aa5eaec55a248e1bc5ef01f59cd57c81c328bceb6189e8bc72e8f592cd55b006ee44d25a6ac8efe68dd103d4883e2d7bccecb56a090ac55dcde5d2bb7ec9c6dbc9dd981237a23566363a4f4ed8591110e6cb54f4c36fde85923ac5dd76b90493f786f2176c9bc798528f17d012354c621a02b316661959a959fef9dea6c3c3af7032522d9a5f0a110c7473164c094775d8e3436057ae23a11d333984a3168d7b10ddc89ecfca5ce388a9c53669afd25060f7026c24b9d4c472a3e8f1b17a2a9a6f206bcdf5416e094d72a8219b409d43e262a3b9c0c902d6d71d817517b5c95e9a4c189dc783118bc6180c137e093ddcc82b8e7b8f9ed6910cf16a336df33a0b12d9da5857fd029e8a1a6151bf3f603d306f21223fdb2432ba439f44bec28bb2d9a449bb36c638d14f78ad9d4e9aa5020a551974e2833711061cd480644370456251920105211464f6fe521cab328932d5dcbd466e031839e583022ad732e19d9a9deafb2042a13cbaf998e25d7e4e0cfdc9172b44045677c5e99264ff464a9d88dc8cb726d94c65032df1d3d62013d9af3b0d3ad578fbfdb847d8aeda92da71afe6b515e7def5719771f13ecc550d55eb0a830fdbe1d411b29f97edf139fbc27839f217d32cecaf0d8fe748d4356668ccd32ec833fef5932f609210868c128f474a96c7a2d6a3f67add57c6713d32ef6c5f21e083c9dd54b703aadd699164768aee04cd2b3d809b061dc3cad0b48fc9997059d1121f7f17d91f5005b2430199fd86b364d45239c483597a311c3c6a4de8884040b53a031ca8a0b438f82b7963fb1f61c9e2e71135bc976fa23556639910dd6b72efee07d835b07ce6f759aadfa56935663be99e853bed4d2d0ced74df0f7e5b5897541c2ffab0be7a447ebd1f08f37a2817aec81d967b71f74ea857c9216f9ba8a5173f77a901146d9f6d54850647c7fb21c7e6560c6f"}, - {"0000000000000000000000000000000000000000000000000000000000000066", "002c4b3420427f8ddf5922ddf125fdb6f7bb78369b144cd969d6d4723de7f6053b69567032082ff7e2131258978a7ae48187eb2c251db27e4111993d31bdf71e917de5aed71575f77f6386224dc6a0f6695a4d3c14a87f71be095226cfa9e255a56a60410fef33e29e24c73986eb5aa9c510ae527502ed59258665aeeffa1a7fc7e75cdd09a58e9a83932f4cfe79dc4771cd45219b45930627b3654065d5313a588472a3ebbb19b901178bc6142bb00deacc22bff2ef1764fc7d7df53a5a6b8f5a0be29e5d542c35f8ffc92ff2f2fe39e07f02b45400b6864ea98ef1e23f409ceff9135f9b0ee71cc5715f620a4a9c6c0828a0b36632d76c57db72df0ee19250003023cfcf69aad720dfe09f64333e935d166531e31bb27d1dd0f20b44ce783d078fb85e67701d81444403dd7ae5368cf514ddab13696436fcd1e52b67b9a2afe96e2fcf8a6936d9ebea066ff9ded3110105cc76c3a6ab89a4d0019af98edfc9e17e5182191f46c496c71f3b1571d1441369539e5afb80fef653065b92ffab47c8cbe2cd613509b2e9053a9f1fcc1c3889c581ff9117269b46557dd2737dea389c7e62440229b079c95b80b70b7c00d0d71e499e0b97df65300d54f9678a913f93c952f18b1d70a961f272d659d53117be505b20dabb17bb48930f7d16a77f8dfdcf5c37b34d870b1706357f8ba85065ece03a70d7d50e3103eee2aff665b4238c86311d259e009cc170ef7a4304760b0d13eae3d9d421f5d59bc73c8a70bfdbe72708c7c1e2bac65d45044fe2fd7d43a6a6284d35f2bf43aeb316895e534d862d781615d11ed6cf6f3affd604aff7275409b16cc4797348827d6161c7cc30a843093c234c5707210f0f39833b17ee132af17ede2a1a1ab377dcd3ce0ed35c62e55128d6d02635d659c0693d0f7fb5603555edef68b4c602b4a5d769b17f4d1e0285c8a5ab4fe6bfcecdd627e9fd5fcefa8bbaa8fa0c127f55328457c5faa1c1b3e46c17bdff2ebcd23a0906221b400b29ebceb1a21e831578bae8877e93e21f43144774cf939d9735e358e6b4d761629d6bf55f0300a85ea1437b37580981f9ba5404cd08ae135a6c0562e217b5c5a19dac2731b110cba22a8c9a36041a06d17470884528cf1769708796c46e488e883510db30b934759025e5574117551be3c1cf89fb2074f608029558f64b22104543e969b737df531725f29a0c0d0ca99d047ccc0853f036943acb6bbe02ea961f538b0d1d34d52ada0c996654b0f33a5ed36b6da77ed5fd2056822024509fbcb28d29391bee34570b86fa52d30faf495731a26f63c3e16260a4e18f3dfd419845541120f1b83e58f714f5f7e2d082c184def80859ce342532ae45354dd2acf81e625e2a71473f3a169e67a43be6ac7b2a63cc8b267105888f4e3ea5d52b3eb14604cdfc1bd045275d5daa74944c316d157a99540c3322ec81a90cab72d7b4b603df5448b07a826b5f6d721e2dcf9afcaae5b9fc4b476eeace3025f8a099d83f268055292dd94789c8ca2397b97e75a0e7778acadf05c41a909a92414aa98f30c59b6fa9916d6c30da1619ad5fdb0a3714efe2e058e1f457703ac85cf7149f14d1b3aadf0be819cf1ab5b028d997ca2ed794127a288b4ae54f500db8d0cc8355d41d05b68ea2981e4e04f8d9a3fd8ae22b348aa367ed54e3e691f23aeac3236abb6179d632f4cdfaa249a34934d6dc1f9a257908b63a44c585f770a13002f5c018c325dd4435cc3b1737ec513c2119ed9a539302d7b24a8934b22e49400853c09c11e5e17bc91bb658bd62a2d5b6650e3cff54d3fccd87ac7363e5af2b6c42ff5673bbf69eb6561c5006fad25fdced57b7362fe531a7fdee7396549b50c1a3b7a17239b7d514aa485ae24b7b639e1b33ec"}, - {"000000000000000000000000000000000000000000000000000000000000001c", "00028caffb8d2073c762d24ad39b11dda378ffa8e51421eb038a98952969c7731dc8b116ca27ef99f19215c7af8f21d72aed2337c2c7e47d5908fcdd4b01b54f1c230a9654ac2f18a1866b6ab746f5dac63df4c7097a00990a13fc05dd94c23406747de1ad6456038c1b5c66dd865d07d7494db2843016a7f558abff65950d621a35388ec7ed46457304b91b2fb0e14f73e9c214c15e7fa9e706dd3957550acccbdc2d5aeb2d20f800a9cdb4005f7b6d22e8c197d55d11790ba3bd04f51b2701d786957b2356198984f64c5f3286a49d28310c03034dbb8d3d25941d74b862f48aa97b29b55abc0dab3e230dd208154c4e159c9c4c0e0ab640f8d51e06d8bde1e69bffb11c2bb0cec4984831c56cbf1fd009d7f74f8b0541ccdee8e47cc85968e529ed8b1cd80f5ef8fb2191730f0994162b25d46b9e142e58cf791839c363060ef1fff335d4e745a741dd612a9467190193dacd18dad86af3819077058571594a4e9f178a068ee78350843c2d5a7bd8d676677f2aa748f6703405c25ff3f8d7447d60d8c21269f0083d9d63fe5221526cea9965e3fea1b1fcc6e333d99c128dffd7cffe2556b576fe156b52d3c614444f59ac2d893f8cd78e27e18b23171938e1eed593686cc6c28972f75d0f1a31e43be3a9795275fe2443a735a00c40facc1335c86b599c7fc55c3d1b950ca9582cfa853a6f361c97b204a06331e7915421ef30a07f02afac826272396e7f14ee898abcd7c5231777f6a1d6d321aba236fd326e0bb38b5cf36f7a63cb8a74d8a750e33d8407d163690c30995112d6bdc3a7c701bc68362ead3059ab79c906ab5b984e95593368875558a365fa89f53b3ab6fe12c84df6ad0cd3707b88d499cbcb8ebd52b9b8b7b11ce4ee10106a9ff986d3c37278e1baf91470ef37bf2049b9e621dfd9915b3a320c8da7ed8987aff8bab60026107dfe451b376beac1d3f718bf5954fdf7ae051ddb8c45a3337575d2ba35135bb2b1d555c81f9e88053eb4854f029c0316ed35c298c40ccee34b1ed8d20c7b7f1e03273c3fcd3a5a2d82d714db73cf7ce3fd01ba4ab0651fd19b2971859f77dffc8f483ddce5700cdfa2b9901ef7f5cc59925468b63991362f7cdfb62e750ee77b926f2b06c5a4be013f33a74b49bbe69430843f4fa274a4ade19a254ac64ee041ca41d5323d018656d78985d6b9e688f40763218ce264431c9d5f0cc6b133c3d292bdccc50691e06661dde3b67402f817a4ce7bb2d06a01282f729cf1596531a403d80a662c90f2ca320c24fc9286d8b81cddff06d645f98d03088272ed3220feffa524b9878eee12a293c358108f4ef76c9f3b57204d3437464428c19552cf483873c020d30b22ce90d47b879ef216156ff8869a473e3c8645b7dc37dce482c9957375ffc440105700a8dfa3cb0296358ba40515f24c75a407383002d2d8fabcffb46d9a7739fd2b29779768e883eeccaa8ac721bc71931112971ba3ee6fd9cf83628a392189397f1793a4cf11fe1a97fb8ef62a80515446ab540d9a082b3f09fd1e44bcfb934ed14df25976efb64870ef4328fa8f8d26e95e45e096f55b1a9e444917d64fb1932bb999c11e88e61c0113d53ec2b404a032ece3ad7e0f9c53be3fdf068210a4cdd9fbfddaa3c77fcc9ee1dcfd390002d450d7cae17f3de78b7c9ff16c7feb3ca31f594b224434b72f141f59aeccd6d74be8fdeeec331f7b91039b349b08e433479c2150a3bd19072c8bb91e6f590f3e278e52d58bfabc3ed3d29db7a5df65e2bf67c90d288a2acdcccfe3a8ff82255d7574113d45bbae3a108b6c870a16cffec73c623164604d95d6b3930a751214ec1f7dd168cd06e276fa99d89f8e769b5c0c682497c249ad6104ed362305acd34a1b9575d51bb94b"}, - {"0000000000000000000000000000000000000000000000000000000000000012", "008fb00dc861892720741683dbd7328f559b1bf58a16181d9b135ae6039c45783d55f18efa4588368e4b230871e5a0a784c77736b51c247c3975cdf0b0cfa4393ec595eeb05ee98d2d65465d5ee22edd88fcf44701d8acf88aa3b2f52c1500aec8d4107de3bbbe6558021bbafccc05a359757ce178380f05835a36bcaab10a52d0e727c769110aadb9191eed9b8a51cf187d7529f7affd13e6f8ff9d5926a97a46a96b103e1a7baa081c3ca1c065087f6038c0de1f17aae990523e3fdb09571b0a169f910995a7c656deb4be41e416125752230e0e52df4c37b562ee165ef7567c57a0d47eebff30863c9dc09469d550d6970a436845ba0648f9d96909eed8ac5c3c7515f9210342e3dd1162fdce1f52550d2dae15a49e7be737b0323ce45c5e1e0bd9d9467c0a38c7d96bb097c7db20329f4b6aa4514a3f51c8b716dfe211932997896e5ed49c3a3e443d67435d22e10117d983b40f7ab8a7e042b1b3acea4da74a0fb80305163af2be1d3853c93bb10e43f1530c7523fda843094c07953adffbcbdee5a45c2453fc8eb779ffdfc632dc17ff6f0e7fcf9d51633d11d07719df6b59101604f8f45038a03893966079a699d778630f801972641b11bd9787ca2f914a2112d2f7bfd848cccb8d02a1177e33bb78cd3d41360a5904f17ce18b7233de0c2a457557973451d775a79bf53e755c2df6bbe55ce1cf05774beb0eda6783ac1ef32aeda44df4cbb1f8d1a60d95a982e32325fbd15a85e4372fa831b6299504d007e0951f559a435196f5c24a823c47d98055b9d56b1b3f8fbb8ba658ff486c620fe45085d54463ef90060d9717e376d6b498e396a1bd8e4a397490a6e730932f0e56d3a96d5e6df75b0659203ce9d299e798758c150559e18dea8b5d8d3dab71317b1cc74acc1e0ba0208954769da4bd51de13d3b7957152a9699fb65b800100033c27f3a6bbc39852ff40db0dad6c435f4636254e3f9db817f31adbc9393bc05239cf21683faaa203b6f68a0201dfc13a05a110164b5c29efd3df5ad31913cd06eb4fd5f0e3cf1278272be401cb9f3f8c4803ea3b8b860b655ced4a607a8c4f18dd48aafbcf923bd40a3dbbdbf8f4f4537c468cf4733f8825fe064912b5dacf63cc586fb2f5d3ab5ebceb26a1e83d068b2e117ccb230d563320d824dae343e289755bf32d02042a134f8b1bc3057273e176fe77b69ca4c7b3a9271f58275f8c1bf921bdc61587e66215e1f6e3bf264a068bc639b49662e0c78a96002173af62650df3fea70b648bb81c53f4cce48094e2772bd81a5dbd5554190c4114b0aeeebd899834e331827bff093d6d50269847a887d80ca36af3bc4767a258e6147314e679c0842233abe5898a80b0b16b050167fe2b394261da75d745486c9cf69f060dcf00f669467a9f4a3c35bf8c0c019acba8a74e2941a8d3c48f655e0231d2d8f561541db39f90b5cc83a4f143d29ccea24528c4c5a8a8450e73aa7ac9cb426bd8b871f43d2996794879cd29f7504bf58fe41aef96dfe0b6a52effb8bf564fff7f92190a19f633db89a8fb72d37b81dcf3dd0ec48a000127a68614702c5135c83bc5a0a0e1d0027257fc28b82ad54ee8166aed1fed3c76e786e69ebee9099e8f6e5c3be4cb53df9375e56f07c04758e92e20683e1cf207a113c8df238c4f5bb162ce623705c696733f24d02515148a2fd101add94a05b5b47333797101518b690c3ebcecb2491567503494a868daa36e75b23c09f51b137b9c01894f737f48f43e7ef8bbca91e11f3937166eb4bdaf1e6687c7650c25606e04371858bbddce23aafc38014fad9eda9f860a8de52ff2dca219b0141cec71a7c84aa348b1aa751637fc5611dc57118cef284757b581ea2d2fc4b7e4f4754b066e2270df2127"}, - {"0000000000000000000000000000000000000000000000000000000000000003", "00ab4272fd88f6c8f608239e1ccaae0e1403947fa2086fc9c2b9af589dec62e480833604a5cae07bf7cc02851fd809a4f70b8fd6135595e11d593a3617761c3cf697668327d1b5e223d83f0f4774de78a95a5cc60ea13160301a8f7fe1f3611a9a923655745530c38c4c5186e310e13205d16fd7de21d18fca5011f9d78b1546a4c9959e85b950fd86b71d3884bb1e3c99e64516d5f8d02bd4f4d0f64df4edfaced5d232fadd2b02011effdd62c8e23fc462310fc8461df04be2d843300523e690b38f2547bdcf4182e1bc63858aa8fd1c000fd99fb49324d2c1a75ef20d2f6a6e6db7539812b7207576f1725c5ecd705f52c192e319bcbe7b4d8a4401d95df77724ccb3a25403f4cfbd94d54250ded64b0445ef9496aba249d49646ce047d4e7a048237a36a1a107f1e7dcd8283d79dc6ad4545ebda3efb3647fd65d2f3ef8621013f2cade7227b571d2e5a88fc21b905b26b476b73a8fbff3c81ea052cf8af4c1a5ee3fc2bcdacf349eb9e85ae7b5485006c5ed9a6ddfdc1951642f1fa6df6ed7fc20b12eeb9a99631715dd71e891f7d54d4a6d5892aea9b031004a8f905d50a5c6f1c07485d337131fb8f9efd35f24d4519b1b85dfcc3c21d5b4f404bcc2f71f92ff62c77b7cc6be1a85fb1110cf0a4ecb1a2c18d1cf732d7f3b390a358ca5cc35d31eac7d40b1bf655484fe38706ec833f0e775dbb5b06365dedf48faaf1661cc504587398cddfc7fa3715240937a9b70bc670e1e2c3249370c8ea0157dee00511eb5d0e0a2839f78308e33af4a43914f3d9954150233355f568296bf5b7b572bb00be36f54137f9d7241c40658e8391147d4ed5c30cee7e4dd8fbda5ef4f02261ad8a6c69e505c74022feafff38e22dc45f7e5129ca86f4542c7ac59051a3adb5eba8af044919b1f92d8704c34511040cc62373d73029a65190d7b7c1bb01a6e1053a49a275b94b3669a5b37871b4f67cd25906fea8b4690e6227a4af457e353f08aa3b3072cd801da223a9ed578f19dd92922f51634e5a48a076e0141dd6278f04162613a160f7079dd5826f917e1f40410900727db5a81a75f351a45134d434e2fa53598e180a18b5a0824d10cdf7d357ed475286831d3c7aa6710a755d1641f081af8db2a55eeaefa1bfa2c51db7eb272d03e12c1de1c7af253664b0e6c05a3410dc1e6e060a6526416387a5775759620c5938ab2d97fb2b69240a851a982203cda5a5676b29e2090e72d9d9c23207f54704f07847c7e238f32215a11f19ae45dffd7b112055f2caadb723852c8473ffe17015426af3da0a18915600aba5d88dc61592d1b7c2c772fbaddbdeba2342a9513c13f26b49e1895476637a4b0a56d8b9db1b0bcc93fb62f143276d39f5a676bdced0321e434c214397ab0c106f01fa2ed84686da98ba1baed2be31032334e09d4f04eb7c1af1b15f602770d639cd2615091ce966ced405518f34944e2bfb19358dc3eca7190c29d13066126699a157f4926f6687b97763579aa20e7b449191524360b97ef30b30a085d62472f386e6033cd46af5e5d15d6fe7fa1ec0ed10e6ed287a6aff0c8288889d8bd6913ad610fe5ae484dd32e19435df1038bd004649be0353537320b46c1f213936f9781921c356663de355612b69c363c07dcf44da394a91f90b9a3c02c153121f683434c8263c234965dd0b9e872f168720cb29101dee47d6600ef9843b14529cc09e0ba5be9fe8556c498c51b1aacaafaf8ae278b7a6ae2790d1b09ee2bffbf91f742276a8438247639f00a91186d3655ccb6c93bd2eb33eb9dae4c18b6c5739a926aed627d4cecfd18b57634385ddc1d9168632bb5816df98da973541b7e64af7598f747a09e258974cd45299764e0f35ffe1c1b8856208397b4ad4ce5a74c0"}, - {"000000000000000000000000000000000000000000000000000000000000001f", "0034410efaa05bfb8152805423b09b0a8be7d857f901a10908ccc19170907e9c9a7b73ebab43af3ab7eb0e95f2a8129f3dbd3df5813644368985a6445fda5f1b33d27f565eea8b36c8041048e6d3652b7f96803c0375fee70691db1742fca7367757af99f2355117d62b74f7f346682561f674e873286fa6df5039bfc143269853614c0f8913c7ef0778246a502a2d1b7965172dbd0b52e82a1787847a177a746ae03234213ae68f0450e12443f03003a600837c12b5125293589939330c24a429de9f3b9150dc73e1405d16be6681dea68a28c52e094a4d8dd7b15ca84bfae1ece274c3b5bb09601f7c91583cd133efa89755366526e6fd7d3fc712094e5a23461a01abac59d0a53cda9ac0c7c3fe71800fd64dd27528d2b978b81829c2f196925bbb1309ff101f10ef604e8f48d0c3c35d82cade7a7ee2946d131cb7457ecc87c1c2bd8ce40c8da11fb219ec161a6d01942b2cdbd26693084564415aecada6792b1455f844c90c10c396abbd102114c319b33211dedaaf81960c9805dc2f4fa0af2987b2c8d6ecd8e1a8a37561bf2e96720ae7a22d698cff93cc4fd7717d790b1353af01c7fa6dd4444bc23913a679735a4196f377fb3db30cdf89b9e8d2f0e7394755792bb013fb0618f958682b9c7c1dd82625e13a830370e1629e22c10196e779631fdc1ebcd96713774fd7bb40f07992105377e37202348502c98270bfa991315f71bbae0c8c98652ecf212e61d099096777546f25344cc217c9cd06debc221d3a3e33effb8ec1e30ed4554ddbc0b22ffed2f5a020de610881f3d6fbf45577450540140e7c98debafc0ee665a24cd0fa4cac2fa61c73b431adcf657ba8d0369e65358b63566feecb2a9e2fd63cd2ee1c585f71171b7cc477c8d0a5e3c049db23daa59ea9bbf5dc25208129f1d31e0f8d047e42d5f8b72cedf76d50efbb00f8594c6601fd3087d62186a290d7a0aab1fa565112a80cbf5246cfb0b22421a4aa425f17533e3e30740788aa04f3c75bf48285114c7db094475e711f17d71629d8fda5938605a3068447a355f9069b08fe976c0494ac0b8aea8395f8e04174d98bdc9e195df6357029278f0f8fa7a027f518c4e4a9e9e806ea263ec4290c0fb63660c8fee3b724478096f9c2fe14f83553e43416f3327a2e8aa7dd40155387d4b0816a2ad66960029389a9b74f6699e01b60d64c4dc119583ef1a26a25ab2e470c97f90fa6a572f69d2258299a0dd5f40a0cc66ee255cb2846e250f7fc54d897ca6aff3a12101914a4029fab11075f28d6229672ec35e6ab533bd60665da044c0288042562207b62b069e52928b1ba710cb86622e24b30e07bbb453797e62199cd5ffec9860ad0d3d6ea635a0372a6442b5f58f8ba278138fec036e16237580f38c72e8505ea39e83d0e50d61b4952026f8f1135d14b954c6721f3c61eed573c0ebfa99f2da2efcd38aabd0bfe3fe4c117eb4b971d983b2f4e101f1cecd8451afa55b471bf6bec178dbed75d02ed1d7f9a1d0bc808d17de318cc16d2567f49343ee2d50b381ef1bcf3ccf5dc6f0333a658e1b8e6f811fe432d0b1b7723d6d395d3afc59ce272245970398de40522e102d22a925bfcbe07144c1fff21ceb5f35daf572916d49f24b16d519e3b4940e3e785cb60cf3d3bab02d828d4690c884cde6b8163d21374856a25dc09f106b56540fbd5dea0d8d5071f0b49e8ae91d49a63bf0347849f5407406aad0645af9fd9cd62b0d61fd9c15070ac0f27984db1400f863835412aefaaf49e434f0a7cd1f2b2af37e9cf3eb41c592bb10d81834ef61936db36ec9d965c2f8ac1f6268dc888c64ee236b87d0c0f612289485d1baa1d03c0b6e238031b5838e8391d4c261a532e66f9c7a35613fcb0bd36a659399eda"}, - {"000000000000000000000000000000000000000000000000000000000000001c", "001f47c23d458a33b02b02219bf458ff31d5de1c2b3bd93a9d20e7d5834133f4517ed3adbda304b775a90449758b187e4739fdd280f7fbc2c4e5e7495845b332a0999a01131375c564245eb27fbb2e1bbdfdef31015f443d905344b3d7f6d2240a6dab6ced131617f652cd742033ad2515abf7f63aed678a65cb765653f208190b133f8b7c573bb1b1ea0ace01fcff427b1b4a4713561bfe15a1498bc8471b76ec87275b165c76720337f5d032524e79fbd25103a790a098600a45330142e9a7e44f554969b90d54ae8f5cac25c2b25d34b62a5fd6e73957c3f1c25dd4aaaff9927974dcd07c6a2dd3d769b60c892e894b57c2525fb402b4ef5c899f0d68b601120896a73e3d42504be44c52146177654323ecdc480cd361dd023765a5bce02c7981e655d7ac1094dccaf504576f04e311fa7c6664de10ee7f079e13ed3ade31993a6adc8265a4f5b6648db6ef7354de0d51e5eeee696365a9284539f8d7a499903a15b87315442319a5eadb45a3515363e8e282d4eddc1f78d415f4625f21a8294550b8dafa86758cbb163c5d06661e4cfcf6ed133c5b013599d1c7d75b967bcf1ebd6f1b19f8fb32c9cc1194fe643a274bd4de72c8f855d423eb43a8ec5faa5b8a5b26541174a4f1c246dcdb3b25f7c4adca12a5a9ef7de461a076378ad39999b57c32fcab98f21e6defa6cf6747af7b31aaf5bf1d95e610e798a813a32a9f7f4b92f67f27bdd8d26ede635d3fe4e273a25fd04b5bee54427ffc9462af8ef9ae4b1a881425bf4bd1416fa5621b3b696e65257aafaafc3d027485c9a51dffcf1054cf4e2ae0ae12f19aca351368741af420342719b954c21176c2b5e7dbd0640b20bfc1ffdcd1cf4933cb3461334b847d65de7c552b38d015654a25d1874488342085cc29c3e3565fce4b52c09adbfd5d92e79a641887485e054a8ee395543e01eff237b58dd6d2ff2fd054144dacb27a5edf4a1e17562b97e8a8a247bcdec4f18e63296dcd2393bee4028e949555cad46b652432591492fd59b8653c1abd2d489dfde461c9a9768067af135836b202e5516f2d07726a6c50f90e3bf40340d85f6625c129b9384f070fd15404a1c8e48c836a51c33e20c8f28d1fdc13380d5108a81b1779c304f251a65f6efbb109830de8042201794104a9ec3bb528c6d6b2c8e6aed0451d59b70291ad8586431661498ee132ac2bd69cf8a3d196562d16b1cbbe5fd997fade698fd67a983720899a458c241be7ce34cdb14e7ee7382234d3da3a7401f92ef524a53725d975d305b07f63637ea797ba081d9a444b129d3b1b2b85970aaaa4425b7dcc2f2cfb28fcfdf617e67605b946896ce60731e4606aca323e2a9625df2310c529a31a8af1dede230c2cd1e7d6553379bddf2c812d4a1a624c9318d3d30eb322447cf4a92a2c2c0201e1bdc6eac793a73849e2a566a0629d11f8a0801720341ec2c61ed87101131869bc8a9995de58a2160ca16b3a55da3b69998893de4954511d5a73f9da42134f55f68b4521767cb0515d572c9c85c94b2f089807c433d3f70b8bb68e1c187805eff04bc6bfbe9e930fa61eae26b6fa9dbae4e25d9e389b434daf5b80121cb34ee65d4ade5f3e3772e162f7925e1d9e53e0e34b259276311e6225098404fa69afeed9d049b5a16804106ee2b8cdc0a31272a6761159a1fa08dc92e24d0fd007d1ba4dae4d5ee2914a659bda513aa811ce912c54b48aa91a766d9016a32db744baba8051179d6555413c71e765708dd825367fb143a8c69fbedf4e3008369dffd3e6c283c9bea2892af5cdedbf0e9cb9690a0d6e54b1afccf1ebb9918f0a427b7c94693ca67709307e4f5f5dba71ffd23333f4651fba12789f73400f16623046e92f1f4a9393e28161bfe5198d4ae8ed"}, - {"0000000000000000000000000000000000000000000000000000000000000072", "001ef5180e0778c6da5f648e04abd8cb07da79fd5f0b7ac124238b01cb2d51f35f0048a6050cf950e55202ef268c5c64aa2f90fa370e57c3e532a9845ccd7e354a8fefad5edf839fc9045744b1defe002796b8170beb3e3dd46b494b74a50899dac6efbadf259cec4e1b579707f3581c9135e3b20e9ce1a76e4fe6dff64713974c9f005ebea39611e662dc70f1c6c31a9acce51518b0c1bc903da75d20c445edb9af170197dfeb6a06e78efbce07d69dc9d4c0c893a47b1c8090957ff815526b6fe96f671985f6174c15d2f6df422cda455a164d43fd5408da428fec980d6b6fada6c78bd9361e2e872af877d1e859e2530412cbb84c8e252dd8f8601042d8aa965477dfc18d85b5a875aa2aa213f79e857e802fa2fa70e441f370688931ee9a8b924e7f95f8122f62257f8aed7d4ab533912fdb667d88a3d2c7fc33ccde5d8124343bd68da35e835eaed1165fce17cf00823d50084837f057c8403bd60fdc16084f3ff68f03480717650d38deaebed8ba2f7559eeb3c5bdc0d32a9e130105567155aa22549ddbf16f9eb50bddc7cb460cd6b9ceb11bcfd33ab76822d176a9f197d8e2ec034717bd5dd2892943a660481baa7a5e4ef45f950007fd2a3dd689498f7888fa0fc4dbf76eed03bac29b1337523faf1423b7409808cdf47fc943675ffd44da3adf6bae2ff36267f2c28411537520121cb1b71a3200c45317df0c252dfaa940299014080cc665bc27f70fcec4a4870adf95f507a2aebc38b12eb361f9fe930895dc2a32e8601d44a3c1ceab49becd9512f5fecf53322e6f3169b2ebe82ee7877c69cdb6e2c2180d1700f3dbab76a70d8fe732f1c2410e630c72527c305e0ec0fd7af9160df597a3534267c3c31ce1f32ba60d22e0ad26cb8eed8b2f30c238aafe36e181b7d0334939de8d2c8f4ee20fee203708ca53f612e032fd078800a3bbde8715a475c5fba49ac37fecf96bf51f6265302d7437858d954f9374988f5bfe78fa413618722e074795d1425c2201845df1e5e2388da1d73bb44fb20812ce3d401e27e3dcad85aa022f12297e0371f3610199b44c8d7deaf5efed95f9c376085e2533bb49be316b35d06669fbadc6fb73481fd9b6e4f1edfe2aa7052a329b03a89873628bd1c21992ad866a8738538917ae944877cd6c1313583239d0fa39451a3ad24ad3031345a308504551479d2104b6e8de62de1077c9671198e8f0ca84a5856f22923b807caef4b7f4cb577607c6dc3d734c92b3a207f2d623c63aabb87cdf1a65318a2f2caa8c8db759072449302376fa6bffb576730bfe09d0c0d90780ed1ff180c41fe9db78845f553a2d2444e35d3297f5fc3864c802e5d01d4dc42c96990f811cdc690a345b3c68a374af27dd49841bdd36731ecf75c2ddce696fb49334eadf5716f5e018f623120114eb0d5dc5da04373640ab1ec630a8bc134f828632b699f7404f8e8fd4586502cdb5aaba22d69eb57546e58b947e546dd8b1edf5d478b85755a40116d77a4753f77b50e0da857ec91ab0427b9256c8c538225e025c4c2f27aceb25a2ad6827eb7b7102f0f29858470cfda347fffc00a3f9b41567527ddc1197ee53f6c81b953585d09c52d9d6d73a05245eadaaa6429a03471e887aeaa05bb17dd6e993cbda25b1dd0e6e2eaf45028595f41688c09144b6d1253b2faf7cf0db5b3bab08817f175c9ba3e79db3d80a86ed0a03d3b2ffac9215e541003f4928bd2da571a1355e7c18b816fa23ef1a124a65cd708f21c289b5d8eee98b06b16b1799ee0fa6b11a3550a41143fa33cce239377d11295da80e1abb1524251041b99021f76ad94c99a9f3533683b82e02df113e6ae4d59957d416f656289277847f0c0839863608705009a2c6a133cbd94a6b7f9c1a9e31a1"}, - {"0000000000000000000000000000000000000000000000000000000000000005", "01905f867a7cbc67fb52303209e612c52d273efbb448965d8d3365a53dac3ec6082de654a6b8ea95e6971a9e54c30e9257c3d8b8c6bbb4c2edc238e1fde2c9256c46d21c9cc631a7e618b37f536ef7ce433fc74601d2f6789bcf26daf9af1574527be7d1de0b333b5b2db7bff3fa6fe307852b344d597a44511463ba7461115f061f385137cf7f7c71667e42ce3dc76dd39d562a440279e32adc21890316f6e84897d240ef7f41ac04c57f63ec8cefaf22fe15441af44cb6a791db3ec330a8f2013121440989351405c3f177555bec95c8c30c00030ce4a587b5998e125676332461e24ab4c4d0508e42a82fe1692d6a9e976f0d5c5eb662f556d64c0b79d29f58521e637e79226a17db27d9708af90abb13742d53295b788ba9f803e195c8455e8ba0db581f0e76f7de99d1e624a28955f4a75b01662b7955b9fc1d7ba2db946986f7c95ff6fa8ccdd363395d3b128401a55cf03c5f1ebb3251622d5d747bc992443134033eba6dfa81a28505574255a1f8b01129c1d55c9a75101a792c7206dcd9221d36bff5b8048ab0eb76cba475da6c0f47ee74e7d11f487c93d039b711fffa7b421434e33c9b321b7bf76cb1a8aa3fca0cbb101cdd32504ac545b8b47ee1ae48957ef7badc6721a47ba68820ef378c0ed654b353e6d3bcc9591467d03f5f1ee3327ca721005a6103f3bc73f19bff518d770276486b02afde830408601acd5f90db34b6cec9f852f387fc211b81d0a71d92af9d748363ca1d919545fddbe5fc034388d9e2a65485863fa33aa7db439aa529ff5b1634aeb560ab65f89352612695946638b342bf3dffce0988b9a4d4df17e56369c7f510545d6af05d9e9c6a29d64eaaf0ce5e5ea9a732dfa142fc9ce5997b61270d53d9f1a144d15cee85e1f009264c6db759db8bac57a1463c325af0d3521e05fdbbb12b83466c7f038d0486cc51fc8e84ab4b9b60979f2d21b977442ce7fa14bceb081bdce8df250074ac175ebe1df9c591eeef0bd45cc2b86c54198c87120bf625791a4f659dcc0c13b19b2301495d78f389f4436f3a9bdf09d45ebaf107ee874fb622887744b9a5edb2d2a01e5eabdf5b86105121eba248471db93061b12e9a64ea0cf7993a0e2a974460b7917cfb5dfb95c05c6262a23b695a39f42fef02278691725dc1bac5025f68d21e50643b37c706d6b05fe34a8cf34cc311407b5018f6432175c17c13fc52763d875099576978804b5f7e6ad09a782c720e8826fd8cd695fb7563c30054e705e912cfb8603816b4fba5ffad7fb1bdbd91e34d59145d92d7bb2dc60c3ca3c9f69e0ea7d8b18170e19a4974d2fba6d56f65fbd5568f6618b1e3edaafd3ee4be12f3e3f98ae10ef306eaaf8db718b38331780ac850764f8f5de3883f7bd79378eed6d5d44da893ec4531ef47ac7f51a8050659c205d817595b76d169a44421acb04674f5b80a8d36bec69282539fb6b287e551c06d2620b0db951c1ce1bb34c727cb9ecea200e465de65f995f217311d8db4766289646c77a3029864d97c01e5dc589013088befca7c2698effef0d16f838dcd94f5da91e9e81b850295c8dbb61fdef3f4529f668bde726f9d86a41fdafdf7686bef63f55e044ca128e61d41fc4f2c05286517ad97942941317ed4e472fb00ba4f8958ed740b7338688f078699cc5260ef3575f694c1e8f96c890cdb378c4849caa2722c71f402f4ce822d9052a6db0ba7186216d8c06d3b0bf546b02bbc7ef8507aaf800e4be7df8c07afe3e36c963d93373409dac1b1a2970bac45ab7d09c503e11a630ed4bcd1ed1cabaeb6372c388209b21a91d6f4d992edfb4fdcb2be1fb945cc45efd5aca1189eaf194814f723e2c48dee27b079ed5e132b8b3c629969cb490798b27a48a65038bb5907"}, - {"0000000000000000000000000000000000000000000000000000000000000002", "004f9efc7b24a2ed28c8212a4c5b28ad6cfa4c0d5389ee3e8cd16b30efb8cdc94b2bf2684e922a7e8e1c0677dc8f0a64c229907830c148bc9bccdf86a938cf2abb9e05c08b9bece117349c5c679e9a9727d8b4ff00e36bda54cf28532aab84eb325d40fe04c91379ff1d024ded674fb3ad48e476eae23f3dd32b7dfec8891ff6aa81b62a9581b7c3b3522158f0bd0acc2c8c252632d9e01c8e38c3b5b4834fd69d519a5e9ad9bf6d11433a5dee757703e8cfc1ab2db7e335242f513e702162b2859ee24131d883d3aff9597d2d89c42f72301aa03c586357908b37a4723231501c0d84ac56a5341aabed1c161978c8d3411ba3956cafab2b8d3d7e4f20823f66c10bb1715c87663238e2b36ad01c1daa412b961f3274e0f3fbbcd5e3a546f164ca896057bc0a284fe5573564cecfa84e33e785e00412f9da9fedf580c8557e7b24c1554afa1855115f0cc23fdb9df47d00e2882f98451dbd92a343beb97fdb8167ed39df294b0accac6fa087b91d2125621452e1bd7222b9bcaf1d08e4e22b73ec13edf3473c71725d634512febe7b3186d44e62596dbde606674b5c69bf3a0618719e8202931465eba83c69b8ac014d7f6fd732dc8fdd14571b1b374d9e5097a1ca30d44a27f4a8223f5ab2a99d0370958dc271799bb28811c1b7b2f6049a9dac0b7e1784444d76a3978f9e8c06ba32e42f522e6d39bdd602b7ef4a92661d176ab843ca6a630278fb42ba59bb044e272cb1c18095107d70bcc87fd710b871c93e7e1132068567cd8ed4dee452d3d4409d3247ce9c322731340b5e75e12127a6f235223941f815cad51f935c09bebd88d158875eff8bc438a3a2462249fddea02810d816685f4d95e7a7ca611aeb9ef9ec614465f3fd12bb1a8b45e4ecabcf2fa23e6ca096660249182e134294c74910d739bd10c17bc8bb76a36b34b279e73a01a767ffe062eeab5e35f1e2d65206e49742aa6e86071c0fd1f18b1ec2dea4d25a75cae581d6bbdffdff021aa01ad6ccb926d00e72eed73b29ccc156491942113ea7c0fc795d95e4f062609dbc05e8e33ceb240b270fc1a8c8aa951966637822c15eefef1c239e507858eecac893201e259d41c63449f4f2df00cf3c31323dc2da5d7ae12ee3f03b97e2a662c14a68c83a0c724628273ace6bf65dd0ad989a9a6fd6ca3f5194e7f203cabb052ec7492d4e6ef7a914cee3c662fbbc1d420ffc2c3e1d328b3ff320841f3eba5e66138353ae52182604a1c8c6f110bb6bf5bf8d7098965e411546c64c7ccef1b597467fe646b66a52d5caa5a5f095104504e9d8551e85e3c3b4b0a7225aea5f6238fff54a1e432d548f19d3bea1a0aff8d88f6ac57b3f455a625306b06aaa9e185c836cadc4c3a3d2778658a01b45102e5e425b8a28ef01f6a964b0a73f5e4deed8bfb50005cbbba1f81e9e556a5de3aa07e499f581759e83a01035943a61449f7a86987b164862c8eb5ea41e323e0fde335638d38323c74d3263c79c30549c68376d2a1206de624edbce457287d33a587f38cd37475c12510c7cb1e333675b1991afe1c980293f24f6f2b2e1010de5278eb8179188daf01270e6b5aad30bb01ee48a259b1f7b3d9ab8214bd4527ffbd702e2ab715ccd293aedb726ba2d6885e23393b2a85e0925afa6bf7d3a0814ad80500bca598b5942646528bac49dd2737a5713256208200daced20a1f2aacbe7f656a3aa9df29f0f718e8fb89b2bd4e261f29ae6f35342689b5e0c311058d72276cd403d50ecd93980e9f2666f78bd94160e6ac2a554737dd3d083229eca6bf93915b7528fb7561b76a7db26d89fc55ec612afdbff4a41015f111f0f3f54159a879a050e14d1fa6bd5942f78dbdc7dc81ac11adabd65853f583afb370475a986d0d53e3619"}, - {"0000000000000000000000000000000000000000000000000000000000000031", "006a5ad1ab55b33187078526bb6dbd8ede187ff4ad253197c032d0ea530cb244c1c9ab319ac5c07c07780145562db3e45603c54f201a6f030d615ecef686141b5e423ec9d28e8df639924c505e7939ecc9db25ba062f4656064cb7edbb5fe4341d3c093d937296c5af146fea07e7aa109b64b9653cee5beb25832dd2e3bf1fccd3ba3cd6908d7a92477a37767e3f63a95bee612bcf1e5984adcad3ff89586fd965e01f08885ad3630347ec914b0f84eed42d907bd27f0e9c323a8567e0621f5404612d441bbc6fc82779ffdc92b62c5f16310cc55f15f34bcffef5a0b7c671e455132839bfd9f717fa2b63c6cbdf80cd67e66c02bd985e9175be926e07ceef134f707eddd955c6aa104bac6ba83fdef8505f3cac6f05b74d5fe83a4703397929aadb247e43641cb272946860ca43e395a6a645f475ea69d994ab8c21e516e70297b92fc50538e95c7ea86668f2be5b3a090003bdac5d6015af9151f2bee600447eea9995b5285bbe469816dc2ce2f5bb09f47bfb435a6a1fe1e41090376abc18c5435769e2f27b5d1afdf906f2eb3f11b6b40a030b34e700f8023e86ab35f5ff5d521c940c40162393a8b12178d313f6e1f6cb4d31b2f52de60f8efc123ec6e30daca3254f66c80d11e4dc7393a5112f86df6406c59c3ed6a4ec0d2e8846bd08f8a2611afa513cdb711a7fc4da33e1af27028979f30efe5212fec6e59d9391f96b2684dd6c7c592a284dfa3cff1c004f43131225536cdbd707955f92ea204a34585a2cd0dbba39a3cd19ea670414b32e5ba50d358bbc8b33bd352f6b107307669384554933b8154ceb0ffec11bf30a6552a6beb9c752b7c4db4c06a616f2bf6f606c3d27d68b3aa333ec84d9df11e3a4af65625cb0871e136e2aad0b973f7af482a712ed6b65746b173f835bbf9bbeef69889fc2900ada925a96a2c4c3b89720015c5866455a4d54fc14c4380b51c31575719faba80272b4ed58da7acf4c02d7c5865756c765575c32ce35856f93aed21beb65d903ec974ad99724bf1fb0d94c853c01d5e43c5faba6c4e9e64755ba629b9d0a5b0b6f167d4832854dabceb12726d3cbc1cf3b31a29110aee9851649b08b59db5200e5d89c0d5b220c15de4e997e65ad7440d5c201283a71f028376431df723457b79b02879ca40da957b5d4f0bc1ed9fa663c45ea02a77e159399fa8bcf8d6456d4f1a905a2137f13af2fe36e6fa71116893aaf45072a79159d7db158a22306b9b4d6712e8c1bdcee51ab2fa280b3be051ed7710df77a415755efa0dbf9f4de3e67968aa3ec5bac2b1318452b837ca70bf1d512ddcb58e122593a5adc721a8442c22b57e99dedf831cb9ad79be557c2b108cc140ec510efc5eb81cb8be553414faba9b1a0924e1014622b1290ccd1a176a8e179caddd050a8a9bd3ae50185ebccd41cb405fb20c096b4b33074922c1a57050a9e41e6f9c32d5466a563b9cc64e0c9a01e5a64cb0ab2359c91cee92de2778100aa6346b36d19bb8073222bd98c3eab816fced274914577226e7fa27e7aae0f07657e0b8bd53352f391bce3b35f018fcb4ea89a30ce0784dc5d13ede07e768d4571cceee97afe03751ebd3a4cae73b4b7a409027588210c3ab0833826503a53bdd0dbebd245b8ae89db9f613887bd21febd6705ca059bbd2d2d5b877571118417e670c80b0980eb1f4aad252b67405ba5ac880a2b654d2e39643df4f805e2268f5f90fe05f8c603772fe80ee577495e81220ac7f3bf3ad21028b73ff1a193d53a75558f7414480f1a8c584210b4871919e1c60dff6144b7f930e92f1c43a9e551ebbd43bdd2939badce23428418789c8e23db79a8fd4a659c71850380e9c54a0dff6d90c1fa5b02ac5bbeb108d9dbe906956b59df3affca1a882e"}, - {"000000000000000000000000000000000000000000000000000000000000000a", "006420a42a9b5c7fe5adc71d35e753d21ee7165791029daaedf08fc5b3e3bfe14ab95b77a5ebe0b9ed5033a452cf84964a5bf6382477e3add595f94cb1a907688a378349636b3fd840e790d4c8f44270e39e1b8303fd2951b155002f014611035421a5c6d19c56c75d109f1f1a5717d5c5eadc78fcf7efe53bdbb33f5a26164b732ced67d0379e4fb4266b354cde8a191c192120676fc9094f99f38e7bd542c72ee54172c48f95a004dc8af630151735781ff50e423048e18fb55713f61fcd8faf20e56197595d3c3d4df9ef0f3cf7de8602088eb9c30a227b95dc5ba24e86d4aeaae871bf8ca71e30ecb9b7de2591c894839678baba455e13bc99450df10498a3498868de4fe4edefd252171f3d7cdc7e3fbd547fc4bd89abee1c46fcf7758bbaaca43eefdb1633e4fb3b2b1dfdaacc8892ebfe56b24a53b9e29e201667cd25f27997cfd1c72a7a6c7c065742d40b3200a8c3ee1467f233495a60c39a7f69827a047b011d0e284c3a185e1047f555c5728f6b4fca305abb20940bdf3351f015cd2330b3f42111b2fb1b07a67d4e031ce5996aeda8bc6fa38253a1ffc07ae12e4bd167c51454db63cdebab5bcc3604250e4604c9a66512fd20366023e0e192abf4d60556c379b83cd25befd3e361405b32741cdfb951482285995343f1be4ce05f8693483a544078daafe3936a85592ed4ea236dcadc129d0be186d39351da5590bc85384b68b412bfb6fed0a13002827d304da2690dd003d00d365ad8fc186fb23f2ed54efc51e55f9f6a5fc603096c66aa20f294f2d74b9f44974b6c8aa7c781557e51406d96600c9c874f23c1318a05b71e03bd20685dd950cf6338acfac1693209e52522564a4143c564f51e2ff46e0bbc9f7d88490d43353f93995dc5a1254969ba6deb384e5e61e5592cecfb59e974ebca69dc17ac615477981bfd61cd0090bf16532c7b9dd23903a6dc7a6d6189655056cb176f1174c3f902dfc89d6219ee1ef32522689dc21309e3c223c6476f111de18209f32f4394f7e11d65010aaeba40b7a071ed805af368df6b9a02e1be3933ce05ed73bead4e81eadd925a027de83efb546c9b40b7694d83631edd790de33ea90e3a5fa3ab5fae9ea692060978a0b3e13a5d7b49a31cab3c1010d882b6a8bf129d4c2c0d8bed729d095492be3fe6de70beb7761f01fa87644e835347c196e6b41cb89931f47afd836b0d61b12edc2499a37709a313d4c79928f1dcef4d88031ae1d7798578f95b2314160b46654d46ad9672c311704ba6b00936eb768621c1a8ae7ba90399bd985f03046314a595497b96c3b3a8e6f9d15f3c53bc84590b1df6af8ed1a4f784ada2ec3a28c8019e40f13de80733c865f9da8db92197334f291e46adaca0f603b8570a936a0e5aab8b94d6667f604430de7c70de7d0101f6f4ff3bc514adfdf15131962f3c6348aafe84f919738a7c97d3c442f85b66dc214bf69628ae7f357c059791e8e12267197934d6eccd7ef23e972d7fdf1614d731a356de7841f61261ed1afa8f42ecdb380bbf023929ad7b20796982b89673b674f7e6f2ce9b735804c53de464a05a3b3562c139e8b1cb70dea4ba271e069b1b25f8851ca1b508d2abf73e9126b3a9fc81db564cd73fbeeacd09a739c6d56f6fa4e6f6dcf7def0056690fa3bc309b98e2e47504bfda4261b055440c90cdb18e8d309e11baaa9e153e5e903a894c0d7f38b10c4bc6df295cffcd3a5f1c125c758569ae6388da636777788bb0e48113b9a55b230740c3a47e7fba013094f65306b8cecddb25d830c792ba057081afa64f630bdd27cb3dc5bd77a7984c88cf3dd55db7fbf558e0d6a624c2ed109ab5788d3de9bac0595120f50e50825820a76854b09f4cdff47edbe7a506a229fb83798"}, - {"0000000000000000000000000000000000000000000000000000000000000009", "00826d0904c8fae9b8c771e8d35da3694c2b9dfcfa12bf0b3a4c2c21abc4edf701fd5f95bb77985e8f191c8c2add2154e43d947c1322cbca2970ebb0f805601ecc51ce54a93ebd6445f7901b54f24aeb9c791f6709fac4e590e06c5f92a823443feb7a6f911ebf82e30d1602410784a635336bd61178d22b6e7cb47ff8f90b43923390082e3d07106308a8f2409569cf90930f11c2f44cf421422f6bd09259a03efe812b2512032908e1e3a26f43f380435d7606e75428d9ea6cb6635a2361dc1a67dda0f8f74a167b2ce8e7cef9df3c938e28bd8a88f82fa395c8aca3c0a7280761df64d4b6063095fef07a101f28ae0a039a8ae055bf063b195b8b0c8408d897eebe7b8e72179945c47feb4ba79b3dc3191cbd4de08f458bdf2da398b53497363cbedead8a11173bcb3b05916a9f02926e1bfee7293dff4df2981335b5cf9575f447fa04522cc0424f3785ba1f805501cb1111df2d442da84ce233d69607b1982e7dc35d09fded148b1e6a93d0d018f8d4ee19ce79ae7662fb17e74ee279a134bbf227f49bfdfcb63ded1d196b5b3565228de3128b311f01e40c62f82c71bff39c0d750811dd5bbae53d5384e6d465d97cf8b7dee2df14ae14d10b42ed9010908424836eefe739c9271a8b363e11225c58e28863d7040a633172498cea8d933b53ea40e61cc6659e9d45f6a105f19bfac622670b73cdb4054bba42c08b72ef459a1648ef63bc377424bda21313a812a37b0ac2dafafb678d9058f47fab61fdb9ab22e513b3e06a78238effc5fef8e930c72beabd39322738f64f4f7502f3c231e3e252d71a51c03a7f08060793ec18204e65948a6952249c7180d5539991865e2fa23702eed89cd166c93b25bff9640f2b4dfee7a615ca1d650f0af5d7409d42f066f1aa6d83057313f030b15b409512e7577535e7c3f8f1b356ef2fddbf2d0107610ee04df68293893370c0a0896d106acea5333b5623755799e661b38734d4995052e9c4cb391bf30aa4bd3026875c5e3d1eb1dcc4eb526d50d5dba7a10bf66b1a710e56bdba7ab39dd8e984250e895972a9035c2c5f0dab2061f0b205dc2e445c9ace731849910c046c19c52efbad887254afdecf1932ae80b92dff35a66d9d012eb86f8f27a6315eef84b6edc19ac064408f4b01bb96dec179aa15299f7fe2d275a19bcbf808767227b2a132fb1ab5f0878aa6cb58e193397bc10c9ed8d4490e011ac2c6a54feecf331a1756df95751670ac0ef549811fac6b41a720b656cf05de9de7a4192b69c5690fd8af66e9666af7b880e19bab985b3b157ee1034264fcb57591732a187cbae975b93749712b2879bee55fa87905353367c542fb6aa85d9ec3912595df1650de4dbaf564b6a633462b19cb5c5019d9308ab34e152c62c5edfa7b49f66ef50f84281f561d03a2b671d986ab9e801c31eee3690cd4a8003d05351523bc6286e34b43b488047fb74e73c17293fe349c05d392a3058b2e54ab84252407c4613d70719895312dc61b875bdaa0ddaecca8d95fe7068e67ba58772903bb8329a9e44de5a1e6e607533aea52f7d45e57390e425fda20d2ba5196ca323ee4232e567aa4b7ccc611816d078a07b409b1c642f1916f681efd6cf92fbe1768f3da33d7f9cf1aabd553c93985f63ef6f58c62052a56a62365793b87dae158d8d55d052790a943a8220db7cfd611947ea20a42581258f3918c6290ffcf1934228488a32f91796241e52573bf5e7e001cca1d2d198ec840aa1afffa2f44317ee3bf0ab8d91b2141194d27f00a14d903dcefa2307a7b1633755b7c69652bc697726c927d7baa87e692ddfbe75ea143d6efba1b9f6c616e4b6ff1d6a572c4f458a478c79117435b5c1d7b96146f10fbcb7b76b5d1cea819d1537ab1bb"}, + {"0000000000000000000000000000000000000000000000000000000000000017", "004e2b5a2020abd95263f39c4d65c1d9112073ccf30a7df5428e5e8a7bbffdb556d6d4fb1978eeae589e10a155f665fbc57bf3b4d1a10ca38b9d4f9ab6d5931524deacd7cf9b774fdf72eb87425950bde392c8cf0c8447c08156f8679702a1a3866b7e4d13601ca5761003db87feea6febda45c5a3b76e5a0992b91182c30eef5a91516c57b3cf8102af61e893561c0e3f6d48582b8beea1de094b33ac87c8725c2386a2eebf434d01d46cfa27ca3ca54a84e0b4853a49ef2862bcb18933a9a41efe8f1081c57fc661db7dbe56c2e7f85af813b0dca2e0e233d1a1cfd65a013de09e12d4bdcf89210246d735486ffab49b468606e091e5e2ba55617602400a7cb91de9e3a217252aec3c6d861f75f8e0611ece2c4efbb174558be083cbe752e2bef323bb6a74179fe2d11eb15627b53321f73ac7684b591f3afb8819767f67e406d78eced8840c19ef57fd38e06bcde60152101804a71d0374a9f34f1fcb9db6f9b9f8ed7418bc8c363348390d246253275fccb27e872e351eab0f7b02899043fd0b4c9ae22f6c95ac52a91fdd185f41852d34be23f14be1de966838724956d436d8c9881199ced14c5fa8511975a65e02c358522cedb334fa2d15e47bebaf62b1be11c3b84265db3a36553a59eb14c24fff633573adb1afe53a2ec158eadfb27b82fe24df22b2229a2188f3d8044c6746a20a2c13b7f53c09ea775af45be369d209a3470644b765644131432427502d6e585269055c48136166bac32e46c2d559a80e91e1348731e7279cd6fa21d1ebc1ff5f451cb8a1134847da0450d1bdf534e3e914acfdfe8f0a1c39fb14b55f027aed21a7d7656305eea2e6a9cdacba0c612b0c0c43c0d1a16eb9fb4a81246a5e3337e5f9c6581d29e3566b20658f843fc43d09e71a220bd5bb75353b2dfcb708340de9a1da1580807c2a5987b8d19870004f355b95832071b52c72747a6a9f58ac41997e5a0ef9509e592229d315de45fb62d7d649eb6ad432f60f5f75a8e1045dfe69517159d6e850c9a3c15d7ac61b77467f04ca7091a99b46313dd5a639b4a77e3fd80a25308062d56ee0eb1eb44f784a316d66297be48b26e8d24e0b4fc88ff99407803d3cecafaed8ffaee81e19dc76f06eae5b790712cf14b3b534b8743d5cf93dd4e2a8111e24f17d2275973544608e88237d2fce06d62ad6f64649dc3e2ac3999a27b7bd0dff90aca9119a00aabb6ac8f1b6d9f43e63e1c0222d0e3b219d244551eb4e5c068b416d859f83d431066423b807ee3e2d5b80cee773a1991854c56ed703016f4febabd2159483ae1962fe5be771fa067ae8b95f4ad89f93141c7609fd8b9cf6b98c606222921eb9ecfdcdb06afa1cc2647e4d22d7411e4079904dd2fbd314f45abcf31e0707a6a85fd631b41fc3432be18c7b5b9b3b0cbb014de9b53643f6bc629ec0dcc82404247712fc62820618a6eb8d86f36893d7e199b678d2b22d8378246008402c962f9cef67db64c32d4231ec9553a7500fc410486ade3d8c506dc517b29972ae9e7528620bf4cc075902dee7ce6439d85a610d1badc39d7e4e118f22166eae2c0f492606f53e019c754df61e0069fcb13316b3bfd82e946497e97713fed435bba57a8f75b66419b32a435b24c907289bc1c6d527821ac4e4bf3eef04e9564b9328b82fd179c29cdfa6801a45a5d540900b894400c88c3790cb3260c59f878611d2881f60e00a3c0ee7ded90f971309c207caf1b8012d7872dd891e153f5cac1643bd54e51436c12607ba22d13e55c9081f2204bc07c996485dcacc41d794df509afdc0c00b4cf79d4e890dd4fdb9c19b2e1373f25b88d9fe5727afc6bc1ce57e2156e8f3c637d2cbb1826670252942df0be221d7495759ef659892bdc75f47c63cace6"}, + {"000000000000000000000000000000000000000000000000000000000000000e", "0067af1274820bfb2e16e1fca76120ea823e5e13b2229815a4cadd5a3f69a062dbaace24d646e73c6742151c1cab9a6e78db9bb8e59d497718be11c5d61c2f160b9d9ee28a907301f977efb9f9efda96e6ff75dd071421260fb945c3d2c5dcbb31f476ab4fd97ab81a1491c78dd2c76954e5a4d426edb110d1ec92bce38611dcc17d8a5435a6aaef673acb3e026215d07be0f0165884185c21819fab0e23d4051eabd209c7f11f040618ba8e4e91f3e9493fe2079d23030dacf9b415552732071db823633f53dec479315eacde8c94b7bb9928645146469b0d6fc0697324633c512e7d8d1c2c392ba9bfdf1fd687fce7a3764a45d79e22787ffb4a3c0a21448ba26ba2a1c3c5c27defd44dca084eba029b140e58ea37a88b2b50ff2a1a1162ab429d891d4c462f5ab9fc615ce14544fd34ebe0fcf8f145ad1200ca3f90d3cd9f2a90f178ee44e52a4ba2b1e6293933f303a3a54f7d586ce3a2263540a7caa5a5d1823035821ebecab9d531c019b29c5387b0e674362c4b75c06913771d4495da11d4db2bb2a001c97c3274f6b6c5f451378aab7462d0891c337a38756f092b127f1cc11503ce8ee245071052c779e17344fba8e72e8f3b1a4b2e6cfd9d104f4147aab9b397de2688f350fcbf568b0ace4c8abf45fc50eb07e87953c44bf6dd5f1775281f353bbac14adf29d3b772568f43b6b9b9b59c35d505bb02ebb455043f0b9070db025ddf02b74e9d23441eb0cc90f4cbdeab6e390a4530e99baabfaa9d84c716803e6239fa0663d47ef5ed5f338b3baf247dc78322d7cab715d3bd18c3fd7539d366ab8d691e1db73e1140ed5ddc0db729186ea24062e8fe31d2eadd2ac01fc737e476c95b6f1f7604daacb993c596c5fda7bc1740d66bd779115beceea175136a5bcdab3b5543884757247725167095ec41f7272dda8dd65e9e787ff300aeb008354a18e293f700985ef36bd19b0cbbc0444115bc05a11be26fefd2448741eb80a9291bd293c817854b84061ae038ec5ef393d37b950d5aa517f2ce2586dc265312de4974235466112ada1572962f3d821fa29e4ffe76c1b5c44084e76ec597e1e518f6ddaa245a4b25bb8bf5d10d206257f64c5844e2d6dfd1703a034424e56b78b987f594bcbd292fbef73c1db13c5d24134fbb306053b2ef07ce5256520292f47514d701a312da0c664097cbd2f1741aa7999583dc585654045d354d615b7a13ccfbb57cf95ba7ba5f219587100a602b30894cbc4ae7dd464496b3f3ea7675d59f072611d3d6af91d655fc7d2635e4771689e06098d5660293e6905316dd9ff91c103157d9879c1ef7e879fd066f011782655de589c4a119ed1197e2313cb5ea640878f0bf2564ef47ee57391d0ff83826848f5b59201ef99f409b9c98b521015682e9fef849b6701164a6031ca11109954dc9f7493266dcd8d635f7b331a7399f3427a84cb4a2bbdc0d09fae852ee167f96ddc2a430214ec29025c14f31b7c350b734959b00f03ae4013e230e5fab29d283f9af487ecc6016a6978f3c49b803fbb795646d79e7d6a4b22c7cacafcdd59d15943f0cc589f193455e5e9bfbd7ab2aec97ea7c19bbab6b0ae0c9b7fc23bc0f2e05b1f9acd991962580d728202eeca5aa104fc80be8fd886c43e1a7476c565b82b1050d75cb5147a7c65d6f12a860bf938daae6b6d13e23e717fc291b34f4e0fb58f42f6fb9030d637d89a507a871f03ea86881d6e04493d9c6c3759bb6f75481153472086f5e93e3867255f5e64c42f3488d1c50f5169767f29893576dfbf7f23767b6abe54fa48cc6cd1de60bb07e12824578a872c2a7538ee0b45f4fa36f397c0bf8bc2df303d76604e0f4ba56d3844a9eff9b4b079e97a052d146c18b67aa0945626e44793d38bf"}, + {"0000000000000000000000000000000000000000000000000000000000000039", "012f3a69fbe4852dbd5eb7ba5e6a284a651174d15e0806c99e6517e048ef61516e0774b4353c1a36693602d5be8037d079e5d425b1c61023cc3963b578da010706fce809dbd9ad849872bf65e0da167bccfea7b50ec5222cfe20b355b05751b1742c06b9e7f7afd519328aa9d494d80c2f5503a4af3d732c11db83b6e4bd47f45d303156e81ad54fd78648c889d6335c1a523b51363faeae6743d97ced65dd1ec4f0ee16e672ff6b02ebfc4336596e4cd03ba72775528919f41ad8d5cb0752e53b5e8c516cae6ef3d588cce01501464e0529569403c0da35e4cdbfe0662948b5963e036a9951d373faacb8872062b97ea8685bdb6786ef17039a0f280581ca5d84817511a54d56680957429aa8adf955aa56a1569bf06704a544c95742847e2835f7cd3a692628ea73366d9a11770ece790781d5db16cea29a988235807fe841a94e8bf8cc6405f5c454ca28b21b17350329c74c772048fb9026e5f7cd45051dd1bbde75ab0c98f11dc116683f00883a0f3d59a7d6fde0186cb623901f1fba687819e980e63f0cfb9801d2e7bd80de30e25d87605812a6cebc8474a17fe9ca41947515b106165bf6e95b322ffebb44cc944abe21f52b949b341b627f6a2d5588a9dd7492e8f3ccdf8142892f23171d4fb36aeb4935bb1eda3726ea753d7bee277fb7d961ddf71a91aa3b71f1e7e694cbc82ba9cb7b3e423a04bf0360dc32dd91f8af30ba61436071410e1df9ab0824fc93648bf223e223025a5cc724d95d166cd14b0538664e4b1950975dfa2132dc8b6e88cc1e094fac05675d166d9eaa8bc81d527bf135d32d6af4dc36410948acd47e14e8318804b29be99e49621779d557601571fc257f2622395ea152bcd361ba60eed8ae4e050bbd6a57371f8591eca6b2f46ba2ac7519d1d7eb1513d68d2f7c3305ada496e1e95b1a346b75fe1ff5180144dc03da8efcfd8b0ba48aa0504257580ebaf09b03c4dfdf29d17674cef1844249d13e05583d31260f05dfa686b484b69e87b851d77cf39761eab21bd9931a4a342da51369f5362a98f24849d4aac8e5ba4f24035ebec9c9a860c156b4d4c37ddfb23e9779d6ab273c6c5dbf15d500f944f669f45a6d7fdaa28cbaee121a8a7a06418e41eb66f2a63e10d16971a7b9f8b9b2218c4c0951758e0dcc46821e3819493a2b31b576a501ccb670d59204a950a551519792f610d5dcbbc22f193d7d9537b300fbafb3d5f2d2618e71e3fbd05d480288741be713054fe621530f722dd1f24c409566ff1ae0894bd05f4260fb29c2e176f6009122151fd4bd093f27b0ff20b6dd594c919f791c69ca5813b5f45c20b1c96dcc4be72723cec5a4d148e155c1045b4ce3177f894ba4072083c46411c41d46950ee9167ce6eb3464bf75bccfa90cdc1b5352925906aea5a29bb3070291b2d89561869db3bb01847737f14dcc21f22285419e4f61e01636cf5513850384488ecf27fbbe099b107617064e18447fdc15554b2c54ea8e96745501892a51b67c6cd95f7ddad5e8788df84eba9cd75e890f05c995cf62c46be46bee730c6ea3aac2e6d0bed9bf2408afe5ceca4e0e752264dd73e69672ad3cff6f030702067cfae0a437ca33e1499ab7131d505dec46741553b0cd3fc9ac365c5f6802db4f8862f5f4797282030d565bc66ca0a790c363ad9d6b47816e780e32d317aa82ee1e530c730e3bc59cc274dc7199476ccff72a8efb574fe5ea6bf9bcf46d17d529eb3988dc72934d721b7de7e05765cfe787242fd0e80746551f6c640ee6dc640d4d14da99f5a6ec655b004e60c69b7744303d04b7d8e3ea5bf4526872964d635304379a0e7d221f7b7721fddd45f92af259cab3a81287a2dc0530287d22b30492b2bb1d354481b2323c4ed5dfbbf0b5"}, + {"0000000000000000000000000000000000000000000000000000000000000005", "00315eb8fc4d578682ddf164933903e8ddba1ca90322f7a5d326700311f9dc82d0acd6b214c8d6ebdc6807f40d5b4943e079dea1739d4aabf5e6cd061727da14c0dfcda695819b360111fb9d6649926fc653d7ee1e1e1c6522deb1ed48e6f46f127e7081ce2a328291292b9d3162afb53180ca2706676972ce4439fcf0ac2634c9a337ad5395e1c9f3e1832edb5535b893ad98334e2fb747ce0e439187a77b674c0f4bb95cfdf1b400390cba29d24092bad472149569b0888547bfb7593e2506eeba9397d8babd07fa834c99fba158ffe4220307dc03d0c6e02bcd2b324cf11981128165f61a9d0b137a2edf698e1f6f84b2a8823baa6ece225b9f2d0188ad9873957daaea3101b883c812c999b7d9fd5c2316155a939fed619c25f32702bf29f5cf103e069635ec139b6ab83ecffb0d93d4f4a6fb6f1eb9df5e62588acff2a3b158fd9a7a477a6cfc63663c8ef70cda017eee67e9434db76ae712ca26a08a69217c09540d6f485c7fafa2da0fc7d317567fdb53e62667fd02561714299d93deef21413ef58e2a376a39ba94b0765b352dc1d46bda765d6bead72426ea0eb3c482ff716615a23186f6ccd37f798961c70f5bd741c715bd6ffb24a0c60a291f2491db12a7085653f836d791ff9c572261a51f68583068de670647be384a01927d5a555236d07eec65537659b17eb4518bca4f6220aff84eca06956084a1499bc94b6d31978772fcca4c663b844d254ed3bae09b900dd61e95d12d5eee366c3b5b237a0d6e40a7c115ed8beccde270bfad2ee5a61079b36937994f5288235b2d2b01062eec454769b92dbffc4f12cda572da6f4f0fd9c182f49ebecfb284503a46a726d67c340a6bc5298e2435b2a7f1b0e6033e7df2c118081b45b5cd517706c3f1e83a7066b54b003b5a1c23a6df4ef1a0aa55d3eb826b1e2dd6a2ea8ef964e800fbfecf1ed41fb585ebf97041ed193a9f5e5f55e81593c77563df944f42ae427466739df93fc4ae1a9d1458978461a4220d39d0b2d11d2d7bed2b359a2adc1514c5cf4c559135265473030c4db84f3322bb066f05b2a04d2a10ac0183a634739d420cc54acaf6cf4c0872dd96258307c4b32592e50fa8184a2626d19b0a0b02447d55d9797fe7f6825ef7dfd05938081022582eb33eb77c270241b97a157f1af8db01b7d358687f0229128be307ab1dc21493f4c27817795f71f18f643cc75e7d5451efb96b9a264906c7210337195a226110b078b8a1c7d4885fd35a0f3a7a44f2eaed3eebd434a2dffb1d11e43d2a9d779b106093a62ad8b5043706d8c08b3c4d5c21c37c32b5c6c7bb7cb075d9452c2ad23feeebd5bf1d3a8db6b8a46a9175f95658dde11b5d7d6d8c14a09f097be7bb54f8102b21a25924ee8982bd9044b7773fd18bb89e39775952b8b239e26001216a4333b1389de3cce0eef196175e1783d1c327125ec521510af88d21ed015ee8509a4dfd7d50e0601de3b1fbe1c797bb4ae162ad1ccc0f8ea1d9fcca9e2c1cd641554c7f417929175036498a1f712afbfb44053768d6dfea7367eb267400c0ebf58d121196ffe4272e0b0ce78d4201488ed6c962e1a8f667c2f76655056511b13a55a6bf63433119e57e6e61f60b9a43bd0d7cdc4ffc4cb8f59e6da62abc423d46c2457fc40f0156efd3cbc7d68ff5da24aafa49b709cbf3198d894483f22c041998015dc26797d0d0b0fa1828f88918066f0c581508e50d8b9c71d8332f061ce6037ea1e52950ae8212a563f9bbb148869a7a3f1287a958f4a209be299d475f9de3b1811784c7cf7b6ed7e33cc2d90c7dff20fa8d9a70da2089666b50667370bddec0d726897e1b99dc54f0f0fe2a84b1faccaeb40c1d6481380235f33f97bf21c3975556546f73c1f17e74476a"}, + {"0000000000000000000000000000000000000000000000000000000000000009", "007636b7d700cf6c94c7e31e417aef2d13444ccfb5012d9514e00a02dadec5c10ef2464f50adadaeffbf02c5b1621befff41b3eff8c38dee732ed868f958bd1e60366da214b0a3ce14b287a6f772c2c644b9b71406e74f2e43435c79f25fd145820f861ced6d93d74b1007e51c85458d8b3a23a170ab1c13512da397fb320bf9ee07fc243d37e30f26b0e4e79722a4509fe2bb18c586e495c8fdb9756fc1faa8c1de16a6dcf99a020a426cf96449f67fa265a1fa2b7bd8f559d5d7f29e307cf58129672001a3caf711123e07c65eb17d63e01410742cd29b807ee3b0458370b9945e82d27d70f019c3c580b0ee1ae79231a4755ad1e0b581ac33142d0d5204876de25717eb8401e545ed00ccace65cdb2a6dae05dc10a1cdf1142b075e36501d3fae3fbfe9b20e43992e0ed01789f998748f0db7336ebe705e23292a42ee01aad64a4f285b9ca21cf2e83f30e179bc1802ab3ad655bd0d2feba902831ddf3c451f4fbec28c1759b79a7ed6dd4ec8d9b638f0d11911e8049cbe841094e20a1595660f2d3a814f48226b0ebd4f7a8bc2406955574fa1a0d78428a9877cd10d82717a7beb0d05e4d3180f975f4bde54813ae42864a56c8f9632520a4452f91c5e80a7674e92352b2f0b4572d67c23841a8a9a35e5a28faf50f242d4d8bc4c85ef0856d2049b5f0d21aef8b31befcf49ddfc7e1836bf14bdfb500d21e9b88090fe0738cd51e8c1e46aec8f5706b24c196693a1e220f4cf27b3b4f648714796b1c0b66faf4ef3764fa913ffeebd4856f1f4716f4e9cac598f2460a86311ca633d197c56573c2a3d9873056cb8afe42a1cfd7772f108e5f46962d9b872a310cf7c9669d32e19ddb88c5a897de73bb8042d5990aa74667726c337b1f9d8a2b0a7f9ae2f983d405535567b68b9524c427b1ecf61148c52ad1a24c9c53484a240321a655a00c4adcffcd19edb6d470616804932c7d46f5ec0b41e6f4473d0626c87c360d284f6e19ed4b73ebbe7030a9a44c4d7dbfbd7fc6c2267a72f2b3997ff5f965f1636df70e550dca9f602625b9e9c5f50aa557e7b4c015acf3c6501b3a3fe33a2d964695e552a1c39781409a52b184bea227bb9c4c1431a784b14c530565339082a96edf349a5133513c514c867400dd46a71937209ca9cdd704d7315432ff55157b808031d3cbc717203a0045d07cd1d91f9d1a2f3914d00f6309cd8394a0b4ac3b1fa8e7052f8207221a1f6c2d0cacadb6f741263676e1a06ef96caa1d2ce7c51c4f5aeb1d4e78835f6c59eaa9ade353e14056a6733db224476956caa0cb44401d7c47a1062682b32ba5f8af75e12db2a091da681b6f9a4b7797e20d29cb1f4e43167ccfe21e61868251adce8cea7db96e2a9ec28a7a4beefc74d6232096f93ef60a39d1e5723f512d0edd6ad233c11a0030766fdd0e14079d65201ae922bb1e4d8d116a2458d12f73288b2068baf792b8ed9f5adcf214a9be69b152308aca00f0c5d2555a4b27e48aab1b09d3118db3be2cc322c5d1a630e3f742b6edff4fd91def6798111f4c322d395d12dbbbf7854b7f2d1ce17e83498321534e503b89bd009c5ccb89b865ec91b5b913c040a3a0afb5788f603e1fe95469b1adea2d9e4529e1eba561d4424be7cc3f5f14cf89ca24e97bf56dbdda8e503e23e217e5869a58b78e9190a7eceafac2f5ddf910fcc8ca9cfce3bdf35f3c5e8785ebece6fddf4401c197f092b8c1688d734b5641451fac9e9d50df441172fcb5ed111d561c3387826aaa6bb84f1f43cdbebb7071ef3c4cad2d9b9c68985b712e45ab99879f199681001b594eb875b5be6d42662aa72def9cc973d40e70999f0e694d39b5b94eec596e1d2169b15177b6c7b0cf091e32de60059b1dad6a613d87689deb45f5704"}, + {"0000000000000000000000000000000000000000000000000000000000000020", "0048c6dacd48a4d9091658d30050325257e636f68003a573707c08ff046193a08a75d2fceda084f4a8830ee75c5bc3dc738d3d4ad175d90e2309a94e7748853ab4fca24ee3b047ba85a4b0782ebb71bc19f3827903c469f670101c8b084a105d04949d9a17a91286dd26841134d0e570a762ce32e5fbc4a636556dd43b102060aa00358c84996579746863d8de8bc7ca1ef1592dbd54e09b60335bc018740e89b36519f3f01dba4c063781f8f08a040d970da2128036ef11645b7343631be849cb6a28ef7b7e15d2343ef814a6b3f65b4bee1f7ce2de1ad82c62fd3f32fc11ac19ef14083e8ebc34958d26a23894c1e91939699e6f6c7eeb94f98ce5130c56b50c8f7119f17ad33e44bebf662c5f742fd72dbc7531214f28e5ae02a413afa4f3c190b97e52fe1f65f29738ea0fef8baa7586c2ea538198993c6cb43fd947f2429a61c3fa3fb7f20a60d4a2c9c7dd503202a972101d22294159b8c20e486d727a9e50bb401e0ae7bcd1a50846b09399817760befd91556fb971780c3a3a2ae7844660fc3c351a7644efde236d9cc6c30f21590cc10f9767a90183489f20d5ae34fafafc1f0541e4645b093ac9893dd061989cdc0e388993e1ff2de60387c324da8d9f2dd53c0062904e28bf92069e0920bad3bc928576c85aeab861e8ba7720cb99a10b456faea4135f677d1e61984a2affac0704e898403203d38ba5c0d10c1d1b8a03dafcd2cb4562da7a7f3c42e47ed5499699b13465c51c16b3ed7759d7dbe52413dd5160c0237b058b2061d1144fb96228d377faa91b2acf70cb5b1ddb4c68244cbf3e47be66677e79920a8a8719df35a3d7fadbb14398905d8c56c7d3b41260406572a8db08596a7b2794843eab71fdb21d485226eb2b213d17b75151ba6456eefa0989f67c99941d2eb18feec1f3c0b3d84fd4b78fcb86c1f536d4f207017e1a87f5f0c795a70293d42aad0dae13dc39947c12f49fd19ce045510358e6fa96d8f0d38c52bf324b01b51bba9c13e93f158f51c375ed57d146de2ec9f82df9fd7c4018931994be34b622eca4093533104f05045d154dc16be633729741a9c2bda0c5b3b372451a07cbe901f21838c6da14f1c88b5d04894959341f622cd253691b13ff457367c5a641bb363680e2d4a26940bd3214205a240b5f1094afe0f7d1ee23b8de70dd01d47b495c5259f18f47a8d1f46677bb33699a9d570c79a52076d20535b78b62cd00d1341337517ecfdc0b31870d0f8f080cc8a6839c4a305e85960ad0605c75763cbba12ca20de78fe814a8c495eafcc73c1c631171b3128b10ce5897dca1992a76cdb767eb7c718c16ff9c738ba9de77f86eb2593861e7255062730162172581795d8606f392fb127975a34c54babff21f774ee18aeb60a503e943301a3595e66b6e951dfb6bf0051d7cf5df66cc2d3c2a20cbedbe99c915e9790def60d6bc232de181bdda7b4766cfe9859ac8cc5728743447935479173b7f311154f4f13391e99d136d4cac53af5df0a0d50faeebfcd59228609a717aed6e5084167c2d5101d1a5414263da16ee6a9f4343f8da599c28775a70f40dace09b3cc523c866d85f83151d25bc2b6b9e135a6ac4a9fb18a34cbbfbe551f93cde4ceb30270ca676710b199f38e565ceb3f39affafdbedf6055cda63f1213f237a0757a9bdfbee861c6f56ea4b0c87546c0363109d7d7254369be4bf992ac02c19fd151107555a74e219b066236a58ca47d9cb13f9f3171b6c452fce518a05d1d2a371fffef2669aa21ce0b110cfad72764a13c4d78891f983d76b04c9c2ebdaa24bd2c2d71fa51bdf98a2f932dd56f8db62147d1d3f27312d9330f1ff25d9aa8632e4c72d2a3867b7232232a33d5ac45be18102756706446302ddee16791717"}, + {"000000000000000000000000000000000000000000000000000000000000001e", "00300031f011ff93ca7dd320f7c4aac5aa695186612c84a6bbe2a3a09557eaf59cde41841672d8fce0f0081d091bc5e9150bbcdd63ceae7c7b2a5828bb34072543866e4313e4ff4a1fb551574d401b030519157103d40974ed67696fa5bfb67e00fc7e15dcbe9eb41428ad2e80a5a1ed3f97ce93b8a3593dd95614d4a3e715de2dca770aee7e64ea9315d72c14e0ec924af9084e3cfad35f59d28f58e4971daf39d19e06943e08db018ea7681a18ef25c13c1284fda08f9e88fa1485820bfb5f0eac973d9ec050f29a57175a1654d6fcaeeb172f67a993887ec1f79653a8baab2bcad739b6f5652c15c4426e141138bca656c0baffeaddd00c9a0329042101432e1690f6e378313a6d922ea15a05afaa0b20ad295c3f33ec91a08483fc2fb10972376ebdaad705c574499b1384a940bc11709bf32993c7661fa36b09544336efd1db17603812415f6c6755b4cc754ad103c97186b533e459d6d8a26ccd7533c3554adce1a71805adf7d8bd09f1efae23057b5d4d3d84065049b3088e6db401cc4731e309b587f4723eb70058f950b51c10a6b69c521a5f162564b20339d2da84945bb08f12b07a62ff4a7653f677a38f0a58cd82811bf61d3d72fc052bc56b6a5f6d6a091feb6f56a65d14f6bfa324afc756c918417ac3eff47dd73c00a97b080e70ae513fadeb44a6572d8c12ca252ae0eb92ef01da8b7404860921980ae093820281a33dceabb91131d066851c56c62057716a0bb8f4f3fd55549a09e56d92d94807003f83676accf556e423252ff3a3c9458db9824f096a3b194c83320c61b860a65948ca1c9a9bc8ba310ab74a8865887c579808145d11584acd95689bd62720c69a1111d413ab6302325b6d1e66ad46e97de6d518c9e6baf8689dd9fc5232cf1cc63bc507a6350a7b28288fc177d7a80b0a63c68cd1df9a631d64da6917028743f628e1abfd3f84d2ad40f3ad912cc2ade127110904d17f19f6f5861bd3f836dbb0a50d9f10349806fa8c6666f464d9ad5aa367442ad0e51be5197af32d9f472b0d674093473e23d84b4858e6adc8973f5f21167f4085d02b84d4ecb3a479e9a43de9ea3c9aa321bdd533cd5fd0bbba2912cef534a0ee3ee6d20f372e9072a6e5a0bc2599313900e34a79ee95669e9d2e66164e1ab79e25ab1968d6cbbdbf5b56137d1675cc03393ac7f7489686b30a834378c2e54d879e59ec251e539ebed55cd1d55eea28f5485418e240aa5728720fdf19af79d01607bfd3668c003893b3172adf214f139b70cf5a094b14bbf0c1a847189dc4ef8d89baaf1178cedf29512ed0a69cc319301b1c56fe0b5daf521d798fc908cbfae19017f4be3eaf2f76cc3dbd653529a64df493cb0c55241502d8cb57489cfd7ae8738248dd0dd613e92233ab4504aacee0e63271fede7a4b0320d245159cdf795a9d736e4153ac01b578559331033dc56252f242e1f791a69f9c55cd7e2a4e718f7212cd57c098a8f929daeb82eaff54634936fa1009f82bfc7f75048fe7b3c792a38f90540555ba12f633c310703b955c5921711e0c54dc5dff0319a5d7f8db931cd867d471257e7bce94344bdb5e779595d4ed42f316974248298c9410bdeb38090d7e67a2931f59a1d92968115aefa041b1c6fb050bb5bf3bd5be555ecbb307c0276f97d8e349ba0cd559d86f02bd92106f592e26c643da125b09b56b79f672117e4a05b942304f970b05db9e17561328cd9f9204dcc76b58bbe26967b7251787b38b1272a993be33f8294bf30586185d95e90bc80a12c94ffb67330ec986a5532d8e680d5d0499265dbace7e1282cf5ab785f1e3b3cdde8df95e6c6f142ec6a0034fda19b67f029ad259375d6187ece3132bf754e603e58f59736c842f6423eca9160c3713ad"}, + {"0000000000000000000000000000000000000000000000000000000000000008", "009a41ce877363d1ee5860fa19102756c11b5f196013bad670a9eb746bf29b344ce7fff419621578a5451dc5c94ba25c01ef1ae46578a0d1796999538e97163e9867213ea0737f8f6c19f6a97803db632c1b842e0166b525d0d7b8a53cf4103c10241afb23d0fd6ebb903a57ed0eb76757f74d19fb9dec8dbabca25b3cbb08ad89dcd7578381af0bf257a91e8dc0fa086c166a2a2b74e8c1fae651e2324567acd5281643699b77da00b65ebff019c4114ba47485c56642b21cf2d49e7e1d7f5641d85e268540fd653f6144c16d881fdd62de0427b751be0e7d70c4f9928381183bde8e729ee331131b87503ae99e99d0c7f1da03e0e3a21e0b741c0704327247cf9292a76062909ca71c92489f59fc48df20273bc6188e691999a2c49c96e3f61dbf866e457408d6d85aea628a2d2efac549dd64925e8f43fd60216d6f067c60fce977fa5c06e7e5ea54bdd13072aec200f493b60dd753ef1fa61401b0fd60337b47fd9a19059bdf531485c7da59ce91a42fddf169224c2fb6310192e5a81ec76e8fff2091f4c0ef42b9a37a921a2e2db1841d32d82e0b06ce458d2f44bb9a47ae34f2be04427895b4c76da145f766d6a458f46706cd3faf4c35a31487184dcf736216538f0476bc29342c6c4ab90ac60b9314231241b630d3c3be3c6bdde93c993aaf2cbcdd117691fa9495dc64a2093f4116e5315d17fe063bc65787de0fb7822f7242a45b35963d865cb7b70e3b74df7d1fb6c7b1da9423d0a96ee3092fd8639b0725d31f11c4960f502c9617b0fe4c61bd093ed4fa232ce26a89e0490fda79040965726b42455772d1df0a3664c1db346dc3d60403eed047325dd70f324390165b4680be05fa23eab23563c43c456196ad109dee0eb7c9e5e550b4f7dcf1b26676c24184f69437efe96188ecb6d1a7e145edf657f916578e0eeffed9a03c01549bcc6c4d66e58b1c1039d78dad56b25e1c529602b5fe514a5a3ab1d4a835313cb6072a2e10b2c3680905c523d8573035255e9223564d0ddcf1dfdb5e071f89d27b2a8d626cbb0674437766eee9924daca532031220a2aecb3ba38d21e83950f77cf659b0dd794c222572eec38c6db5716d14f66ab4b04d7f22bf5cd605566be496830e7eac9331d33eee6c0d24c06d6c7315247673b055699cfb17a37951f23752c59a7e03fc01ad904a5d026fa5fba1d5c8dc505ed5e85ddd1e72403a8e3815e17e6b77d4757fb1b109f20bcdfdc98023bb6d00edecbefbb3b13341c9b464829a8474f1712ba1c5067d9e0643412222f251b994d528d5d2c755150c59087115928927c9324df8d16ddcde404fc7ff269ac7c2c6951986d27e83910ef26bf53597ba1c771f370b7cc65679e79ccdba86a2f701beef2b9b5ef12c490549361e44e1aa808304209eb49b50135b2a380211549cc346d434bd4693304b307749c3c216a130039d01a63d5314a7cee6803d1c90cff04ec71d00410ccc5584608f5488b393334961426969ec64df51b42391ae7c7673d517fb271983f272712a64d35c3e7805b23b1d4d54f4e5a2c4443f7bbec389bf55d77990116516af405cf5672cc2b236185858ad4f2b2eebe81661ae0b8d4dd3b36e3633b36f1da3a15f8cd7e3914df16cea6af9b567cf3e59e4eaf7998b43dc5d9a6203516cecd1d85a83e520f20c81c50aac9d437509fe0742296d0fe37d51ef0ca12c804ec522fdf4b896330d1b4448b303a2cf229b311503b796154aeb3b36f10de522113b0bf8b8935d63c097bc4c514f26eabd9506873508b38aa3fbee462457c3db94671a8b1b132b2752ab64615178049043e27a9d7992a57090ddc8ec0f4f44ab7e1165dd7827680d41583696f5259ab34a154374742a157bc5a74983e9f5a87b7d2dca0fa2fd"}, + {"0000000000000000000000000000000000000000000000000000000000000028", "0028ba8566cb549b6729ca31366c4e57ba4f5fc0c21b57a1b9aea04acf8f06a2b9cb1dcf8a2fbaff1f8113822bb582922595a891ca07e9fd0b47b93c1fd8b54894e5234e74db73a88ab67ed5e815034cb17dcf7c059fc192e4522097420c39f5ccea3f6aa56adda3f408516b43650f6e44a5fc839972b29225cfaa9f26e01ca87585cd9c0b80f601b463d0aeb1a310fc1986553820875eee1dc0dbd668542c5b34b7a62f9cf98727016c949faa1fbe29e739f785cecc811b09191dbbfa0dd4636ca74534bfc7ba46a154f43fe6e4bbda100303fb5614d5337099c2f8f39996e54cb1e9b8b0b5414bb532c075a334ada46dc72d06f961e2e2c297bdd30f822b2b1554b3fcd55bf18f182b01427e179638691cb60fd2ffebc5a3806d74dd8ffadfa180bdf8dfde358b5ba197e1b04b460644202f57df152cd4f29a036e6cf56841a43887624a6ccfc9e9c3374f04fddfd6007ec81ff216eb4f382d61d97c26a8888d9896ed8a45240f27a3e475a39234169ede4c894f0be7ded8a70093045062847e03bb167037c2952a425e113530643cb8d2bd2074ca61bdd6a47a9abd6c917ed90c2bde0e930ec53a15b2099e304101a6c2b64058cbd750be146989819fa7d4d3472536ecc04fed49bd21d9d4b118c75cde96d4ea5d3f3bd326a63620096bdc53305623437c2ca88c933481ebc64c0677f0af7afabdd6ab01711574dd67d369ddb531215dbe7194f0e29123023e5923b5ff597553f213249655654301a2a12ee3fa0b58f7ce668de8d3150340c9503e77f988ff9792f627889ea7d69fe7abb38f82a19f6a6ac1876c32b9380c205f16fb13809ac8a4d1afad5806a57d13792f3515e8996da36896a15937546a074f02829265963cdd1e30269306cda0f886a5c2686f6c4424cd4856a1281ea79d9e60b165e5949c42c31d2218199936f12f73011e46133f40b3b703b76210b8641d593c6cebbea31d3bf1a77130a841c162657386b3622960a25a02780bd9c9b12c389707c88d64cdf8e6cb222181b5403f17db4a78568eea5dd50e3409b12753817dcbcd8cde06aa2712f9cf813711e9418cc09dbc00d19893bbc008b0bbb2bfd01c070d35a58d524ecd5ec4d198a13609de852ab353023b768183e100b74585204230eb4742142b7db65ca69722ef9534be386795615d5ea2c2029d7a5902cccce78d16f097272052683ce85fd6f22108fd4015db5a9b293ad25b06c10200e4c5be233b05b6a11b29f1b55ba9fa633576c061260da81bdd2105d297c72f2d4c91a48945ba206270c3845b5cd76518208a4ecae4744bd5f45283194900351e5a8ba735418f3dfb9fad92dfde64d5c22eef5d897a00185f671d92c1e0cf6d369dadb676495ae5bf5368ed3bc250232137c3884b304a7104f426c9e68565e906f20d9209b67eff681971d9b89151e59e335cd1600810cb3f179c3f2f6a208ad71a9f94d74cd6b4c94d39b465b30d53662ee1d04d8b7cf87291881c0466244979112f1971cedd2e86d25b8441626623b2b9c94ef6ddab720f62111d110edb8b22b9b1905aac911ba3c41f3c3b17e97f0f791e72e5a769e4a12f79ab5187c63e9f2b11d9c3772657165f49a0f24b867998812d085734762fcf0e654ed2e0e0b4bb245dc838fe16e177beb91a0bbc8b92d3ccb79c850251c02277767879f0daa3b72d90723cc590893adb9cb4bce6bc692569682bce622170120d03490ab5991ea375917305023029d8d0f24aa13c83343091f996ac54ceed79f08ee7a5f9fccd128f0f8c6d77976fdd388172fcdc4bdcd30eac49b514230fe28613a4abb139e521bfe9094eabad3e0b8c1d2ab515360caae7c29573c9c0310096846999714f4e523e9acdafb1cda334088dbc6a6262c52af7e471"}, + {"0000000000000000000000000000000000000000000000000000000000000000", "005e10e25ade6dbb9f4a30b487a53178fc6ad3efc50ee83d9b18885575e3ca08a76fd1688251a41a89db13ba975fc245f79b735a47e4f6ee7a667f077ed01356dd935cafb0dc59a47ba6220dd8e16314b21de9f70a70b933d285f510f16572d5973480d8e1e17ba27528bc450faa0babf4d54dc67c87cd6dbf5bc1dbaeb22012174efd65bd83dca2058214d80c89b3b91816f22ea9ea866852a8d6e5da2c597071bef370857d3d2500d26cd1be85c1e1131123c9c4dc89d6bdf95c8f2a32ffdd691a8eeffb56b164b1e14e9e89524f14dbde055bee5da08ee4415b5f04806cee677936c02d61a52a4454218e1add637c2ac329c6c475f90c6a6ffeb703c9553e6d475399f325a21735e6272556c898ddb413bd660f3250540d873b63be28dca85288581513db0b492f213945009fcdb61470e5f1f80595cc72c05924671468fb9b84f5d24cd4c4dfbd456a036a590cf102a90bcf202786bd9c30306d3a16179ddeddf126c42d353c774c2f53d587b8392c0b701fc71c98bfa3ea03387e75fbf02bf9b11e13cce27f33c7c436df092224812db4ce0cad13e2e8631c44b4b202b4607691c00df8f677a55e269b88c765520cfa148954bdb31c88109efb58c3d24b7336a415a7b8398675de8178017113375e3a5ab0f7cbfd5386d09dbf5f7dd3ffdf98481555cb3b939eb80b72a8f25cb37b5ab6220959f15102d86b551d41c8e7ebe6c15cbf2538169fcbdb38a8075e054618a9ae238ca5209bc64464b20fc4f6c8701524832894dc742fdab2838e276164a29b71764fbe445bf7ffe5ab3ef3ec77c7922cd6cdb22cc9f7a4610a782ad2b884d69ef9dd661d6f7a54bd8e800d55ad0d2bac272ae02489039ce29d00d852761586f23dae30d17c44fea793696d8fc4d969a9f485639bdfcb2d3dea7bc0d41481f556b8268f6ef2d785c671f0315300d9b52fc41df40b3412601268e553fd113629672d05b8d2b8c191f40cd4bab0f2f2f0e3d6a8b9d5872c12ca16849d5731a6cd097422163f40c92966ab29dd1358fb2bb8e555bde2dfb16c2eb4a5cee3281cc21509db52720f2f6a95fbb982c136a37ab1fd449356dc1eba6e18f434d529d68cf3549eebea629320b50f242fed338760913e2acf1c37252a7bc8c6a8903d31f134fb8a10ffe3cd77e8a6f3fc9f4793f5e3a439cd86063fc56e999d902d225e33bfd577cf5ef232de9916096379b0c2505ce0e129f09d6b512bc8b5bc7ff9d40c6e0f00f84766072159d59a5d3424ad846f79eb0a14087bf5dc54723ae7a5718f49c20df6baa296f0c312d92648d78805ed5f7e52b7bff3f0d7a767defcba21b65b5eeed6e321a320b98c1bea1ab26d111d9ee024d3d132899950f11f9d54d0a42a84b21db678c19c27ba84f8e259f31ce1a794689873c98dac7c6d716301e9e69ec5cec3293f9912e7017a33f0ca6d2a0d7a0e51fe159fcbeaaef1042110a2ea09812dca9f579d18046c36611390e5316f64a622eb72efc9db3fbb413fda829caa558a91b0f2472ba8bd7e66fdd6788bf10389cda3185bdfdb2bee717c4d9393053519fa476f2f5aac52f034e34fdcec84462c3e51a67af39580c511b29ad2b718bb8b00d2e48b5c3739f5501675b2311f9daaa2ff53f0cfad70b31c81f49e8daafd92f11502aba187d21f641f06d7355286543aae01ef156ffc111f630a88a3924b45c1d595273892663ce79e477c165746b511c744defc4e6319097af15d56d397700b37f85f627e55a196ebbd743474bedf86365457966002d45e9374ca10a67827a381dab09dada93c7743ab1569eb6bd71e27018d44f529d535f49be59fbf520808a835ac471344dd5ef919d96e5804cb6effdd7ef244214eacb89503830a4846b9f455e0b9caf55f1281"}, + {"0000000000000000000000000000000000000000000000000000000000000025", "0013d902acc168f4772161f59bc274ddde6637cc660929fd408d183bc3da498864e072507f1cbfbbf9750e95cffe1c5ac0dce7cf512f964e5a31b90c8f18631a62aefd22dd34a9c82564efd24020f1b02ebea60a1820266102912491304fa22f0a67dcde78bb5583512fe99c6cce6c0779796313dc4c663d3d402f95b3e8413cdab98ad7c4158bfec465783d7f31af2bb143af415c7e13a2d0c332f63955ad11e6616b93385d763f00660c8816af28d5bc0613faacc54bd33b3aba3129080ffb112c463a25d2c590c6c4e8f5e1d2fe3c0e0e08ce6bdedb250faf39a79418e3bbf73bc2081e579a52ee45823263d2cd55aefab4e156202eef22d7bc320843678d0b0eacc2fd5790a7ca25877c4e9fba592b09362bff07e5b6b5b258e3d054ac0031166c6a7ba40c19e24e08cf2f53d1eb469cf6564072e1c35d1fb71165ac2fa404a80f9ebd31a1455512acb403cf8dba0182239a24e79f87f4c8f19bf50dd2f2ee5c3d299a11f610b2f8e84021986ae172cb32fce67d90bb559a06643a5be82b4c25a799e797acedacadf07651c54112f25a5ab62e244ff33f556091dad5866f87540a7213455c5bacc7ca26c73d78f2e4d4427295d216ebd4344c05dd1f510e1fb17df5b5da507dd676a334a8c11cf02533360e01a519fa05a6f33a644e849d17e49a29c52b414b5e9b34f63723461d3e4a02e0811f67c706bf78e0f8cb8d0fb06f61809cdf706534287343cd0c9ed326fe98f1def93e2352b2ff19dda7abf29eb318dc36e5d45a6d9cf3e352c0b9965b28dc424ae32a40cefaa1ccdf1f95a90dd425c2e7ac2670931afb1308d3e4eb861754492dbfd554cb470d5e9ac5b9fabd0d18164ab45980037e64d15d03552224bb330be845139b4f49491becef03b9415388986d6893ae88b0e616a60f5a5da2a2e7c10276586d6199de9a521dddf700ba683addd758b312c2509d4ba13bd46581239d8a30ee11b271a64711c80ef97802ea946a693f16c3060ccb85270de6f043495f98d397df04163b095b830f2632d7cbb8d0d3fff4c39d46dcfe58d358e25f3bb4132b26d88a06c1b3e3d7a32550301d1390663f6c1823cd3d6735ceeb6ad9fff2dda1f35c011306508dc918fb6f7466e81e577610646f1b70eeb649d95f4cf52d99023dc0a73daf50f927b41860bf4e0335b6c776082c7b66bb091c7d37c718a277c60b667c61f6cf1423af2990c2d840bda5ace5448f5a93e97c19ff4fa2169e8f5e19c609384f47492554f10552cce5d78b9f3ea964e1e2591855ee1c252337d2fd4200339833c20c1e03bf1e852a2d1691c7cebc56ae0ed27d59591a1a824365dddf6f27fa76b22d6d15945d79581631a322e69c3ac4d80b80f624c262e9fdcfc4a1675832335cd2673a51a091c12e63691ee675517a574999abd6024e80a5d8024b328fc094e09956d629c6ad3eb9ea052c25b7ed4bd3047734426f954089a1145b38000b0f978e5d2d5ddf5ba28881460d4ef34cf7ccbc2c143941023e6d703263aa9395ee015e4c7dedb6f64d5a100239c6850ae62396b04504a9c82ca7144b796d891231ca1fbd4527fb6b93d48c8ff8bf0f1f869ebf6d115a5a192353fabacac0e3b01fcecf3f34c71fb8435527feb3171d5907775f05c2a3b1d6a2f8ef3893250d372abe33879bbc60c633fb443256d15bf38fc23220e687de154b51cfc161a21e0fe310c6a6d7bed1b20fd778c08b5436a7d538228a8bb1b07e792e94fb4d1ffe1fe8cfd3b90b82311473b4afdecd97e8fbbd230d71e9d8ce10303cddf461677fcde6456e2dbcf26d715c65f372e36d5997818a6661fff2baeb1bd949240de6d3dede0f661accdf84347a5b9541f2f3cfde8c48f56afea71665b6d5f284e4d46f5f6dbdfb77b1d3"}, + {"0000000000000000000000000000000000000000000000000000000000000029", "0068a20b33963dffe13d80a07426f85a5d17d7a4496bec63ea6f9ed6e7c97af76673f3f96b0c945f316e0d04b6e7d10c3c8cf1c406889fd3d7c5ba80d2833a2466bb8123d34ec98aa984f1405e35c5d9a67072fc0c216a4900d71f7fb676219a3dd75c7a95b6dc8c0619b66435790f52a5015a45810db8062d6167592aa70e17ef1cdf94d94b16740b7e627f7a9b10faff45781a9ced61145a6a0be486028ae67ca80ae10d57be61022467c6b294dcc16d5bc6fb94f2b11298ab57a25d236bd146b772d051d2c87488bedabd85a176b23b330b8016e1d5c9755fc6c00464307968c65ef8db40f029b9caffa4684b09bbbbf787e077f8bae7bd17a3f90f713cbd4bc432319484e45ea240986e5ad4dfbe51112decfbbad4f08cf3be954db87debf69a741bcfd912d9a420b5a0717bf92001755fa90c74743bf89ca21c03b7a23a5189efd7f839655bce8ec34f3bdf144702fa91b160d03eb53601b09d8b183d3936b08bf6c526388e8de6dda4011f2bc49fa2ee2c5e00affeffa30d9b9d3af49382593e2a221ded929b956914f30c491b94d18c32198da95716829159f7259a004f9e51890cd1b37cc74c5e9523fff33d4a344ac5c4f4df5f1e20568c82a818d953688df2698ac3c130d97c6be66a12fcf12f44133e436a04d13accebd314c2e3fb7d2c2531079d60eee28ff512360b0e6332c2c9a15acb4603afba102f5a96dff90335080d5702765e76ddfb7e0c936ba1b65e38b8f89a814170d7e3ed2a79ccbf2f0777f3de461a6cebe9c79477b2e1945de1e0fae9dd197a0515c89cbbe2fb6623b0fe2e30cec7427b595a061911fd8c291227b37b734b4e2e7915d451dfcfcd06a2d5f0a6d865ad634480f0415916e0caf1ac96580703f52dd58dbdf92e0144e1f15d4bba0670748cde2cf0b1d96a969f13ed0cd419ab3ba59dc0f2722ace03c66b9fb5ab7a0dd79c049eaa475e8d6d5d5374a352153e01e2a0cd0b65eb86c20abdd48aa4863cb2430a2db95bcbfd4c21f35941732a7803da2022be79f02e934f7ddbdeb153e75105c1eed8abca7cdb366c48126b692fe896f95369efc2a5cb7db161090c3e18a42e10a3f1f8501071d27e374f5ac2e6864dac184cf712f171251b2547175206e40270fa6ffd89509b39571bab0c9d1e61507f2b5422937469c4f6ba2bbf890206a021e8ef56874978b664c45c4b117df9b9ba042e271d89c07bccaf392f8826210a39c39191b191b2b60c295c29510511b0c5ff43446bf6f249618d9db7d23f29a3bdfe9b8809a76e25b6ce71473d7604b5f6490c7d5a5b01cc4e5b717f7143b7ac28060e4a55dadd0e0d2964961e5f1d5435a49b733b332da38657b9172209eed5968c2c3d5bc75794ef67f09752ac3ac10262b7abc2de18df4f5c94da8fbdf4dc86e97339306703f2a320be07c59d5aa5720afdef29748d4cbfaed71215be30228e0cc2c47347faf946626e85f1d548c6286c24e193948d1562fb22f731ffedd4ecadaab0b43de68c000b5c438b476ba61026336d66d68a96d685041729ca1a81f1fff140417374c48e7328b9fc8391126cae4d4f8c9131ce1c024dd420fd1d178790aa150461c7ea8c889f579c4263d5e634bf81ebae373abc10641b05d16c7175a43e4120bff13da579f1ccd1b60440af7d0304323ddea3c55f81bcfa72417955932441cc7c9324e01fa9e5c0e78a975f221361dfff4f9805541a09ace945e5e5ff32567bfbf11d23a2f726a112c35292e00e1412f52b815112484effcb683f6da20799dd30a882a119cddf76a6d971651a2d4571736c2c3bcf76a9d58bed2c91b35ea9a15d84eedcb117df0feb1887188f0c04ff25419ae0e7d688773807e4031985b91aef468c99c7d3488541c574ba9eb1f97669"}, + {"0000000000000000000000000000000000000000000000000000000000000016", "0114026523aa61cb9c0ef1a0283d6164f0dcca4a283176afb68ba6a141b900481fbf776b12fc4a597580199bc7a218260c8d5529e3fca9d226c2d915d7655931a3e2a579db07c9c44f048da0aabc4a0d94ba19a5038c45e13118f49f6b62a2715e322b62ac6016aab22c00abe42ecf22996db812e8ec471bd5c652fca5b50d631a05c64979689701d1a556f930393233ddc7180fd554b5d90f6f0d724262a232e9ca65892f0d5d1407513dd7e3e0248d5b53e5553fd1f38167e8fc8096132737810c0b491b56ea740fedb9cf762343fbfd4610e7013591c47ac033be434449ba1c0e4b9674ff0929856f9682228e212b4552ea9064a5fd26617b55b9131f8f2fb454119ba93fe3abeef5c1014b428d83113a9bb73d76e68735ab5884912bd8b5b25d04b90c9e1b4333cf038d9254db60634f89e599957c6131af553ff17dac66d3bd6977dab6a6b5785d15eabaf4156201fcdb6580d926afc1a740eace9712ddb08295c43804f9b92cea91b91782b62238306a784219e992361d1c19af3eed50622307029433c4dbf1e3cc775ee3502432fc5416f4bb7dffc1296875596c33921efd146f06da1a52c0d539ab6bdd0397e8772393665f5ed19c38a12a5fbfd92ac4ff83c415abc361669827d5b9ea23f2947ca55354910b173a5854e2c00ea6be1fd1eb36cf234a1194095368f2c65f555425776233dee2720226a90200c20086f0eb614251216ac482232d47c91c2cb9080fa80d337c55c1c8755f7e31c90e1c82f70585df997a0517088e2962c176e928163346921940085c89096490c21aa1a150b18846d3cc4cf0b1c51207efadcddd9f231158ec03afb038a40d0764bf87a22d23cbf69e17bc1dffd1e684c53a4635ddd9eef79e14bf596d4447fb0165ecb3da89bd15de9f9cbb6804152c3bc525687aa78e83c23d087a7f7277c6fb9fc202f8cb48748b649edbac4137591b71ec4ff19b66ee1ea3da469c4cc1a0fb15e59417eb2529b3b1d12dcc06987432501ab5e5288740857efbdca0a33f48d5c72591d2c069d2b0391f36c523b2e99ab981a0ce65651c528a56b8efe4d383cec2a9deded0a95378af3f334cf5a5018533e019de8f081994cf7a5eeeb67b07ea1e89dd1a509243c391ef942297d72ff6c8abfe24cd2f630ea9fc25e58d912ba57ff247c529a98c6eec0b05a9f55f308e6bb9b201616d786259e0b2207c422f11c9e529609f22d99ce131a174e842f580476df8750e4d9a4f6d8841fc4e36566f3abf804de2b993333a2cbb7a3731982b7cc27257974ee711bad08ad8d7a317014b8b5bc7b30ee1d5522606e41f14b694897f48455b8f5dfd9399aeb43228ee99e3501a45b2d6cae719cc36589835cab5c402e3cd14faabc113fc7881ef1f899ce27bda0da30084953778cf4005d302942cd403011755214d9ea2d63566c48ae88c529947f8fa1117933221ddde1f55f3bac2ad5a5b91c662dbdf715c50f40f8796e96bab6baad88fdc5e6b9a7fdf3f4a905b48831c969a985347eec5e81b57aca6ad4d5575ef0cb2f4390990b60bdb5b118ac8453575929bae935c10ac5f1448e72fb19bcad2160f6059cb8ad13d0c1d165acf666886e073241772025eb814e909b86fc04847a94ee8a02d171f89b9f5f9354970d1946d78bf01091d33cdf3b07269beedc24ee71e124cd15f95b86f274b4d8b37603527ac4582cf59b113f26d6eb7b8d9107c67e73404add904dcb17b8025c6854de454d2272dbd61e780161f870452f4d02bcd24e2c48e3750590d090c962cc601e912a8b27677d16b4982d1dd3a2510b38c8cf69c4111f2bf91bba16da580bb60d073c71497e2f872c816895cb204e429710322bce69ab4b621661b4e902cdfe3a58cd32eb3edfea5045a9c6da1"}, + {"000000000000000000000000000000000000000000000000000000000000000c", "00337a3fdc5a3149803651d9c42a1698ba6d4f7a04072f15964cc6b212950c0314744437666e4d9395f00bf8254ace4a78b96114818016ed92edb00538342a17985a2f946cc93fd3c0249b0940db31bf9575941f00af32c134cb8c331e81e3802fc5969188a19abc7c073fe4fa46c9f2cc61fe4280ca220f266aff36069c06ec91b8ba5403637b8a1088fd165055b71afe22180c3c94b8ad1ba1af7d2d51957bcc636a1ba6d23c3b01865e9cf99d0667c1390466d8577a218f074dce1038f3fa07d799eaf5cc5c2477c7c6c6997082de22b30f5bb8f3a787f66069ffa3adfb73b02a086c1f2e2e20c1a4d188a863218c47c41b875b8a0700c67e38b109ab4f55a5f77ab9ccdb629eb9ee123156acb0646d1791fa277e1276a324bc021f614b9f38e285b2020f0a5d873b30e95d0fd877a8ae21d57a6e56505b53bf169b4c3bce1a75fd4137b286f73004b256b1f5c98103a4da5a3a954a98f0983a0b5b76b9e2be4bdc658e068a4458abf513fbcd79e270bc9f1c076f421f716505cef53d4acae9652656211c90bcc64c79df5fe3270fa669bc150b6c72cb4b66100c3f079e7990d4b65113625e4d35e8ff2dda45430e0a6b8042915cfef34c324b0ba0e7ef7b13c11eb5d63de1868a2070b2758e1d654a3462b5b3d9bc294af6a8fc895ec3ac77f0252467cb0d1e20ba63b32bab286572a63ef8c8de977207d37acc4885b9df3246d3d1b962b43142d23b599a11901931d65d0a7d1757e6d3364c5626041d98d24311a86663b75b3321c43c98f1d0e56e0a42a69647713182730c32e497d597688ac9385af782da05fa5a930b565fab56876050b541057e7a5f9a868342956c4a49b48d1635681abff86965fb474bafa99fd9be768013f2b667b2d48ab2d713b337115dc9f9ecf5bd207717578d72e806d498b411328b91692faa51d2dc4bc80097a046f3c23035c03421e58f7933015dfb35fed70d3b93ec4b6a5ed1ab8db0fa70f51fbd87f9b601f80766d72f08942deddc91a9986068671fb0173dcc4b0869c36f5e35c9d3b9a4239a805a222d9506f107bc0853db9339a178b30cdb371bd3f1b6ddf2627e3aad3d70b2bd045bd9574eb1e976e055d26f7dafbd68cf1d07e1436d1bbe55d2bb99db226d628f62d25b5bce4031d2bb489392fcd9be0635d5eb9c2eb7a19ac58203959ba221c355661e1154f05d6ee5e284ff3a62f10a0e8d7edc44289ab8fb123bcbff5032d7971e45fe1310caf4060fe9b339e4d160735b6fa1030193829e23554f04bd9715affb87247c91b221330a4fb8842c077a228d8f673ccdbdc2e14578a5d7d0b8ad729e9437ccbbaa8cda168cf395e50e47b462f353dabbbfb108549dc3570ea22cfe4de47823785fc937d47fa07e2086b642e9c851f70fef42682398c5b59ca112dfaa0102f66272441186d863c386332a8554f6f2fa5d9a1174943bd51442355bfd64fde83a49d94c63d82e2a05f164c8a92923bbcc1ec1f7619ac50370043c837d17cc67a9eec9ae5e7aacbdf7ce73777f895f5f9c1407053ea7668329cada2e71cc6c4928851cc14e0ff50aa15e9cd049ebdb557ea1627cb75e008e65a7760114ac5623efcd1985b5e633d1fd2148f92cc0588eb8464b6465aa14b819e491c5f50f5ed3f20da434cb670580c610cb862997a9f8641f29c179723044fd68ef18d3ab8b86e06dc1f8ab31afaa6eca5ef271991ac313cc4d0fcff76e53d4dd91fe3ffe78e5139a3505cd276424e6b0da449d602975edbfb86e05f448fc6be60a2c563eaccb3657add250f09c91a7249c27571027643623b3eea4180573c5a91b09f360625bd37f672a1659e4a95792dfa5656dd28fe9a129a61bd032e8f1340096c0fa51833147efe9b7e5ea85baf8163d54eb"}, + {"000000000000000000000000000000000000000000000000000000000000000d", "003947af0bc096d6e35ae733fdd820b28490ba62340af649a5643c04afe2913532b2f44f05d4c7911f6708e1f2c35bd7f91775f40207bebeb5816db111e53e104423db231554177c13c15fd0e14d3ca6767372671870247e6b54750ea8d25605ae46b7b61791b187323ac0fe693897731f52aae6c0256e49127a15d8c66a31e7b7fa7f976542f38469e82d57af3a98d1579ba7708e1de6be39b153dfb207f6bf45c9c30827784425059cbf1bb1045fab7343032368e66cdd8d739a3262460f6ae1682038ef09c9c5067a6780eabd3fdfe48514e05319891fd28b3bf9e703d4d1c2fe4d733d99392a3b11c1b4160e0b786de3944f551bc16ad9f7cabf075653379e0d79650974b800aa77ac7f5fd2defbe314d5277b6e16114dec52233ea0cecd2a4e13188ee51fd0e72db2e1400f519615f6f0ebab257ebadcf62d5283fd92df3b2895e2233d69ed6c841fc3b87e483b01216ca64a01fddf3a1c321faeb37bddf163df5e731780a4dca6cdeef3a0af2714f1c4ae81ca4854299919b7b536b3e3de2b29f1856875d1a7328eb7d8edf221a92662c61c8bf3a1386303c898838e080e79c12e0368f8cf785277e127d5b3fb9a5c07c503d233e4712647222769d660bde38df2ed1849add989174f0d9d0865ed5c77d36eef2376a1546ad328399d1ad22b8913257cd4ad5d2df1b4c671c86849e921ecebb85e2b04c315d0bd90ed698bc1572fed7f376a4652bdfb910fbcbc463ea26ff1e31f8203cc51d0f11a611d32ed08351d058d8741fd431ff5ff7ae35f5db25239b1a8194fcf659951956d4b9d241cbdba5ad20d67bb429d0bf4535bafa32ce15c7082f503f7f439f63f3ce93c123db0eced1eba9b0f8635745b4f9c95a8eef1da420c215a1542edcba7b5ead5406fc574b15127d4d8921b75bd30b3a234c573d67d2c0c7a24af65355bb91f00a481520c082d20519d52bff49bb60dce421bdde01dcd73e1494f6520fcef32e879d4102957136de86607986f3f05de9a89e0a9e0c5b7e654c234571b03301a230f5e00ca9551bfd9f52412c19d79cc5679b982030cbf2c37aa60415fa35112eb5d83aa9081b6186e149734f86150b303bf94119c3cbe7ef49c92497599134d6f508d491c01448a34330dba5d7db14a7de07525a266d2f4eadb0bf848a32985aa7d39dc959f3029039a8ebe4f95158b136101e55ff31a99b71cd248ab100e8275dc1536e8bfdb0163e56ddb27007bd9ee86098388fa348ebcd79175f684c0dd7cc9b5fdf4da500a81b136e3506f5d9fcf60af1a78917e5871351d37106291b51724644ddb7ef5f97f596a399cceece73950e0eb3d802ac8f3f68996fa91efa1d71bd07910e81881194dbfc6c75363d8c4d0155f697a4074dfa0d91b82877e4b13d37f8dc212f04e4527d971b2d9e1db00dbfe5bec61d057ffd172943cb664ed66b7d0702f0478854b9b70b553f4c0631003711ba63fdff6de4a0c8514cd6bcd600285abb2d95852ae966a1957f66943e974dcba9351e2c4de65a20950da0a03effab0fc02b7b709b1029fb1d668d162fb8e1a9db662cf7b6c17d95a1a14e8e519aa18f31c31420da51398f4fbdf0382517a288428ee48db13c0672bf282316598ca690a5a8a14ff9f6baf4f2fb21931cf0971b2527f92180227dceeb5d06147f304f2c863a65e49290f375691416c74bcb7a8beed7a6185ea29b4cb22def31a3bfe0f30f48daaa309b33ac8638e0a6e338d950059acaa3866960abd61970be4661556c638780773085c0906037f9889cfbaf2a3ec9645531dfa190f1a75fa4a9020c8e793cbd2a5ad40e1ab0e65ffaaf357789d61800431b77d310cd9789f8060bec1bdac1afe3739c4223d5b5b053bea015b60689469d94f9fa6ff9c1b918e"}, + {"0000000000000000000000000000000000000000000000000000000000000010", "0024f30f6a25882567ee711f7639c9bc6a556d177a1a528b6c0e86bd427b80a263729ed7291d7249b76d0edd43152c09c41390c9832c6571078e091cf2dd4b3fb52edce3dd9a0151ab369c2afbb249f00a9ed6150607286179f01a9fcba290bb3f32efb86c5a5f1334192c6ba7bf5781d1ad3465062fee9f4996fd723cf90cba5bcad047c0d371bcf30bbc699f31e0b0bd59111e1c3455b0f8d26de541b3658d48fed905a4ccada90b55f6c14f1143999bded49c3264bbcdd7e2dc3222315cb2f99ea05a17c76d836b882d32f1f59dd132650e1c8a7ec8ce503bb361d3dc5ff56b54f76b0a347452de37a46e58220da9f21756a7c57b4a7ec874acdb0e162d36c12d876fe79355b265462f55a6c81124b5165763c81707784bbebbe29220db258a779e1dade11316518e06c984a57a1804332335f55b4bc9ff2ee52a6015f6cff20893e66775d00278253334513e42dc003a38698c130569423a654adbf2b1bb0222ba56960da25a2985d39928aa39211d2af53cb84db8f538080f325e300f48caa1c881c43a51bcfd1f99d39dc2ff3a0fcb594d64650d66ac042b5a23bfd2363312b3fd06a8e60e102e2947f56d11edf8a24e65dc0a53b81c50f224481bb4a60ddfcb2893b2e5a902f150188b6015512ed0e2295d77811a17393bf083a2383f1efa7717fd537b1e86d6cc5ea9a28aad41b3c5322995563f0469678d7e9dc21b2d61f18d9de70445163e7497d22b67317bf8958dfb2eb58704ced631a25f6dbc6f1e0efcab9b6f968b87448d470e8e735e3b54ac1b515c56a4a3c5b3ddd3556b30b61b0f4c763ab9e19d87b4061d80601db0ec879e541dab3dfb8827a0b4be41e7227c6795ee8ded595ec096aff2f043bf7ba73ec12807e8d4ac10dad3e36d72c3efd979bd5d4a0eda0bfc095f4ea2b6cebdcece3486c4cafa47ae111c36efa300461bc89a2fb163d1bd60a48b48c948449106be8563f7bd9941dbbbc4ff97b85e8b67a96390761d584522e7e93b7e0ed5374bf856744165f059f71cdcc7662380215bc52e196786e52244c92b591ca56076bc1f0255f8ae42662d2336356296946b930149af9a74453f900e2f58e40eb3f6e40602e2ede835bfa2f11c44042829ee68492c5b1dcfb19407d43e399c1091addd66909615b26082d3b59f087b28ff9ea2a4df7b3c13084379f7694f1d149935210ee07cf321221bfac7ec22aa34aac62979d3ba06991533dbbfc25feefdb1b32195cbd35ea3eb636de4f23a12b0b105d67c990c7a49a5a29228a162c1fbb3fa4ae8eaa0f69c0affbe740d6c096561ebf7e9f29bc4cd21a8bf1318df9fe8cd12a626e61f475b193d51934660cba5832632bdeadb3a5a6c53999a2bab7c2564c8dbe2643320873c57cf4c480aa2fba71edb6d0af72d8b5ff26df0e53a22220316d49a40de8db14e3f0546b4d6994ddbcbdea8c9147896e2ca47524c586da79530c326a6a279be92c751680374b92b39d799cc0685d577ea0eefa41db1e95f1fbc28621af2cfcbdb569778ff1f8226907d904f0761c354be4f4c555338c2faff1808614f70fef68d1dbe07d4b38ffb17767d53bbc12e8ddd0d151782ad0b38a87d9a0f109990eeb2d320cf1c78df6aaabb7e2eae1f8f2d143fc2dfb352ec47a18dda4857fd2a76083027968c4829f7a904a2677b9a0fa0f6f436233d2682c5b0c1157eb7ab2473446e9be9891be1ed6bd508c61df845a6e7a163da92845bcb43fd7562ddc96617621e07fd74259fd0aa822c6cfdc17cdf7292bbb50fe609e0100c0f156da2923e76489eb6859e3edbe12072cf03b14d04b66930f417beec37530cda3cd8bb133945c789d0e7dace20b4df856bec76dfa01e195326c862f5724c299f711bd7c83653fdf9fc09567b9d"}, + {"0000000000000000000000000000000000000000000000000000000000000011", "0133ee8bedcf9a133108f3bbcdbc20ea045675d4460c9a61f5f791b15b91b7c0db1a98890582d4af7d0805e55b0b1c875c872acd76e629399a260362b2294447998efe0658d475935e383ab542ef1b14fd5929ea040500296da9df4d9cd774571d5fd981d040dea61a1d8114b75b60d11b0d3661f9e7bfa309da505330c610148a9ee44cc0e3175586361848302599f09e4ce463c21f146df3ededad1e77bbedc8a0ceeab61c82e5023e9b6120c734149756f126022eecde005550f1ba17489287858afed34370e335b0d79e5256475ae6f013064ba86cc8550d81d5730f4b23fecdd5ea7c17533aacab23ce6104b9d38e25b02af860b60fce1d1f1e1457d78d1ccaa04494ec85c8bb5ab61595cd31b3043beb6a3a854f9cfaf0aedbb8c77d32bfe3819fa6772f7db6dab772f323e358d75c2ed4bd434ce4fbab3b4358a380b5d32597c70c6507c06c85fe23a5dbe4fb01f9f23a4318ae07c873440d457553e52791d784830bddf9c0a5de768180287160791ce08b20813b53770caeee1c2d162a31add7e103a1c2d0010b231384612c0b71fafd923967818a43f939acfef2fddafcfbce0539add5792042b99f8d89d676f71862991c550da43c841410e395ee1ec885f3edc7521bb751177e8af31384e6503e222dbf630bb3b6e8b49125d37ed97da2526ae33048ecf5cb775a5a017ef653e2f7c97d50f4083c02ea0f479dfb091993cff5dec1861c1f77088d16af6b863415b000db43d4f790502715ead3d2b34a257c139c3cd9f9e4d2c1c34dec4d8e15d05e1932eb30120f01238eb179daaca436d3672e7eaef13c28fc0d9814b1007a77cfdd61695c6af0f3b6e76c1a092c37b38e806d194e8f05b188e78e7b49be4c62b91a560ec80d3d107164ffb204c67123f7bc3e0685331f3d28e05991a6a1afff58d884da125363018ff237798b046b5a5324181ec2c296f11cc4ed4178ebb16795ae055c83804dcd2714c45014abf4c42ed64c13d3ad3f102b7b22f3d4eec8d4e3b2257caeb49520886bc1e91d446da94211b978af11127370a0f53c9d1b31071107923993c404b9852a8910f7a8ad314e9bbf997bea0e2d463a9648a5a0c166f1732da29e399fb796869d0a74193e165b1cab8880e128386a5314631a37264c2bbb643c707d962dff31e531e4d907daf541f98ae9075aad322ecd5b39b57331602e90a7f95b890c36b721de8c6f091183e8fbd655d6807c3725f479b0d4fd0ceeca3b3b06a3a6e19374e1455c4d1d52758ad27f1d8286240248742539b55743625b66d2ba287fa3740c49272aa80ba4c8a06a2280eb14fac687efd7467e2126ffdc1d90c0efaff22415abc0665554749f302b140f6ed8a5dca60b892197a05ac392bea3ee5cb0af169af45b84987a1745dd080030d8756ee1fe5f85ee0496bd28dc9eec59570e52ed13edb00d30116c0ea00e1196b1bec78ed24103f3cd66ba838202afd0417e0929e16c98f60053da41a4a385eb5929d23a2ef0894b389c569031310bbe6e57092d4c3c26812aff0b5b07889cbf3f1dc7e5aaabd595cdbb5c31c7ba760b822363295e921051152d0695cb2ccae9f70b307c866b08d72c5b025045a5d44a60b007f71f5d30cad4654323f90375a329044bf32e030b0ef9d74558591a2ee00588e0e03ecb374ca50145f4b239b32b0b11bf37a2242517d2caa4a27b79b793f78542604e5a9e3cb08e17d5a73b92c9dac518a081bd7e9d5eee206733c833226caf94d5ae72e9ba9173ba2ba63d790c513b58ad07c0c329da151783484302c54cd17e7e2beb33284f0d15e3986dc9d8897bdf5724084ac9de96cd9cc4f612ed7a1a72093d3d05c6516f5f3b6f64d25c0b36eb1ca6260d4d6022859badb9520ae5abda7a1f567fc3"}, + {"0000000000000000000000000000000000000000000000000000000000000016", "00ad4c1b755dc9c58e34f04a73cd72d1fa52b1b901026c53f7a34bbc8d6a49b0e9f9d8147730727d923304fa4303d831cf23e0c770c23954aa3db6fa781ecc19d0046acf8b2cb3d9b591a423db77e5318dd494e9132255bd9a4cf7a1da661286f4a90b3f4add9be4ee13616e6fd5487344697922c68c3f09eda234baeb4917916be920a204013d311233e9991acca8833021b52b746554128ddca1c381b81865eb5236ea389fc610015c26eda3985ed36a68d049021cfd7c425a73940a3a3734845fe7bd7bd5b5a871cadec99699565653371b8c613629c95832a460c4afa969f7699e73fa70ca2294031b9de3b57f428b02956af9f6aa1dbf7cf09c064462d620ab60199a2923af322bbde70471daaafc28018569bcb794fbe5e295a6c6c2c0ab58813d19930c692a8e7d88d88a878a6557da3a9e8de343d5a49f3a06626ce293ddcf216e46dd4bb9c42a77609745cd0234d86e1520c4c1e6c200e8c864f675bacf95a2284658dbf8de946d9cc48ae56d14e6ca0f490adc3f672cb2df0227b14b9de92d231311cacf0ce3cdfdee7a34d4ede6b2e1e505586e474451f441975eee1e7eae0416bda82ad5a23df8e4f1514a418f58ae980d67702f4a652f78acc7c1afc5f481bc716add96075287e329dfeebdd84be8809831b6c2cfbfbf120d9e139ce13fbbe7672a2c302d996c96c272f3e792657f7dd03704650c001bad0cff9cf4a22e0cc63185b1e9faf617231491ddb98b837ea907b77f95ebb97b37e4fa9da628e214a9a9747981ff4bf5cb79d70c9f0a4878dd6b4b5407417525bea1657fa8f7b5f8f4ae4bff1748a1088adb41650598db865355dfbd57a4de9771ff11bf0973963aac5d8d4f754487e59ee436727ec51acc0718ea30d446255c3f547ba6762fd1fba6dd3a79fdf13962ff87511a8aacdbe743a71ec5955d626b3a7c3e00e9caab2614aa79f8d1e8d424702a3245c7fe701844f83acaded41ee53b23893083e788debafe19f3a40486a5fda582caf61af5a184ed7fb59cf8c7d438521b0ead4dd007f6afab892350afefab6d4bcbda981903879c05031d05bdf5f6257c415a87aa1af9dfae8a1ab4469829df644b7829b3fed35ba622148edd45ad04d88ded050f2a42fe4ad084677addec35c6efe69617e92271008eadfd5cd723ae39a9efaa47d85460af08305c72384789b50bf014ae2ff20f5debfc7dcbf013e8a555a9dd5dd95dac81d95865e1420eb930eea31a202958dea56b67e0ff6500e655c1a966af2b836e269a2a790f953917461e04cc96dc7dfe7fa0be006e0c0fb4c5b15648e7eb43439ed73686cd1996a923c2166318ced4062c9e7541a4482e28db5dbcbd5d363a342722137de0cd353a71140704cdf0d5bd1f16a3c74a3e52999c33d289b767288f82d08b22603afc476a01c242597bc13d0fcb75f2349922d9fe8fae376ce136843322775b5cb928d9b66bcabdd5032b39d9e6ab0727ce7e4dd767131908f12b8bbd8a3daf517097101580647e2725fab5520e846946efee91fee2ba711303fcd640434d8d1c71f06309d2b998326f3f95fa3227c5f61c2ed57f8d4b58b41144ddaf319eeb55a1a104477b0664cb74e3fb69d08e3c96df31d7795928890b5da88cdc85060a5263847291d41ac589863537280a37829bc4f4dc6ff2c7d144f7f86dfcaedc6b5dd2112fb8e1afdee45bc400261b39dcec7e6e581c99e50ec480b499dd6eaf8157816860bee36cb604df26d911b5c2272b0b822c84a6f72754f5e7aef93f5d4db80dc5cd8f6289f2725d28d8d36cd02ae647ba12a50c35f54a853c18797cd79cd376d8b13131562297e5f7113472769978ffc7df12a639ef427f05fabaf921ef21c8fee985237b2f5f8d35a057313dd9c93f74a07c"}, + {"0000000000000000000000000000000000000000000000000000000000000010", "002847a9e24b3a767545e138e4dd96516698cbf35528036ff7b170f245f14647de37f498ca93c87a134822575520850c1a31cbcbf53ddfe5cdfae2f55c865b6558f719629bd4abbe39d6943e45a83e155dfae96508c3b531da5c15d1d097979ab87f20b3a7255e4d630fe9711dbf92dcbfca63326bd898f68555e919101019b84d29a7117074cd476473f1372149f343f12b792dfd6c73f296a859ddde746aa666efd96421976e4a0290183133d93a738261f368002ab9e1b7c85bac1c0f5e8125495b2b5ef68f52a7b5460e2e44bb790cb10850bdc05e10a17edc78d5df9a583792510c37f3621634ba4caa53d68eafb5341879300667a8a35dfa7203440ca72641369c2b6008f3a2d4f91a910dd690fd0346decf48dfed91fb1ec11d3871c0b22df9b4553108fa947f9b1f841505de02efa66cb3726dea9c0768116acbd1bf4cbda712fc23c8dc446d99f4b291111f005e024f4a4f26cee7d15368c74d3e8a3388fa537230ffa6742c91e55771388b3f1aefdeb74a78bbd6160236609de4614687f7ae63f1c3a2c1e2fc4fdaf43c40bdbb5e749948bf609175a9b361169f8b453c7c57057dbd6e9e94c4973de8e2fc8b47f8c62cb1940e0f2ea83574dc6149b3e243c80085ca629bb0327f71f20d142f0b5ecef5cf2167a302d2aa600f4ded7d70121080f99edf8766036d1a235cf05991d201073aaace0326e4796b050ce559fbb123f909848d0e0149b32e27c8ca71e45236ef444b33ae3be7c8f94105fb62f00b5817787f211503b2f83252e63805a9026f93374d1ea31ae8a61302cfe71b67a7c7d7fb769388170272054faddbea5ce42b0ba4d16c3eb6544b6136be40ad164655f4419ac07956c13429f632bf72eed3d8daf0089a715f40647fdfbfef85816569761338d83f24ab1d5b5d8621986e6bf5256a1ba854d72b52ae9f412a006d704df8db7197022a13b0dfe61c0118bcd45b9a285fc3580ef8022fe97ed2fad3793b2d2a57ede2b9033bd6919bdb9c0bfd0de372e6b2c392d1f93e8ebb1435f20ed0673a077b5b4293d0e75d314116af14bd03ee42632bd1e629c68f8065321fc1ec735edb0ba41115ed819536c15fe66af3575b4415f4e076ae2f9a09d594b40fddda23da8193f97b37443d921bb686ed66b2dc6f4dee651d969496b6baecf91fbda73f4f040bdf7e6c8dced033e018515e969cbca90dc29cd7e80ec8bd83a1466f0b46facbb96dee8c375bc71ccdea0e0f3a82ce531802c44284c10b61cc260e641eb1ec16f7a225be28bc13910de4317271310952464baf400c6fdb9a07e470d941a0e1684bca68f4987468ba23157fb70fdcd1acd89aab023aad9d770cb2cc07d31c17ca66750ea77319878321f360f6c8648d4e55a9231858adaa238e8551e71d42d8374708de818ed8168b013ccafd1ee122b1d6b2639e5624dfd270c0de23a2203b7b2a2d2e1ca19e1e4411314f3ca190dad02cb80777f1675e45ea26a76950b4be21a941990c9de2613cd91ec3ae90af059886f50d92ffc1bb5605bc1c8607ed02a64bc6ccf2c57827ae91c8b66a9cc43ef1621e5fceec4d51383ef8f1c5bb51508d658bf915c50f0ccbb140341b01fdf028d6f349cd47231f5c1a44b419048c14fa758ca3d9a822b53db171a201c39c54c0109a1eb1198ee10d8877d4871cb6c4a38ae8be3628ac1b85fc346bd481cbdf3b3a40646e3718d51e8afa198801c3e496b1cb7dc1549f3d7402767c3c76d237264ecba4e45ac9ad953747b78c7802137dbd5c37191c98fe7b4ed2a81be2c8522d86cbfe5e1157b2b8fc58644f1afd623f09d062ed8eaffaaab36cb35f6de728281c0145f3dd35ac1e471b273b2b268f5ddb3bec3192facf438d639304566c4ac6f0e83794197ce276"}, + {"0000000000000000000000000000000000000000000000000000000000000017", "0234ad6332dcf330f5fc461f6fddcb899b0a1ca60e1c51ff039347c08ee76b14033dd30ec121769c0dfc058a4c74703146cd8b38e515b75503732853fa94db689113fb46e2da45a1d5285f8455fc2f858ddf9fc9055653070793bedfaa8f34151e2255e106f24998bf0cd5e5382905d6f2a889b398c0fba87b51a63e4a8a06247ab3c5d0e4cdddc8106625dd11b55fb5b3515819af119dd2637a7ba071a5461f6bbccdcca2fbf7ec02dd083d6f11a6cbe20bd72e77ef89d756777e39093f232f3eacd1a034cadbe4a55abde9934ee9fba4d6111854feaf909598bd0308e3354c923ac111bec1da20bbf404f3a4a62132ec52193a69f1ddb44b5bb47813dba9a534d5c8994be43298583b1699574dcf6e2f42e6cc05efaf490d9941c5059144b9cd82fc505ca71ea6b268fa08bab184e0d7f22172c10360acbd85044585dbb97c6ecdd7cfa844d567c567fe60f7968b7602423ee054823982b3bf7510874603f297031db5452124f6e6646693e5ed87b3aefbd6ac2d986f9cb3462e8966f602ee7d29e579834e51d9e8850007f0715531c1c68cc976e1b1ea26e466c1c6850157c8528f810661025ea444262ce98d74d7d436e35960e53bffd445e28e1bb41e9d5fdd7c145ece400355e51b1adc7a0aeb6efc664aa21d357c52d3c64d741a77b07915775442c58cf5a1b7cb34866a5b74def59b94b15d521c043a308d36518237ae59921401ccb3e91fb51c9bf02d154e9fd41266a5013274b74172304a10d8fb081b134b1edd53d4d9632e3ce86885e05a0ae9649ebd27200cdb7b6026358b930cb2c1e1a49bc61ff51c31120a4bdee14447961ccacfc6f51657d04a3102d30c9d3919562ed62735039be104b4d6b6555d5e740f14370af312a83cd46ec38b7052155795eebd97439c8bb61796aa49894c47ed2bd352cf8be97b8d6e4237d37702b3055fa4cc3db4a45c741b8a4eebdd3bb790e30e2315a477b0ee56f3a70f47969875241bdd113f909b0627a157a820ebd32b9c816869d4e4085a49e6a3dd1a8ce15e3da2c91920ac51ae5934868d8f58bd24810a8dac67bbce1921f8b364f45c2904aa0ee792dfc43bc84c9789da3226e84d278ccf581036411b18af0c2358b571254fe4fadb5e72feff38a1a6295a73299831404efe7b17c821e4f124943c4f0d29841c18b65303f5a4f18c101f57120c44d7bce07b5178489a0d97077c89e486a912e962071705a8723baa3455d5bf420baeddb22f15238b23ae81c461b52ba60d263bbfc731d9057c59ad88c1eebca3337ad122ff9537bde562247ebb6198152fa3c9e5d50c736fcc773812baae51562b45c76017ddbaddf875d97246a2f24726968307262ab69f2a159d653792627d482e8ff21801be8b2a3c41ba83f559fbc73d96d62c39611779cee90ff34102f27ffd6e8fcd04f8c1c983b8cfcb469cd07a49ed16c677666caded05882b11d04b7ea8b2a50abaa48b15923a0110e7b149884ba6431756042ea9fc3c20a01bc622bc2b6bbbaf9c9b424b372be84547c7daef8d12e2d4dda9454aa3801986e72b6eff4a56a75628e82f5164df1e10fef3c833d4a34c60e64dd09b7b6b1f17bdae9ee4e13069782d82d0dfe4aee17f94983ff61a4541266ea02ad3723071f42ae5a1e0f5485d725a09c37d5a072544a5629fb55ab642ca861bbe1f055f3056372ee1dcd3df8ffc091656d81ffb76e7feea4812bbadac26cabb89a587064239441225df503d193518c950c882c8d727a55d4602f95ca2165296b785270a33c220942385a7be67016a78571350c35f56be4c0cd512a0d71826858bef4754d03f70e326361a1df527a252136c730b379c54d2ccc1eaf830e7990eee982b8b5ad34e10b4fcb9c5b33cb22267d74e695c0c27"}, + {"000000000000000000000000000000000000000000000000000000000000000b", "0012b949cd1c913b7c4809115f6c369f7b6a9cea133415652c871a25e3fd5fe3b2f3b146ce2c805e235f224af3fe1b70b345ffebc67c4dc8c96eac9cbf874c32a85624efecdf397e3ab720075eeabddcf95386f701d86a24468c2de342b660bf71dc0ed8b0c02af85c41099f6e1b3078b9fb1a650d675bd27a229fbbbad80f7cb6623618da7ade7151810ad85b30f4cb5b5f783d848e78cc5f4f0f5a45e658cc3a037a656c5e163709e85ee7d64502332c8bd5f61ef4becdc10ef8d1f725be84a3fa23f099c0dce4d6a2f6d55b3b0f1e37b014663abdc68c4753b69b51cc5ae69fa4a9ae72518d28b57ff84f987b41a001e36f2424af6618085d7d950e8c0252f7dded49306f3aeba2f3934adc8b7ccc74342e83014455ba7faf54241515c95e51c05bb4b8db1bb9a327348bbff8be5b851bc5cf74597e951790dc1f84dc60f18bc266d77bc3dedcb7bacef722bf9fcd02bdca7e9b5adaabe9eb347ad0dff10339f83e82c81dcdd90ecc73e221e0e8352b86b5b752e5ce1b539203df03299db2216fd679c414612651f5e40119161507120745f6a4a1c3c21761fd19f4466db39af50e0f184d7e63be6878638d8f32781c6d7f632c4aba4e941f1ff5097d5e5934f7a298ba44f06bdab37f79fa801ef78c8311091e256daf42b8641c752d4f1a8ccc4429dddc971592f01d8967987afa51af32f99fbb468903173dd89d5b7c65e64310db1f6168ac71d8ca418a06e5fb2a65da0ea1e42d53abf86fe9b1eb9756fbbd2ce2bea9692124c391254547132ed0f191ca7baf2454bebbc56065cd9590e947938fd12d4e73439a5e870523889bc7839291ccfa633aaea667a2f3b01b4ebf67aacc6f761aa687418f26c713789bbf59a55c303e1cd62904b5d05819edce9305a3dfcd594670b0ae6b6252d51b88a9f93b8ccf67896478d8ca573f539486013db9a3b1e8cc2f70c8e4c07263a477167519ff9f7d62fc6519df82db6eda5957077338aa70971a0e1102ffafc7338f4f71c080a08089dfcf895a307fcb6407997c81fd46e6f1b2d1f2fb68752458f07f5db7b603897e1f0c61478f5699160305c95ce2fa1af809850ea0258f94b62d3bca81e5fea9e835e27599ff7e8803c005353ccb97afe221013cdb30b50d1d6c79252921eef267fe4b58266277847e44dbd75e87de590a71036fce65f2d8ea75affab3db612362dd5a5ceaecc334e03c3e267a62bbf6914580767ba8c6a1af1bd9bc09cb21e4725dccb74c90f10697a36dc56adcd6d4fa3d58c70230ddcdaf895a86b4befbad9e76837bbfab05557436782c6e91c879594d97d1034b4bf45eb8eb288e87ac390eb08c843e55e758f0b69d9246b31f8b163dc67f92557c132edd2229e7459b8cafd30e0dd8397cde63fa65b4976cdd8545023f0b5d9b9cb00f3702f8acfd61d27473064b434a18221d5674151cd75217a98b3d1d9b598da98ca3eeded8038246fcfc67ca17321b552e1552b7e55e1446e3d987f26574b9fab418b94b419b19e907b4ece45faa6b4732541474e79721bca7f1e3924106f1e393afb85d9268f1566cf0803c34250587e00781cfa3957040b184229804bd4b49249fa1fc108be3087fcdb61254edaf32b9963f0da8283ca96bbdcb1065bdf1b31a4ec91591edb6340af20878e2c80b1f20851bbad545d03ce5b1c4c81c9eea0e5b2b1284eb95a98c6d226e26eb19951ec7ae5a532ae9d6cb3833bf3bb7cab8a2f4c6e67a558ddfa55a2d0f2496f2929d49605633b14b78f3e116abb056eb0cd331a1e6561a8d459cd1e8e7925b3c9f02edf5e421d3270d0acee66703f0e2bae0d1db0e8a8435443e210c3f1307e579539f3ba259ad69811d254b940c8c32368a21145725d14dc3e43aaf419bd5f93c569ac2"}, + {"0000000000000000000000000000000000000000000000000000000000000007", "0122f69589efba97bd9073b0dbd55c0a2355df13142f9eb1f87f508d80d6985461666b17ab34fb39e4b305271f26c736ab25c2a2534abb5fc042bf1f3af8bf26d2c66ce5af1693ceb1c488df4b66a21ec83b6bcd02093f73a09fbb6b81cba47af15071deceb41cc3a92a756dce14d540c5d8e3931a96b1b465adee13b347064de7a36713d1154e00f22a1fb60be6acd3991cf60ba40a8396c778d2816334017ad2de5a5d63d7a8420131974094b04623faa8721292af6f6cb8c08a13ab210b1e1e8ba439034dca6350d86fdb2d39461a3bce095b7227e6a9c8a9ba37925e7e5cc3c52efa6a6cbd1ad86735cc9c6363b680956cbbc83e928bb17cdfa207d240435829a1f1ca66a6be49fc6f9f0952bca443197e034f8e57186d76dfe412aae8eedf3d79dc0b56163ba8f1b2e74059fdd402842529c8c8a4c53ef2aa228bcaf4af515da0f28d3791d8c6aff9f81ebd611e012ef6c93fcd6b26950183c18f4a4275aa74eeaf4f02e72ab5685c58d14b44057258ac7b3b91429cc0c51b829dbe529d63ddeea063061e32584d0401899ae31cc9b65c892f584d9615928e759f1ed53f210e14350217ff962d8e4bb7e122a220235df97cb6cede9f813a12ba109912706b0b0ee85e04f89bb2bbf0fbb7852631d42ef595c4378348244ed1cdef4eed805a75ad2fe62fb7e61c9d0d36dfa31a93f07671deab594a63016642b9dcf4cc1dbfa45045fa48dd62d2569ec272155c4d1f76d52c3b5d1791ff624650920dad3e70d7080b5d9e4e4afe44f268d58bea7e0d4a58ed3c608f092a3b3c690df3ff559fc0f821252941c7a6fe763f05f7d04f65930c45ea41543f40a75e55a6cad89ec4102f242534239c475961717cbffaf8a9f32bd8008d160ce18bbfa4ca636c50b24b4551d1e8a20dac21ae255aaecb1b11f64d856db3301042d35554080d3f8f016f60477fda27b30f8a80d327261a1197df9ab8e81f5373602f93c591d005d5dc36ef990e87c35c7c35098eab5d3194dae38474640578ab2f7dd38c1d48b80e9df41e17aa33cf8e2f76056269e1d6450658dfb903024e495a8fe42321d730d2b745059207649982260d253d3ccb6b8e29ac9af47f263a84821b1a7c6e2009d27dec586036a354d2680c22675816e7c31f16ca129b1c88427921d7f2f734513d3fae398c0e91f9950c261d1379232969ef2aeaf51d5da49efacabd3e24412d64b6e2e3c9e9f52175ec0b6d2d99e0e61d71221368ee8a7fe48bd79c06d79f267370e2ef7cd94b761998b25c5536caafd6bb34b0ade1d96341d15ff6470c9a78f157ac7ca57fd2c51c3bd50325adc312692218bce61c10df0175b39be6091e6d0fe232b97704aa0d59250a43c51394e12ca107efeb5da2390914e7c625ea8cb32030f2dd88d9b41214b0581d63691f111202af3f36a2ca986180bf86687dcefe762c0a58b1382a91be0c8ed1d7cb6a3247e29c6f703e77f53b8ac80c2887207b9d6aeb7cf4789b525228c743a37f9c6d1f9913866b098138f841fb1f865b5a1ee4dafca9410e4ade41fc968d2aebcfc1dc29bd22b173b3ad5ea52731355a438cecdc7020353de1b160de8467d4c3cb15c9c7f8594948ddacfe51f228eac7ad0d52dd1d6129e317759166d4e78a2c26344d70ed0a15899240ce02c784e229130532983f912435d837b05c5b8414af08fcf84c61a0252bf4dc11942c1ac7aa8a805ef86c4049ca21e49a7830fd73a57c5c2db48ad388bfa69f477c33d342d79cc1a744d8bd7b6e9b0a969d99d88c1a9eedd422b1462fd38de530a2711bf1dc5678615522e04aac0353a7ff5dd008ad465a5ed6a7a5d956472f7bfe6011d2ae017fd8e7a6c07f9e4aba929f061f44337733fe6baa23fadd866430b4e33275579ceae3"}, + {"0000000000000000000000000000000000000000000000000000000000000023", "004f01973c4ff102b9dd97838d712a664024fc2b75195bd5e56346be8dbef5e7307377cc96a89bfa8e8f22c9aace5f0abeb5d692837fcab54f1634bf3482f84a6872c838611f3fa004868929b8893acbea596b10044f72f810da984fb24e17d5a9ee20463c4b373fe42638698cd4cc3a848305e5d77e3f7d363eacbdff350fa45a98200b4dcab0dc93fa5628587d6dec9bd636256f823a370b830dd28f95a714cbb8b9f16171fceb084818a9cb59caf5449942f698cfdbb6ff9497fd5121f615c470af9d3bee96c2d1a83680b51a86dc5348279ad252eae9eb75dffff47b4175fd99dd8adcbe3f3d6195a4d859f39ce64443fc8b3dbece79b4f6b601085301da69430b964f5419f373573672ecfb58383d2375fd8d8bc8e10e9cf644000243e1a1b253de730e1eb76d18cf9d610aeb8729b877dc4a26e9925e3fd83a599e35c4e7082bb2705493acd8b5fda491528aa30a471ca15ca2bb874a6f3184e143e1106bbfeeb9aa155692d0df193c94fb6d76f810c2b9dde86fd951a115eccdf3a00c6652ab095272f8d7277d7c097c890d1b8a2646a356c100c47372ef3cd1a77eaa07b751060d9da58f34097257ec5f4186e190fe825ff57f5ac82e9641d52694e6b4cbe295d3d65c40af39943af044298b936f4f5cdf517206b340169a3d350d3479500e2ad674dfb250bc5ed06074cd4847953299137a79e40f96f1a47575350fd428c2c719a354216e4910e5821b5a4d463698a67793c6a39b29cbfac0f3fd9cce7f12b5272737e9ebf9a2d9836916a0775cedc6959c381dff099dc2491e5b569aa3bdfc6391a50192b036e01cfcab87a68990a7a39b4467b7b2ef71247a1a0a24421ca70bdb5111297563666dadfc022e7651382d862c9e7ec6e26933b1c201a31c10f72cc9a9cc1f5e0aa2ec7e507b2a755b59a3db29227c4e974c30ba75c4006e6be6d772b9b7b29523f3b84240e598033179203cb9c67d4edcdaa5c09eb6d7a23ad832eafdba7c3601ed9dea93eaa76bf1e0602b8a833d8a4f7bbcbef90f3164ec9a06f5f8f96f1a1353f014439d2cfe67c604e963dcfc4deff3c0d9a340cd37402239481ff1d409e3aed92b1ba5e58831519158354706b0ba16db43192bd2a5d08dcba1c10be4e418c4838e7fa9759b204386fb2365e1d2c3adfe0621d43f50760bbcda5dfb12178d418fa7fb319ff7262b08fd3d02893837d2f73e4c5b848024cbd5e38256fea5c42e9e97fbd7c7621ebd594bb50e0a3da064c7f62e6ebe0f72a0dc3e9d315acd01a90e4dc9b78715c75a468bc673a6b9a8921473db2e40ea4ebde5fce2a1584e641660951a5ce8324cab4748d45c83c616e3dada6d1fd5d16cfd12f41af7ec2450e5418dd5f927f2ee61a5b6d2999e8bf631be81dd3160d2814ca41559c73e2fc664b63e8f1204c318919a91414db9db50f47eb110857f342c716c548dfcccf8284c2d6c3359df51dd3aee8a775c7424177bed8f95d9d8e1058ce3aefcc5f7dfa45bfdd3ae2d43443a10cbca37e811853863799ac5b210d4ef6c06ea1d3d96964904ff405369554be8a540a24dda84223eb1f6a2d048511ff6c4237ae8ad7124bdbb533d3fabb7eb83e7c1f1cb22a8ac4d4b500ef84bf9f81c5567d63dbce2f6099c4f65e813f09e35f059922be60890f2213012b04df81855e93bd93e01cf7d7aa7a419814d48f5a61d196c64f38c834a1ee1247132e93c21443911a6092428eb2b34c0fad96b6177b0f4e9b2490d0b715da273f96b98f73ef9d9c26b8d30ffd9d311165b422d453c6af16d8412a954720f538e5d33ee3188aff044a537c5619236da90605cae091199e3cf2320ef56a2371f53e947d340c871dbbdb90bd74f893e33e680bb94831bc6e97460e2b51819fd293d94f5"}, + {"000000000000000000000000000000000000000000000000000000000000002f", "006096c727b210b9d1b9004b82b974adfb5df6c14e2a974c33260ab5a39f122791483dafc32bb95c6e2010b0c9177dae668be8462365c9e0546de581fa142f17e15c0811cafffd83bca7b759e5494e4cdd9432f302555b402184c88dfa55e15923e4a10612305471d812646ea3dd77fff5d8f5a387d2f16d3d3bafd634170ff7abef47da24d32ca16417e8b7c00278475ea4e642625f7451d9321f6b63aa09a7e821a28ec3dde6e301e05e57b1e0148784c3d32363993a117a12506b1c0eb01fa0126f59cfb633d353c61d2ce9a1b991221227db6a093351c6d5e6ed25ce8f6b95f9806f6de3d63a7b3ac299d44ef13ed0642eb12797f5b50fb51d4f0541dfc958f3482dbd8fd699f568d7eaa1175cae4754308bdc9bdd2d35b00bc6321633cd2ae081ba254311e261111189366d0744723f071cec38dc33d6136b55f545e71ee8c8b15af087adbdeb40f37b40bd8b920135331eacdcb465e054c0fb798efd1529374c108f15b87eaa38ae61fbc751d47208c7189a245a383d4632807dda88658e73da2535e743cebda9fa4079927637ea5e9704d435cd05103498f557d8416e8f9ae021052d289ea385caebcbf3b05e17bb9105603b7756c90d35a28a428bc57b9d8c221badeb27389be70a04870cf06939795082cfd267d0ecece5cc1e101a7ff63e24eab7cedfabfd8bba2492db05533e8d92cef3650d01d6e516f4cc4155b4c3f27f98c252a70aabb9784e126692242d928f9cb4cad3fffeb4604d43b83048d708981fbd3d8f9d0fe5d4445ddf3a7676dc5b9c6cc51efed4121953570dec81b84be3e1886b494bfb88c004d19d3d1ccab1ebaadbd1b436efa02736e2bac899270ca3653f8c10373177c4bcddad6b07275cfa3445056e3199e846522d5865a6417e6653e2a208bf74f32ec639b6ce57e02cce39b8fe2df7a9d6b2e85cf83302441ded5f4ad005eb7033a2815fc2712019b5f81629b2777ad68b83247f8c449b312926bf12687e380014f80731655a26f56f08a6d22a45a1a61c8cd8bf5f2df2cae8c7900ebfdda686279d69c6d5a35817d0c9097c1e73d8c2f61cfad213f88a55d8de2e1ab96bac0b35ad22e8d91289fccbd0d8cc9d91985ff458bd7918b97dc45814fa6f59fd96e76c775d09cebb52f25d1f9237c0af245205e928e9faf9565546e5fefadf2d037be71cc2935c610e8bd15649d70a30ac47a567d31998f46998d9804133f6549dc5ad847e874abe35b31699f4b096221cdb36a52437e56edb491faedcb49621f232b79f4c8ecbd487991a946b8c32b213dfbf380d738cb50b5da561e9f6a2ca547e3c6d5631b7a69e313ec6a21495dc014d74241b292a56c55b3c7e94b120098f9736a16c15baa3f35916f6c6f38492be565671db9bbc16a8e8f56429c8fb4eea372e66173c23c606e1bc9b1806d11523455360b5aabd2564fcf7a8c94bb71799465bf1c90ba817ea39f9f58dfae81a4b0a23fe31273d392907f36dc4410b3c26cdb191f5332033e7837933e24b0fb728f5d32bf2f2d2b8243f042d07b2fd6b13e6bd696815614603b5e1c20634b1e0360d53f322cba64e39797b314b2516872069d7b4cbc12b773d5e0396250dd32c96181742a2ced4dd78e9ba2fd2f3501f26a0f7ca48c99ad3e3d4a75f609f42db0e1f8cc4f15487a36ffb76ade862ceb201f33f47d1101d05765197c2b702a75497d066d449f3a8d7ba140e2e5f8f1de77fcb4bbe06c115cc382f0e173fabad37d21c75d950c7aaa307949db1beb70a2139955e2c1817a720e7b1d9f1b7e8b20b68a56fa48a7f5db066342564edfd5328c9fecea51358fe428a3031da466f23e5e698150cb41bcbbca4292854f86e70b79ab56c3d7774ec9a20e0af6ddc4818c8ca177a24eed16756"}, + {"0000000000000000000000000000000000000000000000000000000000000001", "011a0a8d08494acd366931eb0eaf77099f5f331eeb12ab66a72263d49952a612562efd7c511652dba74c28778ce5f21cbd435ab922eb84fe96012e6d1a1fe97ce00710cb74d02bb4c417f77c5bf0967554b9415f020bf73137a41603ee3bc4a9535aa6e213b9b9497907ddadba43996d92cf87a418b83cc026e97abcff052eef33a85d634565a3a6b47294cefa831e6cdcd0d153eb7db22919890101f7967c4cc2450efa857ac6e002e316c36c97430583ca31032cfc9c261c739ce7520c61bc2db09196f34ee7731838324709570ff01c070f71bcbcb19a153b4be243856c51ad9581fa1acc171c4a6e9c5a908ae707959275eafe5f2e848cdc541e03f6aa1451183b9b5bd1c446d1dc75119f50b2f6060d7ec943b934af5bdfcd16f506f8ba5eb1be7ab74729ccf584439b7fcf7c016a0d616c50d6bf4cb8c44b335f4472671e2c37e021b4d6b332cf9a34811dff7801591c4e8fc60161656f54ccf658aa02df6edf25a943370e1f2fe41fc7ef5814cbbcfb98cdf7ed5d9dbf09ae97fb6b4b6986f7d341fe67e354dcf017ae76c91a30d2373e1cb0e6f540e2fb805e654559dc3707e310f085d64284b688531444f0a939660282e19fc6ca24f0369b7fb8e9e3fa9fe335c2e240c6eb729f9d7f255dd178d172bca3ebafe51ada2f029b5de4dd0bba526d4d77eade16b30b9a45b2c0c26236b279575cd601a1e7d7b7c8fd29b823630d72722c1683def9dcbf2e3ea2863fa02387c19723d171e9bec9c3733237350288cb46be8e8b4496dcb296535a08331ecb9bd38904c67c26ab19245747b4570d94c9f041e030f50acb03ca34cb0a81976151ecf119ffa5b63616fdbc987649c7fff494a0c367e4a384e165b0c01d8216f357c9304e233ec1d23e32cd00e5ec795a1252d776f825333507c7285c2abba3d654d592cdd0908e2633de62ca0266cdfcd751a004bcde10f2562a5611f376b5ce271dadf6fbad140725d57762aeb86da32cd97f8b882d078aea81de849bbacaded65e1d5bd7f2b21bb6a00a3657ef1463574c33209654fde478945e01f8ba3bb10586a4ce50da5bd16322016cb195a0f5e00d75167f10568d38bd0a83f590bf6110ef75f34deb90f54a4e24a5597209500f8c932cc4b4fce52ab360289bcf4056435b71a7b0b0b1c7e8f737fac3dd66b3e89921f103f171303a5d1305dc8da541423645576dc75b75f0079d5b4ca8cd25f3024c420cd2eb10f086aa7c6dea097057fb3ed7a26396b7a0b50e78f9a82de16af07610ce4a9e69f06515a3f96357f6fe7c0992bc12b8b806961feeea168425b37311076ac1afb8afb3f857f2171807408ed21784cdddb354c67c2bbdcbc0b3df373c2bed09bf55b7199bd306c80270e916461052578e4ef3debe89ecf6f1ba57a4fe0976c2bef8191f9e8f02cbcd59a996915939b9b0fe8c33fa7133307ffe79080bbb4e2e91a067726b658fb0f44b6d717730cfab0f2f4b7e9b896f97f205d529192e7f4e1423df04d410d4930f11d07f7cae367193a970c720f19b48b89910b1c53d8fa8971f6e866740a0d227c394727d0cc217ce15f0ed9300d1295ca478886f62cd42a7ef2a3e31ced2756f9890c11374c5c13c5961fd9a34cd913d39f8874a585f2e0b1a8cb539a135c75db45cb6e50c0ce8575ca24a397fd6e5b1871ac6e2207e88db664f120d1210d8c4fdb8c8f703c5b0328be2cc15faf35f20dbbd86d75dd531673db680bef2026ec43f9ece9b419a24e394719b61c4ff8502a5fc68f9444ceb2fa80dab20e792b5fa4dbb8fc2df10675e991c08f4bcdb348add1d5217c7cd5388e3cf1c248eae242df84396413e8c77db1e3a1305ed87ae50f54ab32d21fbdd44577b9bec0a6adad3eee7866a11bf5b525a80dafae0"}, + {"0000000000000000000000000000000000000000000000000000000000000000", "00e60a09b0daded79b3d858c2657320e58333aa50a46a68d58b7204a95ba7154e20cafce3b0c14bca8e9026948d845ccdf8dec2f9612e338e13e9f2b7bc6b0697c058bbd66ada77cb517127e44ae3f5e84bc3f5a0b3c954d26570e0f7841a90fb3f0e4eed7421ff6e50f914d1cdba4855380c4b9593cdb297704657a76440f3eb55c095cde5520e8d58fba66596181474ca4c6543c3dfb579c9e07c59039211871aec70de01aa75b0139f26ca45ae0abb76fb24128d4f33e9ef93865c81dbdf2b8b0d0ab036e5d62d8d2693f397730d5b7520822ba70e1d3372512bd27a3b46df1be7a7116e49a1061688c1d4453c0f14152401230479d2ac42cab1501bb250a8f0e99ada39a211f8563aac607ad763e853216db65ea16270b53f3e45284e619d1272932f1d10ba1e0c99e9cf55159e651ee456bc23898492898231f04d6b200e08661241078496d637f031f0f1ceedb06d0f59676eaa109882b744348db7a922dbf594ad92b42fe601d65839bf2b11492b4fc8a72f5023b214b0cf3339685b155f992d59513abd51649e50cd4544025885a20c5e9d26db62e630da778d20956208b3cba0ee34989d313a346e981d18bfad9a7a466cc8c28a22c4cffb61431b739985fe634e23a558b20009f68ca2f3ec303aab6585dc5d7963fd074d9d6172e55fefc40205cf3bd936cf8a6c3b47db4c38051b26fee7d33108ed454aee43dfbdde723b432c008ccff257641eb269c7aa2b9240cafc12b46a98346320a4b7a759a9034b5ba1b57cf317ac4b2a7b606d1b60e5042fef8bc59075bbba4dc3183fb5867259b6aa55f1804f9c9d113dd6bfb1cac1f719cd541dbc02bb22cee5a52dee1306861956f955c1df4a1e51a56375a416a1b2c75221470f425079953b3382d023d0d29238ac962f9fe5120f24f95b7ce96173b7f14ab60f6c0d1690f3ba1e0016f947ac2815f224997e362df9f370cdf0e9c69af2e2c46192ccbfd93b2bfa76483d57dede5d6b015810aeef7d9ad6f39a5cc9985c3b3d0ac8dd85e133cad0f1578c0aa2f9cc7ae6244aa7770fee9ceb4721ef901c3184e265f0647f513009d302e898e1f883c0954075e926d7ec82d6a5ba5710f593bb97d048dbe51e80e1445a4dae51b61d9a2d147cabe8127437f3f3fe51a1b7438dfd0f035ea3e06f3dddcf2da6eb33ed9b70189ddebceee9bb37c178547606fd2e5d98ab3792946438f635e6f16e39c9759521266a46308a23857eb0f35ffecaab5b1bfbcc75422af39afdd801199c3443712468c162d955dbeacea4d1b570ecfa53a3e2206035d197b6f42d995147b16c55fcd9b0dfbe7b0144929e5297de8138a3f822835deb7e7ace5dfe333a5be0678f59c70e33f95ff9fb1b946b89fe902d67c77750d551619f69a00ced7be367a8b7d15ba662f1787f401b4f88b940d608f986952aac2c5b5fd6f6f96c43f3d322ed389716b03e403683e05ee06e333513bd9180adde39fd345232c9f9cb4ba34d928762fd43e56974395f2e8eb63e16d6fde15d37db47745d68fd88ab601ba9729b2898def6d83e10c374c83ae1b83b82cf40272b71664293f35d605b0cc44bd0bf1993ef005dd077567346b9660c0d156036ee4ac95f9215413f1b30bcc3c13a683b81cb9a8e28feaceba092148ebf1d90810019289f0c11bed39b95022d01de30091fd5c760d2bd68caf4f3c8c904504e8474aa807368ebc9ab80b7b5aaeaaeeed0fb352c1b2be349d9111a13c6604351327ecd29290258c4857f683c263ca94e4dcbbb7136c4af16149001ed61ad379b7a7aaf4f904717e312c39970da0962e51951d42d598cb30ffc47d5f774e1636d553b249fabf42fe4220f86086ad247efa9f002d7baa2af49d4d0bdd1e76d5fec29c67106bfb54f6"}, + {"0000000000000000000000000000000000000000000000000000000000000000", "00e85247c083dda6f079877a46f5820a8f2eb641362b2989caeb9e63ff802906e7b9f19ae701113feb1f024225c44ad11ba355f7b7615a505dbe42deb4cc7b43521720ff2d212bf24cc587fbe93a8994e59db787017c6e75e9976d31aeb0d4b996d9a4e39aeb5f37f304caa8584c66f5d186d8e273bd18cd356f7817a38f03eba740958ba406d6fa314f22be117a4e9c576d73546d63627ae2baabbf90c91dd7555aeab6d9b9488202dc4f60d6d6fa3f1c5a22e072740ef23021df77221d72a386422054b737e6c62551751f41ff9d71d1281e5c41dc17d5bc36b59ee59119e0a625beefd100a42580a4bcb1576087739ec5f30c4e9a0eb73b3ecf18069559405eca6d087c72e0984a19630887f69da35a0db6bcae483c4ee3fb1176c9f4c224f60738fdbe5f0f72ca9f95109e2551032467b863246573f8f266b9197dbabc072324eb5e89e1d330fa3a0d19ce17d981012765a3e449e9d18d2fd0ba95291ed689cd1dce5204ae6c3ea70cd86f4b71e1b834b07a269ed21aa36b028950c65082c6c82b0f92700dfdd1ecadb4730dad036e1252e408dc4e9edb345e4668abc5f40e9180aa10ddce4a5cc7416f915ea1c8e031b78094d1fde415962d6f95c5b239ddedc75b339dfd787b515e9d6cb318a6377a33180848c801d22dbfb17ab2a678f83f393be3d4df84ac03cbfb7cbc32076313bba23f3d1d5901d4e73925807634927a523a05dbf6a20a339c275f09fd794ba148bf4b877e23ec53d7947aa8205b1b8703436f605943f9c1c1551860dff042666c355bc823088784551b88450a53ac124e7db84845357a0cc86103bcc8f4c65daefda4149121ea257b567acbfddab12d5a773d64aa7239af89a2f1185a244602bfd338aa24ca4208dcaa6139c711f6a588da1496005d31d19b40c06f0ef2a58261569fa68ea7e217021d0fff1e0202a09226a44550d25789d85abc5add375f397dc17727af17e408224c6fcca149d801758b26e2c338e9c517cb04b596c6758cc0a3c28d9fd8c3c1757338a03c327abc9d6ed6fd3de32a14fac06b8005d5cfd0fe9904aa0b1fe12d8c8fe8a5449bbc7cfbcb1247397fb906350cdf55a4b82360eae07b9f55b3892aab1ccf7e39f6cecf2dac2e4bbc66c77f9858cf2689e9fd8de36583f458f0a08d9fdaaf98cba6d9cbd6354ebd964103e157c7e627f189666ab1eb15a0c4868010dd985f183f2959aad4742d291e73e69561a59122842b4848049aaca3ddce13496658e0f1c4b6a9c0adbd58152336ff0d97f7d700aad2dcd9edb0df7086fa08192aa20d67691b374c04cbdeafa7208644c89a4600976208201307db21181e151717f328a52fa580de60e83e95140baad0462a93ef7ca662c06bfd933203b554ce8e3725b371cf11b3d33cc79523b0b5b5779eab9e816d04456fc232557b6f522474f467b5ff126c1b1ba98f0c8e13f2781db937ef4f31c5b63fcc62cb8dd7418c0fc06ed4adda39d131c782f19f602e46d66d7bcbfd447b3714b8343235d4afe537deeec0f961381629dc04aac1fdc2200b1b60705053955dc7643599fa8efd1e15fcdb53dd9ad1b008d5a0a2ae3902dd833efd101b79edb4ee14081364fb46ccf3e5c1ae678efdecf02029e67db95f625b845d2682a5571e332bca1b25cf0ab44e44b5cfe3c90ee175048f2d156270e2385c8aa828f6da8f2c5f7f6aa7bb2343f4b7b312711d0a4d391e077e8e969279022b38826a6255aedc261cb1f546bcb43c8c16e01b05a104ce9bf2e09e17acbd5bd50c6207249544aa3b44d259bb6c663ffeb12dfe8bfa206c8219badc5b8b684fb2cd0fa41096fffababfff1d135dcd96137092feca89f1e1e7d7df2d043e05be23804f796925113b62ada49098413dceaa64b62183"}, + {"0000000000000000000000000000000000000000000000000000000000000004", "00b4d3e45fd4534b6ddcf4b787b87b118eb352c776018b895bbcd29420dd2e556bbecc22e16c385946cf0a624c72df66a1a1b2f5c55ff7570c156955f1e0270a67b42705067ae8a774e425d831146938fa2b3762029250f617621b59a0971781316b926df1d8104c84082822dedf59416ad008e674ae5ee3b5a0e2f8ac56232e538b622a553f962943858ad02bb903a7e83b812fd5d24a7e926b00c55c348d8678bd8a99569d8d7201aa147b021f1729b645f2a0c146648dc98dce4ce92bc587c2fda470e18458131906e50eceabd8772f5c08b9f6702c8c08c4c92ff533116c6c4611e59fe0211e61dec8c4d4692d011487f18b61f99ace0d1a366b10130ea1f9d026cf376914a42c297359ea38fcbddd10886b0af48989ca6846634fe3facae519db2ef6f2144c46e48e1d25a94b251432322dc9c9ab67f91acc39a89ae25612e6dfa145d4f854a8813a97c3b6fa02041d0773bb5919392bcdb4116241b1391b33b2586619f9691f53e5a997f3ba43e57c763cd5265a4d946109d3dcc419054872ad1b45c0bc71527dd0aaaecfa50d0f1f6530919c1e9b339118679f37ed00b275ef1e08c89465960a8c495f0890b4fd446c482f3a79798d226af30c6e4ac390febde51971b52c71673b32fe9b166f2b03e1d7333ddce7042e4cb7b6333c025b625f68b464d30c5af3d75b71b811f96dc632992d95d3ba0719e6ef4feb170d81096bbcad7f5a9b33a39ee5bb0f24e78aebd9e320f82bc1e503d109c5b0734ffaf408835670395a50e7663988cbc6e743723af99f98b931d2a5922fd48afdced489c723d6ee62f7427fdabd109b5c00aae6451970a2737b665cba092b650be6282f3346e7b9f4fb81d4a23b56b1ffc8a784919fff3f237bdcffa389be19e95cf4fb8861759698585e59ce35a7bfe9611abc19d5cae62c834dccaa447cb3adae00fe2780561299a4ddeae15c90231c1e5f1cd7dac519ec931dee65529df7ba52d5732f221d62398c0edc169de40cdac9c90079af34e3964a5a6ef2c15e8a9b1dc3213e41e3ba158306d4a5487aaa5581317b40a007baf9c9fc4bbc0799ee524b02950d48b4d19a514b470ff6d06e20c049da97966bc76e72d67768599ef726927433eed5b22f9c1dc2c92cacdd41ca405713142aa32f6dea9214517959f4e1fc41c99b56b15d00af023120760391fdad4e254273f2ab09525dfd7e4cd40e632c5b1e5dad494711f38bb15c9c4118eb9dfc8210a6e92d5c094b952e64b33373648e4dd49d1ae6451c1b4710754a74ec5885343ceec5ca8561c88d836c074b3e0aa8429909a8c920fa93543f9c5e622444861b84325e7a153d3f3aa37233236bca55351b165e3638d4bddf0d258679f840e64357bbdb9ae8473ee94d42b5e40366d6221957333c72fdfd94072b5cfa686b0264d7b495f90669e9d0026397b211611d6e700be423c77c4603ee115be71052bd0ce846914ac4dd31f40886bfd878955c8f76a931b51d37e27cea0ac910f209b841da8461baeb6df803481ba527f111ef92952e0280788ab3d2946f098f938bfc1f12a5635c7684f256f56f9f7660374119eec6c341595c327a3d798a9505f35e70c72cb88da03a2975ac6250e2db29575206200ebe764072bfd3cb2196f09dda07b2fc35bc4096059b29df8d9971a7a554f3518fc3345ee3f0fee9c6248d3e000cccb6913910e28aa8f03a8d80b8d6940b083b158560c696334af2f1a2aa348ef608c4f0c4542335d6e656cc1803cc66557dbd3acbb1ca81f62ac7089d4e30684cdfcf4960d094288ff1d03174a5c7141d588757bf1fc0a34e6f93f3e6f7febabb5717b8e20b3c9ac27bc9d721903b317c7772b366313dbdab9621c33601da77fa4deb5bd819266afd522bea542bf1"}, + {"0000000000000000000000000000000000000000000000000000000000000014", "00312dad99cd5e1c8c62b13a4e0dd02d358019d54804958d390494860f4c356391717c36a521d0ac82af08811a1ab545d0439b9331128756df25f1b271b7c7370a474c9851a244ed620535b6e7cb05705f1c180a0a1d0486846ab9395689555f09c8c16b0b5fde1f5e1a9f817bdfd120b3b44c66c71a685ccf6d289e390410c755285e444ba475f34330857eda40f9d6912b1c17bc057b966db755e2f171f617a6bab4a0fbde0bc001c4c7c872863804bc7eb0c1adc75a755f59f8d05f71c5f3f0626ee9d1b4700a0879f11c573d0f1c8bd30d209f68f66f686984979490f6dc05a1af9a38e3795434f32374568fd2bd7b56bd40e035d686b119a58b19b848df69c9bfdf16e9d61fb8e71965c9b693a9332852d798ef8ecbc33a3916e3ba4d9ec2fc34df0cef28978a79114ec27be85383c42acec32151d3de419935003eb696d1e5a8dcb9d97637e447937dfb1c437401800e3e750159508b53a28e932645c0bfcaf83f7b10d3e6f44ae4d073e31822d4155bf55a2d569c8da813528245eed072c8b65cc2182253b85e3e13fa2a2b165f9aa681cf7e9db02ce1f722d38ed25f0fd42ff00982864b58c40dc0ade4d325a4c18b2917132b842110d7b8d9d29490cfc31195071e6a19f979aab5769f0bcc5f445ae6e9afbec281c04325296201c875d8d521b781efa2d4f32f5cc80325ac68213d3de14f20ee037dada40b9718fafd2e522a42320fb58d4f5d400c0b5474745e0fc5dbdf01e3936f2d7109c493b53c130d65623529717899fb43f0e45c2fe13107099b79e60fcb86c9e6d970831392b132c7e7a2666546747556078ba1614852313957dfc0840012e6d4d0842ed23a1217135d7fe4639566ae623acfbedff8f7294fb51126dea7e8b79be93cff1177cad3da668ea0545ddbb929de496a1bb2b113db6ca4f0ccfce6171dd7f969a00109ad04d9cc86873b385a86ca66bf3ae3eada64241641d8dfa69894ef20f689c941e29712cc88b79bf60112c7790358ee58cd90b12f6124f02a8ca8baa2a70d9d9a8a21dd2194f665b15d8ad29c55854192f07909085ad78ef19addf964e7d50bcbeaeaf6a6dffbde908d7524746a2495af12d94d84f31ee2dd63d9a07910c7df87668a9d8273f751fbf7b8ea496c809b003211043faa2b2cc3bb6c90d59e9f4dfba1c910717ab901dfa74f75485f647119f1ba74fc1c9678669c4d781bef355de2e22059a93bf1c2604848b77db23cdf430289f9c64c067c53e3f6d0aa79aae378785224c6f7170ec5e39f1e7107dc6425c0c3d1f6ad78b4b110bf0ca427e76cc32cc8b00d93129fabfff18104d2e4440d533f88aab9fe47d68373df72ec520f3ebf9e285513992dcccfcf8294dde182c53b7d35cd7a2a6ef7fe2e7e56ce2351a9b50d6214f499e16e85654c79f2aa040eab284fc4e07fd59416f7d7f97b1df17f1c5de00cdbd3670d11ca01aaa301b3e34f81687a8cd8078309e9b7e02e1d1b09bef63105b68c4bc1eb08b6a91920f7bfa2b55fa8876a9af28c6d5bf249f6ce749be904bd11b673c89e93454f35311aae135e7b72f417d004dbfaad6a928b9b2bd617a343e1e68a0c9a16ffb80c19c6cd810701265e93f442074503aa265cd8e7464c56667eba65053f28e015ff67e688998f4ebc2441068a6074d142b5663cfa3215c2aa8adcb44a08c13a327b91ac301e2503e44d96cc2ed3a199dfab9a9a623a289cbb80ec1e6f71a7c44f76c34c6622269e1ba5704cde0996690aa97b8cc76814d8c3cae4519912d207175c2b1a84b051e7aaa3a224212f2b05ef1d458918df6645bd8fb536f7d4953081d0e4bdb8647e10311d02772a79a16b6b1ac8655d39f8f94235db5aa1427d047c7a4c62ec69b1c79ce16c75210739129bcb42"}, + {"0000000000000000000000000000000000000000000000000000000000000002", "004d8a744cd98656cf97a3c2dc6495915197d72f0b1dd822b385e4297d6e61344ad8cdddc115d70f7c131603a11165c84efce2a971b2782c6cca9a5ab58bec19bf92cb6f8fe051bd1c781264e2da9a9e58fea22108c6359763855e2ba211d17a6b4f5c9545717d1c650ac81b2ea92af9878b2062ffa91c06b777b7fcc2241843e9f705e23e89504802cf9545d329554a2c882e562133cab1999884e686b68a105a9e9bb0027fe6e600a96b5e35c7e929f57900c2fb398e40be0e2a119a3f241f8ef5117e7ef672d73fb1d116f28b321acefe04d6dce35952be03d5d47218a998eac9f29d761c840539743637116577745600d7d57111034d537accb21166058073633249b0d432cb0d4914496cad52279d1e9814b78799af6b515b948969645fb9675739000f260be93760d96e6954ba5271737345476af47de8ac2c7a2b870b5ecf87cd5513a64721db230756bacac5024099519f44f6af93ff72d70fbd6c81a288b8f62405e6c9ef88cbf513a70920d012f26c760e41d350f10df6a20e07059d91657542e980f154a619545c8ce7450ad73e89961177764c375637ceb587103f9f3cc9053ad06c17cb01a1efd660bbcbf345804e119af64a11dff1017e092f6a66f677b33949c0b218973f3d1724b914acfd123c215a1f139451fc80116c44f62eca76ca25a5d85ff3bbd6fb19fc006f2cef40aefd9db50dca532378497555e27f214fb510c322f3b657d4014f965c4360634ec173c3a913854a4d43008c1de83f6ed054b2dc5eafa75e82f6ff835af59a20ea97a7118068d69b4723e885970b68f4705df1475de57ec5ed1639a691ed128616cb8f2516d549dbfe98843720c91dfd474b36d2608bb0cb93b33ade837982544f13b2175ff1a1cd5d8e071fff24f0f9c238fde3b619b81c1bbf31f0766a28bff542830cca9e260248fe9349c60165411ed2b204c9f604818995fb426d84ca73b1393cc323e49dde91a18b30657c976ae622188eb5693816174afad40ecd9b69d154305263bd1980c8ec11a93ef6fc7e8e143015d634b5be01eeef1368897f3e8212b2b6158c3b64abe03613a4c54ffdb4fbc3ca40f738e7bc94f814eb70f76583c663e79e55c9309019bd2d389fb8a1d99ce4fdcbc3058fe6fe1a96e5993f0663bac7cfb099e76924c496a6dfedb0260d4fb739e4020315b8669759930b37c1051e1e86194a9ab6c52345c8cc151fb1c805c62c15202eba4b2d57a794881403b54cb16ddf70973e41b61758ff04d1c67b18ffda05cffe86a689aeb8a5b840a2d2abb4c0c25e54f286040cd5ac22474bb2dba07342756c37e4e12d98d2d9110279453ad11762a34e51f904129d1cebb7569bee0b3f17e3a8e266f3369d197adafe9c8a928fbf1a3c30ee5d1bc5d6a2a3d34df8ca33d7ec2a95aa9c64c60397063dd3de1cef7460962c8e5cf1618bc4d23198384699d8e411dedd194b84abad6b9a0b4cd1bdc66c0721a1b99dd118fee67e2270a04e79e13a94750771483dbe9671121798d823bb70fbed6d6ef5ca9d272f0a8333dd5db7f221f0bac12a36dc81a44a9f9aecc10ad3891687c96b853f4175959dae7ba6db7b96edda1e970bc1deee0cd3fc4d120fee54d262f89618973b387a754809d8cfd75a61f41128c2413345969e19620ed188f3910ba51f9823e23fca7700189835371a8e32e96b9dc2ec336d63f2c50927bad752b2469fb2f1177429a5fc4d8dab04748483912b2c2d252b0953ed32d78bdd40e5a863a55c973260742bf69ab0bb44930f32efd0d592b9dd866012d705a32ecd27dcd34c753eedc2ee2a22fb9d8bf725c4c9527eb20cc4148a6d17d25e35b18dc259c6cc783abf5f5c42d25edfca7d1f42a28814db7cd2f5ded48caea759117add16225b"}, + {"0000000000000000000000000000000000000000000000000000000000000025", "0027319d33403e08c63db54ab050c0062b07b971951e2aeda6764d93fbb980e42c4c462f4d5a495ef80b04c79f74c8369c3fd91478677353188663877d7c49108063ccc515873ad336216a947347f0b20ad2c31f29e8f2104964cc433da6b34b96455d1ea947beea0537a38ee14e5f4eedd3ad37105eef4dc639805345d72c2b637415aa226dc6520323a0c4b5f160631406532dfe3287c19b127b8394a4b5862ca945e8ea56961704c0dae6c1de326d990122565f727cf89bda51dfff0685fb2db9543eeaf10f13f5e4d923e9d85e599a7c218d35b172e2b7ed207cd2b01dab388707f7da3bf3476be3640a9ac94fd2fb257b49c9aac208587dc7fe0edb9534d917d27efbcb55543345b546115ed31d433a0843be9be40ec9c13294654c768ba58a704e7f2e1c283b57c9e42175aecbb6032d5f92bdddc551260921aa2ce62b93119c9a947413deb09303329bddb614062d2ec1f10bcd39d477921b22ec939e7b2c9b59f958618457802f61e3ea7bba0e1c62eec31b741e94ea165ed666cfcae4f27fa9d410d54cf77d46b8cf0618179dc63e6ead1e7d7fa8facde8d6e3cb36aefe586706cc3e204fc666a0ef26a2d19e298bed14c8c8fd1e5650c6b90bdc55b77349896da96eedcadd9d5905d11cc092a7df135870c8d0c30b61bd04396af811ef611dc7349c5d66e323ea2573f808d171de43b6bce22907327f46cf8a9aa5175e33ac29376681cbf35214c63b51ce17b190e787fd74884856f36c1e60fe5f28930a1cb799820a09c11bfd33184bacac8a90ee760fc7134ac5044767c93751ef0406df5de772607c9914e31697ca06fe392e39fbce4c6177ef52c36a325e98856f3b36d230b00031a2a61964f256f21ec8f67987f519bf7398c54b2d92cb2ef43957f81d5a0b1fd913af19d86d47f1178e5310c2e76b7eff849b7772bbbca1012651fb46ac1117b2ffb482a15771df8f67fdb6c52052fc6bfd92cedaecb004da00657795b73c9e132301fbee6920eb25f99927f0ef1a3b42169e771b27643e09b492685d83239ec3b3f92ce0dc611afdbb1212081b7e61a84f2f8510f030cf5f75bb4466da7b537f2a397418f554f35b2a1c04e5f4bff55ec50638d3b10aca9517d41a6f9ddddec658725c2ea6376c9adebc4575623fbda0378d50aca4f4e04d0371e9d7119b95103b7ad01c0f5d7f3998725e7afe36d959e77d9cb3319cf54a18ec4315971eb40a1b3f81b253e837601016235193d0273707428d416ba51f2f1d6f46b6f7875518153325a4038977a2ba931fdb50774856fa6e5a120bd2d79fcc0e571300e6a7043adf89d0327c6a631df5254ef027743fd521f7353cc581bded4cd29ba92bea32050a5749cd503c431f97a3280199ffda14f33f91eef206de879792be081aba684a5e4cc2991208039d298085a593db344dd351f6f07996745bb56d66462e7f354f9c68439b5fb79453d542e1fa1b56e27605e09de43d55f39542065160c3e95cc21fb6dcf4960ede7b45572e3f3d73bb7185140cabd0a6b5300d1206dcfc4c1f84809bcc4a73e00b3965a58a6c4eeb361757d1cff3952ae76d33032c025935125790562d570f4a2d2e52209b6f864691a08bff02e0c7069bedbb4dca57060dd43d8740de07f2dad6090a849eb94c9b05b04cda950377881c38e5154fb7f5b32e1cfc5836186b9c571217b607f41f34d95de62e016dbc6e48fd098445f588d74783475a02fa681e1291ecc3573f47226615aa7752146f0502624af6c8fdbb3c9e5f91410b6a17cf90ea797fcc170762d37c67e2d5e55c897f16f06bedb51064028c9f8235e09e483ab4321cc3a013a4f784c9207f1f7ec3814614439b24638c15169246c8fa938fa84bff5d628705f5fd5fbe29d9fa1547"}, + {"0000000000000000000000000000000000000000000000000000000000000004", "0005cb49890fbbe1ed60872c58f31241d0197d915d36c3fcee36ce5936fe3c495593fe6157294efbb2330ad15a4a30041898f8f8311a7bab44e4adf259854d2b81cd035d97f65127526425c94bb10d6051d8e67c17e578e1f956e16ff1af6333a9d020474fea3e70482e024cf5b350a97b1097b371d3616391d49c75fd3d1db75ddbfad85308ebd1334600ec3cd37937fc4f6d2d52feff5e0e73fe756f2548be3793a1f2acd2477708fc2c5fbe129b14e02024afea5162017961b711ad31aff4b64e525b73921703ec302cec99ae1bfefa74131f6bbf51c99da52d7fa4d282b145c2b7897f8f661af998ecfe222005882f827a4b1a166ab013be084e09fcb705f50ab19922e4674cd070d6825e3ed37a4a1cda93e4b713208cf2cc044aa362e102bd8db9586819e35ac93348e06d6db689742174f53a81961c3003921347ab7be5a4013fe53b3e7efb4d7312e65befb7007b362dc0441d6256eb4012b4ba5f30a755777d431aec1583466277d92ed8e4a5a8bd01274b79fb437910fe81a7e8d07c02976fc8d9436f6d125c78355d201d8e0ef26dd44a13f465e41262f60389f58d76b404124d0eecbe09a59ce24a12d97026e984be9132ca9e3dafdf459f5892854387f6ba23598c62b24dfb43b812d118eb75227cb5fcb7c2334fdef36d23ac2b907e1cf18c92cb87ee0858bf65b342daece21e2d1b6c7901b756f29b83849c6d252186c1fc5824805cb1a4ec0539205e1f1705fd0f1ca3cb72b3f92a39aaf87d0d08a2b494e1cfa6d1226f856399d7060a80ddfce7f43bb3b2f32654e09949e90500bf64893589579e11ac063b5629fe59edfd4ff103f0727f84224e49f514e81c669497f4189af9719d3231f3b8e37a2c51d9f0621fb11cc7ea52e3f0d4b035070f318a6dc768fdb4623cd62476de96439ed38834bf3075ecfb44621f38c200c7c6b4f70c436ca208d2ce816e7dc710551fd681035f205478de7afd46b183859d29cc221583bb7b5413848c8149e3dab13a0c54306c356489ac577149282e9b3b7cf417ca54c1d574e10f5327b6785f5d05cd088902cfd7162c2187b5f4a5d36391ee0aacfa805d27173ac325a4943db540e442d96c14920313dd41d2134fc5131355b303f6de852efa7c1d617a77987edf2130daef934da0994b6b6657053ebb62eb4ede769801b8232cc78952c3c73353820566ed32db1016f37a3f4fff0e64d0a7ccab98449ac1c20fc1574f5f1faf10243be3ed0d4c78893f73d9004dfd9dd9cbfa192e10fdff37d492abd3001e26b08fbed6ce81425cb34d02fec35a1f9131637b15d1dcc6f5dfc28d07168d9c431695dbf934fa45f9dd277f425534070b257cd0260545acc333b5d779fe13a098f649414cb3c0a8f78a5677e4346b2668c3b588f87a947969822497f34f9300d523e4b4c9301fa0c8b7df825788db8b60de94f149c94e536bf7724deb14b74984ef6632e4cd997b420dae69ffed044793dd91eb570076688393ff3d87f86c3c3f70cd9bce09371908355ff84f32e52dbbb8bd0d4ec96000a40cbb5314d59f3cadf842de3d5dc21314898dce76e40b1b55b1f44747f867b137cb71a39c1ba15e7a3f74af47fb6962e65f4c1700f9b1ca5cd82c05d3d511e3dd55a6ed46e6e6fb1d1e065719eed1023c401a8958b40d374820e4c823eeb9af98bee04a24c2bc96aead2d0dfb51534ba45e97aeafe09fdedb0679e5e55cc957f3f3d7f479206de77d4b0eeaf2b23f7c82343f23ba876e863564dee452d1696eaf4a6507218c64d84342f132b791055e913970bd4c6ad22a368c0f8d9b936a17e8fd757e82c09e818dc0d4974c0aba573d8e8ea4a4914e027491d0c6e0f9d26ca6610e5fa24d072badbdc75312399da890090cc1f47446"}, + {"000000000000000000000000000000000000000000000000000000000000002d", "0079283d17c2603c55e540feb3fa41b94d64589c5901b69e428e54993bff01e0712e7b4ddd5a778fd98b00ce35210c0e69b56172506713c5ec507f51d3bf390191750d1522112590a260253b879be5712872e9380ce782bc5512e64d05f25423af49c751aa1916ec68198faa507f9bfecfb06c12c4e9a08e8d8c01f7c51c1df9698d5271309de07aa1f6707c7341fff9fa09652a153ce2e5b1c9199c6813304bc16844f00d90531400ea7ce7613377cbd2dd238560d1c7018926dc278e11fab1423e98e7b92dba524cb5e7ecd2646518f3c314f7ec23fd0e9f4525723580d7415de5afd9f8afa73615a658388e03f6a619845d974d1b353d888bf77e027f885017d30365c078e09fed11f999372c796c1316a99af4bba29f1bceb96cffbee81f2b46a9bdbf2f2ff7c6c98e2293b7748fe383246b658cf67d7060793dd206a4fe91bd4b1c8a48d30e48269a597dbbef150439d9c69f4780be6c5d2cb7466f27af4ba5da798b188cf32f686ecd81a907e8844566698232c9bdfd2304ac5d231eda4a68fdeff3bfad3d39419cfb9a059832bb2a00e7108d6991cb36e5cfdc9369eb7579d72604bb284e7143d5007243f38dccf99fab29ac1e767c1078caa048074e123f95fa7b4ef1de06ba4a5c81c8067a61c613aa83d1f298c454a5bf84f24c40bd0ff406a04baad15b8b8ddee805e0a7b0433b68eb5eca3f0a35a5eff9528523f679182aa5513e9f6658df6411209793cb309a0a2d33a0443ec128d779543c9ababf1728473f2e1227b56364523bcf74d52e65e4be1f7855b5b5646c597d5d540d955fe67b7379a39d7fe6b010d952496990a268c46fe32b72757d50d2c166bb4c176599bb526bf6b9a592a5ac57d4edb57ecf1430ce14ed354ddfce3ddeb6ef91acf5c192c17870dbe2141d243c4b0d4a215b043602211030cbe8a2acdb2c05009d28a21e1797edfa45b2a63fd25eed657036cfef56b7ff01371da8a56ce0d9599969a95adf433dc2443e8bace91c54f8d1ec58d547f4f611f6c6e41f149a467c243067e3567b3e5b758b6ddc8097ef941fe489019336647d54e87fdf45d490dbed6119ee1f1b80412c828e383cb36d51a137838ceea3b888f5cc56fa4212c2c514d65f4c09d244e3ea84c5254aa21cbe64b920a68c0c38e1e0e77e9fd2e7c86e0e08e84688a129030bbb3970c8f6ed4d4860fd9ad4f92542aad12e23071a074cdde459357c03534302dda1ef3fc87e38090c0d61f823e98f2bd99c5570707817d5cba7ffa7ab11397e955e5f13e12a32441ba47a64166daf56ae5912770975444d3a39137ea35d1e36353238443e41ea1ab56f20fc07b71147eca273357b2bc50046dd8d7016418f1ec306c3be97668236d596d18d4fc70e351040fe9c828a6ffae9b608b622f26df589afa576fa480216a86f0682dc451e4712cb994ca6cf074c1a87130bf8caf65f4ccafea49b70dd5bcdf0a4554670f3b014dc5d90b05b8c1ded9955bff2efaca3879e5f9cd74a75c76413aaba61d797c57044af0352c8d8f9d5a103be323afa53d875a8ad03a0094a8d8f85ed1d4a6505bb472ac8cf7252f609f09eec7262e3a7abffae0905ac7afb3f8881b1b00a352edd3272116ae6ee2060266e99545a938f3cdf45b47ce06c3f755d37cc912c03c100225f362ee3f15b817c11128d1aa209bd51830bd0fd69b7a4f7ab7d57b37f9ae4d8fa344196f1cd249856dfa24f7e23bf14fa83ac54322efb2bfdb2ee2ce466b12c52107afb1162ee65ccf22711b5fc793506f8e7df08666f67bd83c3d4703eb682249b7a41630ffdaf0e04dc2053f298a3269ecdd3ad563a95343f102c8260005646f6b4499372c83e6e19e539db870f143d30ce549b59e567d466f1efde59625eb51a5b88"}, + {"0000000000000000000000000000000000000000000000000000000000000076", "000be8f3069e2d41840af4ad792af3ad9b316d18f429af355677e4cae5e224134bbf2eee21c2c331cdc10347b24c4af87f2bd477109e8e57272d5985b43c621feaa6af16ea2c31a7faf36874d32185bb91fe0aaa0e450eb4b1ccba1e7a97d106e743bcf5695b903e7d426c76ae05e6522d7052068973ee5a2dfdcc1507c23881fdf5759043ff8992672dc26ea95e3aebdfbe473ad4cf0e0265bc4d6b7a56bb2958d71ae92b588fe003e0472aa762d977df0c62b39d51819cb6788a316816f54bc6e998c03142b24262d0eef4d946e68b9afc0e12fd564f18c0dcc71ac3fa3120d91e284ad337285fa7cb530eb570aff3fbf932fdfff0d277d39ca5ef0d426aab3649117d9a58d31c35f62944f20afa428a194e748cecd1e4e6fd52f4d90a63f4214f62bc8d53159b294f2948c53c941d87b7926c38129686180a412e5b74678694ffeda791f7e21fda9b637982bc405f02a56c2eb91b5b3b566c31acebbca57dec4259e6232ee296fb3e4f098786d658302ff26eae10c71554b00b2246161450f5d187261376e2b1b19dab5236ed6d0e27249a62315145b093b0ebcc993e044f07ae291004585d90a75e46fb4598f49aa76ee252277999ceea0fadfe35760e4121c62c2785c67e008a3e74f220c80bcf21ea5b08908d709aa2080516187a4723f3dc042502834dd89f8139a45a04e0365226699a37bdf495059f92c769722f77c94242484f14bc96c0aebb9a660991cee144daba431c3b553622cf2056e586f80c4d0ed3fdd1e1b1d991e74d12ed53d773ee18c5fbcfe1340d44b58019e2356112859958346c260ead90955d05c8a2e79f4272a66a2ba2577e3f889d41913baf260b2f65fcb4d70bc8ced173180938243af1f39c4a1914d8b2221abe36cdf7f431c90c51dcc8c78751c5161ffc9d4fa663927fb24205a40fcb471d7325af6dc2002b46c3f74a4ed931d360f1acdf1756daacd7661f1bb809889ba6e6e3c3ec22700f1f65658f7492e50410a7762247a351cdaa4962680aeff6bceb67ab6ec6113a2f1c5a0ecbbb0066a7bca65c63b2a0277faeff069949ef496cc4e3ef5ae13c33af7c95aab3f4e58e4c898533fc1fa64dcb86c97ac75982bf5f3b9d8d8329c37c9ebd4b9835e708690eb36fc10e614a39384738a59f5cba928edba032b3f68e562429b2ca1b646e04df77be0909c2fb3de1a11093c427c169c076da00222184e01e4f7f48ef2dc3c668ab34bad5f27a64a408052a85c15b91536a220208ac5cab01163b6dc2662afc5663caf48ab7be83c2ee3f4d01c51fda36c19c1c35da4c3388e2a728c4d23d7e7531e3e4faffc53a40e8679b5497fc411287d42ee355b75a15db31bcf72396156c68b3d115d701180fc1e3a3fa5a7ddf95b44082dcf8ec26dc1d99a2251e7b7c2f168dff9bf4f40140db799dc152075a7b340d9b4b879126803f6f65084d17b4c32c87a9e60200b52230e91118c371ac4f22ce5f2b53628f5d704536f9a350b29ae88258f3f131565bbf109e43815c2126383838d9d6134f1e1bd602e8b678b5ab508fb741809fe7cac6c88b7ac4eed0117b867613c825a8acddc1f7176765ccb1848c02191c286ba567166fc57086e2d360b92eaa0a893b89812ee9ef58c4abf841c2bfd3c8dce0a3ca41a91c0d9d0536d45e2742d395be42f0d6e890928e42d0fd27dc084fba52388af6d9de6ce45816bc998e44ab589aae063c3b9ca442012186cde20abfca9ae536effeaafd192427d5638d3cfef1fbf2b455acb91d48fb768e9a06c484d208a9fa6756e385a917d814ad8e2e7599d42c53d3beac1031fd957f7373017556a60f24f3ac4806ea5a3ce5d4718b05b7454b524ec97aef1839d39e0e0a07c96b9d0023ed342133abe0686120a35d0a1a"}, + {"0000000000000000000000000000000000000000000000000000000000000002", "0014b7063799854fb8a070b8ab2921ee9d5cfd845610453b2c681a443b7c8222afe24c960f25ff5a834107187da435d1b17f1976f18867d74c629cc81b9c143476adec85aaeea1cf7746c5d4452e0b001c5b495b00a3c007124af6472d1706d6467f7005f3affcd9de4cbfa72bbb56287ccdbb45b1bfdd4b921dca1d25a70f61da071fc5a7bcc48187a7487ad0c645e79887d41524d6f505b021abf601b2452cbd4a38cbbd48e6140083843fb7c9643ba7a5233d667b0aa95029718c042a692b770f6e6ffdd52555f97b704d3f054ebe1cf21306fc016e8fdb4b7a77f7d7e053c5aa858bdca429286aefa65e288955b7fd456091c4a2f204a0ba2c7e021870e50fddeee713f9c1c002fa9584afd02876e907d2d2ca5d635a056b4f108b57416d1502def186c40ea86a9f21210e81c47993b06668a1ff482b9be19b1101b6c3e10ec7ea94f6a4648468f0059832cead50004ce3575005cdc86e9e52e0934ca055e3c87dcb7f2e1e749fba91102d1fae252414f4de76042fb8bb4213441652a3cdd37acb2f92a0ea361ee8da2f9227351f03ad92a5b1b2958f95f5b114597472c0da1cb325043da101088f376deb5d32d407420cf9ad02b385833f1ce384006e3b2df0a9664ce6e485e7143f7cf3f40834b687eec385aff1b243d8d33485567e55bcc24b4b3ede9e7c30262392fb761151b7ca4e6bc19e17c302582bcdfd1573b1ff82d3289945221cedf6cb042e2501563db625000979ebf7511df7616a1e823932590587c6db394a7a5706d752f6db6e0944f738b10b322cad0ac02e50b476d0855741d9d2e12644aff780c504115bccc07a9d55d9c0d1c23b299639fad516f9fd2322ab81599c7f95ee2f691db6fc7e1738203ac56a052ecd19d7a9b647e8b8229595ec4606df711cba8907b54a863669b9c952ac84dbb2f266de83301c647902f08dfa2b0d8e777190d5f015ed98368f8e181ab407d7d16e5652243ded8dd2e23d708b6d43b7501d2409151a368197c798d3abb47d96bf4119fac1b3fdd775475cd333667c8dbd04cb207b6ecadfa69b9d631d06643444fc4e9d089844e44c5125e04d2973d5a5271c7fde453fd02cefe15f14364141c0416e08ce9a0d0a8a09ef410e3e0ebfada580d76270028cf4177ce3170a2f55ec61eae35e19e61f276524cad3bebc363903965ace871b4f1b508e33bc2cb01c75cf2754abcd0da88e17adb0bd9fea4b647ac87eb3826f6b38c8011c98f7aa70d9d94d123bb2b45f29b4b55efb7ce23f2ec47d4473af6ee7ee28e52d1c3400c623ed1c073016aff96e8307ca3753192375b2d262a65cf8bb532c4a164b7cecdef1a542556539ad645aa2a2f7bcc6f519baeb84818d13f4ab4383ee53337d47ceb27f2cb449a4166bf1e4b8c3b740068dadd13161d8326ed9f50409073fd891403af49a3087b004c98998e21ddc9122d991de070bcbb9f33042e503f3c8c8ea5f278f0f153b357a821842bf62ef329fac24922d9bd0922e842b08dbe58899092bf49f138939f04afa8ec199a1d5120bba186f54d221452414f06af903aea37fbf0a2e5b2ee323096e2407e20669ee4fee91f2ee4b9dbc551e3252c770506964afee84c74e6b845de66e3851852d63fcf49bd7c24d819a83fcf365482f8ec41c959a0d73bcbf4252f90c98c112b2eb4c0641f0021101fd120ec72969a0a63582e454b61470e919df059509b92f71c6e3290ddf26f8f7c68fc9bc33e6135e354a4e30ad2190f111c709c04d2707886fc7ef471c1dd9ef10ffcd20ed8c351f614a02dacbcff7f7431eda65f43cae22c1fab2a2e3d458053b0243a909bb56b0126e2064dfaea0a17b194d1c62292b1ac294b71670c84345f963805061687f8700a48004cd0385dcfe51409e"}, + {"000000000000000000000000000000000000000000000000000000000000000d", "001b30abcb837a1ec9e513cf6347dcb1de621eadbc162046dab8d72d25a74d148ddafc4a99a276b346380a74b0c72fd6a43fd56d163d7a6e3c2998a0f7a5152b055e1aad13e4eff8b6c5a8d4637cae54ce792f4e03173f7ccba5e6777f129548b3ff3755557b1ddacb3e09d7b549130021ab7263f13bbf90ef53285da548052023ec4bc3aebefb9e733de71bb0d1adce90fdd50849c8cb6f55eb2b6e81e29a5ead2c1d91dd15ec8e005cbac67c21affb2b91e0ea71e59e5e46ca53217a0e78db591310703f080ea726f7ed466637e0127e781f3a23cc8a67d1ebdb90131dd2ca766e76f215960175be87f113e22577ee3db7dbc748ba6a86ec1e31671f358628e291baa4ef502684d947eb92413914c8662e773b9b8f66c591c477b416b8a5c5a14b3c4b2cac2e221dbfe64f0c67a18ba97fd374393f44e61d99a14b9156c5626a8b456312e7cfd5c5463b65d37f39a5018cb353a5cc6cc5e5cd83311acfeeb5ec0c19a02e0fbeb8faa1a7ff375f42610e0fc989a557293d68061458e318f28c9ae95a6db7365f700aca89c1bf72622b21b444f558acd3244585abddebac21c53c50cf7f02bebe2be5d4c140ea03e6abef6f22bdb485182de4355d1279cb94438902df6853d65e10ae9c49dc7d2d1d15c152def826a3eb91f79d22f7439e4bb43f67424993ebbda26a8fc58144f556b4482b25d8f8bdd811027713cb8cc691f18c4462db66ef39f984f94f86db0b9a4725d0139c616eefc42895e2954d9d5c2de5f202aebf36e9ce636f274ce327b7e67e7f038b5826e1056f58af8edd4c779e6a24b1f9d2f9de15c11e9eb902c33ab3c809f5e470e63579cab87d1d7b9c4da16e301b7acbb3589f5cecc0895814ee80a2d80b1c02fc087f7fae6730ec41b57dc4aa4c71eaa53b2e735e3418183476b09b37ff8729a5c1d7402dca8d96daeedc00649f2fcbb207d1e97d224dbdbacfec970cfab2120a88a79c990579b7607712ad05a8444674a3d775b70248a6fc3262f269fbc547773d4fb9c74d24bfc54e3847f5e2df5bf0bf076389d5b0d7112f307dfe1a8e0e160d99a305ba7a7125a2fb4f78cc72640f186ced0ffd4c494b143b86b82894abe5393c8562d64dacd318a2c1464bdfa797dd4215395331a316db7e5a4e5d1ffa72b60952da1ebde6422448227d5dd744b620a701e6e974ace344d38a489579a3e09281651bd64da532da4eb018d4ee28f560f667b3d0817a728d741fa90cf1d992a08fc1c7c9b8e610194e174a862c547b201d83f70977081e3050a5c558032e6d8b88443c7f390304d3d27a0b2461fd8c11f743d5a26e03903854ff06b0364087906d6e938ce4dcb93437016aefb8f4fb04c44bcb4e977f6156d00385b93d48c9e057eff9a41cc678fb03882b897a6f321d213234e60041b0b43f0092dd7df978e039dd63e1ad6a50fc816d0e3639b6054e3cd0b8155cd4ff0b32f546188f2e9c6256341701a045180f6b0abf5e7db87ba9ff9c8a61f21865ac0f69f6341f5f5c756d5a067a03edecdf4d9f9ed483080e79d84d42a39359c100f892b17d186c5f89995b0b7894f6c161045d2798f6ebf1e744e6fc9e9cadc71471a3a9993761c9d0af8271a93c6e2a715955a3d623d03e6cb0a9e40bf337924e63161df703ffbb1b8b0284ed74a1c7e55a77ef51d584229ceecb747a929d32ca8673e514730dd1cca3572f9e6efe6341bf46fe1e2597c10c521b718d46f2b4811b7a20e9492b8741519e2f748970a1b5f40b06f395f31c5a116357a8781e40863a066ade0dfabd191064f47cbef0d07947d92360fee6c9ed41e9d401b9597e7d3c3ae0cf9dc4c352e6a7a8c92575338962989cc2f727b29f41352f0675c2ded18fe05c134cdfc8707063f10f246cbb70cb"}, + {"000000000000000000000000000000000000000000000000000000000000000b", "006b446880e0536bf7282041cfadc1f9f7c8b593670178892734551c4bc526549a90e45d7e8437f5bc871a58ba1f9ef95953d9ab929b024aa6b5e7e4b2da2061843c81c99ab4171f4d7b0893765dd787851e31530121274cc34eecd59ab56593b4e27cf9ccded9cd5705de9064c756c46949010072a0d40b45f45099b024244e4da3bc6c718b98a373abe258658a83331693ecaf2a66ede9704995c7c17cfba56969c3b89b5f5ed3022ce963a868204f7751117663732a19b5c3db43b740e627433a59d8cd684dea348f60701ffe88bffbd907a9f6626c4ab604663e47cce56eaab672937b77aa270bab062fdcc87b4cf413ae5ba40f430e787897110f6b7fd9c976801fd29252bb0670fb655e16b8f57c1124ed7636c98a0f11d1d3d813a8e835dbb5de9b201f3f870317c7eda77a1c2679a64d746dcbe73dfcc0305ce27cd51876ebc01ca51425336ba1b01c2df25a0160901ff01db14f47dab6890ec16072cba8fac369078c13a1ef4385b14dcfd231f6f817d7a9d6dee1311b755b77be9e1d7da78454518e6f9352a2d07a9713561a1ad95a3a1febdd4786c27a4422f628ce938b9a05a2e9226fa75ef16ea07272eb950ce16434781a3a0684dcf784e8e8d5c476287b6ec7c1cecb07b9e9e106f2360fd553ed03c5544494d06a73aaf4e39fb24d2d14924b2b8d8dc8cd8ea6eec6c69b5f00a27caf840d380df3a4633bcbb98bf1c333c7c71534d8130e2211f11ac0c65dd81f55349279dc42cf6a2d673b302e0e38ae9483cc0441ec6231a35e17a0346ca95f3cea55fafc801b23a28bf2923713f15eaee677811cf56227ff924d4bd490dfbef8a85e7a70e35e44375e07c82dfb3fd9517828ebed9775839bfa64c68a269c85433908920f97966442e0ca97371cd969f62a907f788656f73f39bae574e764b777fc546d809a29a4f3831001366f9daa10fc73f714c105ef3b19fd062e9650071c557764ead388a52e65c53dc0c23bf56f883d70b507dd72039527f73ff2f85541ad445136228b5858ad14df4dde44d481a8d6537240a566ce10ff21f6797b0b211d5876c84a369d07425a81f06d2a524d1930c564d9b4dedbe2903f7993278df7fe0d1a53a8ddc6fd16aef3863519dacb822db6b50b652d15b80a37d83d67b0b669285a30b7ddb6a81be1c8defacd56fc916e0619e155430c47111932a06fdef6bf60217b5a30211b1bd3824fc7eac58e57c1de4b5cfa372a275f2eac0d4dbc81f0c797dfc59b02d43e56ff6a64209a5de423d86ab7d26a84ef6cae73cdaf605bf2a4ed78017c0bab9663f92ac3dbbdbe52c74eda756d2510dc6e6b309321d901a7a303e544c63549cdc99a8c977ae85a268e855ef7392fcbeb00067bc360aa26d46558171f3dd653399ca8c5a164ea6735dce1609e564e1b70b2042b7decf73801a9c3ec4289d47ad1f54cd131864e4001f4957d515b0f0d2bb9dac9dfc02b284d3f2cb904d19bb12f433eec96a661b2c036d5fb90607ef43929008a4e2c69c8bfc6a1451d0bec4c2eab3e7937bc08fe69a585a4a26ffce823b949ee48c5131434141d1923d4fee324e195b77394281f2a82d144736a9aee1265b74e5dca8f2bed0c84d32f4acac9463ded6857785187162fa7a24ff071e7950a67874a0f71f1b117053f8d55794e5f69810530e6b09f1370a97a776fff0a3eb48b215c434d04e432d7a2583656dd15b7fb3015ea72c743da0bc2d35582b0182cba8d0d1b38ff4a1652fbed589719a0fae072cb9dcfb775985e746e7212cbdf6f59d73cd55d8505960ebbed79b82a31f375338e47e59f16386aca4297ed2864e71664385579241867ccdfad8b6d12c03564ff105b2f69e76d75aa73240811be6f0bf0348e3152e63c402ce70b9f9907f0"}, + {"0000000000000000000000000000000000000000000000000000000000000002", "00207482d20c9371ac8ee33f6f642eddeeb13a74e300ea88538e0372273983b4bdf5541d1143e8705bdb0172a69593d236b3d492712ce2cbc76a1a5f3b677e47177589a915684d0b3ce731c9c135d2a67e3ccf680177fedda7abedef9c20a6473556da9f3e02bae08d1034cab60135c83fbc42b38e8b1e840662179519e01d803c6706a80829734212cdd93b05c6ef5d9a44b11f770ad4a547f2e4554ea2049fd615ad9b44f8b87100b0e226c5d466eedd306047e51443ede9c415a9bd0a8b750dfc7c76adfd95f25fdef595fa26b814ed830d56fc51119cbdf5f1a586d024424b4e13bd151d9716e5fe431e6429473ac06428047c1af6eab4178059012913276775752bc70b73fbd0e6015dada77d90bc0827f2a22487a2bd8baac29f599b7fddc7ecf9ae9f2684cb7f52cba2bbb0073604ac58ee9e11111a76c3334adc491e10999b7bf9c7fe79cddcf6959f3e1a73012c79f67ca827b1a6ac40cd143d1bd86d9c24d9851b79f3fd83cc9e8393f4b22fbd56972c8ea8b26a151203a68ec86101437be57427b6b2cce152809bd4e21a1fef9e6a0f8d3499858a3ce6f1850bc1543f65b4022ef6caead06f0bc8d5b2f70c99f4f50ba25a7af20a68d20edfcf42df43bd92a956f9f89928b8576f4130172db37c56c1c7a7a735f895f2a0f22fa69b4fd635db7c370816bb97b94ef5b75ed8d68669179e0b1d021281f834782053fd6898a4ad69813a2a3134de45309545ef9ecf6580f154d38e807b48263583bda821097f2cc03d62f3b9985bf3aad6e1653a2efe1ef4a81cb9d257eb104c251324762f28d72b422cf0d6320a0615bf644201d54e142148be07cbcbf22fea3711ea20557d8a4149a909f484e2821995f24f256e99bb2409514f15ddd6dd56c74082d509988fc550f53b508009e226fe5bceb005d76d8362c9bf6208db486d4bfa0212559dd04261a9b2b6e8e24178f6665e9f13949002a120dc37e6e76f96841180235a281cd454da36140894db242c0a2cdc76b812abb0c1a0f662699d55690ffc0fa7d053beb0d4ceda0d11691cded3aeb91c5e0c353966468c7c67466c82908d3a1872fcc67d4eea23458f421f53c4896652866e016f3f079b405f74921e44e8faa9a22bf736a5359ac5cc7346cc295ff07e20889d2c26efe4cdda1d82afb117b1ae215bd564b3072d34a05286ee6b9cf711c2d82fe35da15a8d9b4d379756ece560328176eb1671926524ee773159544a1339a7db5f5bf619a9e9e6e599f6e61f2ee09c8b38220b2d06e1c9b89f4e3a4b4730f72faba44c3de68c233d265ca6498a8fd754f379f6ed918abefa373ecf27cc4b0e71645227d92218468d64c6a70c59f8b91b36fbfc74d7f43b2ffd9a564551b648124d013f9bfc3f07024323244e396214f48096c203aa368957e70505e1bca107c5765ceed495d96cbb77f39da1de565f1c177fa3de0f3c2483a6d22da66f1da6ce81fdb0d00e6f25e9395f599d82ed91cae2465d3699d41adf0a16f20ce21aae2275a2992871b0f5cc2ea582558a32108d19b24dcc92e55c1e8405a72c71f99bc4f01dcd194a9980b1e3f015aa4ec3fef94b95c27210d49bab1aab8eff1f59f6fd96db59068cdf464e7d8a3857071f4a25ef889a61dd85d5526bb1d2ce56979255084c1188b51eaf1b8d950330413a76298684589610d02646b1d4c840f8ccbbe4c928b152ca67f677689bcbcb22a547294fe24bd9b006a4c2de28ede976128d878a67e64e7df22de64bb880b8917dfb3b9b7ccc1e664330565db410a0154f5ef82b31c473b0ff784d9bfa305f1c8cddc69f4da752266708acd230f2ef7158e19a3bfcc647edecf4d7c85c08b767db5e23543ffc04da43c2f397fa9c973536b2c5ad78479c097c517698d4"}, + {"000000000000000000000000000000000000000000000000000000000000001f", "006aa79a0aa0efc9da0f9172f8430d93917c9dc6e6176b5af2868871915b0d435878e5183de2791ff451072acb90e4052950aa82034b324823d60deb98e5010b741e46fcdbc6651700911dfaa191cd7a08b377710a1d5584aa67b7cf623dc570d6eb10ff483e9a5cdd1bb11c9fa9b4cf77dda3b349a5dc1125cb2230b23523d3caf9f58aa5a57d964549835bcc736b81bc02cd26e4b27c130e3434d2af0432ea23ea597c633145dc035a5b45325521c0d3df51a4cf67b7064bd9ddd0bc071da705ac20c65907cba62f8be286069a52fce29b0e6811e3568dc9852416e2d1a7b1b309c6759971d529eac7a373df38dbcc67c73767ee07bdcf11f62d35096bf6ec0ea741c9ca3bb875bd5f09423a66fc29314146ef2a5095ee0ee74054d9ce2964962878bb115e0faaf5923c06322f85e7a86df743d0827d481632cb5473b461b6ae2803e0e938e9d1efb596eff4186e94052d2eda984630ec5f6c243862b078ef8ba71d57850ad3561735c507b1bf3ff3b567c213f9631375f98c0de462e35158d775c01ff1844dd0c49e31b713aee155f96d1844b90ea5d1bc569cf263c822e08e3903470a5fcc948a8712c7382815cd3b707d7ddc72b103b01ef9c2d06cfbde11df1ef3c875d04d756ea6d275f7210a2cd8212619cba17f88a0836cdae6c5f876e7e82b37bf0fd30d1b00f24f1431fceb35c2601b9fa995075cda962a0f2dfbfed4d5af8bc2d62a97009bb98b111e898af691c9f09e1f425dcfd85d221dde5460ef395c67cfb815c993f2f184a9f3f8f809cb88f64f19489d0bad2e5b74e95b5885209d4123ca667fb3959d0c99bbe41615c8eb141dc3dd2d646131c0dc523fcb16b42b76081a0d5fa3c59567a859e422ef38fe9a102477ac899f0e04ab02c3a41569b9afb50a885ae81d26586b0399a10dd9534043c59a2d4c629b0336e69f009e9d2d5cdc72f3344ae048f32927f35267de420808822c891c26771fe941d72c4cc5406f81d2dccd4f05af7ef6494db39d150de49708bbece206bddc3a562b3b718f071818cbb9d6a5af23fb035a3bc252e0f006a14d243858eba79d6986ed7a51799389fbbc5f3a35c6223c13e83acdee58fb9434f0902b90775d748c08b149c58606fd148995126675dfaf258369f34f90145391076650fbb16c5933456d23f25172b96e0cec0aadf8705030c2df878c832438de51f8cdf64c91480d1316e7b4db5785d2c5281725cebf4e1386b1da111862f4d8959a157eeb0c04b6ed2958fa1b25ddc5e727d4fb6a629cc8cde6fea47abe6733a3268739aee518b77b08375eae810ff7d4c24c3fc59a50fd58a99569aeaba38ea036d31e417ad6c765019726ec9bd042229d55681b4df6d88c4a532e5fa36955fe07bdd21024aa4b8e9faafda19f32527bfb2753adccd8383c750351a581f0d14edb56d6333082c975d2abcc79f4e020aa271850d8aa94e7fc15a9c1f3b0972474fe7d2304d057c43102bd1aa139a252a4259ca53cc40a34763fe9fca1d866bc077a29189a22c6447b0a529994c2065bf9ad7106c2afd50af6815770c6ce016295cb0116361b63c5cb6314768cd1cb77cfaa35e0049617ca0a667b46ab6ffd979cbbb882fac4cf0ebb5d1d21fe1106d89936992d1587ddc55cde366f1da92b6daa751002f9de3a1c07bd2bf302db4d60dca5f09addcd481583f0b3bd9dc4a1d4e94369004f232688357de1d52282f6054fddfa25a415a24ee7d12fc4c1e0c6c7af4221ab7193577436c784458897e5ca22d3057c5f761c67a35cbfd22ef5e20c427cbeddfbc6bfe93d3c923d50bf5544dddfcbc19e33db672f6c0360d71f721f2126fa903e25217b5d0f12dc58ea3f560b279412b4313cdb72e94cea716b1ee5a954d289fdd9d2b658f1"}, + {"000000000000000000000000000000000000000000000000000000000000000f", "008f85222f0a8177517b716351943994c6f586e0fa0fc66377010f7806ea2807bcb4f5c1764c833c12dc0d688b9a0b3beedde858e6317966e91692e0fcf971377d2414749472136ceea64fb93bcfbb689d5e96a500c146659345f881173581e131adb3a8d4e1945b84032b994b9885d71e642883a3bca6a0a5e47b5fac7408509ecf6a7710fdcd4a24788453df8a2e49f40b46369cbab31c22cb9d8223c53c9a731a9a8cafdb3e5200e86ef703345e5fd3cb52476072573286a8fd282d07fe4929024bcfb58952112558c55f5850092f78161aa6aa834954295904f333010fdf28412c099a84a14a3c3ad97ba16a8d43ceb573177af8e77c007c7e42016d35d757430afd68b0c6bf3cfde3d23f2032d37933cca5c22722f0176d6d79a30bd5e66ab4767d77690c3a87ea2f453fef8059e44c46c47bb2ce12168f9014368d35e057d2dad49dc4512a7b66169ad3bfa84c0266ae5d38cbf7b0af2631a22c1a1d148faf093f580a782e8d63aa5069e2f3131b8729ce967d329b8e2123392567201233b2a78702db646d0e46366c762fa72955fd57e1d3206f0119d5d97545cdc289b2962003028bcaca94c5988a795c932f8265d6222ad9d6f82d16b81789679b875b378822bf2d60f8e18c8df2c9b91a92391b8759ac8b204075fd7eb3de2603b9bf13ec212d850a5c91324fbfe8f2a519a0bf3a77eb7c8e3903d5b1d04942a2368752a2a0b8b54eb726de3fe4f82f92a2e564b05dedf25713bf202eb1213ebed681c8150b5a7a084fa1c4f2fec277d4d1fd3163873fa39e33a7cbb7ac1c5411ad068a18dd5fe612b2ab5ff16a0cd7afc8c00715e1686e80e5d314b57612823bf5242a67fba3e4d7bf53b548332f1747e1eac997fecea729e5076e79d1057897c4b4ed1c778ee352917a9f352d1b8e316f7574b7c3d922d281cc35313e44d1f69d0396dbab9c92eb411f880313b1d85fb59cb7ffb0e536252d76a7dc7de1dc8935c7185eb09b0b48b97ac22e4b2e95ec165474c936b5c189fdab4ae45ff9057b35c2f7077163af47697716c5165d4499dfa998ee46054ef0c5fb175a69e50873b451454a371b54ffa6841001ab4c466b8cb38869f20cf1370e9982c49fb7f6221d65b1f6e42581a3cf7295b418eb40aecf77238031c287f2a20d38b9eacbd4e7cc62b5c5a10fb9e6ca0c072964841c5b8357e2b508802f808e1f76bfccd621b55b62fb4a0ffaa9dc46d4a24dd035f0f0b52b550d4c9a09eb0d1a7c869e05a921d4b6638d76bfdb5d2b707ae2ac0c56abbf8a94ac9ebd091b0ccc7f292114e32f3f8ed45d51a79b89558bd9d3fb45035c3b7f5c1ced97f262e5219499b9e3f7f8436af7df39a4ed1da362249e07a93a451e230dea9e89b57666b35f5d243d9e230a0e730d446112c6b4a1dced3d627e3e8e072047edb0671c7da30f325e69f97b19e7a9bb819622c83d4d0be39c5137a8a387b3b29bca9ab17e8721107628b29eae163f930a42eee1ad655a936618aded1633a5fed853d957a2c2545360f0994b1210b8d5a10c99527eff96dc3d521b97f636478fbb61d8bb69c35aa3e670662f1b9bbe7da6f7b6bcfe7e21509bb5ea1d4ffc3ca0c7a21e4adb68d50dc9a7d715825f545a1ddd34e2752ff791fcd0c6971c5d51d23919b684be08276f13f00ffa873790d249897b021651155f07fc37353383e1e5f3a9b15a953ee6be307aa344fe190e12991f0037a16605abfba57dda676ed2399672b51580458cfa6cad8dfddaeed8dcc2ede672d82e9cc7181ac5361508a1e5b9c872e2dd467fca391e39f6f0a01f1721e99d9e556d896b635d8632d760e2f078392f377b62c4be5f7819d45db501b37bb49d89dfba39d83f824c5b2720b9a71422545492675a19cbdffdb89b"}, + {"0000000000000000000000000000000000000000000000000000000000000000", "00c6b1a88a89208c577f80d3306e8d14e40bbfe0b20e334b2a3018ce556c16d3247d99b22164e719dfcf070895990645c6a5ca60d146b5c7f52c80e02b8cec31eac4967898b52f1076c4f5c3ba5dc189a313c53a02f08ad575864c9e3323b0c6c2b4b8a8b1799d965519887d267fc78c43fe6c17e54fcffcafe1fb5f1305036acf8f85697681890b305afa233b4d90139019b529e91e12810ae6675cab65f400c7367f531f5b25f00528edf2b5d508791f84c2838f6580acb90fa6f63e07579f138749749d51b5f3497d52a771d1017a3d470e303b96260619195d4413fa77a3d0f9413fb916e247435307c227a70db6e9d4cdef47a67ed295bd2f1209b50057b1cebcaecdb2c19eaad27888a5526bf2760d86dd696a053d61fbfc913acc48f754fd091a9f663fc1da98e1e82fada08214e1fda8af7f44a0ff82fd692fd5ae7bf0b061fbba5765074a6e369839989c08028a5a229214f533a3a3a0f4b63031f998ced73ad81456f1109f866caa7fcbf152ab6b5aaebb06de492e041f23c973b5ddf1cc6bd64726e1c9b9e76b395b38306504a3da98b569dbe533ea80bd392950179d2e9d10365a83e18624d907190689675cf07e5079d369621a701609ecdb4305acd3c45eef71f18f09a2d9746721a469343f51a701830706ba1855ec6f45f43bd8de43c9eaa6eed9b239fd7ae546e7d08b8b3ba57ca4ee0341c69b884aad2094b803aa74ee635148e02a97c604fccbdecb1a800754aa4401bf4bb5b65b9ffb97db0c986b4f2be88cb1c7c59116b8dfd6264bd23d61ca2129ab14c09c31d538b4f2cdd1e810daf5e0de4eb305ee7dd8fbd23ae595f549469d6bb96ebebcbffa791d4bee182e8db69fc8a3d37fd75f3eb9f07590828e15a55eae1bccb77d063184342a527d528e119d2d9f328242306554c4ddd150254ea6719efe0376d5ee6503b44a8beecacdf195f936d753d7bc761a26d5e1166b8543d0d03ced97f51ee72541da1707521ffb50040cb7c5aacdcfd392a9a5366c41508f624c7319028917c5c7130290f9cdf3d69357b55737990a1fef91be0b688cd5e068588f90bab0d46f1c6e38364daffc982210d7314e08aa1eb275c28f325fec54a41d0a0134123bb5cc4f978fe2e96302c962a10cf11a04527e0c314417e47a9e94a1a8d1854f503199dafa065a21e4042e5d8d4b880f5bbdf1f33cd4a310cda0c7be87bd0b6826e7690dd9b7c9521237eda6b369120a4ab6810911466f4be3fb7fe0f3b36236cbaf3dd0a22eff6509422a141c16276d83ee25ab6c2d9cbb1e059c83af0719c8570edc11cda5a140a82f2834d30f599bb28b4500bc143d5ff7a3bfaf06ba836138a60a20d8221f0cda4c20776ee32be733d3d52c5edc4fb8d3bfe67b1bb1c3ed95a23261311dc42d62e4cf412844fa78820438c53bc6dc107bd770265b9dfeabee9b13d686b30c1f91933a915e571e3232eaa0c40189dd66bc9c4f048868c3df1964f3cc82f04db641f2f1997ed4a1060f07bc05e5d60a378be1f39dff9fc5a2b57df7769d04c3e329ef555b930630e37c96e8e905c170f154f12c6586c8ef6c0c4fb2086402f867975644a155e88334eb15ab12ff0057f90224eac861f6da3f2dd7bc7648a57f835b9d82d57cf4455a39f835da364a5bc47d091cb6089863248d8b8e60f9c1fcffe9ca85d03e88161e5c6eaee19a5d630f04c742f049fa6224d5def3169ac50ced191c3725c9c35c25677a264fa155755227fc5a2e3fa11e05a8b085a88732ad59e85e967df7123ba163072a0f4d5eae3462dcbfce7deb3b5828ae1b5f231db1c9bf0a803f5998b9ebca32c2f87c9438352753f806764387c289548b11b6b795f3165db49a40d8cccc7c17669f7100b57bd4ff1bfdec3cba4267"}, + {"000000000000000000000000000000000000000000000000000000000000000a", "008666ae56c04ce79db3d3085e185bcda4dc9bc65817af22485ca3647942effa0dd6f3f7ab69501d0aff137a9ca30d716925e2d03410bbf417691d63f5d2c718306d53d3da53eb42ae9c08446613df04b6be66a4094ad52a16628d8dafecf5e8793f89aa1a091bb46254ea16f77da42bd36a4e573d33e3113dd623dca20412984bc34a0e8401b85223a46976e7c5fb911c5d95250c9216425befd5eea0628eb55354dced0014b2b20e6ae74092cf4c1cdb8ef82170cc27ea0c8078c62431013c1846a630a9cc28f45f1eeb972a7d9ddb8df2145d653388a1d2b367814201b4df3db1c003b92efe2b6d1bd1dc9da6f5b49e27a3ab57e43e8df47f46d41086ffc812190c7354fc0db20f7c637bef20ffe91c4323d3a9f1d26851a43d16c554fe0adb5a205c7e4212564a87205512caca2485ac38ce937273c0b70c771453c69b3a8d0710747de3e802d6852278b4f5cce9014a123fe2dee09def03a0e54de67dedce177b102806360cf913591644f1e8863629bb3db5e226dfa9a404604a533f05d4ab0788861652b48a4ea4707697941fcd5de7aa3015a7b83aa2fbfa6d14f23d6759d25a077f3d84ab5331d994e734b2dca89fc650eb35f1a45f250db950eac1c97a2766c6edd6296e56649c76992354d3d98bd9bf8aeaae9296e9f23141ad607d80c9426352a5cd13af6f35b194db2432a97a849b3c67130495f932018d16d98cc1c9c5cc57400a80cd143da90f60dbe3abe0d0f9416462e7e3d44f7578cedeb1931a4a4dce6f1ae167f635c950c95ea68baf8f7dad9d3aa995f9e070d5f9958994debe4d274aa2ecb91d8404d643792a46ad4935a6a3cbe8fe2f4eed8cb9d65d075646d5fbac271388981585d17b97cd8bf359b092207917c02ae89551c46d439aa9aab85601da73074c43df0c3886ef20d99ca6c6385172908a3da7b8784b00d2739a1086125fe3ca32f59a6a44f1dcd61d78db2929652174ecd2ff675fa2c4009c4aad49396dadec02bc08850b41f97e344e90461bdfe3fdbd84da7ea81af437e5d589e7a1506555d58063abaa1087ff7d210799a36b4d084172b606e39e001efcad9bea1b0f8f4b66a7fbe7e7d34168b5f82004c436826b3b3f41d724d7c6079b89bb939c4942fff0dbe16e48831f30512eeae201f9548ac30ea2e6c66c75ee46ea5b3f3b791a9ea1d5c2bb2871ee6782f580d79cf548f88e099927c8038d7dd22c609498f37c0cac074956ad94b11923e871809a5197a90c4c638390bb5b3d7855b39e4e3fbf4d96e9a6632f388cd54cb9f53ffb61e4feb7231f5cf578a6d1601feb8135685dfdfd9233d2bdc62220bc0263941cc6d7b19276123445e5b2e69679707f3d26efbbad6e69b1d78779115a493c26b373def3e467fc86922bbaa167d9c436d6aa7ad2268bdcd921ed0403cc99f9d7fb33a89bd0f076debecc7411930937361fe7c4ee9c90697770e974cadfc5f73ba01e42c20cdcf312baa08cebb40ef1046bc174a9421737f5f141e4525302ba94a5fde2d6f83a628786c8e19a20e5046541bbc7ad2bcf9635327878fd440dc62b3d4deb305f3a5175d99e2f737fe89da4fd39e2b41afe4a781d06010f3c1228439e05f41fed6173c5b7113be8d4221f63c17ba2d0c1e6fb36cf73f3639a1f387b3d8c07d87bb2999d57372389174f7d6c59b6e843dcb9721b4553cc6809f9fb4c5324e8b435e31b0d6afae1c81c5e8190902107c582d0f38e243647e5612c19f44e32a9fb187ad6c12958634362e5573519ceab39115007d9c9a19230d36dfcbd4238c6245fe1fee15fc1001b675106679ab361cb7691fbb81cd4e8b663b2f0a011d735163746d36b9e6e4427a0bd36a10a4e5aaebb24d901ca48e80fb17e01fa77a6fd606bc721ffc215"}, + {"0000000000000000000000000000000000000000000000000000000000000001", "00f48ca73716345f177ba8517fcbbfa282b6b88a3a0969e90515185833cb7cb403bd49c301534e50cf5c01da94d1038cadf570b534b3e1bc588391a95f2f701132ffc6629dbc7d608c1133ee4162c1ba825c572507e6f14eea22905d9bd0d5317a3965f362a4de3e6b09bdd25d1783b4146f3e921d0c6127a9a524cf3eb1112a7de0940f4738cfdee2acaf7ffd1f450e7eddbd3c0f2a6e72ab459b5a91a571f0d23e258d9a4fbea004aac2f501c62178a94dd0b0c5687974ed66a84c2f0a0d558036c55c3c4428115627dabd84c60308986f088d38d6d746cb174c92544a447cf3699931791c340cb3c52c60ddb00b3389614ef8f5bb52bf9f594997082bccb64c1314cd971ef47f67e079896149b88d3d0ba715ec1969f9e3f2454161a410f974dafe750c1f14518a74bfe0219f5ad3d17d05c3f9bc797a39506b1cbcf6d5908a216bc10228e6a1e4b8db04f9fe147d0248cebb4349da05ad55c1216e6952c6a688dec32317a368ed212fd4cfe1b2630587987499a301d947920375acb86acbaaa59ff57510d957efad57b56ba6bb19438a50c7a74edd733d32ed9daeaa4b0a5b387e261631e24912e9a551c25516f098f7336f52abbc864421fc02a1eba05a83b1397b4cd0e205f2dd22788b371e23a48b9b331077ea6684b713c209499dc13ba7d445a142604f2a6689ac1a5547dcb9696d99b1930743062a5b74c0683625b6ab731478ab13d976d91a5bbf14b3339c8e533996d3436287fead52922ec33ddd8a0ec09568d916019be61ec17c044cf9e99eabd4ad5f222776a1ab1cbc07f9a118baecf0be236aedddf8820677bd19e9cee206ceb6b6592069ca49abafeef5e910726af92f6dbed3834dc137989dec61890c0ff11e15f674a4e2d2d019a3d81284749a72320d7c5da47b1d1e5d9b2c4f355b91f2b696fdc5bb9de1f23daf290108ee042ba83a5b7ff852de764a5ea1b497d9478d094cd5d54d540962a832f606e8d3258f99b6de241b03a43b6ca21bf68fca3e50b88a2748509fca66369510a099da7372f547fc9be69ed9c6968b7556dd08fd07d55ddd99a1d9333fb39239d7eb47ba316d94911e2c9b6d56c3e025374380f73a6ef63f4379ef3f24880a2c47a875947e12dc77a77c02dd26ce732c56928a18ca09c0f8cb3be759e664831b26917759b87c1ec303f41868453d3db1ef41d4150e6e031e32729c69424518cda366e5f003301d35c8aa7d3e41b76d3216270462dd7f10c39508b851804b27fccbf062e948cb043231f7ccb291be2339d716033658d66e145fd49481070293b70747e5c84128f073f604f83da06a7d0fc52902979cfbf00895a74549c43ffadb06f259d7f0c6156e4c940dd519e90a3856149d5b88e9b87a379a304da0874e335594f35ef5392de5e43b3f0972b8b35303b7c553360f44a28b85987c9df75382a291d783380c5f4ef9af5cd2cdefdeb61e72c2c6ceb4ab979afc03edc43b496047a97af512cbe6f7f0de0475fce6310831e61bea84be090ea651feafc962599a7d2fc60e068cce31bc3090abbd4eb5cf65ca278a660d36f1342683a959d24a03fedfc8b86948f3d1be216654cbbb06edd174f242ea92b3cda34cbfa083990443cb36045d567607df5fc0fd9ec356d45eebf00b6b8f5ea7410677c7dcad4a2189d3f92256999e9cc6551ed446dd3a52e30d925bc68fd435e4f69f3be39f279ffb54c70a641bd85666a48f591c20c296dce721ed581244e715467ac131ee5c977668798703756b16d07cdba9c00aad64bd55a06fed9b28b0fad7924c352ac2d582f311797d80254aabdce991316028e3158641f7d76d69149f3a1cbad0f24af28aba27daed7027d20b9fc64c2ea0e52b2be2054b146c860302be39b58f227c923c"}, + {"0000000000000000000000000000000000000000000000000000000000000010", "00333f1e90c31543d056c279b4fb5a78c7511484ad30d4643ca2cc58b527a0d376074b2703450c7d64da01ff2f247567a9dd5230e3d352e9a0bdbe453b55270b8518f1928ea1dce3f30105e5653aab145e9f619b08361e4373847d9bf8d3315ce6eac5c0da06dd7e4e12bfea98c7a20fd969e3e14707d0be9a6359ff8a060862cfb60263acb5aa6a5505f2413fa679095f0c331623aa2d4bd72342d8b082d0742cfde563230cf10f17264e9eb95faacf584ff5998c641dbd78011cb01319852fb656552a58b3f674c18a414e5560b2b2d4fc1751eb5613cfe89ad37893758deb75b72d771d177a240cff727129b75d4e69361b46e2d261ff751ee13020c98adea7372543d1616721d7c8b3aeea12f89a364831d31d9fed9881a85e452c094c5e6d73845194df4dc5e6909355a2f7ac6737646ac4fd13f2aebfac89823b261156bdd1ebf05b185abfcc817ac1753fb80f005725ae2f8d077cdf15b0cf50d8921b12d1391b5c36c593c9cd15f6cd27a495a472e3bdf5bf9a3dfb1101ea7f28fa16aea0d8bd5645a45f19ba1048dc3c8e112f41b8a8c55abcedd8c1916e6d5c137869fe9e16097c11f8d86346cfdca584743f38deae0c33bc736f137537bff74fed4548d461dd3592e78cabd1069cd52ec93a649a9f7e49f260553496c165be459bb856133dd1bdb4f22bdccfc534255a9975967afa2e998e1b029c48afa8c25308d19bc1b3bb42435a36fcdbe6031c9f94294c75fb4fc05033332b6df895935e1607b62816bfeb991a7875ec9fe471f06d756190b45a713b2896abb67c6d3df9d9154546436ef10989ddec98162cbb04e72cf897a5d96ba4c0b36bf25e26c737096e36d945f55ff1c0ffe1c2f50d2d31718a89b7b8c8683db0dbd17bde93edad78b503ade82112a2eadeb3fa49cad7a7282691199f7d171e3e39bb29f4b0716367027aa9402ba59037cf6e604be62048c87a112401c70d885b7a5096d98d9a38c25dff48f6e2674d9f2af40a155a631d59bd593ebdf83a9efa2c229ac976a3ec25f6227968cc076f3377c606c45ffe42c206fb85ac0370c5791190ed98a68051ca1d1fec994313dfe3b2221fabfbfe5d2a1f44201b59fd7a909b84fb1ddceb0c0361fad596d9a39aaab6eb89f1a809ed725861580f1ed410d4c7233d4137d185207edab17ffab92859050850921383a7ddabedf1b897fd03ce9f6d17b3d5255047f89626db49b0dfe9e4757f0d66fea69c564c0b00d440fb179c29a7f867ed29e80262c9c4bb0fb22ae2a7fb3e5c437fe943935cdc33b9c9011069d9ea0a4553d44cc438e1a1f363c4f2df30623af41ecebf1779f99bfcd79fabfb64d46706bdce5e1c5f96aa30114bec90575ab1dde53252c4346f82ca3d497b88b715504766ba0ec36db9a934bdae69cbce57cad55ece052c9d3301c4a8643b9f3067bccba300bc59c686bd15048426e1d173b0ef7bf5da65670139ce12391aac05fd22d39a1f255b122af0a64bbbd5ebc23afe755d06cabc7fbb1a09cb590342c85af404926dc119ed451089bd44b8dfad2fd992b15206a2bbced7bd7cf5571862371cb8e663b9f10b431419c189f279fafdddae25b855304a8cb3ce7a3625b16ece469a1cc539188338c8925ac48e9658ff864915dbf70d4ee8a578f2a615fca6fb9f07885162720457e65ab97d16f5362ca448ad970e80b7f7edfeacc79b06c7bd6650adfdaf1f1ff49b6c484eea2be071343cebc8ce027e79fa9c2b3581e4f5b657c77cf494792fd1fa8fee6fecbdc99b2f225d8e4f0c32b526482485686531259d3093a42337d0afe9dc9786f18ff703a413a8a70359313cb27e3323147a6e0d6dbd3a561867e0c93ae2468eb48409517257f17218ef8d4439f9731d58f7866a63b7a688"}, + {"0000000000000000000000000000000000000000000000000000000000000015", "010570a8b3c77a7f88fd653f90aec919f098343fd55cd48f0f56fc814be970db12d768d507c0d39ffe6e021e483e248543f6ba9d434e61b9bd2164e24e8aa308b7d88235429dadcb2c518769d92e31be2a58bde201a51dfd34842222661a25630f5e1a0990a0b40c6901d3ba8b6f112c2e984904254adc91c9c7727f87d005cdff01b5cd68c1f76a8292caae8164eccf31fe4a1c6414dcae730e01a416d92b69ec98d26462948e980279a7352990f8bfcdaf1776926cea8acdfa58a2331b2c43258037151dd6a392b912a9416b69667ebc093610856b74175c1581d58928665e908a950114ef7c5cfb6cca92a2ba957a68e5eecfdfe2e33a3cdf240815c70ac4506eafbfe5ac325f89380127afa65ed4dd2b7f4612aba61e5b508767ff43ff9b9349b95aca521d6d57df59755973fd2033ad8fd6f5b5bf7a548e1669139e50f223248de4eb08492fca6eb6b9be9b19360108d5d0624da616b189e530567d99b1704095701e3da7aa036b15ba1350598511323408316bb5784c19031e2d81e572aeabc3d580cf9aee56a8f87607e8e2056e9ef2739ae98be514b4c82bcdd5a65093b3de7402c4f23b1f2245d9d07b05db5d3fa8f9cb6e8f263025b6d179e0d6140fdcc564389836e65e060dd85fc109b9450730d65dcebe5c446dc77c3f11e437bbb382246d629741d7de03cf5865bae16fa801ce7ff796a60d645edd72882c00ac349a7f9ae4bf9b6f6b5c26dd492673690754ca37256ff49bab3b42423f87fe3dfb1021bfc433b7b535f03136f91057a01616c77aad073bedea0b11646dd389c08a933d76072762d1ff641d0e69c55f8a4a68f692c013cecdae063b84269e58ca309de9da6acd538950f7d32647f4b0757247f06c7d1b58b9b0d1ce868194631568fbdb7006449bfa511b2198b6269f32b69bb38a463c3e446f0724b01c7c380186e1ab33d195bbe6b861442bc580f228971d03d124cdb24fc8302275a3b0f2632eeb28c5dc98b6fe7d01d51e3944e94ebdd8c36bbe2bde0313813ffc5a6b318915d169d1a5549f39b327535852690dbcf5cd2c0e4bb9068686ae89d814112620b327e0bd3f8e4b0a0f2c7249951ece69be201613586a726745acdf219e22463d7992984710c7d618924bcf9e5ab894dd00ad28067406c9cb91df33e91374b0ab5121f9a01789790e667ce09c0439f3377c64f6a26ec425e37356a6bd24f64db91a2a76b580448576b571b09b2a26bc0d14165111972315c7d152a083f7737286891e38b9aa7b220fe7a65112501a9f3ee29e4622c48bbcc3bf5064101838c9df5cabc8f8da918547f384e58cf7d2288e1415d2e2949377b9f37fa546f3d2045b1e0e3ff4f9129f66be5989860e6cc1220690e5aa62a94f58fdec370ca4ef60d0ec211a3e25abacba54523ec19fe6d301a971b5171491dd0254d7ec2ec138e644aefbf46d133b79ab0426924d9cfc79b56d5e77f7cc28ff47c71533040805ca643a5ab08424cd2d501141b577139b2a8b2c615c559ea6fa847a9ac8778582bba81e30ef0381a3977ca671d7a28920a6d3b821ac5b290a54420c7c334f9752104b33a5835315754689e2a851ba2b067b1bae1de9588ffdfa034da646ed8636e69678020a71b710ceb4f3c5ee86d189d8388674cd3f0b08560f7fca8a505ccf41e5c6d444dccbd515bb2b5d5c5b16a2eee3c9c6acfd7e66f2ad1f51d650ef60d311cc2013050ed892ff11f543b6596070b2d1a0fcd2d491342807355754d15128e8456f0cc5ccc96da0ef7f130fdc623aa393ca4fe4b086925f463856cfcb1e91d2138d5e945309c85686b4a477a77e52226287faf7311f5f4971e2081ade6eca7337092882e13acfaabab55b383ae335662005ee6ab5e95165fe5265fdd89322"}, + {"000000000000000000000000000000000000000000000000000000000000000e", "007087bcb52115f3833f40ddc74d5eb8692f4e3eb84bb5a7c4cb99b98efcbc8643bbf7035f461ebe42fa0b48dae3c59507ef0ca8f457402b74c65dd554b3e11b2bc0f44f8d7f70cddf490e706b422266c99a099808da81c3154f8216888f52a3a972424277f5bfd36d28c5898c6558fdd0f5e2f652ea7e7135f47b5a8b851889b1139ee31371661f86e5ca471da1e5d950c24a502af4bb2960ba251715489d44cfe9ce5d8176733001c06f3cd44fe544e6a64618e5fff79a3a983d317a1f6aba8b41d40bb50597c2acb4c197a651cd984110240381f09425817b5a3bb250864da83635d7bdee21409d4cc1c123b4314c50a62f98719687a01ebe0c6e020a1575e4ca0baf1f8845f5e2ef71ee08d759112b38c21b357852efd93e4cf3bdf66fbb352bea30940a197c5b7ca3a75ccbc58f4414eb35a33d9441d972432d347b33512564a78534e77c3fd5b8d5f33c9296d602cfd3d88153ccf6e67ca17175f4a6c9eb3e55640f09280df50146830af0b4a5fcfc66ce8dc1969b74b10b434301b495b884bbe11387f16326d23a1872a8cb122565271f0add5e90e0ead151e07da2fe2afa3ec20f0c8236b01d0da7aa7ab1e8c0ef025a5b50fc7ce136086f1b061204a6d543f76eade7c81256a79c821a29ed3c84e2e5aa9b6a3a382aabf31767d1703f8867325ae576445ea8f5c5ac65ec66de2dc279751ae6f702e05abe3d57dae9022af220772ca846e3a43a435939d08dd2d10f9ea7a9a319326fec2b3f3b085d84b3065245d7ddd7695f1edfc43d98b2c2dd390bb6427b10efd6c22dd21abb683f45b93cdf3061da7016980109269a6a294d6f25e7d7a5a183b93a53d64d1f774b23741f7e956b9de1eeb7e31926a50c911ef670c4f60ef71a061d29901b8fa9a10212d429390486cfce1227cb7b4b33ecba91bcafb301a36d92751729beae4b0303bbb4e1837c272729283b0ddca1be914f9aed780405bb44fd88808ade6bd4736664ec69f1f76fd517036562fc820894ee56d7037676571faa0d8f5e36f92280618e709c4bbf4e7814b1b1387bf1afe01e9a6e08a07fb0103631b5db4b8203f5c2967746df3af6bf1f42d236ffd467bd315f771b5fce0575fa00fb90200e29ecc77d51d82e9684a2521f96d818a4276a19e611e2e670d191ac057db7d23e1fbb552d9ed01d63a9053031b88f5171b9304ed0f5810a53367cc8d66a032bccc2ea54a1f9b391b623197ecd01060ccef20afd0adfc2e2c50517aeb393f8c9ce632176adee7731ec13ca43b1b45808e6e19ee7e7d2f613d38db69c8b130823041d8c4d2901f4960300e9c4725e1dc297037230f029f7e9ece985b0f543963c6d819e522814fec42c31b4895363f0dbb8b40a683a5e9c0b03d85b16fe353f2d710e98ee28e2e5e7f1d346455372a89ca775032df7a2f54c713e9ce3221091671110a28be6f64e09c38e3f03878bba758a429a8b5d15b2b119f5deea0d2d698157955a70c936a4dab0b25b89a32d7ea9b9103f1e67f9b1ef71a3644221f021336d675f9627eb147fec996f5c1c13753026e61a6c4d0aa65e9daf6e32fc7e2660cf2307ddbc645c17dffecd2c49b1e4ee160285a4d150e4eab5e2e5dddafb89563ce0562662226abd0d72d071b7f877f4e3c1780c1a67281fb0460bfa93e51dddfda0fd1053c599ce679a07c1728c3b4807b24d16dcc16d6c85889641fe8f2336cabe34142c590220f82a8715caf73600f3f3f452739fbfc57b4766456c801c31f79a6dd75042dee3a730133eb92616ea89f0a64734479d8bb2801d557638b7db7915d92ce18b484f8bca4dcdac14e59a4f79ffbc3cbfc5311c46128a395d1ab1739862618b76d585b8f8cf670623b1bcac63b15b8dc317841476bce7a5270e89f5c1"}, + {"000000000000000000000000000000000000000000000000000000000000000b", "01c5c04fc4cf1132a804d2afabe6d5f9d90a1590061b93fa8dcb4e45c148d0768ba646a181c737fb7fc11a493d3ba2a07be3bddae1f0e94017823ede38fb1025b27a5c3cea448db26093c34ccbaaa18a21b830db073a80ffe05530dcde8a2369c3e236dd37ba7c8598339a5cd2f830c41bcf59440354ee4599a7a4b2fa790b39d662dec5089ad403948e204890fdd38fd4f7f61281b3205616b72b2a86aa6ea174a0271f715a4cac0ca64d80f998c5a52bbbf23c07cee85566b0f4548146ec94e4a623aeb1d67e548e80cb279ea2347b906213083794f6ae914d80208196bbb23156d58dde461231640584d6261f418f1cb5b65c429369e0940f2d920f25d9af9f29dc63b123325df5615d70b06d6b006b16b479742f17c389e102825905612cb66e92d646b3185deb6629988751d56a778e50db3e1a3a731ebf9630b75477298de2e11656a3e3a5fed2c1961857003d0441d51ff056718ad13d559ace383f521c61f1e0e10c500432aa963ceb83c4f4feb3db669f5bdbdfed450e616d52f0a99bbb8fb192dc17e154d1f71ddd7667442a7b5ad6d584e5b2f4773bc2c3ddde2e3ff6f8141600fe08844a99706da396aeb263580afad23c0460393595dda40ea1cda479b3fd354062dde3f47cfb881c405a8d2564673b96ae9774896cbffdf3f6323f6f5786841fbd248961a0bca5ca5560396270ae177a4905b7bf50a59ff8f129890106ba6855ad4d5a6e5db8073ddd3ce50e2665cda4710788c8e3995750f93ffe4449d358db9fc94bb4b336fe937269e256dc3d9dde59b1d4c863e47001c62a45a8b162a87e1f81df2b280fb2fb6ef8cb249df9ae8b2c23696eeaefbddcca521b30db42884b71d8e8e8940ffbddf5425eb45fb7e1123b07718be33515401c02fd0bcf000d1553b901b1219c6adac8d3600dc580526658ad65a4a7f8ddbc740352bbc7fbc423ef2d7bf1621d5df428c7871461b930f019ebc92c3c17751d64a2df6e957d9608d20a0924cc51f495d586ffaa9155d538dcc8c24af0956f8e3fdd47fc97535276fbf239f2756826d31909bdb2820da815381e4780231de3f0ebef217fb90b9b33bd061ec8bf2b5a8c9b5ced7544e5b0cfe376aa0d15f4a12045cd476b55acab88f602e2c552d271a306f33ead265e3eb3fd563c4ac85062f3e79acb5cf681f1a03208d21cf77286de6ab996a24dc1cebf91278cbcade92a65c9b11f1c43ab12d9e3c587299ed34b69bc05630d28eda7a550b938b712e1e587f093d4c716a89c455105c7de06dacf9f6dc8453ca4f4a1f9bad43db358184266bfd54d96a7e82762e8286325821b285ecf9c2e2386bdf15ccdd361a7762bba7285035ebc5f5e712311bfa664162a19170c16fca75e415dc1adee2570241fa448f81aedd72b78c36caef855ea0034b18acb05bd2875064acc68b639937ecb35431f2cbefc3b592f34a4de81637221f46295ab8cd7626d9ef77f528423829c67b7915d21fde6f610526450c63f04163eb5513e2b51b72bf4c18bf728bf7b5ff6daf4e1d86b890f8ffe5948d0b490dcbf4a2e8360ad56f9e5d94f6b82af0ee24d7475ebe989593fd9dbed7b81f0bc6d721493a7a33a564a68f90514ceabee2835c3e770386c1b04be023c06d833b75ab2a10ac77d924b6eb7a8f506e04d79d1f44335ff52f1ce06d2dc033519fc3a5d297d2eb2a1156d70f326a8447bc740de7080199df60b4611cb4e511749b7f530f1b84370b64e72d916f341eb9acefd94a510a9d2e9c7bad7b896b4119805a112aa644a5c0af8e663af9153cc44b5b6f15b9d76e45eae0da95f398223ec82678ffc655172827f94eec038c66752db5f61e56008a43e572fa91de4799e62075ced9fe37d2039bf8c89a84378fac37f363cffa2e8"}, + {"0000000000000000000000000000000000000000000000000000000000000001", "0014f0ece6e362455de0a39d79f74a891df9af877b16188b2d296065b16fded57006d76112807a5609ce0398b2bcc301e3730b0d162abdccbc3a9be8fed6be0d73e97cfd060757ab6cf3a51d6ef97e47c4f8c670016e4a000ec76810b667e23c73c7e151b57cff351b02ae4a0b461b64b18aeab389f53a549710b73dd96b036662330ee4b567bedd3783d8ec823a6b3e9bd824229fed332b1f888565ce028505e73a8a324e93fcb007e6cdcfe78f3ce692771a2799f148e3139dbd42c73deb8c37929d15470c05960d87d9d492b0d2b99ec70c1b4b2180dabed5c150b47527b25e261a3639c2a45c265c355ca5045bf310d6c856368d5e5e963a5c5e0c4d0cbc2a08216bcdc24166c3ae4728cfc4bcc01c59344c1d8aea513b741d55aab8b1be82190b354ee80d1700b3ca919733f82124e16b60f3ae36b03bb1ba1a67bbffc8983ab35df2433f28f36c494dbd53bb670094ae65f9743d4fc4996102835da41a39d0de1f124af0caf0c5303f29bcb939168bc938d6a656fdb64d0a4394c4921ba46f492b11d0d9f4c91e142ef516601808cf7f6c2547256a34424f181d33b6cb10fc3754075e3f1df4d4711f7d66c1cb0e1dd27d795251886b219a0ac683a193c7b58233e8cf2c4fcef5733bda2b29890bbc52580262eff5867c2ed4261dcd8af90e2f3bbf1c49ddd57c09bdc125da89e1db423cc9370d4b02fc0222efa74e7b4f2d23e117ef2425a9041e43543a8eb46b4f907fd19d145667f9c2aefe20bcf96f950558a3ecd760011bf844647640fa13099fc033853610f5c9c709f1b8b1ec62552f37e9bce179e7fe0af3138b92caea1f5957c41952e2f77f44b3dd821f88f817984b7c6dd0af81c747c3009f6ad8ecd19e874b08165dccbec0c90545103d337b35553e01dba90fffe81f4e1123ad4c792767cda348f6e26ebe77729fd2d500768734b59642e1de22c186b598be97bc7f3de9513036437b494db41b3bdce8cb38de749a64d61b1ecc064bc89b54c77e7672c744e2e4b5fb25e0e89dbcdb518f233140f9245dd021a5df09b784f5c8697644f70b92e5066d30180b88afa537aec17429ab192e76c14c58ec93c769ea97b6d868728cdd44668d2c5b2e6c1af4ceddd62ec3d9e329447a9a3919834ffcfd2a30353e2ebc414fc9ccfabe2445bd5647d236055ee0a4014167d17600aa2243c0f060e3ebba6cdb425857f40600f6a74183fd25e8e701ac9255eae4a164196b9909e2ec94b250baa309c7e30be4201464f6925c74070f05f5615b44880ee7daa1ad8a6a3ded93c89aef5a09fb5da27426a327e0e420abbea18969c6f58f01720e01d07b510949ea7974817432455710e9e66d6f2b1777027a7f6082e9276a467383cd755e57dbbdb17d249787210876f447bc10057a6bdd2051b40d4f3cf101efa91dc6dd943993ceb19e3553feb12b9a95ed7615021eca63ca9cc0f1f213e9dac85fd6e1967ffc0b056f7bcfb485cbdb0688354d913eeff98c56925af0250f655e67495742ee24c2778a583ad1a1be18a208026962239ea8e287d72ac1d8486bd6dcf51c7f77a80706734e572923e9c183b3e512f76e41dc3ef7675f06eb077619d9900bd24270e08ae2c1e3d9085ee6131a55c42d3f916bfbd24d368c68d5002b4b4a9d454307957a5745a541dbd09cf5aebe437072ae6177a34a195a06874c0f170f004a33dfd6fb19857046bad37f0ab3a588c95db2934f0fc0e59c7273a10ccccc093523120189d7f76c2df13ec2a52deaa4b26ca6bf877b09e5679eba89bbe5051b178625d42f569d629bb0aa342a3369eb5922b4dc3fc54ab3bdd81b6fd95cb6441416e60c88547b177eaff29ec42a3f5b26b53bcdd125d2f20e4faa602b8c4dea4da072b88f30d77b5bc8"}, + {"0000000000000000000000000000000000000000000000000000000000000005", "0012ff803deee80dfcaa92f0b5345608fd6fac5d0f067cd5a691057d46a5a47170c08ca571fec0b64335045a1c92780f2088cfd2113df6b8466ef48679a0df0ddef88fc0882b71d429216c210ff9e4776f967e1f07038f232c070b8eb541389f8df83a1faa3efeb78a2f3f628cd2a47fe1bfedc38977d741951d1ff3423107d5a8dbe50f96d10968d23e50b6a51246067aac9a20d3dadaaee16e4bd9efe38859df1bd11d3bd357bc072397d6a2dabfc3a3d040e4ac769082b2953a21b918a3c956b50970ca77e7c3ee1df0f049d1f53d74cc10b424f0df1514859fbff3f76b2f8bcdac037fff9a156d3ff0cf659a716fc7f33175fd4bf51fd30bf8c50c9f2fdcd9c78b4f0998f42226b77755f06e1e69d81cad7c7c9b9ca3ab6f0b67ebe173008391b3decf4817815e0926665c33e77ed17996978239601c3bda4f2ccce4a6b4580e458f9794262059c636726ed3fc700317cd6d921892c73ea30847bec7e41e53a4bc5bde53aa65181addb207ca1437a3f6731cb6ee55fd72470bb082db0e0386e30b29734e715b4fe35bdc5e42581a19e1a842cd875befd11262163e2509b615b0641a045808b4c2cc673ca47903c65038ca0d5db4332e8f31d8e654abaa0bf1cbcf1a95e76bd34790d3fdcb88185f81beb6580a87468db2d133daefb57c17f42ae22d2c43eb3a260e055a3e34819c45cd057d6cde27fc09e0da0b06e0ae79c39c23832ed3fde2ef753ceb982920a50c1da48735f9da0598157e2706315af4c0ec0da2387c78dd32e3022ad125c67e27193e511c5773370b974cfc9e00ed2b24c375e1ac4842d022983b2f1489ead8bd7a9ddbe305231f1def0a4a64d916e93741a29c5d4e232adbada96771b1766cd271725affa116486914be5807c7d1b603a6ce68e4d5249d1cd38633e95661c18d70217fe2c3562f52021f37873d8353009c7387559e96636e91b4a07bedae75cbb05c89133a7294b7320ef6275d934472c9ef6cb66a7d954d242bfe9da6df7b3bf5e5f654160f49c1ef1a9c1b2c3042ff522ad6e58ce37455e58920e2efe596c6fc7d140793ba97d53a88c7f8a53672a1d16c43a2c59ff6431c8e88f1a0dd22530af5c20a66779014d69a59d62230e1e2d3079af6d3c7cc59a63ad7ae9366121bcd3e5993d78b22176fb57f0bb8eabe546abfbc119fb54e01a5a708e50464c5d3a9f0d20bc29f815cb57ef8273f83da54d09cdda316654429462f9a2214a11f19db16d4a4052305eb98c779f7bdfc695c56a5e33c09062382158f408b2a46f9fdb7dd84ca024e5ecbf6bb7a08925b569e8f03611911245cf26d9309c9ec1183432f6e0c2f0f9850515bd5e9c4e74fc0e2734799f8a80f66b302a330a273da71e103619064cdd9b07e627d13c93ad77cface39da3a22039e12aeca3886b8c3960122cd9b84cdd3df390c55b2f8cfa95a39f4f8937a2987d9b889a06cc1115642bed17fcf25b79ad92434104f6751d3f69171e183c5bf71e97ae5840451d93510521eedca53457b23457143ab458edb5763de41db1678d106bdfd9987f7e683376058667506550d301c1bc811db3ccb5fc1fcb1e22703e3db5eb9ff7ab943515c43b766ae3bf7c01c984f4cee2a3255705b694954134db59ca537b3a98217d15275dc6203b83269fd02aa3ba9d7984f2d25368422955a1cb5d1793e23f12002cb09a75137eebb4346ea3de0f0e1e1819489f20552e2602418090ce73a80fe77990d81244b50b03e100065bd3d99b603d8e384f21673fb4540796a6e2e062c5f1e148ca1dfeeed75c9f261224a029db20c7e19a1772dccc8a116918f2243e71378717300fc1e160fe2a08ab14c2a5e6f84c3bbc124d7c0f3673dda9c341fa427335179bcff0dd45148a8ff591832906447"}, + {"000000000000000000000000000000000000000000000000000000000000019c", "0044a6c2c7e036d77992e156fac954cf173818c6a7231e3de5cf893397c5f1944b7db3b8d62c6e9ebb4a173dd7e335b0eba3c5bb32708cd0d6d1a7729a1aa41b2624d24c1b543d00e19467abe4ae451fa4fed03701aa6d9aa4920b9b4ff320d82573fbbfd67ddfd10145ac57c86fd1b1131d2829f6f67eece783265d676d037f1ca3224e62c55f18e14df4ea250d1c0a78d8b329a39c3325582755d38f557df253dd6a825776bb35042f15da17e070af615115a58335f76789a65e5d8139afef952195d3ead846a725a66cd2ae2b8afb91eb0917a555f42e739ba74de1d009a4897c78dbdfdb110d8427635f89f122c11c858218cecd91ad951918b4078d492826e1eda33482911c21d67e51923a8ef32312cf4a514af8e54be258f2a4f7bdc90e100c380ffb0ac36c91ff2429a94500f577614189ae7f0436aa8339c9dac09657b60341bbd886de496a96c7205aefd100983a8d1a04c90edcaa38ae2b7d31c29f7a59f0754df62d215155e225fe429548453c1845ee3dd95df7130805ce4b169eeb2c6e268656cc9e4f54a37cd4751b3c29652e9ae00eec50476296cc4659e6431a9b4d078f01b0cc88b705f84e824bccaa54aa15b99425510fa91fbed00d9d64b91421a31ce5666884ab5dbcce17058b46cbaf486bb5cf11e8bde5395a95f436217b24fd5d8e428aac71d70457796a4d5929e765f54aa400a8ae709de75dd1a04da83dd15ddad2e2765ec29243549e4777d317fcbee975a358cd447de07259075b1bb32ac0cb485f6f30e4d428d747a53a3afd1cf76a30c27f85d9ae0e2f8924152caf75e26aa77b588775050d94bce6c545c303c370f83609ea51b72eb502280eb0c5a18bccf3c7553c514fc71dbf1edea29a15b3059dc1434f51a167e21c90b59f500aec870e3e50920664f44bd91ec1c5e9d39234cd28604dae1c2fc829033fc5c53407f8018f46332406f433f5325d69f967075bfe83ff9a6e3d8bfca3fa10aa52fb3d947d7fca0601e8c119fd531bf991227141f0f76e29d7fe36d61946f112a314cce6f6d5f5116b2d953394643fab610cd4faab3a8706a08a01f18008ddeb5db90e5d8adf49f7ef69a81a8cf5e729f53542b1bd2a1657f358910dcc7b73f02c2951b500ab05556e8c7ac8c75c73792327c1f0b8ef82b57fc372e94a3e5e5907ed75a86c039593dcdf119ead2315a20f92268f19f233ba9b26169f7171e6513906af76c206c099dc3232337a2ba21a4e2e8eab4d72f8a0ccc26d632765ce9f22565e7f2dbfabfd08dd8a7efa2de4a4a1b7c35f04145f80b90d8211143f4767bbb5f44764243f365604321790bd44f522f4d2f18599d2c3071f11d3283a73afda82a0189d277a0d4a38fab1be535f26f85480ff388d3b5837b38ad98353c72103c306eca0478951fa9f7363f7035ae7fc0d5e01fb1f8b274bd4dd2f2306165d28c32ec5ed3986db2c2fc9de53ba4a7de5c33b1f9c3db80b0472ffc9d4058cfe3ad23b0da9b28a97a71fe57b103893dd050722d4d0c9f1a4d7440335d690795fe1049765770ca024cfd78bc27dae60c5621a40b891410bf55a04a9cc383ec4cec1096bb829ed458cd2d56d1058d4396848c091723d8175d5e5024cc9a7d4d08012e0776a7e46776722fe84eb37d659822d7b12374503b7c7e11a110959d57462e501a3668d7cba59be26344e73240af87f97d4dff47f1b4dab89be77baa4290c3b114afbc31a4ac79f41d012a7cd2564f72e7b5624f292e5c49b7bd54e6689c2087292de9ea797c84004984f29deed27496e0a431a31dec199b16917a7906497cc35709d6c5bcb329a1724d4f896bca9593c0a0d258e2e5b8e6469d627b23a71c007b12118ecc9bf16a5e404f1618df963d8252e85b564797ed58d42f2"}, + {"0000000000000000000000000000000000000000000000000000000000000006", "0005c144030ab585ab2a30eab225663dc7ced30fcc62184f9a78e7dc0d45d416e5396b251235de32785203189426cb289dd3ef1440623b8bd69b7deddbf8ec0da47fb7e5c4c501c24bc5d47e3c57d97b3db5cac302f3fc93f6c8529fad480a83865f7a0ab7a43893920af3b5e6a7d002a3cdefb21e0f477100a084fc6a0d594c93818d69af5b5cfbf5f9244fc5fe4ec2f8e28d62d2652689255bc12b4f68cf3571152e57e89de0fe08c4c948f855480720e7221e37e35d1add6c9cbb1f264c75b3eed17946ccb57282e6aa6081344e78324612a0c1aea3a1b5ff3bc1337eae35f04b5f719f4170138a1a1fd1d76dabcbe72268da79d8d52efc6a7f920a8b00bd71865e644d5f5717dfe02f9340b59fbece26325c4f45d3deb319d7058d777372417dadaeb3071da6b45e30d68438ed2c04ef7ef50e91bebf5550372615857d2eaf7ef39a60264de575e1063b4452cd46052062b7a3a346fb607822194d5b3f41366d0b1311172b3ace03d684d37534a85b905ebbda697cfb47a0181cbbb519995d2dd0f29209cfd8f4e2e54ebc6cb12f750cf7549bcded308b27eb626d80ee089b7bae352ba3dda65b1ea4dffaeb99900a6b8b167443192b45338a83a1948d61519c34e48b58cbd5e5e00d3278a82c57127c44ce3db531f92497a1d209560aeaddccc1466537e05de898e3af70e4c4c66b6565d14c1c2ff307a3369bd59cc1cf98dc05f85ff0c516cb07fdfa23241022aea13c2c09fbac36dfcdf74739e3b97e165f0c802c5017663e5d6bc411d804ad6025b21f72ded44bd0a58da4943a27dcd007f858c091f3111efd437b140a0c8d131b5b24eb07752f9aaf09f9c2f57f282615e03b5f5096db69420e43a7856ef021f3df725c981512e15e7fc817e7a75c518bbea553ea76bf58c78b18474dc6c9573d82e528832a764d785d4ab717c1a5004a53aeb8d998e0eb2b13e9d0389b8da16758bb4a0327146e48c8a92d757a19ab5fef4973bb775dee3b07d93d4470c3032e4d32f44492d4cb69cddf51bb0c49b92545cc579160bf2316c96cf18645e46b3fcf7305a54a24e3447c573333532e3fba4f499a90f3d7872da9a75af75105895f9cf375ab62d60986b8ec3baa1eca190fa3cdb826944ba6f09dda27fdbf497c0fad26a81c6a75b1e8c5c2a862d3844722f5033e7c5d5001a8a1403e6d5bbd9a31f315f69e4d813c7b8ce004057741d4db90f7bb697d42fc6020516359787df443063ce1dc3e567b85c13c91d07798396d9e11b508ff28640d3e639068d7a7c945e4c5fbc12e700edd9af304f88b2dd967ad45afe550fe5423865961207505af13d536347ae5eee3b08831dbadc0e2bd629af93af90799cade484e2e79fa66c147adb4e48ee1fcfca9c012660d1ef98802fdc3c3f3ae65ce4362be8e36313302f5bc7e360bff86798a303bd7a540ed224c5197a67b597df4bf6722857338c92809cb95b6d02c1706a40ade0d139c0b9d1bf985d27345b1b79678cb54967b32f19e094a8eec4d8719e3fba37af2fd81add298460464c5513d81b6cb46849092a98f5ad0cc57ffeaff04c386e516193554e2f80142841270c8fd784e45d80693a5224d980abaea4905ce4b425905dd50fef12018dfca457109fbe36313925a8d15dde64686d8c12406902f83814f81b10ee4d0b3e97ad0d8dfa5ebf09226d213b177db69f5613cb4ccfcafc8ad4c664ab5b8127f94364851dc031177924ba3d6a3659538d74c151dcd7103680a1e8b460b15656c7d82e601639cc8eb0a512b995e84275aded8121409ddcf362c2d13f7eb0c83a459d662893148d5a81f6572803663e0349d9d1884d2e5c5b67d35ff8cd697e0ea993f4dd49eefcb31f0b482228f04a14f125328ce2de5d5dfccdcee76"}, + {"0000000000000000000000000000000000000000000000000000000000000006", "003ed39a7e92e5c4a21132e5d32301a1d8376fba6b1b011feabb95cf19a91e532449dc35bdde6b54a8a9210d3a3e908dd2bfdf49737bde6880ae349f54f77d4468c339a4d3ea0bf826c8bf51ef9b7e4f529ace2f1342742b3c29a0c7eff632e2aaaab799cd975faf7928b945eed88d64b897e6d4423064c13f2734fceb31223eb679cf25d601784093a7df70223a0f4abf1ecb2fbc0b67c81c933f6a98537d98780de1293d5d342200a0a816f7052a853329f4be39baabdde2ce78bb6e15903a4bc4320107ba665186af678d0a25a118c69d18672bee3c063b5ca84154ac19b5de2e067699d6213afae214b651167de318179639e90912282f11cb7d01269728c7263121514e29a82b5a8c1bc3035efbb71c950118b2ed530393bcab338f6194ff3a219f306a0efcc74305b3029bd08085b34ccd51da11a057c78a5232050700d89fb13acf455c854e448a04a6db4f82011e91551e0de0507b57451d44f5e079990378bf2c1734ce15df9536bedaab35152031d15accf9d6e07d1365e321d153c78f7b51e843e6cc194eaf473d92074498832402e79a0d6e3427ce73dd44168bbdb7a8d80167dbc7e21a2d45c38a80c16638230a612816cf60045d07592355d1e712bba058e2062e24627f14a77003c57398c3462880961a83c6286bd3953f43f265f34874ab1c53e8983d6b8ee9e286f37bbeb224bca435081962a95384bb907a07f459c737e492d0463b8ac62e554b8a04ea4f0f750314d9126795a60f91bbfa671e2b44e467a762195e9bf5cce7e41989b35ef6683449cdc3bc6e1b9827a3dfa68152d32207062bbf7a590978019a45545b5366f0c135629b9e61c76c1e6646136d86f73921d437d3e60981016a3e97a8847e49ab0bd575eff4d090c57b6c112442c2ac12c0463c00211c356185b5700be1c3a2d35231c2b828f994d0e61801cde136bd80c65459213124bc40d6ce33969f9d0a1fb491f2bb53e543f866e2c0d33fcc1a4ca6d5ea050ba5ef29bdc437aaabe964e9f754be99a76bb4f5e00e5b14ca0ed5ed39b8c1b74080fef37eb522b831260a39bdcb6f1c6a39f78404a591eb8b113087ee8cea3851f4afe15e4b6b08a8f9c90757cdda8a0e34b953113657baf55529656dd0e7b4db7dd7d3061c5d31901d1d35adae11c915e7a137b7b957db868475ff916f0b41ad69861698f778dbb0b61297cb26a27dbbceb21bc90e161f8f79e5eb70354c9a68afd15882b4909c1d9e70f231ab66b3a2d3b7178bf2011232fb9325b71f06c79b015c224ef3bd73a623d6f122b7a8df28710dcc9ed902e749cf4a62111b6bad791daba84ea8753c02ec8edddda8faffef24bf624a9de94efd3525f413cfe6fd6d26a91da6fc1b3ed564031b89b75f43c6512aebe2fb9fa79537f7b6a1f46b986b08c49fa907083cf859f2831692bc06d1f8ef6be56108324c59bf1bfb16c6f609185374f6e29d5bf63bc8c9f8b0b14b12b3a8de7f655447440ae51f9b45efad7700fd86a01a9c874b59e51e71518bf1ef1ac15528b0c9bebf1619c29cb3ad4fead6b496c5cf75dd1fba5d3719f650224414f92f8fad496109347b96651cc5cd2e5f827326c2ee6143194e2d750f54947e68466e288a5b205c344854cf035d6c82fa0cc6d04bf36ccfb1ba7f55f40b81e31e585db1e126d1ab232c663cbacdc87e9a892d3bbc4d4e9352b4d65663ee1854cec0fd7c8803931b34cbca8862b30fad1f151aecdae2525b7f7b32942221c42cff1799a2fb8a23a2933c1d0775f97c1857133e50bd860aa25a63a7b504d0acd46ea16b1cb0934182bf497a9ee3e9f1b5647809d8e6c3440e5fc23614d745a10572ce5bddf0d4a05db220a5911850b1a11c745ffd85b7de21c1d043bdf0f954c55e2add53fa"}, + {"0000000000000000000000000000000000000000000000000000000000000010", "01f460cd7acc8a0b205c813580297a189abbbbec6f02882b11ce42c03b32a8e1f53494bf0979a5d75d0f243a1c8148556666b54d931f3ddbae8573b5f7f8a230792b71b42aa519f2b256e5433fa0330cd8dd449f1d51abfa6aedcf97b73f83dc6ba62dfddff4b4a16a201b128fdfa5be599b20245c5fc32e7288f33ea0ad37a1c4ea0a169091459e5877895d844ad1ba396baf4b96fab70ae0215fbfc4e65a07dad30613f23bc44e027ea8a5bd07a71ab7f6f0b110b918f1db889605a323938aa2f4ca7bca60e7d7d629ea3dda8dff7909670d5862c82258872aedd7258b9cd031b1eb1eb4443729375faf14e654e7373dc5c870b8969eb9755f540c048f0a5af6d02aa78b18b5af4e6623328548f5a1891b37b913be6e5a03b504b2003c3083095e413eb23321d6c16c61174a2d3ea752687de16877a5ee1e20b265791b4b361f4bdfe09196ee443c5166a039b7f73e071447c264c93a65c277a4d167cff245af335a10030c719a76506755bb871bb50eea2dba59f8203e727c0fb1bb1d2a11d227bfcb47397ee588332a511e2cfb36b909c80d7a350bea3b338d36cc29a917b0bc9a7f0b0b6db40c43705cc59004203e6db18950b8f1dff425fdd20e50d3b746c7f8e2636f42cb3d4c7f904e212456afaca33839cfc83c236153a6425782b63ec95a3db1f6cc6993b3bfbe1bc62fb237c3768828f960380b971587b4e34cf3a39ee11f8ad155fa149bb7583a10ac6f49140feb257f0567616c770d13d8bcdfb9511481622e0b1b7b17c1ffb4a514f0e32e21b8b3ab201d8492ee8d07af618212f4ed0c674895ef32d208f20f995eb6a03a365dd62b61d3b3283ae2b285dc40316267f5c4c9a305498491a7f12ac832628a703743051c2bdfea3c563c38c4a885891733242f571f7b27b42597c15e47ca00cbaf8666ba6c4a24ddfba135be6b0622c7576b44658ee1919066c88503193fa44cec890fae38a4e1f03a03e5719413983d957d635ddd46100fb9c4eefeb6d12db755b8b4adef17b234477949b022ade6f83129ca9fee144350d3d87bd9d7681d426b0818a0dd7a02ec51f511f20697ba1805c025d379071d7cc57a1863f1d727dae3a7a243463596fcbd4cc12ac3d2e498d56b2b9472e5ef68cbb4edf26d5c5dd04344d68e1b97eb0acae9c523994ca3a5f73698fc1d0edd6f1219cca2707acbc34ceec10f9269f9db54fd111f1f4bef2773e54b81f25745485ded35e0d7beac2faba6879f201f8f50b603ef55bdbfe1a1d3b8ed484fdeaca8ccd9dc954b8bc5c4c5b709a5f18cd50e4e18ecf7cff8d09badbe1cf364b24b0f865e513cb5c120a824e6a79bfb498b3a658deb4af919fa5afd70c6263f07929f904da3c243d7054c72111b5d93fd01c42b1ffbd59791919d544b34c8346dc74733d37a508d071155e5969427f52f32d699256ef01b07f078b4c30f0b0e50cb65d0fbe336915e51327fc46e4e1ae8dd1973e3e93a09c83d2456788416fcef1242031a84164d990c7ce5a039bd8519a584d3bebbe1f74c3c498d0b403a9b7a8e2a748333e57263bbc615c9be7a130a1f12e161db8c67509fd1a658d54e157671c3bc8b011119df87fc9c05dd506445e437414741a96a51238012658177c5eeef5995bca3107556f78a3bd1b7530d07a1fbbb8f108f8b5ead10d6e173cc086755502c6c3703b2f0a94deec5c9ff655450daeb79cd51fe4d16094a9381f40b747ef5fda524f175679dcfd7f5cceb24b84c84e4377a2dcffb23ced2fe2765345dd25dff214b8a3eff167d13b9c852a42fb02ad7163bfa3dcb2435a4a048ec1a37e9a1598edf66463bc70e7f6ebd2cc05b3af6d705295b190989757d9b832e2b9e02be50a62e6472e04709264d8613c7f0cb86152bd1e664"}, + {"0000000000000000000000000000000000000000000000000000000000000004", "000f0222044557a1a3f1e59f77c1d05eb6ca77aa3b011d436e92d453d2fc1270b7458c8c56851fbb55dc031692e27609e19aeeef8101bbf568184f709729b828ccb31de159a270f8e6d4671be090c75b5cdbe16810635a9ad2fbbdbfe479550772b8a8de02dd74497929c872fd55cad6809ef93799e56019d2990196176027a2fd58aaa05a5d32cf82f9d9df9f65338dded4224fb50502d8d477a346460780773f38eeb5ad166900023e1455065ef0176fe0c27f6ef561ab5a1c7d804f30abe3f3f4a1f8ff19e5176c74d39d425f9b3317e20268e3b22385ecf08943d1f3a157f936a784b9dc754216efbd3eb70cbbc967045751f3c9facdedb6ad7502c1eabd788952399cd851f54af0d73938206ba4b00d692288f464739b46e341208a9f788ebe08baa4e2094421c80d0f4884b2d8830a41357585097fed6c38126916fff54720d397c7114dfcec0efd85446d985200117357d78df645f41575c10c5eb452dc9d98b0aa4afe3651a82d184dc7b5460f4ffbe00d86487e7c44049591448151f0cae11982c10d74be720d2f51b6110e0015953444e58d493f830f15329981aede986563087bd9cf4268fd574deb5664cde606eeb910f7a5261b6cccb5314c16746f2c21dbbf2ef63ceecf2b1c0911fd341aca65aea993aee23a95210edcab23cc503c19b309c7c12a3741572bc35afca20261c1a8ffa2f90abab9b6ac85e587a198043cb3acff3535e9fc450435bd9d87edf33135b48f443124ebdd51cddc106f5033961412b6e10cc30e4cc597d1d0afe25ff4ba2d6c35edea841f29c285a36c2524514cfb4afa363ecb330ad468df81aa64c5d599d29c5b3c716b0e4bfc243063427363efee2cfbaa354927bf6512beea4559aa651b96ccbb6ad49f2f0204f1dfe831ccb917c5f091e9405254e9325515c59daee6fa753e9962ca02feb13900a903ddff290cd582a314180ff84bae4ae6f98ad208f71047f488afa506e8a11e1633b6a91f63abcd0e33fabe25baefc7e1dc9c589557693d027699bf96b3498f5b2cd69e57290e5bd79eaad5fe82dbda3753f00bdc9092d251c8611963345bc2f744020c839e027c0df789cef00b02aed51178c555ee77eab0c699fb260cc72b22619681ed38b408527561e122f6767f7f832493fd9293970bf78c41d7647bef7ef2fca8f8f3420857f6dc5b4f2ac70283a6e912c7ac4a0a4a1260192e2475c718f1d587ec09b566614358c9c92374c3e41a9f96605d4f4bd740495273ade22ff25f8ddcb4491de9fecf7f9efc85ce0a383be2684a0a272f9f99491e4b7aa3623a0f6df6e645fc95780fef3a0ade48a121064ec1714a5d06a551a313595dd755f9957841f427d92c33e5e8ff235dc1b7f03662df4a99a457a2562d4663d8f2ea1347851604eb5aebd1b5bd7d9e933c049fdca62e62a14b703ce720c23c32da401b369ca82207871ea5ca82eafeb0f5ea82713fa6125e3b48f80c000ae32a742259d522a0cc2c2015d600c49dc7991f60bd210f9c9dada0ae6386b24cb67d8e5db92733129bb15cbba0ec1f78df486de97cb2f2eb65d772d830f39d2f8b586244fb43e9fdff752bff65c1fde49f164a5bdd63dc13dd2b6967153ce2d1c28254d68e445470cb36433c429df67cc6f9fbd732820b4557daf607a4f17133cfe9556c55936f61bcbf6eebbfdaa1d7162c4d597908760bcc03a3eb086da2ca160cb0b2711a11e3b6a6e8caa5c72521b61f3c961182d36c8bae23b34a83be9610013bec8266add7cbab17db5c05d7098af7b85af4f9cbcdfe3c1fe1725ac31a0f3afefd1ef2ca0de648733dbcf382963537b9222c5598e91f1964f654201bdab93bd9922323ca3bbd9e283930544967ecfb419fed3f6a569b1b615b3e5f4d43fccc6c"}, + {"0000000000000000000000000000000000000000000000000000000000000027", "005b86c33be0c0b9bbb13648ebcc428e9584dc3b1215f609aeeb6cb103902079bef67829e6eba839b18a0454d23f63c8abd5a60ba3a9622775053b65bce948074be9e449eb2fa5adcb00abefbd2aa87c37797898015bf562c6df6768fc2f324e0ae9bfbcdded49fd0d19b4a99422ec804bb698b7672e3d1e0f1aefbc2deb0383270ea4a1efc9eb9f846883ca151224baf2ba1226b9bbaee70dd3e1d1322b6cccf4cf3339e039e0fb0af14da450d491daca2602e21753413e0ff9bd284d57277529c8964155aaf987abe97c80b296df9a0b830ebc25ea6228fbedd5a9c1177b32b92905ae0e02aa1c740e90cadd6a5bba3703e2e9c284bea9a03bd97f123fa497110a5e3a89fa324c20315aad62469cd61813ee51d1cd788feff6f133bbb4f77cae23aa1346321b67aa9206bc3de9f11256c7165b1b12fb95fcd80a1cc3dc637ddb2cc36e3ba464d0395bf983e29d032905a4f431732ea6e7bd05e41e5046ab0ecf463edd4b0bdd34df6dc4dc2a8d1804ab2ff26a6db43cd5dc1507967deb30de73efeede308d8af684987420587e670850feb9851e5e25bb9fb089687aa9a52edf5455e6113a31a6e4b0032d9c644411ccb4930681fbfe914342e67fa643566df7a56e974445f7cb6effa4385f7b2153444e628d76c73c6468eb4bd2801288feb5cba8310266b5856022631a5c64dbb1541aa5cefd7885550b016fe5271a4a69fe0ad602a947e8d229f8d8b1a11454d306960c36e2ebc3e32efa38648eb90d3b66982b65fb40b96e51ddb129b2f40b25749d6e0cabf6a437b73fe5d020c9730a60a55de76e953678385b6bb116a342c343ca8ba2773f724112bd9d2247d632e19e58d262f5ff31329ba37aa5a27f4e932e324f1c18ac261b249700251233554303986fa5426d1a88090fd62d891ae844e4b69ff1bf93f64e7787d114f033db9a0278179b640f0a7fe49303549745339ded54f82d7f86b34ff6b8a521358fa309e1eefc278f31873ad5c20adb8118cf5543b929b884ca85cee8fadae15b63045ca6fc27555f5ba35c6e55cd4b3856fa0fe21d6b0a07dfce73e9837ed34176607f16b997c85b61c9a28323cef1ed40abfd05b6e5a7533fce75d76fa27fc9b9146da498c6097e015fedb2cad2e5d401a0b1566b4a4ce8cbd75d54e0a38378f861725318025931584f860300cb85a792c614ed42829d29a908e524ae4aee29040973ba4bca0db3d912f28d377a5da0f451d3812b067659b0e85d1aa163cd21cbae92098353cb9ee68a2a5b6a47e255885f648df501adde230e46f7b3ba09062a6e5b76e1c1efebd1c40128c39e854b689dc47815d03b9c56a64bfd450f07658ac30a12215efac19e15cad4027d4993b1082b83a535eec39114ebacf6241b5e0d7733da8ef6ea94637b61cf08b747083b1701097c9f6c9ee6b6438ed372ac891a1bb0cec31ce807120bcc734e157a994f9ca13eb73aff8954d3b1cb6c14e1dce7b2971547173b75e388c69439aed67bdbf818200a08c232da51fa96c1af22e705e2c78cdc7e090f480c3e9a29fb5b8321f315c6c10dfcfeab4d25622d48a2689cced2447950d7d02fe63357a3399ddf5c11b796afa0081f9eaec8b1dab096c2374736ff212a348446626e91c09d247a73a7a87821e8edf4ce516f0e833e4bd293b7e3c69d4b2f2c751057c80d1f46da516d93cd0fecc4bdc51095e75b414a259a4fbe44e810293ecfc6696f5f5832324b6e76e87d537a38cb6c21f2ae1841da27d744c8d489f5e1dae57976d552a80eeb68f91a2cacd3ed63214d18b8fa68fe792db4674bfb2647badcec654084eabab0fd39e3582a3e2efa10e372ee6655bfe139466336ad56f91310241f15761113d1501b53094fab3522785326d14cf9564b3290"}, + {"0000000000000000000000000000000000000000000000000000000000000400", "003d8c676b8be132abb260199b5e36a02f1db1666c3050d1928377ea75de7a4a8271fc29c33d619cd41e02aede70c18dfd2077b229b062620ac6e0bd5c5fdc0e808b5133962da7aa9bf4e608643cede0dd1bebeb0cdd73b15ca6d7cbb805e1f7545fc5953e860a87c24daba46415944de74f2ee8dca4e27e6643411f86f643a40333cc7a1cdfe5e424a720b582455cc20e6280640ecbeb63e9654587101670c7cefe51cfd94fc056012235962c417145a4b328bc4047c20a7e22dd2fb3145230b15f105331bc8da1fa522495c2450af9a4120535ddfa26060fab00b8530773de90ed4b48f88c8d05bd2d2f2f544413d3c3253c09cfaf93d2cabfbd38034a292600df56d7b40151096fc83024cfb1510e201b936caa48c9a6b0cd6b664c2efd412df3bddee7850c151e161fe6682d96e8a1fbc163560e2905381ee81fd608ffe39bc5b961185216689357a20c675abe350183f33b90830cdccc7d71291b49802b5df67d2aee649f3333d1708b23c0897658e3d11b4208cf9c510e28a3ac2007537adea74fb491c15e82cae8b19e70f45c339c1fc4578630c682997daa600f92b6d77ff0880dfb72d6dc15716f9b5a26361bb691fa09ba727ae912afe9d2d30b39a18948b40d8bae20897838bacd3f13876e19b0093e63f4d372457e476a50e329701d3a1f0e9fac56e379a530c8a22b192ce9389c24e76d7d05ed38c79c468a75a35de0a96c1ca37b1ef99beb3d1641c44d89d50e85848162877a613f20a913716c930f559b0c634fa8639cfb558ad2becebe1318d4cf4a1bff5f925c6acabd78a484b5b53a926933d79c56750c3181cdef562857c1e1e10950b87130ad67b2b04f1ebf03c56fd660e1d75a979f2fdf9bbeab87bfef081a6576f9d114b5f4ffc6123c2ca185e8a1769935f71b094be549d5da42b4f6a1cf06ad0f809a6fc7f9b1014091005f050da648c3575ad0f6eb5b7de65dbbba773573f277af77058906286ead65aed696f1b60bcf0262095fa2d98eed1ce0034be5f2d89e786c94fcb6105a523aec17bb618169d6bb0357d749dfdc79a8420dd42acce40da69d48b8f5abf4b11ef692e67c602238080344286a988ff4d8656c36597c32b02bb6f5eb4a369c15205fa20bc1a42937496cb8f29811ddf80466522f6960a479a1922dc793c46cad0edc0f792204014a8e7c30aef1ab8830e697533dfba9fa1f1efe3f3bea6471b42b25d39899382a0ac55cc25c5f1682fc01a12336d049e436dbc7045614fa4c9921163539a32bff070402b07541ef61e3953f6d6925463cdc3b570d853461054806953254b31e7ef6bb819bcc17b0d70e4ed268b0970d7105f04569bf42fe755fa0bed9151ee43b200e2f390decd202a1e5a8d48dca14b22fca3c9dedc150e4a33b677179cfbbd8b7769fdafcf87b0838ca64f7703499f9b4617c753ff63890a5f5b5e20c4d41cf36d9d157eecbd255ee39b7a4aed348a40b0d574acf9ce5d093df4724d06777a3c6d4fbbe6dfb173a75acbf6d45ab791dc5f96ae3e3727c21fc31cc09a93eae980a9375dd34e4a617600d66c12b3e5022467514f39b2334b9ad02772a1b628512c7487bd7500cd002cd2ee4cb8595e20234b63ee640bd10d9327d13bd116e3c0e49b38f4d941b2c5e88f6a74bdd4e4c0bb95502d0430e746ade08f495d471c30d653a63aa1a00376442abfc876f7965e91f7f4171c627193d081244b8ddd9995fb9bc33e42522ba2cba2c5cb9fc701fb331628b90d9ddf5ddd6e428f9a4ea37699473190c3c2a991e8fd20dba1214ec976174460362bfe5cf1fc56cb3234e1d8bbb52a25a343571ed7abd3116660ed3519cbe29d29f9b3e66c74dbddeb2cee97980ba1f4a5c8952884bad4eace33884e38e71ac71b8fe2e"}, + {"0000000000000000000000000000000000000000000000000000000000000004", "02c7a8e145dcbc037ba5031cb2d7d5159f344d3c155661bd830f2be755ac66a63f886c8ed9da84707975143bf25ef752693ef6d46171d9c2a7115c4f7174671a4234182152832f6358947c17f4635788035ed5c61cbad5919262ccf96226f3533855083abb141857c1387b1fbc4399a01b813995de8d4455b9896f978acf2113294163df9675fc5233c4fd7e42b1bd925e1f34400a57dbd696742b8a98a668534b0eaab085f6f853034eaaed58649f91e1c0c0c0c4d9d0a036572dd0172b177af8ed96a24ec177046917f914a2a4bcb695e505e0db803fd3a68926a900996b5c3dcc7f608d7d0b3fd7c5f771efa073b7fc645a5952c58ab416d6f08c0580a0f5e844e7e77f40240499ec25263578fbc6ff11102fe6668ccb50871281ce4ca43afc907b6c0c641359518b9c883aed826f92db962a4eda0732357257240661e1dbe62df3c20387d82d605d92fc2f5d44c1048c0ab932d1cfdee2956151983a8e4212969cd0bf2d45ef4c0e4d9b8b9aecc7574e6346c26f881f231818c1297be15509412a0a53ca61bab2dda5091ac21b29f266cd6e523f20d6f084ae4dfa1a59ce947c50c4079bbd175b0deda888b94404ab4ef79d87ebbbc43b26913a5dce4dad91220a66edf7f7538ddc4d79ab991121429e86affe55bedba4737d2c9725d157f1b18e35394bb95f94a79b717423ff75f483160e71da6aeb0dcfcae5b18ee5f8f7fc50e8b34681f15722d243cd1115b663f2564b83e450b370685606c931935392951d6e2b93ed47a02a4e0201d84c268238c6d0d9aa483660f7484e3865d5fcd043c59048897704467b38ab1c882ce2404c881dd043a7a6c3f20f561eba5bbd032aa1a791e814ab66b80283ab3d314695359e6ff4202bfc2a941f6f3715bc0344ea1ac8e76a9d587caad4325f85bcf42317db7d42d58401bd8395894f8e6ffb03a129536c472bd1b673f3b6349e478ac04fdfb49d117919a6e639d243ff4d91423716ee32bbba5b2e3d0be97cd6215c38eb8ea14b52c7ff7c777b059fc8cf13a4324d748881549d99d17297b527367708161eb0046c156c004439350b2070952957e69853d315e7b02707652cdcef3ff7cb9be8d6117e27a2932ab9e1aa2475fe3d87f7a815bf39c35702b2c6c1a4e59c0e602ec09fc6f42985c37d1647a23be51f9244f8d3cee505a61f81a1e74773bce972027d2d8a99e60e341ab115060242c38d23b2be25626464dc3b719ec77e5c6d0bf70adcce43541ee289417d21337202aaea3ec52b1512ffc1c3aedd3fb6e2e425a35807f9fa3450f9c413416cef9508c592e195a3c8b3b7b98dcff57794443afb433be1a91fcbc588d6cd5a40c1e6105939328c1bc6c6e7ad47e553838243b509fd8425a4573bef721c7b5bff844ace9ddba7879f5df0bdf5f4fa11e8a4046bc1223614355bd28de1ef7b9e32e5c2fdb8c64c43a9aeb368f09fd5fe6775d7e735e69a0bebdc8f950fa96295ecb3e163dde88298db15400930d62db165255554cfe994836d9f2726e19de8d8c2a6ac9e9373048c31797636d7a5ecafd81d10e6265a9a4458d6640f6956c741e8b8c3864859dd41d92e269106f9e1f30b290ff9a689954de793d2955b9dcc94da210eed5f2b7099cee30ca705041344f069c345975829bcb4dd04f8f475534ad6b4822c611ad3c79d485f213707080f8378d26f44211d2c29130c7dae6449453c1e349a07db2d5bbe02f619cf08a1778c6488e9b2203a2eed1f53093e789186b5305179cc2669e71a92af9d62540789c8d671ca7480e9f370c65629254440025a07bd3929757b215b887ff2201469f6e10cf1bb4d7fc6f016265d5754660e8373217553a04f3baf18069b97953f15a460dd231fd773220752c852e24deb17789ea3"}, + {"0000000000000000000000000000000000000000000000000000000000000000", "00ff597115286b1d48fcf26e094c5f0179084e36590811fdf3c2c8d6fbca0604154cc45f4b7389bf877f02e1e15da306595c72a8c0bbdcbaafd4841765ea5b0414d9b2d58d222e919dd7e80578a9cdffbb5e5fec03f3f942970a48c51cf1fa3377ed4f4e99d31af5e205f4954d711d9e4518fa03ded777b4abfd307ff1b2078f66bac850a2ad00788539d5676323e53fbf96781c10cd212413a922b9c7620959dc577d93e51a1c2d0ebafaa45068c8e9bde940f4d22565f2b2bf1aba461b3631efcb513a4bda6f844b922735c5296d3a5ff2174cb5d0924a4be38ab963f7312aaef9acb01e2d4d34a326e086e6ca9bfeea83994521296f835c9e258310f142f9268727b4f5d3942ac274631a34c0175aa71a56bd4e36603f3b179f732171beaf99ff5f105ca9169d2e277acce7ab57a4d8bf96effd2a90f5dc0cce1c1396aae890eb489d96c34a8cedb1918b04ed417d01b0b1d556d796fbc99340d3a1fd28aee83218113b02b7d114ed956a1fdccdd11362d5a78067a62489fa3d8b1d82ed558a58c8d084d4eb6180422af7ba9ae046d14faaf7e39ccffe43b51d3a5e6cc22561337c25081df1aab24bd075c8d400f3dec2b224a87f1c75c80ad51f52678edf17605401be2940f034f171ba032d265ae18552c99f8f5cb86292b052716e0dd3fb9588379d6ae4400e55db9bb53539eeed8b75eccd30b5ce03aec61b2513fd75d41856cfe5c64ea213919464f2127b75557a6cb5d7fb104949a07e8e6b8bb93c997c12bcf4d4ce5302ecafed32900dfc2040dc63c6f8a62854a2415ed01e088d4b25cf9ce32bca7cd57d047f102621eb17ca840f945d664ea2725b26cc593ab75d1631c68249528e1d55a436bc6847a1f6ede87baa0a21a426f3ed5bb224f2d2b2307ad37b9550c83c66502cf6fdf739261f97ba3ce385e4eb13a6bee4dce6bb0350257e03e5ecdfa9e221c34e1c2e05bd887f2b2915015d17d6200ba94a6d824708ada25e60c5bf55851e230160b852d4479b6be815f0de92e2a413fd59272ecef4673932eb67bb6fe353ac2a67159f495fca5b064ff60bafa75b35f5b0f0dc3166ad176c665dbc780e25be8884119b63dc2d5343e171eef5bd789596861be80ee96adde4efffd92325c4d2fff92fde79baf14a633d40cbd49ab9682ae9a33b53bd0e8693158ffe0464677ec4e0fadfcedc633508be32c1a3c23e5a53163e3434bdf9e38bd69f53fed876032609eb38d5652a85b4e0b0db85d3e7f5c5a243dac7ba0ea539af362b18aff205a6620ff8013681fc3838b9be8b5782e009b512df6a311c3deb06b0ae03c51cfa66379fd84936d48b57576a010bec1673eea1a08e59aa86541c6d1b7377be7c224169318f550af7f9c2e2a236b7bb4c3335975319141c018165f88ab953b54b6be0ff5e8e041b118c35949809c423d207384e6f597f50cff7d82671751cf3b54e3be0796278923c6d8d1eba4e4b950e3c7106a91359097e13d13466b24b2cac26e82829135ead0f70983c7cf63ae382f0a94971eee996d9d308147debbf57b36f558542e84d4d27badc70fed9810a7095bff446a1a4e400710a13e565be4285389e600f7807104585c190ee5d359568c3ac3efde2b9cea316130d7fd2a34e25a674e40c99f103052af7566843129a10c788d35a6bee5dc2bf37a31e916b3833854c501adb7e32299cd98c1d38e883dfa72b2f6c3c0b391848135358defb635fd4a7d76bd086160cd41b1db22aa773aadbda72774bdc22e5cf613dea734798773a208f51686db70b61be5625d53ad7f1c66b1dbbe7c9240b12536ff2ab91bc3515a4a33caa21e5199bcab32d795c5e9b93985bd99f1daa2c78ccbb6bc41d6a866f569bb541b8d135cd5dbaa2fc6e783b391c9a6e29"}, + {"000000000000000000000000000000000000000000000000000000000000000b", "000f72279dcb3abb7879e4072acde4a253c658f93912d41c7c01a4ad95d9bde241c14b335c9ff8bbccac05fbe515c44e2485eae2823e2eac8695a672d15dc111f6e0c1344df74ae281c3521f768bb5b2577fbcf20acccfa3e60d7cd162a6426136ef375a9f273c408e13b98f1724d3f7e7829da3d30bc6a38968e44ef4330b40b214fa06f629264526667d78c341b5f8f61c331cd35430c8e147a730fb21e2536f60f0cd5a5dbbe501e6c16b9d42bf01d5e800ecb3c09075e5ddb957180da3ce20e8977f3bec4592cc4ff65c9def5433e41f088c1568cc899eec79caf09b6af2d6118496d48cdd2c32a1db0e29b901adc92343224a18b53a5ced6d94102d9c1268e4c327d33ac41db63a5b06194a17044e30673df9965605ad2508b7e8a76ae3aef8cf7fce591255f58e294f69df994282cd86d3e2119b785e121c7a59369c54aaa477adc8697651d6c813ac841dff600c8207926c4981f1d03405fcc1c44da67e66744b4813c569f8b81504b1f40ca223ac313e8da1659f05830cc58d2b0b97617d94a5d3d6b846b3fe64d9ba4e8f3b29959c9b56d5e4e61d494079789762be21b788c8112d9a406dddabe794389194af5004b9698f7278001169933968522e2d568e07c5706101ce7558b74b781b9b5d24fdde87f7a5b458befef5b58f6a197bad9b27317e23189fb5d9fb7d2307ca32ab81f2d85e812f0fa89e711d49e866bd4682882335dc0e6a98f978ab7dd0dbf86bee4bd7bfbe89692c4dc90efe437cedf434855d085b9b0f4dd826d54f456cb0aa349873e7d234d8631cc10faa7abc6cf35a8cbc371756dbfcec0b18cadf98c5923e119cbca4bc2a3b7e6b7d955fb01668eb1b73b0aced87f59249596968e96edcaa3e95a71f944e61bb49779b99a97607b4c21905f4ad76f29a31bda5ea2457be7542557568d9d6f9995a6f0c116400897c496db996bfd015d2bfed9b51a67559373d8d33371a9e5b601fcf4571f3965fd155529aeede7c8a07f436d9c58be0307eb722b3891b845a70c174dcd23dd8ca0a5f34f1b9e0ded52c32daa005752336ba4f290c67dad7370723fe9c454471dcc36a7ba1ddc7f168cbd7aabff09c0bcefc7994f8702d36afae79df06480a8c1f491e9097d8650570f65239657934da7d5687e0d6022ee5a289ec8eaac5fbed13d2c39217fc8f034be25bae7066d5b31a614756a839ddc4cef8ae5b26c3e2842d20416dc2e5e3f9d7fc43e5e7d4f61a2c0bb0f66a07524e513f380811a6ece9de9d7a1f2532126edef15c6ed469e0158389e6cca63f0c601d6889169c3d466e585a99a826e29c84a2e599ab32b174564dc57af4c8335a3bbfc1f7f190e3fdf24441f3f04d1a6a5ee9efa0b657f0baca1a8b79a1caed4efb81cd2ca89e2246f23933a8cbd89dcb7292be303b185a7c059d7a56c0e0d9ad4367e0db240fa7f074959ca80c06f07f4723ceeb3acb69035d3ed780798906974d7d23674e3dcb1bfb7cf77c34398272fc155d863cd7a0378253db7fb5e0fbd2efb3af935d4ab951938e5960060b6ddaf80e46cf38980a3aa0ddabaaf2f1bd8b45129135418aef00fbe90c4244a75852431ae43d77a809dd92ab72c58da7b1abd5c62bc4e1199fecd351652e2ee47c71cd961d9fabf5d901cc484b309d1db8be08577c418ed4dfab334cc6b080e0910a13c7524d811d8f1cbdbe87d79fd6fa6515b1501bde57285cace81095da64c7696ee15b2b21857aeacf456dc154cd044d4dabd3e6b564fbece8c55bbbbcd1d6ba16d8b3381f661ad17e9910818ec48473b2e73b39bfb6719f905218dcb9f7968e8997c5e54bbf59831d652390d195263dff937f0a294a9f96545413d8b75916152ca996380a9301ec97c8c3608843ed12baf555df4bfe4d01"}, + {"000000000000000000000000000000000000000000000000000000000000001c", "008c21b118c4cbb1d0528338165cdfd9d3bab17cdf14bf14b8414d93710508426ec1b6e645c7cf32de5303342ee0e2cfb227ca6e68f37c5fc79a80c11e1d5c15e323053a703995a5e01257d1e948491a9af052c6038a7e7c07877b2704e7b0774e434f8a6d6e3ec012428f97e3e6b393cbbf20664681b687029833362d1804c9ab42fa0b37ffd133707f7a9939cf30a81feff31b3ea35b8a13a261d55857296af59931d812b23639033702142a9e58b9bb5e277dfcc893330a351e59dc199a9e9501189039e51b6a1e5c5d624aa2d7df1cc819832e7cc3a091ab51b744af75e6c202ebdd9ca5b871d985e6716006856fb23737f87e88ab222bbaf346052082bfc754622f101595f172b70d4f2a30dc5e0f057e07875899bcef4c1782c4dfab59d9083e7163b50ec4c9f9a692ab47d18bc314524270616c3d76cf2610ba9ff837dae6933c034153946c521bd275ff01650243df22e552a53bbed742f1585d1c08dc2e6b89df213762e62e194a3533315256c1dfa0ea9cab9b20f7196abe015b9f28ff7deefbf1d9ed40b760d51b0864431bdd889ea828bbac3128758c53af2ece1e1ea12f167e66634edbbfd9b80e41c78e3a94bf39051d859329c6ba3c4551eb8fa26a8afee2fc43cf80b75eaab02169224209093838cc17a26b177f29c59be0540b267e9a7ec662e25193d9cf991a1c6912eae4009e3efe03986d281cc63e9930d384f12cf608c2e5071e84021aef875f0892cf66b0d6b838bdda0ca6225fb712562f7d99af2e6e3145eb98b42f04753e999244919109371c967632a1b281789bba917a6b705efaa0d80cb50b1e39a8440f7cc590f842e9be411b86553d7786641e7829bd3ea1ba89f1223359547b469254e47436de273365e33f93933fb14f92f9f0b0870515ae6cefac57512693169b0b9ce72778caf5da5b17a2abde709f01d2b8654482e62c958a436c80fb5174f783887eab2572e2e96bd922475d391286141e7be5bf1bb33fb81119ed1a922d184bcb89f381c1f4f9c9bba4b2f5822e2f6d7e78ce5141e9b839ea4267695297d0ba6e6010a405e7db0c13b2cf03f3dbaa5b4f4aad143fc5813b2e376d899e1b63192ceaaf75d8b3cb1168bec95f135696c322e62a07c9e2b139be13d24f0ac49cc4b24ee21c3e70ae2039b36396335eea1e6a03125fa0540337410c1b492700d5fd053810fdda71c88ede9d1207af7e47451f2854fefb1092462bc750b99a73e79e1b1c756af3157175e15ef4f15a7b177d60bc9a24248a835d3d7526dced758549cb02d25602e8965ef1a70979a31e8589353b37f873a9a5266259c10f6f7daf1f64e1318f4bab128914b1fa553890f5cfaaf173d00d16adf00dcb0347458952b74636f9c17fe2754d6430dbbb32bd53000d067f257a594c06d2c717967d7e02db4451821e060b29204285b5272a8744b07a891e3aef04d1974f1995f6c2ba4b4fd994f69ca29e67f1062a7def51c70edcbcf53615e974ba3645559b6ca03a21ff158753df395384d598c74a4c9a89309af5b506c8b5a0db8229caf3d624957ba67bade9241765b315edbb6fe457ed33529521e4b1c1e31dc2491e05dd170c7d7d565178e7e39c51d7f14b0dfc79dd940d9e1a2724ceb6d7947f094972fc412cac5615e5d3b35206af049bd115fca9916e15c210af78fa609494e3f80dcd2ffe4a5514e5d18250fdb0d43cc77d671e0a9315f2b3ec5c943a2abb61635978d5f026eed7ddfee44c92acc4d660e589510f989538ea96fec2d2b970800d46c7651a4ad0d6b4e562c4eed566226d971ca70627e047f82b935f831382d3d97440974a66f4df52f51bf47dd53e25f0b53d524265827766d19a5e9a9eb91eeb039fb988e23a7ead242055d7dcb1706eeed6bc"}, + {"0000000000000000000000000000000000000000000000000000000000000005", "0008b49b3508f49d7672d280c575bda9c1f7ba3e9510af18dbf7477d17919b92a06f9a56d97c7d0da97e20571fe3cd59ecfbfbd8a7d96bc306aa60b1fdf34537fa15a2a91d9f511e89849df9694d36860e1aff54056d229fb91be979f6d5561d7e656a9fcc5abe94e4072f457af864f7554371f281ab5d5382a60f372b840a8c960ca1d508e3ff72568d04ddba55a88436e7372220fe996fd8c880d95fd5d5467ccd65d7d6b8fa62026a08e7f706a59fb37fa759476dae5e80427495720cfa241b130baf37c6587357b05b42cea0075554ea0cb41bca4ece396ab90de1337226aaa112fb7d1d420da1762f110aa4a0b22a51ef336304ee49bc5b32470ac00365d1320fb1a1b081da123fc45107700897a90b31c6e141191e1555c9a494cd77e8d202113a8e900de40cb2591f012974ef65eeed6383c6c9227e64e419f79a27200d5b1ec2f958faa3d6e81a5aecfe5b3c01e1786077f4c483ddec93ac272c5eb1a77298f19943fcfc2c462628d7469faa03a9deb992df493a829203495c5755b65c53be69a3c7d92763559d36da8bbb24d11f850397acefa8f852d67a1a0be92dac1d12550974d2fc315bead1c8a832baf8d6ddced13bbcb6ee0fc52b84c8505f45008d447517ab99e9d79c92e2e70af0f178f360646f2a349837cc6aca331959b8d1b51233639fcd185777b05e81c319e1c8a4d7ae6d147715482e4c5e1a04a77e7994195baec8fd95f3d4e38b205f0fb1175440479ab9863947f2d952345ff9a67a1ee1ae769dd364c99b3c94c5e5bccae759213d88c148cb6c1460a24a0530e916755158214aa2ceb606ca20b817582e4cd578e86c2530cceac1ea8bffb564ca78d097fb4fb23b1fe4e4a9cb6859c5a36d93bea0d624ba1e1bcc506fe58ab3797afb63621ad5c7bd02252548141012cec1d89be8e3283bdb5828ee96ff5cf80076a0b658b64bb5fcd9f2aee7e1382e4f14b86df900ed31c71d616823f9320116157c067c9a548dc047211f893f64195853d7a355d6e86f271dc9e5da54b43488a1d2ae1370c09f4bd55263cfca6d82db1032bb0164f27b20c336b05cdf83afccdeb7cd6fbc7d69700c20bb45b9c947c0c10e633428b67bda522e37bf2316f322fce0913fe6ad0d04d073adf18e24ee9c1dd02520e563738c0aebea04f26b732bec509d4dbabc8d0259dfbf2eabca8b5e97b11e1b0b35e6f4c499ee1d2be45542d856ce39ff454436e53fffd169bd516f5a1f20494a19c7dae8fe81b279c42b14826a3d1984432086a6fcb28b4b99f34d47f59bcc4ece5999f7d2e6029f71f8574d33b93f3613b0ded36795c5263817423771ec802d8fdd4b1c7e23ef63781f8ed3d75e781f0971e7a783caedeae0d2b556a0f321a993abfca7571a375751964e37ef4eecb3f4fa6c81ca3a051927a10343e755f10e6c6acb8db078cb9ffe6d7a8273a878146670cf5530ed33f6c623d305d5debb82959eef970559a70bbfd50ba5313600b847f64ee1887512d7d711c5b1ed916ab06d729aa3d82768a8a4fc577869f919c5faddaa5a059dae02f21330d996fa4fb8fa63ea28d755839113207bbaea85c9cceca9657fd59389f1213ea4c1248a7f5f1b5f52e5c558053a2c657d194f270806ee84d47283ef1d72a0436d6b9d503f4d41b107455c62ca9b3cb2f493540e2ef0a149a3a357474512d48a052c452b48de1fe1ccc4219cb51f30940b0f2296d9595060c07139298239bbe878208e8586bd7935e094a2082ab135ac7cdd83a7f28b37a9061f8c4e0c3be63ab3cb6a0b8956c471c6757879320a1f81cb0e41867a33ccb53477d922170f6b1e19d8b3ffdbb1133b8d0de13996d3d1f3819bc9bed78938a593d3e8228b9b9f7a49947d80e9c4f10c59593a6c543984e3"}, + {"0000000000000000000000000000000000000000000000000000000000000436", "0005f1979ef84397e453e2042a228ad0ddcabae0880f51e27d84d79209d6f3d36d77f284d57e2e1741d4019b6edc05c6ddf4ff1fe3d2883ee09ef0ffb8efc656bf3d4016e2c407ab7d05b89b3d2e6a387a78b2ab0e436efae23741d3f661570e2f6f77e28fb43d1d7113c1ba11b9262e3d997a12e0ca609f4dbfa3f8941e179c3c25a41336538a709860aa5aeee38a36fc9aaa4443168d5ed1b0bfc06da4f55e72ee632a7e3af7590617511c220cd648ade47201b53c687a1fa551031735a086fc0375a3cbdf2fd3f5c8eb6bb2cb1ade55ca072773c2e3aa78b96aa8f1bea011f70953ba1a9ce70aa69404863810d3dd86c12157ab83cd384a508ee00953f476971b98abe0ff2643ca4395a9c7f9f2d14c0f76167ee49397654986e754ef7b365e4b861c20290cd7f38f6b55430acfd8712709fd221f12da1a8df1130b9e7d0c55f37f6cc2b13abf7585e7b43ddfe93c0219c7715fdc3ebf5e97464c80cf789e1311daebae15932e24e9d6eaa7926e960ea1d6aed705d35c6c011a45f46a0390db750682b4106aadf811b3ce38b9f15d3172fec11b6ee12bc48ab8166f355b0c53197cd60c49d0742fe48f7be106238f017507fde1bcd944770f956d7cf7d5deab4896551216c12cdb51823f8fc2195fb17b51a33f151d4fe39bb7e358e67f363b1b162391e1a9438a016d2ecb33b2c5bce5a5b6659e31b508444e4b87077ebd4d0f11f8b2fe3d2dde28b02a5a27139c50654a5b67e1528350a0b9ec797d279a4ecb0f890c05c8a253a7f9cf8441f2ef5b39548b12745e3914240c28e677b5d894b8880968bbff9f69bdac700bcc4cde1204d7c6ccef422215f2a8f231099e936d242d1e9b21d05d43e72d0649c6d7b8aa0a7877703221daea4d02a0568b461942ee43da05711505be9de7285a32166ffd7bfbfd5177b0c3e0205a0974be58c7001d4a8015d04697df6356c317593422228ff1c5e40b1e67a2506b6fb5a9fb5109fa3eb9dcc3ba9c0ea30f8969c597ee7b6d8d5dc8b999df286f81175fab9f1476c7d20e0ce2e38205315560b2e39066169b57b30f92046829e0aba3bb05f1ab300e8bb892acb6fbbb24bdccc80fcc111d02759b305a6886fb233cdefb2228c04c2e97550dcd2e3172c7a7eaddf1c0435661f442904f7cb5997133ef6dea7f1f78ddff55debb8857050c8d740a5b28877290f35100cd096143292c9bea39c86bc2f5fba8f9f6d8846892402ea1649bd70b8b0f51fd5a1e07d0cf6f3eb5994f6464de8892159be31bb37254214a393b7693f5a0c65f34c6ad11f63f651117e3d0bf0f711c7e36747be6d64ed1496559082a6c050442d4ab901772ceb7e24cc2a4a6395e923b30163ececa2c959308e695d4260defabb9998f36d4431ccd8d1ea70bdcf1db9b23a0ceefc103c8a01e5d470219513cdb30b7fda48e02611be3f755877def8bfe0b3cb57b1e338395ca6620b3fbdfe3c5049b2f381f0bc8a21c2fc85de44c0bb198c01acbfd8dfa3dd63e1c9a0194984d28535232f693737e4df704045d53490eb4613af7a8d55d5284e36cef492b6a50cd7bb3b61a021cd72fccf6f331dd7319b63a8125b9fe16c68311e65fc2e48d78b08f26f69d8c5a6612a092963c263b990a3d28743b6bdb0e4b6e2d5f8297a5f2bea59e096d93023f4c322af2de73287a4f28dea6def5626c122a99ea8a53183d763d51c926ca8b74b1bb388c921ec31f62b19900878e81baaca5e3f9c3815dbfdb5a2ab18649da1b5a891d277398165d51df5cd6dcdc820ef847d5e1e0df5f8509d249505b67e0bc37f3e3a7345ece854c926fa59eb7c5493ce9146ba25ddf201811480a96ad94c28d1a69b5799577c3b16a531b73e718af3969b06dabd7c93e82f62f280741cddf7df1b5"}, + {"0000000000000000000000000000000000000000000000000000000000000012", "0079da69eca3a8e3a644948e61303a5762b03d127c373ed4630ccef73ce9d338a3effafd963538f5d91100ab56511165c673f558b1aad60e0b60872ef6435b0eb88a7073b702cdbb7e86cc85ec9172aa967b28fd00d59f7f52c86e8672a07135760e4df5284250b1841c1dfbabb61bd95b3d2192e35a57eba12bf5316e3507e362e1a52ac47b67e3b55ad5d120f630b6b59df912bc9e28cf8f6ad2ee6367e77944deea50669d642501d58ce5c487e7297a8970880514dd1028e013643c0631e10eea62ad33f892f5546dc10d8584fa59f8a6093eccc122c5e777138744695162b159fce473ff4c139d4e584f251005721e34d068e900f1a9e40fa92312206ddd34c9db14fd5967eb00d82367c56c1ee1063712c343edd99c89e830e67419bc4499aec64fc18119738d5abcad02a599ce51e6d6bf3d05938cb39be96edd0f937c39606ddbd2aa32c2dbacaf5f46feb51203f1b9b66b444383902040547094d9ed53503bb7e919b9e7521e20fa71d188b46b3047984327b6fdd7fb19598968c18677e5541bb1f3e24fcd0d4638f00ad24311231fe867922dbea084d34a4101b6e750f9127a0bf2352386cc665af9302111c55e147d6bafbc49ee3958b48d0b6dd28bba9407f85f531a5e0bf1bd05bc0dbe80b703a413639cd142a69d321b55b5d1919fbd138cef7a728acc7776915a043b55940e97939b0f840852ecf52944f792ba84d0b276873e8f11e21a4618389326350c3e3183f795b723b7d7e8ce97637e1413147c70b47888874a6649233f7cd5b361c1151867023bca7a7e87570c3bfa234539e3b7a5d650d01a4bae08f49ecdd89ce7a5a243255c6bad1a06181f5811322007357171e8cc15d8b072326ec644c6d1531cd69f0fd36e723e5e45bd240431dd05c8b384a74678e9141f4e4bd957a64c59d7cb352bf974f601f62a7b32bf007ff4bc85d8f59bd2a1610e7cbcce3162d63d36c845b3a6f0f6658cf1f5b816d466bedda1b8d056a015093a4777fb5ea0ab03cad632d1698bc65d96fd397014c48d909511fc7bf5d8a70c857b320b4f9fda86bf03accdb104147b515c1b525086abb2f19e1394669d4de72cf8be5f52ff1873551d82d0007235233c3375084fb88a53e8b607b4e56149f3903828f540b006f01fc95205118c3ca396b58507856bf6a18ec8ae7d6f00a948773751e539d19a5438f5c342025df7dbbc9212c67b182be6009ba211353b7550d15b74659c768b118a15b4d7d1da67f21872d50471b54d558cf9f3142249c79e38288db3df25b9ed42fa5acf85945da4eb0147f00a588d1c6aa717013974d51aa05bc868df3605673188034c075edc9ae426f6c38679cc24bd5e6301fedc52c5d33f238463b74fd7c1054a322c72f11302e0f0de8d7520afe484c65d40f8ab4a84d677fa5200c01ba44e8117bdf30ce4aff2336f4a199e5f6cf3306ea73233aa6a0198c5a75c766e8d76d04439c7300d2b49014f193e32e1ae6753a0e7895a253ed88ce7135f3d403894ec399e4101716be9de54a12a55d29a01dffea96101b38b7de783c0f0654f3e539afb14603fdd0d6f2a8ff9a5f220e4fa2965c4ea8a1d1f49640b239e614cb0f055cac81176bcb3adb55b2bcdbd68244ae50af0aa7f5b79429344a928cf71641c6d62e40825ac33401c8749adf850e5a5b6b17c3b2762281e218f951980d1c883e40e4712c4e5b0ba98727c655d1aed46d693087587f754dcb0c478e79b40d4dfeb1420f9f4242b960c79b707650cc6ec74ba62ea5b0e8f160a5798fbea18d7c7ca04fb8bbe78271dac5997fc320fc6335f65874ff35b9331a2def7f99744af87d343001b1d5b54e8ab538458966cc96bbb1329ff869c51dcce9781de4cb144768523c1ce94bd8203502510"}, + {"0000000000000000000000000000000000000000000000000000000000000016", "000011581d5e0a197314b23ed76975590c56d1bd6a074a30eaead093bbbfb9c552e8c7706ae11b797f1704b88b1c108e18209293b13939d46999c98cbb75a70fb43afab64af32dba76b1f1e4a2f1fd8ebc939d8204c177541aa7effbf023130758fcffcd42ec6cb00410146cfc0bd5f7b177f5874efe55285348ee7f2106381a0e566054c193510cc4219622c1913a94194abb496e2da8b694155b2b78a6719fd70581d75f73534c02d10985c6aad453b66fc2ec322e47e703fc5f1179294ba3c7b3adc1b584db32b02771e2390c9d9ebc320ea376e49c125fea9d90515959db898702c7fc463b1c8a8b44125dc867add343e7465068ad6ef82ba547078b216fbb084a6ed545a1f5cd905394b3d75f396535f1c5673530aba1db8f65fc41b4c225ef9ed77cc215f20d5dffdb429515a9d3ffdf2f2b79a8531229702e1b540d128e1861b210c42c7e58651e8ac77d4a47023fd932ff49efd67b0305318f3e526ab02a1fb5c145fce61914272983910a455b74d1fb65974e1f32860fe4b122e252a4a3674266e3ffc336c75d0e1dd3ec2c0e7e3607508b95a48e05c616d55e69f69d7a81120b20afa4994658a633e8c26da021fbb4efc2d96afb176c354fef0ea6774ff113d0c8676f55471259aa960fc26dcaaae0876b88cd342988bf49651e85bed78b171c1595ce50573fb4939c65867c5b2333a81a915b027c6aae1eaa136bcb0b93139930ea0e77019a3e56134a40e7f50a8b30e1cda8bf2ff79d6e345451fe990f02ca185296f537980064f4cdc4afb7109399466e16c795ca8c4c6743c9c2b4a644e4f025c8b21ffbae1869621af4508e1aea73023adb3abbc0aed99250f034ae3ec6d12ad617c6f678f9e2dd98d7a45dbd646718eefc8969d90dd5228b58bad9d778a2ac9c7a9f4520987e46c5a2fe5375e0f32f3d2810137223df73dd0295811c8748cc67a1a97295ef67b07d88a591754809d66f10db8afcbc79aac0eafcaa98bc5fbcdd0d7c03075f7c90367fb1db88f9d95de0f9431fe67cde1a1a5f78ea02c8a6d769e84550be4a3945c068bc4deb065790edf794fca38d88f2bc66176d2e2415baf7fe2568db4460755e17e801933e137c433726a8de632d0f07aee36f94085ad5aa53c8372cbff1fde279359e3267e5069c5c2eb53234a3b2e82992e15a452e2c7e0757f28d5b1d27535e3cf254b736a2809d4a3099060983d54a890f67969c69734aa0d637b2b44e16645815686e530686e886fea4217291a9643e31cb7c289d5d572e9fa5ae5bf7aaa2ca61a35ef6b6e9015861df09b9f96b20603c6907d145351852bd9de502577b1d24b8d2d16fd41631af65b77e1f75d14e8a823d160e23881543c46b8543868c126c22eee1da6eb9d67acc2c16352ba4ddbda3039699df9dee1b96b69afbd6b50305461ccfd7c0ebc7ffe35e169afd9f50ee1b4832122bc77456a738b3518db269d430c4da2be29d2f660d0b9202805c4c7ee53024580ff79c1d1daf0ac562145813f1a60b76d983a4e2ce6a7fa962a0e4ffa2e40385387365c52d9058028058d4411964a361f4808e0bb8c94ac3613a457a5bc0ebe32f9d20e9fbd9507313be852e989099589ccbd3956cc7909a6bd6dabec928451333d992a795efc6d8e25c59621e94b4d8af460319dd37d42b267598d620a379965076c3d35ac62433773ca08cdef207be59c7c688ce1bcacc1a18558810fa215b04509eb5dac761db8a4c3ad10beba9e39011795309ac0fc3dd417e447279e889e9eb8f5ed4400384b98b09e7c7699489747933a78de5351ffd71531422b35d92db078ff44fa7108353cbcdfa539d62b703faa4d8cc87a323164954067724ef9732bc3fa583175f9b5ab0b50119af9bd7a61847bafb03989f5529"}, + {"0000000000000000000000000000000000000000000000000000000000000004", "0051032be70cfed8bea63361ba582eff3d513f9bea66145bb17f376b15d525d86b757f04331f00bd701801e1687d2f47989b9194e04a5c571f144591e5dbe109bc4b31dbd859aad2cc59aa80ef26b3016f3e41b700ac7b49ccc485bb86d5127934e8d6e0d58b98db6e12b90b1a91e486d1c2488b740fe448ef3a3cfaa1230621a2102b4d8065cb3a128275e6c7f54b67bd600576aa2ccf7bf2f1a7b028c9fa82e7cb570ff538b019008df5759ca0d985c9a425a9315e455760e91eb9c5207ca6f5d0aa87f1dece4377e2d03948e522f9a45901aeacb71fe1f22334cc0455507270921f8cd543aa06dacae06b66210fa767b56942faf637c1083f372b0e78cb2c6ea335838c86736038a5d9d703e87b1ca61979e6d09f8ca948fa15731b879d94c5ebcb99d8df1420f92d075c36419edd530905b486550b65b572ac1a514b2568e1fa59a6b80234452cb2aa8aebdeb44e025a990e88d3dcc2a8e3603831bcd6887997709a0f3e5ced3eb7562b64fa78853c3ff8266e54a83fb4aa10509ab0a430d9a1dbe7f86aacecc39ea45d1fb4e1175026886063446dbf34352e8842343bbc83fdf4230614c1dcba86150ec9c698b0cc6af8c2ce47dc4d371aebad5bf91018b3429073c1d24727de1388b0e3ff14d36e5a741018cf9ebf015078ead152c76bf8439b4ab26607e9a5809f4c16450ae543b695a93f9af85c02efaadc59066421c682a290fd3665526acdbb0f1008a361c3d7a7fba5f94a43cde2bb5565fccaf166b91bd602ea4bda0bc8f09838334aecd38a53f7f4511a479747e30253522f59c917198a62a3feebd61f6b93050be733b20fc7bd26f2c2dab03b14d14b93907aae65184e999f99c9add99e5a4b41fe2072bed95663be2cac3f761f9a891be509aaa27f7ce36b0d81bce14243f7e5b0945ec9313160e55fcde6851f8cd49d86fb03d7de5e49949b51fc81b0719672437c39fbb2720a526fff75d2352b63d715b52bab3d7171a07b1ccd9f08dd60d33f4da5f8da6f119acb21ec8a4335bae3ae30ef9785384dc2f3024308434145475a47e7f7a3f5056e3178ceb51d33c974a439e8eb4a4b2666fcc5bb217ab511c0893d6eee0cc58e1e40ca01f49ffa726c057c71a1d0056b7a3ea380723e9c93184d7f1d1dd61f3b9de786967ce9e544a44a8ad996255b28eb99fe062f286564dd6523de0280efe38d1460f1391c1b844b49adc723263d95660c35f381613b4a051d9349f216653f29738fc1fdd1e5e3e18fa2e26e2292d908bc3caf7db2b8a348171d62e69395393c3a9263ff02de0b0ec8b619ca0bcb29c9f0f160ceb811b0288d87760da70111584b9a2e70ec73385f45a8ea1f6778a8661a6434594929240bc7cda88f1362d4de48745e325c338c1ac3bfb0a4d9dbe6b95e77e7068aca119872f803de8426fa0e5a01ccf8a1d5f6634fe9ab154e0df709f1d34d05d9f4571bb481203a34ef6db2c193fa862a05fca3afb1cfa9beda34be6abc44e32ab5db1ce133f7cf1e507134f3cc40267b7bd7d3f27529be597306a1f5772cc312e55ebd01c38810dc7c738c916e8d0b40fe6501dd8175e2cbd2709242cc80a7b934614e0e7d8c51e589ebccdf4e431b2ba57960d1206c9a311b6a4e29f71ffa133a7ee2ee2aab3da92b7d56a7c30843ae75ed5b3653bda1715b7cf648b227b1b59747320883b9e0a4f68f9b4937da73f1972ee0d7d8ac3b0cbbdcde1c45500fdee380fc9d45a042747c1988a42e8cf7646499c181af3da3a3b6ec1151912cf6cf550fab20c0fb266c09490a5506f2f80491c7c1ef63a43257e9aef0de7555ab4955f3b43046edef39dd756819a99c21df922433b11c8282de4629954f096bf4a120e3cb42556dbbc3d99ce478e95cd64ee92cf8f439"}, + {"0000000000000000000000000000000000000000000000000000000000000002", "007f06c9fd40e6ea745d12f8504d4269f7ce39aff91a88de03be12f0055c4584d3ccc8c74f0bb319f4f201adffdcb113acdf198910f360dba5c9213d37c4c119ee79a22e677737e4dfc1b5b7f3367e4c3d73502614ae659fb8c8b79ba756d839a0e847965a6d14f6362bbf64be651b29e9b71f95bfbed0f8aeb95e7f861a2e4bbbb394d9618521d9c5193b46e7ee7d0776428848253bedec148c5caec43a8924dba3ef4930db5e1f0295c46cf30b08cf999d8045654d7d8eee2818c74d0f1804338d841457fa45d1915a770005c0647b6dd316720d539cdfd771276b835d1fb9bd5329e99bb7bf4ba905ab0d6036418688e7627ace3c8b79ed5ceb611154ea1a1e890c4d3111b5b5efbd2dcd7c554fdb39405fa7c8a5d55115ce377597aade97fb564d3fe36941b18e893850c65120e1b5511cc5389dc804959206499407dcc5a46da54d82b5b268e1b33655227692cb00ef1defb633ed2fb564953a4dfeda2dd4d22eb706512c92ef851ae043eed65610c23734de828b3807f0127a04fd927d6247ef17e6cc6165edcdbb0495f1eb1e0c15b16fe86de38627a4e9dd61a811e628bb5c9b01d3cbfbe15cf90de2543171cc8e6210d2642de184137f6495d94af0796eb7485f8dc9bcb37c547d5ded0c108177d60fb06597535728565fb5ba1f6d390edd0cdaf8d231902b01427363f698d6f85a5c319857ab0c0a6d4c0a990745e52ff40b0073d6d110aaa899a30fcd4c9ecae6a6238bdca1ac11e62a50e824b5b1a32e1092fc78380103d3f4147397a4864b2657dc60b430b57458da0d7376f99cf4f5c17e686a3520f24f460d9f32a8ece4b471be1651f4ba6b2b7cb7132f3833136a16ced924e6f3e7114594c0bf3ce170539f3225175dc8e6f450856edb57f2d1ae48917e3477fc52911777069ad2e2981f9843a2ec32a05e965c797d521e02100f223a12413da5e0320fd81401808f64cb039616e2e3ed8964adf9aef2d353b76d60f1760c96df5f17479534f330cb83b74d42651b9dc54d000bb8aabe1c7b47ddcd8a80afb29737900f7aedf3990e5dfd700385683e1d8193028b8a914c6df325b2b892b74cdb107a22d01ecee813d8a4331328d29746582538618e146d51d7ffd54739cae6f351c1b75b0e748c174b203aa507eda31e720595b0f4fb27e6b697414f3f06ce061804429a99747b3e99268d51d9dc1e27897e482b21228c9fd8e72ee7f97ec73a2b7258daf31e3fefe8140b7cda1f1012df022071526e2f6c30cd06bc700e2e902bbf1e5274a72a1e738c0964acd0fd1f9aeb8507c0410f794d792d551721632bb8d38e4afc137f1d0b8bf24922dc2abba459e3cfb11ee2b5c2e50e51181621438ce2ddb619eed8c312bda500e19fa54d0999189192dea44fe48fe6121927b773f3368e5b7589f4025c4f46f8e7c015bb517505cae93305f4edf6b9ff1f298a6f7464efb94603d31ff7ea6ee6a87cfff9a40e0eaf2bf58e72d77b9f61c937e00d9109737e2b7b218cae3511576ccf8aab027d652c983d080f388795085c577dcae058c9df2060dc274b3985cab75bcd692976f4d0f0300fe7ce12ea3d2a56d1cb0887dd0d602a334f48d35849a78a12246088c02ed55749ba99a240800af023f0edb5d86a8b08f86bd7cec7521878f107ad338c0ee0025ba260111cfbcea6454b497e54f41de5d3e7992338c7ae181523d2367ee700f7fed6411e23afc40ba59f63365f628c0a712dd8dfced01c8f2ec3eb4ae795c94fcff784e8ddf439c235f07f2fc00ac866c2525ab165902957bcc56d6dce1fce950ee0380f6c86ab12e13d4dd105ef423406ea742878dbd61d46466fd8918949015343a4a71d27c179be6c706c2716c46bfe2dd6eb99a3a423c53eedf537e793c542"}, + {"0000000000000000000000000000000000000000000000000000000000000012", "001210e9cfca13c38157c0211b3ef81db65038d98016c8e3a83061c5f7cc9d7537c02eebe675bc79e4c22a0534d4a09018b79d2c63c4304b5dc7300edb7dd343c31f835ca83753ed5506a4674de55aca437aee7b01895a28c1556eb5ee94169a4f504e120cf736eb6b299e3f7f710bb31d8809f3d7b5d15e1b0119f9a6c323417ffc2d4de2fd3e9412a886f0015ab7a3fd9a7a34cc5b4886aec3a1bb6306a76cbaea4dd748729240010df3609556b26f38e75435926ba19f47969d59e72183b51801c98ecda2b803ed012af582544899fd72036503b4304dbc45092c70c5710b74df552c5d0edc40684b3be2a5daa5d1ade641efbb4a322275f1324a0bc5d4982e4ea951677365e511596a1da09fbaa4d735a76caa5ecddba19ceb04962efe9362e702f797b90bcb24fc510a8e1bd3461507e566497e1d18d6a4e9337547527f9183fbcadcd85dcec7873b50bddf14ef05d678f76051b2c37c04f095c5eb4a9036a559d620368b9a2e8415e62f479e84f54dd091e1b1399b165d1812458f5a87f003816782a551515f3cec46c8e1b139ffadf944619b3955d703e6f6b872771d7a18fa4108946b166411485aacab520b7550fc91537f92114d18ea7c18b419f4074d184687cffab87b58b91dd5110bb52540e990abe1ea2294e777d299515d911025981f64c56108abe5c1e00e32940a9c64c0f35a39f9a507e7ce16c684c4fdd344f1e13919da556596d5f9352d9445beefd70cb1b87624cc37ae359d424fef570f29554353bdb83781db17e5872ae02e5aa51ade84c1340ae3c983e311b36406170226488bf2c284ba0e6923abcb1ab9e40bf72446341d2925b5bd5717dc4c9e43645a7a789f301d25c2956c03d6a5baebc73966c53d8dcf891233d3b9efeab4674fcf106eb3bc586ba66bf2e36ed3a935354db6ca478762610ecbb797ad62022f78a172059f6b2defd1abd1b4d0c2a6229e635c023afac4c49b497b822a913ae7be04a48d3d0885e61bc8f7d7a18b071be5af9258b71a37f1a1bcce82d34195ccf15d75de63b09d073e944ec8d21b205ec90617b72197041098af0a36b49cbedfd631a03bf70dc329c9174e0d397b29d6a8268b3c5029469ed77e9d4e2205da3ff856ab2af11ee83a9d738bf6421dbc63fe691f4edeedee3bf1fe79881bc2e5fb3eda3b1cfee8065fa4fb3b6d5565ccb6b0a592ffed920ef93973a606bf2f77b8462d01379020eb8a41c0654fda1b6ab00b46d5ed54a539fb597f92eb916fffbbbf6dfe84a223275fa1fa8a8f4ca4b7d5865156c5ab68bc9fa6b00c2d1c38dc962ce4c7e062d0167836111f1449e20715344526f1d70d86ddc13772cbe4d49f34ce3d32c630154487ac65c4ebe5cb1307fd63dfd548b0971fa34f824b4065fb95e9ebf5a91efaf02a0a827bfb19b104ed76c5e107a66d42c5547ae57623e93b6ec9e47911c36e4361d8de1396a8d4aaae6e602aaf773c85470af8d43d055f0adb9e88d1a7b37e1710fd4974eca078bf9d55109ff579f77b779d453de56332fbba360f06959e4ac2e6e8abcbb81b4f12fd710b08065e1fa70d2d18f97593930ca188c16bc7f63406593a13d1a6368a44d19f9bed8ba0ecf62fa2ce6026a2475fd5413e79a798fed7a40743d59410527b062e0f83718d920aa938c2d6ca3115a6fa52de57a66825c9bd8e5dc4194b48e2f50b1069da4493ca4a3f18af5f271e82931cbb38f730113580963d06c8924552e27862d71ec432f89b17bcedf39f99f58397ae78328a7cb43893140b30c218708a21379881d400dda67181e2599bd3b8197dc7826409a93e9cf116ee5fc3609e43ce98d1b20f0ebbc10b8c7f39c58513f08dbb206b2d145a45771232a1ec86973170d16031bd0cdf9464dab3923142"}, + {"0000000000000000000000000000000000000000000000000000000000000358", "01c238139398c8a6f3e0c793c34f437a675e186ca22d0b03c6b720100fd5a2355d44b2260ec3313704a40df0b1f5f5f90c61d0c043a6027b8f664878fce82b176226af6c980ba714f5d20663492d423e7b520c99096a2def500adf1ea1321177ffff16d1acec0e63761d314d7cbb5bf934f9a011fbd9336b5d64f87269880dfa196930e419c793f4e14d641ce5e47aa3b3363c7474453d5ba292c97e12bd01446bd96bb3f5df16ac04b5a97057d346dbba00364db2bb82a6cc365d962309b53d530f0e40c1a86da26883e710eda6565aea382cfbdf84634ed9e70e38291dfd6acc2b2fb71a31054340fbdedfa2c971b74e947eb94f6e393a863556c90b3dd7024126c41140e0344bed35e2f2c49a1fc259177cebfd7966ae439deec608a037a1b5c94612946b19bcfab6f78b42451d02b63727417105e528faf6861a57434346391863f6c55242df7711f2cac2b7575b03742f93d3df08ab809311675956dbb9cedbb2fe2d069e22afcc492edb9042b14fd897a26c5c28322dc116ca454722d11279f44437c9d9585dca7a677725b32510ce39e353e88bb8f698dca46958e36ccb5c6063067fa69e0c08a04c474bf721bf690a92bd681d3ecf0dbcb1cd2d4803d4fb12d0def66f392b634d7c4498159fa7cea611c7e33871449d53e1fecb001db91e5c2fca345d7423287b928936c40058370e5073ddc2f00ee4066507f9aabdf17ab84941e369e223db91ffe36204aba7095c50f70269ca6b377384f3d3321e9d862d5839b29fa693a5d01cd2f949d7b900e7ed539e253c9d86af82f2b145f86c8550192c61f197badd3d7f0f9104288a59d7a1bdfb42bf9958579723aaf9d5ff1c2fcea21089841eb14bd52cece703c22aee7d74f60fd47dba0e9182772ebff2a39b4bc00ddeae9c0ca745ab7e8accdc32736d71859df15dec1365eb3d120603ae8e94e548b6eb9edf54496bbf5b8962e9f0497942b29fffc15afc10fe242bc5d2fd19a30d911efef606f51c31901d7b3fa3d5945630ae64c292c19676b2111a4b2280462b5d6444d299a99f105a08fb35fd900dce03cf07888b40bfcc12c31e7a9a3d24c7b9590b3408a9df714e6d63ff40235fe79ee77571f09ccd5d16557be7530a23967ae0b1e1815b0bb95c433fa9ba3368a65081e6780b6dffe95f00efa76efc4efad79e04179a11a8685097867f50794e4de82ae0d1b86cbd10e68d92e77739bdc4cb2345eb462d20dbef8d23cf26f92ac64bd1d728e3ec43cf7bdba962e4b2178062298b8fab4cd9c0c7835d774f5e59c6fb19f85f2f040a71466ff8acc403be6680ba1038cd1fe0011fbf2720c07faf4aaf06ffdf84a600003a79b668649af5a34736dd6d03592ba9aafb84bfccb51ea1cdef7a33cd550a3766c19877b140a7a66e484fb9ee72b0ddc59f055298e1adb2bfb9ed5ad2fa021a8a462e82b4bdf036b1f4211e77bb3fce70055ca3cbfb4e082e14844d4beec4b8739b66b5f4da991ae3ce754e9b4057fdcb67ab853736a4fa77b374a6ceb1504efec92236cd490b5234a3b51d813cf37f35316139a92e49961a71b63dab1a1454ddcde1f614357006e9e1cd87333c2f8c16861940c6ac36836c4ae445a3c280c60d4872d70e17bd3a9f9d996227c8bfa47c3edd136ad8475947e005bc9476f45b6ce5fb2a00bf2897c09ea9b05fcb8b12c62ab0a295e1b9b3d4a604cf42e3d58769dd7861120355bb09de7b713ab1d5fa52e0bdb77f223d96df62dc3533f0a1c5c5ae5319451ade29beb46fdce3cc0b0269690cebf00172bcc78fe8eb9856cca516c453348ebcbfce1eab279e61d54dc0ebb6968f8bfaafdd1033ec1483df6dd972a8e4c706af455144939f28072b000a400e56c1bd08fa46573ff5924dcac674d071"}, + {"0000000000000000000000000000000000000000000000000000000000000001", "006e1e15bcb15dbdc47c815d44b3bd471a90de82fc4547977b349d9537622316515c6f3b85cfe5b66ff2018178a7b3264a3959da30a953a576207a2b9392585e406edd179acc035dbd865673b74f0a0ab1b1cf5b0357854e3056ce98d48a2127a89167985b0ab3b35d461d1ae6aa276b7bb8327675f17e13d1e863b7de3c072d2ee2cf9fbb596346056359dc4c1bc74f7eb5b53fe552ec7b1001db40b7e4e27da967ce6e74db51fe06d369e5920fe77f0741c57c84f1a556b2f1da6b1e2e5ad2cacff0f059c9771591247294664c1679e90407302990e03828c7de0cf3fc89eb3cc562f4b8cfe82d8263cafdd2ba27d6f9539dfb24d9be0e543598ed0af92c6acf9a61fdc2770616003fba6b3a645d45c944dbb6c0f0612c352fee653857fd5955e67b9d4dee1055379a8e74a643f965c81278cef68e6cb19cde9b15f3369c621733e7c7f8a62951d2ecb2bd8bfa200601111f20c2cc6d5896345585ad74663d89d87a3bc4099868519a9163b4ff08b405106805337b15fc7d4e06d57f0d32cb356ffbade3d2b6b527ff6b5d3d3006392884a7f8e7b1fd6294e713ae5f3f4ab51178543506fbb74e8ca76f678f693236bd56d98a17d7ba243609e0cd82564410a2710a82d1ce4e26714270cb87c3164c4c3164699fd777a2561bda754026873c9f12144011163401ab130f63aa1465e6580c56915b9b66030191a8d78858cb152aabf091a3cadb8e41a6d43b1205ca93825010d28a9da91223564af03a8a0ed5a0ee1c428ea66bd80302e82b55b5cbb157e98c97178f5c34c8268c85d046536f6f25e68fe0d1ad9fbb78e2ce118645179113e392dc8b12bd1f181009fabf78ba471d47d15f97dd667b3d70f3cf2150f0a118e93d7425133ae222aaa0cf352219336cd460d3a4e23f98e81d1604e6c3178f4297638842acb9dfc2299b878fac3c00c307b488cb117ff24f542459ec7781948efcac4b0f083be43084f80a5855984f976a362a1babf2d7fd383f0fcdd266d247cc5917b5a565d8ba1e5a3e3afa5e236b95af5cb63f949617ce237b45ea1479fc92d2074281e58e997748fc3081166a39bba8cbcb469c57238bb4852e933c60fdd492ce9bcd525ad2a757fe9c0d45427dcb195174db8a22d41a3475c0e6770fed5f66b4541be1dd5c45cecae74f18dc54a21faa9f0a8f121a6f71ffa0a5d942ab84e1c17c89a62378d2f7002c3084ef160f1e238179840bccefee9d367e914fa81df1cfacf64ad03d946cb2b87658778192d5dae75f29a2dcf66465bf1791a9a2f6babb17d98bccbdc002133294bff267e7cf9d4198608359821f111cb9e7a9351eabe789571cf4f37b058e32bbf21db38ffe32b514756160f1d07117f13c41aa57c7af9c9a0dba072f780aade5372f0ec9bde947a68b49dc224ff19fef9b00d2b759bfc8c1dd6af283417844b46cd3043f632108330883d5b15a339aa28443f7e8f33165dcf7a5e315c7128ce530dfa9da66b1682b951e2d9ae2ad2b913de657668a5388e6fd067a80f5f35bfad2cbba27491a380227f52a77f7b78265ef8ffa2d32184251287a1de22e5282dd6967bdd5f29cff64ce15a49b5d31fc29d3dace32da8135fc35e4fe593c54d5f614fa40bc37ee9280961adb9d7032d554e1c431f337fefd1999015db3b0080eebbf6f09c68de3feb91347e4df90c927688c1cf8d411dd9664f6f21a6095160211b0fe7418456e66dff18411b02773013c6de70e9d49ba2b0d50e9b2d4a498ffff530ae64562710e869439d692bf01c55e32bbd1b930cbccc1ef38f2482d1040945a5c02609799808099ba2ae8d0e3deecc8306d1add12bb049342b4b2e720dd80a3a175d6dfbc6a6fde3ccbf6058adcc98aa165933b3d50a478709d787b1aa41a86"}, + {"0000000000000000000000000000000000000000000000000000000000000000", "001fc828b48aaf46eefee2b03a2221f8c36088737e012602db650d10db2bfe6353836642f64a42f9c08a09bfe726abed9845aa3ec160068c5c0c81dc888fe3257fe2a03ab2e949e749640a876b2e491d0930e9100e9b3ee0145e1aef3b70d25358dd20d18cdf3973973430d394336008137ce1654d76e63bc6b916fa746a1cbcd32455f6aadde935a533c2d2586f038bdfc27036275c261ae11cd17036758a3d6ebe0b54201af5da02764b28cc1b68b99fc6c248b9b0d9a1fc6357ac7c19631b8b37db0887c89e92040efb1894dac68a22a203bc97d2e7d963457b70d75ff9592e26bc503b44ce10b3c9936db61c2dc7a7f344d5de32022d6a741bda0f870918254e16b72c3f92f6fadc67599b309aedb635e8d2ad685f87ab2efe58e07d48ad47781d7bda57106166594bd9720cdab5110782eb361e2852f9c51324e4b92c6613dc3776f01412f364871d49582d352f010170275100bce051ebe323ad34feb154826ceea30b8703fe7f12f92938a0b1886598919d03ba3510b7011ea5227b66fd775ed19528cd643d5d53d91cefc0245f775af6160512c8f8843c49c83db65302fb0bb50eb88fe15453a6d4b05e21d6e33630c1ca7134ffd12ed7218b94641385d11fb541f67e04ad6aedd65ec9109515890e4dea69f6cb626d7b6017760dbb1332542355475cf1c9bb07551cbbd7e07ca357792a3fc51a0276847b23567deaf4767822c5533962da3e9889e027ab2ac93bd4e8af2172b368d7685a8aaaf0fefc340cfc09f82159dd53073c6139f5696a20afbd07686a2d9966d61dab6805d920f30492df6df386395e249d15a293c7e808e3d91034b3878e47796d2ee651f2cb1d543bd38593dc2edd4572e2f35bb1e98734f9965a2fd04b0a7896113f5ebfc3e8266abba94993752f5945e2dc2ecda79869d97934e3092a0d966f2e5de2b70049f08975480ce09358744a0a7079d1335d312b1313f0aff0599550bef2a602a37974eb2cffdc3f22b80497245da7dd4155b92cc4889b71bc8af991bf25f4109bdf28c58aec7297fb9324052f60a2049b39410b013b27e3d5c4d96c824b51c2a7c1c97276c0bc2bc622011a266756f986fe5434f75fd8b5bd85b43514800d0d7cf693d46545d29744a8fb70912da24e31928a0ea5b46d34c489ca505aa1d068cc876557acf0182400a95f542b6a0e2fd7cd913640c627f5c0931d3eab47a2bd5f18634e256867267e0adc092f0a45bf2eb506af007adc725a43df3af52039a9388b5ecc5b020a1289f7ec0c225b913d6293f47bdcfba176e476d6cf05486add3dac5a2d681261519c35cfecdd713b11be0ae60a9426e7ea059c93a23ace24da4318951cfe87065755feab3610cbc9f841812ca431aad1a87fbf971171c794bb156bad191a834b4e41476a3845d8b98802258bd0270c3aef1ac0b03fd3cb681dc64db5e14a1d643d94f0e0c00d3b9333797459e60137effa22b609c782917b2a3053865437b79c40b095f932703ce82e75b69ff094f352f0fbd34545a1839f1ca77c58a802fdcc3ffd6963fb68e7b5b524d0d80dbfbff16a070d6ba2abdc10e9095595413f92583141097c0b747d1645a54808c81fa918b9e502eed7e70d6b3dbd5627286d2e7eabcaebf57065b4c9757ec2cdf571bd19ae03255570a6d01f24d772423217a446cde30a8f4f0d04809d746aaf6b05f286e4791c6d780e482894e44e2106b28e51aad553ffc392e8eefe308e116cb700de430abceeb82a12856bea25e6d13fc51a5d81dcaf8308003105fc4ab660cebfd6e0faf749e5f213953b0b2fb9fb6f32d7adbbf97fa398c7bc7922d7843be94c09bec7c96e252147ab0bf7d9174bef339f303d0a22160bf1baf387e36f6e02c64b90d10373370bdf2870"}, + {"0000000000000000000000000000000000000000000000000000000000000003", "006d4fc54a0adf96ce1fc11c64e3de217fdf1ea7391764f4e9113675f7f5921347cdc9bcad7c08f23ac408c51171dd6e8a818c1861e4ddad260132eb1ebf872db71693311b8b2b179b44c9e5fc5abab0657cb8081330b55fc28e08e8e40cc37902d841a0e2d20987b77d9dcd50e2619ef1fd7a48b383d2ba4b5a7fdfc84b147d82b50d452ab2a2101635605561bd91649de60d154b8c9faa6341edf082019eb84a33b5f32c1fd3d5102e18ec78cad22680bb3161cbb64505b4bd355f03232f86292056f15b30c66490e9d65b823eef55ce081100fddc02364eb3fafb8351c96faf6a43903e792f187dd5c43f8db35fc5e6054dfabd8bb70adefd9c2a1305541af1d789eaff7f024d4b790c59908a32669531c8dc865b8c7876ba26349288364282de6adb4de4137e6fe3fe901b47c823c5417a6f8a96b6639b3b4a1b4a1494b6efeb79a7e773364c51832d1b90eb71a000f038439e1146d89b3740937b6a43a2af79fed63b5df0a70982ac7067d425b9c5d2d90f06eebad8e6360b0ccd9cfd1d7401e608d5a63e5fa33b08b2fca4cf3bd8dc9f56691999f43585b7a258309f2b1d7a7aab0fb186b7c0512b2eceeff7137c7c33e70a561f0dc01554de456d0647e5f7e4f5c7c450ace214101241841353fae09bc8a8f6bf6706ffc7cda431ff07b2f5d032a89b7d3f0f757d1ef779546b4e4c47821dbcd16903697889838bf8d9018f41e922286fede2ddd734aa5f7f94468bf0791dfa5656d138ebc75e5fda3bb952048255a288e67d3df49450fab20fd102f8db5a0136068e0f2b74550a72fabe6920b95b6cb30fb21b032f05ff7edf7aa1bed7919f714adce29f64e6cc7c82913d9a8785a7a25389df0ed714233ece561eec76950319ccea3f37e557df5e14854a8936c11738be9cae622e05799af097ef654c5ed72fd2d310daa94157e65a02ef45d1a248d4dbcadff4a9a23c0da166104cde9b462a656101630a714d49f4ebfa64240ad5b9dfc73240656bd34413a6a186e854f55eba59661a5cba6249699df5b4a6a0feb1acca9a3dde70804a9b129fd147098b47d871cd468f7d60d3068ab639a0ca0d54c6344d1363cf9cd3ccdd06aea77dba7e67fdf91bb777c60a940796b5d784a113ce83f74b450572306899353d1dfc037fbf606c438c84b203a2a885e9c8149d1f1705c766aa7757b6ad9d9ec455635ea929d65f507ea816fa89abb1c6809276db631de82c3c59457c5098b821ff4631cb8dc5eed7b1a32173ed1690d9925aaf51655b773db96e972d942efa7830fe8ae2e23d17d764077fedc57d591144fdc22562f8caddbab84a16b4c8126cbce87ccff940dc8c8456035468567a6a1829da14162e02724c578ccf9c66423f73756a8802fac4f13f4e820dc6771863f36324485d60cf5d7902b627a604aab5a8ddea272d97b560e43e8a24c10e339d164d0bb37d9f42903266e0cdbacc1d5d01e71eb65fd41d0eba7b7a065093b2eb7e7462bd6316c550271db1b012e9ef24905f1645f68c519325a8cb1e0e2b99fee909c847209298864aeee2a6d9c23b90e61b6b96732c6ae09b93f45e8d019e7bc749776a3cabd635dfc13d0a0d1d508a9e5725df9a92ce4a2c1f24c5eb685e2b2383c605dbeeef6dd668986fb2601bd6722d5fb9a309ff28ae86a1e969cb0a0457e73ee3b68932b71f730d1979ca6f052244b4100631db70a8ae4f3f75d7220cd3f77d9286fd83147345a9ad64e5ae4b1afe123327dcab55e3e3ef5bdcbcb291ff3c2cb2047af79697135050c2a195d8ed43c2f1c4fc51ec8cc6c390ce8f29b4b7055dd0a203ebae858f01ba71a7aed67f9e8e3b81baec9c5b1e85785968d06272443f6460bf9e5940687b90f05985dd827684fbdad90dc6e54719b678"}, + {"0000000000000000000000000000000000000000000000000000000000000001", "012230ffdf84d68f1b31a025c04f744049728b8ba401516fde3f82dcbce044a856cdfda10a6ae9b52f9801ba5562bd14a2ffda98a1fa32bc46190ec27f2b231d8487910c2a3a5f55ecb2a98a3065aa8d957e31650cca1bcbe7e29c7fe8a2838b113e8031111ced3e12261646b2844f1fef373426420377f1a70c6e1e1b8b12ddf169836134bb417c29dd71db00b6c3e3fd3cb71659f576a3e40b215c63761ae7e01545e5e112ece7031e48e9616304297c2b312884b8eae494adfe0fc41146b5b86612a4d3471104dd0afcc96643823ba6e4277932869a9e3111d95554c4d95822397f7bbef0b92c6329cbb117d0b2d17b13d08944fe6dbfef98fdb3051c286c89472e012d1d45377f7cce7a0aa0bd60c90cc95dadd38e0e2e9111c65e0973450ad8835f987507d2ee209a179f6be63de689274029c9c6d07d72390ec06489cc4d0c8375c84635c4b5062f98b5df34f501a79fad370e58c70427903e202bf1babe589df25f10ba38c7614d6867572791cff3b77a41dc553e6c7b0dc124ed151915c9ece614314f70a0ede2d678476214fad467dfd99005b3cf83fa636608bd2ee3ad80460c07cd4026a53e07b85e11a473edd81224193eb19e0f39d76aa08d21f14248b27a5971732924866b79e50e05b08f6b46a0f879a950f9a8c46681f3e6fff2fd333a3ead1ad84b89faf9845a8a583e834b315d13eb0589cb21604507b7d36f858426b1f015d01b727f9c0da77b76caf11fe3c93f675852e72a8f522a3fb3463c9b72d3179dd4113af7f73edf79d1e5fc07fc102f6c69dfda4a26713771ec66e55f6181e65572f5cae505c8630ad35908d7704ce7352dba0aa3730d1d46572220cf4a84a2ce8164e9d4bee0e2b77e2870bbe632069a17f94d8efa710246c66db7e401a7a7b0fe0dd5208645ad8b8a4431c2d403efaa6aec59dfcdff6c7f023764f5e992ae8d5ea2a19fa8a44779acbefca0de102dadbece101f81228c18c98b5189b748535d104c034b699556d0665abfcac19c8f3cfcd88d1d903e8709b9f14e8453852ae4a9c657fab42e0a690afcca8115486f664f221533326d44afba5c86a640a8d2dcb82190fb09234ffac08ba0a59064eef9517e39b27b652c3341edf4d1a09eed97f2f2ed4162fd56a2d07ee943a3e79188d90efb2928d5f3c23b954982373152e4094f142844ce5cb0b9e084109861c45eb7b8bc703d11d3be71d9ca3dbd643037cf756cdf262ecb76994c209fb9c3f72ad54f6b7463981c43fcd9177e6ff15827b5fc132d8a4885a862f2b8996f7ff0ce7a358b702112020bfd714185cff7a53171e61d4db63fdb2edb222843b07aadff81d5c0c44270eea2591e2c1e8ee02c0cf4f9936dbb3bab15d2cb62d9bd1dbbc1af819249b9d5b333db8a491bfa5662343ab2c21dd371382004bd111ea991a8958719742e49d72c913866d8372b20746c06dc1a8b03f5bea64aa9700d55d1535fe3eb0862631046a37b95b7221185e9428481060e1a35d51c2f95553f1c4ef5e8c64828fd6bb32675151cb8d506c2bda5f85512cb3c17c509f22b3f0d7b7454b1405ac6fed39f19d109c3ed3905b1de4b070fc61cda3011d2bf4ac85564b75836741ba4d453cb368ddfee0413311d47dd0ab204c9ccf1c84fae633cce7571954a0d1742d65d0706758cb5215023bd815535a63416f61044876adccee5a68b8b817348dd85016326be09ca114a739b7f5da90f1da2d121dcae5d205d7ccb268713ec5d456d125c97df0802f3f746278530e7cdd489126b825e8f8b72b13211f37ed2a48145047c8d00d621a2bcebaf61b0397d49c49c742f8976c98cffe5101d7fa3da662eef01f47a25fd4d495946e71857f9a32e3247019450f99d9f9074662472ddcbf10e5fd98a"}, + {"0000000000000000000000000000000000000000000000000000000000000003", "002a1775ce594566fc7c63c3862029fa4406954e2e07976c812720045f0822e22da9ddcb3d9ff6b8bee90962eec23418527f1386417302fd5fd22841fb69804e9203c047269397b828a5a85447b4adcac114019c06094cd24798fdfd2cb0d1a5c4454ac798d97e64542b1cc1956c1286eb6c30e5db54dcae997c2e31eda0089c1432fc0a650aa78b5130ed4c56fe685c38dc105c1634e97be38319841a18b60ee8c36b2487dd2d960e057c14d3d285c1fdff40e592f00078a1b20dfe13537215221f9e94c5fec3fb9be6f99ce325817bff432876ea860e8c72c90779d3d681694e157a4830b83e2bfc84babf9d2d4541a655206c2ad7c5b183de818e10280a63394b0805fc7f92305051e03179ad1d8c085a4686fc335ae455eb526c41ad739233af6f3f05531c65a1c5676cdff3b492c3d5efae19bdd10b5b772d1fc00a9230486235be4233bfa44cfedef6b97b8c8900648c29f48792dbd8c5f2bb66f980d191879eed15186ec275998ec66b8ebda3460352105926e6d5c8fd0efeeeefdc151335b7881835b9d706de21fe599a7a29ca7ec61faf2f81b314a7234ed3d335e9f2d534b40272be855ac34aba6d2d2a9c2861643f8c885e0f912573e4c45153156b948575bf4eff497970554f3ae23005039003bd89ddfda584dacf2e0d824c1c542a42318762c29d0dc982b8c425e952f73fa9837353bf5e081542a0571e082524ccd2f65550b9e5ca063dd5d039daaa2e86b7e035d501247210eb4ce1835e3c06461a95b40c8198ca22c8539c0d736fd76b6ad17d8ac21f1bd29d14d49f0ce07e42d7cd1a7b61239013a3c309e8a7e6aced2341be6c9b38e95a094b509e7ac2902630f299742c06b3d0a21598c0f009168ef6da5fe13ca40f58b75b4db95330b7ae0e7c149705acf925ef3ce1bd7840ad3241f8cd171d2bd1f7065b4d9af52801d8cbc1535f8c6b8f57516d30e4466136d0b9b94126012638668afd22d303a5bdc6d269b6a5771928a602552d27f0c3aff0c68c51e5b4d29f9b40ab7a81db12125f1459d7c1cfffaad46eb0a3fb99dac9fd85dc16f69df8a3ccd04fe0c9340a15ae98b12cb432281e1dfdca29871275acddd9727690a24a1ce81fb29c821c0ab2dd37335949c462053355b6a496f19ffd423439023f3a37129e053b52f5543bae88a25ba19707e504c27ff17c9d512f560b9202dcfc7f3c85475c74e80507589adb7a05abd428f15981c7c1c724a55c0d2121ae0c75aa4c03e0b27818bf4c479052e5609f19743de0675816d6d167cdbb65df7c628f5a1aceff41a2051b3cd2a91674854730a1667e5127d9718dda64354c961e887fd32fe36c6ca7efc0e6c412120b73478c1c832ea00b2db109b22da4b18928a307177a3eaec16201c398a6374583d98d09a0846ff472b333db5bb10274ff77d3b4b275ef5861e9a31c8d74ca4e2ab2b7027568a95d9679233ee6d4fc53536636f449daead206f286a103475d9178b3f34bcdca3b4dccec1726a71c721ad4138f872ab9020356b4ba413df93f9978021189c0d8adcbbc40fd7a75a849532fe1d3457337bc37040e1e6416825b7567c40ab24d7e919f9e78da8f1b89434c299db6fb32ca827f081c8708b5e23ed337217b1a270588bc0f3f71924c29ccb75cbc3fc8c80303161ffc84c4bbf8b58080831030211c6c74375a262b8062b53ad225cfc071d58d94b6bce71021dbe52d13f87d95609a6993b03c028a73a4f41a5348770997165f84e3bca930cd9f132406dd66fb66c1255855fe0c62dbd62e5804fd7ad6b3ee474e5c198cb370b482745acccddba1d9a3bfed4828bbfe2b8f672ebf78db0efcac51e813dcedbdd1e1de854f514df8c25f5dc71d15021a74e6b9537c09b3f9b561ef19a7d37df9e3"}, + {"0000000000000000000000000000000000000000000000000000000000000403", "0037d3d925920a7bb424b0c80b94bda2acb6fa61811ab235f33ad0e2738a9b635a1fc8f51dba091de56009f231c1c7c47fb0a285973f06ef78d282dafb71281f065fb1756c9129a3da73aa224c062936fc96a46105228b6e56e3b785f7b0a8996e5f435a45a17bf24d31c394cededd00fb2254969f39cb80a9ad291148aa136d0969506c4febeb5ed446a161b87949a32b37981df661592366d6a7f99792ba8656dfd1ccd10fa94000aaf4af0a5713b9cafeb6a66175afe271d3f88200146921658717418ef5cfc80f7ffb9003833adedaa80595f99c9008765a55e0831db26538413491d1f0d6081a3bd74ad5cf59421280b883b24acde924d40fec0736692e4c841513b3553b029569100753e5ff55f82a8aae42a38e177ec14d42eab14a0050d99f1ed1ca195da9b8909bdd47d40d12923540144e86d59f423c1fbb33244cdef909720cd5b872753a2b1e4f1c60ff0307a187e9879098e5b2573938c57a97cad27f8378083f8b112df08101c184bcb619f1e5d739899d50b51964efeaf26174e9c9edd5e0e9e9da91f651d0032331bd9e3ceea89d4f5733c5d8754224299ccf35a0781633a2467e876f468bba69083fe95276e210de6fb15f6e73c515b278a5c0d9469ee1c820b5d2711e8ba31a9b27e5241a283d468af873f0564d32d3d59bb4194349728fbaf12b4fd1f67781d74f05eaeda4ffd4d60943f4060b02d6faecf8b4ec41d62c9b2a19bcd80d0daaa21e5c5d586bfd9c35115cc4960698af774d550abea1f5ea4bcbbf0e8cc27a7227d5e18694b7bd95155965551f1ef25fb393d4becdd6313a7dcfb686980bdd1c4d8dda32338f6ad47ea2448322193eb25f6611a09d6f9868f9cd8c85a4f87d3fd98b49753fda4d138a4c81c6d90d731b0fa17ab049a3b70745bcf7b4287a83c592daa2bfe714059ba3c6a4bf0d6378f3b7012a85bbdc8df0f535fcb498a76c9c594a599935d82f665b7a8635de9df314d48f0e68be267ff995b22211bbf107db3614cbd8eed1e6ac99f0e900fcfc1c4b325b12e43ab7edb3e361b397f52298f24b1c361a9e03e9cfc99681d9e03dcb408067bb35f87935d4201f186836d9044d977d10dc7863297b95d273487f286209090569819825f8d099a392ce75cc2261809a838b11a1fde4ef958a89c586113b3bb78fd2c3ea1e581701ee335d045745fba4bab5d0594d3ce72ddcbeb48404a495c0e1497bbfd3dd38f716cc7602cdc79861bd167305f9db8c552c9fcd6571b435add986ef1b034939006c69f2e51ec96d68159019ac90ba84fcd8b5e9060afc88a948cacdd26b8a416ae21d03b6bb1feaaf15975532514c53ac7ee99193b89dd0f1082813fa5c0eaddac6fc49e492cef823b67eccad7dd78911380725ce8690f159cb1f205d781c1579409721959a297a0263a5ab647231d3beef42e5947b4fccda97da82f92d839d27dfda132d42b44342c535fdaa59f13ef8130b17cdf6c1333e17ba5c949ad1f6fba777c27d237a47dabce40f6a4a2b9f1d45d3b3e3ba43a8bf5dbb360bcbf7d013541a6ae713818fee49b665cb0432448917fb6ea2f0500c7a80d6622d76bddbda3129d3d4080ce0def2290b90e480c621f816def77184f8bd016022749d9ed512bc015a6c429f8d3a39ab618bdc1ac2053ad996ea098fd6d24fe2d3ff256a7181cada84cf14fe5ec8dce6f27bfcd0f739bb77700311515d26c40daffacd4338bfffff55e51641397b49831e90ef772c0fdd49c14e3894cd5b566fc6cab2aea3adbaecd3078dac3ba883069edcc401b461e0e7f60816fd34a22a1e8752b1cafce7dba3b37fbde24b7da1bd51633a0d66a903005cea113985f48181d3958e4855d4834b4f5125b33857822b73cfc908c356e05e61151aafd2"}, + {"0000000000000000000000000000000000000000000000000000000000000003", "0066f07022cd4b851d91a1b28726eccb69ea7eee710331ccabe9e134851a95c512d0bc98c6bab45e4ac90ffe5c8f2408f463de3b24398f27755e51a5b8bdb63801dbf777dc24a19be33777c8fba7da22239f991f0448c867bb5bc6e943f2813c832577d6cfdfb7402b097b3b2b21d62ef9cf94f25aa2a0dfad983f722daf09c412ec301f9785e716d335c4edd79a5672d66c2855d574b11b5ae5bd5b4e368a06c79d4636175b096903a509dedc0f28cf6c779a5597ee87eaff5f5a17990a05b310109bdf6fcc0ac220d5654f2cb3344842890908c34c090a56bcad0860936e22423c2a085585a31cf0154dca18af4344733a3b3eedd8cad5ce58de5506b9a99a698cbb8b212b70eefc23945ca01647d5d0277d599a95aa7e4b77354640e238dcfe1a19dd25552ab531f7c10d2ddd317485258f70e54e13c3b91c5a301fbf3b574f5151808f1478016d61c5a2522de0e1023f145e00c6cabe472c7398dbf952d32f7e9e2fd00520ee95852840d1c82255cdc64cd01ab2bf1fc2850ff2cb1d53b1a313a5d554b1d7725ccd2ce91daff438112bebb41f25319aee94c0d8412f4dcb2239776c063f65bb5544d694aec9c0cc39195a3d67e0de786a10f6690602a15c611a008509a3b58e91674ddd23df0d5023033f5a353be7f5635e40c236fe818195c8e63544ca845f1f708d083205365539fccec1431c349802d8255fcdec0c2d7a9b106a4f7b23e228aa5b04c509a6a676dd0b3a549ce65635bcc89d7f66ac9d3fd81137ba333673350dc2ba984fb649b8e3a26b3d18f241e4a7f4e0a8ac8bb6500a28ddfb51e2cc453a283e085d1cd57f4dee72c1a9b2335b747d6135137505f60d0aece7a6debbdb3b4632471528cf591036161a741cd403a7614c2178d140f7e9ec49ef86b09c36ce52511f26b3e898a6caf4e6561c91ee2e86e933bfdb6001433d2d7411358fa466e464a63c4baee734795f535694eadd5de944b59651272d5ac044ab2eb03c18971d452fa10fd318ef2f9e2519b8bbc5fd977a762bb32ad1b5b5f1729f1bf7d96488184b4025a26833d7630484a34886c857d8866e608a4b07d47d29c4f82e251aef12f5638982554c3a87b04974e972be687e0de810abffcd190a1d855a04b11225f3db9c64bcca081b369253bd7ba388eb8abd7736f73faca69f4ad65a57054ca733a845981b30ff4176bd363d92d6e7fda7d617b4f77f72656283745e1b5025690633128bfa6456079d65bb1291e2f1c2d4246a11523b223b2198ec401abe7cb6f00e42d13bd6221b6312d455672015239c0b6c1d91e0e34795ba30a2a69bb3f58a267ed69d7f1222f62f7bd8e02d6eced1e6e7f89faa295eb83ca81028194563999e58cdfe39342e70895b8e47dc9f9312edd0a8f8988d33bc2e11345c9f46d507e73dc6bb04b9e33ad012403752b0149ec4ffdf02ca7f365ca238bc8ccfa0a14ac96d2dd7713c3e17d600665ab6b9165758f86baee113b43b15598aaf4fc1ea0897360233b82d804091bb0fafa6c8ea0a5c0deec9757beb321e29cca7911006a33d2f462420db5b968b14d6aba9281a56052ccd7a606c2c4975fa639deb136f59bde51f0e4dcf4510e5c6f03238bfc4fb082700537ed68a28645cccc828e79d7f1b835d8324bc92dab9fda587059e55fcb6888bf2c7fc34e215d98922a7e3bb301a10a568b4f60c322196a6847a212cf275716afe3fce196f616b7a896374d0f11271014dddad9bd95ac59537dba2f4e93e7c3ff553068ca4d0eb61c394cfaf790d4690dadf8eb6d737e95390e34f83e8e989779adf35d66d9654b70131bf03c7587b573cbe4cab79dce62563467161d406730b7d7308cfe88d298575fdbe4044dd936aca1d11496fb2150db476093146ae4a4a6f"}, + {"0000000000000000000000000000000000000000000000000000000000000016", "0012abbb486c2095622f0530c5419392f1a07d1a3c037ab4440cd0214104d002d69da5fb6b27e49dd3a5084cfc25520423f4bb057791ca63619e24dabf439038c44f4d26f194b3f26816a0d7ff519e18ddd78cab23e574a967dbf07bbd29129a21698af930d11a84f62c7fca5755924e69509b134e9347ecddaf5698179f3033cdc73dd7d819fee3940cb2d2716951225f7a763b198c89b855a8d8b8c3b66515c5e5b2225c5e1e7701298f70550fbc448f6035efc772e1eb34353b0dd308e87968d7b146519c6332dc6cb7b8268d8c7956ed0526ab53e6919637d0c7c2445ffdf1be41ebd52bdb0aab4422131d20139a55a2d857f547ae931fdfd5bd0ff2393a400afab482f0f5d2a4720df9be24793e382194deab364a008db6e7e2be6af02dacd59a0a8b4d1464faeee212ad26f4de44b329d8ee0e3edd764552304b061d5ee6fee1727c265f1b4801bba39a5e571e023f098d344642d90bdeb18172e7ccede4b090d377317857126455ac2909eeb68940b50411bf5292f5031cdd86213ad48815cb1fd9ab78ea7b6f1579fe12a12bfc65de8fad90539b942539d0499a0152e56aba35039fde89b1a266652cbab6e2fccd87ead3f7194acb0946433716d3a2c4aa4cb15893b44898696487caab06eaf09db1a7329368c4f2a2854c7a24efb3ac9e6f173a839846928cece2c0a86ab8c45332adf897a838156ca77c7ad288356489e3a1975311e9508b1cbb9a187cc6db48547d99c84cb450e5ba645e9e85fd77ff3b72fb47416053e1a0d7ca0e45e79c929cc43fc3ee435b04492f69e4cd87c4864deeba76a1d5b0b7a666249b5342d74ac0767a94a8109af3674e39641accaa461cb5443be63d45552e36c5843e909dc7bc138e64387d7f1d80519175534b6547d7d212b2c2daf802b548c57384c9f1f3f7c607c6c632dde02b384fff9fae0112877b451ad43bab1438cdb2f7b3ce77bf3a26dc13a804a4495dc113b88f3155402397a0a03937c02e0e299dca552f6551df76817d0aecf95ce702d06f191dedfeec198990f85b25c646d648b48d95f30fbf80012e3974dac413b17556525ec919af6d1f9430c7c42a820b50f3cd909b242efa2e6e5a944ad76b1e5433171525885a53f164b6a3e380ca2bceb374f01fa1933ada6346dd74ae53fc5c764ff7781a567547d9a6600ed6d7801d94da713226230d47df06c5752a57cfc0221e0c4b3009514f5d2c4252adf3e2399bbbd822b92b467c7a6ca2e8a1986d33bceb7c1fed1203316948502487b4bcd96d090b0ea7711ee14eb64ae37a18cc14177aad4bda9ecbc5bd823b5a145ebd3cde9065f32dbb4414e3b24275d20e4529c8ac061e73d1d3feee18a612e2f8c6772c56af51e125b8935cdf72b6fd87281ecaccc42dce5bbe989905de557e039b333d69ea0180e6a6e3482bec7074511c11291610bd0ff8435a1e8b47a0858b79133776b3b333b255bb34ca5aaad20b5bdcc3878329af57ba581265c70bbe30297879ae36ec965e76504c18b94e665eaec443c209d0319d96099423f284a3c5fdc74ee1169fead76b2ecf5b6f9210900a888859236598eb54aae75165fddf411985610b420ddd9ac51be3455dd460f8cd56bde7ba4fb6c02683c703ea21b451794b747be67b266a0faf5fb7b702efc30d9304e1e5bb9a01582349d54916e24e1efe0b048f98f3cb6b08f676d0b668abba38413ff5db6b272435680a95d567241454dae7bde15ad40f7c92d235605c5a2c5b56b16b25c7b6a2599e3685ac94c8b5036718b4875361f32a7a504ffd87ad32f9189e1eb82975baa8d0d2daf92458182748574f2770cd9d1c9505b3095225824c06d1054817724e50ce400d5457a343285eced8782b21d85716affdbc326224ecff3150"}, + {"0000000000000000000000000000000000000000000000000000000000000003", "00027229c452938ea70bf42bfb67ac95cd6d1d00fd2e206e5d4698d08be38733fa6d5fcec27716f4a77b049b93154f9b2e11ae08a069cccdf6b453437fb7d010f1a1f32b5b7b0daaceb194615622f5692eacc377082eaf3706c3ea6b2f79e2d812c1ffdd28b490afbc149b52f0006185c3624535ca4e6778e2781997993e32e38bf1e87401c3e142560218554d1e658038f09254239b3e012e9f538380b6c05fe868d34a2d1fb0eb0c4b399d823a9c9de897e7c0cf6b1a7ead90bc50dd1c02474ef3cc166303e1924df7d29c7e2089d6b6723a75745b61a63a9f821c87567970c76a3c1edf320b469097e8945b92377d74d5b99b7587bd858b6eea321082e6787255ecedbb9bb18f31e92e4928dabf60291c2758e8fbe57f19b08103c3156672a5701b0f3e5c4b07fb33bd2571a376d4cc32b7fcb0cba09dffce726cc6f42d3922018f38fe47f0e44f41870f879dd4fc013980d1fe97b9e3a3437337fae41b20eafd5cc4a6116499cb104461eff772a70f1f79077a4810d55a06044200e8f2e233a357ab90d4e76892111130910c3b29745ae6081ae10727a634826ff6897f0055bd7a71050a6d26a141a3f27659b389d3b714a5dda61b76e0066a9b30be5deb1f1e3e16b656d4b83ebcc0bb165807e113bfd3ab9e21b0f772e52321109d49ac92a33410d835807a879630ec1d61769ac04a620de8bf42ad043d6bac5004214a90a181ac77c838f6a318d69ecc18fbc63961d40502d2bdb33370e98fa58557ed8e8d086a1771931eacd7e71672078ac4ada9870b9246e05826b30e7057a749398468e1166d5c8f3efa5c2bc608143a790f035d5984d6a25045eb1c4a07cd3daff44760c6c74418777b4038148d143fb1a5c4b011919513a14ea9aca46213e58be28eb3e8ee756babdb3cbc15432fe28aa678c1e68773667643cfd11268dc7eb10078842afadeeb5f72dce239b85d7bdd51fbb805211c6bb66b902763d353aab353989ca19a268c34436e031018da9469d669c87d845c51d40d6965111018382e00ddacd21cf0a56a21233fd0a033a9998d74b2760def9ea4f64a6f11d4831474ba62d5e1b03e75fe3523517a09e6b339cdeaa513a040f6a6f302a4d8c94d12d703d39e8e1201295884d4d7e8a78e0c6b33f08d1dc386f07a0e5351c40a431efea3c37518b038ab1801b5d121ecd1967e9df732dc27d02a78bc7b1fa51d2d759b2261d15868998244b02f3a449252b6d51f5a133b10b33651f46bb405ca1c25f8a1e7a5a45fe13517b8fe759e18505b926e55b7f5626122ae16beed8e0801d8df9b9f0d09853d60cbdee2b549bb221a7b251f66bd80f2ea84c175bda85b9867737acc171f4b3b0c47be34cc636da5a50e63965ca63145ef4b332a95463752beba55f98f1bef570ee1e0fc7e9eb0b8866e00989904bb0c20ed1614006948ade62d302aadc9e40830519cb3176cc1fc0080cce1fdbca9d655323cc41f7c47d3ec0e35cbf77998debfc7c6be776955b28e2c29d4f1352387e13cb5e84347ecb8beebdf982b7a07adbcbe630805174414db766065034f1571dc78ca1f19bfeb7e1d2cff7cf022300e95ab31f200d642b20d2e12d7d7fde863f878f19b5f7182e0e6d73e14740e9f1151e7c4600486602595f9fc4689e76532695b017e707149e4ed0b6a7cc665db42644dac1a7d28ed0a26bc2dee4af88ea5fcc37aedb3872ec5a8bab9dd0f0e851ca185e39eadc977d0444e27b2f0aafae44f5d56f42b17bafe21ead48a80d5628263985fbd679606263ddcab8721c98114172dc4edbf1e80383c72a810ffad98a91dc183f1ece3aeb3b5fc01a38fd0bd3213fad3e2ed075d52eb2ee8fa774e91027d605a055c1f4831659a92f54716c5e292b5e5831672c8b8afc3"}, + {"0000000000000000000000000000000000000000000000000000000000000007", "003b58a789a43e9b6b98f2155f4659953c81555d9e1b93f33dd8487c55fbe9f93f3c6f6732cf0758066715473740121bcbb31d2673de9adb3e25884f2e9f071b1d2556ebd5cdcd3a0b1770fd43ae56aef457dfce041e7a36e8d11121f2c800b359c0de6577908e5aad330399edc6a8642f64f3c554b2ab0a3d83c3daebe10a842feafbc5a18f36f250de47d60f1f866dbf92e21b568d90c6c9efec7009aa84835a4616b4c43fb77d0108b19cb3c3c5e776645334c9c3100d91cc9aa6280c862c09b316f38f2486e70ac9f4f341cf5f31bfed0777a1d4f2205c9d848c68282e5b0d0f3752fd1cbc136d8d7357081d7b093d659291f9ca89986a920cab01f928bcfa86eb7f28f65450aafc77052a225964af0e964f018eaadb93d477b59d3dd685919979b4be860cece9754fd961e9689a92f0dad3ee760bc99aaa6d284792c57e54c88151da3615704002b73298de031e00b9ee4659512cdea39821bf28b71f9e618db3365310e81091835ad19d5e6c95289d4ed9ce4bbc39a03925e1c957ad21b2d9357c05059feea319b365ae9068502f5b9885d7e1476aa41884dc521eda99793e034a0d608459c9a6e665ac7bc53d39e006c5c2a7d0a5ee24bd616c815f3941b8a0256a6ec9d72676fbdf140219480aa6dd866b51397493d1e6a2d60d3d5b789e671ac394f985620c0168b824364278033a1e829b7ad7065eb8f10b033150a437f48b22634ae2900ab4a45d190938e615d95e6fd733b5c1ed44d2afdb2a3f6f0a198cae5ca6a600fb418ee30e92f1139d0cae3e1d5f31338c84ad1bd72b09dd63c3661f023d757cccfb81073b6a129f079d17dad8211f552387fe5f1bfa47160a2d83c310697c795be047254944727a338f96c6a01163fd7b5ce45f53261114abca4547958776d8eeed39401ccfd55171aa93f2d4832b6389a70c939eafa40125367d8052e671857e82656a5716de77d39cb9703bdcc31eca5d43fba1835749e2f95843312a1bd07a02808d25b24ecfedf6d88070f68638da4432178170587975cb122138d3b42be9a154530cd37ed89f65fe109fb8f44f8fb9e32bfe820a8c267378cd593b2517224c16b7a1c9b24c880043e3d75debfedef47e3d9c15161cceb54d7eb0767db29b276a393798b77d970b7275877989a0a1d90f43675e017fb4171e94fc59a408845cedb8156eff8bd7a27b85e3230531eeebf7242a045df482253105d95183d4ee67636142423ab85e15f085ff115a10cd9df82231c123ceecd49977e3c12911cd1cc5a2700380e5556729f0d0f2dc2efb8078120ab48dd91c9204f0da71a9622bf0f9c968ce8a7473725bfee73a4a61dad649740077cb46afedf7cc021244e165a40fd370eaef121b9c1800acdf26fbd11133415ff15e52d50cee1d55bc6dd84cd5888b5cae770359f3c8dd5214b2ae42737eb4d6f925010ccc6b1d12e8dac86b691fb5d3afb516f6cbdaa1efff12aef0189e7a4f1b5fa0bd8e73d281d01aaa9d6abb2ef8ec93468d121b653d9996403a7c04f43b5f7950fbebde0dfee5de50cfbbf5fc6064bf1ffeba8de2fef7a3d734b21277bed7bc91f0f625c740d058d6a59cbaee4019e67b69351f332bd2c0f5a88577b5c589594efbe1211b6e0b5dd3225ac87d42f9c73542a20a66bad5800414f86a4408c73b9d24a209dac245d971483f9f242ae6fbf7ba75db83f95ae363192f91fa0f9dd9ef420dbd7b9d01e3040f86272279a9f1e7c70b1f7cc1592cfe9ca8dcb5a7edea3d6618e4384c99c64f3c66d807354e42a778e777cffd30e26abd99e0e7e1b3ea410bbc5c604bd7aad31ee94275c7cba742d7cbdea8b213177350965602ef06d30153b7d9de2924d93086a72a0eee4c26e7bb4d9a1b72e47af0d694dd000b4e38"}, + {"000000000000000000000000000000000000000000000000000000000000000d", "001d3a5e7d663d53a3234107da4892c638e5d5310d03647e6b65b127b1c818b2ee605aa1369a9dbc57130c7e464079ddde53f199c52ef3edf3b15233f65cef12ac3b49fddaaffdc70a5222175f5e6d814b9d04ed0194747430122a137e0a91048e5a2e69480b91a8c20b181dc853868b3c8240233121cf11a9a4151343f10bb4d3e7890d9a6f5b5cc2c66bad89fb0fa6fc865e22ab04ebc80d96efbd4b124ea97539ddf2b5d5572501833238f2e06f6d960ff0d6c4f3aa3a0dccbf94100e13c48797954883d651453b835701eaada9d848cb0bbfcd7fa8103eb5a174913bc06b36958db9f64dec1d2a77cb89dbbb49724d9578df34e306e069bd2926022bb3386f255b45f0c1d4640a785225445b188af30806023c19cd06ab225811993829b668979747180c07b3611db48e4679a36011592ea328b4c720dedcf12f669f5cd95170f2b01673f8b6599fb51921d05bfa01aba1270fdc426d87e955034ecb77ca9bbc358bcf11fd26d317aa8787cf98067ba9f9430616bedea8df0832a654839827632378116722b6d578fd2f4c661c13727da103519fe5903b4414ddfa61adbfc3d63df107fa2dbbf094a382fee5f428976ca735a275ddc6373496b3b4345772b0d345e40af1ddb22e78f2fab84e0f7a230d5d5de452f60e21fe5ded0c6a61d37ad9861603ae291a177c1f02a184a2cb29cf3734325c0ab606d01ec2e83a7945f9d0d72daf7c1dc31105fc12d17abb347c10a939b3df7539ae6d55853e88723d4c7607b1c8f82fca9336f6dda8ad60f7c43f87ff9c86f53b0ec326459de63feb95ba3e41611fa31b20db56ef0bdda6163f39125bfb11b3baa95090b788639edc0011c75f34364958a0dc24547ddf62ce1b704c3c758a3044c5ebf51d194990c4835598794ca1be5b96cbce32f59e245d22cd59e723c54416c75515fd1e5587450031c008d044b236ed73208022f3cac590bc310e9c0a170431ebeeeaa1b9a012f27f226072a0b4dc47ff29c75deee315d1af76e34a053e78dcced8b0b7df192c6249d76ecbd147aab54656a2e28842d0b65dd00906c33fb7a463d2b1c06fd564853fd4d28821d6cc8b2132a9f69a6c84276f8b62dd141f3672f2ed389409104236e8384eb9d34379e366bec2353a3e07f22f15154692f4d2221e33cf2e6b8ce76a1f6aeb177ee8d50b6d7e3ef9db45d595e054eee2350de7b4fabe54a9178a62216720fb814ea686753bb6ecd6f2739a9d22134c6f17315b11bf2242332d02409e0a7a877f82c24e5d5485dc6c4b9fe5aca85942cfd13b266079a21e0e96e7beab135e7b58e06484e9369d9923c16ad6bc252bbc0c94de7a7ff1b5b42768b440320153114ce2178f00ca7fe20b09f545ac35dcf9d99f36347a0cd520b03e632f16a34d8405251cebcb7846475db7343f00cf75fb9b0f981ae8f4302aab1b07aa00929ed525032fb760724c0f53889413ce633a811d3379bc72df05fc9e1b9fc20c9947c510e28d1c32287553e73e001c42cd3f56a4e43943ef13842d600523c8ff3fbb290292e672471ed8a1cd1c9196c92a2e1307cc79b4372c0897c2c5a057b914d2437dc0b837b13ce598575508525db5b9451ebd486241ed47b1d2eedef2b7893b65b21690cf2791a1502b1a56f0e20e331a9cfc8dee085c21456d4e67ae85b12126f43b5e4081eaee897c0faa449ee36408ff279024fde1d8bb89cb05f67aef35157c5d9396606eb30ed63df677450634c19a970257e1151ad2ef1a17bc8c46cf575e21ee219f5883c50e444e06ade9d5399c95a3efb124c6da002ed608ec3c4d53dc1e611517885c059195cf84c31eb21de5001fc17728e0a8b0bfbe2eb8f514ebf3d29ce256dd4939339c7a14a644e5c0caa4445adc54211fa4ca2789"}, + {"00000000000000000000000000000000000000000000000000000000000003f1", "002d56c2e04ab1885ef230446aa853491c0af04f1b4d54bfcb7b5ec65796b9f7dbf9de5e06d9c5775988105991f35827dc65b8a673cdb56a2f1a0a36f5c82a2bd4726d6294613b4f5ba335162cc3470bab9ae5280082636f3fe2de79e2d1f5bd3ded7cd630b572813e43647aab7d51bd9da4cb4579b6d8d3e3099d5e8248211d46b0dc158028c5da1347d1307ff68a6657e67a313f1341725da4011ee1774919fcc13e1a3a7e995201a09f0ddfc6ce5bdcf9e4fe9c28ac3a0527358e391a6d020e4b12a6fdf3bba524005bc7be7ab638f50e01f5e79903c122b76123f48c9c4339c934dc9ca02a49e50293311f3c4734bd696fc56ad9ead62bfc2b05051261997e535f2759c242d09ac66f1943029f1e0f1d604f39340c6a69bef18998d3f18a978b581f0f460c53dfd732c92f5f204fd34c23aad653c601bf8def15b09b95f4df7971997b495c0bf7d4dae13c19bae0038539267c934679889c77844ed2b6aaefbb7dcb3c2183ca521d22c319d675a4d7f6e821b9bcc9745bdb11f6d154ae1089bdee6173c1ebf69dfcf8894ca4433586342e47aebdafa26af3e0e069450b24855cb3470aa7db853a257fdb6034c15e87b77e84e3f5690a7720f09740d7adfd65750a53635f5f6f70ed64b411380d9d2feb241724d312b0313514acbd394930f5dce11661de2c31995b4b6c5962e2f8a574d6e2c83dcb17057a4b6b0e86f363bc41529ea93445a8b5ae39285a323d9400ec7046ddded9b334f1698b4d368f140e0d07027f0ce09c1e8974bf812968d359987fc0b5ee6b4ce847931b1a1dcda07236624b55505b07435afe960b448988f29f246ba72423f90463e55526466ab0e21dba872ba1c9dbbcc0975570fe42a99abe8ade73be1304de1cabcf7efd7da2c9e2eb5b85f6c260fbdf3f23ac240fcb89175c49faf437b0e34c0575aedfb4b700990ac41e0d43897d9746f48e4aaccaa8ff1aa6dd4da56602dfaaa3e55686466b8eba81db1a5bdaca6e07381afde89aca03747d90bd422440c4579f255ff91444512b3769427ff36ff19abf51ac5b149cbbb6f90d7580f494a33447d9fad0f516bc19c45bb5857a5a40a3f2241d611f6f9b5f36da41ed374a31533d004a239c2aa63399a6270cfd46f7da5ffb6e22b158d52442f2f5348f6dee85fad5471aa967d9d2a1521a087902b629bf4c99ebfee383f2490bd22aae74a0bfba5820fedfdd259c14ccfa840595983b67b31230fccdd20af299f860c905e590ed50c62073d2925919dc14d40b055d604764cc07cf2924967de559915050bf8af004b9023e64da4b85e4df31dee0d280a2d1977c80ec1e04c7690d91f076d47b3319f0ff385df1d8be5e2f1bc45c29f4ed1d67f9f794e62b68d26f51001bdd3c2ef8d6a2d50f363d9769971bb2d426771c947a7bb302a00f15b15f328153d4e4d3c07a4ac19bdc9b188e45998f072b7c3d3ff743657a77461e13a24a1e1e8f24a513de999a9101f2ac837ab0404431b8ed2f6bfb292e41ab43ad7753f56c15425df53f517ffe1c517413cc86561959267b001842b21536ca5a5791b3e47d3a5f06c8b05ac0f1db556772b1cf2ea34f637cbdef156dfdcd76b102438b284a17465e12ff80909c7949355fb7abac6d4243ebab1770f5ed8115fd3bd195a00379859bc2ac3c81710fd355156f4a31148012db5648efbf7bc29d0c1709bd453f9cc34bc73aaa5c6d5c07443d9b1f765c0fe2477113244f9adced56fdd95d2ea82996adcc3f5897a0d89834dcfcca32147466d410a2d0f8de9d13e514285303cbc273f902d45048dc25d4fb102cca0fcfa777369ec4e8962dc1875457612699155d28a77407857c79e97463b4b34ec89bc39e3dbef44437b766adf76ac820befe7586f8d1daebc4"}, + {"000000000000000000000000000000000000000000000000000000000000000f", "00893317f3e2b0ebe43b6437d0ea447d629932d94c289d25cf206b6dbb7d23e330c348b338f135fde6890c50f1ae1c09b220c09ec62ca4da5dd6472d1cee792974e70918115059544767d168ca8f422dd63ada4707f6752040e4c4018ece56262dd38e7ec0541d0225115ba61b7bd1a9e1caad32be1c326de96e8c9e5e202e86d9bff820175f25d1b4600742367919fe35351166bde4342aa6d245fcfdf6727c7e9ed234d85cf13d0596de227f43fc410c6261a2065ba234f8bbd5da36360416d88fdfa2c3cec7262ceeeb1bd22cda97b65b0d821304dcd862cb795225615553f0270ebcfc2b331975a38acb3bb53bf13c24e911e539d59d92bb012409a5ad8affd4fe09087f0127fed9200097fdb2db7d1dd3b692b66705cf732d61df4d9cb2ff24d0fc5f710d211e3f740db38c9b95226494a457da4bc71e51580fd256ae05cfcdb34a17b731323d4d1f75a23e13aa0112a3bcc41c1a35cc186258a3c32e7e24867dfb8702ff2c162587be23ad0932b938a9e3e0d923d1bf9a02ce137e38e06dd9c32b09d845554e6ac35dba1f7d1e78e7f6a59b88a9b3f762a8cee2df5d6f895bcc4c027bed3939823933e5c5a35081a3b10a2954337cab214c897c721ac39feb1df24784277c9eee37df962f0666042a475d1d916343d106131d05f4aa5c51d7fe15705f454e89456fb541db2fef69cc2b0281f855ce06d1fffab651226ba51c3118e673dca2193f99dfe0193057c5778ca24d6cdb81ae4812b8e38ce03f504b09165ca636ccc3a173c0130c4564f36ee3fe9f2c57116f59c7058543b2a0d031f45ba52f790c80ef4dee09174aae5baeeeafa968856e1ecfd0626c2475e3ff28636c34d1d69241bd648a04f8e17802ba4b5909990ee6bc5075478021cc3863b04db2c7eac9f3dcc3fe36bb8f8ab9143371ff94ca2d6be653c2ec67dcddb600aedec913c5bdb259cf912d05473b1225fa3e1d64131ccb557c2640c5db0de72fdccc25721d4c7ca99a0f7e8bc14c633d6337c97587f8656801ed6f515269154f8126722a0ba7ff7431c9fe8e50f4c7e697a52603756f9793cf889f0f9261d4c56d430d3855b37c83077dcc15fedc672ba3dd75f10335975d84e0cdd15d08b7ad507c9627856aaf652e82fb227e7b9bbb778d5b5605461fa285f3974e96b7dcc5aeb6b21b38e7c70957f0d313f6801be776c2783fcd2446cc84b8d852270e9b9c0f8c9fad906e6b148eef8d87b720bea95e133bbba91bce2942d4e6b2bcd27d80a11f5a8d3f9315690cb03d4f5327aa5e52c3d6a32533592f3ae652106681d095517ac7642384d9d54197fd68ee8f2a8a7329cec960e5a87df3de685ed2664a5f998a3d9f7254d34ff0a52fb837ff1225d24370297ece9dd8a005733ae73fb81e6ec1365fdae946fb78e2c5e8de0172043944512ad2aa5caf9f659f364226d2d0bb5c20390e31f60cb05f1449ec84e172285fdb49b5a378bbab060819f9e4c1f67bf41555c003f69fc772b7fbf50b0f39f5a386df504f795b5461a1b452494534783fba11f184b18b19b5cad6a953a7b2d5ffe7b399ff9d973303df99b26683695e51762940e54c5a28311aed2f1c81ad2c23673ac1487f62d1bda673b24abcfed6f0403615273f7455c1b7b585d5a6ee4dd5c15afe32de0661b7fdf1cf9421cef3c86389794f7b9de91f5d36074f9b2ac0a429ddff1cf1d1d57c6f4cc7d5b8733a0cc91912a1cb7fb4a54db7b8bd6282165d361ce03239a79add42923da38992551e1f7e00e655ab56d6721104d275d59f45016d6f01d1baf830856fbe14be4519adc560cde02939f1d5d313627ff67db99173331523f2f9505755f196fad835a2a4783e662047144e1d42376c14cad323cdc89b1438a43be4276fdffc8f3d"}, + {"0000000000000000000000000000000000000000000000000000000000000040", "005b32b36a9169b7b99a110fbec8837486e4bca13110c247c840cd761be100328c07a10f3ac6b05821043cbd966461162c4597be649dfa51939df4831fe1ad74da1f150829fb87afcac8f832fc953a5947d78f3f050d186c0102cd691374560df7737c7632431cc6df23e69770cd166ef8b9595ba989e7708b542affb57b1503320e7ac676909c4231ec40129e8b2a42fb1b8331d1d3e3f47d86e5f7f936cc54738b3de983f01af30b2b76afe2c62a63427311c29bdbc97d0c40d4b94a47a84ef55aaac15bf05586d36e6a315df9983e990716be07eb910897936a5b918af3928d5cb82fd8a10a2a0c73c9b65c12b5c8d9b3d6c9d2dc359b0cee79240c8fae92f5accba5798c811dee7dc8ac72c8557d8f23ea7a1bd6a92325b8b3c2b7163417cd77a19d711e0dabacc2f6ce452e96fc04d67153ea5d8adb1ec2e1171a898b26c9c30d1f83a33c604ff77e5ab8fbc13b0216d7b9e74ea22d18e58522233329a30b777d92462c969b053025224fb733571ea749d292441b9ea0d605a4aef04798470d43542378251d78edbd5fb36fe6064ae9eab551459948c9672b9ad07d8e15bd7c37700230673f40a6521f6d86809ac860a642c334bd74a006999336a34a1e55853de3f13b2352d985ecdfad3f0c242318d1c4f1dec90e814c2ff401ccf5d5ca1eba0e18a1415707ff372f72410e0b58db9e3428f95dce04e2c847d9495dbcc32014bf17a6b3c61ac8dbeacd0d23169cd550426f834904de8a33002e872197d69c0e8b121aa0c6b665331e85353d68ca823ef2bbac3b295a9d52baefac49ab8de55183fe9f3aaac5da289905898414a658a59cc63f309c26c36c313861789bdd1afd87ae0f86d6ed2c359806e4508c7a0fd47558e20ee775e4ae4b85a0b92d8231e035828965e3fb1ada2f86a5f17a238a8b7cfea8237c58a2670a79d9e5ac018dce55d7c42f975bd2708b07da46dd1838ecf7e21a83964c34ac6055d918531f9156c912a390f9596f1553a659371101dbb7ebc1d75be5b97cb3b46b6e522b6afbf5ec65050175a053838cc4683e5426bbb3e31065d7684c9665f15edf1422263898f957f3f09f4712869b2803069648387292b92a96aeb55032fcbb2f17f4a137fd90e2f79cd1d721d1749d3e0b8c35107f2197e29456b1671fcec2966f9833c227382e9c5c5d039af24e0e302dd58d9721b6ecde586942be1471e92513e742f91a47f75d01e2b17bab98fa2eef557ed9231e0ab04ee186fd2b032449a7b5d8851761d80c064204dd87eb5d17a59e6525a7b7597b45b8115da03c0b4a9c0baa1bc953889623f6c6e9696d9de99fc08910b6aa2c8e5faae7aa72b356d7fd2a4fc6a7df831510f3f168ec4d3337a1c48a8db2f25cc2e4e9b9ad3f16dbbc649260802942438287eff74db641b2b229df01e9e6176228aaf9f13a449ef34ed8392f023908e57caf7f70c82393f1b0c569912ce55576b595ffd33406e4095ec5075034d0af181f5273e56e3fecd202261ab4f4025494420f402c8716d1df651a953fba1a4009b7872fd4b1bbebebf8f22001f3d8e7a7dcbf459311265a728fdb77ffee37b1eb2fe9f92d5f5876f7ce0dd35f5277e3fa35436271da1b545b6d05cd0cb4174262daf665275bb9cbd6b7839be19e8f3ee4dc9a9f02d033b39d9092fbb4c1434edd2a0ac511adf84f70194fc6319a0bdaabdd7a2387551f3255d45c763093053e66cdaf4382b44bdab21a2d2f5b35985e95857a074c8ceed798cf03bca2d22f81a2dc8cc390bc0c680463e6354accd9d5b959551ce8bb83a2adc33f2b550f1fdb6dac0a71853d8551ac326a34c1333dff1c9b219f492e9bd6e525dd33734747d9c8863d6c9461d2533b9f301f15e0b8b242b9ff376d71331c4d3f230a"}, + {"0000000000000000000000000000000000000000000000000000000000000006", "00080440fa43a4305708d1a60b2db84114295dc0ea0c5d7c7e508323fc4da1820298da1314dc3770737729c136a45ccd747f7e2164cda6600c5de4f070db144f803cdf809c421786559ba1f5e7bbc765453d03450589bbe40dce6e76b507d62003f8081ea99cfbc1a052aaa4a45fb37267af0cf5db0ae272ae09c2b114670e7c731eae4d334b1d9c11183850faa5a1b1578de225af72a95e2b5c839c4ea46d995cc6e32fea5eca8700e01cf97b344201d5a59090f874138eda581f91ac1411faa6c62ef4f5c6113320e8468e1f58be5d760b020905baa504f19a4920d4d52fc48f22b21c5aa28a296b474d9fa0edad55744407a0f80305a5177a557f12f5afddfc9698639c4ba9b08ce5d2f2e74a38d50e4694c4f2939ba385a49d8685d65351e38dfa3f2e3c19349a5df5b197c3e0a742e660d180a6727b1f264628f08308310ee353818a72b6b9f4169db62113695604827fdc595b4d0b724ce2d4055cef656bc49b417014c5ad7183cb8dfcd49834e57cf411c3ac04bfabe90b4c9c4a7b1ce7f345daa32fa2ee7d72250799e30f0be54fc7fc496958b022fd82aa768f6b6550df25b116df11bc332be9fbd03952ca09c9b0c98507366c8f1b1aa3745e546407e77996cd5338058dbad79bcc8418b3f4cedb6c5b59aba974920cf9d3973e48bc43f443b944232aa42d47a21a1a684c5b519716cd9dac4e0536b9d0f4842f05e25f133b5d21434512ff9ecc3b3a79247b419df9c50dbbb5128db7505e30c43825e30888b9f7671607a3c869b54fcf2aaf0db828dabd422e3d4446c1ece4f79d94f683b0c7d11b0115fa2d100c96bbc8a61bf2e7da9ef1a74145b149afbbefb11d0d40693b6417dd35b66e2b678876d7471eb1bd63090dbc73ae75cbcce7ac3372758d7907ea81cef43d4b49024f9762d6b50ec1c0483f0554b9b6c290168c5500322be3128f66fe8ed166dcb3d6f8be2fcdd26af70d81d2a1c9688fada806389b266bfdbae1e71d2b611338bbf033886203fa57a545b2ecd061ec62df23fd2ea19271ebef42df8b14178d626dfc725e601cbc33052abaca9546a113ca22d31f3e9bf1c27bd7fa435f07d3b9237ca9b9fd9dfae0876db97d86a0fc1902fe185de9dda18e0181569451d6fdfdcf0a0efc9ac1cb51df4cbe1e70390f98d3d5452ab658719ef11747c90b0a8e4dd15186bdd1ee561c44ed235261997fe47023ac7c71af52ab5726a3825614b6f8b8a075dfebc00d9e5dd8eacfaa3bb8f28373e6c75ad5c7bc9224461efc561f7f87df65ab973303031e9a4645eb3ef4f113763d1aea9f82f5d54001cf4aac06ddebee5b835213f4778a8af4a96bb3f051b729720f420e139bbefe242d6b5ff066c5cd5170444d66d7edd7a1673e98996b1f939097345e2dfcec78588c525c57eee4ffce4606749a8b4bca77f5731a31c39ca0b1267b74f9699f09834c8c22f2d901b53051e2e6b78e3934c470c1cd194f4bcb45b41501b78a03c614d8ce8eaca3fac9692a94841241342c2ffb4cc3cfd35ccf392a19fb9e5e11c0341853110650e8d705f5de303c79e2cc97df721a916a25a0f7971bfeca7463b8db92e95871ab907d2b1496254b8c99aa776264146dbd7282eb98db53aa527ba580e16d3e9776941678be53eea64496967fb70a7d2167ffc6c2b51e0b948aed2e553acaabb6a4f919905d0bc84830eff90e8497e3d4acddcace1c560f0c9c2903b7c4c2dfb4ade16a3df6a8f93d92794cfe353a3d64de77a62dd22f748871ce0c9e663eb63d3d12db28b05328cef1d6d7d3230f3a46ed580c0eddfe69702d0971ad8cad852cd815c97d91c61292be9f61167520eaa191c68cbd1b24b31ab82b71446bb3aaa31f429233187227b9ea33f2f09261b4ee975a5db5ca"}, + {"0000000000000000000000000000000000000000000000000000000000000002", "006f901c59a010c72be0e2e881e81a61565d0e0a97261214ee04d3968be764e43e4e3edb9a918b596de90d214f243b243d2372e99464aa5b4ac1650bb8f65b0dc97c089c92c0af49a55436c5b3597529467e57b706dd3c39eb077549462dc11a99f13729c538ba656337178449b7d4fd10e56e5432f374379f1b47ba24fd1b9e9db876b0b8adddcee3f0e5776f2506e4592fbc4a654712805b0551a18cd8e294faae7affccf8b57b0a80f79219472ea69f3fe11d4d93bf59c37596dc1f2e028bef28e87f93c0cef646bf61918a581fd6d6ae28038f2c8ccfd6437649452fb74a8c1695ba357cc82ab20c9229bcde4ff3c1a2fe15e520e264317f32351430d1bab4e00ebf977c63ff3bde679d11f08e1da71bf659fec6b2ced3980adc5aa4e8bba73cf71cfcea14f0f7992988e005c49be188aba80bde34b097f7b1694a2bd2a79ca5dbd95c57822b67d232abec56723001401cc1cccd886f5f239982504fbcfec461b899a257384fb3a359be15613ef72becf64445cdf1dedd13069c25178c483de9b97550dbffc70e75d4d69683be1b0885b7564cfd1f245cdb268efcaa2acd653ce4a609ba48ea102342773c03b10eb470a3acc0d76f71b014c71176b548d632b01ef34acce3eb22a62ebae70f10da2f2ed05c3985572bd1f4d9a8feeecd18bb7d16207f6d6920700d759f28d3396c27f016ce2579d792083a8e4aed5b85af5cc3510c98cc19a6dc947cfc400c11d90b052ad0e7a23f85289b4b4cb1ca28161cbd0d4ec7d00f0523df792a79a738f9b99e88b4da277a1aeb3bf992b93f03d1eab1e8d84b7768ffc152d1f20e8f97d467a17691c922c1b276100b9d4bb2fbb8de2940b2fcb84afa9c899eb656ef629c46a5717eb1ec0ec600a4fc04d45d3502247643280abd9db11c88d35888ae8e635b057b0a670589233caa1a4098f4b4cf00c36fc6279609a1058aa014030e492d3555de66e70b99e89efc51df58b586c2f89f2624be7b7857990a050bfa8f6a0bcdab4ad17180a44ca6be843cbc948030236b97a1aefd47aa7ed4a3e955b98d2c7e7ebd650dd68b698dc43b3858a7e91b3d73573aa2447ec29b433ac6329766502dfcf9c8555bc9fca703701d4ff52fddf4c0c34e23c1f951f3f6d852d94a4f613e57307706b51f3521caf733c3f881434b3fa70474fcd97c0478d752b4cdc599bbb2574e00526bb324ee1cf4351fd71b312d134a998bf0632c57e8e172306279f72308763e6753103c8786e71895655b403ecc0db9c278096b22fa978a74ea8bb481cc8d66d0d8c825df06ea05b44165345bc852e47e0451cf475c159de432beec12def11f4bd5266f9e3ac20b4d1c8c3cb5e6e7ff351a0e3feccce21d4f820ed26a41694cf98c503ba59f2dc7d9b56114b0f5f954b7fca7e987775a12bde18d00d1b2c5b605a38f8e2fe11b64d4bb14c53cbf320839056d9c5f1509d2ccaad48b56d05cba2d9a5fc3ee035f94dc71ca91cc8e43d05d7bffcad92415723b3707403b40810ce625be9b138ce34cc3b61b94741c6c03e55bcf7b5b1a9eda2a420c3ef417412758fa548b07d72911790546c84202e0eb507960b16f1f78635211b077d032e35f81e97094643b7199de9ba17630f52c4dbe3277e0071d2d2f84c33273085187a538062a01523cd23a18476b9ec210f4bead92896b2b56c8a306ccd454dca44eed84d1440082213039838b1770020ad1841d6122929b170db4024036014178d1f676700c75e2a1a6474da78ecfa5a16dbe42e9cd979a12af092f754a434e0457f546c0c22c66c16db76cf4ceec245385a0c15edae5473c92ceebda0d331c325a02d00a27799a22d7f9d9e5c2b54a08c043f1a88c107d1d0b9f709f79080d7d586d92645a72a4712311ccabdd"}, + {"0000000000000000000000000000000000000000000000000000000000000004", "005ac1e7e9ec960df137f0750ebbef144eb4ec488904723a2d7892c80cb4a622f429301ad5bda92fd58a08d3d7312be01f473d4f16a045ef0566f0759de91c2622b235d554e5a962341290fba5d6891a0c75c8bf090f4c168a696cc953d130fb16473678ce81d16a0c17ba6164ace4870b775ea1ace76beab06fce7368180f6fa53c3e0b3acacc69f37b72b718daed04bd2d9e6f9eee43a7a587e7629698d0dc702ad2b75718bc99011a473fdc8d32d9128fb54a56c3d01a5f55d8226b066e3e5a1503945660549325e8ee963e50a05f6dc7088c28a2e9eb7a2bba736219c63f4b8e25f17384f00cae7fdd741fe02b09c0ebc881de48f39e035ee60e1878ad84ca5077bf30e0164e50c8ffda294034e9814f5262f4f1e7856bb316b983c768806b7b77df74da1de495dd2f18f917243bb9aa19d09212a956bdb72a3a6aaca7ffed6e9bdbf6f45cabf04bb3113e9ad48601ba70e17a11a8f7bc5aa07494d8a56540ad3b89171baff6b4f40f43d8eb3f53d748f2770e30dfb44fff07af9f22066fc9cfff4ec2f953611ff138995ed32a4e484b17b895bcd35cb2150c074eeb9a4011d27f160404c93cef7d6eb5f0ceb178af1d1fc204015529a2392752f0482acf5fbdd29719786de15601e1f6a33e066de607fa0cf1a5a4e100e62b2f58bdf86cd33b5b52cd6f05095526f3887a15fbcd3f78f731c25c79b002fe41eb092ef3f3bbb7037238c028e19e94b3354e35188c4c3e9cff19e655891847ebad9e5735d2d3d70eda488f53c45f230171017d2fd1d482766695b856158952a6d3e0cdbf3b38f374863f541d7e86d0dc280430dd4c654a7265aafc31b7a4584a494811eb874a1c591a6a4254c76dd947b22d794ed734ce9918570f0e64dd7412608e2fe82fc0f5aef760e8a8526574f613c41cfa16342589a9d7e666b4b87ca62c2416e16c0136daab3cf6faebc08d81e1d3ca97bd536a9a21da03516f545e483108c5ba057310d3ef4a841b17e45803821dfad8121771657f75fff6d6fe95c9ce524f5516608d6d6adf3187ab74ca3f9853c12b56a99e134c0802df629407aa83a733952341e166e9747b1d12643983a6b37b3d180dee9675501f666d6d69ba198ba90c0fcb9e868746a983be62ddb443d55e01acde3e0e2084e27ff326c05ffb9b5297b09601cd93f7761ea20405562bccad0b076f4310c0ae1c8c20a7da4629b60c4378a4cbc741636556c1a21a29537185030fd4a918d457e289a6e8038533725b24ebdc05ba7850201739cba3e56d5261bd8878e88ad94adec6334bbf221e04f092ed3a482042b17986013f6f2c15bccbde228f0bf81614643181e7bfc3f2b979ed63b0d3e2195641109c964ccace0642e6b4022f12f7781939115025c3654255c75330d333d62d16d305e23a562ef159121003eb5f03c3c829eca4e650d41b5d6894b2d15489c42f2eed7d6d0fd00760ddb646db57d2b5a0d3501e12071bd3842c480400697861523abeec70cf07b92c9e1b917c0cd19522f77d9a84d731e34a95dae27921b310531ccd7acbb0bf75b112a919b7e76afccedb2bf217f5f2ce965b6ee574cc81b7652515599db95e8ba125490a04d2497fe5654394ad60f933b21c339d20a53cafee417b19adfb9a15869f2bd3548e08e9361bfb04a1a75a43299cdd82d9d14621ed1ba07993f5d94209a2cf3816579da4c86444279ae7f10923adccf24311cfdc390514d9bad9d0e33a1248e94e2e6112a80613cde4f76e89664c719c91e4c494e226af2c3d77e50e82eedf635d167d7019d59421c41dad737e78be422119b4e3e6c8d5df923714ff735aa41709c73ce1890fa9b1859806b675c3ca911a281adf944b2fea9f5d30314e5325676e6dd0ab048a4d28e91abcd89a630e"}, + {"00000000000000000000000000000000000000000000000000000000000003aa", "0046e8aa8dd6bccde4d227d290e391f698cb7f87890951bbd93689486d3658b5d7a7d43eae85857530cd0697c0777597e6ccc603345600bceeca3c88b7c5c32b0a9742fae7e9417005a70e75cfb4e5cd631205eb020a4db66dcaebab30d17114f627f9bd54612d75af05f1059238c3374aa54153a59550034e76e3b651280496f7a79793b2b1afe061bf967777728dc25f96f219388c9d27d83e7af7ecd2d709c0589bc8ab7eb0b202db4e5855c3bc6cede5913db23b96d4ca4456797f1442467d0ed665cec38363b6e6dd00e61f6c112b941434b3b20a4a596c6eabe290f460b309edc97f0050158a2e575049f27eaaa59be14ae2510b2d4a3fd83204068dc93aa45abf8c02e8dd0778957e5ae7b8f98f0f2d49ad53debc4f557d53a01c40b70ea681ddc4d332fadb9fd9536836d06f54fe1c7117a26abcdd03353aac743ea3d8f41b2ebc25946f6a70fa441edbf633007a3f47d54c778bf0a8d68c144d75d785177d29130d06ddfe488b4cf0956bd14212fd2b129af2b71b0d10550c9755918807a2f0d6d23753df95c0a16f97101fa7ee4d5d3b110ff67d155abef48db18b6ad825a707fd1b05864e84e9b7b534f417e7887579ba71149811d5e8fff825f2cf3c24536a099d561ea4a75c03e012bc7699098fe0d29e3a8682fc6530b339129db6df2ae5bfd3521e15c723ba548a4bc2e9132ae45ebc9000ff9dcb77513ab59b3330205fc59f20895dadcb9b5f3f2434296aacc9faf218eebd68456a7499df7b6a072ad3277349989994561236c4e6bc617765b95920388494e2ee8eaf034cac54c7dff92a519dcd58d4f20af6cd1e924bdc587f327c7147fbf073a80e1f63e320a164b1450bfbbf8505a2d9c9c996ad154d1733ef2a649616aedfda7dcf71152c7eab551375077cda99344a72c899dc3989f9c58411a457c299db4b94b5aa0118686bc720a599ad8c65b02dff19f3ddbedfc825353c4512130ef31bb451b47082e6e89a9c9c3835b817101c9432db0d1341e5b5ff164605727cb7ba08641c46fed9eddc6cff4ab5574deb46953a6df776f9b4063021cd417a1c49f8a9d0e3b2b7c3359d6732a1e2067a87e9fec1ccb26e2fa7d139cfd1172aff7fe85c0f4f1d550e48d917cc23b343886c5e8abc455e1eb4355a96659d22a62fd65d53912e2d9ce2a9709a65770140a318ff14cad780daf4bf1fec9b9d30a9b315fc1101bd1140f9f267f4bd83a5c9f03e7e54c9dd18423c1289f24de0411364a157752b79b966eb3f7a08405c01ab7a90a990ed9ee6d627bce2b125979b2cf2000249dc49df55d53ac9fbe025a599c7402f3c26d7b2296943d8528e3b19d84687abc4f715f2f0cedde98a2adce728bce0313b0248766339e84f89e72cf8fafb451f0f9e3197fc7bcd9696da4dc2b84a1b12595a1104dd60c943d4b059ce8430e23adfd8ea49bd52997e139026fa5e482cd953f0115d80362c3628ebf4e2cc1b09744b5687fa64419dc4bccfd33c1286f1b684b930e16de24dcefebf8121a674feeb5d6a31f936edb5058d9ada2d316e2b972982fde1f3d7ace7ab5c10aa1835de690af2d241fb9c93a0d95e40b73749fe2baf1aaa9c4c534d96f4a202c26d057ee8e35f7e7cd9a248c2c38c91a5c319fefd262083b40092cd2bdffae60521508f04c5f4b3ad85508b361427f565005b07c91653b14f7e1cb631d2e394ceaa59dc62386c1b590d110f614b7195e7cdeca73764f9ec96f34e327f6c5b338135934268410f958dc421296ff1a6284d5564f10a9eee81c81500f18e91b1d1801e633e99281e94461145646acbd80b5f634e68d60cd6fb8f2b9d9ecb9c0c0a0b803b5065fdd324f604d36a3eb23f34f260d724d106a3628ecbff474b564aced796e26d39b57777"}, + {"000000000000000000000000000000000000000000000000000000000000000b", "004119923cced1f108e0372cbf43ee2e60f3bed7bd13a6d8eac89c27e30763e301df2dedd1d073be53110cd1f9d93dc73898462ef5650cbf5bf1ce6f3e6a4d1f610e7a12244bebc286b4e01f4c1da9d8dd1857c60f6cfd343a0760838fcc423aa1c1bc791e4b0abb4f1c2cace44dd302d8b17ad569da5f7665d2c86fc89c28c21c65ad8b5915cc4ee3d2a26f75da1d48da36c66d1cfd8ddeefb40bed77795b4a5d0512ade89d28b304ede16a2e5b443948181242defcca3db866721d6b47020b66e3191200ea80768394c552c6220c5980080c3d622c4343c5dd9a6bd6110ff5b972c9663fa26915d5d2a0f1e19c8d1161246eebb1631dd18434538e09e316be4dcf9edb96a6e19549ef2c652ec9959b3d2ea46db8f34dd53b1eda4541af7a7efa4a213f726f22ba2eb94011683d8d12065663c8376297639b56e94894ab3713d3323f2692356cc2338e8615f2bd37ab0138f3a8d15a5e9731cd42bd30dc3b7ce8496c25f41098e60e3f0c5fbbf33261e33ecc1b46164473369002d4423f541c2d37e52d63b776d4f7514ba39c99bc433b2397f159b279f32717e025d4b8b68d09b9f64c01daeb48826a0cddb056423abbaa8346d86e5f152419767c31f95cda75047275ac6d4de69e18ced487040536b9ea1f072109936f12e1dbd68439de0336477a1ac125609668e04fd82a658b82de7da28b913e478d0854d115298bb28c6d5f424b497bc21d3eddac8c2f164013e301aa9629e44ad65d1f5a39fa153751a5660f6e43bc0c5170f78100e4b3b9bec6055ccf0cda831496fe149762f50938a43232191ef0d52c318eb52308c5205ea1e68dcf3806b88c7b6f1b063641f4ad170ee96b68921f60c97b2814821ee1dc2eb9d5b782711968c17854258a97aea897e2e9c595e6269378a21e2b0675873310d9bac1722381e49e0927c3fe1fb3240073f2333a4d87009e868294aed97d18cece4f9930042c6792bd1a87cb5ded35a4e3475bfe741f73c3fe191accd72188df7ec4d451e896e307e4a0c1677b821e4dfc7d0de662a5dad882dc066fa16536dd1b17e1010605ce59e61cb9ccfc51f3275336091056dce72c08482c4128a7a8633eda71eddf9d83810372487b1505634ce5f4903847c1d340f70b08472e49e85f43a4216087a5f4c908c55191949336c68b76ea8d1ee438008e9ba8dea54a95bbe0b2c92e59788cd5ceb64aef279d3e38f665cf43968c459444576181c3de5772e31ffcfbccccf4ba87b985ea6be9ecbdab78ba5ffb47292d4760865bc5f17fc934e57b4accf59b91f3ffbc02ba72bce1d93110f0a1e0a19fafccad7194ac43061f835dbdeedc82112bb112d55f227a06058cf702b3030e10465ac32cab38b35283b5f0feea73b4583b57062b3bdb160c966ac2db959569c41ce9b9666f017e050cfe3f00c9ed0f54c7063938419135df9556b72f056ed2fa90c89b5ec41f677f25c855535ca6dcd5a70834d3307b473521236bd166c328518abf5f3a095629d9f6ca05dc1df3d77fa64d31c888d5bbf8d37e3b083e6dc6adc5e11329e042058d991c35ec379f17301efb5664a5cdf78ccbc85771525690620ae61dc9a31d7cff74965594a199aee3788c3072f97c299b173925864e1bc6da49373d80f29f372af33b2f5bdfb0c90a58f9704845462b42ca03c052c07b811ed5711a4f3d2b6b7c7b6c3139f30098020243fa62223ad9fcf51809767f1c9e2699f94477d8a0c344622b26d7f9aa1a79d709cc21e8e73509151e4155b65a2b5857a2d70fc9bd52c8e73515bc99667052775c71a2fb57f9d711f1d7894e05ec9055ae51f5ef9e2080a6686ceb051e4cfe681b7c4dabfd37724b5bb9233caa171ff9683ee989fd8f50842aea35f6a7efdf15ca61ddf5652a"}, + {"0000000000000000000000000000000000000000000000000000000000000005", "0035afde4b88e0f3cd1dd4e703b3487d6380763f0332a16ccccf942641c04db473567969be7d073b631c1c9edcbbcb2225331de373414cf6f93b9b45fd09d22c94e4bea9910f59dadc049970745932c82ddae8240d6df10b2ef89441eaead62030fea4170a7699ddde3fa42a159311d805894805c1a15231b1e598580b3b0e41575b04674925e98364b9316b2205e489de876f1399e290b8cc339fe49467b50c4d23df45ec5a6c82029db50ca4cc6ce0d37c516451b9726d70090eaf6019b2a2bf9bcc873b6aeb76b5333d71be1a669a850b1379b0ea0116d174b796626ed97d39ee98bbf7fc50435755290998ddc1afd9277e1843994e4221fad12515c89f3cad9d2ead2d45345f8eec679181a9ecff73242f956c5c0d4e3d6536674df4fb80de4f7cdeb23c2f03be9cebd13bf36f0d0518f6d8191d74c0700d7d6bd23e0b637387b5f2da075a6ac0e1f2aeb87986100479234733970f2fa06655f24673caf1c9825e84e626a7c5ac418bab251f30d2902d9b1fba6b4f57ec751a1c6ff2f44a985bb23e18de56d990df03ce9f958c335403fa5993df45a9bee3eb99d23e9ac7f83ff5120a235d9f63dc1479fd0f6352ac5a31a309e61e2f6624cae95ab814961bb57b23323b5fd1bec2ba3cc44b0bf4a0e25a24a839f403b6dc2cd074da30301f81da106aafadc86fad47ce23c514f87562f181aa512b4704b3e02d2b0dd6390314626b92f84fe5d0d434859e12492ae7bcdd8c1b8037455a3d361e02982ab709020b9d7ad31d8d56bb2aa832c367d7eb9f19337e310124107a42de2122d71f5d74a0aebdb2b9909e7bac5505d6c0d4e66a54455799053fe77987b5b13bfccc86137067277b07471f6b5d32d993afd9956515cda6b506b32d54e9d56ec16056010ec59474f641c2dd893942e5a42356187f79707a590882f4e4c33aa67f7e0f00469f5b3587597b4df960bca2537872b35addc1851a4af9b3970dc963bdc101b754166f4e993114f91801516a0e885355b1e55f00f7c7db7f14e166945dff18ba34bdc15b9b4fb96da284b95277c5047fd95140013b2f5564a46aafa39df705ed748a31fc4479e28724eca5b6fa0ea3372d81c261eb9ea0b0db5aba2baf030307c9401a2a9eda1908bfed5befae53a21c51030df559e94460859be0e9c7b44e70086e4a3636e1840429286643db06af1f2e12d9fd599eedc73c9c4e655328139cc8d66fa9e9915564b0f3d2b6b1ea9da8c20aa0191a7d82b3e70d5911e0dc9d97b0bd30313fbc365d72402438e229f4f033b108b0bbe1485f14f2a90a189fdfa251c7c29bcc010c0009a30dc163ee8db836813c43b456e9ff4ddef6aadadca5cdc9611b31700acffedc7e83977ef8a7312cbdc36a94d2ab771031201d8539ba217f494abb1a65df7dfe8f15d13d570f07368cc0cf0f97930745d2ada0aff5632a6dda46c908396a1dcfc23937546140abb1bdd30045c30670c133451368932f6081c9a0d4aac16a1b8a024410e5e5410156cc855c2792fa1926002be0ae2e8c14b565a00b3b0d25f9ce0795402292a85c665e4585f20f75ae435a2be3c910d76e963a76af9167159eb321bb941f0d356dc12c912438c4ce259d9af1aaf9cbaa96d99814a38dfca7567b72eded81fbeafc0c6c8aefaaeabd07bb36896b46dc10629190bddd279ed912edd44d644023be19279065ee86fd06b7dcdbe68293481dc5810d583d8f388d800352f352f68121bed788a37cbcd412cbaed54a2334d79917f34158a090f9cdfbb4c9790af073ee42c929076919541b805bce268c71f4bebe1b63622257b2b475b8418521a775eba1a3d81f8ffc10294ef4348c9bdbc4fef2d5e167f9e9ba53f4c6b92e4ba560ba8c5075f97ef5861e52f271a9d7f45469"}, + {"0000000000000000000000000000000000000000000000000000000000000004", "0045cc55438ec569072433ac0b4a3c314bad15e9ea0bbc1daac7914ab6e487c4b90a460e016fdbbb944701c21a300c9d917daf7600c93f55ff0dd8d2b8ce3e21528deda497b17bfe7512751eac6e5920afcc6c1709c32b821c96d679a48db3c17273ad16251c3357b426405cecfaccf9678533f328ad2a6f90fe8a5ea626173a0637108c0517cd6991f5b221eb989740786d991e2793a15497744309a38388b5bfcb69cc9ef915aa024229a2f59f9103367dc777b06a928e8b551abea9118849e101d3bbb1677e7217e4e265a5e306172aa827957e826156c243bd82234d63249c556328dff7502f1f69ff90524913b4a992f5124054c61414d0b52209371555831572b1dac0b2658942b6a17331f16b1b0f1f3a6e93ea218dbf5047a2024261067c1d7c99d109b806bffb05ac79e85e41c2dbd14e3eb68c7739a21122bbb0af0b06385d9a614ec3b5404064b3bcfb0f0626a2fa0d0406d2d45dd587b6ad6f4a1039d5e509412bf7a354e14e8b55f624cbdbcacb797fab7c6a9320c7f467eb937efcc9f6a4b8d83e3faaeb8d590ea424519c02ea0aa6f8f15f94fafba840073b149fe4ee0b53d112940de10d7e81d12c758cc2e986974d429b2856e38d8866ddd997f8842b4af6c3b24946761d3e1d57a1056234c2b7ef3b339915b24b21d49db365ff249d6459e653465b52e2b2a03828c6e20116746dff06418b11dd87629c6c8fb0f69a2334d99c04db69001518c56e8807bbbca8498230e930d1f93186bbb6c0080baf83c76a34d3e59f0462fcb503a9901efad6a01dae857207cfbbe6ec4114f0c7e9e1befe5d1bab510f01c17cc08abbb1e41e5190ffc0f0d770dc3caa411c3b4b0a471ef053fbf6540e34b54b96614dfaf319174b9b81b72aa63bef1255bc2fd792ba3a5f7c82983b0753fffd54fab7248533c43a56387ec32b36e10500af84affe504a5aac050125f8e746f246d19c3510600436ac55acf3198e9e673726e95389daa4b0541c146bac2644190d82f93fd2a9ed1ddf271a2b38fcdb1e5b5c26759b39c1881b334638b753e15d50f8b41d06f4d684840e94957e64a227a9c6417d2976b5b2b92e11251f0ae568916cabc307dbd3e7ea8a67f58b470916770f400c7cf26c5f4a1319647a3ac02a1720e10caf8476dc0e53bf45d77395ea340e6e3e061ad15d08098598614aa2d8c7ffa1b942cb1bf1f435927b4b0f5eb5a5f790e97cd47c164a7fc8035ac63eda3bf60ca54f5686930932d1e0a453ad7c4dd183234e1f0316754dcbf8cf1caddbabe2b5c0a54999a54f1f24821c2004e91218a7eb168af5b28d7cfe65dc3bb4417e3559fea3f6a1d1156ba4b446093c176eac4e57757a2efe45bf904c83a0da2303a17ad0b9e340d37c4d7932b19ee1988f39f30ea50381bb6c26ceb92cddf63100e808c2f666fe87c609f6e7dbda384a2642bedd54085b46ae4cc503a4b6e9fbe1c8720797f94effcbc0051f4cba5a18ff1ba2e2008ad01dbc255f37548c9908e3a3e1bd19511106fac6542e7de6be2140b8c8290a6df3dbdc03dfe557e166070cc19c073fb1baf7010e23cbe9f4c578a3d01a51b378133655616d6cf16d159921a1bec984e2e62c615aed7cdd1b0d27fc3c3f61bde50d20a358f5cab9e98760f9e38f7ed97f90b8074d05736b43358d8f0ae355fecd12f61dd89a29b0272dd7a3f013bc4dd75493844cd7f97ec6d4fbd2b30e0686a9d89e5481fc5e03984af7952d9c6a7840c715fbed41c3768483d69b0a2cea6abe5719c4b9c6d60967ef909a632079dd6b36ecc97c0c85e596bc0fce193b5fc2658e9352e3ee5399ffbf5d0e47013ec77c1746daa6791473e3136a8195f95ae0f4c2c6eb9c101f55d586b15953c57928a60caf4abc438debbce892"}, + {"0000000000000000000000000000000000000000000000000000000000000021", "00b4902728a8a8db67b1344baf4a1541ecf8b81a13497b3d1afdef05e987b8371d61bc7e91ea3d5623da211b3cdb2c7937e1dc8ff280a14bbb2e1ab93e1ef63f42443440707e9fa9e9544cb3aa0211ad11127de20510adad4304c3d22c7896d03642b7520650dab1e440815ac4565306cd56af65fdd8c4e2398c5fcf921d092a3375fc546f490983514747c08e0d05b93cc87809b3ed5caf6f3cb9bc0150ffb77d090646df553a8a05da226fd5e3e28f255bd2c3261eeae68a59d50b890a6d0c15cd4f4210c67500f4ca5f3ceca4eeb54b1f199ef8edab49c3438d29a5882e51555d95911b505a1e7572ef79079f85386bb2aa543cd6bcce024964040e1c11e176f6bf41f06a8279d5278e653298cc5f45174369adc50e0b0923c8522c4197ab18ee88dd344619869faff6e7a3ef6ab48454e34718994dc35517483418b334a1ea80cd78fc2347f6a0ec869485d8e8cd011e4876cd487ab6abba1033b85aa2ccac03cd8bbd1b8674e18c675e69d85952d782b7475164e4b684e00546885da78b59bd3cf1c22b15593ede908e56e86506f46ef8eec72c65d028c0fcda75ff46fa77f8443a04a02602a9e72ca9ea5e169e94538cd2b28279b7a50fe890a963499df14b0f2397f3a630d5562aff50f00674ddac27f82dc3d8c393d36620273a385b5c2b760dff53fadac9b7ff651d555fb1b47f8f01939f7f4301f8a97f6aac5ddf951261176acf434ca0d67e16341bea85245eb5f345cb1ae2904a4f2954eceedd30d914e32f30c4b2e9cbd659645ac4ccef27a8111eb6da21aa258f5812cb3d94ae13fa2c2beadd675b558cef04808a72859cc96584a32964a9cf1c26803df5d53e0667d5edd244e3a3f41530c428a069b534fa337fae113c9734d30ecc8f488b1238e4c2a3b96d101b6ec95ef9a6b173d99401feee86f0dc6fdf8f3bddfbcda1018f8fd12e50dce74be42313456b8334fa0051512b22c10e554fda2429ab2df2713c2d1a624511366ec72495b94943c94f367e3e83dd3be2c5610467ef0ee228008798fa5e8d8f5b2673ec00791f82fac57e51310924ba88fc28ff13c9ef7454dcb9a3265d75f31cac1bf164e9b752d691346c3c4308f62ddb5ce07ee76e101d19500bb571d5e40bd139d25180e328f439960e5ee2330143623c8d9e15263638bc6f69c94035ca4608b0dde2ed0908aa84b290b77213355d42aa35abc01ae7299e7b4ec649b761b5f02db0c24997c75c23d22012c9e4acca4f47d8d274362c63995b2bb81967cb26b4b7bdc058c61cee0f829b7f60bf64e8fa2f4a152bdaa99004a90aa9a2e8d5dfb6ba073a269c3b8a9f46df4edc7caf04ebbca7552dbae525ffc2bd5f68cc352d1bbdf2d07bf79581337650a19a894e11d91e144397ecdd70e4be315068c43d416c323e38eff7f5f20191bd02519c0121eb6fd3027c3403b1b527b4d9622ac3ea2b21e429c3e085f57f4b340136a3bfbc196505e729cc84ad8373a63a926acf4ebf9e5a5e9edf011b6af75e98b7a11de8a19363577f034a2b05f467c4061e6db182b8cb01cd7d95f60378387e8bf37e09030f1629865f10dcf0e4fd24f3d557e129894232db240ac8be642c4bd483530351721934850a1782f74c7b6cd964442c65acedca5ab7458dd11a3ea721f96be80582d796e0440d287425317bf9478cb4a396da9c4a11f4f2f4b10590b64abae528d14267a2fd2c5fecd417c9c4a0ae5f4c91c22cd7d037e494ce972dba0400362fb5c5f662a7a78ba1252186d5b487a2dfde81ca072a52dacf8c03d4ce1f02bbc5eb6e81cf00b51b4420f20cbc2362e8a34dbc64ebd83ffb25920bfead7435a3ed98dddbb9bdafb0b37653eddd6eb65bd6e34a5dda65bba828a4eb8e542807f5661ada22497e01c9"}, + {"0000000000000000000000000000000000000000000000000000000000000003", "000f32f3eff1e9a9cfb380d8ee306ac44bf431106c23699a165dadc6d184dcf3c54bc5bc6da1192d1b3004306658e45998cb67d5b3f82b3a4f39281bdcd6f81bdb790c5e4704189ff85278081f4850a1d6fcc91403b8677ed8084e1e90f16292d9c604d92b16ea840432e2ff8e44d3c26bec3a769e11dd94b5b8a5dbe91905d0ff96830fa8ffc78210725eddb200638e77acab0aa2339544c6fe96b020a657e5fa1671bc64926f1e0e39defb94dfa6c920ad428b4228b155855b8d9d251e6042dde91482c9a69152ac82afb39516b9e9a4261d2b7796c7aafae5cc87f6e778c8026e45b4199bab1fe07fd3e2ce325699b968a2bc4f20fe799113db890ed66ac04954a19ff8b2c18ea31d17550e475a9b2442bc0dc7dc1a920743d795e219bd38aa880317dad93d900354a9e4648b842bc81a25d7446782d55e248e42dda29a05ef12419dbe49d9e5f8ccb78ef7fca428005e79a3aca4018bf75ee0fc5a6d3e461c3f1a140012349dc5ad4f8d2ac200133c2620fd6a5e0695d57601182aa49d27997978af144a45f4333772bb3eba67113ae1f32b0cf6fee17ce133c6a2415cac2af1a22a03d16f75ae74fb53d617f22d431e82bcf84fbef73808158bc8aac8a898a249d77de8ef09ca481c5ef8441663279562ef9555ebc59a3c7a63c7736e99fd4bf617c65490f74f2492b77ec4226d281c272af33c802b0081689404512551582a03e1524ad5215a9f9c1bb4283d0b61fde8f155a2e582ec29a2016e5e7d3bd7960cb2e566298d3790c0f7e38fbf271ffe4f0e58b61223715a68a6997fa7bab2d30d7570cecd1b1db314970253d209e64e610514c54374542723c6cd789b9e3f126e5ac2ab77ecf7de6952b789ebf29a96b0b606913b76959e3c6f9d8f9bc1e5e95bba5d59ed4ed58b77497a7f8b9a1c4591ec03452a09b4fa96da1099813a006398a5a105de7d331fc14ebb2ff7f9727af5319d229fdc67271d057b7360f5f2dccbbbbb2e40de7aa604ae06cdafd07120fb50c08a8ccb51a42fec2478e50c3327a90cddd4c78b37240b0c4a2dc51110798234015b28cae7146d1b43f4095789d3a3265ed7dcc9c3486f7d14f057a9f7e2d24a1943f47452cb40da643709647a2426826c917b4701413a2a3d78dce02c538462aea6afb39bcaef22d548cfdf65d4265d11fe943a098cbcab39277761d2da41371cd9c6b679c5165cb8714a5c1d215f14bd227b08eddbe17ab75b0f7dcfa12d0fa56395d24e97add3a3ceae5b67fa604c7597813b5f39dfc05564d0fb4ef4cb637393c75c95bb77060c98fefd99498812b573d8c1ed5106a673075acb337638ccc40a2d894981aaa85335df82775f46db3d0f21e0cd3ba48db7537810973b0f7dcbd5ebf63d71b4a3c00f86032b32b5769f9debc87d9dff8281ddefb201d34ba6a991a0796ed0208c361e1f1a63d5f861b40d29cae09b9e4a2f6b9fb6fa47da12b264c354d93d06e44e5e744b004b967a047d93ade54567f3369b194790dede375a9b391d83ba4c65ef7ca29b1fb743d2056e53cac90d6d7fcbac352ecdcae66666da362b1d5f0c83165022ec355c4f480032705883237dff7775217fce56b9dd41634a47ebd96af5051bc2ca1ec45030dad36ff1e3e3955324238532b71bc144de979772033d472e25d20c5e964bd2ce2ec177420a6cd6aa313f90c316a738405bcbd6483618e9f20a0e4e78fcad0525944d3ec20a69e85fa08aed1acd9d8dc817d0d1384744d1d0e7dab599b07a264bd5518aded2b71fe404d70c6c5d6bed0fa89501dbc93c1f30be76fc42832b7d77688d0d8db3c3c4247edeea19d242db524ae9129bffd6014a15b8eb4ba1abcf446470cd824c46c81e5cda5bb70a69a31d77b200f95597ed601e0ba72a"}, + {"00000000000000000000000000000000000000000000000000000000000003d6", "01547d9556dbf38f94c2c76036fa35c277563aa87714b0bb9f2a89eb5cffd0b5d7c4dbd1ba6e3d98c0fa0e3c85fa9e8d0e155e7bb472b5a9ca8e43a9b8db304889faec5016840584df3580bbfa2d3e057b3b22a20347f399c5d00a6180b292c8b9b4eaf8f9407541c029df33f6462e218bb8acf4e88fbf71024702be3bb60ca88bebaf48673a939cc17e452c115dad937448bf26a41974cc4b3898f5bd743b6fec796b32ca5f3aeb0dcde1b7ebcfd78710d43a3b265a9aa6d7991fef692ad239a4e6e86d95e52d38e136e952668e8815d7d412d6f7a1bb93e83f4aa9e29554534dbddb0fbf22f115e1e36f06e48751e59a8313d67d94b0cd6c9b24e11497d93988cff91927f13404233d8cb2745cf4de2e511a7c209cd73f174188c83fe0e9c63e70fff6bbfb3654adede531c5239bb143e41fd6c5415297bdd3636e3a54d003b20153bdb939533fcaf16f6d3a5db7a301c2a2965fc2993cac59a19b42dc63c8f4a5ed3af7063bbb0a2ae29c0d23d6e1c45d9cd73d16b83f3b0001e1737faa20c3bb920c74eaf6e3f58a4ca35c1db22136f4cb7b0aa5a49c7734a34d70a0c56af18d526a028656e6d2d42f4d7d39f3f515d0ac4d495d50b096054c3ec74c8adec87ed2b2c20cdd56aa8f5d784e84148342979aabe26bfcb3986b6afd09a71225dc0ce11c2fa326c8161383212bd21b47aafac9a60af05a7701f8ca2b6e27f7ff91210052d7f720a0456844f1830a94bb1d9c93354eafc07242a272dfd75feb5c8d1716ab6d269c77ccfdde2079ee19efb5dea2c81d2e1316b03ee737e36463eed618fa7359e39fc80adeddad12c910b770cdd132b90f91a55ea62e236918feeb4a42ab5b9ca92bd263870cc8adf1de2cab4a19ff14012414b635b1dbe429dff8f2fbe3bf65c4e1f59671917553c7ea0670a023dbc54806ef648a8b2fef7b7cf80160f9ba3b8a584e7dabb8cd2475b9c6c490f8c0551eab1602a8de4250f3dc2555887543c68a06b60c0a2a12b60ccccfa8d5e09c2575e1ea917a5686d4b48b746b8ef0551daa3326f1cb5e4a6a38b70737dbf435097ce68b26452b5d56c931995fdd3021825153ec4c0bfc815bfae5715567a9210facf8d0bdbc267359d22695acb3439157e1c738d43e885de3d15a0c8e05b745d103e4b024190ba875857f113ce9ad72e43146cd065ac17248d86017025e56fdc7d44f4ece6b9cabb92daf25dd0e92e14d83eee4745bdd17996a448c13aa17aa5de5b9d1a0753ee664403fc5ec626de3dce15c38d6df7734d91d87a17d459b733bdabeb22cfaf96009d51ee859d42760ac4d2502a938ab06968cf536582f872ee5b9e536117036d7236cbd3609cb359949e810181d2e52532b0ba650d70f9ee4c1322c09fa427a19ba13194acaa6473cc31248821cf22ebd5f5d7f6704ae7ecc87cd8ba2e11d6224ca9580a19c3f18ea10050671895aca2bb1c88131f703ac64c88d31de9c4007ca6ae713fc5991e42a9276393a448cd3c6dc137f143ed4ed82ded4abf5a215d00e74d72610225ee8e72bc71ccf57207a2f8d01062e076995b6a1f0988e7e5887dfdd1f9806078f7c296c375953925da7dd0a4b30c4fcfc02e253c172eb887adcca02aa2fe355a7b7445d06e9f71a294fde89850ab2fba51303d99a8281095ee4bbe2576ce5c9d7b0a21aeadd25d8779a43b414fc4b5ce4d6bac558d9c1e040c796f9f0551e675832fd375a2b920d6fa67964df61f1e68a954afaec8044abd60e30d35210f8bfa48785f992e58fee3925050e566bbae5e1cca39ea48922cd72afab0c5e3eda043fc74d23691dda518812e462f8dac3a645f7dcdc071b3312174894bfb382fc63bdf7c7f9d5b371769bd01d63b614844e64f58ea50732037a892e7880d9efcb"}, + {"0000000000000000000000000000000000000000000000000000000000000022", "0004030f316defaf9df74ca4d571f86b38835d3a8f0e003d42f55a25c5f2a20ce561748f836a02fb932805c5ed5f87968f32d14f30fa97a8c84cb5dbb3945d07056576db6426f1f78cd174b0b54ea4cc3f79defc100a3c420629d717a55b9164a83e6e9467cba74d5d4c073e64031492c3686f6593dacfb48e1099b82a4f1837036f8d4eaf3bb41622a9799aba00ef6be78d3b18b8f0cce7a0692315e8e18f36e6074096549ce4c9000ead6f1c0f29438e4c818c315681b47df6f2d541088aabd003c9a5fbb20088065ad19ee35364de556630f766eac192a9a390c43478d851b793743ebc4fe831a697081a7627c7f493249e1db07825d221354e0206d8ab4de52cb291a3789124773e16057890bed07012aa8b6efbf77579d3de913961d869ba9c2f5b6b5a0e98712f48a4dd39c07623b5abffe9a9008c4aa8e30eb4fff8fcf3f611c92c9323be76bc42700015a60d0c6a6c6f3d08351269ef76785a447e8e8deb7d319d23711a88560b6760f7fe32a6e272fa21e4f132de61239c9fdf8b0e32baf920e24eab7dcea2d57c5851b52e08fca69553a7ffa0dea34ac53bd6930a76ba5a3b201accc3d9c9cb62d359543049c8ba737a43ff8782382926f6e611a7e55511263161e72a33849a7fbb1c2bd0fa6398d4b924d274c2c1f47f057d35794efd2b2f3c856b94a5f4ef495dd394886cfe1ced5db871e70da73ee9e4092ddf11d923284dfb2cf2c5dc37a8fc10bcd17be84b65b56bf974a63bd02ece81a8bb6b6d19ad07876e2dd7d57451e385ca1c9ee230567a810f1fd98dcfae4ee88eacf7126004ab777d6d19cd3d6213ee528cd1c895babc2c44d5f55270a2b785dbea9b5861778dff9a565769eef739b0ff655ebddf99a07b18935369318da2569d5352cb765b7dacc58a1a801a2e7839e6291fd7a10f93e31dc0fb0d9938592a4839011b0f3afb4b0534e51ca2416fddf3f5c890f0d06705c1d445f2776da7f28dc5cfd7c1a1addf5b3eca8a18fd2dada3da8987337fd278b82db151579eda43ee38b60ca56f0ee1c2a727f7e19dc828da67913f0cd60f03dae010ca7f075c423539d2e25b7a4114deab1b104bfd0dfee955856ff745efd0b510d6270431bed41dd6522857dc20798cdec92de84dfb4a9888ba26ae277696d9ae948ba9e46d749b91d6ccc16dceaec2dd0397ca4c96539528b5f5f612985c444297569674e819e6bbb983ca255c5ef88238aff4f54215a11a15a945d477af3d63852b622dd4aa657f9c2616b11b72b150d50fafc3286e0173d898e089637d5736b4dffa4d08af68a42b873e819161c5cf2b71093575bd175ef6211c3c95708a770b97cd1317379f028e0c3d32a9390dce999ebfcbbff9e019815930db0f9894f82870e52fde36a1e3991559f3cdf5a449bedd76633d36797a0432943863f69fdfefb2f0a3a805ef8ab3b0db81eb27f4634a8dd6187f97d1430a4ce7684cc4c8efbfeb219a738bb1a1ad57524c94419cb1d3b5f143fbb7e84d392d2ddb96a57f0095861655ea485a94241ec7100ef1be41a91a429feefd1247f75f61c697153f9b231a539948562bff157485b55f962ca4ea139aff0a1712a9cdf1ef0c5b37aacea28ecfe69ed62f5391d05313066d0ac7e6034f640c067d324d991a5040fcd34605edac20bd09ca27af68c77f6cc1a0c2c36979d0530fc62eb2c25e962944b1a428afa316a920dfdbc68e1bcbb1a38d4be191a38a12a7d1248ce4f0112cb3c46938ae654ded4a29e9ca86c58b4a423e714b5b9a76099f432143631e738579e29c5ad5ee8cab31cb6b630d2b473623ca5d008a217113ea168b6c694c252f322eca52b1c1665f87bcc394145e52ebfdf5103132ae3025e50f9d6c55b9bae2081d227099c7bb031fd331"}, + {"0000000000000000000000000000000000000000000000000000000000000006", "007c0779e65899914a5f2305887132ce6d59fd1f8d453843ae6ca8b847f3a04859657a79d3055dff8ecf1708b8cfe74ac0cea6e7f7ab8bc02b220a21bf13521fbe964eb52ae2fdede4637c13e417599da8f56e341a3882542bf269d1c662359afb6d48eaf0bdb7b03f31bc73c6c497ec497e45c3c260f68315a5f23f881a2b6596bf81e5af698123864be236244f3c7c7ff0553236edca5ee270e3c8fef886666c6f5f05a6fd193807b6c4b405f0dd6df1c190d8ed09fe961d389608d727dd54098a322e95eea025a345496a06b7a63cf0490ed6153f39076deafa13393240d117fb55fa9d04d8275b0bac9250f0659c9a046f24e4a83a74dff7b36c165b13766d91fdf5713ad7a6f54e4603b966df8bb020e00b3c11519b553c55353613e7609246327d934716e2df91a9166ca11e7e31f745dcb628e58974fa9a212f5f7eff13590ce3dc6553c749583edc4859c27d013b64419ba28325ddcf1761d4722f2e3c733c839d5a3b5bc7ffa24ed58b10c63676b3071201c7117e0732696215dedd240572b4946852684fe55a3b9a30a5336569e36579f1efd05d4557556ae49d7b3c1205c4042dac08f319e6456394817a17d128e0700f76d29511d13b4c7b5cb8dbec21657305bab5ae4720fda51a0f86ef9a74f38f1be70ba3c29d6f77c98e9194412428c8e4c2884afd3d03e71a5379f91e8ae032170ccc03d583fd231518a0d5be37caff7b694e60a79e96eb0ce0953243cf059ec95e12a47456fd6a962f79fba40841489643d3733ee64352b2caa43e5136d8d99c511d093ab292dbbf5d6065e2d80b9e6b557f73384100099488c8abd9e1c9e391d0d886bbb479bbef97393a1011011e13a234c73ef5724420d0fcd26e7e99c0800a7e2d1194ad9da7db46718ff3c056548b820b54b721c18ba54fb9cbf3f7d8f33ae31af82a450454a67d00d37174ae62eb6130da52dcae17f958e4ff2d21931d64174fdd4a66c33ac4925b473a4da907885d3dd30c11c4e32792f5c0c79713a1b4723c8917b077fa814067968919912c71e2f587963cc9529df70db356910a4ead4b34846acf14d296e9cc6bd555cb697851d614133acf2155c891e001654cbdf0d8cde63556736a1391162c5421b23527fc8275ac7369add549ffa47322c6e3cb45d9fd2da85e53942733d85627549590a701b72818f5f2723f9ee0625b3f303a5b00533dde4d1726a386538bee79c838d58ea138b045708a7830250a7de278a4b94949d677b2003ce2b8adbd14f6e1c10b7afdff7246d85453bf254ca14deef310d49c13bd02622932dcf163effe4200ec549e10e0bdfd7b303e2d1c0266fda0b9b71461b2f8ac4298b1e0d417af6c165903ae52f98b35fa038272971e69b6058896c1132278d16cff57e0758326c2c49ebf0445eb32b9542d0134615b3b27a469f93944718efe20972fd17994f5061e158d0a25f09b621e91680a280b8605df12e8e216a739d2dbe6b867790ae242597a61e0c0c8762dde2764c365570c8bc0a3fab2a82b5e4f8227e176b55d0264f666ddab9deb6d3b42caf9993b39286fbf49d409561b473e7659cbd776117ea0fa3325b31e1d629832167c7765f4b6b5ddcec89dcb5537fbdb81df44405f535304e55deb6b838566c20b37dc839ef13ea11803999dfbd4c999cb018006dfb2f256a20f3b5e062d2535d1b58d541c8eee061556ccb7bc3d8846998348184cb4805348760bb88e537240c949c8f3708ae514254547f0fb57afadc6fb9754c1f877b24e737903ac0b31c3bda8d46d6946920953ab745c7f83239d58070b7cea5f7ade5bb960bfa201243aed52cfed97b44b17a4cb2e140910a28c74d1a4a3ce0149e5fafa104730f443cdef95c336efb5754f7abb30c1c0315f97b2"}, + {"0000000000000000000000000000000000000000000000000000000000000003", "003722b77b8537f5c469d0e521551b484a0279cfc718434a3e86d3a77bb738127d77a00e45432731433614bf7ac9b3f2d2fbc36bb193fdf1fcd872eb4c404f2277ac8977d97c28eaecc361307c6b277786fd62cb0844d2069d8f5d1be32eb3235c2117355e543f95850bbee1ccea0bb485c0f33a72385a355ac208bbde970f070f95c3abf0b3785de3f90b40bd7f629b9dcc023cf362029c53c40d1931346ac55f1641810fb076960e86e7f919482b5e8f13a3e43c61606d272a7a952917812c10a51ff2f5c94e0572c6b8744d5f9254bd2f3e2f867ff69b7055e44c8521954967cb1e487914c05f455d7be7eaf1115935276620f5829a69e9f3c4a31239bf92b8ea9411d7802163d6dd8a24b68fb700f04d13e36ed4d5ef2fdd3449ba9cecd24f4d1cbe8fd61322cceb94ab1875d76891ee4c550ca2504373e32e2420cc222da96719df87d32319b68c5149897127e00586abed611ef0ff0ce90171823371d97bc656be8c1df21f729e289bbff49b45ec95c11b2da78b1e042906d8dcaa26d95cc3aa9f755d92644095e902f692a63feabfa5226afd4758fb848e84f1bec14e73ac397608815c7d288a036868bc81fd7e77881d9d8c8fe64c11395e283b1a74dbaaa40940b065b16eef53d7bdae0a663e902e6efd53c2b923213e44ba15d62ad99cbb1705c6c65fa0c09fb8ed720158681fc9530478c600077138e051121519a46cf0ad2df662bda3ef9f0b9d3ae92d19fbea5b9d823ec4f846cb54be195d54d6670bf4e7f8549eed7fdcc6554083d069ae1842350f7a1a17172e5b19b32fa556741f6a7e7aef1ec01b40f80e0eaa934f690247e90f2338c733e091d0c333b9f70fcffa1852c64e8cccb4b24e1c2342f4d5fbb842a0145de19fde995c6dea095218119c0fb212c3575eb624ac8adc1289e6bdbc7c663282c807c9edccbe354401460c0c5a22c31fbe6bb37c22e259c5e10af1cf7e0f45888fa25b76c9559952c020507c4181e995def51469a29a98091ca44a5e64e5bc3d60b7300b5dd32c1e307793e65dfe8588cb17a33a7a8fc26ce33c478906ba35f363a43c0bb394c5c9e3501e432a11fb9d580dfe316ac806a2dd1b2924d207ea761a3758d239ca0fd7ce93100fcad18b79343889ef032ad6dc984e7a2396dabce695e9b5f5b417ad03e890fb3a3f3f36e104693d1665988c577bf0c174e8486a7eb8a519b66d284255119058a733687ca6e90046e1631a1d3b223b05e4d192490c5d14c40a6494e6c8689d5714cbc2bf17a63d5c0206c452789315270671ed6b7af9bc473e0a9fd16055da3265c5c4d2dda07be40ba3c5be09ea11f5e7ca40ac73c9743ba1245e09b4927a54ff017519ce0a632a24e0fb773304b509679882a2bb3777331acc411f5b93708cf4d499259b4a09f3909b3cc7ea0328b050b9461bf12a6215f8dab129e5c4c8b1560910e1ee004d4ad22138e871da837ea47496db377f7013880776574d96bd9322a13e668dd00ccffe8c409c1dfd0d4ab6d1672cbd3e73db24cd41ad800f72061911f5a55802e846775cce085844ec6e1a3fdaf367a43b3dcc57c956024ac64bd66975d15ee345509fede13de83e3377980cfdb6834509bb5e514a005d5de8e0405605a61fad1db5ba44e4ba22f3f49ec7eafcc04a133487243dcb85f97c84617f53bc52fd5cfdec7c3a29606b8081e36005ab4e6829f662d2424c0438cc5e200a27808f908b85e907459c5e51c172893cb942103da90219d0cff6e4d046a42b4451b879605ceeaf8b13f91376601c856dd97f351fdccc84a3536b1b03e62781aa73412a4f456e1873dd357e0d3907e9572fb33de314a10f922257ec0dd5573ebe5cf9be23787f133faaaffc931405057f8f946cf7c2d9114f7f6be357"}, + {"0000000000000000000000000000000000000000000000000000000000000016", "018ec6ba92014dfd68d6d702e5d92f8612b957060628b6c1c8c21dc6d4f9206421c6e67882bbf77b1ec71f7db235daeb8403a501454718ac7d1b4064ba14bf304faa7d6e50073687615304fe783834f8767898450764e545de19a3c331ada2e6119b1a28ce85683af60b7f7ffad94345deb15451f089f652c5f3353684790cdfa9cf30d288cbf8c385fa61e6d47e5376fbe2c434b7cb21dad7f06124cd848abb7842c587cff7f0bf026a6b75558533c196f21419c3db0cb1e88a3fdccb1163a39a0548767fff16415efed8b8b93a970c35ee04b924dd46d87a6b71c3633f04226305e52713101a167c5d52a0fa2ec3ddb7746c86b8857a102850f9c205a8b58cb60deb23c33282a2e77f80411c9fb517b30c247eb508cec00d67c451bf8659d309ba962e974526fbebe7fc582fa73f08c55015fc738de47096387a32e9fb691252ce3333460b9b2c732743480a7e447a01cd41e810cb2e292f18e1897af3b975338ed3b949215bcce013d741af5c8d636c536d725e2cbb1466420d6e08d1f4ecda478b12963e96f6e67a492fd3823213497c24035e07f957fe11f613fc61de198d9651c2067e451d63c8eb39165ff09030d1630046c3d2b1561f95948f78ced4f7019ef5b272634ebdd1b3fe319807702bded3432745453266332e650e3b2245de303039cf6eae27524e8771afe3cc19c471924320de3bb1033608e0bc30d17da136229e14dd44b115e50e85ce31b704854ba97a278d86f57517ccbd42694919df20058c84492fe2a8a93ea0f76b0e5c302b8f51df485320834fc9a09c6c7378f0327c0dd85b0de1435a931e049f78d6044afe6bd4e1716205cf728cf95c924210218b81adc0edf99bdb46d4d3dae202dbc6597f679d1870bdd9740a3e45aa2bc1c0c453499942a5b5b41f1f3155b9ff60432751d1a4dc975018ddef5197e725027df477974633706f01d1e543ecdfa1b3d85e3c7b06a5bf7254d3d9491966f3fbab34f2652698337cfb067e3d3a3459e08980afd759c6eb7365de13bac7a03fd2bb4731aff64be614360d3c63796e0984787828170af98c8ca6bc73b716725ffbab80566df27d99911c768152ab507a6562c5436f267f94f25713dd0e571ce60c875926a739942be251e0c6d6d691cfd52b712462c48e4692d9c0ff650b67eb7de3df3d4a7ff70c04530304e593c331a7a8e113bbad358dce983ca5570542cc5326ee44277262b9d70f59f62f29451d666b315e4380e6ee91d1a86463c12f6a6c1199e353f7fd57a507d7722bcacdcac31a43c1586ad296c15e91040a94786581e57a1555701413a2e7f34acefa7c2e72131804b60fdad673410f138500c4dd828ab39fc1b8178365a484e8e00fb62cf2c4d4b2e87da72a7f63261a87555fe867c09d9837932ec8fe5309192d8b65a1029eadcb2b540abb865ef2aac5e3ebcdb9d259f05f169e8d3a1f54187d87c581f0666e6373bc471f41901b2b5bb2df66ddcde0c6e1e496d9ca552cb78b9ae84788dd26fbe951fbd28296cf6846e72a33de59a64c0c2d8cfe76e04227181613f56e4486e99a78ee84da2b5e735bc40c145d33e324b76f628359e8e5fec02e123410bc258af427bf2184797bcb71ad8a8852bc5512bf3481384aa648f884e67ea9c1198b844b3d80830526244a544e52a690972324f827e1324a84bfaa2c422cee4315612215327a5bfbc17b79f33dbf1b42150ab782627f04a1543acd75b000eb40258cb3373ebf23288e5504efde17892814e2dcdff8f98265160a7422e74fd8a81a0f0daa8d677c63cd53525870db92fc4fd1b5311c1eab2dd21f46970dc8f3a5cf48aea80a2de535a32faf987594080a3b8cedb1df985a3f0e1c6ae7354e789d8b272cc2d76b313fe0c32d921a121d"}, + {"0000000000000000000000000000000000000000000000000000000000000020", "00830f6275c3027f210387bd9a4ed45a46257cf51a3dac95cc53641a75db5aa511bb38374e2ea699581f1723f93ddfbd62cff22d722ef2960ae65bd95c928022906b5fdf6469117aa97283651da1855e57972fed03333fcd0a2446c9821aa50f59e2428f4ae49bf8230691f2fb16ca48c7f9e44294cef8e5860a5b1e82e204da5680932d6f6ddc1c01809d95eb38e145d7fb771bdd7e877fa3281f41b3858911ecf1debc2599533c06f2793cb29bd029ca0a217416531fce78813b679c0eedd685cfca0579d1a8b4d2a1345fb652b67cb2cb0b5cfaa1398b54dc6cefa269a29534f6f1449984991af8635adf489d35a5aed8864762ea0ab057d7747407434e2b9c5a084dc0d3d1167bcc0199620b6e273f0f236516d5fa3bcbd7f466517a3a03fa0ef3def9c1134a21b56baf43a3e4ad83e41dceb08a0956d8030829bbf7964fb48855d45754c869ddb1ad32d23e2a18015c11f4d903cdf131df70e86f0e9b7306e1196ae201b01d76642af6797f31c078ba6ecea9c6545c02d401d2e5193b4b275124982252ce6fc6fd4c4b9ca74e3a01bf5cfdda084baf94a59753dfaf3236237abe4809c630ee6aa6287f9422911a162b82ca5bcabc2cf62ed31fe06f5aa37705664a3f1b63e246b63b7e84171630bc4fde0ba87a76df7608147a42829bfb9a92a21efb64494a1ccd672980aac73a7f727b250c3f7c5c05b50b99ceb3e313d03702f9fc9e0f6a184e10d096133f1a847839bd1fdaa1763fe479ff6374569f907c2b4126cea5e219ab452f13803f40a5ad2ec8d481923c982288a2e03f816a24d51d9430e06a35817240a50c0b0da11851bc53f74bc6eb35d8d739c7ea3ce7f10c43fa0723a142cfb85563db9a5842e959c1b9910712838999915ebe057a89034d02723cb65919d8da4f20477fb16390472b12cca3eecfded97fe6859f87a200bd26471fa1b78fec2e105a684965c9c5a0d071ee39fb5bab75508929c9f7e4b26c3cc931e7f49cb323135e90cdc5d52bf8d0b274c1f37c0af9da14fe6bbcab8075a0296b3dd9fd40bb61cdfe397f1a299aae15030fc20f3ba853779076e2143e592ad3c730fea0c43224cdca1fdff475858fc6d8997daf2dcfd1f6b6f02af4e4d719b01bcbffc284ba4a52e94abbc4f790782db0ef4b4a6972e5aad833d0012bdf4d1e0b8d7b0904a5b57b9f4c833c78026288f2c1760617355ebc993c4cfa7ca03312afbf3b95ccf87f6f2989a0cf9ec824de04738092fe6954cee2896adfefe1ad80ef326a39f595622a4f5c63f21c67f0a7f8502a277d7b96490cd304e794d8fb539308110431178f16ab0578bf7d157b01f93a2b89f1ec6943a2c7af4fa525a45588e312b126bde465cae77315b399a87b35292f433260b1352ecd29ff99329acdd854a20d4c10dac08bffd4ab00c85a016090129566d9c27a3623bb1aafec189cf71519c934da0f98928b66e49cb43fefe665b0d7128d0e689293f0cab85a5c7714ff184737176f911bbdc0184d7ef5650db672fccf435ebb53fb51e3e3546d52011fa43fc3ebc923fcd412deeb32f8a93aa8ef052125ec39f56456e449b5844520463e1715548818f05315b1559d7321ceef55bc52e09f999149c36b0ea4e72763b3f1078fe283f518f4576561849726087ff5980a07870512693dff75ddb2b3dfadaa95a9940e6dac1584cf717bdd8653e53f44a117dcbbc94de8d765630d610c0a7e1c490940163135116aa53d5c6caee5424c8985b6b2963a073e3c9524d3484bb6ba5bdbd7f6112f959b876c6d0def13566d3069a64a23685722781246be504d04c045dbd5c236cff366fcbcad29268f137a7c457754bfe2eb10f30d816f315b05cd3bfbfa3830050ab46481416eb4e738195d45e266e43ee698"}, + {"00000000000000000000000000000000000000000000000000000000000003bf", "004f47f15f8a883b31d12097f23d3d2d0c3717979248266c9ef992ee4ec685f992abe88cc6ecfe97eaf404e2d89968212109dbee22a71099b30a8d0a7c2906384a43ed4bbd41b9f75924d8ab38060da092d3e83205cb07218d6f75ffd7b238e1275fe1e6de757ba59c137c548866898a7f081f614f47970541a675d4f5d7062393f8a1cdf98ca4d44168a690f951652914e044128c99b90288eef5da43b302f9651a8af198babe510641e63c2b30f2099a6911f8e6104f55fecf70d96c440fad23dc2a582fc455f7ad90c467a2c5fc97fb172a00a98f410ac29da7a744a6d375ac2988fb6d550046f5f53b90d3fa3b3aa386b7ebd8e372f1dcbf335907103a7384d775dbaa2963b1a172dce181da5d78ad38584f2860ecefa5e8c993c39f290809ffdc906584152a793303735e65db65e169cb2c8354af8496029854a19d359f72bc6dcbda55ffbeeb5509d220393a78013bcdd194d878397fef48b51468acb34a369ce4b70a46bbee434413151ebac7711ac576b644ff97568301930043360560913799223d18f90109ca2bb80fc5208b291c9389451d0cbc944b785d5595c598fbc2cc119ae6086e8d460b7433837660f15c2552505ca02e12b207bb0fd19fddab1156a37365f8bdb2ba563d061bb1a6facba58e7b673de25bfc2d5b7dbede5eb418524c0bb8051e2323c5c2999920dfa04b41cb7e78f201b9bf88a0d7a9e17384d31ed7e7c141e8e9b62f291525a6c7a849ae9c7844238661bd1436c2bb3f23df0bbc4dd14c4c1ae3846f838c58276dcce995147b7830320feeca95936bfbeaa3bc4eef8f90fc5fd4693a0cd8792ea6940b4993f0955ca5cc38d38a55be54e015b56161f7b99883defc7b10f4f8305f8010bf61091e23671ef427107d567ba6813251cab26053d81e194d5b7344f29e679f0bf5d58c9c50f23e01ac94e745072186f8d5c2be7136d49459f64bc031aec0b3d2e60e2ef48152d117e9c173c7b61a76967a1594d74b621c5107f1b50e8623070002b06258d2c2ae571f83d548371fe02ed806a39783851b244af352d40b7c08a5245dc2f5ee4aba0918d025406f35dc8a5c7717ec55305ff4aa4d1b43d4e4503571294768ad8906af41b625329d86395f947d6546a40245e7ee56259ff9f94a6b2766d6b2f224e5e978895da24b29032dfe1d2901093f1b6faee481a5687cd0c4e21133055514cf876b0c34595fe81ada4f19d6870323e0742b0c0158b2f40f4ad586f2a28a478caac17a4ee97212ea2e3c756b2ba9c3d41ad8d1d5078d489a36c7e57231a63eea650b74a65a6e46ab60a95ca1cc047a3b9077fd7d1e850c06db155b96a68ffd9e817edc6b5fd10053d26af033ddeafe2dabf5d38b4633404c1cfc6a18013576f75a6cdbf9aa9a02718d478766d2c7f531e5a6b6db8008111be60e486de2ac91f47ecce4c4ea36bffefda83113e990e5220b2d2d3a05d409dfed2e90e479669c0927f2274f99d358d0c973df4e3d7531073c39ebb1303cdb28ae578d7d4a8e641fe2b100fef83b3c52cb172ca39abaa875a173544513dac8898aaf7a394b742606f6bf6290ca29d7c6242f14df2cda44d1b4da401d3531ba5f9072b2ea6ae9ba28e87a52e2d95db82d29e214b98c10a8aabf1ce53f1e49d7fa2b23f3a5630a66f963b74812b91a92524ec5f891f8ede4e9ad7a2cfa9d5f44f2abd7beea44047a340d429a29f5ed7a231f5c50dd9a6344fe78629001fb0a8dab7855b783585b1517ae97791d9d20e6376a487eca1e5bf2b27a0e37e967dea3c631866a539959294be9e8d81a5a5d410f943f33a56b3dea8964413f2e4d8e87d31be62c3fedd3acf56c0109863f57b4bedd09fe7d4afabc1645d5fc241a5891131e3a6a245452281fa984be4b17"}, + {"000000000000000000000000000000000000000000000000000000000000001f", "0031f9e6e8645e35b05014daeaf5ae630e121eaf6a01029d772831524df94858acc070f4568fee3c286411a24c5403c933ab239b12c4174fec6f134759ede43cb5f3b91cd54bf3c3052484c145dda5214d3d3c7d06a85b188caad0e79a7462bd8bd6c553701a9e33ce2904c1fc8ba89a1dcd69d6f67a7991b7c9effeaf1a150db95625a793cf6a5e4579e7dc31927d26ff2ce62823e3934b54bd70b11ef3985b2e260d1a67708eb3041e3d667f2159db0e15a2206fdf23154da99848fb096cbcb40e876c6d795e8217c3a01014fba5dddf7a0b2f7e9d2490b912fae6734552524b3dcaf0baa8ef0e4aeab9ee134ef31ea6b1e09962fec983416e1f2e05daf1e915a44791a854e61c58db84ba9e83da727a2f519c72722123974b82081f47e43aeaddda1e26f90e35171052dcdf913301a7909dfdf236b050986fbe24d78c350b904c28f7eee297384a7721a00553a14603e835c97b8192c0d87f613365aa178499928a1f101712570e4f8850ba60e5f781a53cd13e4c82194acc15b4fa52dcdb85a7dd67f3654ac72aca0dff1f42c41af3f9204f5545d551fa763682b8f3d5ee5d0fa85d0be048e04311fddfd18406004dea1c45c0bff886c9141a4eac9b120e43316765e6dfcd97b9bcc79cf1ed116b81de248d4013a06b227daab703b90e091dc1a1173b657e46a4d70bdb7972daea582fe4d0c433a595067769d385e378a3c64df0e7240d675e0221b0939b0fcf50c0ef9e1db7111c025e90ddb70cabe38b4ec71303a324a35edd81bb99b6709fdea69d9c73d5249d3fc744106f1f835d902317eebbc244721f94feca3113948fbe91a6ebd7be0fa360101efec73dd0fecdc73527aba73258e6076e44674c93d9b4f64754b75a3230cb5e4260611f976d13b45bedf1bc3531b5eb43674b62ea6bd6a7d85b59db066fc959a6d60b221bcd1b00ed31fc0c0798369a7fe147bc513f8131e57410dc01741edc91a9638b6035404c5137b7df7f4bde1340301a69f7fb62cb05271b56b350433b8310197d331262b9634ac06498f1cecdf80f344b8a87216a5b30300a0ef8e95a5203b8b895f5e01f366d55d1555287b939f66502ea66ec0b4dc2f8aba1fc8a7afeb03bbea10f750344b60d11ad57cfa30b2c3fded95bf378cdfa20df23f7875fb119c203c39aca435c29cc611bba7b026279a91496c9d2e783c1d417320fd4f8a907fd1948175d643b2ac54ff8bac4bf037a9d773054bf18a00e75cf8d168e425d2a16a1a435d15b2153efacbc2f2809c7ef5b4b53212c1053c79cc390f92a1bdc4f5107c72fb471143167fa980143772fd446d96e7bfd290f36bba4a70e8891d8f4c8b0826a3f5ba4e19d389a1d4776a0f32e753fd3d7a40c3abef9a5f40cd038dd5eac3c7ad872b669a4ef869d4c7e1eb634d5929d680203991f58a20f5dd70dd5d79f35cf35d6762f0eaa0b704d85ed6a40598985550bab7b5325e0437822be094caf8a60c3ff6d3b8451c1ffaecfacca92f7b3ff4d5463f5e32e7b41a38ff8f5cb7ec73253691e619003c5b6177c0c195fce18c37989513fe18400f00aeb1339d9639277575fc6a243906f71aad5adb91c29380480d1532588b999722de0bedbcdcec89651f796364a7ad56cff71d6e79e0857155bc5e0535b7dbcd11b04739981159dab2bec07b2f967de57735e3f9b8ee710c36544af8fa84e7f5c428516dbd3b934d629ffdc0daa17de278e8953ffcc93828aa9725503d7f1d1031edfea2bf20d5990ef4f48e356fe3902a9f3d7f8e21903eab38a4e19f4b151727528bc1e750363f6f3f5241fea13028fd6d910c3235933eeef59129cf3fedd2feccfc3a8ee94b9ae2fa7fa44569de21d50516e5837c4ef18f1e1fe8b5171b7a6a1d431ff110c9dca0d"}, + {"0000000000000000000000000000000000000000000000000000000000000006", "0053769b0f2ab8cf56de834c6e21de00dbac896b3b3b94f4b16d945f61e609953053aa7796acff7ff73100ed25744a11099e9f0d822052124f849650b7a6f90a976d1c59ab4a9bc0e8e119a7c46695fa32b113d910442a6644d3bc1570f7d6205e3484ae5fc5ff0ea91cdd85e584d2daeafe58e51722af3e1d4b2a9296ad22836921a219ba70db5174af187705baab1af944e02512dce59bd0549c860a77fe3f5c335b027b38aec70e9a888c3a8d8127571b9165c53448f502cd2a8e411d5cf1d935e4b9eb7349868b85fd859a2ba47f9beb5a6142e119a8f081756d3a13d251b5cef895fbd426700eabab991f310ba3bff72749471d22fb539a003d27c6817ba8d699fbac2ea3b5c344e2c50c782f662637aa252e1e5662a2e67e15f5dd6d4395b5d4bdca953366f550e820f311b2093d0db1f299675a7c9bcb013a7cffe25bb1031be800065961f354d5972a34e87b024b9d504ef7f841ea945361fba51b510be6f25d743a48cd280e23521d3c52a4030053a093141b9a4a010f8cb49ca658a222de2744f5a0d0791e11d251c21310d4f8d790d14929e6668144b3450be8a0bcac25f8047184ff42951e27be4c963f63d4d1cda83d989d2311fdcab09786b8197e0301b82ec9b7f5c34e531c4d04e70b0658a21e27dd1f828fd741744cd10bc7bb2f0d1c69e14e6160df0f35d27951b912e2f0863e36bc038b176e36e900e3cbb941021a6df9e4a3f48d636926441610a6c9cb490a16e3726ddaa8467e9f3cba5016af8653146a320dec98f49b7d26519aaccd55e5ff19ef9aa7589ccb616f490265eb195cad00d5123199190755a7e5c7ffb108d0e5fbbb3a813e0f1096cbe727e9660b718a19f9876db43ab2b6999531a017593b363bb7495e58b9a5c96de4bf7ab7d92d48d213ca2358d864e23fa19661b9a8984584c6c7264ed2ba57b8005c7acf5c9d2c710889ba554ad75172f9caf9bbc77380a59d1c641e8dcda8c73b2c46ddbab4b057bc551e1022b9088a6dcf58b9b235eced236533ac4d9ffc5af8d489662c22efa681a9a0f769a7b28a387cb55800b23b76ba910e47f431631e4bad14bcfd991590c01bf4327a7ba46e19d6996519bbaad5e587cacc80fe0fe9cb00e4888caf19023619dc62003a38f9bd8a2b1d195d34df8abe0dd317e45aa8da568d97ec951873011cf9c9c449bf4994111589c67d8dea92b5954be21c4d7ea662a0e025cc8b257de573f6617d227f340c023fa510359ec8df312d60e2b4a56e80bddb50617b06dfe491c28a57933ff36316cca0443edccff81d7f056ea897f293714b5d43f39da5d3b2610aca4939b512f3c2ec83c6177ea26a8440a133657e4cef5c3b351439846c526b01c9a7a1f1c4eb60909d28773397e942d692c117258bebd11a95b2a5d63ac7a4c95d565d038e593990514e28c7a8d0a1912cd639f7a4fac19b3ef3c45e18a7e3ed733483f974d56c3e5e5bd69b0c082189d34d142ac3785dc562f03f5aa565f20fb4e91bc5f6143f07c2e47f0f826b5fb8f53344153d29ec0461506efb8f086b6d6230f2349723ca59aa9ab1f8246d24dfb81089153973c753774a541e299fb4e0cc0b13abc6b69bd6fd04b8e890d2f14bc28b33d9f8de37894c36f7dca4caf5bec7acd46e0d8a88855ec3ea0842491d6e0c67a4f20141964872d2a0d462af533a0dd75bf1499c1c955161e259966b8a27531dfb42350b988581110466bf230c71a17362893cf385540221105a6462d74d501b84ec5203b96afe9afc02bcbf090b3451d38108f7c0e5375441e22d114598bad9a71423476ba5634c7f79387db3660d2ce4ad96243ab78e110ae5b95351b3533e4d9705b77dd24b577edec5141d4075b1d8d702d32761663f383709fb137e5f50f1"}, + {"000000000000000000000000000000000000000000000000000000000000001e", "0049495267c57b1546cea029f70e2fc48e49908f3a01843e2f0796e8e0d472157fbec9a90247333e22a108fd27d70b619297cc915527a4c635967502ff0712254c46e44199cb235e76e604693a04aa7b4bd4ebb20e7faabb070ee4d6e7a33559873b1801b73b7312ad18504f22f763e9afb61db1ea05cf3024ec81cb42f223fdbe8cc8da8b611cca43516efb968ce3a132782e36dbc7396f6278ed4f8816923853a151c6f01cd88700bcc256a2868670bfe860ffb6d52261405d9401f44c1535b479177af1c636568611de408a556b5fcaf00aafd3c5e005fb3de8203721f1c4db7f327d1b304d3c7d0cf862b3ec3dc89a19794d6b62927a97d9c83d02a08ee56846d7c437dde05c92aa4e81a59fdd97e324ac0db35476e9b5b79565f5257dd84f4f237e31c40b6b1a234008934f43f8a24ee16e8bd65fde97c6c5337a4e2b421a223de5b3a618c26c621f62033fc4ab010eb966eda13b75ef31823fc4d70148ba911cb6744d34bba0659e26394a387643375e60422a0ad4de3d136769c12f05c69d5675741b1c20f1e95f4eb9533745fcb71047b821a9ed87a4ea3a3cd973c5865e4c4c0d8615f645ea9805e64813c900a771dd120cecc4f01089f8cd3f260ec5a5d4615c44ab47210d7d4c0d4410bddf6c3108e38f9662e4a92df3d9a66ff279f0c426d902c9d124dded451e235ae8b4e9e27371d76d92050b377caaa65209d27a13f68d2f314df8a2599d3e15756178750975acd5eaf4f36eeee8d9ea931305bc274a241189ef8635b4c6fabcdeeed55af641dda4433d4c8b78e2a9e77f5e3aa802ccc1e9c695573a996c098b4be66d242c633b20710ab5a9a38ddf3fd6151f2852b402bc0fecbcff6c930f71ebd073061ed83ef60c3a22c24b4ffd38d985163777dbc9da97627e17eb52ac642cecb13fdfcad2b7decc78ce9e1e9df511ed0279397c20299163524ef703036852d7540d3fec0e06d6499934dbe831d998f3ad9ae97b4210f7ba705618df8fe1fcd0470d239dc1dfd25d64b5d54cd5669c31b8cf77af56c3a99439774a137186a762491e48b104c9e7f692c310c51f03307ab11cea4dfe817967f207757d67c20771bc469862d3d96de570f9cd2b4abb19d6640ab4d71f8fc8ebb3364976ce2a281fb2fcf574d703ea02a26239354ed9e092ebc9170da098ef460416d4bc504fcad4ce8f76c0936d93be273333d5eb0896248c98b36d99df3e71c6c896db227a2b9a2add1657d913f120d285e493e7cc9045bbb21264117a21695baf6b08616f8767e86907af59421eae08dedeb30c3f5f48ba4bf9c8f36370c5057166783838b1c8990cca43dd621c8d073aa8b42430c441ce87fe7838a31e92b2f9f7288c917ce80dfd997d030bb9e79f03e42f0cc3bd9c55bf057356d50cd753c9cd73be9ee6060409b0f76f2d1d85b7e2d1ddb2100dfda9217476140d4c5e14fcdd67cdb85313dc0cc6e173431c3c2fea1f9b4bcad8c9a36b29878387a2ad17125ec33a2a5123478454f98bdd89a273a58d3364a23a2b8a1d0f2504aa042d2bd06eddf42a04e39f69013d42fb5f8d2b1718f2065f202b07cf12c1b69f584f618f5cb93cc20ccf036013d1f77d95dd0257a23e14ea7e80f8b9a71d3e7f2752530cb4eeff22ba4b4132a5673db25cbe045eec6b69418aa1c037a114fc18f4d9db99f093c209d1b10bf8082e44772b37522176e4d60f2d1abb8415da35947c8bcda53a28d35d4741807b28f65f251e59c42faba1b39be1c81e273ccd42e87f6e1fbf935a05dab6b10094b1caa654a30e7fb895bcea386af68b12bb7e7d4bdabf64fd8d163fc4e78ef5f7c2df555808498d78c9e5bb59f9ec6a344ee8dc0fcd73bfdc632227b29f6b63d7515d0e126c1b9c8699ab7494834d"}, + {"0000000000000000000000000000000000000000000000000000000000000029", "00346c46f773deb7cb31a1fcb128fa86577ffe731225dc3ee84ae1e513fbf905d6d3381f42de6cffc355104e1d19fb5d98c934ef3310b57568973aeb9d3e6e2ec80b35b0e04a47f7d3c5b384d0c609ce94f37ac3080ca5b653924d3ca2ff31c5bd377ab4ef8fbdd18d14c3a9aa47f9d367d6c3891cd06676bfb6339ff2dd125293338790bb39314f69cd39d0043eec4a19cf854058bc3978db881d9cf976d0b877bf4a0d28d67ccf00752de3964194ba3daa66287d5435a1d12b90c4cb00fbbe0be902666fe08a051c3759089d70fd56fd01244b475e76a3c67fdf5c74041c65417d336b32442d2732448b4e5f055362e4766744b628d1c89d8e52ed01847433f7827e32c7c4e059c28e6364283aba6e990f97bd9da5116cd3d728017a8f7d7f74fc10948078118d27729d6583bf49f4048f1cf894c1ca90b657a22f85bdb96427ced9a926a40b0e3604167e13d9f2500198f9ba43d7e2890ac4d47b2b27dccf9a737dcaed21e851c88ad765d9f2a3a5218be71b0d623a4bd7930a294afbb6323b01986f332b746535d1ecf6959252107019ab428a82673ede33c7dfbdaf7dbf605909c0022f7e3ac3573c477d27e7a95674d262aaa2d79e8c0be7a5ea6a031a3443dcf1139bb19b80579019e4a5047b85b1a38e862e96fc21502925bac11fae51479c45bfefa7c89c2c617b5294c8cfe6b53582b0d4e9c0019dcacde633be57b154612caa14c7544ff8dfcdd808cd587d26cccb3f994f53c580f497559bddd9ecdd07d88c46af03e10a5ba7d141f78b0dae5a62b4d0bd1bff020a7493e94925f451d6029c2f2515fdda6aec06538c61f7c42c07f8bb90f0e2e69a9ad966170d42077e8cfe7b61ed89232312825dc08ea776c93c6a920bfcd5ef3be76709773140dd1254b2e0968b8f2bae303da4e147176a37e13c03fdbee2c07d6aa2114b4102054346f3d2843fdf1a37380d4b3ed20743d2e7a73a3f8d44d7f0bd099ddfa659c25f27130a903ee7170afd2aad1f1d4c5943d191960ae52a397da58c8d323923ecf7408ffd43bb5d29c0d777035ee9c85874350b3114c30551e1fbf48cf64448fa333ee74b1b2de3198364636d0940b9723312036d3bcfb65482b8eff012612eafbe84ca4d18ef019b096ba31b27cbdc56a049cc1afead9edcdbaaf85567d7f63a2d9336bb5bb1044dd65b270a09931dcc1077229bfccc963a06970f101b58d5c90a07fe78dbf6f833f4ae5a879377c45926af1cfa451885adeb43132bc4715cd975953bce394bdbd55523da50c9a9c4057c29d848269aacdc926f05016b2d51b771bdf75f518cae231614d97e1e443413ee435b7d9b8521039194b28137f2360738dc6f430a3dc3ef13d3fb5f0441a40a5f7d10811043aea7a5231d35bafde571f186b8f6ff60622342ee8d3f9c9304ddd0855b661413bacc03dbcffd45b143cebdb5ff1e2947f7860c75bdc50b033187e9b444d3441c0a6010a08f5ddf17b417edaf115db20e306505f28edddc56276dac60b4f5d1aa0606a2c7b7b866ccb89c1e71057c97c798720b4dd42126e325f4aea717c899b74705f4103127c9c1f5eeb4921d3db230fb4672bf493a295cda244d9df485f04935267648dba1d10a552c8f324c11e1c2e36959a99997b4c9d4d9462a2fd6991f06cec44cb961b1e97601e534e7e8b7bee52e791d831d6a6660f89817df52c4c2b4fe4c9f0d5f93ba573009b86505ccd809cff0e3950df9f7ca5ed37a5d91ce1a9ecbdc1f1c5d8ae91034b70c31535718bd9ea4fd09c7aac4bc55e9ecf0a20220804cba3ad7183bf52b0fc95fd0f90df0b9ff9a6192961e7261320991174d10ab099c635406936570428cb498131dab2a5c41d61e4d8684a454c3d5135ad24560454bd9dd3b1a9b1c"}, + {"000000000000000000000000000000000000000000000000000000000000000e", "0043c00c93738ce1e4352b017bdcae3f75a1bccd1c08902516d4101534b5c350e2a64a98d28d59d6d1110221c59d260516a738a5b62aeb43c38e2d73f948290dd4265e6975c123f7c62982d77c6d7f45f71d77690e71e8dad90a02316a314318c2195b1925ad7708be50d5ee04c39b8bfb7c2305719af1877df90f3282066af655aeafa5e93b941c97f35f484be624b0f8b2197bc464202c72fc5dfe356927afd57bee7684b7488003fe09134e5e33adebc5b3f043ef93e9e0d9bb2e3a14eb8ff47f4dd2b89b80c6148c60853a85321c8b2509fe155edaae1497de84c166d243d6b55d78944aba205543425157f28ff3ba135b6ce4dc9ae08b1badd40f0f23393e21e9475182934d9b4ae1e5b87718f93b376e7d95ef5556234956d4e82e6e9079778cd8404c19af44de7d49eb90b3bc443f28e07e1ec5f49eaaa13bed563262d6c08dd3f3447c51e5b785b56f8fd50c02cb16bd06da18993593338701c4f72d4df7d7132109e0147f218da7f33dbdb77340d02b1a4c2c3d793b087dc4c6c6cf3b6742f43098cfdac2994ea4dd77d456484775ab95f67ebdcd85ed4bfd29099a1cbdf4bb0aa9c602ec4f7037696a34bb08458299d97b93c53a0d1f89baf1da77950083e3c7edb394e54bc1d9e9fc34e78b60759fee4575be27cbdb72cd26222759d8c04c240bf9b76ccf4d9170d707594d6851cff89cff0205f21e76034994a335c3216187493dfe7f953b26e051b1263b4bba34abda7d15ab447cdb1b4d665a71c608c6c49fff84a2a87f4350dfb5450dcc89ddc8b1585757af4c7ae619e792669761343fde4de49a9236e70f66aa2dfae48a779385744d5f30939ab3dcff5a6f12514a24e607210edaf044226665352271e138b56347c8ae317d92d6558934c77466f4645634cdf1e9b549e0d5e6715a96b3fe00d60aa87e5302688cd71df400ae4c7748845a57d3d6c2038e389fe50e6e3893e62785ee5327db8cf37c1fd43bc135bd55d63fd704170148c95b21b46509fc5ff37f834e391de60fbe4c840da7368f20c5e41dd3fb72ee525b13bd42cd3f722502b660f71a399de1d2a2d11b700be708bf4bf20ba911dcbf6e9a4a01d3ff4321ce21f0948a4bfc5e2253068b65f3705289c7835f344be0338df9b3939ff7df31e3b5c2269be23fb77b349f61d2e1a326de7f1a12025a004862939d5383c4d4883753acbe0b2ff535dc1bf7c19f39e3582fb1ad03ad5ee3462df6b8bf9470171355f69535a6e7f33e9532dffc0839c41db9bb25226e2f8a2c22ba175e4d590efee2b406531b3439a80d45879124623991197bf14dbc7ead1ea854194b2c203ce620bb5ba161a627426d2a1a304afb8bf994c513d6aa22e959ef50e58ae30544c5ec260b4f5ab874302786ad7e5da58763058782637d026de7c137a7a603487fc94a6028cf56235344c5daafb9fd801cf9292bc7251f83a7ea05ec5c7964147c39d3b87f7e4f44067bd9bbe274166fbe2803792be9537629ccde0bf01524ca3427900550f876f2bf9b2b48e95573fbcd0803777f18bda516a3cd38e368f8b41b41c18e1d021c04571ffc1a3460f9ad1452a34675c9e56f0977459b183ac4f218861969692763c0b8c48a1931c31610bc3cd58f9120ef1d3bb4af7511c7b55265e38cb62f0e084f992b176fa29be07e6578f165596efbbefb7b7743725cd533ddb54ef5db649f49ad107dca5f9eea510ed65ac6b48745b151fb3427b9ce6edd3ad31291f33eef9279799b02b99ec954711aeb22a6526ff8f2c80b697b8326d92d6b2c3ca35e6af6539972e51e4a9a42a79c57b0d5619bfb398705955951e612aebdc7a50d5bbefffdc85e96608c92700b32e03751e5fb937a38cb7484e41432210c04f41ef4cf44d9a52d962528"}, + {"000000000000000000000000000000000000000000000000000000000000035b", "003d7a484b0c9c1872b2a16fe1476995f749b182520262e83fc45ecbb7642f678e4eef29fb90abfdd14117990f170c084ba0de053323ed733b79d1151f52a524bc9edb53d06f81833562e4d5f93a4a83c0785c541047d2219c17c767db219328409bed873e693af1f4310d4e236216aadf7c8d9b38afda10e6d5939e1d644cd1feda485d8b1529e95544c3d3b4f5f33ab153535bb04cf6281b3b5533ab67382b7cff5a5c69b8b4fa0bd97e35d50b92656d20a50ad03be5776263fed1b1248bf6e2a74b7adc6030a9e4bd63866e8942fc38cb0f91bdbc2c880002e98601752e3aac459e8ded4ba019395b9e034ff0df4dce62592974d1c5dafc51560a1504870964d1655d09df36554af4e3869c9257827725b2acd7ae0b82edc7ac669189418219a725fcc6b12209ca1ee6b6079bc382e894f9eaa06f382cbb20f624e66ccec2b15627a80833f9ec7edce361ce3f617b00637b7da3d468abac4eb4c7e755a4f15a8131bc573cda0a36d52b299dd50f840a17f52c2ec874b6d12101365e514cafad29f261a40a553e3e318254721fc91cc8469005584e2729c0b2e052eacbed4135383952021196e76cc82def307452bbcdc386a6466275144726bbd4d52266b497c0aa67def97224166db716e5b90321f491519d42034cfc32b4df53d25cc61739069d299f05193890910cb7e302ddcfcd10f9cccb1891d7034ce4223e5bb1b108a6e1cc4f61802c961eaa49530d39ea3e4ca9bfc5e1cae3b183a1bf25113b372e9b381eecf71355b84151b1548e1a265115f4de3b03b938a2bb483354eee32073f5565ae6024555f7f999190da3d358fd1c559b8b23c18a8a981d4f94ef1f5941195aa331d9cca467611272f8812abc2f1b505a43800eef6c128fcb63569ca1b3123caba429742d8ede44135b7343059623af2c9911be1234771ca7ce0d451302bd0e7b774f3316fd9d70c2267b986e1598be5d0807100ccdb50313637fd01584fdff70ca4ab21da6090751f5d516975f39e2e5e2e0a6bffb11a358bcbc6008a951741da7f669ce259999d57bc38e8ad2db6bf52bd6a255e4696537e2ed830921eb8096f86edbddb363804d64629cdc0f3022b6b78ec18d51fff57c42b839e13bd99491759cce1c050a4836e3ca17cd120113468952b459f64473fc04a6110a4d5b5a1bdc570a65099b668151564a939323942743f2979612a857a2e50e2ae78ffbf65bade3b5f38a43f74fe90d6f3df4f80a823dc10609cc2ab6b5811f0970b3758610d034f810fd5c58bea3a817859983c3005d135322d9db7d86266344ce4f13f482b89e9292b64327dd30f93d6451353ee4ebc1686857cf03a5a277428445ec455dd3fd47fce49ce056a257d65534e85bb2c10a1bbab8b90267a91d1100fa6913f850385921c935f22cff7fade002d77c5bf0d7be357e1c10d57b0ca9e639381c6b2944b83ae1acaa14c7db1ac5e02efd9a1dcc05b18ada0e0dd16add5850eff56e40fd77ca4d75102d36f54231a5ed01299f161b44e979273950dfc2d8de1e55f0139f40f6b38df696a249b51e18c06cb559272afb521801962c44ccfa0bd0b5e47a794eedd1a5e7cf6dad1443249a4a8fbcc7b7e153db7478767232041555072aa286c2a8d6d66fe07086c635b633ae8432dd93b405094b6622649fade3f985f25cb072ce35baf3f27705a1ee53e75a14859b1b909af48f7ec84e025f5e5818495a6780cecbd1be16d59444ea7d69bbf658db191a364ea87a4a34793e6d54f7a52f23029e3d553dba0970a90b33d446d1c9c4421a5de94ed16b783af097453ca78306519c4111f33b366776838af453ff0e1715984d9eee0d617ea10472f9806878936776fe2a091b471f7aec0db1bfda02c2714de560d21b69db16d2"}, + {"000000000000000000000000000000000000000000000000000000000000000a", "000ee6ddaac3c7a9b5fd21f541ae6d81bc436ea24000876ced434cc9c12fea943c0e3c605a482f7e39d323af314c0fa0922fc0fd92e4e53906113f923f1f6d61170b87a01ddff30003f6ca51fc12c9bc11ae9f3605eb3b26abab9a838f5040d56f47ecd8b5360e8a6a0a5cb575052bb499b2d0764602da8059d3a5785d7b1b9b2dbd9c089483a40f63e3662a88016808d6d5992cafdf32ed68d2eb9f65752f24e0ef972fa4dbd6210672ce2e9569819b8199e4011065f7499d90d31a1c3c420393528ff96d2f22d6eb9dfa7e767299bf5ebd0e3c5eba2e1dccd7b5d9725a57438d46854fbe5c092ceae5bcfd993ddf734db4e1fbd5baa5febb1d9446075e771fec902fcded5f07adf4da714e27c778c42226f12f455d5216ff769383447cdffd5a3d2659cbf60de5d69555131e8ccf39d20461da66b0fa9c4b8c1927e7539058d4bbf914cd8624a3384e66c9527864e10217fcda4582732d2fc0871b423dc4e71a9c1dd152241057fdb6233a49576ba356bde1ecc0eef2ab54d81b6403f0ed7753a5ea595441147a67a98bd7beb916319d79ce72aead53d895b5ff47d87b8660e2d8f04a076bf2bba4e3a6896343920661e089b4da803fdc24457b65887ae473d746ae78d670dd8ade98567cebbb083d6ef133c94beb730b21ad8d144388927a9ef6991915a672d55e0fd1c121860c68f8a94350f25c4ae50d5567cc458c9063863c871942efdf9312a0df14d3111f3ea58ba3aa9df9089219c1a1dc2915b7d99f531881956e48e25d4f260c06a393f5d736a4d8da086e48ac068f9af5cfedf3c42811275e1db6830bd4eda91758fed0ef616aadbe64a45493e0c721db9c9eae85227bcc7aee5a1031823776fca2c64929e3dc772a2531e28f7dfc5979c94cae67de766503d685249b50ed3fa91bc2ed5cc52bb1e754a2825a482e5d557dd2cc0130a1b3f4cf54a307c2c164b620089ee600ff69fe1c875e34b00a2c75042134b6daed32769f0f9fea77049977742f4312742f90b69dcb6c53aeaabb595c15688e7d86ccf0cee3945cca9cede542c786269ee04e06866260ac07032ae7f3d50dba2a34627f15f5e3ee490cefefe4d87cd190323cdbbc7afa6b81935dd2780fdc652b46219249f76af3d83cb22ff1dff1bd03c5108f5c9ad90db2526e2112ee8be6694500a4fdeeeb0730b23093dcb2891fe626df9cee0092e16cfa61520fece3c865a064d5385392791dddd3b0ccfa98b9d7122a02ac05d7b05f67beb3780fa69c2337819b5dea1fd037bfe54cef70e45607065c47bf4e15d4b8464f09599d2ecd46194b9b7dd0af43397b2eb8f8f940b3188a765af2208a4119cff795f3c7838eae8c9b1cc616e388fdb046b9234fec74881d452e3daf53da606219f5f0dc07acf8fdb523929662fbb162bed9f83807020a6cb65d510fe6e6be1669f6dedd92aaabdfecd40c9e09bbc3913d66e1ce1542507be3ce6a609b5eda0f22ededd3dd0c6db963c25a267c97c210a1733c544fc91b854af331cdf7652b16e5eeaa66e1de79ea4103af543dbc18bd8f2a3126116ef08cb5e85dd1a5d528d32216078c7e015e4d961c1168c03219fc9627c72d0465b1509763cebc38f67d7de6f06278227c11125308dfb28ae37e27641ce535cb2c56f6f1eafba3dc053a960fc294a217c2cd307476094039e7bd9b953512bc8ec4e64f71792c0fb3f0b04ba7990605199aa10ab8acd10dcfcead0a7a3261325b83b9f84d1c6a8a262b3ef822f1bb2be3e0e26b1c2bf9d8df3408930709ecf71aad43338be7dd119077663271e26cbcd16231a0ca0a2f9c4457f3a11590e561d78db1567df54815e9b3aaeb5516a904423c24256deb6746c91fc44d1c0a4c7c416b1d07d292f31178f34b9e7eab1e12af"}, + {"000000000000000000000000000000000000000000000000000000000000000f", "00a437c55f115f8de60ad25789f4eb05876819ba2403e5816da12e283bd5cb134d9d2619a67e061c45c102c92d5f0e4279752ac7935a49a6acd51ad7e9d631055a1434dfb056efe8d7e4e0cd788dca2eac1e02a1031bbac286e2fc6feaed70603640ba608825fb28c81da7a512848cb3d0c862f4c5875347f29523ba57d507f3795329030b251e02d5e519ebdf02bd049a341333a9823cc2661e193d19d6cf8071d87e890196fb7400f2dee19708553f002b52992e742f2d727ed38483039e11bb7a837c9170f1b3746ab1fee6cc68fd8fd5070b42ce0421fd555c3050bb6a592e4cbd0c486cf717dc26d83fec4045c23be7cfbfc0085f65f17c700802d1f65887592eab0185d62b7f4ad231e4139319a309e49bf0f928f6e1e28c714c6feeb366ccc27866ad08bd6355c66fcc87c344d6ce513d0ba7a5af3f22470bbc967e054f93c3d71e62cd76606dd4d7591584bb0206cdcb43cfff78e994b5b48bc1a99317d87ad5590f7778829d8af0e05c25165b70dd32ad99400e80f72f7c6f940a6395b72be1032d2c1f25ed1c9614d893365fd66fbe57ad2bd739047f87297b469f2d3660470262ce3be10c6a6da9a7b29633be985181d43dd3b722a6f6d9bc1d5f1fe9e327f37dc49b16f6221b856008a703b4f8ccc2df8bfb60dc617382f5ccf33f85a6132edcb00e5d70392d46213cd2a03f8089b7cd703e02e74fe9ca5015ca954e30e6dfc27ad613ef3e2a2e242625a6645a40f5008812665d3e5e71ffcf916f38048cb1fc0e4f24c7f6da2240d2581784cd7f4c08880740405d479d8121753e24db0e7baad9bac4b09ef0063ae567bf972aed6f52049d982df2c5bc141263251330424cf225b22d6e9f07d5ceed8b12907b56c76e093eeaebed1a94dff82d13db1ae4ebfd5d247d248016b4b719c14c400b8cd27759254efa926f519a2b300158903c16c0d87ace5c85ecc92ff0fa320734cdf555a0268c4c1c817d0ad085f90a64aa9615be9ffadf2ae51d07e84cc639d7e494111c24e4413172ae8e8171e1dddfce75ebebd10fd769f06b9f76566e3fb7c604a9495731deaf3f40e2d079d9e1597842eed1c8b13a6f05113ca16f830d4344324ef2f6c2dd0fdab7881b3196f47f0d6ba0c407f1faebddf96ad4d03a697a2fa87639b498c9694bc3d7e475f28213121e7fda4901d7451cccdc1a5d8362e2cef275e791321b0ad1ed27d1d721ab6c1345cec304977854604e0a7f7bf02f0b4702605143a96ca89d424dd2ae69665543b7f737151fe8b5d294189b6350234622a3f72b8f0bdeb86813b9b1a1ee1bc4e1e54073aead70a089e3516fc06f46da5c220d21391df4b898d1b2d10cfa4a191de52b1a0c3cfd551ff14f69cd53e62bf438f9dbe5764f2f2ddc9a20ec558b9bd1ce965e856ff85694855c9b44070a8f01b34ca7a108f861655d127aa33ef7bb8cb24e6bfcfef85c7907f32fa53b55d5e979c6201bcdb5135155e3e51f274780e5a49776e042bb10053b005b4d9d6ca6bb5d1bd5f80516805172d69f24e69ea1260f799573cae3821bae7cc6c865f91c46c8dbdd7272151e93e0030c8c09804c615ef4693cf945909859c12fa8dc4ea1b209d7f75834a3cae7d9594bc15e4d4e4e361c40641b0384fd20271798727f0e52e5bf8ff00ac50232d6956666b58f07e2d16020523daf16aa2d2d6dc1c7e95d936d9def73786251a46fb1009e90d71c766d585c13e3212c2b74bfee47ac8e952af6069566332422f89b9bdfc4d467f80fcb940a0bc39af47019b04e7c3e9e043131d7234075bbf464d5609760ab2105bc744ccc40f6824b45b7bfc826fa366a38c94b1f8b6c113892986cf2e4b897c67c52a2dbd93f05572046f7456a0dc9e2bbb986b3d74fc01dcdba989c47"}, + {"000000000000000000000000000000000000000000000000000000000000003d", "0046697102de3edbdfbcb7bac3d92cc9fc30d75db801b27d97cdc296c7f07010b21cd4a3727c57fa90d4147be341ef8dd335bd5ef436686b9e8d25e0f989591c45433154d9ee12ef9403ec5c62bf86ab29b9cf9f025b464e042428bd3a169226f5aed925e1b1ef3a7e0e766c86c5c88828636c62579f9719431566dd26a938e2460cdf28065fee86165be74769caf0fe3bd94b4ff6d3f07d5c7307350c260d4a5a8aea691e1f0de6031d898099c2a70e6b45927cb06aa4e595622cad1c27ac053414d82675ff4875dbd954428238f399b4930c00a1678b0b87dff740e30410573d34c906951e1334c462bdc057d8f51c4a2b21cadf17f6ffdad8ac6806ea8418108ac619ddbf75365ce18bb608825c4f350ee77a6a2225687b818393e428f94171fde358f2e217a535ba8c9d1ccf708bc53429569dc2986996e0d05213eefd549db4758fcc79e8087b3a86ec3a3958e30095b33bc50d3427e62b44f375c226eda19ecebd9f14f9c64e5545ae30814ee4b408b2a4cd81a3dd34740f3d81082a73c7bfbc3835b5286b64769ba6fb5af618cf99cbec5c5331349aa9a6356cc7cf15c4ff15c60ae2d6a2765e437fa0fbd467227e29152b3a296f1a221c8189b28f18bb591549e6935c6e56a8e595ca951435bc3eb9492329ccee2443e2b251f287dfb80e241ce2b590f7a956bf8117059a454ecf6d96c631c5e706d59d9df2525c0ea857668d9270252afc647940bc38925230b3d01443fe5cd684ebe478bdefca1921e10c871f2bc3267f95ce8023e9c8accc9100da6e38d6373193e9afe46d8f3cc168f4c3c9ca7b6bf3be7f740b37cb79c926308d3f6ff7c89cf03b2ad9317d98b4277a7b75a112df07596866e1e7ee93e20276d903d82bb399d01e162d4fa0504494e9e727f76ebdbbe3783d15ebe530e68ef5bc2796f6f4bc74bb481afc120d00cfeb7c940709a6fc217785cc42c3fe9f471d858c1dce0e16a392c13f1cdfc6becf39606e8de87d075909771ac61d21772f623bb1998537663ab5b65ef6452d2f35935651ad7a9e48c493f7eb2fb54ad170d07404fbbb63fc90f77d96221a4909f053efd7883f2d050692fcf4e91c4cd73786057edcf9f4c262619db8381cb70be70a07f3dc714732901cb99c58ed23959bb43ecddb2260e10e816299481540f0d9fe6b74de4156053c248396e3f1fb29ef008ae43dc50dcd6c71d07d0904af23af2bccf59073f2b911717690b332543fe4073193fabee8e99d9180f0bb61f1f89851198f6fdb53a6de801e2178618a90e6bcd7f319bdcf7b6f700e09cdbef24acb9c5ad45132c369fde1a4c0594ab58720406bd36dcaa2dd59cca51822bbf5322e6f9238930de7b5c11a89b012a2327761f74a597a7595d69e891a7d0b16e9a8395be75032a54254b87aec137a6cab01106b863930a1ddfbf940190c420da24688969287395e97d0579c3074f006555a49559d9b5d72bfe6ae1284d6e3c2924b4b698888a563cfa0ea98595afd97360a8f6101e18937e003e9c7a36f65d6c052def65e05f1e422f60f4932c73a440fbd5f55ce7b427def2f1e7425e956ee78177e6ae913407bc036f8fc9c67e6112fcff4be7b8747e0ad859be8c11939fad71c0681163e26de84550ddd5952fb13d2f80fc30fc93e0dbf0306df6a618a7f8ee862f4d8eac1aff64c1f1cdafe0df2b4155688c2ded14e035328dd0060e7bd87eb0d108372db39a407f981fc212efcdaec82c7cf1b56b3155d229be449860b7327a9b6206fc6d2e31d5e25500d315e6bc507b53aaa2ef4c76b276086e7d1db92fc6c358f645c7ef49ffed557e02879795f296ede9f5726120563ad4a6d34a1d356ac3f3cf08e79fc16612070047dace7aa3fd3bd20e71048e9d8cdfba1daf049"}, + {"000000000000000000000000000000000000000000000000000000000000002a", "007fdaed3735b74db866f0f936aeaa78f4e730076d1814817a5a4b969dd96f947a277fe80540d3bcf9723381f9b570e3350942d413d4a62c7d2985599ab3be3f100fb2a6960f4adca107ad8df5601252d994dd5904f54138ac9ef2834ffc96b21e60f2e3be40de123b334c8b52956fe923c512874394600c873a903f3e2a18b3e1dbf5cb640f41ab18cc9bfb627eb3d73830942ec27c80191eed6b27f4c6a8e1e29385f1fd97d9f6060d4327bdca27b8a08421da6775d5b98831b8f1e715d0a21e7087fd7083c7e1bf98ad3bde49e6f81ec0071442152be2e227ed7e508d4ec0ba018767716a800d882992d75191e4e83231724dfd9e597e563805a3158fb93d63d7c86d693d62f27ffdf138f639092bb8206515d1280c9d61bc4605878b47b59e0fc0da96e61897ed23914999356c5a2637bcd4757711b7fd45de4dd7cdc786b3e3c7cdacc5480d744c2aa0fe5f45ec01be7900034938948d62a24c947fba5d60b9dc55aa15ebe457d99bcc85cded031cbaf9a62ce2d2d1c495026474489e29ec376be0570497c6c2c5f80419bd8325bb61420c2ab8cda04485e0ece768d603e15aec6303e83451b8554d3b2d4d50e498342cf83ba4f1af4b1b59aa10b4258dffe6867479ede8f1cdffef95b0260f7cdac03146bc68576ee3beef6bdcf51ed8bc2aef1e775387361d0e49de19a30f36ac743dca381371a9022e119b122a32cd5eab19dba7d45387ec221f823b1bc8310f66c8a7d247e3c3c8f2ceec875c05dc11d50794963106b1bfa59c19321ed1f7838309e35e221a0fdf16610d2076316cc4a3fa115184a9f29592b8a002cd97382dc618e072373171777a788098721f0f3628c203c996cd0bee78a8250213352fee728dd6330530ad7d2eb8ab4853cd9133c4964c3a6510b28e4cc656aeab959e977f86c89bf63572d9c946716fbaac18011e87801409c4d5da6fd397e3b2a639ab90b6ac150719b96e60c395cd1bcc54492cc9b8e5900e16a0b30221e88c7cc783990402e57d05dab21da16fcda3d906f06aa33f98f9fd90f930f1c49c8b3c8ac18bebeb110668e56efbdf2ff9286346bea82318f5703e55cd27f7fb8b97513e71f83833118e59465d1312ca5fd016596d39eacfc8708d2613d98f68a04e116c1500f82fb39da8254ed32331bb489cb45e2dd2d948ff772e0184d40fceca7f8ea96b119147b7c06d87b014fb10171fa5c76d2229716af6c5a2b35d691a652f96347f02e7df99f7d5f268b9b7d44f1ec7d00d147999bbb7060e5f4169210ded0f7cf782467721d61618f79c57046b2496b0b7258dcc9d32215d5c883371559c45f96329c690e57997ffd28896cd2175f24de922f173c205921d2bed45f967779cc69d24ce4a89bc0dbbfba634f71a39c1a9cfc78e0dc84a515fe456653a7f9e380122f628a3c7a14132f1610278b4a738988b78028d0e071a121f1b29bd9edc01f97b303fbccc6d2b139d1333fc6e47dc0727b3876478737a4a45a5609a892e26e71d7ef5cdfe3083c0330682d4ed226676bfdf54052fae7c4fa33f4392f123536d2fb5fe0440b092150e9e8978f2e97563aeb80416b4dc80e18c8938c7d22186fe888c5318195ed3e238db6a462125888be5dc224fcde0fad00c7179502a6cc66977eeb19a5d918d01cd4158d2e0f9fde335d2985d9d02ed03cacd0e9f0d011db68ea3197954b211178cc7bee19648d8d89619c49be46ee7e69bb8bb697b5e7f61fa64acddeef14668861c2f975bc1b9f8965c32fcbe81e299b9b94e1bbcc3f8201a7c71ff2352f8bfb8b099f73197ada11e88cf9c3d188cd5174762c460385ff8c6eea786d537777f802ed2efe1a7f1842d1d3b62693640fb8026596eaccd09d95fb2f5a9e7c856c8c636615337c634"}, + {"0000000000000000000000000000000000000000000000000000000000000007", "0124a9483114abcb470b4644f2cf0c79d142f09e3e1c028db098d6ec64e237357ebd60856a0942daa62f3cd91fff2593e1ecfe5b3aa33bfac3975b13fb5c624fd5bc1ef29e67c5766de67bfec9ed96e1d35c52b60b7d350c26ac1e1d947f256db25b470db54fb536023ee5fa6711a71ed3ad058423c2f1f0637db17c3c1e2f94e4e1c6903a98a744593af94bdcc699761576883b1b9c196cf62827bf5c886d88de70bacca35a009e029feb8c978f97918cb1d267f52ebc952bd2d4162833638ce3f3d6b0fbb1d2e4b06b2afdea241e9c815f1837dfb801699b77fe8942ea50ef8274e2604d06662fbcf24bfd5129709df0031483fb5f412119bfef390656821d989ed737128d52bcb0cf72be7ecad52bbf06c48911f5920a1f86cd50b81971ac9c78101e93731887a562b794b7b59a84b55bfddb40e58a663063021e88dcb6789c86573b6c522801eb34c54dd5b63d6e0346a794486bb9e9a8d57adefe6ba766bf28594127386e9bd98aa0d69d710665f37078234d83c8d6da651c49331deee7d5f9ad338a1507619aeaf74c5bfca21e3ed691f972c66bc4cda5fb9ec1dc323323f1c4fd171b5e3579063df5996948b8c2758aa75f653d9ea3355b03d3b18d8360db935676ad37de3b7117be472132c86b3e949fa9798aefa78304caf386c08f7ea9d0363f0b04106adb29934ea473b5724a3543db2acca711ae95165e9cf7c74e8232e4cace2fb8bf35a8e24814c88b8ca831bea3d71394ebac3de3d643eb3cddb7165df9d0229a749f4db6c846bd44c33636b8f96e342020fbd424db48759ac6347cdbc5ec770fa53ccee0211a12c6ada9bd87543e89257760729eb5527655f123040dfc3717671de71e4261c8f2f2fb72debf8bbc25f6eb6283d1497cd1c31298576b0782ff58597025284d077d70e4cf999366b2c3e2dd56c4c3ed726469061722b9b9a38115efa5e71fb0ce736662df7cfb9512d3c5e099ad7cb978cd94a7aa3ad76d5864b0a25a27cf6bf1a7bb69c1fa32c33a2f4e51d9db00d5f2e45f5962fceaa2272739320b4394f2ae2333e3dd4a1d0ffd6cb19d5979d756ebf1d1939d4c80f8d919b85829424a929790855518122525e96f1f4580ebb7180119f39386de894be4e021e5d0577a813291cc5aec652b160f2d0ed8af4b30ce772169f35bba4fea3a8ed006ccc5306ac8139c4510674e59f0bac1eb1acfc9da27d22c4fcd20fdb741ec03262c1fd7b50e2c5e2a170a0424b8e69ee5a33458715940955a4c60fa876d140b82d19a8b0c760f6145417ade1c9966bc837a6df609b03af89a6804af498d815eb66f4e72ca0a7c34aa47b224a2a457ff430b79a62e74cc4773a40e5e4627246dd178a71ef2ed65f6861fc0c53e418af1cd928047bbed2aaadf8503fd29253a91daf3718af2df3eaa0775286d46b8db7dda05f1b602324aed65d05b573f39b45ca4457153adaa381457c42b90bed706d7cfa024fa1b7b80945305a43993aa95461c1617a439d0db38ff8e09cfda99a192e0c60e8d53eb17a130fd76370d93e946de975bd3446501dc532be416953db9c0c81deadce3981499cfc3ea5628817cb64baf07ff2f8831b81c4285cd3ca55b0873962ae6b0c951203eb5ad3eb3ef4a1a52a112dab955f68cb4abd9c71ad206f20c9882d757f09c8b8dbc9162f1a5f6b8a235d242592c740c559e1dd325248915c380ddb9b65052de1b1f0d7e3e9907a738496c48e0e968ef9aad0ff5bcdc9f36b3fc9e1319d945b0e1fa4b6554463f6c595f710a0ff791f59cd0ffbeeea1451e852978d1f83454d0d738862470a5f261e9a07d461bbd43373221f53d368f161577826a099bd981cd5867ae7dffc288307e653e437eb74c1692908caefa967236f250a7221d5cfa73"}, + {"0000000000000000000000000000000000000000000000000000000000000339", "005b0b144ecae618b78d94feb671c1cd62701926100102ce1111ee9b5f876444df913b007a4ed875cb2218516b240fb910a9e67e91cc14102011fb67d78db42183bf7fba6d15df6f75130fff65a02e940f1fa70000fc074bcf57d47f56d210233a40c7af88adff801e07df5941c24a6a6a794221a9a6acf8a8ea28bb471d0954c6ae014381f9ac162173092fccf0e074738e36420ce66bae78f17df294747424c5d2ad6fa6d6620e040c7ec25e8d0ea7c73e55264e7d80a175681182951a46c37b0f9daedcfb4e27b2fad8142e059d59d57b0ba9fc8629cb85e35cb5d4df38748f7bae0dbf4cea39e2f77507d99883c1d9942cb05418c23405f66311058c0423862ce173b23700a092d8571a8a3d15826a36a28462a329f56f600645bbb859b83971cf5e696b12ee6ee6dd6327fb49a151cdb720688da3cbb31f1b2d1c4c4db6e7ec09b132e2e43676848a08e6f812ed0332051f6e05cc651e7b73b36cf8720dd159dad37b58361bb3dc5eb0736024f6531a44627609e11af8be03ec1486694353925c608236eac9b8fa19405a01452e43175a998f478d2719758a7c507b269cc81c060e033c7fbefb8a4951303ec6d4b74bb5864a0abf5cb416e9adad5032e2c1e41a347b8dc48d335c7efb86c1095d95fb0b4de0e3aaf062fbcef3aaae316dde18ea1b2a2ab1144a13ebdb0dd1dcf10f199d4b6e9bf51f0b61d5e765f48f87e0dbe2e210335bdaacc7df52e3190d392ea208d8004dbb642a3a3e5f3d3d787d90130e094f06405afe599863c2660727cfadf80cd35751344d4d50e29c7a33717dc58a0d7bc0fedf1ffcf3b80c266591a9728105cc8ab35a14e0b2d5b184df795f62757da16a6821954c31b75534e615526f81f71d8c2876ca0fe94fa1d5479f154a78ebbdf9ecea75c8ee289837ed6f20533d78476461912a3ab71273bf93a2018f55dc7f4255edec0d4280ff6892c689f17e6f994762ba94d6dd3233b8652547ee620981a07c1bc4a70a1dabab24698ae5b53a42b991e771acc7c9a86263294c9a33e08a65251c25f6973cca1ae9ac12fa3791038c55d8544bbe7c7901f0b6c2dae02d363ab98e8b24d046fbbd1f6941676564456e65b2ea031819692204cd1eb5df28ec07508ba1cc9946d6188fa5bf49ce07d72e2d655f7845e913e1f5de78517176d0f5b96a03399230ba072d986a38d08c3977467214c3510ced176aed91c6773671e591c1886d16fea2fbd5d9464b1de3ee1db813a6276a5543a1b7e702c8fc37af44f124f02fefe0d3b879d156f619c0cfdcda5014ffeed00626247be75b2743947d72af8951d82a746a1c5ec320b6db327508dde108bc3346fa4e4cf3030affb0e72d2b157b660e26dabec9fa968a6b3703a3765f4446314835c0e56caa81805d63ff0e66439572d8ac9b0402c6cc06891862333fccb03ac263eb0a50b595dc692e858274d3e722bfc2fc441077e1566f0f99be988f081fd95dcdc83ca29581d46d56cdce06273358b56515c071d68848f511c0f3c21fecdc543f71c17c5829094d53f884a6596d9b2da2c1e367f3aedaa3dc6e080b1800f1b1d7ce6f5c2552476dc7157dfb849995b00d5f7c2ee003d76f3ec8a53cc4f79765a58fce1aa736da67f9936542e571d03669da6893660a6adb24f20b6ec35fc6eea42b9242c5191140a9be8a561fa71221d2dacab2737c2baede34867233ccb17697983c9c100772333487993d620a92d28b5a12a92f897e611321a6f1a6a75f59f36da725d8dd5e17cabc9b59ddde0cafe79e04e7fb6da0675252e6c687452e0e3c738e326606cba192c5615194c42526acf0a5e575b95da919030697070b1679f61b2257ef7fa2b71d051e91892fc0dfd181341597c553c46449ca7c032f80bc1169"}, }; // NOTE: These tests rely on CreateNewBlock doing its own self-validation! diff --git a/src/test/pow_tests.cpp b/src/test/pow_tests.cpp index e0a18d3d8..aa6a488a5 100644 --- a/src/test/pow_tests.cpp +++ b/src/test/pow_tests.cpp @@ -36,8 +36,8 @@ BOOST_AUTO_TEST_CASE(get_next_work_pow_limit) int64_t nLastRetargetTime = 1231006505; // Block #0 of Bitcoin int64_t nThisTime = 1233061996; // Block #2015 of Bitcoin arith_uint256 bnAvg; - bnAvg.SetCompact(0x2003ffff); - BOOST_CHECK_EQUAL(0x2003ffff, + bnAvg.SetCompact(0x2007ffff); + BOOST_CHECK_EQUAL(0x2007ffff, CalculateNextWorkRequired(bnAvg, nThisTime, nLastRetargetTime, params)); } From c5eba1812bd149306012666f8c65851815214d23 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Thu, 27 Oct 2016 13:47:22 +0100 Subject: [PATCH 150/165] Update pchMessageStart for mainnet and testnet. Signed-off-by: Daira Hopwood --- src/chainparams.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index bb58ead31..1c620120f 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -55,7 +55,7 @@ public: * a large 32-bit integer with any alignment. */ pchMessageStart[0] = 0xf9; - pchMessageStart[1] = 0x1b; + pchMessageStart[1] = 0xf3; pchMessageStart[2] = 0xac; pchMessageStart[3] = 0xab; vAlertPubKey = ParseHex("04b7ecf0baa90495ceb4e4090f6b2fd37eec1e9c85fac68a487f3ce11589692e4a317479316ee814e066638e1db54e37a10689b70286e6315b1087b6615d179264"); @@ -207,8 +207,8 @@ public: consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); consensus.fPowAllowMinDifficultyBlocks = true; - pchMessageStart[0] = 0xf9; - pchMessageStart[1] = 0x9f; + pchMessageStart[0] = 0xfa; + pchMessageStart[1] = 0x1a; pchMessageStart[2] = 0x24; pchMessageStart[3] = 0xb6; vAlertPubKey = ParseHex("044e7a1553392325c871c5ace5d6ad73501c66f4c185d6b0453cf45dec5a1322e705c672ac1a27ef7cdaf588c10effdf50ed5f95f85f2f54a5f6159fca394ed0c6"); From 3a334bedd2d75d138fbc3b987842ecfff6f1cbae Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Thu, 27 Oct 2016 13:36:54 +0100 Subject: [PATCH 151/165] Update version numbers for 1.0.0-rc4. Signed-off-by: Daira Hopwood --- README.md | 2 +- configure.ac | 2 +- contrib/DEBIAN/changelog | 6 ++++++ contrib/DEBIAN/control | 2 +- contrib/gitian-descriptors/gitian-linux.yml | 2 +- src/clientversion.h | 2 +- 6 files changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9db3c2d90..c52367f72 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Zcash 1.0.0-rc3 +Zcash 1.0.0-rc4 =============== What is Zcash? diff --git a/configure.ac b/configure.ac index 8cfbe6aff..dfbfa3b78 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 1) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 0) -define(_CLIENT_VERSION_BUILD, 27) +define(_CLIENT_VERSION_BUILD, 28) define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50))) define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1))) define(_CLIENT_VERSION_IS_RELEASE, false) diff --git a/contrib/DEBIAN/changelog b/contrib/DEBIAN/changelog index 9e8621465..3bd16836c 100644 --- a/contrib/DEBIAN/changelog +++ b/contrib/DEBIAN/changelog @@ -1,3 +1,9 @@ +zcash (1.0.0-rc4) jessie; urgency=medium + + * 1.0.0-rc4 release. + + -- Zcash Company Thu, 27 Oct 2016 13:36:00 +0100 + zcash (1.0.0-rc3) jessie; urgency=medium * 1.0.0-rc3 release. diff --git a/contrib/DEBIAN/control b/contrib/DEBIAN/control index 05d9a43f7..096ee5c24 100644 --- a/contrib/DEBIAN/control +++ b/contrib/DEBIAN/control @@ -10,7 +10,7 @@ Build-Depends: autoconf, automake, bsdmainutils, build-essential Vcs-Git: git@github.com:zcash/zcash.git Vcs-Browser: https://github.com/zcash/zcash Package: zcash -Version: 1.0.0-rc3 +Version: 1.0.0-rc4 Architecture: amd64 Depends: libgomp1 Description: Zcash is an implementation of the "Zerocash" protocol. diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index d11f6322a..5e3fcfa85 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "zcash-1.0.0-rc3" +name: "zcash-1.0.0-rc4" enable_cache: true distro: "debian" suites: diff --git a/src/clientversion.h b/src/clientversion.h index bcb587551..e073659ab 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -17,7 +17,7 @@ #define CLIENT_VERSION_MAJOR 1 #define CLIENT_VERSION_MINOR 0 #define CLIENT_VERSION_REVISION 0 -#define CLIENT_VERSION_BUILD 27 +#define CLIENT_VERSION_BUILD 28 //! Set to true for release, false for prerelease or test build #define CLIENT_VERSION_IS_RELEASE false From d2a221d60d0757a1b0df4645a44721630273c198 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Thu, 27 Oct 2016 13:48:23 +0100 Subject: [PATCH 152/165] Add release notes for 1.0.0-rc4. Signed-off-by: Daira Hopwood --- doc/release-notes/release-notes-1.0.0-rc4.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 doc/release-notes/release-notes-1.0.0-rc4.md diff --git a/doc/release-notes/release-notes-1.0.0-rc4.md b/doc/release-notes/release-notes-1.0.0-rc4.md new file mode 100644 index 000000000..0a51dfb92 --- /dev/null +++ b/doc/release-notes/release-notes-1.0.0-rc4.md @@ -0,0 +1,14 @@ +Daira Hopwood (3): + Update pchMessageStart for mainnet and testnet. + Update version numbers for 1.0.0-rc4. + Add release notes for 1.0.0-rc4. + +Jack Grigg (4): + Integrate production Founders' Reward keys + Remove Founders' Reward override from #1398 + Regenerate mainnet and testnet genesis blocks for nMaxTipAge change + Update tests for new genesis blocks + +Sean Bowe (1): + Zcash zk-SNARK public parameters for 1.0 "Sprout". + From b7f7def877f839ad685a7a2f83b5e57fe7d97879 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 27 Oct 2016 08:43:07 -0700 Subject: [PATCH 153/165] Rework zcutil/build-debian-package.sh to place files correctly See http://www.tldp.org/HOWTO/html_single/Debian-Binary-Package-Building-HOWTO/ for a guide on how to prepare a distribution for using dpkg-deb. --- zcutil/build-debian-package.sh | 37 +++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/zcutil/build-debian-package.sh b/zcutil/build-debian-package.sh index 4d2dc58fc..0bf2b5a13 100755 --- a/zcutil/build-debian-package.sh +++ b/zcutil/build-debian-package.sh @@ -8,6 +8,7 @@ set -x BUILD_PATH="/tmp/zcbuild" PACKAGE_NAME="zcash" SRC_PATH=`pwd` +SRC_DEB=$SRC_PATH/contrib/DEBIAN umask 022 @@ -21,12 +22,38 @@ BUILD_DIR="$BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-amd64" if [ -d $BUILD_DIR ]; then rm -R $BUILD_DIR fi -mkdir -p $BUILD_DIR/DEBIAN $BUILD_DIR/usr/bin -cp -r $SRC_PATH/contrib/DEBIAN/* $BUILD_DIR/DEBIAN/ -cp $SRC_PATH/src/zcashd $BUILD_DIR/usr/bin/ -cp $SRC_PATH/src/zcash-cli $BUILD_DIR/usr/bin/ -cp $SRC_PATH/zcutil/fetch-params.sh $BUILD_DIR/usr/bin/zcash-fetch-params +DEB_BIN=$BUILD_DIR/usr/bin +DEB_DOC=$BUILD_DIR/usr/share/doc/$PACKAGE_NAME +DEB_MAN=$BUILD_DIR/usr/share/man/man1 +mkdir -p $BUILD_DIR/DEBIAN $DEB_BIN $DEB_DOC $DEB_MAN +chmod 0755 -R $BUILD_DIR/* + +# Copy control +cp $SRC_DEB/control $BUILD_DIR/DEBIAN +# Currently empty +#cp $SRC_DEB/postinst $BUILD_DIR/DEBIAN +#cp $SRC_DEB/postrm $BUILD_DIR/DEBIAN +#cp $SRC_DEB/preinst $BUILD_DIR/DEBIAN +#cp $SRC_DEB/prerm $BUILD_DIR/DEBIAN +cp $SRC_DEB/rules $BUILD_DIR/DEBIAN +# Copy binaries +cp $SRC_PATH/src/zcashd $DEB_BIN +cp $SRC_PATH/src/zcash-cli $DEB_BIN +cp $SRC_PATH/zcutil/fetch-params.sh $DEB_BIN/zcash-fetch-params +# Copy docs +cp $SRC_PATH/doc/release-notes/release-notes-$PACKAGE_VERSION.md $DEB_DOC/changelog +cp $SRC_DEB/changelog $DEB_DOC/changelog.Debian +cp $SRC_DEB/copyright $DEB_DOC +cp -r $SRC_DEB/examples $DEB_DOC +# Copy manpages +cp $SRC_DEB/manpages/zcashd.1 $DEB_MAN +cp $SRC_DEB/manpages/zcash-cli.1 $DEB_MAN +# Gzip files +gzip --best -n $DEB_DOC/changelog +gzip --best -n $DEB_DOC/changelog.Debian +gzip --best -n $DEB_MAN/zcashd.1 +gzip --best -n $DEB_MAN/zcash-cli.1 # Create the deb package fakeroot dpkg-deb --build $BUILD_DIR From acb8bbe4fe18c83e31dae0828425320e67671d30 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 27 Oct 2016 08:44:44 -0700 Subject: [PATCH 154/165] Add lintian check to zcutil/build-debian-package.sh --- zcutil/build-debian-package.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/zcutil/build-debian-package.sh b/zcutil/build-debian-package.sh index 0bf2b5a13..9e4fee11f 100755 --- a/zcutil/build-debian-package.sh +++ b/zcutil/build-debian-package.sh @@ -57,6 +57,7 @@ gzip --best -n $DEB_MAN/zcash-cli.1 # Create the deb package fakeroot dpkg-deb --build $BUILD_DIR +lintian -i $BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-amd64.deb cp $BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-amd64.deb $SRC_PATH exit 0 From 31cc0d086119e597881e0e9875b6aa0d08abd6a0 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 27 Oct 2016 08:45:16 -0700 Subject: [PATCH 155/165] Fix DEBIAN/control errors raised by lintian --- contrib/DEBIAN/control | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/DEBIAN/control b/contrib/DEBIAN/control index 6d3b8d129..726a44408 100644 --- a/contrib/DEBIAN/control +++ b/contrib/DEBIAN/control @@ -7,13 +7,13 @@ Build-Depends: autoconf, automake, bsdmainutils, build-essential git, g++-multilib, libc6-dev, libtool m4, ncurses-dev, pkg-config, python unzip, wget, zlib1g-dev -Vcs-Git: git@github.com:zcash/zcash.git +Vcs-Git: https://github.com/zcash/zcash.git Vcs-Browser: https://github.com/zcash/zcash Package: zcash Version: 1.0.0-rc2 Architecture: amd64 Depends: libgomp1 -Description: Zcash is an implementation of the "Zerocash" protocol. +Description: An implementation of the "Zerocash" protocol. Based on Bitcoin's code, it intends to offer a far higher standard of privacy and anonymity through a sophisticiated zero-knowledge proving scheme which preserves confidentiality of transaction metadata. From fa7261bd442de05f6c48494e71086b7bb6d12a17 Mon Sep 17 00:00:00 2001 From: Kevin Gallagher Date: Thu, 27 Oct 2016 09:08:38 -0700 Subject: [PATCH 156/165] Run Lintian after built package is copied to $SRC_PATH Because of `set -e`, if there are any warnings, then the package won't be copied back to the source directory. For now, there are definitely going to remain some Lintian warnings which we'll want to ignore. Also updates comments to make them more descriptive. --- zcutil/build-debian-package.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/zcutil/build-debian-package.sh b/zcutil/build-debian-package.sh index 9e4fee11f..9b48b7843 100755 --- a/zcutil/build-debian-package.sh +++ b/zcutil/build-debian-package.sh @@ -1,6 +1,6 @@ #!/bin/bash ## Usage: -## ./build_DEBIAN_package.sh +## ./zcutil/build-debian-package.sh set -e set -x @@ -29,9 +29,9 @@ DEB_MAN=$BUILD_DIR/usr/share/man/man1 mkdir -p $BUILD_DIR/DEBIAN $DEB_BIN $DEB_DOC $DEB_MAN chmod 0755 -R $BUILD_DIR/* -# Copy control +# Copy control file cp $SRC_DEB/control $BUILD_DIR/DEBIAN -# Currently empty +# Package maintainer scripts (currently empty) #cp $SRC_DEB/postinst $BUILD_DIR/DEBIAN #cp $SRC_DEB/postrm $BUILD_DIR/DEBIAN #cp $SRC_DEB/preinst $BUILD_DIR/DEBIAN @@ -55,9 +55,9 @@ gzip --best -n $DEB_DOC/changelog.Debian gzip --best -n $DEB_MAN/zcashd.1 gzip --best -n $DEB_MAN/zcash-cli.1 -# Create the deb package +# Create the Debian package fakeroot dpkg-deb --build $BUILD_DIR -lintian -i $BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-amd64.deb cp $BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-amd64.deb $SRC_PATH - +# Analyze with Lintian, reporting bugs and policy violations +lintian -i $SRC_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-amd64.deb exit 0 From da7bcff4fe0e9a1d1f3f4b7ece46de4d25f9dad7 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 27 Oct 2016 16:32:27 -0700 Subject: [PATCH 157/165] Build libsnark with -march=x86-64 instead of -march=native --- depends/packages/libsnark.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/packages/libsnark.mk b/depends/packages/libsnark.mk index 15435739d..60e535b31 100644 --- a/depends/packages/libsnark.mk +++ b/depends/packages/libsnark.mk @@ -9,7 +9,7 @@ $(package)_git_commit=2e6314a9f7efcd9af1c77669d7d9a229df86a777 $(package)_dependencies=libgmp libsodium define $(package)_build_cmds - CXXFLAGS="-fPIC -DBINARY_OUTPUT -DNO_PT_COMPRESSION=1" $(MAKE) lib DEPINST=$(host_prefix) CURVE=ALT_BN128 MULTICORE=1 NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 FEATUREFLAGS=-DMONTGOMERY_OUTPUT + CXXFLAGS="-fPIC -DBINARY_OUTPUT -DNO_PT_COMPRESSION=1" $(MAKE) lib DEPINST=$(host_prefix) CURVE=ALT_BN128 MULTICORE=1 NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 FEATUREFLAGS=-DMONTGOMERY_OUTPUT OPTFLAGS="-O2 -march=x86-64" endef define $(package)_stage_cmds From d35172fb673f80486967154404eb2f8cc00191be Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 27 Oct 2016 19:35:49 -0700 Subject: [PATCH 158/165] Disable the metrics screen on regtest --- src/init.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/init.cpp b/src/init.cpp index 87e6f9033..384a82bba 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -976,7 +976,9 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler); threadGroup.create_thread(boost::bind(&TraceThread, "scheduler", serviceLoop)); - if (GetBoolArg("-showmetrics", true) && !fPrintToConsole && !GetBoolArg("-daemon", false)) { + if ((chainparams.NetworkIDString() != "regtest") && + GetBoolArg("-showmetrics", true) && + !fPrintToConsole && !GetBoolArg("-daemon", false)) { // Start the persistent metrics interface ConnectMetricsScreen(); threadGroup.create_thread(&ThreadShowMetricsScreen); From 30ed379109da36c4a974b3bb15a8c133a518920a Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 28 Oct 2016 02:55:43 -0700 Subject: [PATCH 159/165] Add the Zcash genesis blocks Closes #1554 --- src/chainparams.cpp | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 1c620120f..4d2d00943 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -42,7 +42,7 @@ public: consensus.nMajorityEnforceBlockUpgrade = 750; consensus.nMajorityRejectBlockOutdated = 950; consensus.nMajorityWindow = 4000; - consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + consensus.powLimit = uint256S("0007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); consensus.nPowAveragingWindow = 17; assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); consensus.nPowMaxAdjustDown = 32; // 32% adjustment down @@ -72,26 +72,29 @@ public: * Build the genesis block. Note that the output of its generation * transaction cannot be spent since it did not originally exist in the * database (and is in any case of zero value). + * + * >>> from pyblake2 import blake2s + * >>> 'Zcash' + blake2s(b'The Economist 2016-10-29 Known unknown: Another crypto-currency is born. BTC#436254 0000000000000000044f321997f336d2908cf8c8d6893e88dbf067e2d949487d ETH#2521903 483039a6b6bd8bd05f0584f9a078d075e454925eb71c1f13eaff59b405a721bb DJIA close on 27 Oct 2016: 18,169.68').hexdigest() */ - const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"; + const char* pszTimestamp = "Zcash0b9c4eef8b7cc417ee5001e3500984b6fea35683a7cac141a043c42064835d34"; CMutableTransaction txNew; txNew.vin.resize(1); txNew.vout.resize(1); - txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); + txNew.vin[0].scriptSig = CScript() << 520617983 << CScriptNum(4) << vector((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); txNew.vout[0].nValue = 0; txNew.vout[0].scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; genesis.vtx.push_back(txNew); genesis.hashPrevBlock.SetNull(); genesis.hashMerkleRoot = genesis.BuildMerkleTree(); genesis.nVersion = 4; - genesis.nTime = 1477539945; - genesis.nBits = 0x2007ffff; - genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000004"); - genesis.nSolution = ParseHex("0198aa48905432f1be8fa21b207962b0aa694ac0490b30beadbe967576da5fc277f3590ba12c8d787f6b031e48ae9a588fb3f85de6b949db802ebcb59dbea00bada27db49fc4330af8d185b923bef5bc6b7cb1b6043ad2bf3f885ebd3b65c276adc7bfee3ec4dcd10f1551dc32b7effd23f88337499bc0a8ba31c5b913b12275d9b2c0cf2e64f24cf98dcde0d287acfbdff4772e5fd33342911618dbde042ae3da5c9a835a5ccfa3073ac0474309234c548df2ecfbc4004a7478d71f22119b9174075b586b5c80061cb1475486ca7fbe732408fb30f338506d46e022967f6ef12a1e12199bd7b858a6bc7a92209ae3670635b11dbbb22efbdf1edc990a3459d67fbca1affe7ed44807568f5a2cb9d2173b170b58bf23d1eda5390aa294baf3dea3586ddb9c660d512e1cda9cd435a52b5b72acee6ea6e6cc3b4bb71e388dd1dc2d2fcbfc15a3382eb65855a395f900280358a3b474cdbf0f0d32620207ecb033b7777dbd3f240afa0cafea3803d953b6021b73a561a976192a5d0d80bdd310ee3c7dab64b4257bd365ff2fd37d226d38d61732ea55906b7e8466e289f331ea23db71d2880baf7f13df97ffb4fb0a76cbcbc9071271a936ae1d1c01538a344b44cf5d348ac4876fbd12fc2a7a0b4830398707da3a327fe24379cc147873834a7c9aa4014003928d1f7b0abdfae458a115f85f3e2aec7472440a63c4c779446b86deb400f999dd2d608f7c556f2f2361c95c42183a6b7e19228e161d2845c538f334de103f00995beed3817d0ce476984da3be5531372c362fc38f42266140c34307189d7bdebc8347279d0c2d109bc23f06b59cd3b04af3c6d47c7f863f795a7b6b2c3006bfcf0b1a4774c124d157661c21dcbd6faa351123732106c9b728fe7bf42fe5ad25edcc743f7a9337c0ea83021beb7bda29148b223f04bbd45fff87e701dce0e8bfd6bf4d379025219b4707da27c35b367d5321558e4fa57d1387b738f13261c82a673af4958704f95edc7f0bb42de4cb96e523565dca172cdd95d80912b50a338eda932b18429baf68c591204a1cb8110d9e9a260718796f2286472e4f7f5a5b5bfb9f86772b90626cfc9c5fc7a114f68523ecabda0c8dbc255e17abcd1f5d15a4f9ab2bf33c0dbaa808f9704e263b1bc4df913152b832e68d668314c4d6c6f6b51eac700aa7e4b52f27cf236af871c7c915088510e0b1f1dc1d1920eae8489e6b226df46ee57beb619ef67bb0e40b701866bd1eae9ba315c4cebae585edafdff35f483788cf14c88e78150910438e046c992d1bb529cacd19c0fc59ecfb0235da22c69f5137f09a6ffbba4106263ebf00f1977d1dc43753aa8f2c2d6a33f7d1a4b82a4fdd5090b71ec7ca14c3b876da9f739c34ff4cd356f2cc6d501c85e771922581d6d645123e513a835401f6cffe2c4a9d2f2dd1898188cffb12a49d769cca1f425efb4c125f779fffd32ecd392be182337a7f2e0c4b00626389911d0070b38f0ca1d4431b7b1f38810fa059be149baaaf9121a1c82abf6fc78a4abd1754130e8a3599d1ce24c6c61176316c94d2e3a1395c70186956348b96eac1f472a2f5185939c61706bcdc9516dac41678de129dc73222401ba8017cf3883a2eec2d879f915a31d013cc0f59f5b9fb6b1b1dd6be000f04fbae171398b6e75aca58405eec660f0da51920cf18bb817c20d814012869d545ed3066d5adebd70e5c0f78d4f21770c8dbce9e31dc291e0fe22a0dbb74b82b249d1cd70c49bcc53b27cc8afe077e8f74dec35007a34dd0918e9e0d976384bcefd1d3472929daef9a3f663532d7a949c7f26584db3b2fcde64dc2155fd11549a16d100da0a8e32e2961d276f1beefbf7a993a2b87eb4495673dc9d15fe2c7ad9c61bdaa526e3d84"); + genesis.nTime = 1477641360; + genesis.nBits = 0x1f07ffff; + genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000001257"); + genesis.nSolution = ParseHex("000a889f00854b8665cd555f4656f68179d31ccadc1b1f7fb0952726313b16941da348284d67add4686121d4e3d930160c1348d8191c25f12b267a6a9c131b5031cbf8af1f79c9d513076a216ec87ed045fa966e01214ed83ca02dc1797270a454720d3206ac7d931a0a680c5c5e099057592570ca9bdf6058343958b31901fce1a15a4f38fd347750912e14004c73dfe588b903b6c03166582eeaf30529b14072a7b3079e3a684601b9b3024054201f7440b0ee9eb1a7120ff43f713735494aa27b1f8bab60d7f398bca14f6abb2adbf29b04099121438a7974b078a11635b594e9170f1086140b4173822dd697894483e1c6b4e8b8dcd5cb12ca4903bc61e108871d4d915a9093c18ac9b02b6716ce1013ca2c1174e319c1a570215bc9ab5f7564765f7be20524dc3fdf8aa356fd94d445e05ab165ad8bb4a0db096c097618c81098f91443c719416d39837af6de85015dca0de89462b1d8386758b2cf8a99e00953b308032ae44c35e05eb71842922eb69797f68813b59caf266cb6c213569ae3280505421a7e3a0a37fdf8e2ea354fc5422816655394a9454bac542a9298f176e211020d63dee6852c40de02267e2fc9d5e1ff2ad9309506f02a1a71a0501b16d0d36f70cdfd8de78116c0c506ee0b8ddfdeb561acadf31746b5a9dd32c21930884397fb1682164cb565cc14e089d66635a32618f7eb05fe05082b8a3fae620571660a6b89886eac53dec109d7cbb6930ca698a168f301a950be152da1be2b9e07516995e20baceebecb5579d7cdbc16d09f3a50cb3c7dffe33f26686d4ff3f8946ee6475e98cf7b3cf9062b6966e838f865ff3de5fb064a37a21da7bb8dfd2501a29e184f207caaba364f36f2329a77515dcb710e29ffbf73e2bbd773fab1f9a6b005567affff605c132e4e4dd69f36bd201005458cfbd2c658701eb2a700251cefd886b1e674ae816d3f719bac64be649c172ba27a4fd55947d95d53ba4cbc73de97b8af5ed4840b659370c556e7376457f51e5ebb66018849923db82c1c9a819f173cccdb8f3324b239609a300018d0fb094adf5bd7cbb3834c69e6d0b3798065c525b20f040e965e1a161af78ff7561cd874f5f1b75aa0bc77f720589e1b810f831eac5073e6dd46d00a2793f70f7427f0f798f2f53a67e615e65d356e66fe40609a958a05edb4c175bcc383ea0530e67ddbe479a898943c6e3074c6fcc252d6014de3a3d292b03f0d88d312fe221be7be7e3c59d07fa0f2f4029e364f1f355c5d01fa53770d0cd76d82bf7e60f6903bc1beb772e6fde4a70be51d9c7e03c8d6d8dfb361a234ba47c470fe630820bbd920715621b9fbedb49fcee165ead0875e6c2b1af16f50b5d6140cc981122fcbcf7c5a4e3772b3661b628e08380abc545957e59f634705b1bbde2f0b4e055a5ec5676d859be77e20962b645e051a880fddb0180b4555789e1f9344a436a84dc5579e2553f1e5fb0a599c137be36cabbed0319831fea3fddf94ddc7971e4bcf02cdc93294a9aab3e3b13e3b058235b4f4ec06ba4ceaa49d675b4ba80716f3bc6976b1fbf9c8bf1f3e3a4dc1cd83ef9cf816667fb94f1e923ff63fef072e6a19321e4812f96cb0ffa864da50ad74deb76917a336f31dce03ed5f0303aad5e6a83634f9fcc371096f8288b8f02ddded5ff1bb9d49331e4a84dbe1543164438fde9ad71dab024779dcdde0b6602b5ae0a6265c14b94edd83b37403f4b78fcd2ed555b596402c28ee81d87a909c4e8722b30c71ecdd861b05f61f8b1231795c76adba2fdefa451b283a5d527955b9f3de1b9828e7b2e74123dd47062ddcc09b05e7fa13cb2212a6fdbc65d7e852cec463ec6fd929f5b8483cf3052113b13dac91b69f49d1b7d1aec01c4a68e41ce157"); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x055e4f392d6d63715db7b42e70a43c1faf99d5959a8e03ada11ac34a03e78667")); - assert(genesis.hashMerkleRoot == uint256S("0xdc6c10ad2a26613ae9b8a156ed9ca15e3e355a994a7e32cd7a4c3d7a478f57d2")); + assert(consensus.hashGenesisBlock == uint256S("0x00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08")); + assert(genesis.hashMerkleRoot == uint256S("0xc4eaa58879081de3c24a7b117ed2b28300e7ec4c4c1dff1d3f1268b7857a4ddb")); vFixedSeeds.clear(); vSeeds.clear(); @@ -217,12 +220,12 @@ public: nPruneAfterHeight = 1000; //! Modify the testnet genesis block so the timestamp is valid for a later start. - genesis.nTime = 1477540580; + genesis.nTime = 1477648033; genesis.nBits = 0x2007ffff; - genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000007"); - genesis.nSolution = ParseHex("0022abafa365a23d879386c149729cca485979933d236f89a8202d0adba38fb3e08e4006494007b5a70608d3046c839d4a457b15b47397d49661feccdaed4516b4e34990c8f747d17a568cd8bcfd3a555136de9603c5d58933a1a4d34bf8b0bc7f1fd650d6ae5714b517a9afe01063a9312c4a91e15f763a7d5ad50d174c0f953e530adc50d1f28a023cad638bf552e59a4a6835119af649dd64a58289638f3dde370d6291f662c0032b32cd3755b77715c1b18c91583c1d190191b554149af773a09b1823546172fda11e0a4907854ac6d70886f28b1396d1d3e9be818f24aee3ee508bbb82fb38ec3f0ee0104f7b047c860265db138633c194645715085c2059a57b43891cc1acd2d5cc4c8bf8874a452a1ecb4b1fcd6319b10818a02f59869676111566881db437129f536e89818219f7c1e736671d663cd44c650cdfb9629b300d9c40f9d80f7533ae788a5f92d201828a1510c83024e907d73f0cc3cd2e7118beac170569efd6e891adc71ce3e384806759595d25cff23e32172a034f99f4df984ff32e05270f8dbb1d37df9b37c9f2f607e0ba8554c736eaf5d1de2239de7d0eb0069f1e3323d084a490a9027efa6644c1145b13ede63136e4332e148380fe02b5fcc37a278a5d9a571eda069faf3d39097264dc37e4abd6c5b0aded97d881fa0ab1b3158a06b896f4a2d6b7dbdfb525f784ddebb902bb496814d115970a95a1198fb80fc0855b6897381546225a15d9bf09221d873db8cfabda7f33f8ff5c197d3d6a3554fab16408499869e6779e674dd58ef52d2d2ccf83e83c2df25d9418b23b90cd53bb1c5b58049f3204ed878cb7da0f50c4613f02c4f480b069520644152e55e9efc9c4d0540524a345a7b64e5e2e891864c6f69aa2458fd61114e4d9c09555f4b08fbad22d85afc62c252bdb9cf9e64187c498e281223a3f4b042a5fc3a6902e076141f16156680b996b6e7fbb3b22dec413e5e8e67f4d1338e87de8a8328f65d5fa85445fc65ad129ae89d9b97ceae5746177dca89fdc426703a6031e63e9abb3bdd6cc04f117171d685ac2a30d44b90cf9187041784da60c0950048ea83e9b5f0a2c574eadf3cb8b83e1089595c9d3902665f934cf852c6a55e94fd4e25100636313a4d04ad527b7be47293db7e44de39550e3614066b22d630d020073d1f57c05eb5cb7ffaf7ae780c05357c8d6ebf0fddb9e4ab3123b6250c8b619bbd6f5f7ea4b5f501e10bab5680c1034424ceca0fe39764d23e98cee4f1f86575cf0e82c40ff7bbcf2a3a9dc9e02d8f8628946700cb5c68d0a1a6090b8aecabfc37beaaa1a7b676730f299ea051eeb5bded2528891ebe3a2fdf92bfe258e863edf1f10e9cad0821daa7ef177d24f93f96058a059529fc118d34f23182209e97efc7486dfdaca6af3071dd544046611c89d7095bbc419223f5c29a57d556f91614e332ca9e74a583841bd66ea6cfa6086c744613d875f07c0312c700241fb61206533c84fa50f2cf8dbbf252e8a3247b51e3ad56305b61123d6a69eb8641870a005ba3faa048ae054e43942391bed3265bbae567eee16c5c6539b2b66718a5b61841e200b14e465f53a13190a43ed4d8ff324f0e6fbf4c3e8c6938ac2dde8ed3641d4f8c3fbce65fb0e1b0486ede3431a00bd802a055aeeaa7be53aa784b4a3eb1558c4f1f293d6fb7a2f0cc7d33028bc6d5421232446f7a86cdb4a8d21a21a44c77e98987222c654558e56b9c4d769d7bc035021bfae25381f8dfddffa87647274e0b28ec7b8bc1b0dcfca73c922409b8c75d282faf2759cf78e54f578486a8498e726bbc7a83e64acc96d41cdb80336bf0b198b46d50817faedd560c404db47a43a3f21f795912d0334bd41599b8b1c7634c00feb1352b6a558a331"); + genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000006"); + genesis.nSolution = ParseHex("00a6a51259c3f6732481e2d035197218b7a69504461d04335503cd69759b2d02bd2b53a9653f42cb33c608511c953673fa9da76170958115fe92157ad3bb5720d927f18e09459bf5c6072973e143e20f9bdf0584058c96b7c2234c7565f100d5eea083ba5d3dbaff9f0681799a113e7beff4a611d2b49590563109962baa149b628aae869af791f2f70bb041bd7ebfa658570917f6654a142b05e7ec0289a4f46470be7be5f693b90173eaaa6e84907170f32602204f1f4e1c04b1830116ffd0c54f0b1caa9a5698357bd8aa1f5ac8fc93b405265d824ba0e49f69dab5446653927298e6b7bdc61ee86ff31c07bde86331b4e500d42e4e50417e285502684b7966184505b885b42819a88469d1e9cf55072d7f3510f85580db689302eab377e4e11b14a91fdd0df7627efc048934f0aff8e7eb77eb17b3a95de13678004f2512293891d8baf8dde0ef69be520a58bbd6038ce899c9594cf3e30b8c3d9c7ecc832d4c19a6212747b50724e6f70f6451f78fd27b58ce43ca33b1641304a916186cfbe7dbca224f55d08530ba851e4df22baf7ab7078e9cbea46c0798b35a750f54103b0cdd08c81a6505c4932f6bfbd492a9fced31d54e98b6370d4c96600552fcf5b37780ed18c8787d03200963600db297a8f05dfa551321d17b9917edadcda51e274830749d133ad226f8bb6b94f13b4f77e67b35b71f52112ce9ba5da706ad9573584a2570a4ff25d29ab9761a06bdcf2c33638bf9baf2054825037881c14adf3816ba0cbd0fca689aad3ce16f2fe362c98f48134a9221765d939f0b49677d1c2447e56b46859f1810e2cf23e82a53e0d44f34dae932581b3b7f49eaec59af872cf9de757a964f7b33d143a36c270189508fcafe19398e4d2966948164d40556b05b7ff532f66f5d1edc41334ef742f78221dfe0c7ae2275bb3f24c89ae35f00afeea4e6ed187b866b209dc6e83b660593fce7c40e143beb07ac86c56f39e895385924667efe3a3f031938753c7764a2dbeb0a643fd359c46e614873fd0424e435fa7fac083b9a41a9d6bf7e284eee537ea7c50dd239f359941a43dc982745184bf3ee31a8dc850316aa9c6b66d6985acee814373be3458550659e1a06287c3b3b76a185c5cb93e38c1eebcf34ff072894b6430aed8d34122dafd925c46a515cca79b0269c92b301890ca6b0dc8b679cdac0f23318c105de73d7a46d16d2dad988d49c22e9963c117960bdc70ef0db6b091cf09445a516176b7f6d58ec29539166cc8a38bbff387acefffab2ea5faad0e8bb70625716ef0edf61940733c25993ea3de9f0be23d36e7cb8da10505f9dc426cd0e6e5b173ab4fff8c37e1f1fb56d1ea372013d075e0934c6919393cfc21395eea20718fad03542a4162a9ded66c814ad8320b2d7c2da3ecaf206da34c502db2096d1c46699a91dd1c432f019ad434e2c1ce507f91104f66f491fed37b225b8e0b2888c37276cfa0468fc13b8d593fd9a2675f0f5b20b8a15f8fa7558176a530d6865738ddb25d3426dab905221681cf9da0e0200eea5b2eba3ad3a5237d2a391f9074bf1779a2005cee43eec2b058511532635e0fea61664f531ac2b356f40db5c5d275a4cf5c82d468976455af4e3362cc8f71aa95e71d394aff3ead6f7101279f95bcd8a0fedce1d21cb3c9f6dd3b182fce0db5d6712981b651f29178a24119968b14783cafa713bc5f2a65205a42e4ce9dc7ba462bdb1f3e4553afc15f5f39998fdb53e7e231e3e520a46943734a007c2daa1eda9f495791657eefcac5c32833936e568d06187857ed04d7b97167ae207c5c5ae54e528c36016a984235e9c5b2f0718d7b3aa93c7822ccc772580b6599671b3c02ece8a21399abd33cfd3028790133167d0a97e7de53dc8ff"); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x038a2d378418e20809465984056d15d04e7b32a5ab0956a3b448ace885c22a55")); + assert(consensus.hashGenesisBlock == uint256S("0x05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38")); vFixedSeeds.clear(); vSeeds.clear(); @@ -309,10 +312,10 @@ public: genesis.nTime = 1296688602; genesis.nBits = 0x200f0f0f; genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000009"); - genesis.nSolution = ParseHex("0905111770fb9072e53075375f5d77c379e30bd25270f8778abdca2ee5156f5635b9b391"); + genesis.nSolution = ParseHex("01936b7db1eb4ac39f151b8704642d0a8bda13ec547d54cd5e43ba142fc6d8877cab07b3"); consensus.hashGenesisBlock = genesis.GetHash(); nDefaultPort = 18444; - assert(consensus.hashGenesisBlock == uint256S("0x0b9d8b1be2041720ab879592c3be0ec7ee79fcb2d1e238f93d3d1afe58d0d867")); + assert(consensus.hashGenesisBlock == uint256S("0x029f11d80ef9765602235e1bc9727e3eb6ba20839319f761fee920d63401e327")); nPruneAfterHeight = 1000; vFixedSeeds.clear(); //! Regtest mode doesn't have any fixed seeds. From 657bde55ef7eedf451399e6245dbc5472214fc4f Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 28 Oct 2016 02:56:15 -0700 Subject: [PATCH 160/165] Update tests for new genesis blocks Miner tests have been commented out, and will be regenerated after launch. --- src/test/miner_tests.cpp | 6 ++++-- src/test/pow_tests.cpp | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 5c26038e8..4a960df76 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -135,6 +135,7 @@ struct { {"0000000000000000000000000000000000000000000000000000000000000339", "005b0b144ecae618b78d94feb671c1cd62701926100102ce1111ee9b5f876444df913b007a4ed875cb2218516b240fb910a9e67e91cc14102011fb67d78db42183bf7fba6d15df6f75130fff65a02e940f1fa70000fc074bcf57d47f56d210233a40c7af88adff801e07df5941c24a6a6a794221a9a6acf8a8ea28bb471d0954c6ae014381f9ac162173092fccf0e074738e36420ce66bae78f17df294747424c5d2ad6fa6d6620e040c7ec25e8d0ea7c73e55264e7d80a175681182951a46c37b0f9daedcfb4e27b2fad8142e059d59d57b0ba9fc8629cb85e35cb5d4df38748f7bae0dbf4cea39e2f77507d99883c1d9942cb05418c23405f66311058c0423862ce173b23700a092d8571a8a3d15826a36a28462a329f56f600645bbb859b83971cf5e696b12ee6ee6dd6327fb49a151cdb720688da3cbb31f1b2d1c4c4db6e7ec09b132e2e43676848a08e6f812ed0332051f6e05cc651e7b73b36cf8720dd159dad37b58361bb3dc5eb0736024f6531a44627609e11af8be03ec1486694353925c608236eac9b8fa19405a01452e43175a998f478d2719758a7c507b269cc81c060e033c7fbefb8a4951303ec6d4b74bb5864a0abf5cb416e9adad5032e2c1e41a347b8dc48d335c7efb86c1095d95fb0b4de0e3aaf062fbcef3aaae316dde18ea1b2a2ab1144a13ebdb0dd1dcf10f199d4b6e9bf51f0b61d5e765f48f87e0dbe2e210335bdaacc7df52e3190d392ea208d8004dbb642a3a3e5f3d3d787d90130e094f06405afe599863c2660727cfadf80cd35751344d4d50e29c7a33717dc58a0d7bc0fedf1ffcf3b80c266591a9728105cc8ab35a14e0b2d5b184df795f62757da16a6821954c31b75534e615526f81f71d8c2876ca0fe94fa1d5479f154a78ebbdf9ecea75c8ee289837ed6f20533d78476461912a3ab71273bf93a2018f55dc7f4255edec0d4280ff6892c689f17e6f994762ba94d6dd3233b8652547ee620981a07c1bc4a70a1dabab24698ae5b53a42b991e771acc7c9a86263294c9a33e08a65251c25f6973cca1ae9ac12fa3791038c55d8544bbe7c7901f0b6c2dae02d363ab98e8b24d046fbbd1f6941676564456e65b2ea031819692204cd1eb5df28ec07508ba1cc9946d6188fa5bf49ce07d72e2d655f7845e913e1f5de78517176d0f5b96a03399230ba072d986a38d08c3977467214c3510ced176aed91c6773671e591c1886d16fea2fbd5d9464b1de3ee1db813a6276a5543a1b7e702c8fc37af44f124f02fefe0d3b879d156f619c0cfdcda5014ffeed00626247be75b2743947d72af8951d82a746a1c5ec320b6db327508dde108bc3346fa4e4cf3030affb0e72d2b157b660e26dabec9fa968a6b3703a3765f4446314835c0e56caa81805d63ff0e66439572d8ac9b0402c6cc06891862333fccb03ac263eb0a50b595dc692e858274d3e722bfc2fc441077e1566f0f99be988f081fd95dcdc83ca29581d46d56cdce06273358b56515c071d68848f511c0f3c21fecdc543f71c17c5829094d53f884a6596d9b2da2c1e367f3aedaa3dc6e080b1800f1b1d7ce6f5c2552476dc7157dfb849995b00d5f7c2ee003d76f3ec8a53cc4f79765a58fce1aa736da67f9936542e571d03669da6893660a6adb24f20b6ec35fc6eea42b9242c5191140a9be8a561fa71221d2dacab2737c2baede34867233ccb17697983c9c100772333487993d620a92d28b5a12a92f897e611321a6f1a6a75f59f36da725d8dd5e17cabc9b59ddde0cafe79e04e7fb6da0675252e6c687452e0e3c738e326606cba192c5615194c42526acf0a5e575b95da919030697070b1679f61b2257ef7fa2b71d051e91892fc0dfd181341597c553c46449ca7c032f80bc1169"}, }; +/* TODO: Regenerate miner tests after launch // NOTE: These tests rely on CreateNewBlock doing its own self-validation! BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) { @@ -174,7 +175,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) pblock->nNonce = uint256S(blockinfo[i].nonce_hex); pblock->nSolution = ParseHex(blockinfo[i].solution_hex); -/* +*//* { arith_uint256 try_nonce(0); unsigned int n = Params().EquihashN(); @@ -253,7 +254,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) std::cout << "\"}," << std::endl; } -*/ +*//* CValidationState state; BOOST_CHECK(ProcessNewBlock(state, NULL, pblock, true, NULL)); @@ -442,5 +443,6 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) fCheckpointsEnabled = true; fCoinbaseEnforcedProtectionEnabled = true; } +*/ BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/pow_tests.cpp b/src/test/pow_tests.cpp index aa6a488a5..5a11483f2 100644 --- a/src/test/pow_tests.cpp +++ b/src/test/pow_tests.cpp @@ -36,8 +36,8 @@ BOOST_AUTO_TEST_CASE(get_next_work_pow_limit) int64_t nLastRetargetTime = 1231006505; // Block #0 of Bitcoin int64_t nThisTime = 1233061996; // Block #2015 of Bitcoin arith_uint256 bnAvg; - bnAvg.SetCompact(0x2007ffff); - BOOST_CHECK_EQUAL(0x2007ffff, + bnAvg.SetCompact(0x1f07ffff); + BOOST_CHECK_EQUAL(0x1f07ffff, CalculateNextWorkRequired(bnAvg, nThisTime, nLastRetargetTime, params)); } From 998202ba2036e9e6bd3ccf87e020447031af5d68 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 28 Oct 2016 02:57:17 -0700 Subject: [PATCH 161/165] Update version strings to 1.0.0 Debian uses 1.0.0-sprout to ensure correct ordering. --- README.md | 4 ++-- configure.ac | 4 ++-- contrib/DEBIAN/control | 2 +- contrib/gitian-descriptors/gitian-linux.yml | 2 +- src/clientversion.h | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index c52367f72..8558c1ef9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -Zcash 1.0.0-rc4 -=============== +Zcash 1.0.0 +=========== What is Zcash? -------------- diff --git a/configure.ac b/configure.ac index dfbfa3b78..6d6918ec2 100644 --- a/configure.ac +++ b/configure.ac @@ -3,10 +3,10 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 1) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 0) -define(_CLIENT_VERSION_BUILD, 28) +define(_CLIENT_VERSION_BUILD, 50) define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50))) define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1))) -define(_CLIENT_VERSION_IS_RELEASE, false) +define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2016) AC_INIT([Zcash],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_SUFFIX(_ZC_BUILD_VAL)],[https://github.com/zcash/zcash/issues],[zcash]) AC_CONFIG_SRCDIR([src/main.cpp]) diff --git a/contrib/DEBIAN/control b/contrib/DEBIAN/control index 260b4cd99..d7990366c 100644 --- a/contrib/DEBIAN/control +++ b/contrib/DEBIAN/control @@ -10,7 +10,7 @@ Build-Depends: autoconf, automake, bsdmainutils, build-essential Vcs-Git: https://github.com/zcash/zcash.git Vcs-Browser: https://github.com/zcash/zcash Package: zcash -Version: 1.0.0-rc4 +Version: 1.0.0-sprout Architecture: amd64 Depends: libgomp1 Description: An implementation of the "Zerocash" protocol. diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index 5e3fcfa85..33fe21ab9 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "zcash-1.0.0-rc4" +name: "zcash-1.0.0" enable_cache: true distro: "debian" suites: diff --git a/src/clientversion.h b/src/clientversion.h index e073659ab..d58fc64db 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -17,10 +17,10 @@ #define CLIENT_VERSION_MAJOR 1 #define CLIENT_VERSION_MINOR 0 #define CLIENT_VERSION_REVISION 0 -#define CLIENT_VERSION_BUILD 28 +#define CLIENT_VERSION_BUILD 50 //! Set to true for release, false for prerelease or test build -#define CLIENT_VERSION_IS_RELEASE false +#define CLIENT_VERSION_IS_RELEASE true /** * Copyright year (2009-this) From 7232f2f787acd8dc8f5252ed588ad98533628c96 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 28 Oct 2016 02:58:10 -0700 Subject: [PATCH 162/165] Add release notes for 1.0.0 The Debian build script has been modified to account for the version discrepancy. --- doc/release-notes/release-notes-1.0.0.md | 18 ++++++++++++++++++ zcutil/build-debian-package.sh | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 doc/release-notes/release-notes-1.0.0.md diff --git a/doc/release-notes/release-notes-1.0.0.md b/doc/release-notes/release-notes-1.0.0.md new file mode 100644 index 000000000..f95d53d4e --- /dev/null +++ b/doc/release-notes/release-notes-1.0.0.md @@ -0,0 +1,18 @@ +Jack Grigg (8): + Rework zcutil/build-debian-package.sh to place files correctly + Add lintian check to zcutil/build-debian-package.sh + Fix DEBIAN/control errors raised by lintian + Build libsnark with -march=x86-64 instead of -march=native + Disable the metrics screen on regtest + Add the Zcash genesis blocks + Update tests for new genesis blocks + Update version strings to 1.0.0 + +Kevin Gallagher (6): + Use fakeroot to build Debian package + Update Debian package maintainer scripts + Fixes executable mode of maintainer scripts + Add DEBIAN/rules file (required by policy) + Adds zcash.examples and zcash.manpages + Run Lintian after built package is copied to $SRC_PATH + diff --git a/zcutil/build-debian-package.sh b/zcutil/build-debian-package.sh index 9b48b7843..77369fdfc 100755 --- a/zcutil/build-debian-package.sh +++ b/zcutil/build-debian-package.sh @@ -42,7 +42,7 @@ cp $SRC_PATH/src/zcashd $DEB_BIN cp $SRC_PATH/src/zcash-cli $DEB_BIN cp $SRC_PATH/zcutil/fetch-params.sh $DEB_BIN/zcash-fetch-params # Copy docs -cp $SRC_PATH/doc/release-notes/release-notes-$PACKAGE_VERSION.md $DEB_DOC/changelog +cp $SRC_PATH/doc/release-notes/release-notes-1.0.0.md $DEB_DOC/changelog cp $SRC_DEB/changelog $DEB_DOC/changelog.Debian cp $SRC_DEB/copyright $DEB_DOC cp -r $SRC_DEB/examples $DEB_DOC From 409dcb7e1d1a41d53620df9f88e6f25211b7e498 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 28 Oct 2016 03:01:50 -0700 Subject: [PATCH 163/165] Update Debian changelog --- contrib/DEBIAN/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contrib/DEBIAN/changelog b/contrib/DEBIAN/changelog index 3bd16836c..da6e2eb6c 100644 --- a/contrib/DEBIAN/changelog +++ b/contrib/DEBIAN/changelog @@ -1,3 +1,9 @@ +zcash (1.0.0-sprout) jessie; urgency=medium + + * 1.0.0 release. + + -- Zcash Company Fri, 28 Oct 2016 03:00:50 -0700 + zcash (1.0.0-rc4) jessie; urgency=medium * 1.0.0-rc4 release. From ff5f66b847e3d4e40efacf9d144baecd1acaaaca Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 28 Oct 2016 03:12:58 -0700 Subject: [PATCH 164/165] Update Debian manpages and buildscript --- contrib/DEBIAN/manpages/zcash-cli.1 | 6 +++--- contrib/DEBIAN/manpages/zcashd.1 | 6 +++--- doc/release-process.md | 3 +++ zcutil/build-debian-package.sh | 1 - 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/contrib/DEBIAN/manpages/zcash-cli.1 b/contrib/DEBIAN/manpages/zcash-cli.1 index 72741279b..985664c05 100644 --- a/contrib/DEBIAN/manpages/zcash-cli.1 +++ b/contrib/DEBIAN/manpages/zcash-cli.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH ZCASH "1" "October 2016" "Zcash RPC client version v1.0.0-rc2-bf767aa" "User Commands" +.TH ZCASH-CLI "1" "October 2016" "Zcash RPC client version v1.0.0-409dcb7" "User Commands" .SH NAME -Zcash \- manual page for Zcash RPC client version v1.0.0-rc2-bf767aa +zcash-cli \- RPC client for the Zcash daemon .SH DESCRIPTION -Zcash RPC client version v1.0.0\-rc2\-bf767aa +Zcash RPC client version v1.0.0 .SS "Usage:" .TP zcash\-cli [options] [params] diff --git a/contrib/DEBIAN/manpages/zcashd.1 b/contrib/DEBIAN/manpages/zcashd.1 index 9d36e0791..3e1990dec 100644 --- a/contrib/DEBIAN/manpages/zcashd.1 +++ b/contrib/DEBIAN/manpages/zcashd.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH ZCASH "1" "October 2016" "Zcash Daemon version v1.0.0-rc2-bf767aa" "User Commands" +.TH ZCASHD "1" "October 2016" "Zcash Daemon version v1.0.0-409dcb7" "User Commands" .SH NAME -Zcash \- manual page for Zcash Daemon version v1.0.0-rc2-bf767aa +zcashd \- Network daemon for interacting with the Zcash blockchain .SH DESCRIPTION -Zcash Daemon version v1.0.0\-rc2\-bf767aa +Zcash Daemon version v1.0.0 .SS "Usage:" .TP zcashd [options] diff --git a/doc/release-process.md b/doc/release-process.md index c874e54f3..5ba8763d4 100644 --- a/doc/release-process.md +++ b/doc/release-process.md @@ -38,6 +38,9 @@ previous release: contrib/DEBIAN/control contrib/gitian-descriptors/gitian-linux.yml + help2man -n "RPC client for the Zcash daemon" src/zcash-cli > contrib/DEBIAN/manpages/zcash-cli.1 + help2man -n "Network daemon for interacting with the Zcash blockchain" src/zcashd > contrib/DEBIAN/manpages/zcashd.1 + In `configure.ac` and `clientversion.h`: diff --git a/zcutil/build-debian-package.sh b/zcutil/build-debian-package.sh index 77369fdfc..5691f2372 100755 --- a/zcutil/build-debian-package.sh +++ b/zcutil/build-debian-package.sh @@ -36,7 +36,6 @@ cp $SRC_DEB/control $BUILD_DIR/DEBIAN #cp $SRC_DEB/postrm $BUILD_DIR/DEBIAN #cp $SRC_DEB/preinst $BUILD_DIR/DEBIAN #cp $SRC_DEB/prerm $BUILD_DIR/DEBIAN -cp $SRC_DEB/rules $BUILD_DIR/DEBIAN # Copy binaries cp $SRC_PATH/src/zcashd $DEB_BIN cp $SRC_PATH/src/zcash-cli $DEB_BIN From 1feaefac51f64bc51d6954d70dc64b3815f95a05 Mon Sep 17 00:00:00 2001 From: Zcash Company Date: Fri, 28 Oct 2016 14:32:25 +0000 Subject: [PATCH 165/165] =?UTF-8?q?Update=20network=20magics=20for=201.0.0?= =?UTF-8?q?=20=E2=93=A9=E2=9D=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chainparams.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 4d2d00943..8691455e8 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -50,14 +50,12 @@ public: consensus.nPowTargetSpacing = 2.5 * 60; consensus.fPowAllowMinDifficultyBlocks = false; /** - * The message start string is designed to be unlikely to occur in normal data. - * The characters are rarely used upper ASCII, not valid as UTF-8, and produce - * a large 32-bit integer with any alignment. + * The message start string should be awesome! ⓩ❤ */ - pchMessageStart[0] = 0xf9; - pchMessageStart[1] = 0xf3; - pchMessageStart[2] = 0xac; - pchMessageStart[3] = 0xab; + pchMessageStart[0] = 0x24; + pchMessageStart[1] = 0xe9; + pchMessageStart[2] = 0x27; + pchMessageStart[3] = 0x64; vAlertPubKey = ParseHex("04b7ecf0baa90495ceb4e4090f6b2fd37eec1e9c85fac68a487f3ce11589692e4a317479316ee814e066638e1db54e37a10689b70286e6315b1087b6615d179264"); nDefaultPort = 8233; nMinerThreads = 0; @@ -212,8 +210,8 @@ public: consensus.fPowAllowMinDifficultyBlocks = true; pchMessageStart[0] = 0xfa; pchMessageStart[1] = 0x1a; - pchMessageStart[2] = 0x24; - pchMessageStart[3] = 0xb6; + pchMessageStart[2] = 0xf9; + pchMessageStart[3] = 0xbf; vAlertPubKey = ParseHex("044e7a1553392325c871c5ace5d6ad73501c66f4c185d6b0453cf45dec5a1322e705c672ac1a27ef7cdaf588c10effdf50ed5f95f85f2f54a5f6159fca394ed0c6"); nDefaultPort = 18233; nMinerThreads = 0;