Reverse displayed endianness of transaction and block hashes (#1171)

* Reverse displayed endianness of transaction and block hashes
* fix zebra-checkpoints utility for new hash order
* Stop using "zebrad revhex" in zebrad-hash-lookup
* Rebuild checkpoint lists in new hash order
This change also adds additional checkpoints to the end of each list.

* Replace TransactionHash with transaction::Hash
This change should have been made in #905, but we missed Debug impls
and some docs.

Co-authored-by: Ramana Venkata <vramana@users.noreply.github.com>
Co-authored-by: teor <teor@riseup.net>
This commit is contained in:
Alfredo Garcia 2020-10-21 18:54:02 -03:00 committed by GitHub
parent a5a86622d4
commit 21ad6ffc47
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 1109 additions and 1089 deletions

View File

@ -781,7 +781,7 @@ Implemented by querying:
- (non-finalized) the `hash_by_height` map in the best chain
- (finalized) the `hash_by_height` tree.
### `Request::Transaction(TransactionHash)`
### `Request::Transaction(transaction::Hash)`
[request-transaction]: #request-transaction
Returns

View File

@ -16,22 +16,26 @@ use super::Header;
/// block header includes the Merkle root of the transaction Merkle tree, it
/// binds the entire contents of the block and is used to identify entire blocks.
///
/// Note: Zebra displays transaction and block hashes in their actual byte-order,
/// not in reversed byte-order.
/// Note: Zebra displays transaction and block hashes in big-endian byte-order,
/// following the u256 convention set by Bitcoin and zcashd.
#[derive(Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "proptest-impl"), derive(Arbitrary))]
pub struct Hash(pub [u8; 32]);
impl fmt::Display for Hash {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(&hex::encode(&self.0))
let mut reversed_bytes = self.0;
reversed_bytes.reverse();
f.write_str(&hex::encode(&reversed_bytes))
}
}
impl fmt::Debug for Hash {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let mut reversed_bytes = self.0;
reversed_bytes.reverse();
f.debug_tuple("block::Hash")
.field(&hex::encode(&self.0))
.field(&hex::encode(&reversed_bytes))
.finish()
}
}
@ -66,6 +70,7 @@ impl std::str::FromStr for Hash {
if hex::decode_to_slice(s, &mut bytes[..]).is_err() {
Err(SerializationError::Parse("hex decoding error"))
} else {
bytes.reverse();
Ok(Hash(bytes))
}
}

View File

@ -19,7 +19,7 @@ fn blockheaderhash_debug() {
assert_eq!(
format!("{:?}", hash),
"block::Hash(\"bf46b4b5030752fedac6f884976162bbfb29a9398f104a280b3e34d51b416631\")"
"block::Hash(\"3166411bd5343e0b284a108f39a929fbbb62619784f8c6dafe520703b5b446bf\")"
);
}
@ -31,7 +31,7 @@ fn blockheaderhash_from_blockheader() {
assert_eq!(
format!("{:?}", hash),
"block::Hash(\"39c92b8c6b582797830827c78d58674c7205fcb21991887c124d1dbe4b97d6d1\")"
"block::Hash(\"d1d6974bbe1d4d127c889119b2fc05724c67588dc72708839727586b8c2bc939\")"
);
let mut bytes = Cursor::new(Vec::new());

View File

@ -11,10 +11,10 @@ pub const GENESIS_PREVIOUS_BLOCK_HASH: block::Hash = block::Hash([0; 32]);
/// Returns the hash for the genesis block in `network`.
pub fn genesis_hash(network: Network) -> block::Hash {
match network {
// zcash-cli getblockhash 0 | zebrad revhex
Network::Mainnet => "08ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f0400",
// zcash-cli -testnet getblockhash 0 | zebrad revhex
Network::Testnet => "382c4a332661c7ed0671f32a34d724619f086c61873bce7c99859dd9920aa605",
// zcash-cli getblockhash 0
Network::Mainnet => "00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08",
// zcash-cli -testnet getblockhash 0
Network::Testnet => "05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38",
}
.parse()
.expect("hard-coded hash parses")

View File

@ -11,8 +11,8 @@ use super::Transaction;
/// A transaction hash.
///
/// Note: Zebra displays transaction and block hashes in their actual byte-order,
/// not in reversed byte-order.
/// Note: Zebra displays transaction and block hashes in big-endian byte-order,
/// following the u256 convention set by Bitcoin and zcashd.
#[derive(Copy, Clone, Eq, PartialEq, Serialize, Deserialize, Hash)]
#[cfg_attr(any(test, feature = "proptest-impl"), derive(Arbitrary))]
pub struct Hash(pub [u8; 32]);
@ -29,14 +29,18 @@ impl<'a> From<&'a Transaction> for Hash {
impl fmt::Display for Hash {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(&hex::encode(&self.0))
let mut reversed_bytes = self.0;
reversed_bytes.reverse();
f.write_str(&hex::encode(&reversed_bytes))
}
}
impl fmt::Debug for Hash {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("TransactionHash")
.field(&hex::encode(&self.0))
let mut reversed_bytes = self.0;
reversed_bytes.reverse();
f.debug_tuple("transaction::Hash")
.field(&hex::encode(reversed_bytes))
.finish()
}
}
@ -49,6 +53,7 @@ impl std::str::FromStr for Hash {
if hex::decode_to_slice(s, &mut bytes[..]).is_err() {
Err(SerializationError::Parse("hex decoding error"))
} else {
bytes.reverse();
Ok(Hash(bytes))
}
}
@ -60,12 +65,12 @@ mod tests {
#[test]
fn transactionhash_from_str() {
let hash: Hash = "bf46b4b5030752fedac6f884976162bbfb29a9398f104a280b3e34d51b416631"
let hash: Hash = "3166411bd5343e0b284a108f39a929fbbb62619784f8c6dafe520703b5b446bf"
.parse()
.unwrap();
assert_eq!(
format!("{:?}", hash),
r#"TransactionHash("bf46b4b5030752fedac6f884976162bbfb29a9398f104a280b3e34d51b416631")"#
r#"transaction::Hash("3166411bd5343e0b284a108f39a929fbbb62619784f8c6dafe520703b5b446bf")"#
);
}
}

View File

@ -20,7 +20,7 @@ fn librustzcash_tx_hash() {
// TxID taken from comment in zebra_test::vectors
let hash = tx.hash();
let expected = "3956b54c11736f4ac5e2c474029cba8f5b83dca2e38f355337e20ce37fbdf064"
let expected = "64f0bd7fe30ce23753358fe3a2dc835b8fba9c0274c4e2c54a6f73114cb55639"
.parse::<Hash>()
.expect("hash should parse correctly");

View File

@ -1,462 +1,510 @@
0 08ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f0400
2000 8c388b125a9612ebea9c70a5acc57d2f94d633faaf0ece2cec81339406000000
4000 c6504df5ff490ca933ed6d1dd9127bcc005b7f9418d057fab9a3770001000000
6000 f8e6ead5c80244ef07d46948594a490ba5b46e928e4ab705b2e92c4c02000000
8000 8cea66dd675c22331fd0eeaece3a4c3f40464e9eb2777bee22114bb000000000
10000 c95a6d16c023b41ec0e903701b8edb09037eab7b54aeacb0ba63202c00000000
12000 58b66729c3f4d7a0c25b0143d8f5de984299a8ea1ff01b56871bcc6700000000
14000 3acad06405ef5ea8ddb27929bb3e6870fb81b82d280097c8fbd3b9c000000000
16000 425fe2a45fa7db1f88622bebf4bb1fb2097c64e8c85a30167c44500f01000000
18000 cd3800234c56d8813259d12ee85e8e7239a07311e8cff0a5cc1f164b00000000
20000 08988d4ecb187f75ba0cc8fe68a7c57953d972367166a3d1442ad15800000000
22000 d544e5711eb4497de1f0deb9eaa10571c2c86344a0266df770c4993800000000
24000 10587b1a9bae6ab54561b8783bbcd7f0212df3078ea3371973fbd83700000000
26000 b092c5e4b430ff8e5b2b39ba73ab70114c685beb8d65f03b8961e70400000000
28000 9ba9526d509d1d14d0a4dc19a628ee954221f553b990b1f03401880800000000
30000 219e674131a4762dab348c4e4792f5fc30b72fb41001aeed3c90d57c00000000
32000 1fe237ff616a1543937bd0e95934d707037b0625bf24934b0f467ba600000000
34000 54883f2d5b7c4c3dc4666229ce4b49adeddf150ba5aff5cef203167700000000
36000 e4cff04acf045b14b717e96572c4fe67a6eab0967760286c30710e4200000000
38000 63ca4885024f748fa56c3851d3ad7eae15bea71300dbe2c24c62692200000000
40000 d477ffed1c2870fcf36dbcdcf21e393815d74069f488c1d0cd371e5a00000000
42000 5c09983ef4668d748390414869f94b81761d8aaa4b6e80b7b7694a5000000000
44000 33a8c331d9cfb0363b6f9cfb4ed82a8e5072899903f8f2a35b4d030900000000
46000 96327ef0ffef861cc5862adaef41bf8603e4f83329deb7c644cd1f0d00000000
48000 567ab94f72912e03cdcca8c56f10ee474be58342222ffec5b4c0d86800000000
50000 63b46852d0dd59d94701c03d3f76a7cbd8be4873c1c9e978de650b0800000000
52000 87cca471013a50c885e1f913959442b748a161e7857c5e90ad1eb55900000000
54000 5381a03701edbf6a8f6872df3575563ea4f41c5a013983c1036c728100000000
56000 d85373ba68f0cb6d5d718c89537241eb8d2b40add956b02e0beace4e00000000
58000 8f5105e79a1c194f9db61712145872762eaf0de4f4133c0d595a456700000000
60000 b66e95cbf7b05ad2981ff5eea999cd756a8ff1075851f968e011b84000000000
62000 83c9e091df2b3668f95da5bbd53cd6680223478450d9769c02068f0f00000000
64000 fea3d4649cd9459aa92aeacadae1713d6a9479d7d62c5607b2211d4b00000000
66000 e56908d158ae8fc1c92fa9b33bfc83a5dd33962fb8959a4b1e509c8500000000
68000 0b3fc240fbffc1ba7471e64a8f7bd86f8a7c0aa723fb16c0b501627100000000
70000 6bcc4d0c3dfe356c74921c7947b614768077fd9988d185943b17293d00000000
72000 7015f8d4d7612f20872f9eee929edb217f35cdfba6dbc6ef4c803ea100000000
74000 433e439bf224b7d78c087ab8eec2bde5b99cf5ef36ce03999b79488600000000
76000 2ef16c0f5386c67890e2f34f4057cf664cc1b0d0a2a2055b50a2226800000000
78000 9d9cd2d8a387ceb315b6d2a8f7c4d79364acd2d9aed554f99a98c74500000000
80000 d021b2c5b9768bb5c1c43b140442a695eb87ec0be48c497efc133b8b00000000
82000 f22f806a75101de55e05fa6dacf0f82daa093afc39045504fd29124200000000
84000 48f6f9275ace0c568f346c745011c96be14c2ef3ab828751830b7c4900000000
86000 5e3a16d39c98c4d08fc87b54d7d3d878096d5950dda31c7549a9cd3800000000
88000 1805d435d854625555a0dc119ec18fc9567a4ebc1adfb3f636f63a7000000000
90000 f737924c4dd726a9e2b0667b5324e3ac65cf857c76b6dc8e9225e85700000000
92000 6cce23263d3818b92709ff9eef923e5ed632eba83ad1a05be51af43c00000000
94000 7d52795aff04e6f6af277eee03c9c2183bcaffa14d228e104d37614c00000000
96000 2146281ab269764db82e9540d35fe1342311ca0a4590649589a2692d00000000
98000 3cc1987de4dba7e7654c93ed187d9d7a7f0ddcc741ac27f9f373337200000000
100000 85b20e613c259a7ac3a27fe1edd550fd30389e87c0cfac6bcd825c1c00000000
102000 671291748cb995fdce8e917b7a0758137e706ffafa7d13571e02ff6400000000
104000 0c02727c59fd6ad1f8e2807e82b379419d4bb257be821cf88ee57d1400000000
106000 dbe5acb6c7ab1014bd136dd947c0d2e5d9e9595f796942b3d794785100000000
106580 1b4076b5a0d8bc22ad855bc7663c2515362541c6f1b8b43abb30694600000000
107063 01cb2903af5a93ba1c1f405ad10e4e9dcf5599b9afaa400cffbf3b0000000000
107440 b1c816c94e924108e13a6aafc35b7a1d8efe3e0c4e3bd57a3716bd4d00000000
107838 17a97c2b48a89c2a63370027a1b0d45976437f346e9d81893d07d86500000000
108448 7b66d3c0131449f1fca83139eb62286b08a383e44eaff087fdd7976100000000
110448 11fcefa5add5922a5f158bb03d2d2288c11997033216efe2b759fc2900000000
112448 32b519954e834209ca3739a44e5d803e5d0c5104b9122d9f7b41ed3b00000000
114448 805858529af290c63229bf262ec8fbea93d4542b427138d41c38040a00000000
116448 9e7ab06a4ea7ff6e3394fd22e23a06eb3ba9b84597dc786aa4ba952700000000
118448 01a8d62dbb0196e1601bc23969f6bdae0d11c84ae4fd3630ae92573200000000
120448 e3a8014f154ee464849dda9eee3a2d0763471cc201dfb09d78d0251500000000
122448 dd7779b41e4e2f6b306575170737daf920a90e09c7eeb3b2e082271900000000
124448 def68d45d346d4085fd8b60e9e795b0768b1ce81352d8a531be89e1b00000000
126448 0bf155f9ca32e5e74f5240014cfc0178f4052ec45a59dc9e9bddd41300000000
128448 f0b63da3a01cf408ad5ce1491e6ad4f2b9b587db8232dcfac31e5e2c00000000
130448 3dca80a2516eb8a2e922abd0752eea83b14a04b27d959a97563b420500000000
132448 a900bd44108ca38e10896dd09cef7a2056c836abc8bde2905eb58c3300000000
134448 a6bfce3c7a2b9e3b3bdac4f1839f252ba305e5d4b9cb93a45b651b2a00000000
136448 c3b086bb8718d2bad3f6009c74eee331de87a9e99c31fdcc021b520300000000
138448 d24112c2fba27696da4afe9b6b8da23899898bf706974734248ccf0d00000000
140448 7b9f2584f792d4f7ac2e69ecb86b97389b1698ceac3134fc3e9cff1600000000
142448 52af74b024c7fa58247c79b5c539f0e826a1e344b5141fb25521e70f00000000
144448 945cb1100ccb3574a89790f92f021825f72145f13f28b10365909b1a00000000
146448 571433b3804516f094a144e4d2acfa83aa19a02c305c3132b715fe1600000000
148448 5efbbf06c42cd16d6cd7f7e18813fa7ec6b13ca5a95b5fbdf45a4e1900000000
150448 3db356ce85a7de72eed01b933195602d248a4936c032a4e5328d531800000000
152448 847c78a37fdc061be5fd36cd09301d185c71116db28c0d2b854f190600000000
154448 ecfce4d5afccdf2c74fc67ffbd054b1bb917a59021f1b53f7a01780a00000000
156448 886a1dbf8c3efb85210d7fdd8bf9ada7906b9f77018bd1172b746b1a00000000
158448 043eab2f85d9cfbd4f467a45dcbc55db2f33fd2896dfd4dedddfa31900000000
160448 115294111d9da6268191c6d11b4e32535cbe88e7f4d5b649dce4650000000000
162448 36b48dd3bff4eea3a685c622612099207cb93f9b500fe0afc0c0740f00000000
164448 d59621281a108d311c678c6d3bdd927c8f1a8e8c01f7bd3f3a3b370400000000
166448 23b464c967f3715932af11035d0bbcc8bce4ea05d3943c8e619f900300000000
168448 07fcf306984826b1801ead650ca43b101e1998510f96c2b6412f821100000000
170448 442ffb07a08fd7fbf6aab486e6ffa7f5637a3c25daef42c071fbe91800000000
172448 914503836529934adf98db3f6767afabcdd4fe7f86b62cad376dc81300000000
174448 a1e1399fbd187a6587076967b4608cd9dab05ae09fd26ea0fcf86e1700000000
176448 c80393cb1112c236a255eae9b5468488dfa7d8bb9e44c909f930b91500000000
178448 2d8f082d52f9a7e2a200b777eac4fd047dd2edb21979e4ec968e610600000000
180448 5f41bc628a7f857bbc1eb7707934a2221fca3510f370cd8e9562a20100000000
182448 8b8a89938bbb44815e2fe7df6f9f0c376bcc2b80dc77b7a02c8aa20600000000
184448 dc4938c1f06c75184fa4ecc533719888f9b0137d0440b66e3f4db41300000000
186448 d0fcfba67964133417ab30329a2903178b93639f1c3f71933cc8dc0800000000
188448 7cbd43475cf0f0e87e900dfe7c650983396db6f94cc3ef6d071e140b00000000
190448 821af7a4242943d647830a437df13b72b1587fa467e6ec874a17dd0600000000
192448 af507a3f13ce86ef4a074a1db2e5b602da11824382ead8c3b496d90600000000
194448 da610d0e44516421a4deb63d7bfd298fc5cf3339433bfadc255f650f00000000
196448 8bb666474a287d4dd54b16b5079d9b847a5656ef8dfb0f19c1ba6c0100000000
198448 03d88a0019cddfe2cccfff3ebda7bbb158099ef8f8edf8d3361a5f0900000000
200448 266897da8c4c47a8151ba674f6b27406064624f96f804a4e10a0f80200000000
202448 cd18860140f18e57a55a55245788ad3e77032bf42cdd22f61050af0b00000000
204448 2c20d51b23e7e0b54f7a5f05fa1467b35b4f168911ca209a4206f40000000000
206448 14c803e2cbfb14ca0b745d475d57fbc30091ad8e2fddad3a1b83b01000000000
208448 187060238427a832cacc234ce335745e805cecaebc9299ca06cd871400000000
210448 8578c355c81f278621e5eabb13f548bd1043fe6341ddfc573d47fd0f00000000
212448 6b6582b98b51250b406edf8ced42f7233fe423a8df1c5919fbd3331600000000
214448 87ca3697a45e0a1a7a34d7b7060070b21f0c84401f0aecddfc482e0d00000000
216448 9cd0431104ef1b149b10f1af39c3f63208d9fd7d9fe4a7037bd6fb1000000000
218448 e21540e44333d95cc193c7c24744cddab80bf3d7acc7c8654899e10f00000000
220448 f7c3460a9eca4bb0fa63a54ee789b0e0a69f111a8d4ea53f4595a60e00000000
222448 9f35f996f7e34817859d0b84f9471f5c409366d24b7ea78cfcdea50e00000000
224448 cf07d11cf56a8db84e4691dc7a2cfa3a78019cd649893705540c050300000000
226448 6a21d71d9ce4fdea792e72b8e360fc087e8b8f7fc92ae0072e782e0b00000000
228448 47974b2b2106a385e2d3d128e4d8a97205c1ae8ba09cf78e4188c90e00000000
230448 f69fcc5a158b80f63e35541919dfb145f4da98c5efe66b6d5e384d0100000000
232448 3437f8cd6b13eeef37eb39f41102d59e955b9ddbf775aa14af84410e00000000
234448 c03bc42ecdd009cddb5a5fe1fee5f55f5c302eb711653673d0bcd70f00000000
236448 942b9ac9aa8a548708014b961f27ce5c5c6971d2be60f116107b470500000000
238448 1fa52e4e2f4f30aa4b67781c42333913a0263614e8ebb19b95758e0800000000
240448 273d337b1b066b32c00e0c4412d0e83843f93f9f97e0c9fa34a21c0100000000
242448 ebeeab9b924e2a295031d565f81ddfe6ac0a887b632fc686a093850d00000000
244448 111210b300595d7518f9d26021363f353a9971c7c97f476aa626d61200000000
246448 88a1279230125c6707caac340c54fce491bcac845510ed256a7b660400000000
248448 2a41aa5891ebcb5a4e89f0e0a82d386d528b52576831914504c3250d00000000
250448 4b44c017f4e3b18537f37879d3fb74259b31d0085dc1c35ed203760600000000
252448 722f9e57b096be502d550c443f79ca1a130ad3c4eabca686b41b301100000000
254448 f58261b863eb03a04955c99189f787599f69166bae736b74187b7a1200000000
256448 3b6b310170c7ffc6d79208bc47cdf5f5a8137c565a1e450342906d0600000000
258448 987b850bf81ad99972dd93ba86353e835e93c8ef7a0ff25673607d0100000000
260448 a8b74fff2ea08198c9548c4f8e9d637cf3b7474852700d028d2f030000000000
262448 07e896b6b5b1a769116f6226a652a1725a5641836450897c79ba9f0600000000
264448 46ab2ea660827ea9336f3a1fbfb89d910662528f54bbec549dc2b40100000000
266448 33aa7ef6d4536c5100e50dfa4feb406ff5f6a5fb704528e4be0e8e1000000000
268448 b9309b66ac7d55b8d17a60ff4eb2965ea4752110de03c8673942a70400000000
270448 6fa803d527b4b67e8a587bf080a3929f042d2682ed63d994fdc78f0f00000000
272448 fc08956db487607282a660767e6f5abe093218a6e94cc31c2beadc0b00000000
274448 ec0547b6f15b3c561ef9d45345653f27f81a60ecaef13214724a700900000000
276448 cd4d5174e79f738a6b550bd73f55b32065ae51162b4f81a4db07c20400000000
278448 b3d97ffaa212256257b3d8a3912c15acc434ded9eec58f281feec50700000000
280448 5039e7ed79182c0fe3d1c92e061ddb7bbadd749232bc73dcbb82450500000000
282448 677f48d353ff580b9f1a4ca3dac6398246c396c88f84df360d3b020e00000000
284448 7bf3ca431c2edeb8a7e061ddb3d27faa65850db823bcb3f7b118e80a00000000
286448 26598d156cc591e6117ddafcba511878ccfa4a02462a1a3c08788b0300000000
288448 73646479dd391c43331e070a1a2fb047fb4d8040b2d652ed70c8b60500000000
290448 b83ddaeb8a7d8a210722319043e1db305b505aa2836cf1427613f00b00000000
292448 e73ecbc065b927222cb2f585c14ec530e6980ecc5a0cb1df7ffcbc0600000000
294448 31cf812ffdf140b15b8007556b9427342dd84b52b083b4879edb5c0300000000
296448 18026f2eece0c867707766ad74f773a89665f2c8b72828f66688930100000000
298448 7efa66fcd3902989ee56e644c60c783d699107e1530414fecf36f50100000000
300448 9dc047572879c6d840f61b3266e15a38fe171db42202e93a620fc30800000000
302448 f18773b0badffbff38cd102710675a90d6f953b7e8b1359f6a58360800000000
304448 c39a524478d796807a58b6c8d28408525a39545c9782e8f0d9820d0700000000
306448 58a1bd7f28d97f3cb271c7030915d7fd22cfb048173eb40e2adfc60800000000
308448 6274a2dabb531cfd28837db73ae4fe8045de36756072e44fb746450800000000
310448 68535999963746c7e40501c5df558f2b517d75c81493d4a00ed0df0400000000
312448 c6b8ecd09c29d1b830fe9682be7271a9090ea84c543108bcd7b7450b00000000
314448 511732cf7233e843bd6a6611d9026673c9fa7750b2568fb9e5736c0c00000000
316448 98416b4c065dc11486eeac81334029940895ef2ae86ce0c3c038ca0200000000
318448 9722ce839beed07ee40b6b827a2814c03e05711a185c290bcb3a130500000000
320448 7f4ffc3edb304a1b0f187149e82eeffbc455725c51f2a079e237a81000000000
322448 c4a16d5f891dacd1549f2ccf64aac56755693daf6257a508bdb8fb0500000000
324404 f86abaa625b1987bc4d14dccf5309a44c904398f4410221f7a0fe40c00000000
326347 44cbe08d604b52c478f1db32961733348047642229bd744ee6f0120c00000000
328347 7158c8f9a8a4229f01eb16a531d533eefe2884983bf4c75a4e96201000000000
330347 a3a92291882bbc16488385f0156cccff983474e78617b35ee5c3090a00000000
332347 a1946271f7ff496c349218907e1e0581518fb289e290d4a7bcee380f00000000
334347 c967857a50a8603c14c49c61d8a7ab73dfdf7670a190bdcd7ab8110800000000
336347 dd1f0c1e223834c768c2abad0c0ace5a9780efd7b62b5ce2859ec00400000000
338347 8652269619aa35f28684685da47df40f887b51a83ae1675fe3db3b0a00000000
340347 1aecf033cefc0daa3f2fe973f15cd96250a8bc58eb20f1b2d950660000000000
342347 15e8a1f6a794556cca36c35f74d98425008435341aa35d31f6e58f0900000000
344347 9981eb82152555824726ab3e6a3e7f80ac1d4e25c567f4526d91620d00000000
346347 b38d55716d1563385926406dbc4a5170ed2aa6bccfde597280f1210000000000
348347 cda5363917e4ba1d922ba69ac17bd19ba13ead4f4b57a85e318d080600000000
350347 aa9fe187f9c84ad676bfd2ab692cbd70fe4a5e3688a375b4fbd00d0a00000000
352347 0e5818c21028fcf1ebe4c90d38fb88272bc78080af98ccd194dfaa0500000000
354347 2951e683724ba3a5d59aeac44a6be750a215c4e16022bd669b40190300000000
356347 429039c77692eeb996c15605d8e5ed90db23e75a05a5178224b92a0e00000000
358347 634d37284a61f7a27f42f666af8bc96b40690fdc9d24b8bccb09100600000000
360347 5a75c49deb9472383107fb70e4a4dc8e3c8129aa327265724b66210a00000000
362347 9c52c6b239292b9ffd0af66e91a2340c54416f6a52c3b80ca264c20800000000
364347 0551330692ad43dec0a7bad1c4a0fe34296d011dbbae3da95349380600000000
366347 8b13efe4d3917c304a7483dfe000d58a7384ae11264a4c7e3072250800000000
368347 b564bd662dd179fda0ea82320882fa59302998c067af4bf9a7bdc60200000000
370347 9540347b2034a362fdb864e4aa8845dcfc82b208067a96483083500600000000
372347 46b65c6bfda4c0a6a9b38eb122641754d5bd62bde4379a58cc5e990400000000
374347 c1d10a8008e98952f8c6bded0cae6940aa0c30c81db1daf614f0530700000000
376347 307fae4ae6d86f7bbd881377457c8539fc331e161af25cadcebddb0600000000
378347 3fb73769bb117aabaa155b32898d146fa2edd33609f87bd91363c20500000000
380347 e1ff1bf0471c0141ebf0edfca96509bb3ae7df17235469b9c23ef90300000000
382347 4f73a42a9594ecf50f3de6cd6856ea1e3016997a791985087a6a0a0400000000
384347 c3eed7f6d83c32e4fb495691314712971eb4f3b25ed691cedcd6bf0000000000
386347 366576f55e3755d4eab83f20a744445986290b9f4f89a02d09a7eb0000000000
388347 3fa9ac3c6a9dc2d1d9dc27497b793dc56d0b54a04904874bfea3ed0400000000
390347 39b3b15667944cdcfad9d6e638b2311475fe6e7652a1a1464044000500000000
392347 f28b413ecb4a7abfd4833705d45aba13ff50621ff9434cf2010c190300000000
394347 c14f4bc7f30239e822a3641592ec64e684d99225c5dfbd5fbd3f930400000000
396347 24be7b64ce5e2393060181b389b9fc21b16fb9cc8808772dabe49e0200000000
398347 73a999451017fb393a44f2318c9a58be3ba1b3041c8a9149cb7ccd0300000000
400347 685edc1c2cbf6b0aeff82fa8a0fbf6cd117e9a0c4e84494677ddb00200000000
402347 3b8d3ec3c95af32b2a990e984303825c593b35432575e224e8abc80200000000
404347 8e2168a04bbf39a58f3698137bee1e772103341ac31c38899917e90100000000
406347 fbdb7eae643ef9ef9bbe0db0b361ec5e99e7e925537a81a31d10300200000000
408347 590222223921a71d16ffadb4385b462e51f79acb60b4ab6e84c3390400000000
410347 fd2819f67cfd33a047dacd6b8308a1e51a3d4ac5c34122528f986a0100000000
412347 a83a4022d094a7b214ecbbe03fe3872c98dc7a31470d5027c4e4aa0200000000
414347 80272eddea307894081b90c08e3cee32c9bab6b9fb1f9ea816bc800100000000
416347 9bae9501eff6f9647ab8d31d7391d3d73344c0c4ee14402dc1440a0200000000
418347 8fb913b9c1abe5805ea5b8b928e65b16711763183ba01d3d9c88350100000000
420347 ab26e04f50c18ca2a8be27aeaf3165a49a9c68581ca3e164c5f2c30100000000
422347 2ba4ba8bf84a1d1a5ba98890270d8fe6b028722525b4566ed705d10100000000
424347 720ffcf9c72033913e7418e18e7583735a1e407fd39b0c90979f2e0200000000
426347 cc10a11722b92ddb2cb7600936efeb8de9dacea30beef84be8aaac0100000000
428347 10891d7b3fb51631c7f3f77cb603df706a95a693cddd4883383a190100000000
430347 acfb9f53483f7d739d4a9ffab7238eab793fbb83bab57f06bcfe220200000000
432347 078056d13852296bb64aee87625d1ba4e30cb7d566e9a2f23fa3860200000000
434347 6fa99cd8818ee97e9c29f01c2bdeac53203c64764c3e434e486b5c0200000000
436347 dc9a82cc91abd3462550a1baad80fe9e0be3c52a605e5209bcde6f0200000000
438347 ff3e7eee6ec0df77f567884bc6dc980017e2d4594e844e39b3b75e0200000000
440347 57c513daf2dd20664e0fa3715c8cda0062953d33d519bd63705f250000000000
442347 0bd6cb0e91264d2dcd3b91acdaf164b0c197f469bd49bb6d3716900200000000
444347 f1ddb821d0c9f5777de6c2dbdd9159cd963c6462002ac6c77b10e30200000000
446347 2f65c4cc2c9239101f7254b16af4fd66e737974ea10e50f68a72e50200000000
448347 d54849b0316676d63f897ee68c2a1b3d6bb437b941b55e39f917cf0100000000
450347 c575aa3e87d57b57e0e2fa82a449a3dad7ace3701341cd644e9aea0100000000
452347 af9b5126756042abcd9dd8bb6e96a70378a56e805d879a1715bb170000000000
454347 3d21ada71475ae8da1f9b9462173672686bbf24a3a055ed71134f00100000000
456347 cad8f35a1a39b83b18cb65ce11f953cef1b65639389b0bd6e36e120200000000
458347 5b34858760a45a05f39acb4bb0706a18984f97fb5b57d95fbe42960100000000
460347 b7eb73c0176d191c039b03c130e7da1a5281e3ebb32095ccf3940b0000000000
462347 d19465c9a2473e52bda266c4302e4fecf8b1595f22f0bea0f80cb50200000000
464347 4f5193fa4b7cd966c0759b0e8a7fd3d832104d383a4d9ad50f8db60000000000
466347 369ecdded4ae1fc1da25a56ddf0e7b5d22a1489f0019d93cade0c80100000000
468347 81cb52368c1d9d36dab543068d7afd3777742aab3af7c309524d980000000000
470347 29d335c2dceaddcf389a15db528c9255fbaa51aae5c22a4b17ee310100000000
472347 3a354cc7d23ceca488d031608c112b8e16bb2a5808b8ee1408f3b20200000000
474347 3278114a7a5275d5d3154383a27af34f934157d2614667d63c0ea10000000000
476347 d0f4e409aeb45b1ba174f12095efaac8d17db1beb95117bf819e590000000000
478347 e06f96832bb8f451feaf9541f0c68677a66afae6d1ba780815c6900100000000
480347 b73b805c29b65fac9b56c5f83f88645ff10dd94a93cb0c0c95b7290200000000
482347 8acb2af5060efb09f74ee1a2608d42013755bb33d3b383500194ee0000000000
484347 f3b2cc0ebbca2e4c587bebc8b3735c302f51f91c395bd92e38bd3b0100000000
486347 5dd84d40439014bfca8ac9a4421d17ffae09234747f34d7f45aec60200000000
488347 792eaa7cc94ba48079556ce83419db17cab6293dda26f65bb90d830000000000
490347 8accfe4081375e405c0db49b28a84fbc5e60bd128b2df3458d30310000000000
492347 0c09a6aec0ee7828efe3461377fca154a5b4c3a67ddc8bcd24afb10100000000
494347 9c5e40aaebc307006b6ad5ce79aac52c0031e5249884cbfc9c9bf80000000000
496347 9f1bf7e1d3c5879c99052a6b93be0f2edebd5d97613a3049281b550000000000
498347 6496ee08863ef805f38270c1aad8e044630b3f518e7392b996006e0000000000
500347 156e0523e8e9222704f07359aa8ef106ae806e4a94f3e28d26b1a50200000000
502347 e09207df445e8f443556548743e4e8e771c0c98c8657c35647590a0100000000
504347 f1a86e52829ace390d4a1d7edb91b3e5e083cc322cdba40901f62b0100000000
506347 000790b84d8d2d4f41e7e25ac18dcd8a6ed91cd6d69e7d052bf1150200000000
508347 505e2c49b7260dc812871c504ccfcb3b4a1950d534ff3ba9e2a0330000000000
510347 84e79e53d4481f105807f314030df7dbef417e8f0c04e89a3092840000000000
512347 c20adda998a7968e0c72e22f56f4e0c1900949bef4fd46c18f7bbb0000000000
514347 214f40a7e4b79545bbae2d76ecf8e4a7eb0a224cf4548bc5dd05340200000000
516347 1dd35a8a33c087b78581797ee7b22a6656ee73a224e69db239aa2d0000000000
518347 8afaed49863852d18732e7e5d1acef3cd618ce84e4a03b39ed08990100000000
520347 9a86a807fe6ae6806d3c1aa18d62b0cf6cb3af03504853c4ed68000000000000
522347 37fde2544051a659603e9cc31cd72ef3ce431330dcc3475faa7fef0000000000
524347 fe5625e7caa1f3b50634af88bfe156e64f39c7083519463f120c840100000000
526347 8044e3b3b0a38cafce33ffce908be0892f78d368dbf5d99035baff0100000000
528347 584b6e783c781dd35131bb0c7aca0c4c7685050faa687903f06fc90000000000
530347 56ad10d92fe0419a610de2e506c4dfdd226ae906f82b02a697ed5c0100000000
532347 a4405571e762df4f095416f1b0f0943118053bb361081a69e5ddf80100000000
534347 db7bc796f04e25a70d80aab4835b517534dbf878555d5bb091ceeb0000000000
536347 c74655a122b8adf403ca5fb649fd84628cbddd92f8837465ffb7f40000000000
538347 5a5a2befc907c20cba09907c7cd28a8eb42b7393e43a39ccd87e2c0100000000
540347 65070c74823db90fae29b16d60c7f4180d15d8140c7c97dca85ed10000000000
542347 9c6991e757594b9fe3e90dc3ae2869643c5bbba872c8eb900d01960100000000
544347 adbbea051da9db6892396bf052524e619cae47a9f1ee4536f9ec510000000000
546347 5569dbc81b426c00bdca139bfa56f3a467b0f01f89488f5b62d8780100000000
548347 f907d6edc3aab40eb4b48e75bb445e57cbecab873af5316dfa98990000000000
550347 e4dd125fc1ecd898ac6567eca62db0cd548dda4751feaba54b33870000000000
552347 986b11003c87877728d02a97f6adb6e5114f4fc74cdcbc52c86b0e0000000000
554347 d5be5fc5bbe0faf5cddee236d4b272880a8e2b51b0e1e6806d97760100000000
556347 fd446aedb0a508e1c57deb12098f1d2ab549ebe9b73325b0b99c050000000000
558347 53e734a42960019100cc192679411a66e2d52ec538f971bbeb8e360000000000
560347 2fb23bd2196b95072cf77a9b1dd4c3bfcfbeea21b5c10ffcc97e510000000000
562347 f1cab35ff8be10cb0824f5b49b0598ec13ee231468c767b344a36a0100000000
564347 7431582ca9019550c2c82608b1dac8961ccdd619b6686a2de4eb490100000000
566347 f5e83c4cf0d997b4cb1f3204484cff8b1ec3299366cfc39dbe60280000000000
568347 ae7931254ce777265feec6be6bb960055c4e34474d68e57e756e460100000000
570347 0ce3a363c0af0cb3352c6ec49790b1dd2d2e3142275961f485b4780100000000
572347 c1d38ba961bdbca518639d59c2f3122d3508af8ee34042efe3dc380100000000
574347 0c796841885aff77bc8fcc48335b8b713a7ccddc0cd87f5b4cfe1b0100000000
576347 4680406778af7180851dcb143f623b72200e6c42c075b8f27ef5780000000000
578347 1d58ca50f42c0c2f882c8186a9135a30f72004b808554f46603d720000000000
580347 d05293bbd4aeb562d132430dc7463740b516563febacb889c6906b0100000000
582347 bb5055161f391981ca9e80a429f393bcd5f2390c12a0e9d0ba6c3c0000000000
584347 77a3862a75a797bac18b99831f66c46cf59e571b934f84335f4f420000000000
586347 5ffe86f2336c650855bc9b8ed6b88a61c97545f4aeb797a600d5520100000000
588347 da970ff2409f521c9e7865ce0fb7ee42b85db7be4ec2ceacc1b69b0000000000
590347 b6c7b9b9a66a325cd4bc92dbd763d75f96f6f5bccf4631057fb9cb0000000000
592347 06c3ed1138aecaa4875cd2d9e621cdb45c19ec2a9a43fbedf41f750000000000
594347 e5340096401225b849aaf110869b5df3c010ccb364b9fb5390effc0000000000
596347 ebe0e0e9223d46e96d73e00110633a305140ee16f27294005a07150100000000
598347 e8b83ab2c6540705b08216812a2814ef0aa1d41a36bb2d0ec922cc0100000000
600347 eb3f09cfd88df68de6d600e90c93da60ffbb001c78540b75ae81260100000000
602347 cde83d227b65f3e54b4ff915cd85d7f5bee600075557a1f1afcdd00000000000
604347 fb80b570790e8e634dcc561044239e0d114c08acc189dde85e167b0000000000
606347 4cd9158b04bef1b4a3d5478b88545ea40c110d18b25d59368761000100000000
608347 289337dfbe42ad22f840e2a962d8a61add66185d6c16ebf60873060000000000
610347 f25110fc397135b9056c35953387927d5749ce002e074856effe380000000000
612347 29c4fdf185592cba6c0ecffaee0c5acd987ad09439743550b0e3270100000000
614347 51d4e7facda4288c8bee9787b40078f67678a666769972527afc9d0000000000
616347 d9d98e9c2e3a8fb8a28898e7b9a3a6dd84bcdad76b506e70608c220100000000
618347 cc01edf77434adc903ac7e8f0dda79255490f8d471d9b150928f760000000000
620347 691a175f3665733ce7e56c149d21fede72f6fa60737f6b85d5e3150100000000
622347 bbc0d444aa1266b1c72c05f2fa4e3c339d308d6676b86fcce50e4f0100000000
624347 4e4f0037881c4f663646b0f3a8c4dd0926ddced1f741f12afa33250000000000
626347 3ecfd45d6a0ad4a4f369693d34856f065ed4fb26bab767fe980c660000000000
628347 91cd791ac915ed7213f61168bbe34bd208652c5f4273024146b1470000000000
630347 4c5c1a19a43480a8d61086f99b0bfc88a97670726f1cc6e935e89c0000000000
632347 822ad0ecbbcb32090128cd5a79f8cf9be9fc67143c9b8c9b7672060000000000
634347 8a0059ac116122054e5fcfde3c9c9cf69a22be20f54917bfb6ad890000000000
636347 1dd6b743e2ee46e3cc4a9a4094d8f42fa0ab0a6d1cc17ddc350c3b0000000000
638347 f3df160c48b4ccdb48bfa40c9373a913822eee3b172f98434d0fed0000000000
640347 11a4e5e0cc0afb379a76d2df43f0e79861c3530f8c0df65350ea3f0000000000
642347 2f06517a0f90e38f33db75f1f9277d6ffd3d6c0bafe4a82320e5a00000000000
644347 1e1fb431efddaf9d0abf99e4bcd399fe9bd992ceb67d31027c1f1e0100000000
646347 89a53116c2b212d9bf11599b16bb6a3314ce270b05fa4dbbb9a2280100000000
648347 4976551eec89e398a61ecf0718318ad23190ec7e2f7238320f74950000000000
650347 787ad09db10e2399a0814ca93dd2ddd9057dd5562b69ee50d813ef0000000000
652347 bfe7a9186db1ff3d3ad6605b4732b145f60285611c14f8e24e16400000000000
654347 9554b7f44e66e72ad74ed8432e646e8d6115664069424924a75b7a0200000000
656347 b9511d143ee34d8a3d636a9bf5cd148a2d3e86c8f21da70463fab80000000000
658347 df17ab12268366804301d2e391ff5f7f55a37b0cd71002d090b3140100000000
660347 7265dc092a439275617aa98ce019817cbf8c1071ad66f9bde5bc540100000000
662347 96ca1846e66c016d9d60a0c6bcf503dfa25733b9ee2d8f4d6a63d80100000000
664347 90d6b23459e19cbe4e68542bf1c618cbac87df76d2863e555f42010000000000
666347 bf612de1a5071c7eb6a90bbf70e0e039e341d8192557f1544ec7480100000000
668347 2032f8f1965677b999f251a5b96727f95e11ab1527ac0a4176f37a0000000000
670347 b9eef91410d9c762da15394a84a3580e8a91e9e0b9314741c92fd90200000000
672347 56fc84a747a98062e01878bf47be666a4a53106b650336fd4e63870100000000
674347 8fdad555952414b953f8180ff5fb262324f239790e1dd28d7ecd340000000000
676347 e4df8d3f9a9fdc982275ba5919ac36ef2d2371b30aaa517f6a520f0200000000
678347 d2cd331f1d85ab8dd008770d18a99fc6ace055374150216e911d510100000000
680347 ab0096be244239f02fb5482d2de203b6fc422ae63686a25be8c93a0200000000
682347 fc69fc18ec0d7758ddbaa8130e8a5c2a30367a706e71c54844afcf0100000000
684347 9dd9726102ab2c5a6f64bfdbde7b00a60a906e48c0fc0a8d5c1bd50000000000
686347 fbc589c42e6d1444a63fbbb3e63296099ff6db2ebd0bb7cb6d44c50100000000
688347 a91354ed140f672921107033d0552f61924b9812202bd06eafe86a0100000000
690347 3d23bacd6606bd2f294bd4f18ce4c58cf5ecf033a1e7079e50d2be0100000000
692347 c4972a460375c49e0161c0feb88dfa76e227841ede3f13b2ff33280100000000
694347 f36f71a65687b3d34a3bb3ab66d31539ef3169d86f9c24820a58d10000000000
696347 558fdd6ebceddf0fb98bc8a0313c1743a83ab24cc00c90624479b30000000000
698347 8e9517efb84549ed17f5f126d76482f63abbafc4e0b952adf852370000000000
700347 6e02754ce7f5b8373e96aae61a92cbd5cff8fed19d1ddc8d5051cc0100000000
702347 ff8e6465444794e96c3212d42bb805110c139aa6e0c3a55cdbcb0a0100000000
704347 28377c2eb4b2ccb867d3d9924d1b5ae36fbd4cb5fcc95bdcef64590100000000
706347 3d9b879e83fed62aeafa73b23d891496adde2713b5354aba37e94d0100000000
708347 7db9b67241e26b9753f25073edc3db58658beb5d47fbb7c1024a5d0000000000
710347 96c1a4d1f888bdc83fd522c6f5665976e04ad46d753fd182fe32590000000000
712347 ce91e186d658cd58aa43e50979813a19cce1dc056a335c07820da20000000000
714347 8be21d599d9ed20e0ca424f9bfc1010c826064acc222137d1ddb750100000000
716347 c8d3c35ceec2c26ef69945409d57bf9c9fcf468119fa9f4c7479760000000000
718347 fc6582b6630fcf9a6343f2a9cb4830ace00f17008b010958e3d04b0200000000
720347 f771529eed4e7514afcfc7c5d2b49b4a2ae13651cd624ed409acec0100000000
722347 e92698d2389b1080492c7ef1cc3b5e11ee675eb89aff076c53a33c0200000000
724347 d926ed6274f326d19da871b11aa1167e5f2a9edeb2ff1c1360ce060200000000
726347 60a674dcc4ee9100a391f8f1115f17f27c0bac5d54d28233cdebee0200000000
728347 928101797ff05acf92e75fb943bf7ac8b606e89233ff0f01d043040200000000
730347 469ec30a5028f108e3558663a0f7890f1e30a0458428b17eaf0b5a0100000000
732347 1dd07665e03eb0c13b213ae529fc21ce02011ba126ae960928abac0100000000
734347 e641d890ab7c64dd481f168f9cfc1eb61a4d861e91c01985f2bc650200000000
736347 22527fd9a8886766ae21f86a0a400356d33d5e2812ed7fbf659e260200000000
738347 d38187018f0af2ec3b191d6c0fb18b02faf87bb30d69d680330b450100000000
740347 7f77791e3de323d0da3a57f305590cff3c7d1589f4bf7253f70ffc0100000000
742347 9185a9b3c666ba4342a7e12ae4d2f8585b3d5b5c31aa481e0590420000000000
744347 de59f804433c7117d5b62634ba12587384e6e41a961069ce7d1fdb0000000000
746347 02af685020b3a3fc17366901f4e2e2919658945602d2d05a4087c10100000000
748347 7d50b9a5f65929c214e71017b2c46301c2611294ad07ed8aec77b70200000000
750347 c676e96c96247592bcf655e7509ba027df778aaa4022f6a3cfbaec0000000000
752347 39f022ee92703fe214cc2a118d26907865be7442cbf4e5a2e2a3cf0100000000
754347 0a9cc8aced0543a34ce62efd1a8db3857fac110b0111c2bdf9eed10100000000
756347 48f789f5a6c7bfcd1221ea73000e84f93a34e64f21c1e2bc2768360200000000
758347 407f96f51111c9aa373a81760dc5c2b92ca76270f4ce69cbe2e32e0200000000
760347 a7a5fb7a1379217381dcbcd04d08f064112b6ea4c4ed44aec865e40200000000
762347 8beced446b5cf6996c1d078062190ab8a13727c713ed8d4fea2e190200000000
764347 9de0ec9494baf64a56b2cb69b863bec17ace6b7a30daf584693c4a0000000000
766347 063ba39defd882a3ed369d7798c1767d364e472d50156051ed0ec60100000000
768347 5a8b1f5c6728b05ad616192bac40bd07e70de4fe867faa0593eee80200000000
770347 917902cdb044fec62658f15dbf9e054771fef7a3425c41f5865f770000000000
772347 7a9521b7cc72297afbdd827b50ab6f39070dec9f1b3cd703c82cd80000000000
774347 e4c65c1847dfbd343071c5a257c3b31e6c10b89fa68884af61901b0000000000
776347 c8286892c09fc883b221f755f856d6c14357de0dc125b1e7aa92fc0000000000
778347 31d4285290b1c64b6e42e4bc09af5d1caea3d174eac111363074740100000000
780347 7535dee53873bdc211af4c2e020eb0e79a3f91c9f31f5981d3e0ec0100000000
782347 3124ef709d7ee47d05e1c6b93a5a581f69f6b8b72dce0f5bf65f630100000000
784347 26af777ceb2748e90b2e568e99d9a2572ffeca40bd0acf336fc7510000000000
786347 46b5531422153d8180f6bffa2133fc79bc00d1c10eee17f96b330b0100000000
788347 339543f69123db096b726f4a7594b8340e1b323e6a216436181a510200000000
790347 00636af77d85a73eaf28e300355a24055878a27ad8295b9811128f0000000000
792347 df81a5d9e448cf341a79ab95aea6cb451bdf935fecbb302094800e0000000000
794347 65a142ec908c86fc7363cef25c179562db4642e18f9f5e8d7e61800200000000
796347 9fe05f1e1643b852bb6d3f1516ffb4e431e17c9efd8b40c06dbe6f0200000000
798347 1117d54cd06969efa2c1e6599a912e18f125c0e8742d0450e173e90000000000
800347 01568a54d402361717f53c8a95813754cd47b8ea789b8c71cce8f80200000000
802347 9d8185d50135717d926980f73e260e4e8c9a7e4e044ffb23deef850200000000
804347 b707f3dfc17a0c7a7b43375b4a4c09bd4cae6d156b3f3e1aa6eff00200000000
806347 779ee8c6d255dc02f2a6d7577fe566cdb97a4dd8b6132c0d8772f20200000000
808347 0073b058e07d2f0cfcc0640d2fcbd99848943964cedfb2358964540100000000
810347 a6034729288dc35457a0c9dad595d94c958bcbae53c6856ca6362a0300000000
812347 40d100d0e6518e66e17b78144a5edd546582c75773b1d278399e7f0000000000
814347 11d3bf8c126dd9498876a609c5e511d949541a88eaf39913d459c40100000000
816347 1d08a87bdaf7cd27e9209869276c7c390bdd924b6a0d4fde9bf3700200000000
818347 16bed5b021e2791c42207a7e878a4bcb092633b56d5f9c1a826dc10100000000
820347 a4217b90935943e17eeae15fbce000bd29f3a6afaea57621fb04040100000000
822347 50bbc0f576fc8f743d57d66bebea014a3d6509d83b2149c1dea8270200000000
824347 7728cea3a91eb07940c90cb2257c779641837f496b1ef4dacf83f40100000000
826347 e6f803e14b10c4789cff6df5b957cc2b28b08d92a08ec2ac9a4a3e0200000000
828347 5bf2688f0998ead898d196f2f7d893d5f0c14c9ff8078f0ea78b860000000000
830347 0a186e2a4d0eaaa87348411b600d3fd88ba039e39b9e7e543c296a0200000000
832347 dfd05c302fc1ad7d870f1b8efc372633d0758095e8b3a8d2fefb190200000000
834347 90ec487b61bcc957a3df6423377791cc46dfb663045a58a85f645a0300000000
836347 53c693cc2a360241920c6d08982f8f33ce5b237343c4e8815c03630200000000
838347 f966a99c96c34a3aff535c09d4b5124c8c4244095d7c91c2c1e5600000000000
840347 e37d6df6e06aa78e905ace63558a4c1dd72ee8db2dee10bdf404190000000000
842347 960d454500835572a568104d84934f863cd2ed61ffecb1c01b7fea0000000000
844347 d963790a20b01b76597e17fff1e2e1c1b9385cc3a0180412b193090100000000
846347 d55d636f83b8e4f21f81d60fae6050193dfd97712c7a4318e58bfa0000000000
848347 b7feac9c010fc53756c422ba38708fb9731c50f431a9713f85ab540000000000
850347 b3fb45f4a353125f30215f0f8891eec692227cb5562fa2fa16e4260200000000
852347 2df80c8d28adace72307236a55a0867d898f4fb75aca26599ca5cf0000000000
854347 56edcc8953e87cccc645b8a04bb1004383552536ae1bfc612652680200000000
856347 a50ef1158519e0c55902c61940cf36269a06922efb5f51b01df6600000000000
858347 4c8e82091aef4abdde34a9d3e52101bbf0b69a47e8e7046ba21b450200000000
860347 21078bf590163d56eb102934087c1e97bc5854ad17cbc268e8ca4c0000000000
862347 1b531b688d369e72a75df0a02b8410dd459b648dd69f9b891e03fe0100000000
864347 60b9038b6e992f816fe988d5ad5c57aa3e210c05bf7287f146a04a0000000000
866347 711c0140ef33550a98bbd93b3567c0481e6ded6fc7fac02a50b6be0100000000
868347 6ab9346866e3c9811e2ead0b0b19617615d59475e3c8e6cd1730190100000000
870347 f543eb14c94ef118e056457b46732bdefec10f45ad4fd32a46e1820100000000
872347 02aea767b63b97c431ade304fa3d464d98d41e0445302c3c8b27450000000000
874347 24d1472f5cc8374d5c92798175573003ad7758190cbe7ff3cb63020200000000
876347 13c835098316f0b1fd2fbdab05b75175efce23efabb5b1d41bb74f0000000000
878347 c9c5e150b27d3aabcb04fa958fdd7d933d23ebd6bceab1095f762e0000000000
880347 129e12bbe343137fc50d4966e9b43e01addacd081a586b5253ec7d0100000000
882347 e4b31985a09ee81ba00fc33cfd1e1f8b45eb1eb527fac7b2c6a9ab0200000000
884347 f25709683bca310dee7e2540b659033ae14f5f5b05a612c61bdd080200000000
886347 c3c5c5d142c96f6bd2f04208db075d9f8d8593cadb54e8fb9b33e20100000000
888347 b3be1cd69eb85a27a7a2d9199a6ada6917da5348b02913ab0146530100000000
890347 c7a0ad793f1756d82f8cf37d7a91e89bd594ae17dad72f92eddc850200000000
892347 cc32dc57e9e97e04117a57da703e87272d44d01c2a721d213ca26e0000000000
894347 0f8f646a54b35712ce5424ac0bddea2d51973d690f4ffcf3631ff10000000000
896347 710e9eaf57625a223811993df203a4e4af3f94fc3be400d8d22e960100000000
898347 e7d6812ca8455cac62cd279264e7a0cc889fc910e4326842f8f5770100000000
900347 d5062a10617e7fb970d090e2032975b48c20adf762325d3a4d216a0000000000
902347 8545fb7d71b1b0433e403b863d78771089860f06b0d5f4e3b631a90100000000
904347 3c978f6269c79f242a16b4d40d6c707318e229cbec0dac297dace40200000000
906347 004b0564fee51f61a455f8ac52bdcec44bb92219cf834f332c56610100000000
908347 ab999f43b53c5c1c6484aa3439f679c66e6495edd61a7888fdd8700000000000
910347 fafeafe2f03730fb2d99aa191ae04de180e2e54bb8e24493709dd10000000000
912347 0cd066a45d5de822dd7ce88008c52f8e77fc573c5ee4360111e9020200000000
914347 6fbc632b3ae663bade8fd23790d5b523dd1645892c2fbff98095180200000000
0 00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08
2000 00000006943381ec2cce0eaffa33d6942f7dc5aca5709ceaeb12965a128b388c
4000 000000010077a3b9fa57d018947f5b00cc7b12d91d6ded33a90c49fff54d50c6
6000 000000024c2ce9b205b74a8e926eb4a50b494a594869d407ef4402c8d5eae6f8
8000 00000000b04b1122ee7b77b29e4e46403f4c3aceaeeed01f33225c67dd66ea8c
10000 000000002c2063bab0acae547bab7e0309db8e1b7003e9c01eb423c0166d5ac9
12000 0000000067cc1b87561bf01feaa8994298def5d843015bc2a0d7f4c32967b658
14000 00000000c0b9d3fbc89700282db881fb70683ebb2979b2dda85eef0564d0ca3a
16000 000000010f50447c16305ac8e8647c09b21fbbf4eb2b62881fdba75fa4e25f42
18000 000000004b161fcca5f0cfe81173a039728e5ee82ed1593281d8564c230038cd
20000 0000000058d12a44d1a366713672d95379c5a768fec80cba757f18cb4e8d9808
22000 000000003899c470f76d26a04463c8c27105a1eab9def0e17d49b41e71e544d5
24000 0000000037d8fb731937a38e07f32d21f0d7bc3b78b86145b56aae9b1a7b5810
26000 0000000004e761893bf0658deb5b684c1170ab73ba392b5b8eff30b4e4c592b0
28000 0000000008880134f0b190b953f5214295ee28a619dca4d0141d9d506d52a99b
30000 000000007cd5903cedae0110b42fb730fcf592474e8c34ab2d76a43141679e21
32000 00000000a67b460f4b9324bf25067b0307d73459e9d07b9343156a61ff37e21f
34000 00000000771603f2cef5afa50b15dfedad494bce296266c43d4c7c5b2d3f8854
36000 00000000420e71306c28607796b0eaa667fec47265e917b7145b04cf4af0cfe4
38000 000000002269624cc2e2db0013a7be15ae7eadd351386ca58f744f028548ca63
40000 000000005a1e37cdd0c188f46940d71538391ef2dcbc6df3fc70281cedff77d4
42000 00000000504a69b7b7806e4baa8a1d76814bf96948419083748d66f43e98095c
44000 0000000009034d5ba3f2f803998972508e2ad84efb9c6f3b36b0cfd931c3a833
46000 000000000d1fcd44c6b7de2933f8e40386bf41efda2a86c51c86effff07e3296
48000 0000000068d8c0b4c5fe2f224283e54b47ee106fc5a8cccd032e91724fb97a56
50000 00000000080b65de78e9c9c17348bed8cba7763f3dc00147d959ddd05268b463
52000 0000000059b51ead905e7c85e761a148b742949513f9e185c8503a0171a4cc87
54000 0000000081726c03c18339015a1cf4a43e567535df72688f6abfed0137a08153
56000 000000004eceea0b2eb056d9ad402b8deb417253898c715d6dcbf068ba7353d8
58000 0000000067455a590d3c13f4e40daf2e767258141217b69d4f191c9ae705518f
60000 0000000040b811e068f9515807f18f6a75cd99a9eef51f98d25ab0f7cb956eb6
62000 000000000f8f06029c76d9508447230268d63cd5bba55df968362bdf91e0c983
64000 000000004b1d21b207562cd6d779946a3d71e1dacaea2aa99a45d99c64d4a3fe
66000 00000000859c501e4b9a95b82f9633dda583fc3bb3a92fc9c18fae58d10869e5
68000 00000000716201b5c016fb23a70a7c8a6fd87b8f4ae67174bac1fffb40c23f0b
70000 000000003d29173b9485d18899fd77807614b647791c92746c35fe3d0c4dcc6b
72000 00000000a13e804cefc6dba6fbcd357f21db9e92ee9e2f87202f61d7d4f81570
74000 000000008648799b9903ce36eff59cb9e5bdc2eeb87a088cd7b724f29b433e43
76000 000000006822a2505b05a2a2d0b0c14c66cf57404ff3e29078c686530f6cf12e
78000 0000000045c7989af954d5aed9d2ac6493d7c4f7a8d2b615b3ce87a3d8d29c9d
80000 000000008b3b13fc7e498ce40bec87eb95a64204143bc4c1b58b76b9c5b221d0
82000 00000000421229fd04550439fc3a09aa2df8f0ac6dfa055ee51d10756a802ff2
84000 00000000497c0b83518782abf32e4ce16bc91150746c348f560cce5a27f9f648
86000 0000000038cda949751ca3dd50596d0978d8d3d7547bc88fd0c4989cd3163a5e
88000 00000000703af636f6b3df1abc4e7a56c98fc19e11dca055556254d835d40518
90000 0000000057e825928edcb6767c85cf65ace324537b66b0e2a926d74d4c9237f7
92000 000000003cf41ae55ba0d13aa8eb32d65e3e92ef9eff0927b918383d2623ce6c
94000 000000004c61374d108e224da1ffca3b18c2c903ee7e27aff6e604ff5a79527d
96000 000000002d69a289956490450aca112334e15fd340952eb84d7669b21a284621
98000 00000000723373f3f927ac41c7dc0d7f7a9d7d18ed934c65e7a7dbe47d98c13c
100000 000000001c5c82cd6baccfc0879e3830fd50d5ede17fa2c37a9a253c610eb285
102000 0000000064ff021e57137dfafa6f707e1358077a7b918ecefd95b98c74911267
104000 00000000147de58ef81c82be57b24b9d4179b3827e80e2f8d16afd597c72020c
106000 00000000517894d7b34269795f59e9d9e5d2c047d96d13bd1410abc7b6ace5db
106580 00000000466930bb3ab4b8f1c641253615253c66c75b85ad22bcd8a0b576401b
107063 00000000003bbfff0c40aaafb99955cf9d4e0ed15a401f1cba935aaf0329cb01
107440 000000004dbd16377ad53b4e0c3efe8e1d7a5bc3af6a3ae10841924ec916c8b1
107838 0000000065d8073d89819d6e347f437659d4b0a1270037632a9ca8482b7ca917
108448 000000006197d7fd87f0af4ee483a3086b2862eb3931a8fcf1491413c0d3667b
110448 0000000029fc59b7e2ef1632039719c188222d3db08b155f2a92d5ada5effc11
112448 000000003bed417b9f2d12b904510c5d3e805d4ea43937ca0942834e9519b532
114448 000000000a04381cd43871422b54d493eafbc82e26bf2932c690f29a52585880
116448 000000002795baa46a78dc9745b8a93beb063ae222fd94336effa74e6ab07a9e
118448 00000000325792ae3036fde44ac8110daebdf66939c21b60e19601bb2dd6a801
120448 000000001525d0789db0df01c21c4763072d3aee9eda9d8464e44e154f01a8e3
122448 00000000192782e0b2b3eec7090ea920f9da3707177565306b2f4e1eb47977dd
124448 000000001b9ee81b538a2d3581ceb168075b799e0eb6d85f08d446d3458df6de
126448 0000000013d4dd9b9edc595ac42e05f47801fc4c0140524fe7e532caf955f10b
128448 000000002c5e1ec3fadc3282db87b5b9f2d46a1e49e15cad08f41ca0a33db6f0
130448 0000000005423b56979a957db2044ab183ea2e75d0ab22e9a2b86e51a280ca3d
132448 00000000338cb55e90e2bdc8ab36c856207aef9cd06d89108ea38c1044bd00a9
134448 000000002a1b655ba493cbb9d4e505a32b259f83f1c4da3b3b9e2b7a3ccebfa6
136448 0000000003521b02ccfd319ce9a987de31e3ee749c00f6d3bad21887bb86b0c3
138448 000000000dcf8c2434479706f78b899938a28d6b9bfe4ada9676a2fbc21241d2
140448 0000000016ff9c3efc3431acce98169b38976bb8ec692eacf7d492f784259f7b
142448 000000000fe72155b21f14b544e3a126e8f039c5b5797c2458fac724b074af52
144448 000000001a9b906503b1283ff14521f72518022ff99097a87435cb0c10b15c94
146448 0000000016fe15b732315c302ca019aa83faacd2e444a194f0164580b3331457
148448 00000000194e5af4bd5f5ba9a53cb1c67efa1388e1f7d76c6dd12cc406bffb5e
150448 0000000018538d32e5a432c036498a242d609531931bd0ee72dea785ce56b33d
152448 0000000006194f852b0d8cb26d11715c181d3009cd36fde51b06dc7fa3787c84
154448 000000000a78017a3fb5f12190a517b91b4b05bdff67fc742cdfccafd5e4fcec
156448 000000001a6b742b17d18b01779f6b90a7adf98bdd7f0d2185fb3e8cbf1d6a88
158448 0000000019a3dfddded4df9628fd332fdb55bcdc457a464fbdcfd9852fab3e04
160448 000000000065e4dc49b6d5f4e788be5c53324e1bd1c6918126a69d1d11945211
162448 000000000f74c0c0afe00f509b3fb97c2099206122c685a6a3eef4bfd38db436
164448 0000000004373b3a3fbdf7018c8e1a8f7c92dd3b6d8c671c318d101a282196d5
166448 0000000003909f618e3c94d305eae4bcc8bc0b5d0311af325971f367c964b423
168448 0000000011822f41b6c2960f5198191e103ba40c65ad1e80b126489806f3fc07
170448 0000000018e9fb71c042efda253c7a63f5a7ffe686b4aaf6fbd78fa007fb2f44
172448 0000000013c86d37ad2cb6867ffed4cdabaf67673fdb98df4a93296583034591
174448 00000000176ef8fca06ed29fe05ab0dad98c60b467690787657a18bd9f39e1a1
176448 0000000015b930f909c9449ebbd8a7df888446b5e9ea55a236c21211cb9303c8
178448 0000000006618e96ece47919b2edd27d04fdc4ea77b700a2e2a7f9522d088f2d
180448 0000000001a262958ecd70f31035ca1f22a2347970b71ebc7b857f8a62bc415f
182448 0000000006a28a2ca0b777dc802bcc6b370c9f6fdfe72f5e8144bb8b93898a8b
184448 0000000013b44d3f6eb640047d13b0f988987133c5eca44f18756cf0c13849dc
186448 0000000008dcc83c93713f1c9f63938b1703299a3230ab1734136479a6fbfcd0
188448 000000000b141e076defc34cf9b66d398309657cfe0d907ee8f0f05c4743bd7c
190448 0000000006dd174a87ece667a47f58b1723bf17d430a8347d6432924a4f71a82
192448 0000000006d996b4c3d8ea82438211da02b6e5b21d4a074aef86ce133f7a50af
194448 000000000f655f25dcfa3b433933cfc58f29fd7b3db6dea4216451440e0d61da
196448 00000000016cbac1190ffb8def56567a849b9d07b5164bd54d7d284a4766b68b
198448 00000000095f1a36d3f8edf8f89e0958b1bba7bd3effcfcce2dfcd19008ad803
200448 0000000002f8a0104e4a806ff92446060674b2f674a61b15a8474c8cda976826
202448 000000000baf5010f622dd2cf42b03773ead885724555aa5578ef140018618cd
204448 0000000000f406429a20ca1189164f5bb36714fa055f7a4fb5e0e7231bd5202c
206448 0000000010b0831b3aaddd2f8ead9100c3fb575d475d740bca14fbcbe203c814
208448 000000001487cd06ca9992bcaeec5c805e7435e34c23ccca32a8278423607018
210448 000000000ffd473d57fcdd4163fe4310bd48f513bbeae52186271fc855c37885
212448 000000001633d3fb19591cdfa823e43f23f742ed8cdf6e400b25518bb982656b
214448 000000000d2e48fcddec0a1f40840c1fb2700006b7d7347a1a0a5ea49736ca87
216448 0000000010fbd67b03a7e49f7dfdd90832f6c339aff1109b141bef041143d09c
218448 000000000fe1994865c8c7acd7f30bb8dacd4447c2c793c15cd93343e44015e2
220448 000000000ea695453fa54e8d1a119fa6e0b089e74ea563fab04bca9e0a46c3f7
222448 000000000ea5defc8ca77e4bd26693405c1f47f9840b9d851748e3f796f9359f
224448 0000000003050c5405378949d69c01783afa2c7adc91464eb88d6af51cd107cf
226448 000000000b2e782e07e02ac97f8f8b7e08fc60e3b8722e79eafde49c1dd7216a
228448 000000000ec988418ef79ca08baec10572a9d8e428d1d3e285a306212b4b9747
230448 00000000014d385e6d6be6efc598daf445b1df191954353ef6808b155acc9ff6
232448 000000000e4184af14aa75f7db9d5b959ed50211f439eb37efee136bcdf83734
234448 000000000fd7bcd073366511b72e305c5ff5e5fee15f5adbcd09d0cd2ec43bc0
236448 0000000005477b1016f160bed271695c5cce271f964b010887548aaac99a2b94
238448 00000000088e75959bb1ebe8143626a0133933421c78674baa304f2f4e2ea51f
240448 00000000011ca234fac9e0979f3ff94338e8d012440c0ec0326b061b7b333d27
242448 000000000d8593a086c62f637b880aace6df1df865d53150292a4e929babeeeb
244448 0000000012d626a66a477fc9c771993a353f362160d2f918755d5900b3101211
246448 0000000004667b6a25ed105584acbc91e4fc540c34acca07675c12309227a188
248448 000000000d25c3044591316857528b526d382da8e0f0894e5acbeb9158aa412a
250448 00000000067603d25ec3c15d08d0319b2574fbd37978f33785b1e3f417c0444b
252448 0000000011301bb486a6bceac4d30a131aca793f440c552d50be96b0579e2f72
254448 00000000127a7b18746b73ae6b16699f5987f78991c95549a003eb63b86182f5
256448 00000000066d904203451e5a567c13a8f5f5cd47bc0892d7c6ffc77001316b3b
258448 00000000017d607356f20f7aefc8935e833e3586ba93dd7299d91af80b857b98
260448 0000000000032f8d020d70524847b7f37c639d8e4f8c54c99881a02eff4fb7a8
262448 00000000069fba797c8950648341565a72a152a626626f1169a7b1b5b696e807
264448 0000000001b4c29d54ecbb548f526206919db8bf1f3a6f33a97e8260a62eab46
266448 00000000108e0ebee4284570fba5f6f56f40eb4ffa0de500516c53d4f67eaa33
268448 0000000004a7423967c803de102175a45e96b24eff607ad1b8557dac669b30b9
270448 000000000f8fc7fd94d963ed82262d049f92a380f07b588a7eb6b427d503a86f
272448 000000000bdcea2b1cc34ce9a6183209be5a6f7e7660a682726087b46d9508fc
274448 0000000009704a721432f1aeec601af8273f654553d4f91e563c5bf1b64705ec
276448 0000000004c207dba4814f2b1651ae6520b3553fd70b556b8a739fe774514dcd
278448 0000000007c5ee1f288fc5eed9de34c4ac152c91a3d8b357622512a2fa7fd9b3
280448 00000000054582bbdc73bc329274ddba7bdb1d062ec9d1e30f2c1879ede73950
282448 000000000e023b0d36df848fc896c3468239c6daa34c1a9f0b58ff53d3487f67
284448 000000000ae818b1f7b3bc23b80d8565aa7fd2b3dd61e0a7b8de2e1c43caf37b
286448 00000000038b78083c1a2a46024afacc781851bafcda7d11e691c56c158d5926
288448 0000000005b6c870ed52d6b240804dfb47b02f1a0a071e33431c39dd79646473
290448 000000000bf0137642f16c83a25a505b30dbe14390312207218a7d8aebda3db8
292448 0000000006bcfc7fdfb10c5acc0e98e630c54ec185f5b22c2227b965c0cb3ee7
294448 00000000035cdb9e87b483b0524bd82d3427946b5507805bb140f1fd2f81cf31
296448 0000000001938866f62828b7c8f26596a873f774ad66777067c8e0ec2e6f0218
298448 0000000001f536cffe140453e10791693d780cc644e656ee892990d3fc66fa7e
300448 0000000008c30f623ae90222b41d17fe385ae166321bf640d8c679285747c09d
302448 000000000836586a9f35b1e8b753f9d6905a67102710cd38fffbdfbab07387f1
304448 00000000070d82d9f0e882975c54395a520884d2c8b6587a8096d77844529ac3
306448 0000000008c6df2a0eb43e1748b0cf22fdd7150903c771b23c7fd9287fbda158
308448 00000000084546b74fe472607536de4580fee43ab77d8328fd1c53bbdaa27462
310448 0000000004dfd00ea0d49314c8757d512b8f55dfc50105e4c746379699595368
312448 000000000b45b7d7bc0831544ca80e09a97172be8296fe30b8d1299cd0ecb8c6
314448 000000000c6c73e5b98f56b25077fac9736602d911666abd43e83372cf321751
316448 0000000002ca38c0c3e06ce82aef95089429403381acee8614c15d064c6b4198
318448 0000000005133acb0b295c181a71053ec014287a826b0be47ed0ee9b83ce2297
320448 0000000010a837e279a0f2515c7255c4fbef2ee84971180f1b4a30db3efc4f7f
322448 0000000005fbb8bd08a55762af3d695567c5aa64cf2c9f54d1ac1d895f6da1c4
324404 000000000ce40f7a1f2210448f3904c9449a30f5cc4dd1c47b98b125a6ba6af8
326347 000000000c12f0e64e74bd29226447803433179632dbf178c4524b608de0cb44
328347 000000001020964e5ac7f43b988428feee33d531a516eb019f22a4a8f9c85871
330347 000000000a09c3e55eb31786e7743498ffcc6c15f085834816bc2b889122a9a3
332347 000000000f38eebca7d490e289b28f5181051e7e901892346c49fff7716294a1
334347 000000000811b87acdbd90a17076dfdf73aba7d8619cc4143c60a8507a8567c9
336347 0000000004c09e85e25c2bb6d7ef80975ace0a0cadabc268c73438221e0c1fdd
338347 000000000a3bdbe35f67e13aa8517b880ff47da45d688486f235aa1996265286
340347 00000000006650d9b2f120eb58bca85062d95cf173e92f3faa0dfcce33f0ec1a
342347 00000000098fe5f6315da31a343584002584d9745fc336ca6c5594a7f6a1e815
344347 000000000d62916d52f467c5254e1dac807f3e6a3eab26478255251582eb8199
346347 000000000021f1807259decfbca62aed70514abc6d4026593863156d71558db3
348347 0000000006088d315ea8574b4fad3ea19bd17bc19aa62b921dbae4173936a5cd
350347 000000000a0dd0fbb475a388365e4afe70bd2c69abd2bf76d64ac8f987e19faa
352347 0000000005aadf94d1cc98af8080c72b2788fb380dc9e4ebf1fc2810c218580e
354347 000000000319409b66bd2260e1c415a250e76b4ac4ea9ad5a5a34b7283e65129
356347 000000000e2ab9248217a5055ae723db90ede5d80556c196b9ee9276c7399042
358347 00000000061009cbbcb8249ddc0f69406bc98baf66f6427fa2f7614a28374d63
360347 000000000a21664b72657232aa29813c8edca4e470fb0731387294eb9dc4755a
362347 0000000008c264a20cb8c3526a6f41540c34a2916ef60afd9f2b2939b2c6529c
364347 0000000006384953a93daebb1d016d2934fea0c4d1baa7c0de43ad9206335105
366347 00000000082572307e4c4a2611ae84738ad500e0df83744a307c91d3e4ef138b
368347 0000000002c6bda7f94baf67c098293059fa82083282eaa0fd79d12d66bd64b5
370347 000000000650833048967a0608b282fcdc4588aae464b8fd62a334207b344095
372347 0000000004995ecc589a37e4bd62bdd554176422b18eb3a9a6c0a4fd6b5cb646
374347 000000000753f014f6dab11dc8300caa4069ae0cedbdc6f85289e908800ad1c1
376347 0000000006dbbdcead5cf21a161e33fc39857c45771388bd7b6fd8e64aae7f30
378347 0000000005c26313d97bf80936d3eda26f148d89325b15aaab7a11bb6937b73f
380347 0000000003f93ec2b969542317dfe73abb0965a9fcedf0eb41011c47f01bffe1
382347 00000000040a6a7a088519797a9916301eea5668cde63d0ff5ec94952aa4734f
384347 0000000000bfd6dcce91d65eb2f3b41e97124731915649fbe4323cd8f6d7eec3
386347 0000000000eba7092da0894f9f0b2986594444a7203fb8ead455375ef5766536
388347 0000000004eda3fe4b870449a0540b6dc53d797b4927dcd9d1c29d6a3caca93f
390347 000000000500444046a1a152766efe751431b238e6d6d9fadc4c946756b1b339
392347 0000000003190c01f24c43f91f6250ff13ba5ad4053783d4bf7a4acb3e418bf2
394347 0000000004933fbd5fbddfc52592d984e664ec921564a322e83902f3c74b4fc1
396347 00000000029ee4ab2d770888ccb96fb121fcb989b381010693235ece647bbe24
398347 0000000003cd7ccb49918a1c04b3a13bbe589a8c31f2443a39fb17104599a973
400347 0000000002b0dd774649844e0c9a7e11cdf6fba0a82ff8ef0a6bbf2c1cdc5e68
402347 0000000002c8abe824e2752543353b595c820343980e992a2bf35ac9c33e8d3b
404347 0000000001e9179989381cc31a340321771eee7b1398368fa539bf4ba068218e
406347 000000000230101da3817a5325e9e7995eec61b3b00dbe9beff93e64ae7edbfb
408347 000000000439c3846eabb460cb9af7512e465b38b4adff161da7213922220259
410347 00000000016a988f522241c3c54a3d1ae5a108836bcdda47a033fd7cf61928fd
412347 0000000002aae4c427500d47317adc982c87e33fe0bbec14b2a794d022403aa8
414347 000000000180bc16a89e1ffbb9b6bac932ee3c8ec0901b08947830eadd2e2780
416347 00000000020a44c12d4014eec4c04433d7d391731dd3b87a64f9f6ef0195ae9b
418347 000000000135889c3d1da03b18631771165be628b9b8a55e80e5abc1b913b98f
420347 0000000001c3f2c564e1a31c58689c9aa46531afae27bea8a28cc1504fe026ab
422347 0000000001d105d76e56b425257228b0e68f0d279088a95b1a1d4af88bbaa42b
424347 00000000022e9f97900c9bd37f401e5a7383758ee118743e913320c7f9fc0f72
426347 0000000001acaae84bf8ee0ba3cedae98debef360960b72cdb2db92217a110cc
428347 0000000001193a388348ddcd93a6956a70df03b67cf7f3c73116b53f7b1d8910
430347 000000000222febc067fb5ba83bb3f79ab8e23b7fa9f4a9d737d3f48539ffbac
432347 000000000286a33ff2a2e966d5b70ce3a41b5d6287ee4ab66b295238d1568007
434347 00000000025c6b484e433e4c76643c2053acde2b1cf0299c7ee98e81d89ca96f
436347 00000000026fdebc09525e602ac5e30b9efe80adbaa1502546d3ab91cc829adc
438347 00000000025eb7b3394e844e59d4e2170098dcc64b8867f577dfc06eee7e3eff
440347 0000000000255f7063bd19d5333d956200da8c5c71a30f4e6620ddf2da13c557
442347 00000000029016376dbb49bd69f497c1b064f1daac913bcd2d4d26910ecbd60b
444347 0000000002e3107bc7c62a0062643c96cd5991dddbc2e67d77f5c9d021b8ddf1
446347 0000000002e5728af6500ea14e9737e766fdf46ab154721f1039922cccc4652f
448347 0000000001cf17f9395eb541b937b46b3d1b2a8ce67e893fd6766631b04948d5
450347 0000000001ea9a4e64cd411370e3acd7daa349a482fae2e0577bd5873eaa75c5
452347 000000000017bb15179a875d806ea57803a7966ebbd89dcdab42607526519baf
454347 0000000001f03411d75e053a4af2bb862667732146b9f9a18dae7514a7ad213d
456347 0000000002126ee3d60b9b383956b6f1ce53f911ce65cb183bb8391a5af3d8ca
458347 00000000019642be5fd9575bfb974f98186a70b04bcb9af3055aa4608785345b
460347 00000000000b94f3cc9520b3ebe381521adae730c1039b031c196d17c073ebb7
462347 0000000002b50cf8a0bef0225f59b1f8ec4f2e30c466a2bd523e47a2c96594d1
464347 0000000000b68d0fd59a4d3a384d1032d8d37f8a0e9b75c066d97c4bfa93514f
466347 0000000001c8e0ad3cd919009f48a1225d7b0edf6da525dac11faed4decd9e36
468347 0000000000984d5209c3f73aab2a747737fd7a8d0643b5da369d1d8c3652cb81
470347 000000000131ee174b2ac2e5aa51aafb55928c52db159a38cfddeadcc235d329
472347 0000000002b2f30814eeb808582abb168e2b118c6031d088a4ec3cd2c74c353a
474347 0000000000a10e3cd6674661d25741934ff37aa2834315d3d575527a4a117832
476347 0000000000599e81bf1751b9beb17dd1c8aaef9520f174a11b5bb4ae09e4f4d0
478347 000000000190c6150878bad1e6fa6aa67786c6f04195affe51f4b82b83966fe0
480347 000000000229b7950c0ccb934ad90df15f64883ff8c5569bac5fb6295c803bb7
482347 0000000000ee94015083b3d333bb553701428d60a2e14ef709fb0e06f52acb8a
484347 00000000013bbd382ed95b391cf9512f305c73b3c8eb7b584c2ecabb0eccb2f3
486347 0000000002c6ae457f4df347472309aeff171d42a4c98acabf149043404dd85d
488347 0000000000830db95bf626da3d29b6ca17db1934e86c557980a44bc97caa2e79
490347 000000000031308d45f32d8b12bd605ebc4fa8289bb40d5c405e378140fecc8a
492347 0000000001b1af24cd8bdc7da6c3b4a554a1fc771346e3ef2878eec0aea6090c
494347 0000000000f89b9cfccb849824e531002cc5aa79ced56a6b0007c3ebaa405e9c
496347 0000000000551b2849303a61975dbdde2e0fbe936b2a05999c87c5d3e1f71b9f
498347 00000000006e0096b992738e513f0b6344e0d8aac17082f305f83e8608ee9664
500347 0000000002a5b1268de2f3944a6e80ae06f18eaa5973f0042722e9e823056e15
502347 00000000010a594756c357868cc9c071e7e8e44387545635448f5e44df0792e0
504347 00000000012bf60109a4db2c32cc83e0e5b391db7e1d4a0d39ce9a82526ea8f1
506347 000000000215f12b057d9ed6d61cd96e8acd8dc15ae2e7414f2d8d4db8900700
508347 000000000033a0e2a93bff34d550194a3bcbcf4c501c8712c80d26b7492c5e50
510347 00000000008492309ae8040c8f7e41efdbf70d0314f30758101f48d4539ee784
512347 0000000000bb7b8fc146fdf4be490990c1e0f4562fe2720c8e96a798a9dd0ac2
514347 00000000023405ddc58b54f44c220aeba7e4f8ec762daebb4595b7e4a7404f21
516347 00000000002daa39b29de624a273ee56662ab2e77e798185b787c0338a5ad31d
518347 00000000019908ed393ba0e484ce18d63cefacd1e5e73287d152388649edfa8a
520347 00000000000068edc453485003afb36ccfb0628da11a3c6d80e66afe07a8869a
522347 0000000000ef7faa5f47c3dc301343cef32ed71cc39c3e6059a6514054e2fd37
524347 0000000001840c123f46193508c7394fe656e1bf88af3406b5f3a1cae72556fe
526347 0000000001ffba3590d9f5db68d3782f89e08b90ceff33ceaf8ca3b0b3e34480
528347 0000000000c96ff0037968aa0f0585764c0cca7a0cbb3151d31d783c786e4b58
530347 00000000015ced97a6022bf806e96a22dddfc406e5e20d619a41e02fd910ad56
532347 0000000001f8dde5691a0861b33b05183194f0b0f11654094fdf62e7715540a4
534347 0000000000ebce91b05b5d5578f8db3475515b83b4aa800da7254ef096c77bdb
536347 0000000000f4b7ff657483f892ddbd8c6284fd49b65fca03f4adb822a15546c7
538347 00000000012c7ed8cc393ae493732bb48e8ad27c7c9009ba0cc207c9ef2b5a5a
540347 0000000000d15ea8dc977c0c14d8150d18f4c7606db129ae0fb93d82740c0765
542347 000000000196010d90ebc872a8bb5b3c646928aec30de9e39f4b5957e791699c
544347 000000000051ecf93645eef1a947ae9c614e5252f06b399268dba91d05eabbad
546347 000000000178d8625b8f48891ff0b067a4f356fa9b13cabd006c421bc8db6955
548347 00000000009998fa6d31f53a87abeccb575e44bb758eb4b40eb4aac3edd607f9
550347 000000000087334ba5abfe5147da8d54cdb02da6ec6765ac98d8ecc15f12dde4
552347 00000000000e6bc852bcdc4cc74f4f11e5b6adf6972ad0287787873c00116b98
554347 000000000176976d80e6e1b0512b8e0a8872b2d436e2decdf5fae0bbc55fbed5
556347 0000000000059cb9b02533b7e9eb49b52a1d8f0912eb7dc5e108a5b0ed6a44fd
558347 0000000000368eebbb71f938c52ed5e2661a41792619cc0091016029a434e753
560347 0000000000517ec9fc0fc1b521eabecfbfc3d41d9b7af72c07956b19d23bb22f
562347 00000000016aa344b367c7681423ee13ec98059bb4f52408cb10bef85fb3caf1
564347 000000000149ebe42d6a68b619d6cd1c96c8dab10826c8c2509501a92c583174
566347 00000000002860be9dc3cf669329c31e8bff4c4804321fcbb497d9f04c3ce8f5
568347 0000000001466e757ee5684d47344e5c0560b96bbec6ee5f2677e74c253179ae
570347 000000000178b485f461592742312e2dddb19097c46e2c35b30cafc063a3e30c
572347 000000000138dce3ef4240e38eaf08352d12f3c2599d6318a5bcbd61a98bd3c1
574347 00000000011bfe4c5b7fd80cdccd7c3a718b5b3348cc8fbc77ff5a884168790c
576347 000000000078f57ef2b875c0426c0e20723b623f14cb1d858071af7867408046
578347 0000000000723d60464f5508b80420f7305a13a986812c882f0c2cf450ca581d
580347 00000000016b90c689b8aceb3f5616b5403746c70d4332d162b5aed4bb9352d0
582347 00000000003c6cbad0e9a0120c39f2d5bc93f329a4809eca8119391f165550bb
584347 0000000000424f5f33844f931b579ef56cc4661f83998bc1ba97a7752a86a377
586347 000000000152d500a697b7aef44575c9618ab8d68e9bbc5508656c33f286fe5f
588347 00000000009bb6c1accec24ebeb75db842eeb70fce65789e1c529f40f20f97da
590347 0000000000cbb97f053146cfbcf5f6965fd763d7db92bcd45c326aa6b9b9c7b6
592347 0000000000751ff4edfb439a2aec195cb4cd21e6d9d25c87a4caae3811edc306
594347 0000000000fcef9053fbb964b3cc10c0f35d9b8610f1aa49b8251240960034e5
596347 000000000115075a009472f216ee4051303a631001e0736de9463d22e9e0e0eb
598347 0000000001cc22c90e2dbb361ad4a10aef14282a811682b0050754c6b23ab8e8
600347 00000000012681ae750b54781c00bbff60da930ce900d6e68df68dd8cf093feb
602347 0000000000d0cdaff1a157550700e6bef5d785cd15f94f4be5f3657b223de8cd
604347 00000000007b165ee8dd89c1ac084c110d9e23441056cc4d638e0e7970b580fb
606347 000000000100618736595db2180d110ca45e54888b47d5a3b4f1be048b15d94c
608347 0000000000067308f6eb166c5d1866dd1aa6d862a9e240f822ad42bedf379328
610347 000000000038feef5648072e00ce49577d92873395356c05b9357139fc1051f2
612347 000000000127e3b05035743994d07a98cd5a0ceefacf0e6cba2c5985f1fdc429
614347 00000000009dfc7a5272997666a67876f67800b48797ee8b8c28a4cdfae7d451
616347 0000000001228c60706e506bd7dabc84dda6a3b9e79888a2b88f3a2e9c8ed9d9
618347 0000000000768f9250b1d971d4f890542579da0d8f7eac03c9ad3474f7ed01cc
620347 000000000115e3d5856b7f7360faf672defe219d146ce5e73c7365365f171a69
622347 00000000014f0ee5cc6fb876668d309d333c4efaf2052cc7b16612aa44d4c0bb
624347 00000000002533fa2af141f7d1cedd2609ddc4a8f3b04636664f1c8837004f4e
626347 0000000000660c98fe67b7ba26fbd45e066f85343d6969f3a4d40a6a5dd4cf3e
628347 000000000047b146410273425f2c6508d24be3bb6811f61372ed15c91a79cd91
630347 00000000009ce835e9c61c6f727076a988fc0b9bf98610d6a88034a4191a5c4c
632347 00000000000672769b8c9b3c1467fce99bcff8795acd28010932cbbbecd02a82
634347 000000000089adb6bf1749f520be229af69c9c3cdecf5f4e05226111ac59008a
636347 00000000003b0c35dc7dc11c6d0aaba02ff4d894409a4acce346eee243b7d61d
638347 0000000000ed0f4d43982f173bee2e8213a973930ca4bf48dbccb4480c16dff3
640347 00000000003fea5053f60d8c0f53c36198e7f043dfd2769a37fb0acce0e5a411
642347 0000000000a0e52023a8e4af0b6c3dfd6f7d27f9f175db338fe3900f7a51062f
644347 00000000011e1f7c02317db6ce92d99bfe99d3bce499bf0a9dafddef31b41f1e
646347 000000000128a2b9bb4dfa050b27ce14336abb169b5911bfd912b2c21631a589
648347 000000000095740f3238722f7eec9031d28a311807cf1ea698e389ec1e557649
650347 0000000000ef13d850ee692b56d57d05d9ddd23da94c81a099230eb19dd07a78
652347 000000000040164ee2f8141c618502f645b132475b60d63a3dffb16d18a9e7bf
654347 00000000027a5ba724494269406615618d6e642e43d84ed72ae7664ef4b75495
656347 0000000000b8fa6304a71df2c8863e2d8a14cdf59b6a633d8a4de33e141d51b9
658347 000000000114b390d00210d70c7ba3557f5fff91e3d201438066832612ab17df
660347 000000000154bce5bdf966ad71108cbf7c8119e08ca97a617592432a09dc6572
662347 0000000001d8636a4d8f2deeb93357a2df03f5bcc6a0609d6d016ce64618ca96
664347 000000000001425f553e86d276df87accb18c6f12b54684ebe9ce15934b2d690
666347 000000000148c74e54f1572519d841e339e0e070bf0ba9b67e1c07a5e12d61bf
668347 00000000007af376410aac2715ab115ef92767b9a551f299b9775696f1f83220
670347 0000000002d92fc9414731b9e0e9918a0e58a3844a3915da62c7d91014f9eeb9
672347 000000000187634efd3603656b10534a6a66be47bf7818e06280a947a784fc56
674347 000000000034cd7e8dd21d0e7939f2242326fbf50f18f853b914249555d5da8f
676347 00000000020f526a7f51aa0ab371232def36ac1959ba752298dc9f9a3f8ddfe4
678347 0000000001511d916e2150413755e0acc69fa9180d7708d08dab851d1f33cdd2
680347 00000000023ac9e85ba28636e62a42fcb603e22d2d48b52ff0394224be9600ab
682347 0000000001cfaf4448c5716e707a36302a5c8a0e13a8badd58770dec18fc69fc
684347 0000000000d51b5c8d0afcc0486e900aa6007bdedbbf646f5a2cab026172d99d
686347 0000000001c5446dcbb70bbd2edbf69f099632e6b3bb3fa644146d2ec489c5fb
688347 00000000016ae8af6ed02b2012984b92612f55d03370102129670f14ed5413a9
690347 0000000001bed2509e07e7a133f0ecf58cc5e48cf1d44b292fbd0666cdba233d
692347 00000000012833ffb2133fde1e8427e276fa8db8fec061019ec47503462a97c4
694347 0000000000d1580a82249c6fd86931ef3915d366abb33b4ad3b38756a6716ff3
696347 0000000000b3794462900cc04cb23aa843173c31a0c88bb90fdfedbc6edd8f55
698347 00000000003752f8ad52b9e0c4afbb3af68264d726f1f517ed4945b8ef17958e
700347 0000000001cc51508ddc1d9dd1fef8cfd5cb921ae6aa963e37b8f5e74c75026e
702347 00000000010acbdb5ca5c3e0a69a130c1105b82bd412326ce994474465648eff
704347 00000000015964efdc5bc9fcb54cbd6fe35a1b4d92d9d367b8ccb2b42e7c3728
706347 00000000014de937ba4a35b51327dead9614893db273faea2ad6fe839e879b3d
708347 00000000005d4a02c1b7fb475deb8b6558dbc3ed7350f253976be24172b6b97d
710347 00000000005932fe82d13f756dd44ae0765966f5c622d53fc8bd88f8d1a4c196
712347 0000000000a20d82075c336a05dce1cc193a817909e543aa58cd58d686e191ce
714347 000000000175db1d7d1322c2ac6460820c01c1bff924a40c0ed29e9d591de28b
716347 00000000007679744c9ffa198146cf9f9cbf579d404599f66ec2c2ee5cc3d3c8
718347 00000000024bd0e35809018b00170fe0ac3048cba9f243639acf0f63b68265fc
720347 0000000001ecac09d44e62cd5136e12a4a9bb4d2c5c7cfaf14754eed9e5271f7
722347 00000000023ca3536c07ff9ab85e67ee115e3bccf17e2c4980109b38d29826e9
724347 000000000206ce60131cffb2de9e2a5f7e16a11ab171a89dd126f37462ed26d9
726347 0000000002eeebcd3382d2545dac0b7cf2175f11f1f891a30091eec4dc74a660
728347 00000000020443d0010fff3392e806b6c87abf43b95fe792cf5af07f79018192
730347 00000000015a0baf7eb1288445a0301e0f89f7a0638655e308f128500ac39e46
732347 0000000001acab280996ae26a11b0102ce21fc29e53a213bc1b03ee06576d01d
734347 000000000265bcf28519c0911e864d1ab61efc9c8f161f48dd647cab90d841e6
736347 0000000002269e65bf7fed12285e3dd35603400a6af821ae666788a8d97f5222
738347 0000000001450b3380d6690db37bf8fa028bb10f6c1d193becf20a8f018781d3
740347 0000000001fc0ff75372bff489157d3cff0c5905f3573adad023e33d1e79777f
742347 00000000004290051e48aa315c5b3d5b58f8d2e42ae1a74243ba66c6b3a98591
744347 0000000000db1f7dce6910961ae4e684735812ba3426b6d517713c4304f859de
746347 0000000001c187405ad0d2025694589691e2e2f401693617fca3b3205068af02
748347 0000000002b777ec8aed07ad941261c20163c4b21710e714c22959f6a5b9507d
750347 0000000000ecbacfa3f62240aa8a77df27a09b50e755f6bc927524966ce976c6
752347 0000000001cfa3e2a2e5f4cb4274be657890268d112acc14e23f7092ee22f039
754347 0000000001d1eef9bdc211010b11ac7f85b38d1afd2ee64ca34305edacc89c0a
756347 0000000002366827bce2c1214fe6343af9840e0073ea2112cdbfc7a6f589f748
758347 00000000022ee3e2cb69cef47062a72cb9c2c50d76813a37aac91111f5967f40
760347 0000000002e465c8ae44edc4a46e2b1164f0084dd0bcdc81732179137afba5a7
762347 0000000002192eea4f8ded13c72737a1b80a196280071d6c99f65c6b44edec8b
764347 00000000004a3c6984f5da307a6bce7ac1be63b869cbb2564af6ba9494ece09d
766347 0000000001c60eed516015502d474e367d76c198779d36eda382d8ef9da33b06
768347 0000000002e8ee9305aa7f86fee40de707bd40ac2b1916d65ab028675c1f8b5a
770347 0000000000775f86f5415c42a3f7fe7147059ebf5df15826c6fe44b0cd027991
772347 0000000000d82cc803d73c1b9fec0d07396fab507b82ddfb7a2972ccb721957a
774347 00000000001b9061af8488a69fb8106c1eb3c357a2c5713034bddf47185cc6e4
776347 0000000000fc92aae7b125c10dde5743c1d656f855f721b283c89fc0926828c8
778347 00000000017474303611c1ea74d1a3ae1c5daf09bce4426e4bc6b1905228d431
780347 0000000001ece0d381591ff3c9913f9ae7b00e022e4caf11c2bd7338e5de3575
782347 0000000001635ff65b0fce2db7b8f6691f585a3ab9c6e1057de47e9d70ef2431
784347 000000000051c76f33cf0abd40cafe2f57a2d9998e562e0be94827eb7c77af26
786347 00000000010b336bf917ee0ec1d100bc79fc3321fabff680813d15221453b546
788347 0000000002511a183664216a3e321b0e34b894754a6f726b09db2391f6439533
790347 00000000008f1211985b29d87aa2785805245a3500e328af3ea7857df76a6300
792347 00000000000e80942030bbec5f93df1b45cba6ae95ab791a34cf48e4d9a581df
794347 000000000280617e8d5e9f8fe14246db6295175cf2ce6373fc868c90ec42a165
796347 00000000026fbe6dc0408bfd9e7ce131e4b4ff16153f6dbb52b843161e5fe09f
798347 0000000000e973e150042d74e8c025f1182e919a59e6c1a2ef6969d04cd51711
800347 0000000002f8e8cc718c9b78eab847cd543781958a3cf517173602d4548a5601
802347 000000000285efde23fb4f044e7e9a8c4e0e263ef78069927d713501d585819d
804347 0000000002f0efa61a3e3f6b156dae4cbd094c4a5b37437b7a0c7ac1dff307b7
806347 0000000002f272870d2c13b6d84d7ab9cd66e57f57d7a6f202dc55d2c6e89e77
808347 000000000154648935b2dfce6439944898d9cb2f0d64c0fc0c2f7de058b07300
810347 00000000032a36a66c85c653aecb8b954cd995d5dac9a05754c38d28294703a6
812347 00000000007f9e3978d2b17357c7826554dd5e4a14787be1668e51e6d000d140
814347 0000000001c459d41399f3ea881a5449d911e5c509a6768849d96d128cbfd311
816347 000000000270f39bde4f0d6a4b92dd0b397c6c27699820e927cdf7da7ba8081d
818347 0000000001c16d821a9c5f6db5332609cb4b8a877e7a20421c79e221b0d5be16
820347 00000000010404fb2176a5aeafa6f329bd00e0bc5fe1ea7ee1435993907b21a4
822347 000000000227a8dec149213bd809653d4a01eaeb6bd6573d748ffc76f5c0bb50
824347 0000000001f483cfdaf41e6b497f834196777c25b20cc94079b01ea9a3ce2877
826347 00000000023e4a9aacc28ea0928db0282bcc57b9f56dff9c78c4104be103f8e6
828347 0000000000868ba70e8f07f89f4cc1f0d593d8f7f296d198d8ea98098f68f25b
830347 00000000026a293c547e9e9be339a08bd83f0d601b414873a8aa0e4d2a6e180a
832347 000000000219fbfed2a8b3e8958075d0332637fc8e1b0f877dadc12f305cd0df
834347 00000000035a645fa8585a0463b6df46cc9177372364dfa357c9bc617b48ec90
836347 000000000263035c81e8c44373235bce338f2f98086d0c924102362acc93c653
838347 000000000060e5c1c2917c5d0944428c4c12b5d4095c53ff3a4ac3969ca966f9
840347 00000000001904f4bd10ee2ddbe82ed71d4c8a5563ce5a908ea76ae0f66d7de3
842347 0000000000ea7f1bc0b1ecff61edd23c864f93844d1068a57255830045450d96
844347 00000000010993b1120418a0c35c38b9c1e1e2f1ff177e59761bb0200a7963d9
846347 0000000000fa8be518437a2c7197fd3d195060ae0fd6811ff2e4b8836f635dd5
848347 000000000054ab853f71a931f4501c73b98f7038ba22c45637c50f019cacfeb7
850347 000000000226e416faa22f56b57c2292c6ee91880f5f21305f1253a3f445fbb3
852347 0000000000cfa59c5926ca5ab74f8f897d86a0556a230723e7acad288d0cf82d
854347 000000000268522661fc1bae362555834300b14ba0b845c6cc7ce85389cced56
856347 000000000060f61db0515ffb2e92069a2636cf4019c60259c5e0198515f10ea5
858347 0000000002451ba26b04e7e8479ab6f0bb0121e5d3a934debd4aef1a09828e4c
860347 00000000004ccae868c2cb17ad5458bc971e7c08342910eb563d1690f58b0721
862347 0000000001fe031e899b9fd68d649b45dd10842ba0f05da7729e368d681b531b
864347 00000000004aa046f18772bf050c213eaa575cadd588e96f812f996e8b03b960
866347 0000000001beb6502ac0fac76fed6d1e48c067353bd9bb980a5533ef40011c71
868347 0000000001193017cde6c8e37594d5157661190b0bad2e1e81c9e3666834b96a
870347 000000000182e1462ad34fad450fc1fede2b73467b4556e018f14ec914eb43f5
872347 000000000045278b3c2c3045041ed4984d463dfa04e3ad31c4973bb667a7ae02
874347 00000000020263cbf37fbe0c195877ad033057758179925c4d37c85c2f47d124
876347 00000000004fb71bd4b1b5abef23ceef7551b705abbd2ffdb1f016830935c813
878347 00000000002e765f09b1eabcd6eb233d937ddd8f95fa04cbab3a7db250e1c5c9
880347 00000000017dec53526b581a08cddaad013eb4e966490dc57f1343e3bb129e12
882347 0000000002aba9c6b2c7fa27b51eeb458b1f1efd3cc30fa01be89ea08519b3e4
884347 000000000208dd1bc612a6055b5f4fe13a0359b640257eee0d31ca3b680957f2
886347 0000000001e2339bfbe854dbca93858d9f5d07db0842f0d26b6fc942d1c5c5c3
888347 0000000001534601ab1329b04853da1769da6a9a19d9a2a7275ab89ed61cbeb3
890347 000000000285dced922fd7da17ae94d59be8917a7df38c2fd856173f79ada0c7
892347 00000000006ea23c211d722a1cd0442d27873e70da577a11047ee9e957dc32cc
894347 0000000000f11f63f3fc4f0f693d97512deadd0bac2454ce1257b3546a648f0f
896347 0000000001962ed2d800e43bfc943fafe4a403f23d991138225a6257af9e0e71
898347 000000000177f5f8426832e410c99f88cca0e7649227cd62ac5c45a82c81d6e7
900347 00000000006a214d3a5d3262f7ad208cb4752903e290d070b97f7e61102a06d5
902347 0000000001a931b6e3f4d5b0060f86891077783d863b403e43b0b1717dfb4585
904347 0000000002e4ac7d29ac0deccb29e21873706c0dd4b4162a249fc769628f973c
906347 000000000161562c334f83cf1922b94bc4cebd52acf855a4611fe5fe64054b00
908347 000000000070d8fd88781ad6ed95646ec679f63934aa84641c5c3cb5439f99ab
910347 0000000000d19d709344e2b84be5e280e14de01a19aa992dfb3037f0e2affefa
912347 000000000202e9110136e45e3c57fc778e2fc50880e87cdd22e85d5da466d00c
914347 0000000002189580f9bf2f2c894516dd23b5d59037d28fdeba63e63a2b63bc6f
916347 00000000021a3c9ed6d3f9101741284a2be662af1b96c36da79c6d26dcfd22ea
918347 0000000001c6f492f9a480a340966498d97803c53f8a72fee0cbf301425b5d6d
920347 00000000000843ff2af007c6da063dbb852c404f4801e5ce97cd9905311d93b6
922347 00000000018b65f0197c0c9a7241b979bd02706998e5b329d44bceb97a4e5071
924347 0000000000fd2048c8c6855fa0258ca36ee7e6cf1bd0201751823065ddb0599f
926347 000000000159f3a291de4532eb5b930d61aebdf4445dc147d1dcd6dc6f7f4174
928347 0000000002924fde557c856ae0270310bad8cde045cf0489b561c1aedca1cf4b
930347 000000000128f7b72b749a4bfdf5edc86f63b216b65f4a336a07888d09e8f132
932347 0000000001460245a149318e8e23db9a23d18468af02e3ea62c11aebf8beace1
934347 0000000000020bd3d73c75ef39a11f27c98209812aa1de0d03c944c096566422
936347 0000000000f4629444633345f421a53fae17cf9f1e44152a3adf7486ee7c16ef
938347 00000000025fa90269ee232f71ad4ad75553c02179c4fc2e2a59f01a9b9e4a60
940347 0000000002756f060a8e93f4dbe1248648aa0bed4a683f86a98ae280e0c1f70d
942347 000000000222ff5a0581436016d5f06c1fd2e5bfe6a88a6fb98d4c21467a40b3
944347 000000000130fb1232a774785fa5dc7f654ac8ffc02f3ce90f101d02526687a3
946347 00000000017d7da18ccb1a9028bfad1c98220866021270269b709e606d773f51
948347 0000000001f13b2b6d664ef050a2f6a0cbc5a1e8517b4f66bc6911254ee118b9
950347 00000000015f244f8cfe3419f2625bf313b7abdbc352fbeae3439c9cda85bb50
952347 0000000002360cf540e1754f7929c02a8289dcf702126b7e0561896e3f1516ce
954347 000000000077c5af99b7dcb4c7227f5e3f653459b610cf580f6eebd9f5528ada
956347 0000000000db3674302d148b496f6137ef7b1e8d3ca73cd71c79b75744971b9e
958347 00000000020b6c3ac697f6b3604c51301d2850619adc764ff44fffc0c0ab3da4
960347 0000000000cc3737e6fa4826203d1b26c21aa8f4691cb1c595b4a8e320c56af1
962347 0000000000d8d807b4e8c2363482a0f294bb72885a3861e76c914905279c5ed6
964347 00000000016d1b4c9b3bb80e2aefbd5c67ce54ee58a61d121351bf0016972a9d
966347 00000000023bad056299e539f9a5cf3154afd22472cf992651109ec0c56276ba
968347 0000000000f0a46fd473b19da7b6800c534f8914805727b781ec56f2e39faae5
970347 0000000002da21ea4277c011e66d76c693d7a3e5d41335dca4ac5e286dfc917c
972347 0000000000179cf21263fd8215791d6e07aa89f81e8ad26b7f98cbb4674687fe
974347 0000000000b99ea96b097b9d098c1e83ec5f04cad04625b1bae31c0ebc349270
976347 00000000000967c672059d6257cbca6a98305903bbaed5ef3befadf54161a7a4
978347 000000000162991192d66a3ba8f333bc03c42dd0822224edc7cc6d6608ace09c
980347 0000000000fbe2589edc49fd5e4d25de3f8aee7b08f30063292aadcc818480b9
982347 0000000001f8dea90f05359b5911af6d8aba0620f4255a8ce9dcdb5173e427e1
984347 00000000002b2ae3ff3b1f7fe81c5ea52b276cb6478fde2bc1e5b2ba9fd8951c
986347 000000000194640030096d14d8a146663c795b208bda5d98a9a9a875d203c9af
988347 0000000002903c4dc7e40a5c01d80922e788590241717fc41edf7a7232ee05b5
990347 000000000083999e0782d19a111cd969bd9ef1cb218a6ca3c08ae6e6ec995009
992347 0000000001ffc92333e638cd49300a5fc9714ea24ddffec5c572fbc0aec1a910
994347 0000000001c6b714d6bed5a9d395bd98f96bd3184ccd7163fcb95c8e8117b8fd
996347 000000000088a5f513d13591daaf7cada07f90353f292176e0423bef14d0d916
998347 00000000023578ea4731091c001c144157af761c6ea99342ddebabe1a991a827
1000347 00000000005f5a564bb63724c0d974955cff087730ca6eec3351f45cb93e1c0c
1002347 00000000001ad05863b57555a02f56b264becd7d35063f247ee35cd94e2e44d5
1004347 0000000001dd55aa35a5e2b09dd25a6055f788e0613f33de8d4d92d60d8b06d3
1006347 0000000001061ff20aea37da3323d06447e08e0e83517584f9346c6f7c480996
1008347 0000000001a94d81870a199cc14e7962b75f705057b9c159f32b5121171c94d1
1010347 0000000000f555d0f7fbde43084d10e796e883df9a44bf193e1f0c59e2fa2a34

File diff suppressed because it is too large Load Diff

View File

@ -24,20 +24,6 @@ use std::os::unix::process::ExitStatusExt;
mod args;
/// Returns the hexadecimal-encoded string `s` in byte-reversed order.
pub fn byte_reverse_hex(s: &str) -> String {
String::from_utf8(
s.as_bytes()
.chunks(2)
.rev()
.map(|c| c.iter())
.flatten()
.cloned()
.collect::<Vec<u8>>(),
)
.expect("input should be ascii")
}
/// We limit the memory usage for each checkpoint, based on the cumulative size of
/// the serialized blocks in the chain. Deserialized blocks are larger, because
/// they contain pointers and non-compact integers. But they should be within a
@ -139,7 +125,7 @@ fn main() -> Result<()> {
let v: Value = serde_json::from_str(&output)?;
// get the values we are interested in
let hash: block::Hash = v["hash"].as_str().map(byte_reverse_hex).unwrap().parse()?;
let hash: block::Hash = v["hash"].as_str().unwrap().parse()?;
let height = block::Height(v["height"].as_u64().unwrap() as u32);
assert!(height <= block::Height::MAX);
assert_eq!(x, height.0);
@ -155,7 +141,7 @@ fn main() -> Result<()> {
|| height_gap.0 >= zebra_consensus::MAX_CHECKPOINT_HEIGHT_GAP as u32
{
// print to output
println!("{} {}", height.0, &hex::encode(hash.0),);
println!("{} {}", height.0, hash);
// reset counters
cumulative_bytes = 0;

View File

@ -5,12 +5,10 @@ set -euo pipefail
# Reads stdin or the file $1, looks lines up as hashes, then outputs block info
# for each hash. Uses the zcash-cli command for block lookups.
ZEBRAD="${ZEBRAD:-zebrad}"
ZCASH_CLI="${ZCASH_CLI:-zcash-cli}"
while read hash; do
zcashd_hash=$($ZEBRAD revhex "$hash")
header=$($ZCASH_CLI getblockheader "$zcashd_hash" 2>&1 || true)
header=$($ZCASH_CLI getblockheader "$hash" 2>&1 || true)
if echo "$header" | jq . > /dev/null 2> /dev/null; then
high=$(echo "$header" | jq -r '"\(.height)"')
@ -18,14 +16,6 @@ while read hash; do
prev=$(echo "$header" | jq -r '"\(.previousblockhash)"')
next=$(echo "$header" | jq -r '"\(.nextblockhash)"')
# use Zebra hash order
if [ "$prev" != 'null' ]; then
prev=$($ZEBRAD revhex "$prev")
fi
if [ "$next" != 'null' ]; then
next=$($ZEBRAD revhex "$next")
fi
printf 'high: %s\ntime: %s\nhash: %s\nprev: %s\nnext: %s\n' \
"$high" "$time" "$hash" "$prev" "$next"
else

View File

@ -1,12 +1,11 @@
//! Zebrad Subcommands
mod generate;
mod revhex;
mod start;
mod version;
use self::ZebradCmd::*;
use self::{generate::GenerateCmd, revhex::RevhexCmd, start::StartCmd, version::VersionCmd};
use self::{generate::GenerateCmd, start::StartCmd, version::VersionCmd};
use crate::config::ZebradConfig;
@ -29,10 +28,6 @@ pub enum ZebradCmd {
#[options(help = "get usage information")]
Help(Help<Self>),
/// The `revhex` subcommand
#[options(help = "reverses the endianness of a hex string, like a block or transaction hash")]
Revhex(RevhexCmd),
/// The `start` subcommand
#[options(help = "start the application")]
Start(StartCmd),
@ -50,7 +45,7 @@ impl ZebradCmd {
match self {
// List all the commands, so new commands have to make a choice here
Start(_) => true,
Generate(_) | Help(_) | Revhex(_) | Version(_) => false,
Generate(_) | Help(_) | Version(_) => false,
}
}
}

View File

@ -1,49 +0,0 @@
//! `revhex` subcommand - reverses hex endianness.
#![allow(clippy::never_loop)]
use abscissa_core::{Command, Options, Runnable};
use std::io::stdin;
/// Returns the hexadecimal-encoded string `s` in byte-reversed order.
pub fn byte_reverse_hex(s: &str) -> String {
String::from_utf8(
s.as_bytes()
.chunks(2)
.rev()
.map(|c| c.iter())
.flatten()
.cloned()
.collect::<Vec<u8>>(),
)
.expect("input should be ascii")
}
/// `revhex` subcommand
#[derive(Command, Debug, Default, Options)]
pub struct RevhexCmd {
/// The hex string whose endianness will be reversed.
///
/// When input is "-" or empty, reads lines from standard input, and
/// reverses each line.
#[options(free)]
input: String,
}
impl Runnable for RevhexCmd {
/// Print endian-reversed hex string.
fn run(&self) {
if self.input.is_empty() || self.input == "-" {
// "-" is a typical command-line argument for "read standard input"
let mut input = String::new();
// Unlike similar C APIs, read_line returns Ok(0) on EOF.
// We can distinguish EOF from an empty line, because the newline is
// included in the buffer, so empty lines return Ok(1).
while stdin().read_line(&mut input).unwrap_or(0) > 0 {
println!("{}", byte_reverse_hex(&input.trim()));
}
} else {
println!("{}", byte_reverse_hex(&self.input));
}
}
}

View File

@ -207,21 +207,6 @@ fn help_args() -> Result<()> {
Ok(())
}
#[test]
fn revhex_args() -> Result<()> {
zebra_test::init();
let testdir = testdir()?.with_config(default_test_config()?)?;
// Valid
let child = testdir.spawn_child(&["revhex", "33eeff55"])?;
let output = child.wait_with_output()?;
let output = output.assert_success()?;
output.stdout_equals("55ffee33\n")?;
Ok(())
}
#[test]
fn start_no_args() -> Result<()> {
zebra_test::init();