Merge #16551: test: Test that low difficulty chain fork is rejected

Backport notice:
 - data have real blocks from testnet
 - due to big gap in blocks before checkpoints (half-year) for sack of this test is added one more checkpoint, otherwise blocks are not accepted due to non-mockable time for other chains except regtest
 - data for 2 blocks in split chain are generated locally for testnet
--------------
333317ce6b67aa92f7363d48cd750712190b4b6b test: Test that low difficulty chain fork is rejected (MarcoFalke)
fa31dc1bf4ee471c4641eef8de02702ba0619ae7 test: Pass down correct chain name in tests (MarcoFalke)

Pull request description:

  To prevent OOM, Bitcoin Core will reject chain forks at low difficulty by default. This is the only use-case of checkpoints, so add a test for it to make sure the feature works as expected. If it didn't work, checkpoints would have no use-case and we might as well remove them

ACKs for top commit:
  Sjors:
    Thanks for adding the node 1 example. Code review ACK 333317c

Tree-SHA512: 90dffa540d0904f3cffb61d2382b1a26f84fe9560b7013e4461546383add31a8757b350616a6d43217c59ef7b8b2a1b62bb3bab582c679cbb2c660a782ce7be1
This commit is contained in:
MarcoFalke 2019-09-12 13:28:37 +03:00 committed by Konstantin Akimov
parent b193c63fed
commit eba325d7a2
No known key found for this signature in database
GPG Key ID: 2176C4A5D01EA524
6 changed files with 361 additions and 11 deletions

View File

@ -496,6 +496,7 @@ public:
checkpointData = { checkpointData = {
{ {
{255, uint256S("0x0000080b600e06f4c07880673f027210f9314575f5f875fafe51971e268b886a")},
{261, uint256S("0x00000c26026d0815a7e2ce4fa270775f61403c040647ff2c3091f99e894a4618")}, {261, uint256S("0x00000c26026d0815a7e2ce4fa270775f61403c040647ff2c3091f99e894a4618")},
{1999, uint256S("0x00000052e538d27fa53693efe6fb6892a0c1d26c0235f599171c48a3cce553b1")}, {1999, uint256S("0x00000052e538d27fa53693efe6fb6892a0c1d26c0235f599171c48a3cce553b1")},
{2999, uint256S("0x0000024bc3f4f4cb30d29827c13d921ad77d2c6072e586c7f60d83c2722cdcc5")}, {2999, uint256S("0x0000024bc3f4f4cb30d29827c13d921ad77d2c6072e586c7f60d83c2722cdcc5")},

View File

@ -0,0 +1,258 @@
fork:000000202cbcf83b62913d56f605c0e581a48872839428c92e5eb76cd7ad94bcaf0b0000c41f893a0d296b3b17730b42beb432aedc62473d0e6839910209d7f21af31a9bb9968054ffff0f1efd6b0e00
fork:000000201ed4bb12db90cfb7c68051d82f922b86b24c6a247de6168678c9a489ef020000e5968c16ea68f5f8d6ce1f1a987a7484986710c7cae2ac81ca1b5552f059aeceba968054f0ff0f1ef38f0c00
010000000000000000000000000000000000000000000000000000000000000000000000c762a6567f3cc092f0684bb62b7e00a84890b990f07cc71a6bb58d64b98e02e0dee1e352f0ff0f1ec3c927e6
020000002cbcf83b62913d56f605c0e581a48872839428c92e5eb76cd7ad94bcaf0b00007f11dcce14075520e8f74cc4ddf092b4e26ebd23b8d8665a1ae5bfc41b58fdb4c3a95e53ffff0f1ef37a0000
02000000c108f2910109954fcdec2f962f1a9094be266cb6aeaae37b345e63247d0400004d29e4f9b2e05a9ac97dd5ae4128b3c0104bdc95aabaa566cc8eeb682e336d0dc4a95e53f0ff0f1e7b190000
02000000c2cc6fa3fe4d9fb73476bc3cf02248aa762af4960399232dbab4fa64620c000058968247522cc488db01996de610d6f3b8c348e748198dc528a305941211c71cc6a95e53f0ff0f1ecacf0000
0200000011d8f461af04ac482c58e77386b1c1c12febbabb17bc76e4cb5a945c7d050000e2b34a4d7df928cd8788c0265ec0fa7dba0746c625e3b1ccf68b3057141b6b7ecea95e53f0ff0f1e87f20200
02000000426b38cf7bd078c9dba7d212bb3d107c4330c0ab82e2cdcdf48bd58b25020000162f3c2edcdb953ef93607bca655c507023479b2f30f9e7a84dce888b7f3f44cd0a95e53f0ff0f1e8fa00000
02000000fc438ab1e8a234d53ee7795b9bb715a3374431e273c1c448917f0006140b00004c4c0fc8012dcc980cac49acfa2f32040d114d6230b7577127a5c073135ec299d3a95e53f0ff0f1e57f30000
02000000445a5b9d4db990c9c2262d971139072a507cee7648320d55ec314bde930d0000f3b36042e4646c82de642ab6be2fd7d3723960f0693ffee473508edc73c49f76d9a95e53f0ff0f1e0bf30100
020000003d855028e9700d5d18566237c3037111ef1c545e96dc98629ded0db5540100009e66786e23f6e774e3763f6e7212205eff14e744789127bb36295d6732e74382dca95e53f0ff0f1e93f20000
0200000041a5d86d40fe5cc23e56afdded2e6c73402ca5c0dba41f06483ea3539e080000ee8409f147c6cc26edb0bb5d8281f7d9795e3a150d9abe9eba216470d6863724e2a95e53f0ff0f1e8bf40100
020000008529338d17c21274818dc44ede4014d88c9828ba0dd03e5e50b1b0a2980e000031fa1b05e6e76c3ae2e78e38248d9b00b6282d4464c22e7399921d445f3858b1e3a95e53f0ff0f1e9b5b0000
02000000780924780da4713999a453d916495162872bce7d38dc6e75b4ca248112010000d5d581a5006b06a1dffe9f32ab258ecd3539f3904f550813210fa96cdf6c961fe7a95e53f0ff0f1e18e50000
0200000002d0242c85c6ed668f663d8fdc7237edbaeb332eb045a1859c94de30e40c00001d4c82d75a5eade08ce99e5a4eee3f7d0c66f906374c74d89cba5f3b40603366f5a95e53f0ff0f1e2bc40400
0200000031b34bdcaa80cec1e81ff19930074a5a2e90d69012e4609270dfc9a0c30a00004f8f43f9998c0be360cfe401b6ff22e13a130a6fbbdf5923842b71e6a322edc2f5a95e53f0ff0f1e85200000
0200000001c5974ba8e17829cbc3c2877b70feee93ef4c1f6c702d5333e7346b520b00001bcf182d4605f116989efca26ac858a76d9bff678fd091a3be6b98d431e29489f8a95e53f0ff0f1ef3ec0000
02000000a8237bacf197066b754015a996e6081afc372740045e218a496369cc99070000d995c55abacd1a0df9780e9519381d2b63ed5abab7a855df3045cb55dd787af5f9a95e53f0ff0f1e90460000
020000004fc04469b20f772a9f34bd8e730a7337d7c28ddd2516493b9c8e70cc700100006de092da17b552a7eaab881d091554567a7d50c7b0d280ff164f0a580aa994542c516153ffff0f1ed3bb1700
020000002be29d2220a7b073f071fde0a4178fc822a0df135ae101c72827e26aab000000841a43b8cf82119d353a31ffe4a65767dbc99ca97c2095126d04473fa0f4030c0f3ec953ffff0f1e2fc21600
02000000d024f0078eb86f34674ba8061c5b6f4adb753387f37e4a6dc4ddefdf4105000090197e2f2f8cf35ad2d028e8e752db599222d003808d034fddb7c865b1d16a2d213ec953f0ff0f1e65be0e00
02000000d893cb8dafa7ac7047e6d4172b9bbe127ec96384358cbfe793dcd875d2000000f722d5168f23450f91afac88e75fc1ce6f3a1a1b91c0bfe5eb24c4f4042355e33e3ec953f0ff0f1ec05b1900
020000008a7cb19c4bdbe30b5980ccf43ced213fab8c95d4a6e3a22c81389b763a07000034b9f8fc1ef819ee60ac3bead38e64cc5c72a27dd508757e0ea8fb5f12010edd4d3ec953f0ff0f1e2da40c00
0200000053b1e69ec3b8ce3cb5d6aad4600d893f266ab764781c1615ead56ba4160800007e4641e1c8c72e090e3d839ab3ebfe11265333a8871ab9b6c0f8819c74d54728513ec953f0ff0f1ea7c50000
02000000dcad364557b8582f61f22df266850d00e884e6c2b7d5e32bb3bc99f976090000ee1eaf50f3e4aacaf8526b3a51d575040cd1f28ff61d39345c34192498b2d7785c3ec953f0ff0f1e5d5b0900
020000000d5d11269b791a2ddaadad4827c2c037163b63d597910bde3df2006e4f0a0000b4d9c6f54d4b509c4c2e3d61f7330d58d8f2bfe1c444d13da14dc94ba8f98abc6f3ec953f0ff0f1e5e071000
02000000ef607e4d01cbffe571e058e32698be01f9b259c399b467153bac604dd00a00003f9401369b261c5a1684ea8012635802c8bb6f246961b07377963bf47349bf3c873ec953f0ff0f1e1c131500
0200000061f6e5d25232bb4ffc9794a65ac67009b8f88c7cc38aa2ef30a566e6f10d0000dca66a6906e2c09dc91aa5ff29fed65e140eb381e4154da42d881d3b89c850408e3ec953f0ff0f1e55610500
020000007ad835393c079dba2298672267d0a1ea57134c57fbf75086b81de242710600002caf899d0b99dd054faa66e93501dd3e6d1e44c969f7c8994a58b312ff027dd6913ec953f0ff0f1e1d440200
02000000d160799a385be1c968328aa2f8c488c8db0b5a908ddd37171102a3a85300000013440ec308e8b69db21a9960e6d3d14b56d7c8660c0be7f6d49908d7004ee5409e3ec953f0ff0f1e094b0300
02000000999b7ed6bdf5aa964d461c26c21a51a62a7b2954ddf62de03982a9fc2201000060113ce6c394fb155b3c7ef653a9329c2b1d4b5ab16181a96fe554c32318a1adaa3ec953f0ff0f1e0fd80900
02000000aaf6cda39eeda63fb9f47d03a55257d1b46e253530bb12852f249ab52d0a000014fc57176256888ae97a1ae5325a46544f745819a1f785beeb0a59fe5b9ff6d6ad3ec953f0ff0f1e542f0200
02000000886dca1e1d85999f028299d84faf557aa5e4d033c8a0de508e337b96020d00003b1576afdfae95f791af01ef8c44f96ba6afe9b4cff8dc6acc795666720214ccb13ec953f0ff0f1ed5d70000
020000008fc2a4ea645b8f0bf49281f171aa4f5bf2c596fd8edb648671355e4f55080000a287eeebb4624e5a19a22b5a11cfaa24a4c4cd089a9555625d08cd585c513e92c03ec953f0ff0f1e7e900300
02000000ab1f3ff7709decd075d1f37d4e95c8d50dc4a151e0e551d675483726630100003fc82b967a8a9bfbc2d2ec8c4a49f45005759a23267298929cba005b065805b0c73ec953f0ff0f1ecd570500
02000000a422296ed4d35d429c09f675998c8a2c20812db130faf113b340aeba1f0d00005326fbc769c7067bf52430e8ca0089c0e6fa437c1229c567f98b1a78e444d1c3cf3ec953f0ff0f1e052e0700
0200000039a1a433827b67e40c1b8aa780ab094d148128dbfbb5bff80dc6c15a6d0d00004835e3d567a5312ecb6cfcfb853a581bfab61a4369a82b2dd39fa85329671b91d53ec953f0ff0f1ec0580500
02000000751192ac5d41d7414f2b024204f484b6494d07e6c4148c8901488f78160f0000478c0b03bfe1e2685a255902fa6207331ea74ce6efdcda4bf58a615405ebbb9ae43ec953f0ff0f1eac6c0300
020000008c168dc008c76dd242b662d751a8b43de32ec41c54a11b8984bd7f1550090000de4233697696679f76afd49a20af6bf74d9f2a950be5281108d91528c13e249ae53ec953f0ff0f1e98a40000
020000008f48755f2778402a7857f5ed970a14a731e1471a150a256cb97e4dfe9607000024c930e500c78cefa0b37d2506f120e68e5a496678c9220c115a2e03dc66e3aa0c3fc953f0ff0f1e74ea2000
0200000067ac3acd7d1c0d00948238c14d4a497e6353fe19c37e32a72398d1f3170d0000882e59d72fea00f0563f3c80411138d8633a80d5bcc67041c8c2dba02a41c769203fc953f0ff0f1e2daa0000
02000000979da9e4ea4fcfb6967502b66f9d89410c8d3b2178be8f3c09aa4b23f803000082d641514dacfce1bac3c9bbbc3358a8faaa89dc1d7a5b205b8022cc78f030f3243fc953f0ff0f1e5ea50100
02000000a08556b1aef5758ec1bb3ccc690b0d2e3bad913c1941e9c221413c4afc0300004b9956f8e9d38b48082f325a9222bfa97784ca5a248d46de7b7c40e1fde21111263fc953f0ff0f1e6bc80000
02000000b9b76c2b82dd415c4434efc93e4081c070f4711566f6ce5fef45beeab10f00003d1cd18a0042ae85d1dea63ca5c1550e49d55b5ef77a639db20060fa82f4e007313fc953f0ff0f1e5d430400
02000000bade9bbe1d805ea00fed36a051ba24e748065ff745e009b5cbde5316fd040000fe2087d0accc4a2f5282e34e0d3695dae3d440ec4fb87954b8cb988050790ac9323fc953f0ff0f1eb89c0000
02000000183c92e0c21e6eab0da773f6d5d9371019aed51bc9d520882474a047eb0f0000c756fd8aba9e4000320636d4a66618ada15ecc00af5716195398632770a410eb373fc953f0ff0f1e4bf10100
02000000fd50b6bc05839a891ae063afe23486c3c3e0f9986cf973ffb58231d2620b00009f482443cf1339621cbf9d94d0a5e8dd69312812b160d27fcd46a0d71573b4d04d3fc953f0ff0f1eb38c0800
0200000028358ee185479ae0488211d394be0a44ee929a3369be889c3043e2317c060000ff2540ab637a9327e3defab5eb68a005a206a9f3a543081e062b0768af2bce6d503fc953f0ff0f1ec2460100
02000000baa600ea9bd552ea56686a6cb0362e2f4766a49d6b67cf91847414ff570d0000d15140ac63af921c21d1001b5018127ccdc8c8473dd8dbf76a9ed2aebc38c39d533fc953f0ff0f1e47330100
02000000e06abb1efb3553e7de64517363008e38a6eb16373b9e00f97ddbf3b64107000097d03465f7804dfbaecf3a5c9d8fe812068ebba34c8dae5553cba03dd97fc059563fc953f0ff0f1e23f50000
020000009d8aba465508848988491bb13a72093a84a47533cc50807010bd5e2ef7010000b86ce8d74370ecb66b12c776e822f6b3c39d17c85ca5cfb308702e2a06b442d1583fc953f0ff0f1ec4eb0000
020000003c1d1daf5d63ca78a757de2e606a371cdc50e352bf99e8333730c2832c05000025fc2a12dc7e0ed93c7ff14b7301bdddc084a4aff26e268c66595373286e61ef5f3fc953f0ff0f1e2b2c0200
02000000f5f833d8987bd61c4d53e16524c5f9ecce64c6460cd3d3d66bb676b30a0700004ae3bb938af27b0df0cd646eab9d31c9d44b3ffbcb23ea9a178563d508e7b44b5f3fc953f0ff0f1e18290000
02000000f640b79037909316ce772ef4549f49cd2f124d7eec3871acf9fca2c61d0a0000d7aac1b3e8d5d5ca0d2ec56179d60c57dcfe9cffe91577365fa2e8d547d2d876603fc953f0ff0f1ea96c0000
0200000085ab1465557c78ad4e3a0602934e3ddf6ece9039628263a9968a9fd4c60200005386fe9036b75b636da86cda7f1e37687babd11b54fc5886e5e9a7b40cf323d3613fc953f0ff0f1e7e620000
02000000582299edbe8d8587e9082b25b62dddfc2bc593970a6720740f86aa6d210600009dbda4ef2031e56a6c6791699b8ae72a22c682a1b6cd875fd11eded350cf97ad623fc953f0ff0f1e1d8a0000
02000000fb0aae5863e5c0fb04a1c3855b0ccb35b2e3e871cf0b7cba75ee0b939f0d0000c55acdb755ea5bce4d3242f95cd5bbd6c9213673d5ff1edf548c47cb4675e302653fc953f0ff0f1ece0c0100
020000006d0c569be90a5a4a20e5e32212ea74328681ef51d3ef7689e93974aba7030000920a34627398af1a87253f95162810809e96c70943b82d76a275b0acb7c8b2576a3fc953f0ff0f1e84f20100
02000000638d3ae96fc86234bf34c4141e290284071274d4b225c779796b278fd20b000032960aa07731619bacfc3a8dc06e2eaf05e8ba9b857457707538d10e3a4324466d3fc953f0ff0f1e82450100
020000008d08605cfcd1bcd4c193e967652242c9bb1720a7685aa200471ef91dec0c0000bc954acfd83238d1065c8315eedd8fe70c4a953aa9f96f6f43dfd308a72db45e6f3fc953f0ff0f1edace0000
02000000cfb07b5231f34861dc9de2df33fdbc0a39e56abcc02a24b5aa74c2ad690d0000c1dae3cd2e0f14a4be19a7749b223da5ffb5317fdb0b9cbc263477d58254ab0e6f3fc953f0ff0f1e97130000
02000000efb0f0dddb9d868248aa83ec305a1c1f21d200a6bf4c8c02e42008e3cd000000991a494c391feea024f25fa16a5b3d878f214f2ad4955352f31f1ff7dfb5d9c8723fc953f0ff0f1ebb070100
020000004406cab2d6ef7bfbe4f0677381c54b51297fb874026242ca33442e14c3010000fd0878a17a3c769919f7b9625fef95c7f1440d556fac039aa187f479b557eaab7b3fc953f0ff0f1eeda30300
02000000f4173af11e9cb5a6374ed0bf188a5a1c14199df72e79f3b7455102d3b3060000d3e4ba3a853912890f412ff70401066774d9483cc2305eb888a98b7388b6fa10893fc953f0ff0f1e87e30500
0200000031933470f5bf341d3a7788688ce6f74850375dd2cbf72435ad370b2ec80a00001911a107d5276b1b4d13d7740c7ed730b3d06b07890677c54e2b91182e232449943fc953f0ff0f1e382a0400
0200000024561e70d58b0da4a4f11cfe32ef7cea55bb5395e119ab9f839d2f06360400006ab47c0a97cdbbe1ea92fce295224d03c335704489d05fcffc918ed4e786eb57953fc953f0ff0f1eedcb0000
02000000554fc65a1decd2dfa5cc21db3e81386dce771de4e09ef8fadbde9aed0d06000011313c10f332e831d4a584771229c5329fa234e8b087b455bbc60edad920f680983fc953f0ff0f1e18320100
020000000e74b389e8c53aa5ed38986ef8b80110c654a12291dd133c0e65d237570c000027cf13b726b250bc99d82d4ba1ae50eb694045f7696c7b14e90203adcab2174b9b3fc953f0ff0f1e95380100
0200000042f14a69c90029c93648c2d1e6cd94b3b0c369181b6387e50103b97fa2030000ecc34c4341840ea46d0927d2cd23502b370f625e4390402ec12ce884c258c4299c3fc953f0ff0f1edd760000
020000000552aa410c547e9630b69e93c0e8497745ac888cb48f19bec3815c9baf0c00004f1fa34c185e6273a4dd0d62166a6f449a8c536dad0f938f5df3ee63bcf0d9329e3fc953f0ff0f1e79a00000
02000000ec0f9300594b51370901fb7ced790fce35934cbf3248c1c54faa47b84007000082404232757b8e852845733935660435712aef11215851172637a04183166f18a73fc953f0ff0f1e77ac0300
02000000b2b5860a164376b4f677c3a030ad7bed89216b7492eaaeee018ae436bc0500005c30c486381c38f28d718f9b3953403b22573b4d9186ebfec2e592d3cedd950fac3fc953f0ff0f1e51060200
02000000f65bd308c9555eadc2d78d9abca2388ec1221fafe4960e87aa042d722e090000ef3a66be90272ff5d7e55917c3cd2e5b2c244c664bff18713f484ba264836d2baf3fc953f0ff0f1eef320100
0200000013d50709847a51318e1bd54e29da0f87198fbc7127a8cbb3f5e62f02010400005a0c9fda80a183fb315e9ff5689e326020f3700accbe4adcbe7150d21888c562b13fc953f0ff0f1eaddb0000
0200000098b97b04f24b3bd88532e9a682cb908d787c61c36f7277a337141a6dd60b00000583d381152bf525c1a080ef70a4f82b642e153653b594f126f0df77af00eabccb3fc953f0ff0f1ec78e0a00
02000000ce1eaa174331d90b593cc3489e324c6d3fa86de38bdd7958c156413caa0000002f52aad0e4890e664b5d7ef67207a7e596949c1be1091ce92d24df54e5eb1bf7cc3fc953f0ff0f1e96870000
02000000e117470ba7cf20ff4844f0ebcaeb89dfb4fe4eb82e71cc845771affc5d0e00001a4ce551d3ca01509f6c55ca5ea1b4dcc268237a6f7523b19268c7759f6eaa3bd73fc953f0ff0f1e8e350400
020000008193373a8a8b590f1897d293d59a110192427987069fcd5d778fdf15040e000049fba9ff6a1ff1fb16ccc05d8e0bcc9b84ae7e1182b1ca6e6ad8b5906291eee4d83fc953f0ff0f1ec42d0000
02000000982188d6b614c67b2128631d2d2d4707c5f6c8ff2d2771dcb3c667eb680d000083e08ce9abdbf550cb6eef202fb562e7c4f35024270017b6111a5587605553e3e83fc953f0ff0f1ee6c40600
02000000b6bcdc1deafb49ef3dc7c4eacf6a7c716757287572d197e89825dbb1eb0800002adaf0eee76b84ebd5b11f743d0ecfc74da5647a14857b1831912ca8c4497f4bf13fc953f0ff0f1eb15f0300
0200000075c0ec250041803727947dcbf5c2a8baa794a778d3d654080c413269900400001a4cc4a98c1b3e11e363eca33efdfbc9eec201e2bb2d0a2b2157eda737442b74f33fc953f0ff0f1e90c60000
020000004a2213f4dcaeaabf0252f1fb8b27927faabb08e7e9ffd6b7b471c868a10700006384bbabec622c3a74285c9896b7656e9f9fd6b59f97bb36e01467ff227d4c83f43fc953f0ff0f1e79670000
02000000603bd71268f37e05d6060765225f86b98c3442f376357341417749662201000011f3056267fb08072319a73279caf93587676f186ef23470d62ed5790a9ea50df53fc953f0ff0f1e025a0000
02000000bdf0d47a03246fb14194d838e8a72be401e9863e8fe0a6080d2638fe47020000ba1ec73fb60549aa7e2f484c4bf3d8101bea29781f01110603c5844faeeba627ff3fc953f0ff0f1e780a0400
0200000099ee6b84156a23d7a4033b6991126d4fc5fea7d73a895873cd38049c59070000222a1f0a66f798a32270cfbe31791aa01232c772ce261d673aa81f71c255dba80440c953f0ff0f1e41a10100
020000000410f03b95a2034f8fd14557fa95e59eee19bf50f3bb95cad996dccf080300009376d91c45f7a5c97ec651870385e23a63c7c5aa83d7f6ac7b46100080efe9e40a40c953f0ff0f1ed3af0200
0200000035b72d2b4c2e0b37db4adbe7bd45e6b3ad658bb7a924d40625de89c7ca0f0000ba149d2ddb60dec918586335a2c21b7049db26c184240b189d9ac7a2d2396fab0a40c953f0ff0f1ec1280000
02000000d3392388bbb446e2ef298d9c0f74179ca10daa3e8782c3fa8e60c914e9050000b17653643c19c1176b979107ff2abe0718a30711796bdcf8f4dc38163b1301050d40c953f0ff0f1e0cfd0000
0200000060277924c9d0e8069fd6c20827bba8ff079b773101d8317370ad6571420a0000185b3756f926c9a38af88c418a90d00a65be0f7fc1ebc161518d2ee45df9d94b1640c953f0ff0f1e0fc10300
020000007be8951e4298fa2f4a0b952352bff3ecae52e8bc6e00713396fb5f21fb0c00004bbad8a63dbe666683e3c528d52179996ef9cae8d7d4c8612cb0b07f156a73a71b40c953f0ff0f1e07070200
02000000fa8be7196acf946610b65c4f8d724274f1eda8e1acc86df8d0bfbabc550d0000e2294ef8ab6b925b4492f083aa7e3d7d67a308d3e2262c1a9d95c935af2a32291e40c953f0ff0f1eff460100
020000003d06a7e550fa1b10e57431338cc98ef1ef6bcd9d632a04311461413cb00d00003361d5deef1504671e95b3329f0b75efe4292f8ba7f71c6292f53132147e90142040c953f0ff0f1e21ee0000
02000000e030d50a6b285809efcdf0af80ea9546e7c82f15a079b1edaee6c9ef4006000023de9c8d64184b1dc8af4fa8aaf065e99ebf85b115af60c945836406b23b1c842340c953f0ff0f1e8fd60000
02000000e721067bc68daee7e58dccdac1cafa73097d8979312b180551c94ca24b0e0000b7478a6b0074c273baf8f724c6916cfdf923895a6b8f812d06465ae15f4823272340c953f0ff0f1e29190000
020000004a85d8f6286b4ba20563c2ddba3ee2caa682990ad7d40f6b2c00e5d31a0f00008fc25239b8675896a9d479cc950e979327e88710dac8285df72cab5fcd833c902e40c953f0ff0f1e31ec0400
020000007b12de9a3642a2126270c6b13f41a45fcc8b565c2d83882a54246275cc020000a925e76a9e6794134369e8b131410bf537e81a425a3739eddd3acd65ab0e32143640c953f0ff0f1ed30e0300
02000000ae0bba557a69554fac25dad8cd92a114d8390dc8f3d23323db3757263d070000e2bc85d4ab12811dfce74d00f1e3be2e9eb052f6ea4f52ff0a52f39f431ce3253940c953f0ff0f1eb6040100
02000000597f9d41a1e200a848a1c030a4f3121a10162e21fa050384361a1efc6001000065fc078e8d0cd24cad18d80c62a40d5478258f9972c360fce3059936b7f2af683e40c953f0ff0f1e254c0200
0200000024bf63694a86ee8a4155955c346d779d715024bddff57c6f57ae447de1010000d4c1af8227aeb3faceb141b8aa1656eb6c7a6ef515943157826add59f270d7104040c953f0ff0f1ead9f0000
020000009ec04b9cc0fabafa9af4498515989d2dd3e7a25d168d5f942d25ae9fe3020000d04f3d065e985e440ef9710f1a856036b6af46b7e92ab139e4861c071be617e54340c953f0ff0f1e9e320100
02000000cde8841a8e637a17b92b424911f61489f57a84d31b82a9c089ef69d196010000d252631d475b72553552528aa6c8c38b3ef156774660916c8e153feb9fe81dad4940c953f0ff0f1e90e80200
020000006697cf58c68539effe81246380cb038b6d16009ef1d43e0f7f23602ba903000046abe4da862fc3c72e50922db98a83a54f464ac638aa877983da35c9e4d53dbe4c40c953f0ff0f1ea4210100
02000000dd96834af0459eb96ff3ce88044eea7c855f2ec45ca1191a22519c7c150700001ba4984115e1c5c88ed04d83c9bb699fa09384d260ce3ef9ba0571b90ffbb9124e40c953f0ff0f1e94a20000
020000002d59914f00eb3ef0f8d3a8f75086ad64ca2b1863a75f50a893ec9d14020f0000ceba1de7595f472cfa24882f0733467987826b4eb6423710f98f56c900df9f0d5140c953f0ff0f1ecf250100
02000000f35a940989989ac5556c824c44b906cca3de469cff556e5c1764194b4e000000eb8ca1d88e259c9803f6ab780e3b51c123deb06593b6bc193f5f7d63535037e15240c953f0ff0f1ec6920000
02000000e7158e163d1f417b8a1685d701c9fa25f2bb468ab7e790e54dd87e645600000038cdb1398fd48bc1b3f4f3116f54e937599d9591b063e93f8f15b95b3c6023516040c953f0ff0f1ef9280500
02000000e5d82061a4301b1809942c5e7becddd66bead94e995f0d0be72147fd950a0000f93ea0cfdca53ce15a2376a00acd1035b6f2eaf77aaf5a2ccb87eb4c4536ebd96040c953f0ff0f1e79430000
0200000066a4245fecc94059104966c672e2a22ad59933bfd4ea1d05a6173358b400000023b98e250d2c9985ac5bcf60d014c9472fab3b291aa7b3b2b47c02a1693084096a40c953f0ff0f1e81e70300
02000000502ab89f76b889b0e84804d6141cb136999c16f4a679b3609aa0af27240d0000409fa1c3fd81ac9209f4367a1f8b116b6a24538573f5dd8a332a2032b2baa9f46b40c953f0ff0f1e13b10000
020000000d30d3bccaccaed4015bd9db06fda28661ef4bda7739024504da39dc5f0800001a20376a5b3b6c18e51c5e12a53f1a8bf117470272fcdeffbaa9d1180b6a7e3e7240c953f0ff0f1ed9000300
020000001c9948cb1e5f975aa032e421e2cf8f50b657c927ef334c8e24ae6b7ac50b00000f2da5209af80bdba4dd7450d4744087ec553d41ee47a6744cb5d5eb1eb488a77b40c953f0ff0f1e09350300
02000000037892cff5581a8611b901abe5f0c52af7b6f8baf839c99d1d21f7b568000000a1c24d70860e805bb83d1d597618eae4aa777d2e5b78762de7b2ea86d85c3c168240c953f0ff0f1ea39b0200
02000000b0007a43de8b3dcf1470b8c6417f6625c46bbcf618fdf6048b20aacdf60c0000c3cf31e400026e0944ec8c4996ff601ad01d4e988880e6fbecf79a34a7975c9b8a40c953f0ff0f1e62c70300
020000001f1b6592d9c7847e71a74f4fbfd84a38997660039c508ab5db849df7a90e0000e5a48dcf80f6d0cf7f6b5ccb9145060e54c8109047886cf5ffebdcd12fcf96ef8d40c953f0ff0f1ecf880100
020000002e5e570576471734ee55224e60b5bbbc6299cc694b0518f7cd0bdbd6cf0c0000624bb2ebb12a877cf7d76b5f2b779653f0c8cb9e8af184e6226316595b890fab9e40c953f0ff0f1eac6e0600
0200000068bbf6c15d4ace3af574fbc66b5ad6d3e117e18dd2f448845fcac092a30b00006af2756d3c280184bd7caa36eae125b345a1b561cbf85b06b5d9902d1777a9789f40c953f0ff0f1ea9760000
0200000054bd69e114b545eec8e3cf190bbe83f2dad52f12285a285c67a8e40a770a000093c94de7c17bc1568bc089b0abd4e4796ef5ca0eaeab91a0ceb65c527a06ab33a340c953f0ff0f1ea1a50100
02000000f9c3d0550f83dea57825a6bebd1645294fb0e6820a84bd45a4493a67ca00000003ab136c453b05e131891de23f5adabd4bab4c2433ddc65ca22a4564fc8a4abda840c953f0ff0f1e6efc0100
02000000cc371f40be0a40d66ef7109f9992f2c11e4f6a50fb213f2582ac8095d10800000f0b076feeefce04c9cdaaa4ed7c10591e8b0dc5b070cd5b3596cc6b81b554fdaa40c953f0ff0f1e9c060100
0200000025d042f28b8d29b3f49ecd20cb0ef8e6aec083ce03bae0aaba710b60d30d0000455dd74ae5c751fb8c6018fe32c5caa822ee3f3b8a64e581fa2ba11014c456a0ae40c953f0ff0f1ecf440100
0200000097e23e7c522797e4327ca454737637b2e1b200b3d7c79ee2674ab3d99003000076f7f532aba75b28d547b8ee4f826ada3d189fbc461c92176b60948b7e11196bb640c953f0ff0f1e4b850300
020000009c014f9622467dc4fca5298287de8a765df0c02b1ad18451f39ede4d99080000a69b3cddfaa0133195e04085ae5b990628104b9d43331c35986727e08581dadcbd40c953f0ff0f1e86250300
02000000b9f9b5ae61e9cb5d8d0f714bf0d2080db1c290c4cf92d3ef26ed7a0f1600000030055cb84ab86cee551a3651e0fa3e4212577c85d70b1b12de5273ecff44b7e2c440c953f0ff0f1ebaae0200
02000000cf9753fe43897e45654ca81b0a327a43461362d51638ed9e97a8086d6f0f000013edab6478d3e70789204ebd975de94cd36fed52061472fe84da24c77fb5ae0dc940c953f0ff0f1e1af10100
02000000f6d049fc8f23758960f22e872503d8506c05dbbac68172defc242873a8030000a8e32ff69b6ead79249713056aeae7c34279092e3c1c3331e52c7ac712f70426ce40c953f0ff0f1e37240100
02000000ca30a3f4853c302771a5e1d4b6b70ed4f3f58971207666aa0e596d83450700002150b6aa2254cd0b8d8b6204d20df2e8a12bc69a79005e0927415a30b1f2da5dcf40c953f0ff0f1ed43c0000
020000005e9687db58f40ef413810be1e788ba7e6865e8e334bd56cbec4de7f8a40800001a1dc48e39b2ee2581af01137abe19ffae28637e42ba716affc846af3c4731a7d840c953f0ff0f1edec30300
02000000d54350c7335c66406a379e01e0f02d9c3f01aba1cb7e502790da3448b3050000fad7692e9ce789f46b4d7a01e476e9d8e4920719cbc47dbe31407b6c2fa3e439de40c953f0ff0f1eb7950200
020000008a8d7d22119ad85360cbd7727f1b353e6de049a1d1b7c13461d165f25b0b0000628f2ebc07bb29cef9e5e5aba854b23456f1a5829b8d5aa6ec6f25847ce28f78e240c953f0ff0f1e94ab0100
020000005d790f0af3699c3e122e9e3d6783993f7a53abce2e4a0797469a5894150800000313aa101d915db30df39cc3d1cb1b863871e8c8d8ff5a3708896e4e5d6dbd62e440c953f0ff0f1ee8d80000
0200000063bde60d5c16060202c167cbcda100c448ccaee4076569ca54b4c3239b0e0000bfecc9c6cf3239e6782185158460728f450fe811716444badfe9b2feb8c198f3e640c953f0ff0f1e59aa0000
020000007e96f7dc141984a06bec9bd5c17c24cc73bd2d817f5567533c592916d80a00000b5559e79d9df8ee8464fb3211994e6ac79e59e8bbd57d6ede944f98ad45aadfea40c953f0ff0f1e1be00100
020000007dcab2ba2ae03b343247745969200d4c0a18780a3a2f4ec94a46b098700c0000f2a05902b15bef95eccfcc0ece5bad5aa77f3f1b1fa976a0265b3e47906fb098ee40c953f0ff0f1e81b60000
020000009f165e0851b0cb18228409654d511e7022c0c3273c8e1640fcb18e7b6f0b00006cd2a6c76d868a8d0bf07e3968ee47eeea18d575657394e2345a397708d3028bf540c953f0ff0f1e20980200
0200000020ac6b5f150904805fce03c26f05c3c1f2f7fc80476275bf5399295c9c090000f4a069fc64a61db03f168f94b5ba6dd1381141ab91a9d12f6fc1882a348477d0ff40c953f0ff0f1e1a3b0400
02000000a9aa77b7b3a63194c6e64227301e93b37491ae52f81737a86d0240ef9f0d000036e3710c890fabe83b09587b6da79af1209d45c60cc653e950f8fcfc1001a8720041c953f0ff0f1e34510000
02000000fdae9e5737565c4ce801b50027c8befbe6a1c535b34f61e0b18d8c86c10e000001036d3f90d9e5498383c07f47bd9e5a835fc26f8a2212357aca5f9ec5d242f30541c953f0ff0f1ec8190100
0200000054949ec154321cbc706f410abe674195a3d3cf3a59d0692cdaa60ec8ab060000ebaf8cefe53abe012baad402b0844bf15ea50121426876447b439291820161b50841c953f0ff0f1e90e40000
02000000e64636e03910886ec864b7c09f8cbf56df29f46ded57f92a5bf219d30c0200002604267131ee8f1db54c233fea24623c59dca6080fd7c616c4ec18a8effe28d11e41c953f0ff0f1e09460900
02000000ecf568bf6e78967728791e06dd5280658116e71709dc80fc5db1e975260a0000a5e5a819dd79b030d3edfa23e0f7f8d88800c252184320cf69aa9cf3a60087172141c953f0ff0f1eb4690100
02000000049f095989aa9c05eac98143fafd404f8f65d66ba8312fbd342c6899a8000000a28c85f0ccd8834423c6d491d450ea7cbf41f6e6192c60b2f94c9b285f576b722441c953f0ff0f1e244d0100
02000000324ad201ba687c00fc83cf97107f7f5e689aaf5a2d5ec9986c7ea49990060000912b7190e25c21f45905fed51396e1b93bffc76806ee6838b2b1d957fa7a51de3441c953f0ff0f1eb6560600
02000000717255ac2f2938cc88767877b2325fe131bc23bffc6f984e051f910b6e0b0000ad67c6723a5c31e11609cb82c4de1159587dcd76e71e16eb3567c9a1033e0ab83441c953f0ff0f1e2c450000
0200000097a3b06961fe71efaf209a9f24b3217f5dd545a2478c6f7a832d669e0f0800004db4a1882d43af8d94134b6f0d279cfeae6a5ef3a2bc54e7b8a90dd85343b1b33a41c953f0ff0f1ea1610200
02000000f5c6957469bf483d67c657a9fa29345876cd64029d8f0e7a637ee312b8090000eb1b05a06f2c275ec469895b05960d6438b32d634cab50223f204d77cd0adcb93c41c953f0ff0f1e02700000
02000000f334c1b81fffbdbf02e8557560429182fe97628f9feaff17d460200878090000adae2b969391d40e8d50a07fc7f846e7a9b39225fe55daf31b85d986f705a39f3f41c953f0ff0f1e69cd0000
020000005a44f2dacf8b78101a6dd9bba9182924fda1b7aab95cc89a083c9ec14f06000070294df6ac9905c50f24733d78a145ceaa0b385856ea6712a0121fd35a7f75e04341c953f0ff0f1e138c0100
020000000a036225b59407c82b2d570690530cc9b9b9ab0fc9b541d5696b557a94090000b5a728e7ae48e686303f87add0cd1b8e967c7573d04113fb5a436916ebee52b35741c953f0ff0f1ef5f10700
0200000090dde4eed5cd7c3db845432a676482e6f2676cd386ef90ddc3ab2ce8bc0e0000d0b46dca126d89493e86ab80e9b8268caa71e02c188abaa6cc47c78bea89aad95941c953f0ff0f1e3bc70000
020000002a0651361c9c6f771d8632217b38462873d00ffa70114fa0a4b83bc64b03000015965aa682db623e6f344f11787ecf42a9b71eebc11e19d0b453b9cc4d25098c5e41c953f0ff0f1e706d0200
020000000f9170921dc1ce614f4d7e446caaea90b12db8e9234dc0fe92de333ead0a0000aac78f9c04acf8df0f27c2423d203fe66a763d0245d046a32d6d3b3e7c4c81756a41c953f0ff0f1e19d80400
0200000023190911213a055be22ebc3b38e390582c4fd5cdd91a6e0680e7ec57b10100000e740d637faef0b856b484d070e03a202669ae9d9e0c4b5447e812edc990521c6c41c953f0ff0f1e69860000
02000000b6f079cfeb94eab117dee4d591a2c52b402ec9d3e04b3ca483ef46b3710c0000050715671d4befee783d65265ab820528a6a9c7a0b49b8912853195b9dca19496c41c953f0ff0f1ee5210000
02000000d3385b93e27bee94e668cadc9b8a71036b3aaf1a86258027245c1e17c70f0000cb480e817a0bed2eb5ddf12381d8eccae9bf3922eaad7ec020bc398f82f7ef6f7241c953f0ff0f1e13650200
02000000187d86bf84d519b6b761d00912d3a18e26e8b7fb6a13c85d3fac2e62ec0500004e58ffdba6396865332a6c160c1fcd6f9107b715125b5ab9fb7a4446cc0260bf7941c953f0ff0f1e3ed60200
020000004b961bcf8d485d8cb04b74d40e6730ca19bb40f4d747f3f93ba2d906370a000058a07dee9d0b57e22b721b18a2e72f2b5d47b10435b7b79a133f3eb595460ea17c41c953f0ff0f1e487d0100
020000008c1c7ab117b5d183ec8a31a51339934a865033ebee3d47134e878d32f80400004ff1f6b2623f08cf724d6a83b878a6f6bf50c6602a6a903b5d45edc0f305705b8841c953f0ff0f1e63de0400
02000000507387dacf2096ed817e5ccfa80ebf8b42bde95a13f7fcf86fa3ad4f070d00007c2bd53cd1b519e1a1a11151da3dd73619f73e4bc3c6f9190e8715da0782c9839041c953f0ff0f1e4a5e0300
02000000338de2c085efe759eaac997d4517058666f7059efbaa1e1c33fbe8455e0000004781c3169f1221dd66d26c9d15ab7346ff522795b7a15f8efd2dbfc2d7e3697b9041c953f0ff0f1e1e190000
02000000b24e6faebbdbf148e2485d5044ba396bcf4bfe068aa4fe6d09199d0db60a0000947c32ced84c1be25daf5ad1766113e6c8fbc77c842a65c6ad01775caccd04369541c953f0ff0f1eccf30100
02000000c780b5209198c05736f707090e89b0ca23ccde18190168aee52245d0d30d00005e0c6c6ec02fc23ccd8e38e6e556645c4621c8d0b05f98f847f0c1edcc92a1c39c41c953f0ff0f1e6ec30200
0200000062eb99808f2f50966c7bf65cbdd6662578fc81781cd230be1156884dc0050000957b11e89e1af053e99865aad2ad813e1f2d63570593cc35a504deff4cd85d06a141c953f0ff0f1e160f0200
0200000092bb8c184684c78839cad41d416a07438395195c04f307dcb68e8517550700002eae4da2f345273775667f528d2bde1ac9cb19429344953512067adc858c0ad4a141c953f0ff0f1e98350000
02000000cc0632e30c65a556e378a3c20d8d9cde8639ff2a6fca3ba815762e3d440b0000d440e01fe86c1c931e0fcc3a2435a633c94677779737cfef1fc3d371f2573f30bd41c953f0ff0f1ea5610e00
0200000083270e52258f243e75e143f0a00ea03af07a03f19473bffed58ab37d9d0d0000d985cbc073b4913d4c27d4d101614a43d02fc951060294f00c7d6ca6e479ef80ca41c953f0ff0f1e8f0d0b00
02000000f1c4ae9959bda91a8209239a5b983d8fdb96f4b6a9003193f9d01aafb40e00002070cbbe145b4c5c5e9de6cbff9c76438fb5de4df1669e1eb2c13ae20a305930d441c953f0ff0f1e4a390200
020000004db2f5f557ab57505e107effcc85d70582ffa3c537a43c4d11cb73ce5c0b00005c13b476bb0f16c70c2a619369d442cf9800b7495c124dfade84ed1569501844e341c953f0ff0f1edfdb0c00
020000001d55f14d72af15ea905cb970d5a1bc326cfc2155481f8f069b6505603e0a00004a8be540bbd42d5724cfdb818ebe71dbde5aa27024a9d6bfe2351a9d37f9e7a0e541c953f0ff0f1e2d8f0100
02000000cbd1500ce3a15550edf6b182daf1c933ee689b9c1f3dfd86b71b4ea3ae03000097aa048d0fb1d4df589492b9316e8d8526fe0c3dd8e4fad0a1f76f0114ddb126ec41c953f0ff0f1eb0040600
0200000078e3943bb812d9e42c5686f5a1046a35318138f48c7ff10fd39d702f85020000a750a710f0e9cf8f48355a62b5bb73013ea05159e3caae6965099f1ebc99dac2f641c953f0ff0f1e77350800
020000006378fa5c3ece857de2d6a81b87bd50aeba943229eeebf21e09ab1700fe0a00007e7bcb2199a9526c14b6e90c21cf16df6abd49603dc07abce0288a3c4750dff3ff41c953f0ff0f1e842a0800
0200000026a741a6190e2ac7cdda30f1096ab67d6b8534417d89cade30e681ee2c050000606c239276b8c04a62fa44ce859f5c9460433a44dd50b7b5ed7bd4cbfda2be710142c953f0ff0f1e15900100
0200000055960dc4a6cc6b8a319260dc812bc75eae0e768170baf9fd3df83a5aed090000716d1c5a135bdf6babd74a30e671224e3c9cfdc77b08188c503430f1e21bf6221442c953f0ff0f1e96ea0f00
02000000b8aafa5a96d52640b20f670d0186eef5aee4e784e788eee6bd849451130b0000dc24246856b7db796b51321cb33bf3571f652c12f40da064acf711f8481caeb01642c953f0ff0f1e39a80000
0200000024a189aa83711efd505d235ca9164616c28e3336685d7bfe438b6fdfc60c0000a12dd0a83ec6b36d2e78d755f5974a3a0efc24c2c274cb4ac52283ed1a64cea35242c953f0ff0f1e869f3100
020000002c87bb6d968338db892a547a5eae090e04bd26641ba3240f8ed857758c04000013377a4e5ce4d911a0c39f892beeea5ef7c377f000676b51e51b7a92d8e7ddfb5542c953f0ff0f1e4fbf0200
020000007b2d290e8d1dc729acb286fd50367eb241ef7004794561b996beccacbd0d000020b04d047781637139eec4383abf1e7cba28f248a4c404470380de47850f83a66142c953f0ff0f1eb5170a00
02000000bacb1529df48c42f6cc7053f2353caf0f23daea9c6f66afbf7404af6e20600002656c0f003794d204c55bcd90a57969dff704a7f00b7f2b9ef80564ee0619ed46242c953f0ff0f1e6d650100
020000001f51c844821f287daa471d00e6195b8d308a1c0036132fbe2367ead4d50800001d4c3c1bf3b5f4f7bf4200e18b4bf98aa7fee3fc3aeb79975279621cf55cada46c42c953f0ff0f1e72160800
0200000027c6449f2de5f4d73c54f7a6aacc98c563134ed9c18578c08718074ca3000000076c369f79cc5dc28fb2266044e21a0c90d45ea4c028bbd0449f47d86a5c3fba6d42c953f0ff0f1eb04b0000
02000000789fe8c7e6fa41304bdeb124d0302e2a2e87766a80282ea6d7b74c4e010100005f49e66cdecb84ec7e84e971c564bd56a604734c286bcc270d19a6aa4ba49916af42c953f0ff0f1e1b133800
02000000ced3bb23d0743a6375d7bd60a28789965d24e806f720e927cedfe42b19070000670c9d454cc2bdf4aa8ccd0cb4684cbc8e0a97e20cfa3194ba18db627433b82fb642c953f0ff0f1ebeb60500
02000000a02c230e8db40512e9a3de4afdb4b95fd62305dfab4e800a654a14e58507000035cf014636b089ad96f6445dccf27645694f09b86ce13317395ab0182a0abe3fe042c953f0ff0f1e75502400
02000000a96647a6114dcc6e68e729f3cc7317fd7063351aead7c7d1501c31fba30a00008dea5362583e7c294ef617a756340287a20a6fc307c76caf06fc2e5a4c064cd0e342c953f0ff0f1eff740200
02000000b32edb9fca803acba7e0770df78e6b38d1fb70b2eaf1cc9ec05ffade40040000ea946d60c1d474b12b956bc6a347cb58b08683ed20f50b9d242ab97573a7d506ff42c953f0ff0f1e69721800
020000004872c7d5cb674129b1c949a61d06a067b0b7a27c18825509dd274d1d750c0000cbed7deafec44931d672a45aeaba1a23fdb0b84335249138f43b07724710e1371543c953f0ff0f1e12e70300
0200000087ba5a4f787f43cb7a68342328a632c355e37e11520c12b133f5d1d4b700000019b32a4c6b393c11199eaf2b429235e2161b72b7cf61b31f67070e49ac3fefd72a43c953f0ff0f1e30441100
0200000030ddfe91ee6ec87b2ac880f59a8f8a6bf623d4b6a0f758cc1fcd58c6a8060000e38371fb1ad82353b94d36d0812e44c38f1a438ba8fef84f972d3a9cd9ac0afb2f43c953f0ff0f1e97480400
02000000ab97ad110b0a71b013ae25ec2a82a7a5abe7530de5cf51ed71cf717b0202000089ce134b1fcf3d88bbe589bd9e5d30e034ae3fe4823e6339c3a211d1e6cb9fb53143c953f0ff0f1ec8650100
02000000acc3823cfc5a1681e180740f3c9eadab3984f8c1b2b33f9872146f729a020000599cb0ea95acbd2ad841ff880ced8069b3375183127da18080555afd681e9c203e43c953f0ff0f1e98720b00
020000003696e3df5021dc7318215acccb516c51eafb0aa65fa5b4f8fecd1f686a050000ed89dea0c37eefc1139e2495aed5b1840795665c3a728328ffd04094eb98dbf94e43c953f0ff0f1edf090d00
020000000b8c7323f69d08dd99db4ecc8e26aaa4651a43712381ae2cf879e7de5d0600000a134eb55d852f77f7d53f921f1b5c6d29a023a4c2b10f3e923368fb4519af6a5443c953f0ff0f1ef14b0500
02000000d243f571c1dc695cf66d33ddcd8a4521f5cb1c441df8c26ebdaf1a09ec0f0000c33b95cc39e7d0c5ff844029197bdb05c731808738a7b35f6fa6e01c641622a25543c953f0ff0f1ed9840000
0200000085367de61c44c654a2601326541c7323b00a5636c7ef652cb6fdc15a760c000018d28342cfec27034cc12f7624c51f16eb67f66ff1e0fbd8fbf1a461205eed3c5b43c953f0ff0f1ea8e60400
02000000f9e189ea4b76c12e67bc3a9367ac299f18a266fbf1a338e2e7a94148fd0300005c7d533c8707c1c6901bb82a373d61c1eaa4afcf9275f284c960364ec90d7439be43c953f0ff0f1e76cd5500
02000000b26ee2eed0acf158f27770002c533438f23651ef26424a30a0e51bcbdb0e00004356707f0ec3b7389bcffa1a42169e5a45d68ff72135991e3e06d925113e4bc9ca43c953f0ff0f1e1d2b0a00
02000000493cef25afaccb5e8ef1d4a16fe8569fe6929175dc4b0dad8e28c0984b0b0000f946093d828b13a6e25f758bee7516d488f1cc57c8bf1b1c35bdfc40972687f4cf43c953f0ff0f1e11f60300
02000000997274ab625d25a4093fe16cd2ca2b738ad949874f44dba40f8c21bed70d000063bcd7c42d6a3414b4e6bbb9e18380dbc146c89f77f33651c159f09fab5b20a2ea43c953f0ff0f1e2dd91700
02000000a1875a78585a458d0b8fbc4c8200faa686ecb9e7807529149c80aa82010f0000cb99e4b2311ed6704e00e221021cc0d10e3dccfab92113e55c8ca2d25ef9bbffeb43c953f0ff0f1e99090000
020000000113b87c5fb78d438f7e8d6f8fca2b52a5656217bc9d752018741206e00600005d9017daa5ba3506469852e0b81d3a0fcaa59cf4044310aba0b2339a2d1ce02ef443c953f0ff0f1e8c250800
0200000063c83037b110158f34003ecf8e731bb688c7266bb2100b14b98517fc1903000020fbd1bf39fd5965aaab79c7b7e99412a9dfccfc6b97f59243b197f8edac8e11f643c953f0ff0f1e8a520100
020000006916120ddda79a25f83acfcee046f36edeb6adc19871fcc996cf2ce3440b0000bbf621f579d9ff111b01c779f850361b43542023ec25ff854f5f2c94988d3855a645c953ffff0f1e86590500
02000000ced1d6661f927c333568412dae96057d731c404b30938d23715cb02ba10f00005e32a653d884a8f70032b26c04af8ad96f23226f892a8b25da6107389c8c681db545c953f0ff0f1e0fa70300
02000000042390bf39d9ed3ed9692d6891eaf149c18df8733b95faa1e4bc3b32230800001e7e7c29555645328b73bcfd4d129862f2aa9c7385246cc959a66744c391e6220e46c953f0ff0f1e9d8e1500
02000000e81e58349aeadd82dafbd475aaf493a0642948c5e3168bfd81b3c2070f0b000071a27802cdeff39c07e0e8f8db7b02d3d7d2f43b6f811cb2faee5fba6c71cbaa5746c953f0ff0f1e75fb1100
02000000cc8a1941977b641478fd2cb5ac25b9c7e5722d335da36956bcee1236ae090000c8a34f97e1622315a44bac5266948c80cc17779b88164c69bfe5f69773da10a16946c953f0ff0f1e4f660400
02000000b41866b5a047bffd49b349a9eb8a8f390ab9e89a5da41ecd9dc604a68f0f0000f5843bff4c7dd182491f63f8c3e634320acff64455dd16f6e2d2d777dfe9cf3cdd46c953f0ff0f1eea4d1c00
02000000c16f3dca3ec5468424c51085ce32ab27bef1c2ae7aafd1d458593563a1030000a33016c9dde23ba05431941cd91e6355d2965fa254dcdbcbd9fd01093f3c33924647c953f0ff0f1edc881900
020000008da3101ef0cd3dcafdb5326d62b03c331e5751a8437ba320e5578efbe1010000ec19d7c63e261272926e3ce6275b7bdf7f25ca4f87751fd43bedd9508e0d6290a347c953f0ff0f1ec6a91600
020000006cdb7179577897f8853827d9bfbe12c677b092b6702ac3deef0b5afe94040000f317a31980a19cd2d439fd1ebde3bd0f1ed87401d6eda769017b56dcf6adc65f8348c953f0ff0f1e2a773600
020000006b8123b223585ddf45eaefc26700af8930fca2be521d04dbdfd746e6db0700002c9ecc63f95a736580a78423d55db591ac1b9ef2aecec52f3d6029a8235a115ea148c953f0ff0f1e665a0700
020000005817462f35d45a16fd5ed190b3e49994c08d487f8b7e3161a5ed393a580c00003bcfcb979963ff4333c9beb496b763e5cfd319b8632b4a66d39b09f958200768f548c953f0ff0f1e12671400
020000006bc49e3c1cb0595bf23a29b2e1a67ba43311ff88ac594d5e1e270653950100001f2cb7c9656b73c5c69f2aca447ec8fc0c71eb108b57ff34c8225e02c96c8c147749c953f0ff0f1e9b961f00
02000000d5ec41516f63763c8d5ec368a39e989e3d0e99993e79e95a8c056e3d79030000c894eb611034b7caaae01340896baace5211880fd969f7d9b22b185f4ae1111f9f49c953f0ff0f1e25bf0900
02000000731e4b42062b8b611b1365b54daf456c8c662bdf867a994f86046776d00a000000f72defe9ea8e76704d68b7cec4b8a015d820a1cb75792a9a8aeb12d6ab5b09c449c953f0ff0f1e49fd0800
02000000ad56a81cab14fb3d471097817d9df2778beb682feb25389c461237d5cd0f0000b1144c8ff279d06f305c870afaa6e9e80ba8d2495d8102a4ad46d82e77662f7b0f4ac953f0ff0f1e68331200
0200000093974b45473621737fc4625f56df3f247079ee813529d2981d9348e09d0d0000bced42b3c5189d633dc6fbca7dbea7ed2d6e6a1f066864bd4ad9e522da67ea17114ac953f0ff0f1e1ba30000
02000000fa375e5d9259716bb09b1383770fdd4297247ce3ca7d48e9915f161dd30000007c78a4178964e73fabfc114652491833ec64b0b001f37278352be837a1a5460a8f4ac953f0ff0f1eca821e00
02000000388a4e8cc530da952b919540e7f88125aa4194c58cfb5beeec39e4ddd50f0000d3ef18103d4d60b3bc9a96ccaf69b73ecea9a084dae1d012cd5e05c671701731a64ac953f0ff0f1e71b40500
02000000dc27fc3ccb45b173b3594ee78ba3b0fe3b7eaa834e75b9c8d38bb2cf60050000848f4fa29b3701cbe0c7937acd1eba209c5f5267eb2ccfd1b0552ec76637b6efb14ac953f0ff0f1e11980200
020000003acd9dfd1019ee4446e1a5e67a4420cc33c224d4723894599b6e17cf3705000042630299d04aaab7da9cbc2899ca4dc65c9ce769bb90ee5f63ab12dedf40340af44ac953f0ff0f1e00971000
020000004fcc761acb9b38f1faeb7435ede025c1b7becb472e08ba6e9465a358f70c000032be1d0e0f82f09f587dc23c3b8b00932d9a651488757a8e6d6793a003bc6806134bc953f0ff0f1e8fad0700
02000000f22d4c84f39aa6a6b858d764886931c5513834db1984776b4c8d9012ec010000f91c7eb48f8d49bd18ada4d7ea89770045f27d7639315b5455c28a62bc8698606c4bc953f0ff0f1e63931500
02000000d33fd09557c295b66954244c198e19bc1338564e5d3349df60ad4651dd0500009509bad4b70985bc1331cf63f8e3fc9664c3f3ccffe24f8c06ef530479925d92ff61c953ffff0f1ec7460500
02000000d5196ab946f6cc9bce5cd547bf46708b8970deb63b0748435e7a8342c70d000051d657213fdefcb6d5a6ea5012c1f3f071c403714d2ce7082ecc619a09f2a37e3a62c953f0ff0f1e71260000
02000000a61e4910e7c8816751fef31be88a4900cfe82f497aed941844dd570aa20c00001f57723fdabdd0932a4bab26777e9b436daed8562cdbf1f89c6e9089d9e4d8643f62c953f0ff0f1e8ff50100
02000000a26f89bd9363e68759398e035af1735cd5e8424dec9fdd7b6e2492799a0f0000782811f81aba1b64abe43ada15bd1260352bafbcd4cc93d00674edc260d361634262c953f0ff0f1efb260100
02000000390f1bf1d7058eae52e74514222f4e03a508bbda1377a64c3bfde1c4b8070000d36b8978321191883d92283a0125465f3cc90f595c31985955f4ece8c38f60b64662c953f0ff0f1e8d850100
020000007231d0eb018c5681a0ced92409431686924cd98768e7808fb9463cf64408000002432a1fb451dfb5b71a97b471760a97df985421749e3864440530de657098e45562c953f0ff0f1eaa090600
020000006e75f2263cb2b11aed68d364dcd7a292f6b97f51caadda2b5610e0be1d070000ed3a6f41c4bae8d1973704b90a22d213963f11e0cda0f669b0c9c4e045a8bdf45662c953f0ff0f1ef0350000
02000000c043725ffa3db86877fe7ce3f2aa1419636465c8f8800769b12152551e0f000016e032bb190e0eed06e7db77d540d5a305d5fb5bcf5000b26df01583ea3166cb5662c953f0ff0f1eae460000
020000008be3b1ba4848ae6d9b19844d69378e3613e4fc3b53062d70add58079420d000089e8780b1815b441ad82ffbc97cfc8ff37d3704f5fc3062bcce574004cd2ede66062c953f0ff0f1ee4d10300
0200000061c130c3f440fe78550a0baacd31d7985d1c2d5b6f2bf7ed58d6ad13c80c0000e6ac10a1d42c4def518a4daa00653fbd329ab63ab49757459b00d2ad3449b57f6262c953f0ff0f1e9dac0000
0200000064766c3aae9fc6ff02358fae8f888f2d16b7ed86679b8d16e553c5fcd7040000d1ae0b1663a51f18a7ae6578ec6bcfea25d009a76d70c366253dcfea4aa903ae6362c953f0ff0f1e6f440000
02000000411c6b6479d8469f6ca4df4e45cb0ea5cf3f0180ec1d71682a90713e1a070000c1527e5a3830e97f71f9a9977966e68c9f325888973e1513ce53bc44865696eb5762c953f0ff0f1e943e0000
020000005b1c62a8daf5cc7751e305978b665c23657c8f481cbc8986b0547850cd010000ab8e0b2776d159b8d2872801aaf88329b8f6c9d21408b6e82eb040c3904788536662c953f0ff0f1e30490000
02000000e9b189fe0762cfe04fdce04aeb7477007e3688850dd1f97dba1cacdec201000023c41ebded104baff1c9b83012480b2e749532e31bd09acb0e99e371ecd9e48f7562c953f0ff0f1ee0660600
0200000003538d1060bf83211af57f7c1e12d639d2f8d3d553bd1d61c25ea3a98a0c000093d33bf34b8189cf2f06aca337deacf8cb0ac9a908aa891e556c939123c9b6f06962c953f0ff0f1e7d5e0000
0200000071d748bdae8912c5fdf1d84ebce50b8ba3f19fded9f2bce5e13da6300f0f0000caf505a83cebdc30b478947d29d1bc100cb409fe9cff4d88e356e0157ca49bc16b62c953f0ff0f1e43310100
02000000ced02c1049c0d5cbe7cf73eb5d0582734d9ac691a1a29e80f5926c59610d00002605b6d303e169c36543a525c5721d713cfe4df850235c5d05f466e58f1a65117062c953f0ff0f1e30e80100
020000000b00565939d13e4dfd4a1623241a54b1ed0c1a737d1f85c2727992149d0b00004c6da3f78886f2dfdcfc248597b839249ca80d75e35e5c84539b879d6fb62c178062c953f0ff0f1e607b0600
02000000025389c3ec9061b07205efdcfab8247f823193528a57062dc1e6063c470700004b59fef9677190ffcb4fd04e93ac4fddea292fa1941abbf9249ed5af5eb597c58162c953f0ff0f1e4b5f0000
0200000096e3fd3471d6fcb46b0e3b6bd8191a487c8322a262daa83fbb10d57c7a030000afd658884f45b6820e3c7c0cd7212e744e1cad67cce83d71bf732faea9485b808362c953f0ff0f1eacae0000
0200000096927caaa931a4d64797b3a9e594bec491c2a416dabb5dab9402ac3d63060000eb911f13e36b407a8e7943d3dc62b2f02d567bb52f317f14a37420a7106e3da78662c953f0ff0f1e480b0100
0200000004d7ab4baf38ce49a1c665cd2211668004d1dcc4948c5543a47755e7b9010000e0805bc84ac5d1cf95d0044ce264e98eeda1aab510738bf159cecc6b476ac65a8862c953f0ff0f1e25e60000
02000000f41a134d0962b924e2e4bef5f476e6083ffc040c4975c1e4df49c3221108000070fff952728d60856ce6df7ff5179abb3199c5662c10f04fad72045bf6d100208f62c953f0ff0f1e3f9b0200
0200000056538dd7dce6df56d3711f5709df457f08adf470a2d52c13e6ca67eaef0700007b3347652642bb3c62e28662ad4da9816dd1f2dae4604e3d1e202789cdb9eff29662c953f0ff0f1ef61d0300
02000000b7c804aaa3ee6df81fa62738bef4011d7241eb2a17dabd3244500773b10f00001a10eaf03136f66c2fdce883c2af5252bea900e42db625a008820d8b1848077e9962c953f0ff0f1edd740000
020000004718dde6b85e0e918b6cd8e6a0acf4f3d916d3188f1b74b0544a5a90dd0e0000001099fe7dafa09fa1113cc0b141f32a96ddb36e6fdb9c7dd01099e3579ac7b1a062c953f0ff0f1ea2740200
0200000065d2ee28b6e0fdec64bd7eca4cbf3e253fa0c1af73f98be24e3ac463e5050000369d77e2f8b01445ed8ad896e130528900fb4d00375c7bc9cff84d52db78fbfca762c953f0ff0f1ee38a0100
02000000e6948d23cb278f87bf5bad14b8e404ded16d3475c9c8b91fafd41ce7e80100002379501ca2e451fddcc8aedeeae8751782c14371dcbae8df504c6b9d42c10beea862c953f0ff0f1e9b860000
0200000073e22a115252f84ef2202f955f0fc6fc425419cd50a3da9d5dddb2ac2c0a0000f277fa849f3a01bb35c6459638c331907133da5c5cadab30088456568672f16bb262c953f0ff0f1e9bee0300
020000009954b73d90b6d6af70948fe748409ee7bd3394a4ce829d37031dbeacd00f0000dd0ba4f8b208b2c9eef7495ba54925dd299c43cd7c4c56c49dc7b3235296c656bb62c953f0ff0f1ecc880300
0200000045f83bd027d85b1ea23bbc6aa96ab449449375a43ee0d1027ef9a9e99806000031f3df48792cd0a52046e32f12262c2b9d7dfe0d03524f433c7e82bbc7d034e5ce62c953f0ff0f1e46970700
0200000083513ae9e70b0daf7a9111176733452f3a430601470ce3784c689d8df90e0000fb76c5de29d4e11a154f7d0c4731161ae3926cb3a068a93aeb0f6d4bb45a5bb3688eca53ffff0f1e29510200
0200000057fab99d443f6c4c4d3f0f986afe92da1479b74a73fb902e34758281ca0a0000fb6f7efe0b00854c790f2cfabb5ccd576b931004a4525cc9afad025af1c28c5d718eca53f0ff0f1ebcc00300
020000000172588cc0148b9d48e19738a6afd40c830bfc5d3858d98b260124aae90a00006523c9dd6a6afc51ee86951efab764bdb98c43a6102f5714086dda3c1ffb0dc0778eca53f0ff0f1e4e0e0200
020000008b9b2fdc018ff57edcb0ae09127a449f447538e98d6ab3e1135db836820e00004fe375a3e0040bf22fa7883ed47e51a0886eda97d13f5a4b90f1da7ded7021947a8eca53f0ff0f1e449d0100

View File

@ -13,6 +13,7 @@ from decimal import Decimal
from test_framework.blocktools import ( from test_framework.blocktools import (
create_coinbase, create_coinbase,
filter_tip_keys,
NORMAL_GBT_REQUEST_PARAMS, NORMAL_GBT_REQUEST_PARAMS,
TIME_GENESIS_BLOCK, TIME_GENESIS_BLOCK,
) )
@ -196,17 +197,6 @@ class MiningTest(BitcoinTestFramework):
block.nTime += 1 block.nTime += 1
block.solve() block.solve()
def filter_tip_keys(chaintips):
"""
Dash chaintips rpc returns extra info in each tip (difficulty, chainwork, and
forkpoint). Filter down to relevant ones checked in this test.
"""
check_keys = ["hash", "height", "branchlen", "status"]
filtered_tips = []
for tip in chaintips:
filtered_tips.append({k: tip[k] for k in check_keys})
return filtered_tips
def chain_tip(b_hash, *, status='headers-only', branchlen=1): def chain_tip(b_hash, *, status='headers-only', branchlen=1):
return {'hash': b_hash, 'height': 202, 'branchlen': branchlen, 'status': status} return {'hash': b_hash, 'height': 202, 'branchlen': branchlen, 'status': status}
assert chain_tip(block.hash) not in filter_tip_keys(node.getchaintips()) assert chain_tip(block.hash) not in filter_tip_keys(node.getchaintips())

View File

@ -0,0 +1,89 @@
#!/usr/bin/env python3
# Copyright (c) 2019 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""Test that we reject low difficulty headers to prevent our block tree from filling up with useless bloat"""
from test_framework.blocktools import filter_tip_keys
from test_framework.messages import (
CBlockHeader,
from_hex,
)
from test_framework.p2p import (
P2PInterface,
msg_headers,
)
from test_framework.test_framework import BitcoinTestFramework
import os
class RejectLowDifficultyHeadersTest(BitcoinTestFramework):
def set_test_params(self):
self.setup_clean_chain = True
self.chain = 'testnet3' # Use testnet chain because it has an early checkpoint
self.num_nodes = 2
def add_options(self, parser):
parser.add_argument(
'--datafile',
default='data/blockheader_testnet3.hex',
help='Test data file (default: %(default)s)',
)
def run_test(self):
self.log.info("Read headers data")
self.headers_file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), self.options.datafile)
with open(self.headers_file_path, encoding='utf-8') as headers_data:
h_lines = [l.strip() for l in headers_data.readlines()]
# The headers data is taken from testnet3 for early blocks from genesis until the first checkpoint. There are
# two headers with valid POW at height 1 and 2, forking off from genesis. They are indicated by the FORK_PREFIX.
FORK_PREFIX = 'fork:'
self.headers = [l for l in h_lines if not l.startswith(FORK_PREFIX)]
self.headers_fork = [l[len(FORK_PREFIX):] for l in h_lines if l.startswith(FORK_PREFIX)]
self.headers = [from_hex(CBlockHeader(), h) for h in self.headers]
self.headers_fork = [from_hex(CBlockHeader(), h) for h in self.headers_fork]
self.log.info("Feed all non-fork headers, including and up to the first checkpoint")
peer_checkpoint = self.nodes[0].add_p2p_connection(P2PInterface())
peer_checkpoint.send_and_ping(msg_headers(self.headers))
assert {
'height': 255,
'hash': '0000080b600e06f4c07880673f027210f9314575f5f875fafe51971e268b886a',
'branchlen': 255,
'status': 'headers-only',
} in filter_tip_keys(self.nodes[0].getchaintips())
self.log.info("Feed all fork headers (fails due to checkpoint)")
with self.nodes[0].assert_debug_log(['bad-fork-prior-to-checkpoint']):
peer_checkpoint.send_message(msg_headers(self.headers_fork))
peer_checkpoint.wait_for_disconnect()
self.log.info("Feed all fork headers (succeeds without checkpoint)")
# On node 0 it succeeds because checkpoints are disabled
self.restart_node(0, extra_args=['-nocheckpoints'])
peer_no_checkpoint = self.nodes[0].add_p2p_connection(P2PInterface())
peer_no_checkpoint.send_and_ping(msg_headers(self.headers_fork))
assert {
"height": 2,
"hash": "00000d3aca6b09e1e0a91196f53654e08eb7bfc897ffbf24040c7686584f0209",
"branchlen": 2,
"status": "headers-only",
} in filter_tip_keys(self.nodes[0].getchaintips())
# On node 1 it succeeds because no checkpoint has been reached yet by a chain tip
peer_before_checkpoint = self.nodes[1].add_p2p_connection(P2PInterface())
peer_before_checkpoint.send_and_ping(msg_headers(self.headers_fork))
assert {
"height": 2,
"hash": "00000d3aca6b09e1e0a91196f53654e08eb7bfc897ffbf24040c7686584f0209",
"branchlen": 2,
"status": "headers-only",
} in filter_tip_keys(self.nodes[0].getchaintips())
if __name__ == '__main__':
RejectLowDifficultyHeadersTest().main()

View File

@ -246,6 +246,17 @@ def get_legacy_sigopcount_tx(tx, accurate=True):
count += CScript(j.scriptSig).GetSigOpCount(accurate) count += CScript(j.scriptSig).GetSigOpCount(accurate)
return count return count
"""
Dash chaintips rpc returns extra info in each tip (difficulty, chainwork, and
forkpoint). Filter down to relevant ones checked in this test.
"""
def filter_tip_keys(chaintips):
check_keys = ["hash", "height", "branchlen", "status"]
filtered_tips = []
for tip in chaintips:
filtered_tips.append({k: tip[k] for k in check_keys})
return filtered_tips
# Identical to GetMasternodePayment in C++ code # Identical to GetMasternodePayment in C++ code
def get_masternode_payment(nHeight, blockValue, fV20Active): def get_masternode_payment(nHeight, blockValue, fV20Active):
ret = int(blockValue / 5) ret = int(blockValue / 5)

View File

@ -305,6 +305,7 @@ BASE_SCRIPTS = [
'wallet_coinbase_category.py --descriptors', 'wallet_coinbase_category.py --descriptors',
'feature_filelock.py', 'feature_filelock.py',
'feature_loadblock.py', 'feature_loadblock.py',
'p2p_dos_header_tree.py',
'p2p_blockfilters.py', 'p2p_blockfilters.py',
'p2p_message_capture.py', 'p2p_message_capture.py',
'feature_asmap.py', 'feature_asmap.py',