From b76268c5bd4b6c72b739d56f9780020e7ed83d3f Mon Sep 17 00:00:00 2001 From: zhiqiangxu <652732310@qq.com> Date: Tue, 27 Jul 2021 11:14:34 +0800 Subject: [PATCH] fix polygon snap (#65) * fix * upgrade with chainid instead of height --- common/config/config.go | 13 +- common/constants/constants.go | 2 + .../header_sync/polygon/bor_header_sync.go | 18 +++ .../header_sync/polygon/header_sync_test.go | 149 ++++++++++++++++++ 4 files changed, 181 insertions(+), 1 deletion(-) diff --git a/common/config/config.go b/common/config/config.go index 1d10b5cd..44ec6def 100644 --- a/common/config/config.go +++ b/common/config/config.go @@ -109,7 +109,13 @@ var ETH1559_HEIGHT = map[uint32]uint64{ NETWORK_ID_TEST_NET: constants.ETH1559_HEIGHT_TESTNET, } -var EXTRA_INFO_HEIGHT_FORK_CHECK bool +var POLYGON_SNAP_CHAINID = map[uint32]uint32{ + NETWORK_ID_MAIN_NET: constants.POLYGON_SNAP_CHAINID_MAINNET, +} + +var ( + EXTRA_INFO_HEIGHT_FORK_CHECK bool +) func GetNetworkMagic(id uint32) uint32 { nid, ok := NETWORK_MAGIC[id] @@ -119,6 +125,11 @@ func GetNetworkMagic(id uint32) uint32 { return id } +func GetPolygonSnapChainID(id uint32) uint32 { + height := POLYGON_SNAP_CHAINID[id] + return height +} + func GetEth1559Height(id uint32) uint64 { height := ETH1559_HEIGHT[id] if height == 0 { diff --git a/common/constants/constants.go b/common/constants/constants.go index 035aacc2..3f55d6e7 100644 --- a/common/constants/constants.go +++ b/common/constants/constants.go @@ -47,3 +47,5 @@ const EXTRA_INFO_HEIGHT_TESTNET = 1664798 // eth 1559 heigh const ETH1559_HEIGHT_MAINNET = 12965000 const ETH1559_HEIGHT_TESTNET = 10499401 + +const POLYGON_SNAP_CHAINID_MAINNET = 16 diff --git a/native/service/header_sync/polygon/bor_header_sync.go b/native/service/header_sync/polygon/bor_header_sync.go index bceaf666..a8a412fd 100644 --- a/native/service/header_sync/polygon/bor_header_sync.go +++ b/native/service/header_sync/polygon/bor_header_sync.go @@ -33,6 +33,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rlp" "github.com/polynetwork/poly/common" + "github.com/polynetwork/poly/common/config" "github.com/polynetwork/poly/common/log" cstates "github.com/polynetwork/poly/core/states" "github.com/polynetwork/poly/native" @@ -608,7 +609,13 @@ func validateHeaderExtraFieldWithSpan(native *native.NativeService, headerWOP *H return nil } +// only used for test +var skipVerifySpan bool + func validateHeaderExtraField(native *native.NativeService, headerWOP *HeaderWithOptionalProof, ctx *Context) (err error) { + if skipVerifySpan { + return + } if headerWOP.Proof == nil { var span *Span span, err = getSpan(native, ctx) @@ -715,9 +722,17 @@ func validatorContains(a []*Validator, x *Validator) (*Validator, bool) { return nil, false } +func shouldApplyFix(currentChainID uint64) bool { + chainID := config.GetPolygonSnapChainID(config.DefConfig.P2PNode.NetworkId) + return uint32(currentChainID) != chainID +} + func getSnapshot(native *native.NativeService, parent *HeaderWithDifficultySum, ctx *Context) (s *Snapshot, err error) { if parent.HeaderWithOptionalSnap.Snapshot != nil { s = parent.HeaderWithOptionalSnap.Snapshot + if shouldApplyFix(ctx.ChainID) { + err = s.ValidatorSet.updateTotalVotingPower() + } return } @@ -736,6 +751,9 @@ func getSnapshot(native *native.NativeService, parent *HeaderWithDifficultySum, } s = snapHeader.HeaderWithOptionalSnap.Snapshot + if shouldApplyFix(ctx.ChainID) { + err = s.ValidatorSet.updateTotalVotingPower() + } return } diff --git a/native/service/header_sync/polygon/header_sync_test.go b/native/service/header_sync/polygon/header_sync_test.go index d9ab23e7..39f65e44 100644 --- a/native/service/header_sync/polygon/header_sync_test.go +++ b/native/service/header_sync/polygon/header_sync_test.go @@ -308,6 +308,14 @@ func TestBor(t *testing.T) { if err != nil { t.Fatal("SyncBlockHeader fail", err) } + + headerFromStore, err := GetCanonicalHeader(native, borChainID, 256) + if err != nil { + t.Fatal("GetCanonicalHeader fail", err) + } + if headerFromStore.HeaderWithOptionalSnap.Header.Hash() != header.Hash() { + t.Fatal("header mismatch after store") + } } { @@ -343,3 +351,144 @@ func TestBor(t *testing.T) { } } + +func TestBorSnap(t *testing.T) { + var ( + native *native.NativeService + err error + ) + + handler := NewHeimdallHandler() + + { + // heimdall block 5908043 + heimdallGenesisHeaderBytes, _ := hex.DecodeString("0ab3020a02080a120c6865696d64616c6c2d31333718cfcbe802220b0880b5fb870610bdd3c160308df23e3a480a207f7a2e62342d2b6ba33b80115a22ac3b008fd4a8bbe684db4b25c20d75d14ac512240801122026ff2bdac6f16b977c98ab4b1b322a54905465bc7f299a7eb9baf3aa21c4e3f142208ccbf8b69d0ea00fa1f6f89a07d4bf6d99fe5ad1cd51fc01b01d6a944ef65c4252202195a2715637db9e8662eb71b71a346d2960816bdc1ededc93ed96c6e9dad96d5a202195a2715637db9e8662eb71b71a346d2960816bdc1ededc93ed96c6e9dad96d622081ba6261d0077795e489737675de120cc9170adccaad805e12ef2708a2e214536a208aadf70f37c4ba2775a9dc39300e819d86c864ecca2e53c3082bbc8d535fbf10820114c0ffdb5e938d6de2c5e5ed35ede0e881cdbbbc9a12af8f010a480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea12b801080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb8706109084fbcb0332140208652a93baf5f1962849efcf5795eac7439a5e42412413daaa7a33ca0e7f337624f014dd0b57083e2f779b4b52e5843049309c91d840e203d6edda3e930502b311cf735a4859bdc1c5ea44c346f91f0f67d4ab68780112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610efeea519321402f70172f7f490653665c9bfac0666147c8af1f538014241a5d29b6b5fe19995f7155a2b73b072a9cc964a728b932e1cff3162b34eaa9ef47cbd90f7be7e9101e92c3a616eca9870f0140fed70a81dde53961a57bcebe9460012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb87061090d1a22032140306b7d3095ab008927166cd648a8ca7dbe53f0538024241355f8e1e9bed5a760cb783c38e1c475e3f127d78decaeb03bad879545b4c831a12ff4fa0abfe99ccb05cede5374195b5c09538d9f936f453ca5192b737bf4be70012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610eaf789ce03321404cb8d907fda121fd3dd70bd2ef9c7841f70ed3f38034241eacf0439055743ca107b6e457f6b70ae1f40d47069e69df7fadf0896a253a0fd5fa329943d6ef3531b3f11279ee1173ce70df19fef544f668ae5b032262797fd0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610bccd951f3214055bd801ca712b4ddf67db8bc23fb6c8510d52b9380442413e54e0d6347adc7f538983aea0c28a74d0ad1c5ba959e1713b5ea71efa8cb3cd3b46fd4a3c45698f7b5ab5cd10d4cc2b2c03caba3a3dbfa8c9aef55819cb6e7c0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610dabcd428321410ad27a96cdbffc90ab3b83bf695911426a69f5e38054241884352b407d33091b146cfcb5fffb7e4ebbe83094378a9d33cecccf6a58150ce6b35b3eb76081455adc8be27011bc6677da32a564aaf4bc4d02af5b987243f8d0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610c59fed3b3214127685d6dd6683085da4b6a041efcef1681e5c9c38064241ee4f8bb4a980f2028370fc245c227e4ed681c64662cc625619d6ef9f5e652136385f24c4f518aaf83a5287d116f35d1c563d190a5065dc5e70c1c529b0cf9d930112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610a59af015321413a9d78f4712a65678d7735682819b4f4f74253c380742414037c78275fcbcc9520b65f8b987fa1da2f98890a4a08e5e1766e405ece0219300606406651d0288c276529ddde6ca893de23c0605fd44610651be4bf068ad950012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0888b5fb870610b4e0f7d201321413dc53fa54e7d662ff305b6c3ef95090c31dc576380842415a3ff27bf469d1b585d5f93961fa709b0d7cb6d27785dc5530ea4ba4042a2a7e08308d01308abdeba8aa0da831a8414c814606b3439fe185ec66624d63a48a680112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb87061083a3ddce033214160cdef60e786295728a6ea334c091238e474e01380942415f228f3bbf37e654d83b7b95cdc86d62a114bed637728818f74be77871771cd248b59f100becafe7acada718f77f6f421e9c2fbc80c24001c68fb474a5dcb4670112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0888b5fb870610b0c7d381013214168b2779146ba862b04ca146385645eddb9d592e380a4241f843a071eb3980e940dd60981587cb7dcc1d1017110d78fc6de8c41dad9f377f182cf146f064a57a5e677474eae306ea5907b9b0fad4299d0b09907f116c83f20112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610cfd6a69803321418f371aeee4e2636df789931c9cd43e5d7b72d66380b4241f3f15c4765220bcd81fee403dad9b847972a9c6dbecdd6b9813767dc00b7ffc25649c64a89ecc39846a8200e4a2d20fb06d3563f5b43527e1544e28a161c14900012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610fcd1fd6c32141a578699956c2174b4762de95316b3ad09ba34e9380c42416d8d524cc2536a4fc977fddfeb116dc5b23e278691b08c5f8b98aa2450a3d8aa341ed9bc0da6fc39697adfd74ffc6a934d3a45fd4f987cd51fb1f5b4739b1d9a0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610d8ed9e2032141ca971963bdb4ba2bf337c90660674acff5beb3f380d424170f526b97e1f5335fc3ee9a827a4c353d6bc404f555838d20558581563e74bac46eef9c7bc1033dd0828a219ba4a2cdccdef8b32fa6aabf91578094fe483ed9b0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706108593a32332141d25c827abd466387bda00b429fe728627d6eee6380e4241719b1686636c946a3dd1e2cb8ef74a26c9706ee170f162c2d137be4e35fc5d306775765aea04f2e62fb8bc4095da75b8f8e48a54cc0df3ec05e84426b819243a0012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb8706108dfccfc50332141fbc8746975598d58b0757eb2a273324dd28f6a0380f4241547b6965eb6d10ea36ff94f00f6fa3f910b6ca412263f82fe70cc07e879a0d3d025af51359b96380b08f18650e0f3d22b84ec22a951fed846f1ad3bcc33254020012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb87061099e5e461321425c32fd6ed7b84435a222084ef3fdbb36252b8de38104241a4b125effe1c26e3c11b1737232077cbebd412e703ed97f3b13fbde36e31462911041e18c745ec91de18f07184c12389293b4575d62a9ea1e1250866d2f10c1f0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610a8929c2c321426c80cc193b27d73d2c40943acec77f4da2c5bd838114241452944f12b9ef466bb0e5b76469091df1039e3181c37adb1cd31635cb29fdf50559813a1a35de521bc3989f419540a189cf01db36c3ea3ebc78f7a83955b1aee0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610fa9fc55a321428247de2d9829f3080899749b92e34959c06b59c381242419684d1d9ae81f49f8c5d4f5fc3afb916e7d3ceec8819e4d27ebfe3470bea9cd4794928e6612f3afecc285140a6bd3e6d20f6fecfeb2a26f5d6d1ffd70214701b0112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610da9ef6bb03321428c0d4328520ed7e8657de141eee74a954b07c1f3813424173964033e559a71f3925209fa69a5d72d58971a5424391ab6780af9a15aa6aa0514ee3b4e4a19fcaf1b3114707d8d363a7b4410e11174a9e5c6d86246ca475480012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610f18d87d80332142a998cc0bb43dc510e523fe33c8f1c04bf607a1e381442413f7edf93fccdba6880fcb90ed373e7dd37e382825c79177135310525a021ccaa0f089e61ff297198b5e25b53e81a6c21697c0ef4e19456fe79f4cc7c3fa1710d0012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610b3a7a3ae0332142c74ca71679cf1299936d6104d825c965448907b381542411d0ba59ba2a74223ac1ae1c9d690e8cec43ac4bc26711e8b233304117f86e25146d84bad421a36a62891f55bc150681a89c7b8a07506cd69f837c79f83ec074d0112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610ef81fbc303321430523527aced0ed2f5ce1721086d1d282d3af38f38164241d72c6256d680ab9b9306d2e7d4681df488e574a756e99e7c0561ee8c418349bc1601ca9891ab20d40399a23c0e0fdcfde80712e3dcb8720f9399a1e6ba0ae5f50112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610c7afa2cd03321430dd252c7c150f26a3a06e4eada9e706db3fa58c381742418e7785b4edd7d16f80953446ef683eda43c299ca76538fbd2433584628670a974c91989e1932f13f2c607412a8e2a76e00556b4764c89bb55732bf02e49cc2620012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610809c8c153214374c87b673409e13053dbd35ebe868be42beabc53818424127da95e4a5baf2427b657b55d0ce724caf7c32f90ed2e842d8027bf9549ffa7e719b1039e19224829abc6251342ce9c599c13872c685ccf8aa6c0828beba60da0112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610dbdec3cb03321439f5455840874f4251cf92b14d6dfe10d3cf223438194241b34d028c89aa371d21ca111373a64c1f1826ba6972930cf83c471e2697586e6261ad4f2f75d92016b24ad56834c12ed59833ca7c77d8171b942bce41876beb2a0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb87061097a1ad4b32143a9df5dfcb4cc102ce20d40434a2b1baca9eafd3381a42418988fb50ce17106efea33529d731d05ccc283f3369bc2bbc88329e57584e3a79378a1e483b4f5b4b9c850d76e0d73f809473218ee8b7bc25038d3d99d03d3c370112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610c2a1dbd2033214406c3fef5969b36231bd573adfc34e16f54d23e0381b424159e80c7148513ed706f71af29409b059e6a3e355893ffb410e7e1e309790cfd41325d1715594b7dc1295fa1bbe214a7fcfc188a264e092b074bec733fd9b1b2c0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706109bb9bc493214414b4b5a2a0e303b89360eda83598ab7702eae04381c4241dd3120f8ceb2c67ea00b3fa6b0cef1872b11fc514279a73f804ff39e3edb4cc667477243a1fc5cb7604ae9213a72f3bb3c8f57c8ae1263597db4bc0a66ea3c7a0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610eb8cc901321441d5b3e2ec53583bc0601dfb4f2a11a392049489381d4241e10eb79f5e284c85479924124be176937073ef6943445739aac77480a9ce4512705839bc97e57a9595f45966ac4207c6ae93a44aec3523a2adfe4abc09ef88460012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb87061084fdd7bd03321442eefcda06ead475cde3731b8eb138e88cd0bac3381e4241a287be924e122c76b56c23ce64202257ffca53dd2e2cdc747959af23c4d4c732416cc8a6845ce04091b63d97d874127a9365bc58783129afde9b61e36674ed020112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610c2c49607321443c7c14d94197a30a44dab27bfb3eee9e05496d4381f42417a2a43f95912cb291b1de685df609c91310d842f91ff9f756ea354e9d5589add348c581b53adf59c2d04e048bd7b8e6b78b5f139a15f85f7dea733f5f1197a470012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610f690c44c3214448aa1665fe1fae6d1a00a9209ea62d7dcd81a4b38204241990b2a2eea1e4b29c0995a15a2a5300f2fe0e9d0cdb1c090a1db3b05e764c3dd113eac3ef27c6de9d6359d72aac34e8cbf49bbf98ea99dc421d519b4ed07f2fd0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706108ff5ee2c321446a3a41bd932244dd08186e4c19f1a7e48cbcdf4382142411136e3deeb71afc5c120edb3b0c34c3cfd4b850b738e02ed4ab782f647c5546d3d63162c9bacf73d347ac07768bce49ea6492764fdafb2147378f8adef7ee77a0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610a394ee06321448aff66a7a9ce3b8fc4f62c80604bc310edf94cd3822424144a4283ba96f8ea539343fe3e2ed747b4bd006bdcd78fb52e73906cf9abcdaba48324f5e1953b91893b55c118663ea05cbdcea39880d3dfd4014e549ac456f900012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb8706108d9fbdc30332144923de87853e95751a87eafe957a88a564387dac38234241da88064a9cdd3f2d3f801f2b40ea7dd7d325a87f1b556b3f65722a35338b37417ab77c71015a91b7db007250e2e2c0aed686571a5fc855bc1cd8b060b776ec6f0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610faa2c85232144df34fac8313dcd3442064b90e22129ad82b510338244241615b57638064f65ef63a7c2da499c05806233e6bfef785f1c883e36de3dd9f587122a745a68e57652cf11251fe2c338c93903e9623735b627096c29a6cd6cc610012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb87061089d6936e32144f856f79f54592a48c8a1a1fafa1b0a3ac053f99382542412999356ee4e1f8fdfd38a3b4af8d604d892f098603bfdec849c8f18b0f51b6e642457a828368c8975c9a198680a3c9d08ce123d4dbf49b01fa00e5dbb4a67a110112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706109ccb9938321454fab55f18248690264769ef9c0b3c30b8344b8e382642416454a6ef51e6e1ad8f60f10f8875218aff238a02ec1ff7169d96569b768ea7c0527eea70beb8e0f8d0ac5a598a8b66b5d0d1420c19b776e15ee72edba4f963080112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610a285b1d00332145973918275c01f50555d44e92c9d9b353cadad54382742416dde182cdd6fbf885489ce736b7639b59ec636a4e76634fd9dfb16e547e993a401dc7273ac63d0b37acdd97bd997e0c1ab187d1b0317a17a8f961222bc95aff40012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610b895d42332145b106f49f30620a07b4fbdcebb1e08b70499c85138284241be62a031c343804a82843cdaae252389c7d788e8e75e9a0bfc2e7a69a505298c37c441d142bea9552135430158332db9c1b69c266d2ed1c0eafb64161d88c1460012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610c2f6adcb0332145e1f84c7f7d19a8d6d918ad2b5f714a6e5d1c552382942410bfec75c25c7af734ea711e4030174725e30b56f7f65280d47d45676f5482e087993a6d61437dc6da6c35de85f584da12001f7fe0ffe7b520d8c590c30c2e6db0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610c3a1fa0b32145fe93ddf4490a02257bef079f2498650c97c44de382a4241c4abc8f07e337ac1a00086d97b6c45f922b80158fbdc917f025d7fea613083f57a1fd7ac34a3a1db905e07fa20c40bc2f8de15dd1de655a202861076545bdf120112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610b0c2e00c32146237b2af1238d12248630ce21aa84f0952122232382b424165c41eed28c55cf8936c9ca8b0dd11d9e79c46e45a8ef4d24179428e86f3926418c815375295266c0a23e4cc1cd52c2de1ee1cdd98f6fb25c74175f595cfff3e0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610928fb30b321462bc6a92f4a4d0f5b4e16967b88db2d9e196c9f9382c4241cc902cacf5327c3cecc97a0703c0c7972cd38b62e0e758d3e0245d90ae5e2f5410cf5d7dc2dc48fc21e503405c8b2e703ec62a745eda6f043fad870f4de673600112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0888b5fb870610baa5bea701321462fb676db64f87fd1602048106476c6036d44c92382d424160867f0a8467698ec0735168b1506e8edaeffd5a18e6a101e135dd7c28bf94fa098d4e0ac3c657b8dce0ba234abb8100e8437398063ba2b052793bb5ec53583f0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610dfb1fd2d32146a654ca3bfb5cfb23bf30bafbf96b3b6ec26bb0e382e42417b3fff9c66e3004e6c8c761843969987ceb8a30e82d5cc3deb89009ab8fd56695d69d0f67f4ef9853cd91c35853a408d5e932cedbb3aabd9c0f60926297de9180012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706109ffe813e32146b2ed7e4b12a544ca7d215fed85dc16240d64aea382f4241c53a94d066faf89fffe650c608cae6d7096d69d8df3ed3d32e781f77097e75632d6f27429a81a3bacb326f30c02c5b26580924fa457b122ececc3295ac296dd00112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610ac879b15321472f93a2740e00112d5f2cef404c0aa16fae21fa43830424171e1a0850f869ff2537e39296c64bc86ff2c1329c5902a88a15eef39f58c32eb1caa06c8d92c73d184549bfdff693b93a385a0f38f41178ab66d92eea704558301120012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb87061082aea406321477ee14d1a9ba7130b686b736a316b5bf1d3ccb363832424118b14f6e8371b41bb2b9dfa7225733efd86f160acb8d541c7938faa20667c2e9707d6f92cfcf253bc00bf4f4a98f460fbfb496329c4fe48b3af47b7132def3e90012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610acefd93332147b5000af8ab69fd59eb0d4f5762bff57c9c043853833424158d1e08050304298ebc3e2eb64c45ec6529fb6fb5012cd1f8c4209f64b803f664ff792dc7f6ab6d4176e7cd9d34e8361a987410a90a82f2c6c451a5f61274d110012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb87061087e8f0c10332147c7379531b2aee82e4ca06d4175d13b9cbeafd4938344241b7bce9a3ea3355bb8456aa235006117fabd210c4e48acd00bb003bfaa49a1950607c72f94b7a34de5852c3035b3ce9442caae81dc26ab2b887e705cbbeec84f80012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb8706108ec2e5cf0332147e01c7c1a29584e6e54c2ce44313461fa84092fd38354241c7df2f72b4b2c98e8f907c76b492f46f848530438e62b98ae795a138734df2b90dd29f403c8e8099215a7ed32c99f7255f0ff91e295bb12671670d2871fea3010112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610e2fbdc3932147e8024132d07e3e69c9bc2012dffe300b9c5807d38364241e0e4ed509c965be983eafef595b82d46991e52cdcad07b28813d1d636236b3207dfdeac8b3306d037500f8441416872245d05c443ac37f96c1625cdf40dd1cc10012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610fad1bcb60332147fcd58c2d53d980b247f1612fdba93e9a76193e638374241a5a1d9c265648d897385d76cf4cca38ee9e29d81d3d6fcf4363f9e900462e8305d91f438c03c856f3a31e84c8d65dae00b2f18516eacb769e2cb1ffee1fc1aac0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610f8f4a00f321485517022e380408b698ea0ea379d2b69f907c19938384241865f2c6de8ae155b79ffe1751529188fb44e45e92e7da041e19956743bbd132a787fcf7bdbda61f0cb1231b1df2a308cb5454c7be3ceb5a6467607237f7a62150112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610f4a7d3cb0332148bbf92f4da9be0478464a077f582abd7b6df193c38394241881c569acb59364fc080471cd1bee45a5e559f3baa66764230dbe9d5cef070e12a7402c2b0d3e8cffaf435014fce06eb8834dbfaf6623980831742ea1e7cb8ba0112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610b3ceddd00332148cb120478e9503760656c1fcac9c1539158bdb55383a4241070329b9fa65994f37a29c34a58afb07c2e3f013efa7d114fe57e6fcfa7108073255a86554572ba1591d8158638cb1b7c197e5c5f765929e8cab6c40c7c4bf780012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb8706109baacac90332148e9700392f9246a6c5b32ee3ecef586f156ed683383b42414b409b1ba1f0dc0723165b8cfdaff5a67402b757e01c88d3535de1276de584e31201a66528837f0e0fc715e82951274a60c45c994322ad12709fb11de5ce305a0112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610eab1b6be03321490b11143a0cb64e067402307bc7f2276dcec8250383c4241c6898c560635fc05aebec546a35e17bdf7d3cad8538aac3d38a320a78189b19567c7813d6f49f7666bf3b7e6c67b5f6f69de5b2fa5cb8fa3f5da92821d360e4c0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610f5ffed08321491935751ba30494c4fd276adcf134ecd66f8eca6383d424141889cba5318781c0a2e02681512a5118cfa275914c136ae44a48e8f74438dfc17d78e4c886b48a06c106ec441b06bdd2e300cba18b6c761c22472c81b0ad5070112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706108bfb91623214951c881cab59ed669915a2b04ea5721600794ec3383e424131bfceb06109fc4f61b5dd5b80019e73389ba2508a6c776c1733023cb46661de62d0242e4a2e69cb2789f4dc477d5fe39a23699b795c0486d7602f5d31b74c3801120012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610f0b5d65f321498c27cc3f0301b6272049dc3f972e2f542780629384042416e61c11c1cf8dd4403f25c2befbf4284271609dfb1a20e9e92ad5afd55d2f6827fd73c67495420cb5e6f4bcd7f6ab13cc9028fb83c544173016ed1b82aef53350012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610fdaba60f32149c56f33b968f83922bccf6d7689b9c883af9de49384142416d210a63f185895f645d6f1b937d2c507b6d0efa465dc82454577b8dd5450b794543077b104739478270db5c368d3b2fda21ee18c5fc8b6d18ecce28e0eecf3c0112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb8706108db0bcd4033214a3bf7e661822fcc4f2129e93096cbb70dce6d3c93842424198dd378068519a6309aefcb21bf73cc8be2658046fe9734fa8f555b09e99297148d721d070547ad3a3d73da0ac02a4da05ec8dbf22983df74313e2be542581600112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610e7b993673214a5a2c0eef6ee3e4b0bf79e0c9378d101d3cbec1338434241a4144d955b0ed473f8ec4271f9fbf22b1b0cb9a4fd4610c0a12c400ffe6d86880a2a19e76b5dbdb04b6b1ca86a917abb35521225754cdf7b62b6e7c356b40f170112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610f9b7d7d1033214a5d5a7c2ebd2a381f7e958754c0d6a2d469b131b3844424144151b901c9c217df2248b7f7747cbf2fe153f17970d81cbea611cc244be32b007f67bf2d0f6c55b791713a280300cdc78744ba5f4abd99e6446544494dff0a90012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0888b5fb870610acd8c4aa023214b0695fe376b48a3f39040ebbb2192e919c6b8aba38454241fc6a5fbddb3f02585a015c732d201d877f1ed9a739c74170b4d4032436d07800205ca039d23d6d4ddd805a91bf12d4f145f06b30f702be63840f56cea033b0900012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610e0bad71b3214b5cb4fdb37e9fe8d7b8f473268128dfb4f862f4f384642418e00a798d0b3f19189546ae4677353ff9caa28001fe077342e130e00c5e3a4b7702c634e71ff134493fb5abc1373e5546379b1e242bf696f6d4c5cfb8fe9b3f20112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706109ccffc243214b702f1c9154ac9c08da247a8e30ee6f2f3373f41384742418f7c1b7846c70c2ac35d68b0211c337e50f32f18ea07abb28f5a3a559bae4dc97aeecb0c20d857be3195d40ebf325bf7e9060f1c1c56ccbfe8585b98301b63c20012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610dab8823f3214b79fad4ca981472442f53d16365fdf0305ffd8e93848424120d16125e28e31d5a51d2a0155e21ebe7b6033af93277d29fec2a46313396836399621bf00d2e127e36bf5fde2c4b1ab607059f3503f297867f5e947821252700112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610f3e6ec0f3214b8bb158b93c94ed35c1970d610d1e2b34e26652c3849424105672ca60130f2baead60fff1ad287ea06cea61e394f547ef1de74b3c39b87cc7ddebf0c75d9b3f0007040356ee604ea5919b5a34bfe787a5e0d0f43105a668f0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610a1f794023214b95d435df3f8b2a8d8b9c2b7c8766c9ae6ed8cc9384a424106fbf7d7aceabf15fdcb3680f0489f608a2a49d48babae5925c3a6e4e0bbf13d22b21943198121f3058fb314e81d458739b3609ff56f82813721a51a58a1da320012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610d8f9fb043214bc6044f4a1688d8b8596a9f7d4659e09985eebe6384b4241fe7c51980e08e8023e169d7ef84dea3a6b460b19c75dbcd0e2352d57c1d27b1844f81dbed95a3b397584d28fdad7fe8e16a53ead0577ee02b173dca8d7f3bb320112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610f7a3912c3214bdbd4347b082d9d6bdf2da4555a37ce52a2e2120384c4241c3180eed3b5f2c220f92c08f33490a0b8f1e76bac114a34e2e1c29973fae4bb35bdad988b664f1a3124fc3a0bf4cac2cf2b88d6b415cffe6e5ae1ea6acbe7c840112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610b2eef8cc033214c0ffdb5e938d6de2c5e5ed35ede0e881cdbbbc9a384d4241dc2b2ecffe693474bfd7b2d565898ca2cbeb2589007827e7438b2565838959c66cc4096c61e385cb8d00e340ff8d23f929f07918829f72df476bb2b407f3e1ed0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610bcb8bd583214c35649ae99be820c7b200a0add09b96d7032d232384e4241ce3e43e43f4833cce842be2e63e5d1253c48bf78e5bc13ccf9d049e93f4d66c915205d244763807913bc9bee7ac1d5c18130122cc49281fa880f5b4417d849860012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610bacff5d8033214c6869257205e20c2a43cb31345db534aecb49f6e384f42415ccbcbe4c42427afdd9166fc1938b1ba30c86f76fccccfef7c8af3af57dbdbf46a383db9b331856fb20e6842d1bef754a155b8cf173ac2c1c9436ff73a5d2b2b0112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c088ab5fb870610eede94a1023214c74d21957b34e4b9bae50e436a2581bd81ed581d385042415d12af0c1cd72cc808fd32e8f6d9be37d977ec4c039566f601fb588bdb91620c3d5d8edd17fa36ff35a38b9b656e062c70562e3f1cdf97a870ffe73661722ec90112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706109fbcab6d3214cdfc898128dbc380a60895c6e8c0975dc07d07e038514241a4efe6ae5f323a5ca740af9d0f7300412879e14d16b5dddc11388539192145d66fee43476a7e5586545621e37d2f4f74f6d95676de7d88ae3e7b27be6e7cd6140012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610dc8dc0ba033214d48611f40a37623bbcf9f047b8538177d879bad03852424153de38e491c1ea9ae3a38cfa8f946bd211a10d70072f25d00e095cb1cf3665c02f1d2ac776ff515051945d038e741d52701d30fb7f60ce8ff0bb74008608a7b70112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb87061093f2b2cc033214d56fbe3294ea4d73cca99ff8751ce7bd9b688cd5385342413cff6cd671aff9ee88fb35be3ddeefa1cabda7df52924bb6f104081f1c88a8c60e4cc5098923add64cecbec1cca21dfe9c9e2b8c48004806180c108024963f980012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610c5aaba403214d93622443da1f3e81cde6e2c0e482b4d8084251a385442411cf8cc6ccf67d6b199d4d525b65948570d3b61fee89c0377327aed9054849ad51fd5cf3ed54ea6b97a7154d05d4ab309e3c11d3ffa98ec7a2056e2ba4180182e0112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610c59df9cb033214ddb833b9e0e3f2f521480e7bcb3e676e0737047d38554241583aa1975c51b338ea7991a8fe486a8a4364c8ba6788c18641fea4cdd21c4a234258e8f2910b5ba6bc2039e76e310a4aa410751a1c86d2a3b0866c05434e1eac0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706108aa984063214ddc6f0e66a442632f6c4fbf9eacf363170ee29163856424159b5d56ea65cbdc67a28fadf830225a7aa4c9dd77f6a9252951f3e9161d23a774b09be7c1cbc61743d2dfbd440523674cc36606cba82f96e85868e7a73b0462f0012b801080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0a0888b5fb87061082fd153214de8da1ee512529b6c61fe7c769affc160308dea23857424138d8cff44d970ef26a77919d14d775f04338c7233c9e80c6f02cc35340698af26d0559a4dd4a5463c464830cd5b72eeb821d9ba9a58715f9c3ec699d503d79bb0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610c0eef1663214e05ae0e76f582817c9e31d9c1a5c02287a31d68938584241df6ff3b7fa56adb4372b29feef0b5177510879fd56f558fa46fb83ef9c7f99ad0ac32fe957dbda2a524426637b083a62e39d4764c3ed5658f3bba9108ba6461e0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610f5bf89533214e296cf6511ab951e026c620fb0e266db4d6de4a03859424155e7d305aa6ad10b6fec4d02711ea354360878a99a8d7eebb9ace39307c57f3302574ef33d3f5bbd213c5efaf62016b701aeb173383119584bfa58300087a48d0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610ba88af413214e4cd4c302befddf3d544301369ae3ed1481652fd385a424138c2b4332e1462b9f05b82d7c49a425be4b9606561e462ea3a495f86fbedec1870e0b836f86e10c29ace87c6e3601bdde6dfda7ea72f5150ad8f2720706a245b0012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0888b5fb870610daa7ff90013214e63727cb2b3a8d6e3a2d1df4990f441938b67a34385b4241e06790d0dab1ca723b5129033c7b7f253dff63e0e32db5869b15159b13a03fc741534984eb0ba2a317d6131703c0b5aa4beb106edab58f4666b0b6ca7e453b8c00120012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610ddd3c92d3214e77bbfd8ed65720f187efdd109e38d75eaca7385385d4241270f33e1683b7a3d8d4a0fe4fbca5c0953a157a1a5bcbf70bad27561350061ab72a5b88c150512f09af7bdbf08aaeaadfb94bd50bcc2ce230a1a46a786e7c5c50112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610c6e88f2c3214e7e2cb8c81c10ff191a73fe266788c9ce62ec754385e42418b4752cfc06f6563c2a65e8b25fd98a4821feee0e4c6fd92f64a6a6e353e59b578d4664680a53b5ac56c9d8a52e4912e7042d00e67f3431df55e7a695eaca97c0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706109ef8cd1f3214e87d858ca83ffc1e8372b57b2d4f8aaaf8156f19385f42419882b2d52074816fbb9804a109503e92279857d08d8c1bf959802ebba960df3923187bddf0633662d90d10509fda131e344fc4fac5c54d9348c712220bd461ab0012ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0887b5fb870610ebf595cb033214ea7755c8fca76e6c1ecba0c678c5694ad8a8529238604241db4d2e451e5165dc796bcb9142dad5406f6db2eeb48632822694509759a671394704c4ec77c1f993bc8bfb0ab5447b7a3f597096069fc7212f3e97e89665598c0012b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb8706109dd2c3263214ef46d5fe753c988606e6f703260d816af53b03eb386142412bcec3ca64936492732543518fbf7f64fdf7e17661ef89edff9315811a83755c3825ba81b906f4aa127b539554d5783ce508f2762c4cf247babd0aaaa9258d8d0112ba01080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0c0888b5fb870610cfa0bb94013214f10ac184c3f8e98793675d4499241aa803c760c6386242413bb9425945677f8e5e70695d866c95dbe3943059566ee94133e4543d231a46f504aabfc8851f91b699d2ecaaeccc0eb07fe19c3909fd9316883543ef6325cc2b0112b901080210cfcbe80222480a2077a11c96d03b0044c7194fc221def4a11932fcb0d8600c4cbfe22772fdf2d7621224080112202f7c014f572ae8f936aa356cb6d279724eaad6fd2520102eb571df238b22d5ea2a0b0888b5fb870610dc9aa10f3214f84c74dea96df0ec22e11e7c33996c73fcc2d822386342417629e115c4f41dffe0249041b328ab7d682c7c98d5e9c252358b7baa41164bfc04d81efe55f76b46a1db68fb92c1e7d87b520b0eb32df75d29cc5511df82b033001a6c0a140208652a93baf5f1962849efcf5795eac7439a5e1246eb5ae9874104841b0cba6c27f4e77bd8a7105f0f0a85e158cccc39487158257d84879c2a6c57c3d8f30be8bc1e3383e6d329db0d9321d6f151b4689c71edb2128c32f43730da18fb5420abf88f91ffffffffff011a690a1402f70172f7f490653665c9bfac0666147c8af1f51246eb5ae9874104d1228cce225214fc1c36c5ac76f6f9e2394de97bee956197f632ebf406469ffe218193ac7425d9b827b1bf6928ba5967043c7e88e09f7ba5f6a45599a115eec218e7c7a20220a9f69ed2021a6d0a140306b7d3095ab008927166cd648a8ca7dbe53f051246eb5ae987410407ad4b275b9e9c73c27639e4679c560d473aae0c7fc11b88ffb0d74b9dbb9d9550da8eda54b3a5de8ecdb42c1b6a4757ddfe2277adf03f2e00a7ed7ca0bf97b81884ac4120d5af91f3fcffffffff011a6d0a1404cb8d907fda121fd3dd70bd2ef9c7841f70ed3f1246eb5ae9874104c50daae284879aee85f31904f6b03662677cf299341d3aa1a420f1426766b9b6e1a3de267f82ff8300203102346909f62b6bf79279f46317173951fec7ff4d5f1897fb0420f9d8b5abfdffffffff011a6e0a14055bd801ca712b4ddf67db8bc23fb6c8510d52b91246eb5ae9874104088437a36ee99d2b71955ccf2e1c9ffb32f6edbf206f27cfee1027ae55f9961e2c4eb6c179b88c237db58cc109cc97e10d0114be2aaa232c1e922ce2e16b4ded18efa5b70120a8f2bcf1feffffffff011a6e0a1410ad27a96cdbffc90ab3b83bf695911426a69f5e1246eb5ae98741046977227921443208ff86b7b80c2491099a5c342081059b20692a8231af02b8c642f181b3487fffe972a4746f0ad56906417c8238c9363a4095f10852bcdb580c1887aa8d0520a2a5fc8afeffffffff011a680a14127685d6dd6683085da4b6a041efcef1681e5c9c1246eb5ae98741046996fd88565bd0d4e2bc5162e822bb4fd76126e641d5a240cff1074411f217c6d6503ea7616f10297ce7646c1794cd5ddbc1eaf5b4130f26c43c9c34feb5ee0f18bbbb95022098a2ef761a6d0a1413a9d78f4712a65678d7735682819b4f4f74253c1246eb5ae98741044fa9ace6016c6543ec37a6324790633db2d5757fbd02cb784bc15978dc6a1fbcb1b907a2cab94b271d1e58c96ee8432d58fcf9f2fa71f69e5c4216d830b35eb31895d8112083b69db1ffffffffff011a6d0a1413dc53fa54e7d662ff305b6c3ef95090c31dc5761246eb5ae98741041699ba58acac5b78efce3be9caded63091fcb76556d5c4672118e67d1249f9b9b6e45b33d3b1ad47abeb58ac57fadd59f81b18cdaa51e280ca7d586efe8c820a1886cc4220b6b8e8a9fdffffffff011a6d0a14160cdef60e786295728a6ea334c091238e474e011246eb5ae9874104cb7728536d97b5cd3d6442133a9f4867959941b6161db8caf732298181892d184e4e4a95e126d59e9d9838aceac5c43e73d15cdd6cbda04e819697f0e2e15adc189da60220db8188b5fdffffffff011a6d0a14168b2779146ba862b04ca146385645eddb9d592e1246eb5ae9874104f5970a9a363ea37a2c390506783d94a8e5efc3ead3f32a4224a489de96e17273e2181e2f6f170215c9859092c5deb0c8b20b60007c3b9080656af53c1696e4f01883b70120faf5ead8fdffffffff011a670a1418f371aeee4e2636df789931c9cd43e5d7b72d661246eb5ae9874104ca36a3591de0fe7ced56e611c067bb16eb4038cfc81aa77eaaa101b7753231a3d3bca30a36200a0954703c4a77871c5ca6d73b616e010a639664cbdd412b38161880192093a0d180011a670a141a578699956c2174b4762de95316b3ad09ba34e91246eb5ae987410426721078ef970a05d17c60c0b05d536aa7151dd48a0e7cb32feb731ab820acf5dce01b3cf8e465206fef32f4bbd8cc5b6c62906ea978f766ccadb1adf9c2605618b7f05020e2809e701a690a141ca971963bdb4ba2bf337c90660674acff5beb3f1246eb5ae9874104bcb9741052a1b818d1c2410b975f5edf7e3a64cabb9f73cad6e8819dad7b1039697bcbd6bf69d9dd5b9d335194b36d1f9fbad329a18bffd6c5e9ec6b7cefd58018c5a2c62b20b8bed7b6031a690a141d25c827abd466387bda00b429fe728627d6eee61246eb5ae9874104b656d36d057c0c1a6ae8128099088f4e641b9c5d055554642f96bcd690a2dd74b849363296f5b309cd8351380056cefacc7318a1f810559685eaa4699474bc0d18cae1ad0120d7cbbdf2011a680a141fbc8746975598d58b0757eb2a273324dd28f6a01246eb5ae98741041b31c051fcc4cbe9d71014bd15d54fcf752f5c08c6b045ab19e7617b684d06d4b272ed1e8dedb63474d7bc959df4d75ef2fa5f206419fac6809aa11308a2fd5d18f6921d20f0b9c2ea011a680a1425c32fd6ed7b84435a222084ef3fdbb36252b8de1246eb5ae987410406398702db4f95eb7848670a488fecdf070c83c6799650e1509ca64d11f8cf9ff5298ffc8af578137df24ec598b77be557c5a29663ffe086106c9f9c00807b1318d7e9cc0320ebd4f20a1a6d0a1426c80cc193b27d73d2c40943acec77f4da2c5bd81246eb5ae9874104877af9e5e26bca4f9063d4baf2803a491fad3219865d9d5fbda6edea5e1c1b4272d4f4704ee167b77091498d6eb8442ef8ab6c2b5a02722b15e0e5ab0ca27a0018f5fb0a20f4819b97feffffffff011a670a1428247de2d9829f3080899749b92e34959c06b59c1246eb5ae9874104e4159c4f9eb8227885d37ea988dc12cf07154af62ae7021422a128d568318ed5458c5c3ceea3dc0b7da34424515639c68a76a48614b5e07ec3508153e1a0ec5018bce60920d7b7dc021a690a1428c0d4328520ed7e8657de141eee74a954b07c1f1246eb5ae9874104b24d50f05b6e709a93ba13d67484c750e13fb2eba74cd87a373ea21908be274232c703cc30bd66263202a745cfb4f207d5466872abb89f4f75e966d10e4a8bf718f6b0b90220c6a0a4a8011a680a142a998cc0bb43dc510e523fe33c8f1c04bf607a1e1246eb5ae987410488afb121139af92659fae285e6bae620cdfe5f35e8cd6c266e0b9ef11f91a7c898a8770886fb269cbe48c41171f1578159bead0f3a8c77aa4794847f75836925188cab012099c79198021a6d0a142c74ca71679cf1299936d6104d825c965448907b1246eb5ae987410441bda7846a4bf03d50ba81e7f082cfb736534e5db7213c10cee08b6e4e12c5460fd10ffe213f599ffa372879e0803240c95dc225f7074bae3c0cf4828d3290fb18ecf44920d3fef3c5ffffffffff011a6c0a1430523527aced0ed2f5ce1721086d1d282d3af38f1246eb5ae987410439a3232e18c22876b20fc1c5fef1b2ce82d5393e7e592622aa271471c6ae0366e69879bcc1c2c19dba0c1b1b7a33bae48ddda6e5d130afb687dd2e6f258d280218fe7520d5d9e1c5fcffffffff011a6e0a1430dd252c7c150f26a3a06e4eada9e706db3fa58c1246eb5ae987410434f30e5ed1fbc44c7b41b0134c886097c2ed98d17141ac40e0796a7c4ec93c0c1eceec4160192bcb75997f57f4a2783343883450421ac750f360aba5ac826cb51888a9b70120ceabb3f6feffffffff011a660a14374c87b673409e13053dbd35ebe868be42beabc51246eb5ae9874104a4cd9f0d5b34a57270e8a661cd4b9d8a5f5f6c9bef9201db5ccde2bdcc7483e15b904d3d09637521676c69bd6bfae419f1ce33b9e6b2814ae0cc138e6bbf660618e26d2096e3b40e1a6e0a1439f5455840874f4251cf92b14d6dfe10d3cf22341246eb5ae9874104432d6868d570d161709c59f1aa37979f2552beb41ce811e8f0f5573b02cc4c688c18a7259007baf16312b6bac1d521314173b60e9165ffdc46dfb1e8adfc7f7c18dc858d0220defae5acfeffffffff011a6d0a143a9df5dfcb4cc102ce20d40434a2b1baca9eafd31246eb5ae98741047ccefa8460faea3a81b4ce41be62c29ea1cfc1a8fda2b3e4eb634a3c0a8da104a4c916fe0612ba2ae22e3ec9b8521efaaffcda7b05afa4826bd36242ece756cc18d2850220a0ba8bdffcffffffff011a670a14406c3fef5969b36231bd573adfc34e16f54d23e01246eb5ae98741047ad53f370481eb0babe5439180af6942cb6272d3fe2989696a7f630c11752f9209a5714fced679f6981b5a70048f1e7ae05cebafb4df9c63271ac2aaa933a3df18eaac1c20b58ba3421a670a14414b4b5a2a0e303b89360eda83598ab7702eae041246eb5ae987410445c2815f01217c3e7e730304196f7d72c440387addbf2fb743728e2fbfa6ad585fb2c4d996b3556597f2a845613e9a469caa65934a55c41ca9d982cb9b7075f11893ae752094c4c3481a680a1441d5b3e2ec53583bc0601dfb4f2a11a3920494891246eb5ae98741041662065d05db051bcee3a554ef5c1c6c8b2946a38bc48bd1a70ec63816444a2d9dd6413cde5ab026247519bcbb1b88dbb3bb2f62fd6a0af473df978d80ad6d7a1882f0b20720c7bea04c1a680a1442eefcda06ead475cde3731b8eb138e88cd0bac31246eb5ae98741043522a004012c9740703f676b95b5121edd7237fb0f182c3c45e7c7a77eaa67a20e6d0ac025d5bd96295bf95e2e875ab2a9da5c0e547b7d00ca7ede33c1b0389318bd8d7120a4d0b4af031a6d0a1443c7c14d94197a30a44dab27bfb3eee9e05496d41246eb5ae9874104fe0e75276f667c335d798e4c11de8a0cb938b41e91d4f184fa11f2cb09845edb5bdc914f4da87db1511ef6ff90727142a6acc3d55d963350962c322879584eaa18afe34820c188cdeafeffffffff011a6e0a14448aa1665fe1fae6d1a00a9209ea62d7dcd81a4b1246eb5ae987410420f2d4e8ca210f9976821d94fe9f57410a3800fd54010726c74336a702f7261716186e1f834e247a3ab095aa96af7c3663652ea4c42ae85eea27c2be29cb09701883a1e70420ae91d9b0fdffffffff011a690a1446a3a41bd932244dd08186e4c19f1a7e48cbcdf41246eb5ae9874104af2b42565d5c22d1353e23936bf32fd0642d2a2c567d866135d2e547fc4679524a2306141bc214c96893ef6c6d312fd5bc3654abbbf3b74ac96180f0c2efab9018f0fabe0a20f182b2cd011a680a1448aff66a7a9ce3b8fc4f62c80604bc310edf94cd1246eb5ae9874104cc7a0adaa5d58b8b9aff67696f52e59541a0d208c22f56097f92522e9e4da98b7dedf2924cbb69e922414bbc090f4e28f6b42a310e96abcef80539a95dba950318b89c4520d5c1f591031a6e0a144923de87853e95751a87eafe957a88a564387dac1246eb5ae9874104c74de15a4e622b0d47958034da5f8376f8f3c36a77fb807e2b6533b9b9445af8c1d9d7271e0e2d1d9e1f1e2976851241452517cd25658a438fad8b908412865e1883ddaf0320abd5dbf9fdffffffff011a6d0a144df34fac8313dcd3442064b90e22129ad82b51031246eb5ae987410408a8eb34eccba507e5aa16e783e3fd3bc4b70b1d10a8cb3d31674a1b00bfa7968514c584520a8575a4afb4bb25bc10baa97639f1be380dbf3eace482da57925818fce81520c6f6dd85ffffffffff011a6e0a144f856f79f54592a48c8a1a1fafa1b0a3ac053f991246eb5ae98741049c0af0f00b2336bdf3a83b4a68b59caadf84fe7f3a59882e5174ed2d0d96b1f7c6378200fc8a0083fcd7c0cf62d142ac8bfbb187db9506b01f4b95f4a9ce8ee118a8b1d22720aef898d5ffffffffff011a680a1454fab55f18248690264769ef9c0b3c30b8344b8e1246eb5ae9874104d25fb5117d46b0d3958241762a2dd04a4a02b2dd459e71576824fa5b4fe3c1d0c851e101491b0530f8215f9d4ae46da84f57c2f437bddec790d0656789063d8b18abc859209091e7b7021a6e0a145973918275c01f50555d44e92c9d9b353cadad541246eb5ae98741043c53ea6e1964e0670dc9ac72b3224207885d4c5f08cabe1e1080c662fdec278e7e833798757cb5cf121447dcd02a15f010eb4aa87cceecb23daa4bf904112e7718c0fbe70320ac9eb0eefdffffffff011a690a145b106f49f30620a07b4fbdcebb1e08b70499c8511246eb5ae98741049d73839b66cfdecd2ecce0dfaefca77e9ee3a795ad51c752974c24385f904bd51746e04b4c0bdb47469f24bf9a0ba8c89011b65833850f0e589a08ceaf185fb218b8e8ef092089a089ee011a690a145e1f84c7f7d19a8d6d918ad2b5f714a6e5d1c5521246eb5ae987410423f2a1ac55c387ed2949bcc5979c950b24c665cbdce539913b66342dfe866857e2b75e522248b78e5e43b573510058e9bd6eea573225c8d26c2b2abde0e7516b18d1c3910520eefad08a021a690a145fe93ddf4490a02257bef079f2498650c97c44de1246eb5ae9874104e048dae89bb4235dd4216a54a46312427db9cffb82959f48cba797f04605ee8c47cd9025ae7099cb6bc80deea1bea207a26d4b4ec8ef5c0cd2ed3671acd5ff7f18b281b60120b0f08790011a690a146237b2af1238d12248630ce21aa84f09521222321246eb5ae9874104b91df3078221d1f13a7fec6d07230f878e3f01c4d3d3ff486c403ae68a95be8048f9738a7772e928a54d4c1da4ccea7d4654590e781037768b87d0dea199aeb918c798bc0120dbc3d9bd031a6d0a1462bc6a92f4a4d0f5b4e16967b88db2d9e196c9f91246eb5ae9874104ff7cb0d8cd62746c5a5df7b78585ed256b0ccbc9da020790e8d1f72d45b3499ecd0bc7deb166bcd9859de0c9b7833f1af0fc90e54c553a73c3bb75e4666cf4f718bdf46c20f381f3f2fdffffffff011a6d0a1462fb676db64f87fd1602048106476c6036d44c921246eb5ae98741041e7b1045fa8d8dce5d97d021da9a715499485570bb38d9d72deb1c76fbcb8043f5ed4477cf756e68de3f98d9476db8dbee5707650c91d3d4983af2889ce96a6618c3c60b20e6e5ace2fcffffffff011a690a146a654ca3bfb5cfb23bf30bafbf96b3b6ec26bb0e1246eb5ae987410425d18e5a222901cfe92269e5a073c977995df6a6752fbcec0f4da7e82f7fcb539575198816c331847a4ef1e74f43ae161c3e087b366b242b49e345fcaeaf64091887ebc30120abbbd381031a680a146b2ed7e4b12a544ca7d215fed85dc16240d64aea1246eb5ae9874104e488ff6fd81fb21f7fc098f727786fd9a3454d0e7a0c48bfdf0cb01228260dbf9d7cfc3ca5bd6706a525973299589baa6ed1c28ab3973bc81477127438eea3bf189199452082e4d6c2021a6d0a1472f93a2740e00112d5f2cef404c0aa16fae21fa41246eb5ae98741041a98b875a62e03aa51d60812d57d03b22d51b36cff91cd4070db64c7eb4206a1a4f8b6265f6297045ea5074d997b2d5db0417115a4e5175d10390410c19aadce18befd7b20f3f0d8adffffffffff011a6e0a14742d13f0b2a19c823bdd362b16305e4704b97a381246eb5ae9874104e3d9d418d82e60dcad162478f8e7d6362c8d584b42c93e4a9e6ad877a941c2b1e58a1571b39c89316e78729ae9190bef889a58e847fe104cff01e1c62cb3ed4718dce8d8062098fdf980ffffffffff011a660a1477ee14d1a9ba7130b686b736a316b5bf1d3ccb361246eb5ae98741049d1deb5737da28cb1ceae91b6fb112a36a3d9f36d2bd2edb2792bedf81310c7d761364b520bc28d802aa17db02a60d4bb498fc69dc82a9990dd62ef4a7099e6018d7132097dbc45a1a6a0a147b5000af8ab69fd59eb0d4f5762bff57c9c043851246eb5ae9874104ff5b89b73a23af4821f0408663b56f0c622b6220ac14a323eda86f8224ba69ed474df8287db198fd0534259684a05b5328eed970649d09c62aa5f790552285b418a7dd9cf20120cfedf1cb011a6e0a147c7379531b2aee82e4ca06d4175d13b9cbeafd491246eb5ae987410449b4c834634c6893da4ab09f54f4167388ff229d4002e92665a625e30b07feca3aa907e1234e5fa032e8f1cd277caf3d392513ac8a40e288a9da45bb206ed02c18a687ab3b20d58cd3befeffffffff011a6e0a147e01c7c1a29584e6e54c2ce44313461fa84092fd1246eb5ae9874104ce1721ee587aabba6a3fecc0c5209e531399dd939b23b86142de2116ebe38d10c4e2e1abd0665e514d0d2881f966b11f466f2eb714573582adcc87e2b83395bb18b2d8980320a3e9ebc6ffffffffff011a690a147e8024132d07e3e69c9bc2012dffe300b9c5807d1246eb5ae9874104ea262816cc0e5ef341aaadd1a295ec6fc65afc46921baa86aface3bfc11df179ba5825b143913e43438952f954c3a34a9d6bc8633ebd67d25d498f3bf472f35618add5f301208a95c5d1011a690a147fcd58c2d53d980b247f1612fdba93e9a76193e61246eb5ae987410479efe8c50b1f9923f48a467ecac0a64c2d6bcaa9ae67e135df84cac5aed5321f9cbb29c115f26dc84f2ef0e5fea29615848c79d690cb205cc10d688324ae8bce18d4b6cf0120e7a8eeb6021a690a1485517022e380408b698ea0ea379d2b69f907c1991246eb5ae987410469d59b49b6424746b9df25d0ef18305220b08800160ec0db793207ec9239700388990f0fc291316d00ebf9c1db7e78522b5e83ed26407ca815a47e76d65453b118ebf6a90120c1cf8193011a6d0a148bbf92f4da9be0478464a077f582abd7b6df193c1246eb5ae9874104ee62945cef0b885c98781802dfdaab67e7104cc3010fa73bf179a5dfcea50aec410c6e07160576daf0ba5ce8885e78de575933b55b36eb23121ddf8a7831fb3818aad30320a59ce486ffffffffff011a6e0a148cb120478e9503760656c1fcac9c1539158bdb551246eb5ae987410466d071600a26ff3c046afb7f556ec840b39f5bf1a27660a5f739f48970807e80b1d4125473ffd52eb494fd07255777ce19865590837da46edaa50f77d447120418b1b68a0120a6e5cbf6ffffffffff011a690a148e9700392f9246a6c5b32ee3ecef586f156ed6831246eb5ae987410480b48e24338369cd3c10913d26fdbcf57b6133291a28c2392b36b38dbd0b37c44e077f4551efce25ef13f138b899e4c3bfedc6ea43d52b893546db45b971e9f018edb296062086d78383031a6d0a1490b11143a0cb64e067402307bc7f2276dcec82501246eb5ae9874104050e946ae40dcb277af26c22338f89b7e5912a435f45ee63293367e977ce26fe437a855204b4de9396dfc7cee6b8d92be26a37235e2afcd9baa0551f27b2ebd918bfc04c20d9878e92ffffffffff011a670a1491935751ba30494c4fd276adcf134ecd66f8eca61246eb5ae98741041dec50455dec8b1e2dde8062e90a1cc1ea69dfeea23415bced071b21f31a4d287d7e3ef7f6703f79fa7e57fc2b929e001a12342a007e6b27d86498abf3e7a03418a4bc0620df9ed6031a670a14951c881cab59ed669915a2b04ea5721600794ec31246eb5ae9874104dc5de4ecc100f12fd467e9674e2894b4061118e210d3bd19ce53feb5e6df24ce1811fc198340d06ce9f275eb5b764b7d864c8818324d161a4ecdcb81b910e5e218d4b95220e7a88c1f1a6d0a14959a4d857b7071c38878beb9dc77051b5fed1dfd1246eb5ae98741041506bd87d2844fe8bb60ca3f7f286ca9991fb17483917668114fcc7d42a701f95e6a83524bbddd7b5cf2010b8ec55b47793d6d179bf547a5504a3ebf0b9cd0ba1893e00220a98b83f5ffffffffff011a680a1498c27cc3f0301b6272049dc3f972e2f5427806291246eb5ae98741044bc95f26db29fd21204871f7011a4606ae8253f879cc1a988b0858e2d95894d4fe2bb18d46cda7859367ffea3344ebdf960b0ac073023635aadcb59f47b0a79c1886bd810120b089ec111a6e0a149c56f33b968f83922bccf6d7689b9c883af9de491246eb5ae987410427ca49d47de88f14492b240602913b155c372d0c8bb77e3e1d9da7c7466cfcd8992c0cc0deb2887abcd88fef8836170110df807508b5e3f90dba2d14b0c65a71188aefa60220b2b0f3acffffffffff011a6e0a14a3bf7e661822fcc4f2129e93096cbb70dce6d3c91246eb5ae9874104c5c59cf8d2be64aead0884283a8653a8b885ad4107f4c426954fa82b0af0a6fc9e0a6b4fee793c0248522d4c2b89fe9d4d6d05a40b71a2fec7dce873ad4ab1e91889b2b70120cec3e4bbffffffffff011a680a14a5a2c0eef6ee3e4b0bf79e0c9378d101d3cbec131246eb5ae98741048a929ea45fc8a4e13c7bb48206b0549cabb55f6c084f494a27c8735f21d1df07ebda79beb3f677bc4b98681fb59efff89ccecacf380074c5c349a55d84bc11af18f7c20c20aade8fd0011a680a14a5d5a7c2ebd2a381f7e958754c0d6a2d469b131b1246eb5ae98741040572f6bac2320d4ea912b99ce6828cd8dd3e0d3471f8102df7b05dd8ad8791a53e00f74b6f89499e5d0c0f8254a33d85947486afe02565430b9345e1c24bc2dd18b19de60120a7c2c8271a6d0a14b0695fe376b48a3f39040ebbb2192e919c6b8aba1246eb5ae98741049b13ee89d1640235fc9438e640b6eb16dd59c30f2e1a56730a6b5af4a05a804766d6d07e2c44daff505b4bb7f63573908f502f0f55bce3134e2c4b64ce4530cd18e5941c20fdc0f1c0ffffffffff011a660a14b5cb4fdb37e9fe8d7b8f473268128dfb4f862f4f1246eb5ae9874104ac3cc74871b745e99c93692c71f1704106b4d24f807a21fa13bd123a91f9ecb4cf4cd740ece9f6c4519b4087f72f4659280e4892636eddb0de58c519de8d052118fc6d20a0b9b11a1a6e0a14b702f1c9154ac9c08da247a8e30ee6f2f3373f411246eb5ae9874104b4e1d56b3429f7756452426be611e595debcb858d59f47d29ec9dd6e4b547dce1539f9b7144420bc309de496b70d6dc5f13345eee85e6b7fb332cd9f364ef12f18fff7b9032083e29eeafdffffffff011a690a14b79fad4ca981472442f53d16365fdf0305ffd8e91246eb5ae987410441e7ecd5e6ddbe76e3e9dc4479e2d7c24fc5e4d80d0ee1a42e1f1dc5021c3b83acc90ebd6dd09a5f2f03c5cfe52f2b6d1f68c56700a66496a1663f71c9b3a63518b08eb08d01209eb0e4711a6e0a14b8bb158b93c94ed35c1970d610d1e2b34e26652c1246eb5ae9874104d6b06c725f5410e4ccbd65906ece180364ebea4902b21232c1fb5892a76be7eec22480397d6bf653e9abe7ac50435ee472b59364fe78b17acb2be2116f92a76f189985a80220a7c3bb93ffffffffff011a680a14b95d435df3f8b2a8d8b9c2b7c8766c9ae6ed8cc91246eb5ae9874104181ff8d843c85b3773504bb7a693378eed4a2137a6a8c75d91c5acb3d97876cc4155d0889d389204774aae71eb2288181252aebb78b52592c4feba35224de204189ce1cc0120d7e0e7331a690a14bc6044f4a1688d8b8596a9f7d4659e09985eebe61246eb5ae987410476ecb34921018cb5359fc16a8e676cf055e5b155a45a51dcb23c29c161432b037ff1bb8b44a190d367202c0b6d64783858e4c3f232cfc75836e81e1f30e8d1b018d1b6f707208ec5cec1011a690a14bdbd4347b082d9d6bdf2da4555a37ce52a2e21201246eb5ae9874104f4efb1dc25cf3653a408e3640a13d11855bc2cd9957976d793a18491d674c99bd410312bf891f4eb87e37cea6372ddd31e60fb0eb255e197a52be71eaef62b671892de911b20cff9df9f031a6e0a14c0ffdb5e938d6de2c5e5ed35ede0e881cdbbbc9a1246eb5ae9874104a011ca716e22b3a5a61daea6ccb6f2ef6be88e17f44b141117fc35b1d728b48bc4350d8f0570f40c5e8fc52fabcedb835521cca6f685d301ae92969e9025805118ecb1fb0320bfc4a2a6fdffffffff011a680a14c35649ae99be820c7b200a0add09b96d7032d2321246eb5ae9874104071930b3d77174fae43dcfbfba3079081c8ae3788cf00e758fc74e19da7cbc651be23673b027ca85570d021789a87d3ac6e04e71140ac4d8c09dd35ddda52b471891f3e50420d1e3fd4e1a6e0a14c6869257205e20c2a43cb31345db534aecb49f6e1246eb5ae9874104e039bb399a4b185f97d3842b01b3fe86e794bbfe39d7110b75dd0727d69eb8114ac573ba9cb1fb34d7b944253dfa9832276902a283ff39605bc27639d7404f8018bc96a70b20d7ebf7f5fdffffffff011a670a14c74d21957b34e4b9bae50e436a2581bd81ed581d1246eb5ae9874104bc50fa9796f3e2dc92ad7d0e094018882fe809463a7bce1f5f0c21a1a6d76354e1c07e2103071e835bc72a69c1d58b87d8b7a3977699f4e6a4191185f5cd8a331888f33c20c6ddd4321a6d0a14cdfc898128dbc380a60895c6e8c0975dc07d07e01246eb5ae987410470b2486dc020603eb122350cd58c54a28837c8c30a6b98e8fcf03217d6881f07e3cb15eed9e3b86bc6c9590f7b242588f3276c74f1e2e2088545eb40e45d108f18f1c830209f81a6b3feffffffff011a670a14d48611f40a37623bbcf9f047b8538177d879bad01246eb5ae9874104690010a73742050da4ffaa1bae9a0b2188bce80d3f29ce43f6223c024e516110ee142d694f2fcc9b025ea48aca9191e015922fd442d8cd17c87ecab1ad3e543418c1e40320adb9ce3b1a6d0a14d56fbe3294ea4d73cca99ff8751ce7bd9b688cd51246eb5ae98741043171932c1a17af7256fe0951d1d8a69f7be98207c0fbbcda87a62d3fb341fc0430ebd33f385759c6283af5698f595ffab12424f59d5be241ffe528def858384718bd970c20fba385b2ffffffffff011a670a14d93622443da1f3e81cde6e2c0e482b4d8084251a1246eb5ae987410444e616b6cd21c31154961495dbb4260080ee5db04ffea1a4bd4e2965f34b4a9f8356ca3952096c49a46f0a5d71e2dd8e42edc193dd4e9da9d390de5665043a7c189de1362097959d3f1a690a14ddb833b9e0e3f2f521480e7bcb3e676e0737047d1246eb5ae987410475324a3391a214edeeb53ea015b54a23c770007b58004a7f0f5e94b445b4e2a2b419c665bd076ee51fe9f1e09212fa19119958f3460325a5869f47a592f176aa18e3e2c647208cbca4a2011a6d0a14ddc6f0e66a442632f6c4fbf9eacf363170ee29161246eb5ae987410459e8054a65b448e0aeb39255fff5de2e9f914bf7bbc7c6524262bb4fc04c9438e7bd9742beaa504af1ac3f09e7ebed986bad07128c3380fe9fd2e95f0ce1d1b5188a880220ecf89dc9feffffffff011a6d0a14de8da1ee512529b6c61fe7c769affc160308dea21246eb5ae98741043fef3dbac0ac22f7261d9f5b71671bdd6ac3b024d7a8a4d63b4fe9a8b3abba68063161f364fc2feedea2dfe1daea59bd2715a9991fbe5c6e7b9b34a46323d13218b3a34920c2e0d7ebfcffffffff011a6d0a14e05ae0e76f582817c9e31d9c1a5c02287a31d6891246eb5ae98741045c242a0228b3956b89132fc9ad810de460285adc17a5ed19f6e9bd2c92b2a53384f0416d336e8fc3924542a6069ed17e1fa532ed93f872a818f65a02f66b7e3218caa45220c7d490a8fdffffffff011a6d0a14e296cf6511ab951e026c620fb0e266db4d6de4a01246eb5ae98741043d33f282f64a03d8ea84908c07bdf1ec81c4c6ccdea46a5562e67e8aef14009c9b13489177964a63de768f2aeb0f885e5e40a9c0e6a816b01267419d6f495cee18d2be442095f1d0d1fdffffffff011a6e0a14e4cd4c302befddf3d544301369ae3ed1481652fd1246eb5ae9874104014f644674239c547b9486e164eefcf818fbcf2085cd12e0d9393162b97d3fc77347a890831df83b4429b06807ec714d1a67f1d5b1d422a3ca7bd493345c0f1818b4f49c0620bdecd5cafdffffffff011a6e0a14e63727cb2b3a8d6e3a2d1df4990f441938b67a341246eb5ae987410439ff7824e759b9ace75ff977d86fb6d54cd9a67ac87d9ed72850b68a1cec7bdbaa3d9ab87881b50f870d5095dece87077f98f417a05333306dc55924b703a370189cc68601209e8cf094feffffffff011a680a14e6aaa7f77dbbcbeff2c9b188381d571b900281691246eb5ae98741044e9a5cf80118a58439fe384c4eca79016f95bea3a8693706a22e992aa3dc95e870bafdbb85a9a1153c595f3f790aca34e270e862077208dda4878f529f887b211882861a20d7e6f2f5021a6e0a14e77bbfd8ed65720f187efdd109e38d75eaca73851246eb5ae9874104053015a485e04c39236b3cf0dd4f0a8d50f4cdca2e806725ba5c732d098a5e156d1bfa6f8ce2189e12dd91378c723dc63a408794410365d181971b52f511bc6818aba6f80c2094b8cf93ffffffffff011a690a14e7e2cb8c81c10ff191a73fe266788c9ce62ec7541246eb5ae98741046ff196614c2398bc7e2c0a95a8be5ee41604e3f5e678afc642cb7f982386433142b7f7320affa049cb2840b431f40b28ce0796c68f21d2198bf2a91a961b692518bce0f42e20d99c8de2031a670a14e87d858ca83ffc1e8372b57b2d4f8aaaf8156f191246eb5ae987410436632af11a092c3bdaf3bf0a7d495494e062b461c04370e3ebead6653f9721db36568f12ee960f4723895769450489b2746f3a9230913fd774d4a4494cc4000f18e7b67a20f2beeb041a670a14ea7755c8fca76e6c1ecba0c678c5694ad8a852921246eb5ae9874104f52b8bd6fbe9561ab7b3d5c3781d6250e88922bceffb6549997598377d13ec71b47a10b3e6834aad847d3b4d0840c0066ba962ce61f8fa76efd5d2596e742ec718835a209a87d9ba021a670a14ef46d5fe753c988606e6f703260d816af53b03eb1246eb5ae9874104f942d6ca3d87de9b0767262db4363758753bdb2dbed83a65b1b731c60a8ecf9be0a9cb70547bae211875f7965df789da6177692f200b403d6fdfde92283a9a9818cdd50a20f4d8a91a1a6d0a14f10ac184c3f8e98793675d4499241aa803c760c61246eb5ae9874104ed21770790bc33725f1f80ec798672426b3fec59224b835ca9e176ddba9038e321c9cad7fff6d346944b25657515f1f1ae409443d37c91de018f7187f4c3aa5618fac51420dc85df92ffffffffff011a690a14f84c74dea96df0ec22e11e7c33996c73fcc2d8221246eb5ae98741040600efda73e1404b0c596e08c78c5ed51631fc173e5f39d21deeddd5712fcd7d6d440c53d211eb48b03063a05b2c0c0eb084053dfcf1c6540def705c8e02845618bf87bf0120dad7bec602") + param := new(scom.SyncGenesisHeaderParam) + param.ChainID = heimdalChainID + param.GenesisHeader = heimdallGenesisHeaderBytes + sink := common.NewZeroCopySink(nil) + param.Serialization(sink) + + tx := &types.Transaction{ + SignedAddr: []common.Address{acct.Address}, + } + + native, err = NewNative(sink.Bytes(), tx, nil) + assert.NilError(t, err) + err = handler.SyncGenesisHeader(native) + if err != nil { + t.Fatal("SyncGenesisHeader fail", err) + } + } + + borHandler := NewBorHandler() + + { + var snap17241854 Snapshot + // block 17241854 + snapBytes, _ := hex.DecodeString("7b226e756d626572223a31373234313835342c2268617368223a22307864353664356365623135343932373430613939383938663061346231656631653863636133653638373862656337623865623864376662393063626162386235222c2276616c696461746f72536574223a7b2276616c696461746f7273223a5b7b224944223a302c227369676e6572223a22307830353562643830316361373132623464646636376462386263323366623663383531306435326239222c22706f776572223a312c22616363756d223a2d33317d2c7b224944223a302c227369676e6572223a22307831636139373139363362646234626132626633333763393036363036373461636666356265623366222c22706f776572223a332c22616363756d223a2d32397d2c7b224944223a302c227369676e6572223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c22706f776572223a312c22616363756d223a2d32397d2c7b224944223a302c227369676e6572223a22307834326565666364613036656164343735636465333733316238656231333865383863643062616333222c22706f776572223a312c22616363756d223a2d33317d2c7b224944223a302c227369676e6572223a22307834336337633134643934313937613330613434646162323762666233656565396530353439366434222c22706f776572223a312c22616363756d223a31397d2c7b224944223a302c227369676e6572223a22307834393233646538373835336539353735316138376561666539353761383861353634333837646163222c22706f776572223a312c22616363756d223a31397d2c7b224944223a302c227369676e6572223a22307834663835366637396635343539326134386338613161316661666131623061336163303533663939222c22706f776572223a312c22616363756d223a31397d2c7b224944223a302c227369676e6572223a22307837623530303061663861623639666435396562306434663537363262666635376339633034333835222c22706f776572223a32302c22616363756d223a307d2c7b224944223a302c227369676e6572223a22307837633733373935333162326165653832653463613036643431373564313362396362656166643439222c22706f776572223a342c22616363756d223a32317d2c7b224944223a302c227369676e6572223a22307837653830323431333264303765336536396339626332303132646666653330306239633538303764222c22706f776572223a312c22616363756d223a31397d2c7b224944223a302c227369676e6572223a22307838353531373032326533383034303862363938656130656133373964326236396639303763313939222c22706f776572223a312c22616363756d223a31397d2c7b224944223a302c227369676e6572223a22307862373032663163393135346163396330386461323437613865333065653666326633333733663431222c22706f776572223a312c22616363756d223a2d31337d2c7b224944223a302c227369676e6572223a22307862373966616434636139383134373234343266353364313633363566646630333035666664386539222c22706f776572223a372c22616363756d223a367d2c7b224944223a302c227369676e6572223a22307862386262313538623933633934656433356331393730643631306431653262333465323636353263222c22706f776572223a312c22616363756d223a31397d2c7b224944223a302c227369676e6572223a22307862633630343466346131363838643862383539366139663764343635396530393938356565626536222c22706f776572223a312c22616363756d223a31397d2c7b224944223a302c227369676e6572223a22307864646238333362396530653366326635323134383065376263623365363736653037333730343764222c22706f776572223a342c22616363756d223a327d2c7b224944223a302c227369676e6572223a22307865376532636238633831633130666631393161373366653236363738386339636536326563373534222c22706f776572223a312c22616363756d223a2d32397d5d2c2270726f706f736572223a7b224944223a302c227369676e6572223a22307831636139373139363362646234626132626633333763393036363036373461636666356265623366222c22706f776572223a332c22616363756d223a2d32397d7d2c22726563656e7473223a7b223137323431373931223a22307837623530303061663861623639666435396562306434663537363262666635376339633034333835222c223137323431373932223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373933223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373934223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373935223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373936223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373937223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373938223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373939223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383030223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383031223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383032223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383033223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383034223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383035223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383036223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383037223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383038223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383039223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383130223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383131223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383132223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383133223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383134223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383135223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383136223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383137223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383138223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383139223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383230223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383231223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383232223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383233223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383234223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383235223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383236223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383237223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383238223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383239223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383330223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383331223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383332223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383333223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383334223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383335223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383336223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383337223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383338223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383339223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383430223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383431223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383432223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383433223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383434223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383435223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383436223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383437223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383438223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383439223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383530223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383531223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383532223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383533223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383534223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839227d7d") + err := json.Unmarshal(snapBytes, &snap17241854) + if err != nil { + t.Fatal("snap17241854 json.Unmarshal fail", err) + } + headBytes, _ := hex.DecodeString("7b22706172656e7448617368223a22307830343164356134633066646364653330343338303733376265616265316666303035396138333637386539636361323034643632313531623833616138323233222c2273686133556e636c6573223a22307831646363346465386465633735643761616238356235363762366363643431616433313234353162393438613734313366306131343266643430643439333437222c226d696e6572223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030222c227374617465526f6f74223a22307835343430666238313038633566326530373265376362643032316666633036303936393930666236346331346234356266376535663361633132356537623137222c227472616e73616374696f6e73526f6f74223a22307839306634306435646161663238663931336632356530653835383239313731333661393032316231303739373939656464333462616336373631643934373739222c227265636569707473526f6f74223a22307836336237666335346232623366666466356631353638633562373165343062313030636332393438333961383730356561353435636334356436333735306330222c226c6f6773426c6f6f6d223a2230783765366461373265353730323164356534326139366564326236633734363837386463613333613961353739303036636261363939396434663838633264643039383931396539383237343961346333353639646231373965303531396665393265393864663063353735663930336336613362383531366462336330303333313936343732383561393333656133383931373335633962393437613363623662646261343732653866663638353333646264373766663865326331336138323534356334336261333238376535306366393837396531323032383162663563646337393163353130363165366637353835613637303730623435333234616334333364663335316462316430323533313765633265326135383836353562643462313362666366376131643933306332343039346364356539373432636432623363326635353337396537363138333436363835626163336232646137646636666534383338316638393031616465616335316133323861363466343134653964636436366533306431303265643339316231373537653930393735653564653937323437393431343737613531376661333038626162623437383739303836386439313466393365623464346339326365663833356136646331313331366266393163323735343965646435653931636334333536346334393033653065222c22646966666963756c7479223a2230783130222c226e756d626572223a22307831303731366665222c226761734c696d6974223a22307831333132643030222c2267617355736564223a22307831333036626362222c2274696d657374616d70223a2230783630666365376338222c22657874726144617461223a2230786437383330313061303338333632366637323838363736663331326533313335326533353835366336393665373537383030303030303030303030303030303064333963626338393363303932636539656132613032333136306164323033346636633336653765376466656463343061663263313835306638656635666235356461366233323734326430323138303831346464366534633333353734336566653333653935353037383836376131353935353031303837336435346162363030222c226d697848617368223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c226e6f6e6365223a22307830303030303030303030303030303030222c2262617365466565506572476173223a6e756c6c2c2268617368223a22307864353664356365623135343932373430613939383938663061346231656631653863636133653638373862656337623865623864376662393063626162386235227d") + var header ethTypes.Header + err = json.Unmarshal(headBytes, &header) + if err != nil { + t.Fatal("header json.Unmarshal fail", err) + } + genesis := HeaderWithOptionalSnap{ + Header: header, + Snapshot: &snap17241854, + } + + borGenesisHeaderBytes, _ := json.Marshal(genesis) + param := new(scom.SyncGenesisHeaderParam) + param.ChainID = borChainID + param.GenesisHeader = borGenesisHeaderBytes + sink := common.NewZeroCopySink(nil) + param.Serialization(sink) + + tx := &types.Transaction{ + SignedAddr: []common.Address{acct.Address}, + } + + native, err = NewNative(sink.Bytes(), tx, native.GetCacheDB()) + assert.NilError(t, err) + err = borHandler.SyncGenesisHeader(native) + if err != nil { + t.Fatal("SyncGenesisHeader fail", err) + } + } + + { + // block 17241855 + headBytes, _ := hex.DecodeString("7b22706172656e7448617368223a22307864353664356365623135343932373430613939383938663061346231656631653863636133653638373862656337623865623864376662393063626162386235222c2273686133556e636c6573223a22307831646363346465386465633735643761616238356235363762366363643431616433313234353162393438613734313366306131343266643430643439333437222c226d696e6572223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030222c227374617465526f6f74223a22307832346338316261393435343565666632633031626632663162333963663935323131616339366636316230323130313933613261396436623831366239383162222c227472616e73616374696f6e73526f6f74223a22307830303131393964343636316264623266383535323134333534353465663838303162623135336236363866666534356662396564633362383232363163323032222c227265636569707473526f6f74223a22307832386530396537313737633732353630353464636433303633623835663963653639626661313237636563303639653032316236616138356631393163653961222c226c6f6773426c6f6f6d223a2230783332326465323638366435303465376636366437313637353839373034313066656538396531636138653464313161396461656235613630613963653466313238316464373333613536393031343933353733353230663961383439333138313539396464663561353831323931366336623565633935323732373530346133353563383330303638613339353861666263663965643166633432663166663164663636616336623266626461353934663834663364316539326431336263323733356335326137623263316133383235396564663831333434346638653535353566323364613939653061623635313833373864636430646664396231613035363831636637393966326531653737353538343139383964636330326361376161353362636466666436636330306335303731346535666365353861343538666264363336303733303833363930323661633065353863336432663764383735366361613438383334323735646439663938363831613839643033373535646439386332343937346535336230643630353931303137386161356239653963646537653433333864643666646564656631393939316336393031316539326630306437376366336130313566663339363830396136326565643530316265363932336165613262633963396565666636393032313465303662313137633465222c22646966666963756c7479223a2230783130222c226e756d626572223a22307831303731366666222c226761734c696d6974223a22307831333132643030222c2267617355736564223a22307831333062373766222c2274696d657374616d70223a2230783630666365376363222c22657874726144617461223a2230786437383330313061303338333632366637323838363736663331326533313335326533353835366336393665373537383030303030303030303030303030303031306164323761393663646266666339306162336238336266363935393131343236613639663565303030303030303030303030303030303030303030303030303030303030303030303030303030343163613937313936336264623462613262663333376339303636303637346163666635626562336630303030303030303030303030303030303030303030303030303030303030303030303030303034346638353666373966353435393261343863386131613166616661316230613361633035336639393030303030303030303030303030303030303030303030303030303030303030303030303030303235393733393138323735633031663530353535643434653932633964396233353363616461643534303030303030303030303030303030303030303030303030303030303030303030303030303030313562313036663439663330363230613037623466626463656262316530386237303439396338353130303030303030303030303030303030303030303030303030303030303030303030303030303031356531663834633766376431396138643664393138616432623566373134613665356431633535323030303030303030303030303030303030303030303030303030303030303030303030303030303137623530303061663861623639666435396562306434663537363262666635376339633034333835303030303030303030303030303030303030303030303030303030303030303030303030303030663763373337393533316232616565383265346361303664343137356431336239636265616664343930303030303030303030303030303030303030303030303030303030303030303030303030303032623739666164346361393831343732343432663533643136333635666466303330356666643865393030303030303030303030303030303030303030303030303030303030303030303030303030303962633630343466346131363838643862383539366139663764343635396530393938356565626536303030303030303030303030303030303030303030303030303030303030303030303030303030316264626434333437623038326439643662646632646134353535613337636535326132653231323030303030303030303030303030303030303030303030303030303030303030303030303030303031646462383333623965306533663266353231343830653762636233653637366530373337303437643030303030303030303030303030303030303030303030303030303030303030303030303030303565346364346333303262656664646633643534343330313336396165336564313438313635326664303030303030303030303030303030303030303030303030303030303030303030303030303030316537376262666438656436353732306631383765666464313039653338643735656163613733383530303030303030303030303030303030303030303030303030303030303030303030303030303031653765326362386338316331306666313931613733666532363637383863396365363265633735343030303030303030303030303030303030303030303030303030303030303030303030303030303262386662373064313036666634636230373236643662373365666535336361656438626230396163353765656665386465313664376433306664396331313535353538666364303461623139663330643961656235663161373733313132623833383531353733306432363034356439333662333637373630333832393838383030222c226d697848617368223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c226e6f6e6365223a22307830303030303030303030303030303030222c2262617365466565506572476173223a6e756c6c2c2268617368223a22307866393834303162623036636436313035306566353835393263306435643036393461383561646632656362326437623666376465633430363535326536353830227d") + var header ethTypes.Header + err = json.Unmarshal(headBytes, &header) + if err != nil { + t.Fatal("header json.Unmarshal fail", err) + } + headerWOP := HeaderWithOptionalProof{Header: header} + n1Bytes, _ := json.Marshal(headerWOP) + + // block 17241856 + headBytes, _ = hex.DecodeString("7b22706172656e7448617368223a22307866393834303162623036636436313035306566353835393263306435643036393461383561646632656362326437623666376465633430363535326536353830222c2273686133556e636c6573223a22307831646363346465386465633735643761616238356235363762366363643431616433313234353162393438613734313366306131343266643430643439333437222c226d696e6572223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030222c227374617465526f6f74223a22307864633162393138663933633531616334323263613264323034336161653865396364396534633461663635333834343335356634666631623738656361616332222c227472616e73616374696f6e73526f6f74223a22307831316166333038313635376166303233303763633466373164626532333439663833343436303463613931376465326463336132383464623832663963363431222c227265636569707473526f6f74223a22307838633233383461326533343365343963643937313066623634656530656135616562323435323537663061326264336631633330613665656130623736313439222c226c6f6773426c6f6f6d223a2230786137363966373133626631303130303364373238643364386535633530633832363432623033353363643163363333306534383363313137643164663362633461633061376465643030343238656264316330323136316430396630363131626566623464323234666664373636303836636231303535643232333630313965666239396135633931363866373831353061323062383339623133383232613164393833353532333731646532653134643336333237663165366339326134336463663035373831303234626330323336646131333738643331383362666435643861656435383139646338653431376131616664656430666433393864383363353937386231363138316332303032343139633139323837363130663430343539373330636239346133393061316335366538326164633334613339616239656139303964656233303261343362613462383836356435316337363532393135326530323063306630353234666435343632613931303961383431623263353334636264373032356631303839313630303039303031663766353331303662363534303431306338666336623562653738353863393636613938356537613634356431393665366433303035343035663066653064383735316431346230323832346131303433633065303730343130326430373132343438333839613862222c22646966666963756c7479223a22307866222c226e756d626572223a22307831303731373030222c226761734c696d6974223a22307831333132643030222c2267617355736564223a22307831333131616166222c2274696d657374616d70223a2230783630666365376432222c22657874726144617461223a2230786437383330313061303338333632366637323838363736663331326533313335326533353835366336393665373537383030303030303030303030303030303038653962333637376533623339323233336335643832323234393466656163656536613766643738353964393839313736396262623330386564333564343037353838333631333634303063653736366261313032326334356433323462306637303733343337363961323938353735333861313838633565383639376533613030222c226d697848617368223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c226e6f6e6365223a22307830303030303030303030303030303030222c2262617365466565506572476173223a6e756c6c2c2268617368223a22307831326266643132376665316566663330376130653630346566306332613335383863323733383535633931333130646238343165313236373362323030623634227d") + err = json.Unmarshal(headBytes, &header) + if err != nil { + t.Fatal("header json.Unmarshal fail", err) + } + headerWOP = HeaderWithOptionalProof{Header: header} + n2Bytes, _ := json.Marshal(headerWOP) + + param := new(scom.SyncBlockHeaderParam) + param.ChainID = borChainID + param.Address = acct.Address + param.Headers = append(param.Headers, n1Bytes, n2Bytes) + sink := common.NewZeroCopySink(nil) + param.Serialization(sink) + tx := &types.Transaction{ + SignedAddr: []common.Address{acct.Address}, + } + + native, err = NewNative(sink.Bytes(), tx, native.GetCacheDB()) + if err != nil { + t.Fatal("NewNative fail", err) + } + skipVerifySpan = true + err = borHandler.SyncBlockHeader(native) + skipVerifySpan = false + if err != nil { + t.Fatal("SyncBlockHeader fail", err) + } + } + + { + // check snapshot for block 17241855 + cheight, err := GetCanonicalHeight(native, borChainID) + if err != nil { + t.Fatal("SyncBlockHeader fail", err) + } + cheader, err := GetCanonicalHeader(native, borChainID, cheight) + if err != nil { + t.Fatal("SyncBlockHeader fail", err) + } + if cheader == nil { + t.Fatal("SyncBlockHeader fail:empty header") + } + headerSnap := cheader.HeaderWithOptionalSnap.Snapshot + if headerSnap == nil { + t.Fatal("SyncBlockHeader fail:empty snap") + } + + var snap17241855 Snapshot + snapBytes, _ := hex.DecodeString("7b226e756d626572223a31373234313835352c2268617368223a22307866393834303162623036636436313035306566353835393263306435643036393461383561646632656362326437623666376465633430363535326536353830222c2276616c696461746f72536574223a7b2276616c696461746f7273223a5b7b224944223a302c227369676e6572223a22307831306164323761393663646266666339306162336238336266363935393131343236613639663565222c22706f776572223a342c22616363756d223a2d33327d2c7b224944223a302c227369676e6572223a22307831636139373139363362646234626132626633333763393036363036373461636666356265623366222c22706f776572223a342c22616363756d223a367d2c7b224944223a302c227369676e6572223a22307834663835366637396635343539326134386338613161316661666131623061336163303533663939222c22706f776572223a322c22616363756d223a35327d2c7b224944223a302c227369676e6572223a22307835393733393138323735633031663530353535643434653932633964396233353363616461643534222c22706f776572223a312c22616363756d223a2d33357d2c7b224944223a302c227369676e6572223a22307835623130366634396633303632306130376234666264636562623165303862373034393963383531222c22706f776572223a312c22616363756d223a2d33357d2c7b224944223a302c227369676e6572223a22307835653166383463376637643139613864366439313861643262356637313461366535643163353532222c22706f776572223a312c22616363756d223a2d33357d2c7b224944223a302c227369676e6572223a22307837623530303061663861623639666435396562306434663537363262666635376339633034333835222c22706f776572223a31352c22616363756d223a34367d2c7b224944223a302c227369676e6572223a22307837633733373935333162326165653832653463613036643431373564313362396362656166643439222c22706f776572223a322c22616363756d223a347d2c7b224944223a302c227369676e6572223a22307862373966616434636139383134373234343266353364313633363566646630333035666664386539222c22706f776572223a392c22616363756d223a34367d2c7b224944223a302c227369676e6572223a22307862633630343466346131363838643862383539366139663764343635396530393938356565626536222c22706f776572223a312c22616363756d223a35317d2c7b224944223a302c227369676e6572223a22307862646264343334376230383264396436626466326461343535356133376365353261326532313230222c22706f776572223a312c22616363756d223a2d33357d2c7b224944223a302c227369676e6572223a22307864646238333362396530653366326635323134383065376263623365363736653037333730343764222c22706f776572223a352c22616363756d223a33387d2c7b224944223a302c227369676e6572223a22307865346364346333303262656664646633643534343330313336396165336564313438313635326664222c22706f776572223a312c22616363756d223a2d33357d2c7b224944223a302c227369676e6572223a22307865373762626664386564363537323066313837656664643130396533386437356561636137333835222c22706f776572223a312c22616363756d223a2d33357d2c7b224944223a302c227369676e6572223a22307865376532636238633831633130666631393161373366653236363738386339636536326563373534222c22706f776572223a322c22616363756d223a347d5d2c2270726f706f736572223a7b224944223a302c227369676e6572223a22307837633733373935333162326165653832653463613036643431373564313362396362656166643439222c22706f776572223a322c22616363756d223a347d7d2c22726563656e7473223a7b223137323431373932223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373933223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373934223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373935223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373936223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373937223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373938223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431373939223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383030223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383031223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383032223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383033223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383034223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383035223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383036223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383037223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383038223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383039223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383130223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383131223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383132223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383133223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383134223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383135223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383136223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383137223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383138223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383139223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383230223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383231223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383232223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383233223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383234223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383235223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383236223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383237223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383238223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383239223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383330223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383331223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383332223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383333223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383334223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383335223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383336223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383337223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383338223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383339223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383430223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383431223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383432223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383433223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383434223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383435223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383436223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383437223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383438223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383439223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383530223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383531223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383532223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383533223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383534223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839222c223137323431383535223a22307834316435623365326563353335383362633036303164666234663261313161333932303439343839227d7d") + err = json.Unmarshal(snapBytes, &snap17241855) + if err != nil { + t.Fatal("snap17241855 json.Unmarshal fail", err) + } + if !headerSnap.equal(&snap17241855) { + t.Fatal("SyncBlockHeader fail:snap not expected") + } + } +}