From e72da976d631cd81cfc27d8c576748d3e039bfb3 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Thu, 21 Mar 2024 03:12:25 +0000 Subject: [PATCH 01/16] add deadline --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8d1b6d3..0ace566 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-24ddc0f5d75046c5622901739e7c5dd533143b0c8e959d652212380cedb1ea36.svg)](https://classroom.github.com/a/bWLxfecg) # Summer of Bitcoin 2024: Mine your first block ## Overview From 6aafcc56e06634a83b9e2e54e5330d9205367b80 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Mon, 8 Apr 2024 13:40:10 -0700 Subject: [PATCH 02/16] . --- .gitignore | 1 + btc_mine_simulator/.gitignore | 1 + btc_mine_simulator/Cargo.lock | 89 ++++++++++++++++++++++++++++++ btc_mine_simulator/Cargo.toml | 10 ++++ btc_mine_simulator/src/main.rs | 73 ++++++++++++++++++++++++ btc_mine_simulator/src/tx.rs | 40 ++++++++++++++ btc_mine_simulator/src/validate.rs | 44 +++++++++++++++ btc_mine_simulator/todo | 6 ++ run.sh | 0 test.sh | 0 10 files changed, 264 insertions(+) create mode 100644 btc_mine_simulator/.gitignore create mode 100644 btc_mine_simulator/Cargo.lock create mode 100644 btc_mine_simulator/Cargo.toml create mode 100644 btc_mine_simulator/src/main.rs create mode 100644 btc_mine_simulator/src/tx.rs create mode 100644 btc_mine_simulator/src/validate.rs create mode 100644 btc_mine_simulator/todo mode change 100644 => 100755 run.sh mode change 100644 => 100755 test.sh diff --git a/.gitignore b/.gitignore index e69de29..03b2709 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +btc_mine_simulator/target/ diff --git a/btc_mine_simulator/.gitignore b/btc_mine_simulator/.gitignore new file mode 100644 index 0000000..1de5659 --- /dev/null +++ b/btc_mine_simulator/.gitignore @@ -0,0 +1 @@ +target \ No newline at end of file diff --git a/btc_mine_simulator/Cargo.lock b/btc_mine_simulator/Cargo.lock new file mode 100644 index 0000000..250d632 --- /dev/null +++ b/btc_mine_simulator/Cargo.lock @@ -0,0 +1,89 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "btc_mine_simulator" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "proc-macro2" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.115" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "2.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" diff --git a/btc_mine_simulator/Cargo.toml b/btc_mine_simulator/Cargo.toml new file mode 100644 index 0000000..eca64dc --- /dev/null +++ b/btc_mine_simulator/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "btc_mine_simulator" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" diff --git a/btc_mine_simulator/src/main.rs b/btc_mine_simulator/src/main.rs new file mode 100644 index 0000000..883e70f --- /dev/null +++ b/btc_mine_simulator/src/main.rs @@ -0,0 +1,73 @@ +use std::fs; +use std::io; +use std::path::Path; + +mod tx; +mod validate; +use tx::Transaction; +use validate::validate_transaction; + +fn read_transactions_from_dir(dir: &Path) -> io::Result<(Vec, usize, usize)> { + let mut transactions = Vec::new(); + let mut total_files = 0; + let mut failed_parses = 0; + + for entry in fs::read_dir(dir)? { + let entry = entry?; + let path = entry.path(); + if path.is_file() { + total_files += 1; + match fs::read_to_string(&path) { + Ok(data) => { + match serde_json::from_str::(&data) { + Ok(transaction) => transactions.push(transaction), + Err(e) => { // Capture the parse error + failed_parses += 1; + println!("Failed to parse file: {:?}, Reason: {}", path.display(), e); + // Prints out the specific reason for the parse failure + }, + } + }, + Err(e) => { // Capture the file read error + println!("Failed to read file: {:?}, Reason: {}", path.display(), e); + // This case handles file read errors + } + } + } + } + for tx in &transactions { + // println!("{:?}", tx.locktime); + if tx.locktime != 0 { + println!("wow {:?}", tx.locktime); + } + } + + println!("Total files processed: {}", total_files); + println!("Failed to parse: {}", failed_parses); + Ok((transactions, total_files, failed_parses)) +} + +fn main() { + let dir = Path::new("../mempool"); + let txs = match read_transactions_from_dir(dir) { + Ok((transactions, total_files, failed_parses)) => { + println!("Successfully parsed transactions: {}", transactions.len()); + println!("Total files: {}", total_files); + println!("Failed parses: {}", failed_parses); + transactions + }, + Err(e) => panic!("Error reading transactions: {}", e), + }; + let mut res = 0; + for tx in &txs { + if let Err(e) = validate_transaction(tx) { + println!("{:?}", tx.); + res += 1; + println!("error: {:?}", e); + + } + + } + println!("{:?}", res); + +} diff --git a/btc_mine_simulator/src/tx.rs b/btc_mine_simulator/src/tx.rs new file mode 100644 index 0000000..d4d1f8b --- /dev/null +++ b/btc_mine_simulator/src/tx.rs @@ -0,0 +1,40 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug)] +pub struct Transaction { + pub version: i32, + pub locktime: u32, + pub vin: Vec, + pub vout: Vec, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub txid: String, + pub vout: u32, + pub prevout: PrevOut, + pub scriptsig: String, + pub scriptsig_asm: String, + pub witness: Option>, + pub is_coinbase: bool, + pub sequence: u32, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct PrevOut { + pub scriptpubkey: String, + pub scriptpubkey_asm: String, + pub scriptpubkey_type: String, + pub scriptpubkey_address: String, + pub value: u64, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + pub scriptpubkey: String, + pub scriptpubkey_asm: String, + pub scriptpubkey_type: String, + pub scriptpubkey_address: Option, + pub value: u64, +} + diff --git a/btc_mine_simulator/src/validate.rs b/btc_mine_simulator/src/validate.rs new file mode 100644 index 0000000..e918d7d --- /dev/null +++ b/btc_mine_simulator/src/validate.rs @@ -0,0 +1,44 @@ +use serde::{Deserialize, Serialize}; + +use crate::tx::Transaction; + +// Assuming the structs Transaction, Input, Output, PrevOut are defined as above + +pub fn validate_transaction(tx: &Transaction) -> Result<(), String> { + if tx.version < 1 || tx.version > 2 { + return Err("Unsupported transaction version".to_string()); + } + + if tx.vin.is_empty() { + return Err("Transaction has no inputs".to_string()); + } + + if tx.vout.is_empty() { + return Err("Transaction has no outputs".to_string()); + } + + for input in &tx.vin { + if input.is_coinbase && tx.vin.len() > 1 { + return Err("Coinbase transaction has more than one input".to_string()); + } + + if !input.is_coinbase && input.txid.is_empty() { + return Err("Input txid is empty".to_string()); + } + + if let Some(witness) = &input.witness { + if witness.is_empty() { + return Err("Witness is present but empty".to_string()); + } + } + } + + // let total_output_value: u64 = tx.vout.iter().map(|output| output.value).sum(); + // if total_output_value == 0 { + // return Err("Total output value is 0".to_string()); + // } + + // Further checks can include scriptsig and scriptpubkey validation, which are complex and require executing the scripts + + Ok(()) +} diff --git a/btc_mine_simulator/todo b/btc_mine_simulator/todo new file mode 100644 index 0000000..4dfe629 --- /dev/null +++ b/btc_mine_simulator/todo @@ -0,0 +1,6 @@ +1. clean up invalid tx +2. compute size and fee for each tx +3. build dep graph, tx1 <- tx2 if tx2 can only be valid after tx1 executed +4. try out some algo, simple one would be greedy with pq, consistently choose the max fee tx that can be selected, but this would def miss some some large fee tx with long dep of tx before it +5. build block with selected tx, find the hash +6. export result to file \ No newline at end of file diff --git a/run.sh b/run.sh old mode 100644 new mode 100755 diff --git a/test.sh b/test.sh old mode 100644 new mode 100755 From fef7ceb2181ae864149c06a4313c0988fa7565cd Mon Sep 17 00:00:00 2001 From: 0x0 Date: Thu, 11 Apr 2024 12:10:28 -0700 Subject: [PATCH 03/16] . --- .gitignore | 2 +- Cargo.lock | 198 ++++++++++++++++++++ btc_mine_simulator/Cargo.toml => Cargo.toml | 3 + btc_mine_simulator/.gitignore | 1 - btc_mine_simulator/Cargo.lock | 89 --------- btc_mine_simulator/src/main.rs | 73 -------- btc_mine_simulator/src/tx.rs | 40 ---- btc_mine_simulator/src/validate.rs | 44 ----- output.txt | 103 ++++++++++ run.sh | 3 +- src/block.rs | 57 ++++++ src/coinbase.rs | 38 ++++ src/main.rs | 111 +++++++++++ src/p2pkh.rs | 3 + src/tx.rs | 75 ++++++++ src/validate.rs | 71 +++++++ btc_mine_simulator/todo => todo | 0 17 files changed, 662 insertions(+), 249 deletions(-) create mode 100644 Cargo.lock rename btc_mine_simulator/Cargo.toml => Cargo.toml (87%) delete mode 100644 btc_mine_simulator/.gitignore delete mode 100644 btc_mine_simulator/Cargo.lock delete mode 100644 btc_mine_simulator/src/main.rs delete mode 100644 btc_mine_simulator/src/tx.rs delete mode 100644 btc_mine_simulator/src/validate.rs create mode 100644 output.txt create mode 100644 src/block.rs create mode 100644 src/coinbase.rs create mode 100644 src/main.rs create mode 100644 src/p2pkh.rs create mode 100644 src/tx.rs create mode 100644 src/validate.rs rename btc_mine_simulator/todo => todo (100%) diff --git a/.gitignore b/.gitignore index 03b2709..1de5659 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -btc_mine_simulator/target/ +target \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..056bfda --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,198 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "btc_mine_simulator" +version = "0.1.0" +dependencies = [ + "secp256k1", + "serde", + "serde_json", + "sha2", +] + +[[package]] +name = "cc" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2678b2e3449475e95b0aa6f9b506a28e61b3dc8996592b983695e8ebb58a8b41" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "proc-macro2" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "secp256k1" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0cc0f1cf93f4969faf3ea1c7d8a9faed25918d96affa959720823dfe86d4f3" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1433bd67156263443f14d603720b082dd3121779323fce20cba2aa07b874bc1b" +dependencies = [ + "cc", +] + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.115" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "syn" +version = "2.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" diff --git a/btc_mine_simulator/Cargo.toml b/Cargo.toml similarity index 87% rename from btc_mine_simulator/Cargo.toml rename to Cargo.toml index eca64dc..c79a9c8 100644 --- a/btc_mine_simulator/Cargo.toml +++ b/Cargo.toml @@ -8,3 +8,6 @@ edition = "2021" [dependencies] serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +secp256k1 = "0.29.0" +sha2 = "0.10.8" + diff --git a/btc_mine_simulator/.gitignore b/btc_mine_simulator/.gitignore deleted file mode 100644 index 1de5659..0000000 --- a/btc_mine_simulator/.gitignore +++ /dev/null @@ -1 +0,0 @@ -target \ No newline at end of file diff --git a/btc_mine_simulator/Cargo.lock b/btc_mine_simulator/Cargo.lock deleted file mode 100644 index 250d632..0000000 --- a/btc_mine_simulator/Cargo.lock +++ /dev/null @@ -1,89 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "btc_mine_simulator" -version = "0.1.0" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "proc-macro2" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "ryu" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" - -[[package]] -name = "serde" -version = "1.0.197" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.197" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.115" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "syn" -version = "2.0.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" diff --git a/btc_mine_simulator/src/main.rs b/btc_mine_simulator/src/main.rs deleted file mode 100644 index 883e70f..0000000 --- a/btc_mine_simulator/src/main.rs +++ /dev/null @@ -1,73 +0,0 @@ -use std::fs; -use std::io; -use std::path::Path; - -mod tx; -mod validate; -use tx::Transaction; -use validate::validate_transaction; - -fn read_transactions_from_dir(dir: &Path) -> io::Result<(Vec, usize, usize)> { - let mut transactions = Vec::new(); - let mut total_files = 0; - let mut failed_parses = 0; - - for entry in fs::read_dir(dir)? { - let entry = entry?; - let path = entry.path(); - if path.is_file() { - total_files += 1; - match fs::read_to_string(&path) { - Ok(data) => { - match serde_json::from_str::(&data) { - Ok(transaction) => transactions.push(transaction), - Err(e) => { // Capture the parse error - failed_parses += 1; - println!("Failed to parse file: {:?}, Reason: {}", path.display(), e); - // Prints out the specific reason for the parse failure - }, - } - }, - Err(e) => { // Capture the file read error - println!("Failed to read file: {:?}, Reason: {}", path.display(), e); - // This case handles file read errors - } - } - } - } - for tx in &transactions { - // println!("{:?}", tx.locktime); - if tx.locktime != 0 { - println!("wow {:?}", tx.locktime); - } - } - - println!("Total files processed: {}", total_files); - println!("Failed to parse: {}", failed_parses); - Ok((transactions, total_files, failed_parses)) -} - -fn main() { - let dir = Path::new("../mempool"); - let txs = match read_transactions_from_dir(dir) { - Ok((transactions, total_files, failed_parses)) => { - println!("Successfully parsed transactions: {}", transactions.len()); - println!("Total files: {}", total_files); - println!("Failed parses: {}", failed_parses); - transactions - }, - Err(e) => panic!("Error reading transactions: {}", e), - }; - let mut res = 0; - for tx in &txs { - if let Err(e) = validate_transaction(tx) { - println!("{:?}", tx.); - res += 1; - println!("error: {:?}", e); - - } - - } - println!("{:?}", res); - -} diff --git a/btc_mine_simulator/src/tx.rs b/btc_mine_simulator/src/tx.rs deleted file mode 100644 index d4d1f8b..0000000 --- a/btc_mine_simulator/src/tx.rs +++ /dev/null @@ -1,40 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Serialize, Deserialize, Debug)] -pub struct Transaction { - pub version: i32, - pub locktime: u32, - pub vin: Vec, - pub vout: Vec, -} - -#[derive(Serialize, Deserialize, Debug)] -pub struct Input { - pub txid: String, - pub vout: u32, - pub prevout: PrevOut, - pub scriptsig: String, - pub scriptsig_asm: String, - pub witness: Option>, - pub is_coinbase: bool, - pub sequence: u32, -} - -#[derive(Serialize, Deserialize, Debug)] -pub struct PrevOut { - pub scriptpubkey: String, - pub scriptpubkey_asm: String, - pub scriptpubkey_type: String, - pub scriptpubkey_address: String, - pub value: u64, -} - -#[derive(Serialize, Deserialize, Debug)] -pub struct Output { - pub scriptpubkey: String, - pub scriptpubkey_asm: String, - pub scriptpubkey_type: String, - pub scriptpubkey_address: Option, - pub value: u64, -} - diff --git a/btc_mine_simulator/src/validate.rs b/btc_mine_simulator/src/validate.rs deleted file mode 100644 index e918d7d..0000000 --- a/btc_mine_simulator/src/validate.rs +++ /dev/null @@ -1,44 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::tx::Transaction; - -// Assuming the structs Transaction, Input, Output, PrevOut are defined as above - -pub fn validate_transaction(tx: &Transaction) -> Result<(), String> { - if tx.version < 1 || tx.version > 2 { - return Err("Unsupported transaction version".to_string()); - } - - if tx.vin.is_empty() { - return Err("Transaction has no inputs".to_string()); - } - - if tx.vout.is_empty() { - return Err("Transaction has no outputs".to_string()); - } - - for input in &tx.vin { - if input.is_coinbase && tx.vin.len() > 1 { - return Err("Coinbase transaction has more than one input".to_string()); - } - - if !input.is_coinbase && input.txid.is_empty() { - return Err("Input txid is empty".to_string()); - } - - if let Some(witness) = &input.witness { - if witness.is_empty() { - return Err("Witness is present but empty".to_string()); - } - } - } - - // let total_output_value: u64 = tx.vout.iter().map(|output| output.value).sum(); - // if total_output_value == 0 { - // return Err("Total output value is 0".to_string()); - // } - - // Further checks can include scriptsig and scriptpubkey validation, which are complex and require executing the scripts - - Ok(()) -} diff --git a/output.txt b/output.txt new file mode 100644 index 0000000..9681ea3 --- /dev/null +++ b/output.txt @@ -0,0 +1,103 @@ +BlockHeader { version: 1, previous_block_hash: "", merkle_root: "", time: 0, bits: 0, nonce: 35022 } +{"version":1,"locktime":0,"vin":[{"txid":"","vout":4294967295,"prevout":{"scriptpubkey":"","scriptpubkey_asm":"","scriptpubkey_type":"coinbase","scriptpubkey_address":"","value":0},"scriptsig":"arbitrary data","scriptsig_asm":"","witness":null,"is_coinbase":true,"sequence":4294967295}],"vout":[{"scriptpubkey":"miner's address or script","scriptpubkey_asm":"","scriptpubkey_type":"pay to script hash or pay to public key hash","scriptpubkey_address":"miner's address","value":6250616824}]} +fd6c51917e9dcef4b36f06a97c45fc012b32954c2606b29ea46fbf24627180b2 +f61ba1f5c008032ec0c6226935e41c0906e18768182253dabab18fb414977d79 +b03607c000e41a2c35c3d67f8410274428e02b9fc323b8c5d88013f5c36adaf2 +b69ebd3e9354c7197e66e8994b0d736bf72471952325ec48ae8fd99f234c7486 +c29f43f417fd8f7f4e6c49c9909ff05a21a7f860fe337aec08ab2210c3df0bca +c9ffefcac1150a79dca59e54218a4e2267987193210c3154c57e7e3c152e9f4f +5b6a68bcdeecc661d5e4762fbdd10bb2ab46850fa9a3e7fae8fc925797c30349 +e5dadb7cf200305d9a32270707f1e28792e7e59cafd412025a629d99d8fa8c74 +e8df4626764e473b45dc2f17cac9ccf1abcaefe14ace65c5a8b36dfe5bc1d52b +1da98f44f9799a7afd4f4733745403797a3ea9560a181e8bf35d33a7ec84f383 +921e498ba907d5821d47579619da62b42d4e73f1c5fcf5fe30b8c11a2196a8c8 +d21374704def04b718ef13b90597cc5eed31a85f2d5e38cdece8f3b067081195 +6ee77c8e124b843ceb7ccdb1988bb9808b39323c0aaf72585b1f849200044c31 +20668f91b715e308fdd8f6dba0027fa309b01651f54109f0541d8ee9763c260d +c9dc384fd54a9b7d9f9ee214be33d3dcf5b63ae7a959d30efbc5c805868ccb98 +ed4935165003a09098aea1296f11d4166ab5cf6e50d7489e0f82a08660f7cc8a +8989ed84ee8a37609e4b8aa16aa49ba8daf8885aea56f85d1672bb258e2fd1f2 +c58b9bbdad53334a763df2bd609e49a587c8cb7fb284424ce8543b878fdda8d1 +fc418b1aec8fa42583e87794f16e6c346bb660c51e46212a824e8bd0d79ac5de +9ab68801d474c278928d0dd11e0abccd3a8653b9b30a5185feb05a43e14283f2 +323e4f3ae31a1f934b7ba0494393402b0e9c6e040a57da9bdcce857402493717 +f29043c4e2144d4e6b71e728ca6f7cb3718f52e5bd40a438edcbc5e41255becd +de8e5af87d677bf5e4f1dfbe145f16fb922752cb3650986c125ac67d2171b722 +abedc0cfc2071f03c46265708132d267a4396cf77c5f99066c398b4aea711c90 +7999c95635436a2f6833fecb8f7bf9a700c1ef042cb9ded6317afbc1b0a0cb94 +233cb4f1be5aadc6ed2c9d5a3aca55fe790e1a77e6a7be736eb78da5e94cfc9d +1b9e7d37d4f2a5fdc38682d680e36502e4eb983d35bc7060ca871b66607958b3 +0ef0a023b634d42f6065d6fa6ffa65c59c0bf3fd80cd245dccf6491774f372a8 +a15ad6d104a37b8209ce7c054b8d985fc9254777f20e0fa9117e2f803da6f798 +1ff66ac7cce05dd73ba2b3dbc3efea124759582e643a53b6ff14e939b077b0bc +3bcde627e009d88f7c90e6a7c41a473c63df225b5b351b31572e9a3116164418 +1b8794ac391616ce39ee36d27ac2c7a0fa6f59c86d2770abf4787477b224c8a7 +5240468a06cff25050e66ea7eb29b9fb3a202a69c4a0aa29ed026ca395ae531a +8ea7bbecc3fdc9217f51d596056226f21558f31fdcf339aea72a3adcaa1a0354 +65de04a24879dd627414b942117eac52f9ce3e588357b7b48c9e2cceeaa10020 +1245a76885888a1f83996a310c5e8338cc213fdd00fef669d19846251a3dd9a9 +8bb9cc3fae73b5d6dedc305b24767fa5219bdfbf42a26682b174283dc532ee1f +88a33ef8a1fe8e5b8a0ab2d2bb92c43b8d328a34be4c7af85b1b371fe32ea05b +dd89640609e9d61132ea3fc31683b39d19aa6eefbe88ce6d7f6466a7475d9286 +5e1cb0b51d84b243ee144961e4d89e28ab1c2bcb74f9b8edf778f1b7ca9a0051 +3325fd0f39d2dbfcf1af7c189fcf8185204883dde64d48f35cc4ef280a9fed63 +1ad66f8eda77b2ceb26cb9e744a0c2db4ec49f7dab1d12fd7ddeb1048d1e8f94 +fd54b1a1b24e6bdd651dbf0cac4dbf0c66fad9863179277257ce5debe67baf2e +6550df27a673cc8a39d6e0525e742a9d3d51cec7b5839fcbd7bc3763464561a2 +0fc7e1dca82d1e5e09ccc1de37f8146bf9c71612fa7f8eb015594fb1976af7de +6b287dbfe2d4c8d82a570f7234981a62a476a257fe2f675228d513fe3b1171f7 +395d4b7d04db6ea40b9a9f227c6c8ea36797912dd988b4c3e2ecb16f89d4cd44 +e2adf87c5fe805e62645e6c95fa79f3955d17a68bc85422e07e484e5e7ead201 +f0d95f67d006510afe4f596a4d9a434d0d972857a989edd713af33dbe338cce5 +54f134f03552bb71aa8e29949710f8fa53f041838b20b041573f3ac077e1446b +394eba71a6c97104ba52a3e593a9de0ee72a8081cce0dc9ad15120cc0c54af22 +4ab31bba7fe1a0e49f319eb7456d560330680203116cc108cdd3a1adedcba2f6 +a72c35285d0b157ba1a10aefa54fb093658217daebfc6395896dd5263e116514 +ebcecdf8a1d9aab3e1c1aafc5b33336cfa8b5970f672c6494694447fe90630a9 +1a03612f53738cab1a31e84c934572b8e6521512231c97a2c56bf18dccb40624 +e2dbe2c3b1be040ccb1f2787165d59784cbb329e9d2751311f892a35a4832eae +da87057bfb3bb32c0c5a90c85cf329f82059134cd014259bfb6b2cd73aa32fd4 +b49d68458ebf1ef0d9f6361d5458d973e7c74eee74ce1f6a7135d52600b17444 +37fc115f78757a7878fd1c8b1a0096f515afb4ad2a6e3d64da1cfa4925b8bb6c +0b4e8ce425e7f1f4d93d0216cbdf0d036b9f29a759f6bd4dd1d0ed4798093bb4 +d6164d3110ce40e78244d11976b3238a24b19d6db4011bae7e1f58c83e5b555f +e466d26c4bf9c467f2d3d7f5f4e994e3ca3e7117a7e6c134b406e418f608c18f +6dd4d4439ff6ea50722e4f7309a0f3e60ddf361a483b5b7cac0e80b582ee484e +20ac37ddd19b6ab3412f24b480584ea59903bad3a9245466f1ad41f4921d68cf +dfb908de8bf20c672a2512038f5a681c056c50e4c17bc615ab0b4aef9e5b9efd +c90f1f60fec4b71dbf58355f91237c77a761b7a40be8ea8464fa732707058245 +cd83b145ba40b14843ff5fc816e106e3c744df0a01d9d1fd2f1bf33af61f6cf6 +ca4426c4d51b0b3a07518b3897836b0270b9fc5d33a1c56792e96dc2af4611cf +797328fde30e4868c95cf26c8d209d8ae9d1bc4b81ce5779bb63b4b2f37b87c4 +9a43a49242e9f0757afd059988b25d941da898625c703ede3a91e83b3da98def +c85e3a02297694ca971b5318c9e503bc18bc7aec8b2f1ed9c471e9356b330acb +82ac019ce9e671a02b5191afd8365d90e79dd9e5c93dfe9d94c311bc60c4023c +e347236eefec653d30e2d938d240289a867f5c247b8a9e52bfd36220668b2812 +42e9b2be6a03a0b67cb9df59824dc7afccdac0f99b8d68fbe5558aabcc0d6e5f +dd8df538a8d70e0928a4857ca07baeaee128dffe4f60cea0a0358261e946ef15 +a9abb01a4f6ba8c4132fdd15464400c71acd917656bfa5d18a669e06f959b437 +a59d7855abf3721e7dfab2473b76dfa7ddfca873bec1b681e7a1bd0311ca0f3a +9326485a16a912c7c78cc18caa8ca357f1305fbe98ce49e345e7ba063a008767 +9dec9675da7db73484e1b316a4b82c8f02b8988f59982b6261f31b6db2dfbbd6 +efdd8ab778aaaa50b80632815a28c44d8ca30349b76ae894cf892ee311c49175 +c1c533466cc4499c293c93350ed6809a8a9bd8bd10f3176327b7a9d8253d0773 +84c9e1abdacf151cf6848e25a9a8c568122fd6fa5e5d6f43e5583b585d2ccaac +2b8f5fb8ce910609fc6e5b72e58e1b7fa65e58c5eccdb67e4e038d2423ded6fd +f7f6cd7bef68c5b7887ee8b9ecc42dbba89d7483022dff7953aced44ddfbac2a +b297e1616f3f554bdde09c375498ab793d4587053fb9e8623a867cde9988a265 +827192f8870bb35a4319827778844666fee36c62d3db6cc4e74095ddde6bf0d3 +0b1f2f3f33f6a8c553236045d05eb17799299c25e95b625e2fd58b0b42fa2d4f +9bb6b6df0dcfa78c163fc9a32b8951d7d427bb9a32d00a923628ed7c5106c5dc +55145fa5bcf5ece7d038dab44bc7d50f77684be936de75ce5aed5c9a19c1923b +26efae64a334f0c1fe74cc069138bc5c25129e4469df0cb22a81076040674f67 +e1c9ed9226011da72fffa01c517d32b65dfc73d2583049a349222a1306cc87cf +7d5fb57fef2d28dc55bbddd6b6b6edd2faaefea7d2c510761b05d28ecc557eba +b9bf6b8785f569aaf5a7e77930f1b0da9124103808b30801a5a90f755010226d +bc05f09bc92b926b9e605178d1341fadbcdb8ce0766ea87bc4ea0a0c6b30eaee +5131a48061a1b95e208dca9bf03e457209c49e8bd0115c6cea1d5a41da79e3df +43763e32d64f917007033677bef1f7fe768421c48c5459635b11aff19c71fed4 +de3e74676f63474069deb4e3276eaf98e4ae9297ae2f451248f7a966c97cbe36 +d24484c3dc35542d2f4d4c862e61126b29f7563411608f399fd4ddc45f76b7e9 +492f69d73f2b16a00c516ae9fa1b27ae4f1c60681d96d1b5964c59c2122d9f3a +d7c9dc1d6ff72609f2d72c2842732f33201ca02968280c3b41b1c49cbb44b6e6 +83a4d16652052c9dee5e50200371960979ba379c29a181a51a13c80fdce449a2 diff --git a/run.sh b/run.sh index 721aeb2..ac1cdb7 100755 --- a/run.sh +++ b/run.sh @@ -1 +1,2 @@ -# Update this file to run your own code \ No newline at end of file +# Update this file to run your own code +cargo run \ No newline at end of file diff --git a/src/block.rs b/src/block.rs new file mode 100644 index 0000000..c1519fb --- /dev/null +++ b/src/block.rs @@ -0,0 +1,57 @@ +use serde::{Deserialize, Serialize}; +use serde_json; +use sha2::{Digest, Sha256}; +use std::{fs::File, io::Write, vec}; + +use crate::tx::Transaction; + +#[derive(Serialize, Deserialize, Debug)] +pub struct BlockHeader { + pub version: i32, + pub previous_block_hash: String, + pub merkle_root: String, + pub time: u32, + pub bits: u32, + pub nonce: u32, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct Block { + pub header: BlockHeader, + pub transactions: Vec, +} + +impl Block { + pub fn mine(&mut self, difficulty_target: &str) { + loop { + let header = serde_json::to_string(&self.header).unwrap(); + let hash = Sha256::digest(header.as_bytes()); + let hash_hex = format!("{:x}", hash); + + if hash_hex < difficulty_target.to_owned() { + println!("Block mined: {}", hash_hex); + break; + } + + self.header.nonce += 1; + } + } + + pub fn generate_output(&self) { + let mut output = File::create("output.txt").unwrap(); + + // Write block header + writeln!(output, "{:?}", self.header).unwrap(); + + // Serialize and write coinbase transaction + let coinbase_tx = serde_json::to_string(&self.transactions[0]).unwrap(); + writeln!(output, "{}", coinbase_tx).unwrap(); + + // Write transaction IDs + for tx in &self.transactions { + let tx_json = serde_json::to_string(tx).unwrap(); + let txid = Sha256::digest(tx_json.as_bytes()); + writeln!(output, "{:x}", txid).unwrap(); + } + } +} diff --git a/src/coinbase.rs b/src/coinbase.rs new file mode 100644 index 0000000..7689354 --- /dev/null +++ b/src/coinbase.rs @@ -0,0 +1,38 @@ +use crate::tx::{Input, Output, PrevOut, Transaction}; + +// Assume these are the calculated values +pub fn create_coinbase_transaction(block_reward: u64, total_fees: u64) -> Transaction { + // The output value of the coinbase transaction is the sum of block reward and total fees + let output_value = block_reward + total_fees; + + Transaction { + version: 1, // Version of the transaction format + locktime: 0, // Typically 0 for coinbase transactions + vin: vec![Input { + // Coinbase transactions have a single input + txid: String::new(), // No input transaction (empty string or all zeros) + vout: 0xffffffff, // Maximum value as it's not referencing a real output + prevout: PrevOut { + // Dummy prevout for coinbase tx + scriptpubkey: String::new(), // Could be used to include miner-specific data + scriptpubkey_asm: String::new(), + scriptpubkey_type: String::from("coinbase"), + scriptpubkey_address: String::new(), + value: 0, // No input value + }, + scriptsig: String::from("arbitrary data"), // Miners can include arbitrary data here + scriptsig_asm: String::new(), + witness: None, + is_coinbase: true, + sequence: 0xffffffff, // Full sequence + }], + vout: vec![Output { + // The output sending the reward to the miner's address + scriptpubkey: String::from("miner's address or script"), + scriptpubkey_asm: String::new(), + scriptpubkey_type: String::from("pay to script hash or pay to public key hash"), + scriptpubkey_address: Some(String::from("miner's address")), + value: output_value, + }], + } +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..ce9abfb --- /dev/null +++ b/src/main.rs @@ -0,0 +1,111 @@ +use std::collections::HashSet; +use std::fs; +use std::io; +use std::path::Path; + +mod block; +mod coinbase; +mod tx; +mod validate; +use tx::Transaction; + +use crate::block::Block; +use crate::block::BlockHeader; +use crate::coinbase::create_coinbase_transaction; + +// use validate::validate_transaction; + +fn read_transactions_from_dir(dir: &Path) -> io::Result<(Vec, usize, usize)> { + let mut transactions = Vec::new(); + let mut total_files = 0; + let mut failed_parses = 0; + + for entry in fs::read_dir(dir)? { + let entry = entry?; + let path = entry.path(); + if path.is_file() { + total_files += 1; + match fs::read_to_string(&path) { + Ok(data) => match serde_json::from_str::(&data) { + Ok(transaction) => transactions.push(transaction), + Err(_) => { + failed_parses += 1; + } + }, + Err(_) => {} + } + } + } + + Ok((transactions, total_files, failed_parses)) +} + +fn get_tx() -> Vec { + let dir = Path::new("./mempool"); + let txs = match read_transactions_from_dir(dir) { + Ok((transactions, total_files, failed_parses)) => { + println!("Successfully parsed transactions: {}", transactions.len()); + println!("Total files: {}", total_files); + println!("Failed parses: {}", failed_parses); + transactions + } + Err(e) => panic!("Error reading transactions: {}", e), + }; + + let mut invalid_transactions = 0; + let mut fail = 0; + let mut valid_txs = vec![]; + for tx in txs { + // if let Err(_) = validate_transaction(tx) { + // invalid_transactions += 1; + // } + if tx.is_basic_valid() { + valid_txs.push(tx); + } + } + valid_txs +} + +fn select_tx_for_block(txs: Vec) -> Vec { + // let mut res = vec!{}; + // for i in 0..100 { + // res.push(txs[i]); + // } + // res + txs[0..100].to_vec() +} + +fn main() { + let txs = get_tx(); + + let mut valid = select_tx_for_block(txs); + let total_fees = valid.iter().fold(0, |acc, x| acc + x.fee()); + + let br = 6_250_000_000; + let cb_tx = create_coinbase_transaction(br, total_fees); + let mut valid_tx = vec![cb_tx]; + valid_tx.append(&mut valid); + + let difficulty_target = "0000ffff00000000000000000000000000000000000000000000000000000000"; + + let mut block = Block { + header: BlockHeader { + version: 1, + previous_block_hash: "".to_string(), + merkle_root: "".to_string(), + time: 0, + bits: 0, + nonce: 0, + }, + transactions: valid_tx, + }; + + block.mine(difficulty_target); + block.generate_output(); + + // println!("Invalid transactions: {}", invalid_transactions); + // println!("Different script types found:"); + // for script_type in script_types { + // println!("- {}", script_type); + // } +} diff --git a/src/p2pkh.rs b/src/p2pkh.rs new file mode 100644 index 0000000..406e5a1 --- /dev/null +++ b/src/p2pkh.rs @@ -0,0 +1,3 @@ +fn validate() { + +} \ No newline at end of file diff --git a/src/tx.rs b/src/tx.rs new file mode 100644 index 0000000..a314240 --- /dev/null +++ b/src/tx.rs @@ -0,0 +1,75 @@ +use std::clone; + +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct Transaction { + pub version: i32, + pub locktime: u32, + pub vin: Vec, + pub vout: Vec, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct Input { + pub txid: String, + pub vout: u32, + pub prevout: PrevOut, + pub scriptsig: String, + pub scriptsig_asm: String, + pub witness: Option>, + pub is_coinbase: bool, + pub sequence: u32, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct PrevOut { + pub scriptpubkey: String, + pub scriptpubkey_asm: String, + pub scriptpubkey_type: String, + pub scriptpubkey_address: String, + pub value: u64, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct Output { + pub scriptpubkey: String, + pub scriptpubkey_asm: String, + pub scriptpubkey_type: String, + pub scriptpubkey_address: Option, + pub value: u64, +} + +impl Transaction { + pub fn is_basic_valid(&self) -> bool { + if self.vin.len() == 0 || self.vout.len() == 0 { + return false; + } + + let mut in_value = 0; + for input in &self.vin { + in_value += input.prevout.value; + } + let mut out_value = 0; + for output in &self.vout { + out_value += output.value; + } + if in_value < out_value { + return false; + } + + true + } + + pub fn fee(&self) -> u64 { + let mut in_value = 0; + for input in &self.vin { + in_value += input.prevout.value; + } + let mut out_value = 0; + for output in &self.vout { + out_value += output.value; + } + in_value - out_value + } +} diff --git a/src/validate.rs b/src/validate.rs new file mode 100644 index 0000000..dac059a --- /dev/null +++ b/src/validate.rs @@ -0,0 +1,71 @@ +// use crate::tx::Transaction; +// use secp256k1::{Message, PublicKey, Secp256k1, Signature}; +// use sha2::{Digest, Sha256}; + +// pub fn validate_transaction(tx: &Transaction) -> Result<(), String> { +// let secp = Secp256k1::verification_only(); + +// for (i, input) in tx.vin.iter().enumerate() { +// if input.is_coinbase { +// continue; +// } + +// // Validate the script type and extract the public key +// let prev_output = &input.prevout; +// let public_key = match prev_output.scriptpubkey_type.as_str() { +// "v1_p2tr" => { +// let pubkey_hex = &prev_output.scriptpubkey_asm[29..]; +// PublicKey::from_slice(&hex::decode(pubkey_hex).map_err(|_| "Invalid public key")?) +// .map_err(|_| "Invalid public key")? +// } +// _ => return Err("Unsupported script type".to_string()), +// }; + +// // Verify the signature +// let signature = Signature::from_der(&hex::decode(&input.witness.as_ref().unwrap()[0]).map_err(|_| "Invalid signature")?) +// .map_err(|_| "Invalid signature")?; + +// // Assuming the sighash type is `SIGHASH_ALL` +// let sighash_all: u32 = 1; + +// let mut sig_hash = Sha256::new(); +// sig_hash.update(&tx.version.to_le_bytes()); + +// for (j, input) in tx.vin.iter().enumerate() { +// if i == j { +// sig_hash.update(&hex::decode(&input.prevout.scriptpubkey).map_err(|_| "Invalid scriptpubkey")?); +// } else { +// sig_hash.update(&[0; 32]); +// sig_hash.update(&[0; 4]); +// } +// sig_hash.update(&input.sequence.to_le_bytes()); +// } + +// for output in &tx.vout { +// sig_hash.update(&output.value.to_le_bytes()); +// sig_hash.update(&hex::decode(&output.scriptpubkey).map_err(|_| "Invalid scriptpubkey")?); +// } + +// sig_hash.update(&tx.locktime.to_le_bytes()); +// sig_hash.update(&sighash_all.to_le_bytes()); + +// let message = Message::from_slice(&sig_hash.finalize()).map_err(|_| "Invalid message")?; +// secp.verify(&message, &signature, &public_key) +// .map_err(|_| "Signature verification failed")?; +// } + +// let total_output_value: u64 = tx.vout.iter().map(|output| output.value).sum(); + +// let mut total_input_value = 0; +// for input in &tx.vin { +// if !input.is_coinbase { +// total_input_value += input.prevout.value; +// } +// } + +// if total_output_value > total_input_value { +// return Err("Total output value exceeds total input value".to_string()); +// } + +// Ok(()) +// } diff --git a/btc_mine_simulator/todo b/todo similarity index 100% rename from btc_mine_simulator/todo rename to todo From 84414dbbea4eccd8ca311054dce4c3376635e195 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Thu, 11 Apr 2024 13:41:04 -0700 Subject: [PATCH 04/16] . --- Cargo.lock | 43 +++++++++++ Cargo.toml | 3 +- output.txt | 204 +++++++++++++++++++++++++-------------------------- src/block.rs | 48 ++++++++---- 4 files changed, 182 insertions(+), 116 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 056bfda..3eb227e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "autocfg" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" + [[package]] name = "block-buffer" version = "0.10.4" @@ -15,6 +21,8 @@ dependencies = [ name = "btc_mine_simulator" version = "0.1.0" dependencies = [ + "hex", + "num-bigint", "secp256k1", "serde", "serde_json", @@ -72,6 +80,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "itoa" version = "1.0.11" @@ -84,6 +98,35 @@ version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + [[package]] name = "proc-macro2" version = "1.0.79" diff --git a/Cargo.toml b/Cargo.toml index c79a9c8..22770d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,4 +10,5 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" secp256k1 = "0.29.0" sha2 = "0.10.8" - +hex = "0.4.3" +num-bigint = "0.4.4" \ No newline at end of file diff --git a/output.txt b/output.txt index 9681ea3..5613042 100644 --- a/output.txt +++ b/output.txt @@ -1,103 +1,103 @@ -BlockHeader { version: 1, previous_block_hash: "", merkle_root: "", time: 0, bits: 0, nonce: 35022 } +{"version":4,"previous_block_hash":"","merkle_root":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","time":1712867678,"bits":520159231,"nonce":67699} {"version":1,"locktime":0,"vin":[{"txid":"","vout":4294967295,"prevout":{"scriptpubkey":"","scriptpubkey_asm":"","scriptpubkey_type":"coinbase","scriptpubkey_address":"","value":0},"scriptsig":"arbitrary data","scriptsig_asm":"","witness":null,"is_coinbase":true,"sequence":4294967295}],"vout":[{"scriptpubkey":"miner's address or script","scriptpubkey_asm":"","scriptpubkey_type":"pay to script hash or pay to public key hash","scriptpubkey_address":"miner's address","value":6250616824}]} -fd6c51917e9dcef4b36f06a97c45fc012b32954c2606b29ea46fbf24627180b2 -f61ba1f5c008032ec0c6226935e41c0906e18768182253dabab18fb414977d79 -b03607c000e41a2c35c3d67f8410274428e02b9fc323b8c5d88013f5c36adaf2 -b69ebd3e9354c7197e66e8994b0d736bf72471952325ec48ae8fd99f234c7486 -c29f43f417fd8f7f4e6c49c9909ff05a21a7f860fe337aec08ab2210c3df0bca -c9ffefcac1150a79dca59e54218a4e2267987193210c3154c57e7e3c152e9f4f -5b6a68bcdeecc661d5e4762fbdd10bb2ab46850fa9a3e7fae8fc925797c30349 -e5dadb7cf200305d9a32270707f1e28792e7e59cafd412025a629d99d8fa8c74 -e8df4626764e473b45dc2f17cac9ccf1abcaefe14ace65c5a8b36dfe5bc1d52b -1da98f44f9799a7afd4f4733745403797a3ea9560a181e8bf35d33a7ec84f383 -921e498ba907d5821d47579619da62b42d4e73f1c5fcf5fe30b8c11a2196a8c8 -d21374704def04b718ef13b90597cc5eed31a85f2d5e38cdece8f3b067081195 -6ee77c8e124b843ceb7ccdb1988bb9808b39323c0aaf72585b1f849200044c31 -20668f91b715e308fdd8f6dba0027fa309b01651f54109f0541d8ee9763c260d -c9dc384fd54a9b7d9f9ee214be33d3dcf5b63ae7a959d30efbc5c805868ccb98 -ed4935165003a09098aea1296f11d4166ab5cf6e50d7489e0f82a08660f7cc8a -8989ed84ee8a37609e4b8aa16aa49ba8daf8885aea56f85d1672bb258e2fd1f2 -c58b9bbdad53334a763df2bd609e49a587c8cb7fb284424ce8543b878fdda8d1 -fc418b1aec8fa42583e87794f16e6c346bb660c51e46212a824e8bd0d79ac5de -9ab68801d474c278928d0dd11e0abccd3a8653b9b30a5185feb05a43e14283f2 -323e4f3ae31a1f934b7ba0494393402b0e9c6e040a57da9bdcce857402493717 -f29043c4e2144d4e6b71e728ca6f7cb3718f52e5bd40a438edcbc5e41255becd -de8e5af87d677bf5e4f1dfbe145f16fb922752cb3650986c125ac67d2171b722 -abedc0cfc2071f03c46265708132d267a4396cf77c5f99066c398b4aea711c90 -7999c95635436a2f6833fecb8f7bf9a700c1ef042cb9ded6317afbc1b0a0cb94 -233cb4f1be5aadc6ed2c9d5a3aca55fe790e1a77e6a7be736eb78da5e94cfc9d -1b9e7d37d4f2a5fdc38682d680e36502e4eb983d35bc7060ca871b66607958b3 -0ef0a023b634d42f6065d6fa6ffa65c59c0bf3fd80cd245dccf6491774f372a8 -a15ad6d104a37b8209ce7c054b8d985fc9254777f20e0fa9117e2f803da6f798 -1ff66ac7cce05dd73ba2b3dbc3efea124759582e643a53b6ff14e939b077b0bc -3bcde627e009d88f7c90e6a7c41a473c63df225b5b351b31572e9a3116164418 -1b8794ac391616ce39ee36d27ac2c7a0fa6f59c86d2770abf4787477b224c8a7 -5240468a06cff25050e66ea7eb29b9fb3a202a69c4a0aa29ed026ca395ae531a -8ea7bbecc3fdc9217f51d596056226f21558f31fdcf339aea72a3adcaa1a0354 -65de04a24879dd627414b942117eac52f9ce3e588357b7b48c9e2cceeaa10020 -1245a76885888a1f83996a310c5e8338cc213fdd00fef669d19846251a3dd9a9 -8bb9cc3fae73b5d6dedc305b24767fa5219bdfbf42a26682b174283dc532ee1f -88a33ef8a1fe8e5b8a0ab2d2bb92c43b8d328a34be4c7af85b1b371fe32ea05b -dd89640609e9d61132ea3fc31683b39d19aa6eefbe88ce6d7f6466a7475d9286 -5e1cb0b51d84b243ee144961e4d89e28ab1c2bcb74f9b8edf778f1b7ca9a0051 -3325fd0f39d2dbfcf1af7c189fcf8185204883dde64d48f35cc4ef280a9fed63 -1ad66f8eda77b2ceb26cb9e744a0c2db4ec49f7dab1d12fd7ddeb1048d1e8f94 -fd54b1a1b24e6bdd651dbf0cac4dbf0c66fad9863179277257ce5debe67baf2e -6550df27a673cc8a39d6e0525e742a9d3d51cec7b5839fcbd7bc3763464561a2 -0fc7e1dca82d1e5e09ccc1de37f8146bf9c71612fa7f8eb015594fb1976af7de -6b287dbfe2d4c8d82a570f7234981a62a476a257fe2f675228d513fe3b1171f7 -395d4b7d04db6ea40b9a9f227c6c8ea36797912dd988b4c3e2ecb16f89d4cd44 -e2adf87c5fe805e62645e6c95fa79f3955d17a68bc85422e07e484e5e7ead201 -f0d95f67d006510afe4f596a4d9a434d0d972857a989edd713af33dbe338cce5 -54f134f03552bb71aa8e29949710f8fa53f041838b20b041573f3ac077e1446b -394eba71a6c97104ba52a3e593a9de0ee72a8081cce0dc9ad15120cc0c54af22 -4ab31bba7fe1a0e49f319eb7456d560330680203116cc108cdd3a1adedcba2f6 -a72c35285d0b157ba1a10aefa54fb093658217daebfc6395896dd5263e116514 -ebcecdf8a1d9aab3e1c1aafc5b33336cfa8b5970f672c6494694447fe90630a9 -1a03612f53738cab1a31e84c934572b8e6521512231c97a2c56bf18dccb40624 -e2dbe2c3b1be040ccb1f2787165d59784cbb329e9d2751311f892a35a4832eae -da87057bfb3bb32c0c5a90c85cf329f82059134cd014259bfb6b2cd73aa32fd4 -b49d68458ebf1ef0d9f6361d5458d973e7c74eee74ce1f6a7135d52600b17444 -37fc115f78757a7878fd1c8b1a0096f515afb4ad2a6e3d64da1cfa4925b8bb6c -0b4e8ce425e7f1f4d93d0216cbdf0d036b9f29a759f6bd4dd1d0ed4798093bb4 -d6164d3110ce40e78244d11976b3238a24b19d6db4011bae7e1f58c83e5b555f -e466d26c4bf9c467f2d3d7f5f4e994e3ca3e7117a7e6c134b406e418f608c18f -6dd4d4439ff6ea50722e4f7309a0f3e60ddf361a483b5b7cac0e80b582ee484e -20ac37ddd19b6ab3412f24b480584ea59903bad3a9245466f1ad41f4921d68cf -dfb908de8bf20c672a2512038f5a681c056c50e4c17bc615ab0b4aef9e5b9efd -c90f1f60fec4b71dbf58355f91237c77a761b7a40be8ea8464fa732707058245 -cd83b145ba40b14843ff5fc816e106e3c744df0a01d9d1fd2f1bf33af61f6cf6 -ca4426c4d51b0b3a07518b3897836b0270b9fc5d33a1c56792e96dc2af4611cf -797328fde30e4868c95cf26c8d209d8ae9d1bc4b81ce5779bb63b4b2f37b87c4 -9a43a49242e9f0757afd059988b25d941da898625c703ede3a91e83b3da98def -c85e3a02297694ca971b5318c9e503bc18bc7aec8b2f1ed9c471e9356b330acb -82ac019ce9e671a02b5191afd8365d90e79dd9e5c93dfe9d94c311bc60c4023c -e347236eefec653d30e2d938d240289a867f5c247b8a9e52bfd36220668b2812 -42e9b2be6a03a0b67cb9df59824dc7afccdac0f99b8d68fbe5558aabcc0d6e5f -dd8df538a8d70e0928a4857ca07baeaee128dffe4f60cea0a0358261e946ef15 -a9abb01a4f6ba8c4132fdd15464400c71acd917656bfa5d18a669e06f959b437 -a59d7855abf3721e7dfab2473b76dfa7ddfca873bec1b681e7a1bd0311ca0f3a -9326485a16a912c7c78cc18caa8ca357f1305fbe98ce49e345e7ba063a008767 -9dec9675da7db73484e1b316a4b82c8f02b8988f59982b6261f31b6db2dfbbd6 -efdd8ab778aaaa50b80632815a28c44d8ca30349b76ae894cf892ee311c49175 -c1c533466cc4499c293c93350ed6809a8a9bd8bd10f3176327b7a9d8253d0773 -84c9e1abdacf151cf6848e25a9a8c568122fd6fa5e5d6f43e5583b585d2ccaac -2b8f5fb8ce910609fc6e5b72e58e1b7fa65e58c5eccdb67e4e038d2423ded6fd -f7f6cd7bef68c5b7887ee8b9ecc42dbba89d7483022dff7953aced44ddfbac2a -b297e1616f3f554bdde09c375498ab793d4587053fb9e8623a867cde9988a265 -827192f8870bb35a4319827778844666fee36c62d3db6cc4e74095ddde6bf0d3 -0b1f2f3f33f6a8c553236045d05eb17799299c25e95b625e2fd58b0b42fa2d4f -9bb6b6df0dcfa78c163fc9a32b8951d7d427bb9a32d00a923628ed7c5106c5dc -55145fa5bcf5ece7d038dab44bc7d50f77684be936de75ce5aed5c9a19c1923b -26efae64a334f0c1fe74cc069138bc5c25129e4469df0cb22a81076040674f67 -e1c9ed9226011da72fffa01c517d32b65dfc73d2583049a349222a1306cc87cf -7d5fb57fef2d28dc55bbddd6b6b6edd2faaefea7d2c510761b05d28ecc557eba -b9bf6b8785f569aaf5a7e77930f1b0da9124103808b30801a5a90f755010226d -bc05f09bc92b926b9e605178d1341fadbcdb8ce0766ea87bc4ea0a0c6b30eaee -5131a48061a1b95e208dca9bf03e457209c49e8bd0115c6cea1d5a41da79e3df -43763e32d64f917007033677bef1f7fe768421c48c5459635b11aff19c71fed4 -de3e74676f63474069deb4e3276eaf98e4ae9297ae2f451248f7a966c97cbe36 -d24484c3dc35542d2f4d4c862e61126b29f7563411608f399fd4ddc45f76b7e9 -492f69d73f2b16a00c516ae9fa1b27ae4f1c60681d96d1b5964c59c2122d9f3a -d7c9dc1d6ff72609f2d72c2842732f33201ca02968280c3b41b1c49cbb44b6e6 -83a4d16652052c9dee5e50200371960979ba379c29a181a51a13c80fdce449a2 +812b802d700089a9bd8860ea096fc36a4f539afa695f5a074ffcc62a8afb6d8d +5f28da0c20bcb1004da92c616e98a508c772767f0f991cd44e90c8e74f019b4b +ac842ed609010cc043bc118219d89b742d6e9201adf7d9a81710734378d3fcab +4aecf2a0331dc8d1404179d7908ad82c4eb28d37254e56756f1e40ea871e6f0c +3f69a7033b494a330e1a61dd47bd4fa462de810278ec9e82021090401e2d9d1a +8a274f7ef6de311ccd9d06dd0987d7cbac0ced74dc3489cdd02ca5ebf64100c1 +857111bed24a0410afbc2bdb620d1c4d23b6baec8022a15976e028cc7de153f1 +7ca14d62f4eec620dacfb142cb8fde789082e5febce9297138c9bbd415006da8 +b16c4ef532c799620a56ec44054a4ce0f1895dc3c49c4bc90e445012e5a3679d +80db29cd345c047414d25e0d5180220fbcb00cb538afaa99beb6a19cc44f45c4 +6dbd28434b1564e0d4b386d428c6cf903b98e0356043b5337be0511a18ed213c +130a835719cca437b97d7fc938df6cd24ae3e8a44bc872afccbe01f6855ccc12 +b0a9e7aee90b8bbb222cb9912e0b3bc0767983c0f415c42a4c5acc708678ba59 +8556a44223ba6ffb6e74221e670e9a436bc66188fe510f73047e8f792866c3ed +55a99deebbfd81d5c7c6be2b207e713ce1716b2690c18821c8a841a0b36d17d9 +480b4961009cddfcd7ee3b52433bc06073e6d9756089ed9f95ecc95510d46a14 +846d0777a9d9fd89123d7ae6c813f3578512fc3e4cb77d79861bb54376db52b1 +8ed9b57994e8b7a8201de65e56848de18c26b0585261bb892bc43963c789a790 +2d8b832af08f8b6712cccb4ff197ef812720b5dbfd06333d9b234cde4fc451cb +376a3874f498b6ca6e2a4853379a53fbee0700fab17f358c36034ad651e9ae32 +fae9961192db94a36c33a013ff5a827929df231794c785c9c3494b894d27b3cb +b345188389d02434a224aad7f0054b360c902589635860a6036563c1b562a681 +8d4cc43c3d3b32247947a80068c9d0e859748430196c9ec89cf922b93fcaad2b +3ab21440157e2528fba1eb8dd11ebc162decf002a45fc01143255080f95de4e0 +b9d016bc4ba5ff4a43c0944dc5227b0418045db0f7f14ee7ea0b1d7a54c43f44 +1f5bc276f60f6b6041675427c89dd77a931dd4a308c782e1cac370f60d08b4fc +0ecbef8fa7e80f189d343cb43edf8a51e1a5d687ceace9fdd43f45ce940efab1 +8f415bbd483339fda1e580243a15c01b2aac347af2b951d44b172e1304a2f62a +d425492e74cdfb79cc3caa85b4218339217ee29d28aee8e238ee2938c4f8fcf4 +ac4a2bdb75d53ab83d1ce0784174847411b52546ebe667d1ef08336484eeaeac +ca7c618cf1e4f950fad1486c6f5f6b8eca879a2b6ec4fd73a7871874ec86d502 +9447b7ddbff8827c5c5f656c39302a93b27da9e2e6cac89355ad83bdea05754a +c258366f4109983f754a0051e67e9578f8993526f517dc3bc70a0cb8f92d2121 +a4ec5ab467fcec3f2b55768ddb4e39f439bc396795b9310871051ff58aa35b6f +a38204470156f644e0d4d88004e0834c8f50c6e41c0ddf87052946ff7ae7e870 +f0eac6e0cb5540d0f43deffca807eed349e8d2815d89c0b0be3ec9f0f35f58fc +20408ef1807b14c3dbecd85f83fdc97a68b16f0b13b867cd21896e1dbd79cc33 +b3bc00caf883c7d7b79c3ac46398e9c5a33d82e3e88b343ddbec69f0b5ff7c43 +cdc3618937ffb93919531945ec24aaad49ae67e8252176f2934da81221796b48 +2cb6754c908697db519777b08968017bf15c6f8571b2cba193984213e7daef3b +6f8bbeb53659edda67f0750dabf0caebfbfcc1f93e496c3d2e1ee17bee47b9dd +d3b03f6752a0b76bcf9628ce2ae612a237c0f0d3879456c620998030134f4f53 +87f11a88e633890e9b16f155ef2c3fb082a9cb9568b433076f329fb59a0961b4 +18b3a601dde276d55e714ea8522fc241b98351ed30070168af5f166e1d5d0ab0 +1c4af816067f4c3eb4ae9c88a0773eacaae96b651712d9b2ec79ddc4a9119995 +d708149ecbfd3200ea2dbbf4b9cdc25d22e4c6dd8121855dfd5e282835bb6de4 +66615f385f658eafde6d7c42f1aa6d4d0c8a0af0edf62e5109f27483a29e2b4f +e306dcf31c8e096b237853268b6acfabf531e3b2570e4ec31699a3175140d1d4 +59d8e439cfadcb9020246ca9db55fe371d12230a52782c385f6a459ab3a503a4 +0783641716485412357d77bde1501ff6d75311157084cd96c86956347238d096 +2db2fbc58096973a4c18bf355a25b2506fd9cde70504aa3f58ced8357c3f3091 +d83b246906eb64b13e25a0b96b0bbdc1859058d69f78013f3adbec3025ba20ca +6c0cb2e64a41889692d01c553f7dcfb42821fe820adc746f3de3054a8a77355e +01a5170e4b15218dcf6df9d1faa65f9f8e5e93e8cf7c375ce6cd0d93ee34a1bb +5d88ca9b8720f6f031745d01139c6f44e530b023a82b265344cbb968ff2a0eeb +261e9cf018d41c47409db9fb36284539092bc8735addcfaa948d06d9c74f76e3 +756e9cfaa1848823ee7753d72ef222ef8b35331a1a559abf1ccaea81400bb3ea +d6b0277a7ce54f49940ea6bc66368931384f7b105c96d4008edc4ed88e344eb6 +fd8902c332c9a98f6b14e21a8bb6d08ebcbed3881b5fc399f81069be068213a4 +539ba3a25b505d3f785009680a101cb5ea7d518fea73dc7cbe3feaa09c46e13b +545090c2b62f98e9ddcc63bbb1ab8b2eea471ef28699180ee7da223746dc35c2 +963fa1b59e3ba26362e9d5cb9643b632b67babc6448214789c5b18ed5fe9a490 +4d9ed25cddad91bca5497fc6c05f540de347f9afeb0bc4308cffe71e821fe8ca +b3a097e795927a1cc8b5c1e0358b2020e61dfd2d6e5b911f82b619ae728b7fdb +22d273c3eacadd3cc9e9849b3a5b637d316fb84189bf7d36a0a584a402a00f3c +a08674fdda39815394b53baddffc036ae4889c040a315b96b0a21decbc2b2592 +6a2360025f90bfdffd244c6aee93fba27e9d75e2d55e3cc1ec391a73e386c11f +6c9fc7238529aa206507e4954040e768dc589479994afee00eb2622e5eb5d52a +45e544efa0bb3e6f930548f30ad6b6d3c2bb301114e26b1efd1f8b680d1a22c1 +0663ec9add0589fbca3f29172d6128feca777ada5c4e75ae440cc0b446ef1908 +383310ee2c8ec10fa34d4a0c4ee75a154883abd2fa666037ef490e2fdde0fa5b +8dce6de1e3832c873b55153c710c1a93b1d6f48565935d1174eaa5e8322d3053 +e6bfe61bee3b4512d32de13059288c461205cac3d97f1996b25ce860f9e07465 +b22d2d0b15c1e3b6727d1dba819173fa1eaccd7fa73531f2a00651b76460dfaa +2a3d24355fa0c4276e62248164c43b96aa186cce4a1a8ec9c735ecb4bdfdc52c +b1d9ee0c8b79baf5915d4266c98da744a4655165d7b9086e06ae458faf80dc4c +3337964829646794bf556557a2021facba73a0f17b184f86715e674e3ef3f932 +aeade79dd3027f1b3d401f60942c73f595948934c7b1cf6f3711e95f0e4f6a9d +13c378cb796fb8e52f70422e3868cff0ae7c340d7a07d7c4c74634a695a1dbad +1ace5b9594f379ef4abc98ba026718f961a39881f5472faf28f0561a8f6a9bc2 +c42596a8e94b35f3d477f49c096556fddb087f163fc2cf260e797b7286c2c6b0 +004e7c1085da793d2de495963df33fa732ac4b2f6b1729dc2a6f66a5078414ef +f0c5ce00b6ae2db631e61f94e14a5bd9848747ac119a585e156af703653a7677 +beb6f94a5b68ef8b9554768c1433e5f669ae107fade04c5993fc3ca4182be78a +8cd935826e7a6d57b2e3d8d2085588d0abe6cceed9baa079c51860818ac3e66f +483aba4675f200d4177114205bdcce26929696814f7f816ff10efc9cd1809802 +d115efebfaed05793e47f1536fee2ff4daf8b6d845383b26c0d9e488485dc4ff +c029263d900c8e04961d056c314848d010500d609990520d06ae233aeb9bd272 +9231a96b923052ad089508a1f11c5eb3d3d6c450a129a774a91abac1d77c86e1 +b093a88a2b5340edd0334cd4a298abbe0a485ca232739ece472e28d7e9ed7d77 +f41239ed60c9eb3c852ca11d6a8293ab54d9786b59fe70d15f5c717b439aa7eb +28567089aaaad292f9e891fd39e54f2c6b0b277463a78742d2948d0b51db21f7 +42c9bde5103f2d81e28ef157956ed05f7f59eac49d03f9641e743c358a0eb5dc +76a9fb9e7bbe62d436daadd4b347bb6d91d6b64bb0de6430076f0e0ffeba42ce +bfb35048e1388fb3c4bed6beb4d726b5cc56304da2d2d7cf1b27b40e3e9a75c9 +7dfcde409617ac38100b3c5e57ad8bac649b9ceb79ff7c777c227c643c815b0b +f82b68bcd4cc9d117661aeefa94d3ff50dc538ac7123e5d0381ab66e5cafd1f2 +3a709476e8d9a560a2dc34815711493c0ed1a31b3acd0b804a8042dcb2e27e66 +40abe3cf06833b58caef17ea9c6d54d34ff9776333f171351a3e4f9e7b7011ac +acaf99ebfaa7326f1b95db619ba937a08fb3bb3c61b8fbaa88730d62400d963f +5f5949e5d1d8db4f5ec39d2f91b85dab84980a1f1a2779eea349b3d81b1ed9e6 diff --git a/src/block.rs b/src/block.rs index c1519fb..6fe9aea 100644 --- a/src/block.rs +++ b/src/block.rs @@ -1,7 +1,8 @@ +use num_bigint::BigUint; use serde::{Deserialize, Serialize}; use serde_json; use sha2::{Digest, Sha256}; -use std::{fs::File, io::Write, vec}; +use std::{fs::File, io::Write, time::SystemTime, vec}; use crate::tx::Transaction; @@ -23,13 +24,30 @@ pub struct Block { impl Block { pub fn mine(&mut self, difficulty_target: &str) { + // Set up the header with valid values + self.header.version = 4; // Ensure version is at least 4. + self.header.bits = 0x1f00ffff; // Set bits to specified value. + self.header.time = SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_secs() as u32; // Set time to current timestamp. + self.header.merkle_root = + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855".to_string(); // This should be computed based on transactions. + self.header.previous_block_hash = + "0000000000000000000000000000000000000000000000000000000000000000".to_owned(); + + let difficulty_bytes = + hex::decode(difficulty_target).expect("Invalid hex in difficulty target"); + let difficulty_target = BigUint::from_bytes_be(&difficulty_bytes); + loop { - let header = serde_json::to_string(&self.header).unwrap(); - let hash = Sha256::digest(header.as_bytes()); - let hash_hex = format!("{:x}", hash); + let header_bytes = + serde_json::to_vec(&self.header).expect("Failed to serialize header"); + let hash = Sha256::digest(&Sha256::digest(&header_bytes)); + let hash_int = BigUint::from_bytes_be(&hash); - if hash_hex < difficulty_target.to_owned() { - println!("Block mined: {}", hash_hex); + if hash_int < difficulty_target { + println!("Block mined with hash: {:x}", hash); break; } @@ -38,20 +56,24 @@ impl Block { } pub fn generate_output(&self) { - let mut output = File::create("output.txt").unwrap(); + let mut output = File::create("output.txt").expect("Failed to create output.txt"); // Write block header - writeln!(output, "{:?}", self.header).unwrap(); + let header_str = serde_json::to_string(&self.header).expect("Failed to serialize header"); + writeln!(output, "{}", header_str).expect("Failed to write header to file"); // Serialize and write coinbase transaction - let coinbase_tx = serde_json::to_string(&self.transactions[0]).unwrap(); - writeln!(output, "{}", coinbase_tx).unwrap(); + let coinbase_tx = &self.transactions[0]; + let coinbase_tx_str = + serde_json::to_string(coinbase_tx).expect("Failed to serialize coinbase transaction"); + writeln!(output, "{}", coinbase_tx_str) + .expect("Failed to write coinbase transaction to file"); // Write transaction IDs for tx in &self.transactions { - let tx_json = serde_json::to_string(tx).unwrap(); - let txid = Sha256::digest(tx_json.as_bytes()); - writeln!(output, "{:x}", txid).unwrap(); + let tx_str = serde_json::to_string(tx).expect("Failed to serialize transaction"); + let txid = Sha256::digest(&Sha256::digest(tx_str.as_bytes())); + writeln!(output, "{:x}", txid).expect("Failed to write txid to file"); } } } From a8b7d82715b76dbb5339644ae46382b07f0375a5 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Thu, 11 Apr 2024 13:53:25 -0700 Subject: [PATCH 05/16] . --- src/block.rs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/block.rs b/src/block.rs index 6fe9aea..9b4fdaf 100644 --- a/src/block.rs +++ b/src/block.rs @@ -58,16 +58,25 @@ impl Block { pub fn generate_output(&self) { let mut output = File::create("output.txt").expect("Failed to create output.txt"); - // Write block header - let header_str = serde_json::to_string(&self.header).expect("Failed to serialize header"); - writeln!(output, "{}", header_str).expect("Failed to write header to file"); + // Manually construct the header in binary format + let mut header_bin = vec![]; + header_bin.extend(&self.header.version.to_le_bytes()); // Little endian for version + header_bin.extend(&hex::decode(&self.header.previous_block_hash).unwrap()); // Hex-decoded previous block hash + header_bin.extend(&hex::decode(&self.header.merkle_root).unwrap()); // Hex-decoded merkle root + header_bin.extend(&self.header.time.to_le_bytes()); // Little endian for time + header_bin.extend(&self.header.bits.to_le_bytes()); // Little endian for bits + header_bin.extend(&self.header.nonce.to_le_bytes()); // Little endian for nonce + + // Convert binary header to hexadecimal string + let header_hex = hex::encode(header_bin); + + // Write block header in hex format + writeln!(output, "{}", header_hex).expect("Failed to write header to file"); // Serialize and write coinbase transaction let coinbase_tx = &self.transactions[0]; - let coinbase_tx_str = - serde_json::to_string(coinbase_tx).expect("Failed to serialize coinbase transaction"); - writeln!(output, "{}", coinbase_tx_str) - .expect("Failed to write coinbase transaction to file"); + let coinbase_tx_str = serde_json::to_string(coinbase_tx).expect("Failed to serialize coinbase transaction"); + writeln!(output, "{}", coinbase_tx_str).expect("Failed to write coinbase transaction to file"); // Write transaction IDs for tx in &self.transactions { From 70a5e2abefffe9fe5f7d669164ded2a4e899d496 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Thu, 11 Apr 2024 22:02:55 -0700 Subject: [PATCH 06/16] . --- output.txt | 2 +- src/block.rs | 105 +++++++++++++++++++++++++++++++++++++++------------ src/main.rs | 1 + 3 files changed, 83 insertions(+), 25 deletions(-) diff --git a/output.txt b/output.txt index 5613042..0695927 100644 --- a/output.txt +++ b/output.txt @@ -1,4 +1,4 @@ -{"version":4,"previous_block_hash":"","merkle_root":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","time":1712867678,"bits":520159231,"nonce":67699} +04000000000000000000000000000000000000000000000000000000000000000000000077ede06aa0653e969ad56c8d8b828e096205c9026aacc98611bb9fdcc685d882629c1866ffff001f74290000 {"version":1,"locktime":0,"vin":[{"txid":"","vout":4294967295,"prevout":{"scriptpubkey":"","scriptpubkey_asm":"","scriptpubkey_type":"coinbase","scriptpubkey_address":"","value":0},"scriptsig":"arbitrary data","scriptsig_asm":"","witness":null,"is_coinbase":true,"sequence":4294967295}],"vout":[{"scriptpubkey":"miner's address or script","scriptpubkey_asm":"","scriptpubkey_type":"pay to script hash or pay to public key hash","scriptpubkey_address":"miner's address","value":6250616824}]} 812b802d700089a9bd8860ea096fc36a4f539afa695f5a074ffcc62a8afb6d8d 5f28da0c20bcb1004da92c616e98a508c772767f0f991cd44e90c8e74f019b4b diff --git a/src/block.rs b/src/block.rs index 9b4fdaf..d8aa4bd 100644 --- a/src/block.rs +++ b/src/block.rs @@ -1,14 +1,13 @@ +use crate::tx::Transaction; use num_bigint::BigUint; use serde::{Deserialize, Serialize}; use serde_json; use sha2::{Digest, Sha256}; use std::{fs::File, io::Write, time::SystemTime, vec}; -use crate::tx::Transaction; - #[derive(Serialize, Deserialize, Debug)] pub struct BlockHeader { - pub version: i32, + pub version: u32, pub previous_block_hash: String, pub merkle_root: String, pub time: u32, @@ -20,6 +19,7 @@ pub struct BlockHeader { pub struct Block { pub header: BlockHeader, pub transactions: Vec, + pub txids: Vec, } impl Block { @@ -31,34 +31,27 @@ impl Block { .duration_since(SystemTime::UNIX_EPOCH) .unwrap() .as_secs() as u32; // Set time to current timestamp. - self.header.merkle_root = - "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855".to_string(); // This should be computed based on transactions. + self.header.merkle_root = self.generate_merkle_root().unwrap(); // Compute merkle root based on transactions. self.header.previous_block_hash = "0000000000000000000000000000000000000000000000000000000000000000".to_owned(); let difficulty_bytes = hex::decode(difficulty_target).expect("Invalid hex in difficulty target"); - let difficulty_target = BigUint::from_bytes_be(&difficulty_bytes); loop { - let header_bytes = - serde_json::to_vec(&self.header).expect("Failed to serialize header"); - let hash = Sha256::digest(&Sha256::digest(&header_bytes)); - let hash_int = BigUint::from_bytes_be(&hash); + let header_bin = self.serialize_header(); + let hash = double_sha256(&header_bin); + let reversed_hash = hash.iter().rev().copied().collect::>(); - if hash_int < difficulty_target { - println!("Block mined with hash: {:x}", hash); + if reversed_hash < difficulty_bytes { + // println!("Block mined with hash: {:x}", hex::encode(reversed_hash)); break; } - self.header.nonce += 1; } } - pub fn generate_output(&self) { - let mut output = File::create("output.txt").expect("Failed to create output.txt"); - - // Manually construct the header in binary format + fn serialize_header(&self) -> Vec { let mut header_bin = vec![]; header_bin.extend(&self.header.version.to_le_bytes()); // Little endian for version header_bin.extend(&hex::decode(&self.header.previous_block_hash).unwrap()); // Hex-decoded previous block hash @@ -66,23 +59,87 @@ impl Block { header_bin.extend(&self.header.time.to_le_bytes()); // Little endian for time header_bin.extend(&self.header.bits.to_le_bytes()); // Little endian for bits header_bin.extend(&self.header.nonce.to_le_bytes()); // Little endian for nonce + header_bin + } + + /// Generates the Merkle root from the block's transactions. + fn generate_merkle_root(&mut self) -> Option { + self.compute_txids(); + + if self.txids.is_empty() { + return None; + } + + let mut level = self + .txids + .iter() + .map(|txid| { + hex::decode(txid) + .unwrap() + .into_iter() + .rev() + .collect::>() + }) + .collect::>(); + + while level.len() > 1 { + let mut next_level = Vec::new(); + + for chunk in level.chunks(2) { + let pair_hash = match chunk { + [left] => double_sha256(&[left.clone(), left.clone()].concat()), + [left, right] => double_sha256(&[left.clone(), right.clone()].concat()), + _ => unreachable!(), + }; + next_level.push(pair_hash); + } + + level = next_level; + } + + Some(hex::encode( + level[0].iter().rev().copied().collect::>(), + )) + } + + pub fn generate_output(&self) { + let mut output = File::create("output.txt").expect("Failed to create output.txt"); // Convert binary header to hexadecimal string - let header_hex = hex::encode(header_bin); + let header_hex = hex::encode(self.serialize_header()); // Write block header in hex format writeln!(output, "{}", header_hex).expect("Failed to write header to file"); // Serialize and write coinbase transaction let coinbase_tx = &self.transactions[0]; - let coinbase_tx_str = serde_json::to_string(coinbase_tx).expect("Failed to serialize coinbase transaction"); - writeln!(output, "{}", coinbase_tx_str).expect("Failed to write coinbase transaction to file"); + let coinbase_tx_str = + serde_json::to_string(coinbase_tx).expect("Failed to serialize coinbase transaction"); + writeln!(output, "{}", coinbase_tx_str) + .expect("Failed to write coinbase transaction to file"); // Write transaction IDs - for tx in &self.transactions { - let tx_str = serde_json::to_string(tx).expect("Failed to serialize transaction"); - let txid = Sha256::digest(&Sha256::digest(tx_str.as_bytes())); - writeln!(output, "{:x}", txid).expect("Failed to write txid to file"); + for txid in &self.txids { + writeln!(output, "{}", txid).expect("Failed to write txid to file"); + } + } + + fn compute_txids(&mut self) { + if self.txids.is_empty() { + self.txids = self + .transactions + .iter() + .map(|tx| { + let tx_json = serde_json::to_string(tx).expect("Serialization error"); + hex::encode(double_sha256(tx_json.as_bytes())) + }) + .collect(); } } } + +fn double_sha256(data: &[u8]) -> Vec { + let hash1 = Sha256::digest(data); + let hash2 = Sha256::digest(&hash1); + hash2.to_vec() +} diff --git a/src/main.rs b/src/main.rs index ce9abfb..d8cbdea 100644 --- a/src/main.rs +++ b/src/main.rs @@ -98,6 +98,7 @@ fn main() { nonce: 0, }, transactions: valid_tx, + txids: vec![], }; block.mine(difficulty_target); From 6f021c6cf668c4e4d1829857c34cebff05451e08 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Sat, 13 Apr 2024 00:31:01 -0700 Subject: [PATCH 07/16] . --- Cargo.lock | 10 +++ Cargo.toml | 3 +- output.txt | 206 +++++++++++++++++++++--------------------- src/block.rs | 231 +++++++++++++++++++++++++++++++++++++++++++++--- src/coinbase.rs | 46 +++++++--- src/main.rs | 55 ++++++++---- src/tx.rs | 179 ++++++++++++++++++++++++++++++++++++- 7 files changed, 585 insertions(+), 145 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3eb227e..3da04d4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,6 +23,7 @@ version = "0.1.0" dependencies = [ "hex", "num-bigint", + "ripemd", "secp256k1", "serde", "serde_json", @@ -145,6 +146,15 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest", +] + [[package]] name = "ryu" version = "1.0.17" diff --git a/Cargo.toml b/Cargo.toml index 22770d3..0dab600 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,4 +11,5 @@ serde_json = "1.0" secp256k1 = "0.29.0" sha2 = "0.10.8" hex = "0.4.3" -num-bigint = "0.4.4" \ No newline at end of file +num-bigint = "0.4.4" +ripemd = "0.1.3" \ No newline at end of file diff --git a/output.txt b/output.txt index 0695927..6a1ca25 100644 --- a/output.txt +++ b/output.txt @@ -1,103 +1,103 @@ -04000000000000000000000000000000000000000000000000000000000000000000000077ede06aa0653e969ad56c8d8b828e096205c9026aacc98611bb9fdcc685d882629c1866ffff001f74290000 -{"version":1,"locktime":0,"vin":[{"txid":"","vout":4294967295,"prevout":{"scriptpubkey":"","scriptpubkey_asm":"","scriptpubkey_type":"coinbase","scriptpubkey_address":"","value":0},"scriptsig":"arbitrary data","scriptsig_asm":"","witness":null,"is_coinbase":true,"sequence":4294967295}],"vout":[{"scriptpubkey":"miner's address or script","scriptpubkey_asm":"","scriptpubkey_type":"pay to script hash or pay to public key hash","scriptpubkey_address":"miner's address","value":6250616824}]} -812b802d700089a9bd8860ea096fc36a4f539afa695f5a074ffcc62a8afb6d8d -5f28da0c20bcb1004da92c616e98a508c772767f0f991cd44e90c8e74f019b4b -ac842ed609010cc043bc118219d89b742d6e9201adf7d9a81710734378d3fcab -4aecf2a0331dc8d1404179d7908ad82c4eb28d37254e56756f1e40ea871e6f0c -3f69a7033b494a330e1a61dd47bd4fa462de810278ec9e82021090401e2d9d1a -8a274f7ef6de311ccd9d06dd0987d7cbac0ced74dc3489cdd02ca5ebf64100c1 -857111bed24a0410afbc2bdb620d1c4d23b6baec8022a15976e028cc7de153f1 -7ca14d62f4eec620dacfb142cb8fde789082e5febce9297138c9bbd415006da8 -b16c4ef532c799620a56ec44054a4ce0f1895dc3c49c4bc90e445012e5a3679d -80db29cd345c047414d25e0d5180220fbcb00cb538afaa99beb6a19cc44f45c4 -6dbd28434b1564e0d4b386d428c6cf903b98e0356043b5337be0511a18ed213c -130a835719cca437b97d7fc938df6cd24ae3e8a44bc872afccbe01f6855ccc12 -b0a9e7aee90b8bbb222cb9912e0b3bc0767983c0f415c42a4c5acc708678ba59 -8556a44223ba6ffb6e74221e670e9a436bc66188fe510f73047e8f792866c3ed -55a99deebbfd81d5c7c6be2b207e713ce1716b2690c18821c8a841a0b36d17d9 -480b4961009cddfcd7ee3b52433bc06073e6d9756089ed9f95ecc95510d46a14 -846d0777a9d9fd89123d7ae6c813f3578512fc3e4cb77d79861bb54376db52b1 -8ed9b57994e8b7a8201de65e56848de18c26b0585261bb892bc43963c789a790 -2d8b832af08f8b6712cccb4ff197ef812720b5dbfd06333d9b234cde4fc451cb -376a3874f498b6ca6e2a4853379a53fbee0700fab17f358c36034ad651e9ae32 -fae9961192db94a36c33a013ff5a827929df231794c785c9c3494b894d27b3cb -b345188389d02434a224aad7f0054b360c902589635860a6036563c1b562a681 -8d4cc43c3d3b32247947a80068c9d0e859748430196c9ec89cf922b93fcaad2b -3ab21440157e2528fba1eb8dd11ebc162decf002a45fc01143255080f95de4e0 -b9d016bc4ba5ff4a43c0944dc5227b0418045db0f7f14ee7ea0b1d7a54c43f44 -1f5bc276f60f6b6041675427c89dd77a931dd4a308c782e1cac370f60d08b4fc -0ecbef8fa7e80f189d343cb43edf8a51e1a5d687ceace9fdd43f45ce940efab1 -8f415bbd483339fda1e580243a15c01b2aac347af2b951d44b172e1304a2f62a -d425492e74cdfb79cc3caa85b4218339217ee29d28aee8e238ee2938c4f8fcf4 -ac4a2bdb75d53ab83d1ce0784174847411b52546ebe667d1ef08336484eeaeac -ca7c618cf1e4f950fad1486c6f5f6b8eca879a2b6ec4fd73a7871874ec86d502 -9447b7ddbff8827c5c5f656c39302a93b27da9e2e6cac89355ad83bdea05754a -c258366f4109983f754a0051e67e9578f8993526f517dc3bc70a0cb8f92d2121 -a4ec5ab467fcec3f2b55768ddb4e39f439bc396795b9310871051ff58aa35b6f -a38204470156f644e0d4d88004e0834c8f50c6e41c0ddf87052946ff7ae7e870 -f0eac6e0cb5540d0f43deffca807eed349e8d2815d89c0b0be3ec9f0f35f58fc -20408ef1807b14c3dbecd85f83fdc97a68b16f0b13b867cd21896e1dbd79cc33 -b3bc00caf883c7d7b79c3ac46398e9c5a33d82e3e88b343ddbec69f0b5ff7c43 -cdc3618937ffb93919531945ec24aaad49ae67e8252176f2934da81221796b48 -2cb6754c908697db519777b08968017bf15c6f8571b2cba193984213e7daef3b -6f8bbeb53659edda67f0750dabf0caebfbfcc1f93e496c3d2e1ee17bee47b9dd -d3b03f6752a0b76bcf9628ce2ae612a237c0f0d3879456c620998030134f4f53 -87f11a88e633890e9b16f155ef2c3fb082a9cb9568b433076f329fb59a0961b4 -18b3a601dde276d55e714ea8522fc241b98351ed30070168af5f166e1d5d0ab0 -1c4af816067f4c3eb4ae9c88a0773eacaae96b651712d9b2ec79ddc4a9119995 -d708149ecbfd3200ea2dbbf4b9cdc25d22e4c6dd8121855dfd5e282835bb6de4 -66615f385f658eafde6d7c42f1aa6d4d0c8a0af0edf62e5109f27483a29e2b4f -e306dcf31c8e096b237853268b6acfabf531e3b2570e4ec31699a3175140d1d4 -59d8e439cfadcb9020246ca9db55fe371d12230a52782c385f6a459ab3a503a4 -0783641716485412357d77bde1501ff6d75311157084cd96c86956347238d096 -2db2fbc58096973a4c18bf355a25b2506fd9cde70504aa3f58ced8357c3f3091 -d83b246906eb64b13e25a0b96b0bbdc1859058d69f78013f3adbec3025ba20ca -6c0cb2e64a41889692d01c553f7dcfb42821fe820adc746f3de3054a8a77355e -01a5170e4b15218dcf6df9d1faa65f9f8e5e93e8cf7c375ce6cd0d93ee34a1bb -5d88ca9b8720f6f031745d01139c6f44e530b023a82b265344cbb968ff2a0eeb -261e9cf018d41c47409db9fb36284539092bc8735addcfaa948d06d9c74f76e3 -756e9cfaa1848823ee7753d72ef222ef8b35331a1a559abf1ccaea81400bb3ea -d6b0277a7ce54f49940ea6bc66368931384f7b105c96d4008edc4ed88e344eb6 -fd8902c332c9a98f6b14e21a8bb6d08ebcbed3881b5fc399f81069be068213a4 -539ba3a25b505d3f785009680a101cb5ea7d518fea73dc7cbe3feaa09c46e13b -545090c2b62f98e9ddcc63bbb1ab8b2eea471ef28699180ee7da223746dc35c2 -963fa1b59e3ba26362e9d5cb9643b632b67babc6448214789c5b18ed5fe9a490 -4d9ed25cddad91bca5497fc6c05f540de347f9afeb0bc4308cffe71e821fe8ca -b3a097e795927a1cc8b5c1e0358b2020e61dfd2d6e5b911f82b619ae728b7fdb -22d273c3eacadd3cc9e9849b3a5b637d316fb84189bf7d36a0a584a402a00f3c -a08674fdda39815394b53baddffc036ae4889c040a315b96b0a21decbc2b2592 -6a2360025f90bfdffd244c6aee93fba27e9d75e2d55e3cc1ec391a73e386c11f -6c9fc7238529aa206507e4954040e768dc589479994afee00eb2622e5eb5d52a -45e544efa0bb3e6f930548f30ad6b6d3c2bb301114e26b1efd1f8b680d1a22c1 -0663ec9add0589fbca3f29172d6128feca777ada5c4e75ae440cc0b446ef1908 -383310ee2c8ec10fa34d4a0c4ee75a154883abd2fa666037ef490e2fdde0fa5b -8dce6de1e3832c873b55153c710c1a93b1d6f48565935d1174eaa5e8322d3053 -e6bfe61bee3b4512d32de13059288c461205cac3d97f1996b25ce860f9e07465 -b22d2d0b15c1e3b6727d1dba819173fa1eaccd7fa73531f2a00651b76460dfaa -2a3d24355fa0c4276e62248164c43b96aa186cce4a1a8ec9c735ecb4bdfdc52c -b1d9ee0c8b79baf5915d4266c98da744a4655165d7b9086e06ae458faf80dc4c -3337964829646794bf556557a2021facba73a0f17b184f86715e674e3ef3f932 -aeade79dd3027f1b3d401f60942c73f595948934c7b1cf6f3711e95f0e4f6a9d -13c378cb796fb8e52f70422e3868cff0ae7c340d7a07d7c4c74634a695a1dbad -1ace5b9594f379ef4abc98ba026718f961a39881f5472faf28f0561a8f6a9bc2 -c42596a8e94b35f3d477f49c096556fddb087f163fc2cf260e797b7286c2c6b0 -004e7c1085da793d2de495963df33fa732ac4b2f6b1729dc2a6f66a5078414ef -f0c5ce00b6ae2db631e61f94e14a5bd9848747ac119a585e156af703653a7677 -beb6f94a5b68ef8b9554768c1433e5f669ae107fade04c5993fc3ca4182be78a -8cd935826e7a6d57b2e3d8d2085588d0abe6cceed9baa079c51860818ac3e66f -483aba4675f200d4177114205bdcce26929696814f7f816ff10efc9cd1809802 -d115efebfaed05793e47f1536fee2ff4daf8b6d845383b26c0d9e488485dc4ff -c029263d900c8e04961d056c314848d010500d609990520d06ae233aeb9bd272 -9231a96b923052ad089508a1f11c5eb3d3d6c450a129a774a91abac1d77c86e1 -b093a88a2b5340edd0334cd4a298abbe0a485ca232739ece472e28d7e9ed7d77 -f41239ed60c9eb3c852ca11d6a8293ab54d9786b59fe70d15f5c717b439aa7eb -28567089aaaad292f9e891fd39e54f2c6b0b277463a78742d2948d0b51db21f7 -42c9bde5103f2d81e28ef157956ed05f7f59eac49d03f9641e743c358a0eb5dc -76a9fb9e7bbe62d436daadd4b347bb6d91d6b64bb0de6430076f0e0ffeba42ce -bfb35048e1388fb3c4bed6beb4d726b5cc56304da2d2d7cf1b27b40e3e9a75c9 -7dfcde409617ac38100b3c5e57ad8bac649b9ceb79ff7c777c227c643c815b0b -f82b68bcd4cc9d117661aeefa94d3ff50dc538ac7123e5d0381ab66e5cafd1f2 -3a709476e8d9a560a2dc34815711493c0ed1a31b3acd0b804a8042dcb2e27e66 -40abe3cf06833b58caef17ea9c6d54d34ff9776333f171351a3e4f9e7b7011ac -acaf99ebfaa7326f1b95db619ba937a08fb3bb3c61b8fbaa88730d62400d963f -5f5949e5d1d8db4f5ec39d2f91b85dab84980a1f1a2779eea349b3d81b1ed9e6 +0400000000000000000000000000000000000000000000000000000000000000000000009afd8d1e74b9ee27826d8e5a6704d3592e287c6f54e326dc9e30c963a50b640b8d341a66ffff001f215f0000 +010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff2e31363030313430663163383362376561396537666566643262313061616338633638306564653835653364353066ffffffff026b4f9874010000001976a914b472a266d0bd89c13706a4132ccfb16f7c3b9fcb88ac0000000000000000266a24aa21a9ed10dea2182dbc1a5c28242ac9c87ef5f14504a9817dc145333f319a84f62116ed0120000000000000000000000000000000000000000000000000000000000000000000000000 +46a23bfef0a0f6d3740e44c4a039cc6d48da0c93fa463129af2171b94bfae662 +23f6ae5049268f63e473c5314b58a1f2d4a0d4fafd8c8ccf8efe06974ad4e077 +f41c60ea16b21f696611aab3a62552037fbe95012ac4a459a6c19c2c23cd3222 +6494cdb062c4a1bc3e74760f9fd389c69c9cd0dcba246c0c58ab37688671edbd +ede7be5d4753a25139d6b6ff033cbdf0e43b729733cb09a6a3b44472ad27bdab +a9c99dc5ec74c6171095a4b156d8127ce003a855c4816f2caf90b8832f563471 +29ce2496811d9ec9b5c1bac7664a08e63505e29f1e7a1ab72968296117b20957 +3c6a04c31a65fb69f92158f5a1d94d848130bf206cb2b2a4f98059d724b38c7b +9466e7a4264414d732858f94df6964af60e9300eb62e47ceed322dd1c7759fad +d3aecfcd7dbf9e68b86159ee3db909821d23170befc8405a9edf2af9933122e5 +3342db73942aa29f867a42613a78884e75bc1d269cff41031f937918a2b5c72e +b27bcbeae0d3682814c3f308d66d77da0ce24c2a41c130f39a5768d30b64f5b6 +44e4868052fc4693438774c202d9e05729f41201729590a25ffbffc81bf825c9 +ebae7fd743805f3d838d84ee13243bec5348d0f43d74cdc54c7440ecacd9e4c7 +6af837a8b73ea1b5422680c5f5db6517460cfffa2ad4e81718654d5f3e875144 +75633ad93688b75d05e60de48956a0385f67b8d0a276b16a121783b7284aa832 +7c4e6413d905a5d3db5da4adabbd17e826ea98c3c7c907d14668bdc9698e28bc +3e281890426350ed7ba18d327586d9d1e9060105453862b31c62c6e7aee1e42d +94c3a0c2aa97fe8a9ec6d542f02dd31849c1bdcc0b65aee644c7a69d8cda87ce +113a664a4e8c737a2faec3a3c8d7ca0c000b775217c2145555f589f23b0701c5 +b4c54f14ea1d6755ea40dbb2d9c6e1dfa151ce80c17d1350c74aa05bbd7d94e1 +96ccf99eda56ded7a74e6a121ac28a5474efd5967681229f9f2275621cda99d5 +284d0d226ee59d91b836ba783dbd481b0922bff84177b80f67486e96a3a84c80 +bec11fb2fd836e5fb28996a8ae2008d59142f781bfbfa70a31447af315e89aec +ab3e80d586eefe5f6450f4c6af5b6cb0897f737d8daf8912ecbf2aad99e3ad9f +fed864de018531a2a256ea3e70335887cdf910ea7e6adbf50d9e74546d900770 +565fb24034a0a15cfd1d7ab1ddf6621f34701bc3cf6d5a2a58a3ac852dd61b92 +b71aab2ad564cf6c9e222aa6ac387f85f77480d2902bf7797fa03e1e8007c3e3 +ea57b6b06cf20acfe8dc444cb8a5684efb0a2699ce91f213fdf85784d8d9f9f8 +01dfaef60604db4eedc66e4414d5c9da0014319a2b2b7442dbd2e2f3a6f40dd1 +9abeb654c726772badfe64b39e41d407eebd337e44b90bbabc51857279ecaed3 +da6f5c278fadb87b03532ecc242b39899b1fb1b5625f457a7b43f972c614d124 +3d4308c35827e01e087d212fb538df11db0453a818ebe196c52ab15ee3cb4634 +713cfb7e01dfccd2075553b3f786ad19e6b5d3d13ba47f0d800b290749a526c9 +30848a4d556d513b19459c96244b26d947fc9e09d25c3719a3e40c2f22213aaa +054e776502b4aa4cb46bd049fda6776187ddd5222a9ef6ce30816af197e949b4 +5f2551bc1d21afccc5ca0c2e901dd5915ddfb39e0a10a51267d087a9bb5126ac +66ec6b2bc37c2129740c2e611ed61ff144919ff89b34b976166b1fd9bf1f92a9 +261bb9755e4299510e74b033ea9d2c4484dd200a49681e0fe12875cb9e0f654f +0f1d3efdd07f9feead7b2015b02d76ba6f0d61d66173507f76d986291b2543f6 +e8010d7db50bd68acbdb5abf3d2ea02319d8f81498b5a2c899125513cc223171 +cc6e51d15a89ef50623b7e8cd8503472b497468f86f146357c41b3dc731e85bd +32271a0e0ba74a715cef2511e927e9945ef1a2757d0655130e5114949c94b205 +e51611d99fc256b3159287178e24fe79655f60592c2cf7a0bb867235f77a3f22 +b29eaee0c047cd4fc7cfddb0970b859057c4b88602c1ddb158f24d34fd3ca98d +a826ea559284f10ac2d281d5e2fd3a67ef192ce469004db4ea9dff498da7f24b +393ba794c58779c1ee7f9758510622ab7f42facf9d0d79be6111259e1a56ebbd +562020c589b13373527aa059a1f176bd54a0b2187d0aa7007b41d97f99facb96 +607e8ac9f62647ee9d2bff659c1e08542aa99eec29a2bfc031215d31f37208f5 +5d448cfcb36c8f6b1c56cc5befbaf65e834c80613744bf76af759eb735b9336e +30c3be34ae193e65aef359402a0e0a3e5bc74cddcb9f156fc18226de0aba0251 +1aef558645f6c9de23619ed3bc55fa93238360e2ac3aae0f22937fdf0a07c576 +4f58eb15c3ff3da11f074bb7dda41a4faf9fbf03b3ab5ac96b88b880be5b6d2f +2b381f25a8fb3e6f4be79cd7777f0aee1bf4f89787d8622375c7686e962971d2 +e1e53a01f56bd6daacbe53e3ca18fe1fb6c0722184c84165611639e71eeb44e9 +f1e653cde750a5a6fcaee3543e97f2de221d3a66f51024fc7831afb3de635ead +2d80fdcc1105546c6abd4a1bf6ff9bbf7b6735a57c47026ac54ba576477ccdac +c547aecb53ca27ca12a95eeb4790d33c987ec205f55a8640e297e0cbaa63cddd +fa8834d2c05860738f929479b1cb95515bfde4c28a45c3ece9486341bb786ff3 +32e52ea5a1c2aa1f18fe72dcb8ff0c4bf11a7cb1cfd98b096122774b19c64dea +4928b35d4a4375407d4984352ac715787a026bd60133644e9a4a496e9e17a73e +3d5f5e0de34b1b00fbfaea133550865c6ca36d9c8f87a31829994e09ce78b237 +195671e6f4a1d6e07c54c31f45ef210642fe05b3ab06011a8d9ab722bdceb0a0 +d7109a6d7dc31c66645aab1f196f7f443c551ecf84e5d779bf7960013d2e001e +501d7d02be0a0e7d61c4a88f4fc592f4741ef764f248fba354bd5fa7c3715943 +da419f20fbca14290ec1354efe22493fac7be8b804e73f66ac8eada3dcccfa73 +fe976f5cc884a042ef595778d344eeb0480eb8519b712f12c169d992e7ef6b46 +6a00d75b34368c65711afd5a979bbc669577ac49f8885156d1f07e2c6bfa116b +a06bcf91beee19d07ec3e3a96279924b58951f25827514b2e9bbebf807149891 +4df509521a5f585245ac7b63f60be24ff91617c89bf6986111d447b563b34ff2 +1e2219a02d4ab33bf2278b5109e007a06049a6bf9301a5efc9d6655b2c89fc5b +fe28fa2fe28f15e55b93311c2bda8843e0ac6dee81afbf2eafef57b51601edd0 +6f2e1ee03b1cb03a9f217d1ae6cfa47e61602dcc2b411bb87b2a72e486d7f194 +f1e4a46ca6d52af9edffd961f105e37d653062ea94436fb0ae83437cc2eb3552 +4138d633105a5c05a683e44762de2b4c7228aa08fb44ea199b31a002816d7afa +c4da5fecb9ee797031869cfd18c85032de50c1927f03bc4e3a9effbb2c25627a +157ba593e460784fffab72c644eb11eddf851f7a1734c1f42258e2924f3cf5e6 +e6c4f35ce3bdf932519de9c9056b196fa84d1aa9860824b177e89a9010b04ea0 +03543c24ba237106a435f53b3915f9d50b8cb9a31c34af534a46b2a62e97b456 +72056e5941ca613511c0cfc3081336c241e7e8a172003d4d668a6a2b4c3e6de4 +af178d0a7b8e7f966b3080b2836f5011b09c9ecb771e51ff7d075e5e0ec33409 +d015e3f97284bc217eddee377e5ab47100a7fbd13a66fdd1fcb9acfc0454f35e +fd634363ae6eef2d18ac8b15d4e09e9cfe42d75bc484417a5910ad636cb36d0c +78699d0d5143ebd1d652501c5ccc2e92c1d839e827311c9c8843e33eabf5f499 +d4c64b4503e737de8d7a84156a3f6811cd40bd80f1173a2691193ff333039aca +00c4a55f63c44d2e8916cf786988cb22b7cc5630ef25cd571c8d094acd0f5d97 +46c0d97acc09e143d657af6e9b6f19ab32fc1d6b6c385a2e3c483710dbad0d17 +b5d3c7844be6ba6e3743404617074e8f36022d1cad3984a19f3f86bfa5f5873b +331c77387f77ef84eefe9cfb1364986812950262a63753bc38b56788914447dc +c02edd9072f7a2638e66a6e39aeb3989e0e458a8af62de4ce19199adaac7f6b4 +11dab833a0ef6148102c47175aabcd7f9cf9e2753bd3e6e3edca4aeb489278c2 +7f46e9e0dd3e25bef73469a492982232314e0631eff76367d7ccbd179c5e0299 +751daec3159100873c9ff23eb238b1b89b6ad090b87470be5c63a634a81326a1 +749066255f2d3a2f1409f764c7c8220c96cacd114b3a693c3b14a6a2b15e0385 +c94490de2b84dd75b512de2009f44ae1deb901f35590feb085f6a8c5ee526ec5 +1532f6a2029b5e8c21a0754e4040c3cfd3813057833345de20114743a50682c5 +f47105345c8e1695e51e7762fb69e5b4fc118aab4a287832e2b9643aef5ddb78 +a1abf44f506bafa649f89bbe9e43a5ce3c8a180a7512a111c0644793efb435e3 +d0a627c672fb58b0c099c9140477c08831389a82794fe542a66bfebaa036d078 +3ac1100e7fd86cd4a642eb98501e46ec849fe33f6ad48d2e9e4f87ea66d99d0d +d9da15f260de0a73a3abe1ea584eaf1f9b4853374d3fe952bd7f1d43709acf56 diff --git a/src/block.rs b/src/block.rs index d8aa4bd..e414388 100644 --- a/src/block.rs +++ b/src/block.rs @@ -1,10 +1,12 @@ -use crate::tx::Transaction; +use crate::tx::{Output, Transaction}; use num_bigint::BigUint; use serde::{Deserialize, Serialize}; use serde_json; use sha2::{Digest, Sha256}; use std::{fs::File, io::Write, time::SystemTime, vec}; +const WITNESS_RESERVED_VALUE: [u8; 32] = [0; 32]; + #[derive(Serialize, Deserialize, Debug)] pub struct BlockHeader { pub version: u32, @@ -97,9 +99,12 @@ impl Block { level = next_level; } - Some(hex::encode( - level[0].iter().rev().copied().collect::>(), - )) + if let Some(first) = level.get(0) { + // Now `first` is a reference to the first element (&Vec), not the owned Vec. + Some(hex::encode(first)) + } else { + None + } } pub fn generate_output(&self) { @@ -111,12 +116,18 @@ impl Block { // Write block header in hex format writeln!(output, "{}", header_hex).expect("Failed to write header to file"); - // Serialize and write coinbase transaction - let coinbase_tx = &self.transactions[0]; - let coinbase_tx_str = - serde_json::to_string(coinbase_tx).expect("Failed to serialize coinbase transaction"); - writeln!(output, "{}", coinbase_tx_str) - .expect("Failed to write coinbase transaction to file"); + // Check if we have at least one transaction and the first is a coinbase transaction + if let Some(coinbase_tx) = self.transactions.get(0) { + let witness_commitment = self + .calculate_witness_commitment() + .expect("Failed to calculate witness commitment"); + let updated_coinbase_tx = + self.create_coinbase_transaction(coinbase_tx, &witness_commitment); + let coinbase_tx_hex = + hex::encode(Block::serialize_transaction(&updated_coinbase_tx, true)); + writeln!(output, "{}", coinbase_tx_hex) + .expect("Failed to write coinbase transaction to file"); + } // Write transaction IDs for txid in &self.txids { @@ -124,21 +135,213 @@ impl Block { } } + // 7533d87ec9e2f0eda1298c2e2e37141c275358c4884fd90fbb0f87d67e5f0ce0 + + // Helper to create an updated coinbase transaction with witness commitment + fn create_coinbase_transaction( + &self, + existing_coinbase: &Transaction, + witness_commitment: &str, + ) -> Transaction { + let mut new_coinbase = existing_coinbase.clone(); + // Modify the coinbase transaction to include the witness commitment + new_coinbase.vout.push(Output { + scriptpubkey: format!("6a24aa21a9ed{}", witness_commitment), + scriptpubkey_asm: format!("OP_RETURN {}", witness_commitment), + scriptpubkey_type: String::from("nulldata"), + scriptpubkey_address: None, + value: 0, + }); + new_coinbase + } + + fn serialize_transaction(tx: &Transaction, is_coinbase: bool) -> Vec { + let mut data = Vec::new(); + + // Transaction version + data.extend(&tx.version.to_le_bytes()); + + // Marker and flag for SegWit transactions + if is_coinbase || tx.vin.iter().any(|input| input.witness.is_some()) { + data.push(0x00); // Marker + data.push(0x01); // Flag + } + + // Input count + data.extend(Self::serialize_varint(tx.vin.len() as u64)); + + // Inputs + for (i, input) in tx.vin.iter().enumerate() { + // Previous TXID (32 bytes, reversed for regular, not altered for coinbase) + let prev_txid = hex::decode(&input.txid).expect("Invalid previous TXID"); + if i == 0 && is_coinbase { + data.extend(&prev_txid); + } else { + data.extend(prev_txid.iter().rev()); + } + + // Previous output index (4 bytes) + data.extend(&input.vout.to_le_bytes()); + + // ScriptSig (varint followed by the actual script) + let scriptsig_bytes = input.scriptsig.as_bytes(); + data.extend(Self::serialize_varint(scriptsig_bytes.len() as u64)); + data.extend(scriptsig_bytes); + + // Sequence (4 bytes) + data.extend(&input.sequence.to_le_bytes()); + } + + // Outputs + let output_count = tx.vout.len() as u64; + data.extend(Self::serialize_varint(output_count)); + for output in &tx.vout { + // Value in satoshis (8 bytes) + data.extend(&output.value.to_le_bytes()); + + // ScriptPubKey + let scriptpubkey_bytes = hex::decode(&output.scriptpubkey).expect("Invalid script"); + data.extend(Self::serialize_varint(scriptpubkey_bytes.len() as u64)); + data.extend(scriptpubkey_bytes); + } + + // Witnesses (only if the flag is set) + if is_coinbase || tx.vin.iter().any(|input| input.witness.is_some()) { + for (i, input) in tx.vin.iter().enumerate() { + if i == 0 && is_coinbase { + // Handle coinbase transaction's witness reserved value + data.extend(Self::serialize_varint(1)); // One element in witness stack + data.extend(Self::serialize_varint(WITNESS_RESERVED_VALUE.len() as u64)); + data.extend(&WITNESS_RESERVED_VALUE); + } else if let Some(witness) = &input.witness { + // Witness stack size + data.extend(Self::serialize_varint(witness.len() as u64)); + // Witness data + for item in witness { + let witness_data = hex::decode(item).expect("Invalid witness data"); + data.extend(Self::serialize_varint(witness_data.len() as u64)); + data.extend(&witness_data); + } + } else { + // Normal transaction without witness data + data.extend(Self::serialize_varint(0)); // No witness data + } + } + } + + // Locktime (4 bytes) + data.extend(&tx.locktime.to_le_bytes()); + + data + } + + fn serialize_varint(value: u64) -> Vec { + match value { + 0..=0xFC => vec![value as u8], + 0xFD..=0xFFFF => { + let mut data = vec![0xFD]; + data.extend(&(value as u16).to_le_bytes()); + data + } + 0x10000..=0xFFFFFFFF => { + let mut data = vec![0xFE]; + data.extend(&(value as u32).to_le_bytes()); + data + } + _ => { + let mut data = vec![0xFF]; + data.extend(&value.to_le_bytes()); + data + } + } + } fn compute_txids(&mut self) { if self.txids.is_empty() { self.txids = self .transactions .iter() - .map(|tx| { - let tx_json = serde_json::to_string(tx).expect("Serialization error"); - hex::encode(double_sha256(tx_json.as_bytes())) + .map(|tx| match tx.calculate_txid() { + Ok(txid) => txid, + Err(e) => { + eprintln!("Error calculating TXID: {}", e); + String::new() // Or handle the error in a different way + } }) .collect(); } } + + pub fn calculate_witness_commitment(&self) -> Result { + let wtxids = self.compute_wtxids()?; + let witness_root = self.generate_merkle_root_wtxids(&wtxids)?; + let witness_reserved_value = hex::encode(WITNESS_RESERVED_VALUE); + let commitment_input = witness_root + &witness_reserved_value; + let commitment = Self::hash256(&commitment_input); + Ok(commitment) + } + + fn hash256(input: &str) -> String { + let decoded_input = hex::decode(input).expect("Failed to decode input as hex"); + let h1 = Sha256::digest(&decoded_input); + let h2 = Sha256::digest(&h1); + hex::encode(h2) + } + + // Helper function to generate the Merkle root from wtxids + fn generate_merkle_root_wtxids(&self, wtxids: &[String]) -> Result { + let mut level = wtxids + .iter() + .map(|id| { + let mut buf = hex::decode(id).unwrap(); + buf.reverse(); + buf + }) + .collect::>(); + + while level.len() > 1 { + let mut next_level = Vec::new(); + for chunk in level.chunks(2) { + let left = &chunk[0]; + let right = chunk.get(1).unwrap_or(left); + let combined = [left.as_slice(), right.as_slice()].concat(); + let hash = double_sha256(&combined); + next_level.push(hash); + } + level = next_level; + } + level + .first() + .map(|hash| hex::encode(hash)) + .ok_or_else(|| "Failed to generate Merkle root.".to_string()) + } + + pub fn compute_wtxids(&self) -> Result, String> { + let mut wtxids = Vec::new(); + for (i, tx) in self.transactions.iter().enumerate() { + if i == 0 && tx.is_coinbase() { + // For coinbase transactions, use a special wtxid of all zeros + wtxids.push( + "0000000000000000000000000000000000000000000000000000000000000000".to_string(), + ); + } else { + // Check if the transaction has witness data + let has_witness = tx.vin.iter().any(|input| input.witness.is_some()); + if has_witness { + // For transactions with witness data, compute the wtxid + let wtxid = tx.calculate_wtxid()?; + wtxids.push(wtxid); + } else { + println!("?? {:?}", self.txids[i].clone()); + // For transactions without witness data, use the txid + wtxids.push(self.txids[i].clone()); + } + } + } + Ok(wtxids) + } } -fn double_sha256(data: &[u8]) -> Vec { +pub fn double_sha256(data: &[u8]) -> Vec { let hash1 = Sha256::digest(data); let hash2 = Sha256::digest(&hash1); hash2.to_vec() diff --git a/src/coinbase.rs b/src/coinbase.rs index 7689354..7dd3b50 100644 --- a/src/coinbase.rs +++ b/src/coinbase.rs @@ -1,17 +1,31 @@ use crate::tx::{Input, Output, PrevOut, Transaction}; +use ripemd::{Digest, Ripemd160}; +use sha2::Sha256; -// Assume these are the calculated values -pub fn create_coinbase_transaction(block_reward: u64, total_fees: u64) -> Transaction { +pub fn create_coinbase_transaction( + block_reward: u64, + total_fees: u64, + miner_address: String, +) -> Transaction { // The output value of the coinbase transaction is the sum of block reward and total fees let output_value = block_reward + total_fees; + // Convert the miner's address to its public key hash (PKH) + let pkh = hash_public_key(&miner_address); + + // Create the P2PKH script using the public key hash + let script = format!("76a914{}88ac", hex::encode(pkh)); + + // Create the witness commitment output + // let witness_commitment_script = create_witness_commitment_script(); + Transaction { version: 1, // Version of the transaction format locktime: 0, // Typically 0 for coinbase transactions vin: vec![Input { // Coinbase transactions have a single input - txid: String::new(), // No input transaction (empty string or all zeros) - vout: 0xffffffff, // Maximum value as it's not referencing a real output + txid: String::from("0000000000000000000000000000000000000000000000000000000000000000"), // All zeros for coinbase tx + vout: 0xffffffff, // Maximum value as it's not referencing a real output prevout: PrevOut { // Dummy prevout for coinbase tx scriptpubkey: String::new(), // Could be used to include miner-specific data @@ -20,19 +34,31 @@ pub fn create_coinbase_transaction(block_reward: u64, total_fees: u64) -> Transa scriptpubkey_address: String::new(), value: 0, // No input value }, - scriptsig: String::from("arbitrary data"), // Miners can include arbitrary data here + scriptsig: String::from("1600140f1c83b7ea9e7fefd2b10aac8c680ede85e3d50f"), // Miners can include arbitrary data here scriptsig_asm: String::new(), - witness: None, + witness: Some(vec![String::from("00")]), // Witness reserved value is_coinbase: true, sequence: 0xffffffff, // Full sequence }], vout: vec![Output { // The output sending the reward to the miner's address - scriptpubkey: String::from("miner's address or script"), - scriptpubkey_asm: String::new(), - scriptpubkey_type: String::from("pay to script hash or pay to public key hash"), - scriptpubkey_address: Some(String::from("miner's address")), + scriptpubkey: script.clone(), + scriptpubkey_asm: script, + scriptpubkey_type: String::from("p2pkh"), // Pay to public key hash + scriptpubkey_address: Some(miner_address), value: output_value, }], } } + +fn hash_public_key(public_key: &str) -> Vec { + let mut hasher = Sha256::new(); + hasher.update(public_key.as_bytes()); + let sha256_hash = hasher.finalize(); + + let mut hasher = Ripemd160::new(); + hasher.update(sha256_hash); + let pkh = hasher.finalize(); + + pkh.to_vec() +} diff --git a/src/main.rs b/src/main.rs index d8cbdea..333e49d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::collections::HashSet; use std::fs; use std::io; use std::path::Path; +use std::path::PathBuf; mod block; mod coinbase; @@ -16,24 +17,28 @@ use crate::coinbase::create_coinbase_transaction; // use validate::validate_transaction; fn read_transactions_from_dir(dir: &Path) -> io::Result<(Vec, usize, usize)> { + let mut entries = fs::read_dir(dir)? + .filter_map(|e| e.ok()) + .map(|e| e.path()) + .filter(|path| path.is_file()) // Ensure it's a file + .collect::>(); + + // Sort the entries by their path names + entries.sort(); + let mut transactions = Vec::new(); let mut total_files = 0; let mut failed_parses = 0; - for entry in fs::read_dir(dir)? { - let entry = entry?; - let path = entry.path(); - if path.is_file() { - total_files += 1; - match fs::read_to_string(&path) { - Ok(data) => match serde_json::from_str::(&data) { - Ok(transaction) => transactions.push(transaction), - Err(_) => { - failed_parses += 1; - } - }, - Err(_) => {} - } + for path in entries { + total_files += 1; + println!("{:?}", path); + match fs::read_to_string(&path) { + Ok(data) => match serde_json::from_str::(&data) { + Ok(transaction) => transactions.push(transaction), + Err(_) => failed_parses += 1, + }, + Err(_) => {} } } @@ -72,19 +77,37 @@ fn select_tx_for_block(txs: Vec) -> Vec { // res.push(txs[i]); // } // res - txs[0..100].to_vec() + println!("{:?}", txs.len()); + txs[..100].to_vec() } fn main() { let txs = get_tx(); let mut valid = select_tx_for_block(txs); + let total_fees = valid.iter().fold(0, |acc, x| acc + x.fee()); let br = 6_250_000_000; - let cb_tx = create_coinbase_transaction(br, total_fees); + let cb_tx = create_coinbase_transaction(br, total_fees, "".to_owned()); let mut valid_tx = vec![cb_tx]; valid_tx.append(&mut valid); + // for tx in &valid_tx { + // // if tx.calculate_wtxid().unwrap() == "35f1e96e0c00a213134b533d93a6b3cf074c24178b640c1fbdecfe0724455e66" { + // // println!("{:?}", tx); + // // println!("{:?}", tx.calculate_txid()); + // // } + // println!("{}", tx.calculate_wtxid().unwrap()); + // } + // println!("mai{:?}", valid_tx[1].calculate_txid()); + // println!("mai{:?}", valid_tx[1].calculate_wtxid()); + + // println!("mai{:?}", valid_tx[1].vin[0].txid);// 000cb561188c762c81f76976f816829424e2af9e0e491c617b7bf41038df3d35 + + // 69074bd90317c507b367c40dee722821c8954eeb84c9e24e29050b0c85d1d422 + // 7533d87ec9e2f0eda1298c2e2e37141c275358c4884fd90fbb0f87d67e5f0ce0 + // 7533d87ec9e2f0eda1298c2e2e37141c275358c4884fd90fbb0f87d67e5f0ce0 + // println!("{:?}", valid_tx[1]) let difficulty_target = "0000ffff00000000000000000000000000000000000000000000000000000000"; diff --git a/src/tx.rs b/src/tx.rs index a314240..9a6848a 100644 --- a/src/tx.rs +++ b/src/tx.rs @@ -1,6 +1,9 @@ -use std::clone; +use std::{clone, io::Write}; use serde::{Deserialize, Serialize}; +use sha2::{Digest, Sha256}; + +use crate::block::double_sha256; #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Transaction { @@ -72,4 +75,178 @@ impl Transaction { } in_value - out_value } + + // Calculate the double SHA256 hash of the transaction + pub fn calculate_txid(&self) -> Result { + let mut data = Vec::new(); + + // Version + data.write_all(&self.version.to_le_bytes()).unwrap(); + + // Input count + let input_count = self.vin.len() as u64; + data.write_all(&serialize_varint(input_count)).unwrap(); + + // Inputs + for input in &self.vin { + // Previous TXID (little-endian) + let prev_txid = hex::decode(&input.txid) + .map_err(|_| format!("Invalid previous TXID: {}", input.txid))?; + data.write_all(&prev_txid.iter().rev().copied().collect::>()) + .unwrap(); + + // Previous output index (little-endian) + data.write_all(&input.vout.to_le_bytes()).unwrap(); + + // Script length and script + if input.scriptsig.is_empty() { + data.write_all(&[0x00]).unwrap(); // Empty script + } else { + let script = hex::decode(&input.scriptsig) + .map_err(|_| format!("Invalid script: {}", input.scriptsig))?; + data.write_all(&serialize_varint(script.len() as u64)) + .unwrap(); + data.write_all(&script).unwrap(); + } + + // Sequence (little-endian) + data.write_all(&input.sequence.to_le_bytes()).unwrap(); + } + + // Output count + let output_count = self.vout.len() as u64; + data.write_all(&serialize_varint(output_count)).unwrap(); + + // Outputs + for output in &self.vout { + // Value (little-endian) + data.write_all(&output.value.to_le_bytes()).unwrap(); + + // Script length and script + let script = hex::decode(&output.scriptpubkey) + .map_err(|_| format!("Invalid script: {}", output.scriptpubkey))?; + data.write_all(&serialize_varint(script.len() as u64)) + .unwrap(); + data.write_all(&script).unwrap(); + } + + // Locktime (little-endian) + data.write_all(&self.locktime.to_le_bytes()).unwrap(); + + // Double SHA256 hash and reverse + let txid = double_sha256(&data); + Ok(hex::encode(txid.iter().rev().copied().collect::>())) + } + + pub fn calculate_wtxid(&self) -> Result { + if self.is_coinbase() { + return Ok( + "0000000000000000000000000000000000000000000000000000000000000000".to_string(), + ); + } + + let mut data = Vec::new(); + + // Transaction version + data.extend_from_slice(&self.version.to_le_bytes()); + + // Marker + data.push(0x00); + + // Flag + data.push(0x01); + + // Inputs + data.extend_from_slice(&serialize_varint(self.vin.len() as u64)); + for input in &self.vin { + // Previous TXID (reversed) + let prev_txid = hex::decode(&input.txid).map_err(|_| "Invalid TXID".to_string())?; + data.extend(prev_txid.iter().rev()); + + // Output index + data.extend_from_slice(&input.vout.to_le_bytes()); + + // ScriptSig + let script = hex::decode(&input.scriptsig).map_err(|_| "Invalid script".to_string())?; + data.extend_from_slice(&serialize_varint(script.len() as u64)); + data.extend(script); + + // Sequence + data.extend_from_slice(&input.sequence.to_le_bytes()); + } + + // Outputs + data.extend_from_slice(&serialize_varint(self.vout.len() as u64)); + for output in &self.vout { + // Value + data.extend_from_slice(&output.value.to_le_bytes()); + + // ScriptPubKey + let script = + hex::decode(&output.scriptpubkey).map_err(|_| "Invalid script".to_string())?; + data.extend_from_slice(&serialize_varint(script.len() as u64)); + data.extend(script); + } + + // Witness data + for input in &self.vin { + if let Some(witness) = &input.witness { + data.extend_from_slice(&serialize_varint(witness.len() as u64)); + for item in witness { + let witness_data = + hex::decode(item).map_err(|_| "Invalid witness data".to_string())?; + data.extend_from_slice(&serialize_varint(witness_data.len() as u64)); + data.extend(witness_data); + } + } else { + data.push(0x00); + } + } + + // Locktime + data.extend_from_slice(&self.locktime.to_le_bytes()); + + // Double SHA-256 to get the wtxid + let hash = Sha256::digest(&Sha256::digest(&data)); + Ok(hex::encode(hash.iter().rev().copied().collect::>())) + } + + // Helper to determine if the transaction is a coinbase transaction + // fn is_coinbase(&self) -> bool { + // self.vin.len() == 1 + // && self.vin[0].txid == "0000000000000000000000000000000000000000000000000000000000000000" + // && self.vin[0].vout == 0xffffffff + // } + // Helper to determine if the transaction is a coinbase transaction + pub fn is_coinbase(&self) -> bool { + self.vin.len() == 1 + && self.vin[0].txid + == "0000000000000000000000000000000000000000000000000000000000000000" + && self.vin[0].vout == 0xffffffff + } +} + +fn serialize_varint(value: u64) -> Vec { + match value { + 0..=0xFC => vec![value as u8], + 0xFD..=0xFFFF => { + let mut data = vec![0xFD]; + data.extend(&(value as u16).to_le_bytes()); + data + } + 0x10000..=0xFFFFFFFF => { + let mut data = vec![0xFE]; + data.extend(&(value as u32).to_le_bytes()); + data + } + _ => { + let mut data = vec![0xFF]; + data.extend(&value.to_le_bytes()); + data + } + } } + +// "90b22ecd1aec05105687e856b863ff3fbf8720d8436c013ec0db3dcc478794b4" + +// 000cb561188c762c81f76976f816829424e2af9e0e491c617b7bf41038df3d35.json From 3e9da86a83e4d56263eb1349c62a05bd758f74a2 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Sat, 13 Apr 2024 00:34:00 -0700 Subject: [PATCH 08/16] . --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 333e49d..48e9da1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -78,7 +78,7 @@ fn select_tx_for_block(txs: Vec) -> Vec { // } // res println!("{:?}", txs.len()); - txs[..100].to_vec() + txs[..1000].to_vec() } fn main() { From 13ad793cebde61c01fc06ab2f5a142a3c4e3899c Mon Sep 17 00:00:00 2001 From: 0x0 Date: Sat, 13 Apr 2024 00:36:15 -0700 Subject: [PATCH 09/16] . --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 48e9da1..d21db02 100644 --- a/src/main.rs +++ b/src/main.rs @@ -78,7 +78,7 @@ fn select_tx_for_block(txs: Vec) -> Vec { // } // res println!("{:?}", txs.len()); - txs[..1000].to_vec() + txs[..2000].to_vec() } fn main() { From e299efbd62650a9b77b300f3444538b4b68801e8 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Sat, 13 Apr 2024 00:38:16 -0700 Subject: [PATCH 10/16] . --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index d21db02..185b037 100644 --- a/src/main.rs +++ b/src/main.rs @@ -78,7 +78,7 @@ fn select_tx_for_block(txs: Vec) -> Vec { // } // res println!("{:?}", txs.len()); - txs[..2000].to_vec() + txs[..1500].to_vec() } fn main() { From a827ae8b964ac17945d09b222a60a854035160b8 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Sat, 13 Apr 2024 00:46:03 -0700 Subject: [PATCH 11/16] . --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 185b037..c29aa09 100644 --- a/src/main.rs +++ b/src/main.rs @@ -78,7 +78,7 @@ fn select_tx_for_block(txs: Vec) -> Vec { // } // res println!("{:?}", txs.len()); - txs[..1500].to_vec() + txs[..1600].to_vec() } fn main() { From a0e40061fdb4c1bb17bf40af17b0da3fab7bb882 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Sat, 13 Apr 2024 18:27:22 -0700 Subject: [PATCH 12/16] . --- output.txt | 3439 ++++++++++++++++++++++++++++++++++++++++++++++++-- src/block.rs | 8 + src/main.rs | 43 +- src/tx.rs | 105 +- 4 files changed, 3486 insertions(+), 109 deletions(-) diff --git a/output.txt b/output.txt index 6a1ca25..7e9ebd7 100644 --- a/output.txt +++ b/output.txt @@ -1,103 +1,3354 @@ -0400000000000000000000000000000000000000000000000000000000000000000000009afd8d1e74b9ee27826d8e5a6704d3592e287c6f54e326dc9e30c963a50b640b8d341a66ffff001f215f0000 -010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff2e31363030313430663163383362376561396537666566643262313061616338633638306564653835653364353066ffffffff026b4f9874010000001976a914b472a266d0bd89c13706a4132ccfb16f7c3b9fcb88ac0000000000000000266a24aa21a9ed10dea2182dbc1a5c28242ac9c87ef5f14504a9817dc145333f319a84f62116ed0120000000000000000000000000000000000000000000000000000000000000000000000000 -46a23bfef0a0f6d3740e44c4a039cc6d48da0c93fa463129af2171b94bfae662 -23f6ae5049268f63e473c5314b58a1f2d4a0d4fafd8c8ccf8efe06974ad4e077 -f41c60ea16b21f696611aab3a62552037fbe95012ac4a459a6c19c2c23cd3222 -6494cdb062c4a1bc3e74760f9fd389c69c9cd0dcba246c0c58ab37688671edbd +0400000000000000000000000000000000000000000000000000000000000000000000004180d9d7b54c29ae791a18a2ef0fa15243c93033eb319e837e8715f780a7c726a3301b66ffff001fb0300200 +010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff2e31363030313430663163383362376561396537666566643262313061616338633638306564653835653364353066ffffffff0262b31376010000001976a914b472a266d0bd89c13706a4132ccfb16f7c3b9fcb88ac0000000000000000266a24aa21a9ed5641c82aed4212679005b6971bd6d4c79ae9996ce72fe55f707de0e3557424990120000000000000000000000000000000000000000000000000000000000000000000000000 +e20653615f3a3537b5c0bc677b9ba6e41f0d8d915224000cd0c7bfba1c184d60 +82f9f96db7bdbb9e70626747632e373b34eefd50d613dfea7092744169591b6e +7cb2a4f55245bae141a5d6ad51c08d7a9fdf2c2b905e4d97639ed80b82e69800 +a9e537569db3c64340ed5abcdd983e9bb1b6ad6f90c93bc80d31c5cc0490bcea +4ab3cc4296fee78153d60d2884323a84260157db0b83a72309272f109ad9dd32 +99bf982da397947eb0999292e909c17c78d884e18d3e59ac03fd2aa7f0241c7e +dcd522b3588c7adb0418454539e1a929fff936f211e5a20383fdcbc3ad8751b9 +423c61f1ec58b9400a373e1052c26debdd5d55eb0057900c3dcf41f54762486c +141655b0e4239480afbdc12874e642ffeb94da72536ee4b8bace750820b26a06 +0205c30e63e36a248faba5bdbbdde7a4185cb2bd314ae62549578575abb6da72 +c0d67d6cb71d5cd372060a6f508017d0e90167f111a5219a0008cfa5eb37b0fa +ca371c508eedf480c948d905fc079b3e5ee06bc49e9678a56a606438f98c9936 +18698d18715a88a45c9a57f08c1e94c94b3d4827620f7a7f1096bc43afdc61dd +7e4a05a078f4d7afcd686d117e319f8f14d69be43a0609bb9a9cb36a75a88abb +4c6e1339f6ec894ac4685f4ef934180d376b1870005fb5c6298261353d46cbac +d46e76a0c8559b76ac00bf5a2f5df1aba3aa2fa8dcbfa9ab288027813b627f24 +6e0ae197a30f26e0de708f95e52ebb957de42ace5c08ab62092454c58e066f51 +3f67e2aa009e5560a6c6b5341f3a5851cb448322758721e0922ea81a2b474776 +bd2e7dfc9c1a42accac2fd14f74bbfcf89a2d61352a077aef349ebcbc98c0be5 +cb2930faf9670b24e09be9a5a98e72d1b5cfd0dcecb1b1b5452eb85a1ce80ff4 +219f3b922ac3fa2735f437d6542a26b7d744ac8899b53cb50e7f059ebe1c2960 +6ea28e620d2e612dab764fa3cf844d0a2b7c709655dd705d9e90058c23213d64 +eb3f8d9ed92b6b80c750aa909ac172774c006ac0170f41e3afa2b58ade0e6eb6 +2383ce5d0e87d094815e0b232550347873cbf7ccb679581206dbff8f98c57d7e +f2de32e39ca853add28011ef802f336e546789ea8abb093c44d0b79e2783315a +c42a6175ee0cf75e5a3d5e9c6d5a3570f184cd6e09b181460883da288d690a79 +c7036d46c010aaa07efc49c33c6f0b2178d1100d379eafea99fdd1cf122a2a31 +04ca6e279ae6f0a1d10b55b3c9193f686f354c317b9577b425de57fb80294d91 +5cff2d191e70272427fbcfc4941de630b0c4afb41f230e41645a0a49d29017b9 +9a4b7a9e63a874cda9c82adfb592bd91be77baaf988b6a22bca45c8d24ff1c8f +4408e4d4f52837e9504056c8e33b7e921a10c072b520ff810fc938ad1201b652 +9dbafcbfc78f1f71993186add1d5bceeacac926ce70a133f3c52607abcc3ee97 +58f4ab89c3f24bd539d3f3ba5931e0792f0316a0569c6e5bb7a4150b07aea87b +ec6a92468759cecaa854e9b0155d4a94e52c897fe96607d592218664d1165a11 +379c9c1070725589a0fa9626a59bfab6de21a50e600815be7d6af70edf059f3c +5c5aac8345686bd466014ef256a503bc896f4186366fb000daea1f90a4143377 +0eee63cc7561e6909a0215fe338c2271ea5b09ec726abe605b2bf207266600fa +aafa88e7f286c104e41f086a41692e56d4ee84bfd088c3a943249daa3b2dc1dd +961ace1aeae3f11523890212486fe4e7b7e74bae2d0dbbae6e69d0d26f4824a3 +e499c7f1374cc9b3557263842ba22c3db1059ac1c28b138a813899353f03f29c +39959f0279207ca7414d864aca5233d998d4ebc950f15a4556f4dfd3b1932b92 +16fd8522e6aa9171c97571b7f14cda309c75fc34293c2989da0634522d9dbc0e +f4e445d5489a045450ba8ce0026399bc305a141e67586f5be70aaed16440c0c8 +4a930a5f30e9f9d2605df8e9bf446931a9f7535b97c6b5390e30d28c052b180f +6fa62b4b30bb7451889b41ca2c7c7037a28e6bf6b988932f8ae47418cf1ebcbc +e3e3efe45babf86d2a23dc93592c1e707963c604615c3eb5b5e9cb7b6f13cca9 +82bc13847269f69b43bf20f546160f90fa3002f55b62923f8e2c1366a231ac8f +4b6e5e84069dd775e081aabb27853557f8f78e0d03bb14cf5861c512eaaaf95a +1c8aa90e20d6cedde86efa10e4a8bfb57a9f9e5b3e63fa7b0fade6c5cdb3def4 +c3e2ab606d3c52bef8e90bcd7cb1f200c160af6e87c702fe9d515c47d9977292 +9860294ee083abd8caff150d667e1b74788bb59efc6001caaae80de8f0829322 +472b247652475d72a024277d3ce24239f0807fb2bdeba74ee6a4892b56ff4a1d +0c3d66bc640e838589c1c5c9cdb849e5cd09be039b205dea9e29eb4c806d4e2e +36fde4fcb94b05eae159c961c9ecaf027270d8e61ffd159e17ade9218d439420 +40042faf7f045b8a20165281feea6e116626cd9bf6150f8775b7c801050668e8 ede7be5d4753a25139d6b6ff033cbdf0e43b729733cb09a6a3b44472ad27bdab -a9c99dc5ec74c6171095a4b156d8127ce003a855c4816f2caf90b8832f563471 -29ce2496811d9ec9b5c1bac7664a08e63505e29f1e7a1ab72968296117b20957 -3c6a04c31a65fb69f92158f5a1d94d848130bf206cb2b2a4f98059d724b38c7b -9466e7a4264414d732858f94df6964af60e9300eb62e47ceed322dd1c7759fad -d3aecfcd7dbf9e68b86159ee3db909821d23170befc8405a9edf2af9933122e5 +98b311d237876ee73dc1b92f0f5aeefde9e9e63be86cfdcaa39679814535ec60 +5518611b2b9cf3985941d8d9a077967282b719331947da7099f2eb2d43d5892e +96047183f58322c63eef4f9568a9dd301e73ce14b879f2470d28e83298db2dda +f75ec76214779056154f67d410521217631bd713a28637774c9f2b1abd2d5294 +65a1235d78ca22063623735626e962dac4b5de67c7c5937685446f74413f7459 +b7ca3553f6badfd051773b6ba3985d8cb7faa3312e1253206f3053b0281d9317 +8f82186c8a18f34a42c4fa2f536f6de0523d6cc772c383875d19a2b0dd463bc7 +174778a55e20ada4655858d87bc8a1f0e9f0508f419ae0bcfebfdc54b0225471 +a57adc7478e44365ac3d9c9d4241c77d55678c5fb579a1cce4e202e44a588113 +c760f441017ddae392a8dcf1d696e5ebcfd94d564c03675cede5663b285af16d +2e820ffbb7e6c0cefd39b5f1b4b3dfd099acf5449be3aea4097245f2b08b1252 +86f66ebf59c0592fb50262ade1e697e9fc7763d8e516077932758b5e43f937ab +30be773bb8f925925ae59276d51c4effc9abb3b5fab11de0572c623c117791fd +bac8a93b420cfbd2481d6bd51ab68668a964011a9ad74956140c75f229e6761d +ac4fadfbba8ea96d4371ac8acb30d3559c8f7c8de1abd372ec0bb64419cbb3f7 +54a84fc41e6e200984cb6619039afdf16ad80447521e9314ef363c1a8df09193 +ed8dddbae3333dcf0faf8bf676f9d65ab3573231b18d28922e089003618da116 +ed3f6a1342dcf2655aa958ebe375aa2e5b3fff62606417097b0e2fcbfd069ef9 +ec7c3f7409cd0151c00c44d756ab583fe5fed84f8814db603cd3fda6b3bf3cba +af264d1b737eb930b641a5a92e568c22a30efb18d2055ba9b67f026873edc480 +e7901fea9d74c2754e870f75ea0f387a0d4715065f09ca404cd5c0cbaf7308bf +fa35790c97843ff87c1f30df70ae076ab34f741d7586dfc24fbb39d4dc18c829 +e5a8658b0d25cba6b4b0e02149531c400880f8e753f9c141de54358fd9c5d860 +14dc80bf5e4b280a9f7b4d7bb2f8f784a233d62c3bc9a7a5b6de1efe9dce79cb +80f766a92f0d0231ddaf8793f114142d5c7b9e4c0ff83af3d68abee31d7a97bc +c2d5332e5697b475921fbe72297b2d6f303fdb66203b61af57158f6f082a3469 +6d1642a12cffc513a6c1354f841e7476430d45cdc238b554411ebf5068baadb2 +3ff06318588ec7ec5524872e4f66e00298b840d464abfdcfc3e95848a58834cb +17ffeeedc4e155c244058704e19c8cb44e23a60c464404612ab8a8347bf79ccc +79c5e6c08b109e1dbdf6dc45ca52bab264d99b9c9efae428f54ee24ea403ef84 +0acf2d678a416f19d7dcbca05c8ff935f0b66deb165e6bcd4adede640c803ab7 +7732a0e3ca2c07ad4c0a823811ad5fe50d23e258bc876d905484809ce11af5da +81fced3ba74758ceb872813e94ce557ffe9cb2bc61fe4d18b16c8f40f68d4e70 +925c9e11ff464190f5b5b8199785683fb613f6432bddd20f435536762f97cb44 +4dc0081058331df702e3ce06f633eb99b6447f3d05d348ac7c5cb4e5b12b17c1 +a2cbc1a3aaa3a3fb264a6d9cdfa186023ce42767c3ecfa1228a2237124f8a884 +d50105061d189373582a6701ff841cbe43ff92e92a8f24550929ed50312b036e +388b8101ab65e449d2260f10b3131d94c1dcc4740f0776f7bf6e0eda775b46c5 +717b106c2921561a6911337ba203d76114ef9853a00cb096f6b7333493b469a2 +8a766c63d4d5225d7040968751c714a71c790e115d897cfaf0b7543219dbd840 +556c97252f2d2525d9440e18eec7a8673e4518a45efc9b0d2ba9ee5588d4c39c +ece578abc2d8e38d8f892387e00d449d5849b5559d3c498d94448ec1d2d4087c +32ea519c8a31c99b41507e8830a1007b477fb277aeac7c0e6414d4446d550bc0 +f261ca135c20e9a10dc4959e52e36dcd44e9bfab35a66eb0ddeb7d493e35d2c3 +280f13a1ba4a4582a494a37f047502b44d483d9326b8f32e955c28dca7cbf5e8 +d33d151dfc599bf9da2d862c6bcf393df16edb7b223285d2d4438e53bca343d0 +b5d3c7844be6ba6e3743404617074e8f36022d1cad3984a19f3f86bfa5f5873b +e4db2d84306a2ca488ebe1d8099bc0f5d355571e0643c02eb7030b4afa2aa971 +713a3edea7e49bd9f8bdb8c356972ebab14d3646db7e9791a213982e91dc91d0 +b53121907425ef5ba688a54f1cf2a36598bd070fdada6d9e96afbfc417f896af +0b4cd564fc665c688935228518f7e80f889a63f8edf44ceb4ed19bcbcf8c1f38 +6bd4c3ef4b5ce7c5ff1dc141734c72c0892ec7002d9b94ed745c8fc071dffbf9 +a62a1dd31befa1df1d86b3b5a4d99f5d175367fb4a3784af64bccd2ac3937e3e +f802785b2d0a170b2fe5081469792bf2daa1904688bfc0518a4e70511b641713 +d7f53da808083724990ba8a9c8cd757275af9c31d60fb7afa399f7c8d05ac3cd +917312b205bc24c9fbbfeb42dbd55a5395ffe42ff0107eb521b09a95f3376f2b +2626f494d095b5653ccbd6b7f521a3d564441082de5dd1bd8d92ea35af0c9fa8 +e574b31645ff906cdd8c7231b52ae3b7c57ef35fb42b00d6efc454b898945322 +a68efc2d414d79d0a9b6109cbbaccf508a14fa3fab9a1f41ec637e5124ee9ea6 +5a1f2617b4c599f5c6754331b30448e8c40e6a4678a7db59c265a0e6e6b33604 +c84e878b9011308f15642618bb87e682206ff1af3c7e1cabf48c40963e29d6fc +b5e9ec2fac3a9dd54e2dab079130f16466ac56cbedaa3a5e0340ae6cbdddb034 +19c40dff6bfee010ca3d3f41461b540109ec1d5d9fbb70584810eb2e4226666c +695ee155ab71adde88b72d58cbbfa6f83bdf2cb79a151f248abea26dca04e88d +45579d8ee863c929042470780feb709aa64eb76064cdebfa1c986791942eeb1c +9a7b093350784a4a58953425e10092430ad91382a560aed051d7cd9521daeaf9 +5bfddc04dd473fa5f66d64953db2ec54345bb9243eade72e08185fd90ce4a39e +c38635dbc58cbbc0820a1dc915352aac68d81449c3771373ba49d7e858645eda +98d5db4b5cf8a6586e1d0ccc9609c93a456a0acf37f2f2d790134383de93af99 +950935223f090e4837b54e5d99e9223756ead5160993201e1883ba689006399b +05a563b9303722862a85fa6af05bc222fba54b1fadbd5e4dd5e209d082606476 3342db73942aa29f867a42613a78884e75bc1d269cff41031f937918a2b5c72e -b27bcbeae0d3682814c3f308d66d77da0ce24c2a41c130f39a5768d30b64f5b6 -44e4868052fc4693438774c202d9e05729f41201729590a25ffbffc81bf825c9 -ebae7fd743805f3d838d84ee13243bec5348d0f43d74cdc54c7440ecacd9e4c7 -6af837a8b73ea1b5422680c5f5db6517460cfffa2ad4e81718654d5f3e875144 -75633ad93688b75d05e60de48956a0385f67b8d0a276b16a121783b7284aa832 -7c4e6413d905a5d3db5da4adabbd17e826ea98c3c7c907d14668bdc9698e28bc -3e281890426350ed7ba18d327586d9d1e9060105453862b31c62c6e7aee1e42d -94c3a0c2aa97fe8a9ec6d542f02dd31849c1bdcc0b65aee644c7a69d8cda87ce -113a664a4e8c737a2faec3a3c8d7ca0c000b775217c2145555f589f23b0701c5 -b4c54f14ea1d6755ea40dbb2d9c6e1dfa151ce80c17d1350c74aa05bbd7d94e1 -96ccf99eda56ded7a74e6a121ac28a5474efd5967681229f9f2275621cda99d5 -284d0d226ee59d91b836ba783dbd481b0922bff84177b80f67486e96a3a84c80 -bec11fb2fd836e5fb28996a8ae2008d59142f781bfbfa70a31447af315e89aec -ab3e80d586eefe5f6450f4c6af5b6cb0897f737d8daf8912ecbf2aad99e3ad9f -fed864de018531a2a256ea3e70335887cdf910ea7e6adbf50d9e74546d900770 -565fb24034a0a15cfd1d7ab1ddf6621f34701bc3cf6d5a2a58a3ac852dd61b92 -b71aab2ad564cf6c9e222aa6ac387f85f77480d2902bf7797fa03e1e8007c3e3 -ea57b6b06cf20acfe8dc444cb8a5684efb0a2699ce91f213fdf85784d8d9f9f8 -01dfaef60604db4eedc66e4414d5c9da0014319a2b2b7442dbd2e2f3a6f40dd1 -9abeb654c726772badfe64b39e41d407eebd337e44b90bbabc51857279ecaed3 -da6f5c278fadb87b03532ecc242b39899b1fb1b5625f457a7b43f972c614d124 -3d4308c35827e01e087d212fb538df11db0453a818ebe196c52ab15ee3cb4634 +36474fde7d01b0014bd2de348e00862701254557e02b6b5bbaaf3b16f9b6208a +19d38472925ec6165d305765a595602ef266278c9fddf6ef1f4dfd534cb2959d +90c32b1af80079f25601acfa9357e8f5a4593f85b2b13da93b7bf4b64ec98bbc +519c81bb189641e1b578970c31e502fefb3976701347ad2500b1e34a233e324d +03d3b51f4d9f6feb3c27d74f6bbc736d4b82fb913ce92c1af4db488933d85cec +d0fa3356fb263009d4fc8d7d6ba59963a560baba8da03501fdc411ff26b76ad6 +9703993c9f792b3249dfa34ff79486aac0c5ab93d242cbc99fe7c29648a1519d +9a962ede107e9dbf1446b90edcea263e4e0329bda913945c942e2cf163a131b2 +a33209ea85de442115cbad15d34c1d380d7644762cf92dd547e4ec282ded6fde +5bdeae4ee68af5210922d314535640186268012bf24185616f8ab169c614b56a +11af62a102b611ecb44523dda00d88333c60a82dad37d1b788dce1bb37796109 +8ff7bd41d5bcec3ee55e2e7a081e42c28b3993b9faed97ff326035b68df2d7c7 +103e930a4dad476c9c2d8e58ddff8eb83feed2ec67cf5e5ada4e159d3dc4171e +7ed9904f2a18765bcf114045d80432e4ed17bf34398beb731640d767a235765b +d96b8abbea5a9829f8307009ab8be44690592fed4b6a8a36f095faba5994a908 +97ceb5fa2a8508a15fdffd58c3964274ec937605292139827dc8b7c7effac2a2 +857d9c6f5939be9e57f28aa8d9567cd532d94350800dd1626f89c4740e45b9be +4e3e235645095375b07ddb912745f1a674a51d9d7d83db61c7d07cec47ebee81 +6c82dfa980ef40dbfb69ea169f040cc084beef3a159214e2bc667b4b868b2d5f +5d903c0834254ccdf8a0d8fe15e20a29df10c5568d1c0ffd03d90bc7d7cf9470 +4c275235574283f7e254c6aaead2585919b306f7ea02ba657e92284b41ff166c +180fc03657338cc3d16140554d431d0df85407b8e58b479f565bfbf7370c0b23 +f5ae2bb44eb210b5918f0b5149053607221ef2e39ff757997e8b9df7c676c40b +c20de979128acb6246d620475355ef5d3f678a171e81c67defb87a55292d6a32 +7833892b4befdaa9dc27ebae9a6febdc4cc377830a2c764e85dd59babbd0e1c0 +a96b1e91e1d0553f3e19a3aab84a229816f06f9b9cd8270461d2b0cd18907850 +63dc2cfe61115832959586019584aabbd7050eb934a9630dc579d0c6b44663a7 +3de020a13bdb46b349eb1913f00268d85c3283eba8c7989be1d73286d1290611 +40177bb93d21ebde38ec26fb248fcc8bef7d7bdaf763c9ee610a04594fe90173 +da1489c42411d7e46e813c6498f082279c6d76eee66684e2f3e47d2af5ca2f73 +94514171a18c90b3d1805067978ebd1c9e8420ea54b9133ce5e7519c6827e79c +730a5e1878cdd0abab7954690f6276ddf548da4f50af29b13d54e9ffe023b9c9 +f79855e919a6544776db70cb78b112b69779ac5610796545aab268f3c4ef6139 +7ac9a1a7a96e92108c1c3f755f089211b504c56b25ed59340cf57827f397b9e2 +d0251a830a057750356e4e64ece9fdd57e02ea8f059b4843798da841883c3767 +0edf9bed57bb4d663c690e17eb20692f0339f337f3c8f881d9834650a38c4b62 +cbdb60aaf21ddbe880c3ee8bf6bd214dec5d6d8c7cb5fe764ca940b810b8cc80 +8ca7c70de07c7282176150bdca86ed7c501be6437e9a03e4da022354f1c32edf +0982735aa361b160387df91ce0616bc8507e56bc435d17c7faa03aa47bd69c26 +ad01dab939f86eda47450d5e9c751ae42d3c4b07d66edfe21c86bb0c72aab84b +4028ec7f3f6e3757d7a34ebed1900a1ffbfe037cb412584d8b9fda6885839933 +15a5e73f8199fc632c395093f4755f0205f1d062c42cd4c555bf685196a41e75 +8a9f5238a30730e1f48702a4b796cac78c54ab0cf9ed0b60fd0fe46fe84899e1 +2b4ce090fdade2c9cde0122f338a527db86dad3b7cd35f25ccd08004348ad08d +8d1db6e351895158ab17d482ce481af1230b851648088dd4d291e5f0a3a7c5ac +6356aa747802299c61f0674fb2deea7674303669df3fd051ca2e2cd36ef977cd +ca7ed12cb676e78db3a67a02991e3214d3df66e41e9d54124644d6485c5c93fa +f2acf0f4fa4c8b6c22b94033a45f3ce8160ec9aa1eaecfd86cf9a414525659ba +3aed4d5c352758c9ee43fda617923c7a06a3c9a23936505d88325727c4ead7ef +97a23b7e4ea9c25b1e0474830c3dd25e138dd5bc21cae8b6248195dd33791c73 +a1336bbd99a29ea2f67ebe76fe412ab5ddaedda6ab558b691f3d4a70e4163dc3 +298ef9d30184ef7324454cd741a30e4cf7534f2a6c85b19763fec7dea0126178 +6d2e1a44eb44f5de1d4a9bf675a0242b508f7bfe39d033513eddd9b05af4ffd5 +e2c3381e65d51a2bf34738abdab15a8e9dc774123b2c5c3730775c6df6abb8fd +edf1a5813fd40fbb31f60dd590090017e6debef9f494a388948d6335bac41585 +e1097653c71e000b75ef33457432c62c77f7b362ea903b6a6278b357029bb008 +78e4ad6f958e8b33711eca19dae8c476396345442262e17d2df86b0394dc8e35 +c113ea84a8bbd605ef94492d67463889db5e22f8017141557b35b0f5790023be +26dcef0933fc0129904955dd9604cbc0b086635ebb9b1203ad743f6fd4ec06ee +796154afa4abac52e7ad6818f2101a7d3bb2cadf517d8b9945d3a94b7a37bbcb +5e8299e043d2565c857e542190b1192c9abd7e9f1d734ab1a09017d9b1188233 +1e7e9f8eb8cb5791b0939390be2f915d12327adcf792a39396a63d0fb0dacd09 +ff5e0b9d91d323cd52385e821996268bbb03f0f2c58b7cfa689c63982d50c603 +c892deb36dc8c66669cb068fb19f78708d862e96e143395af893ec18f3abad8a +1401025700fd9a9e477e39b78282b1e9929920395d9f4cb77afb671af0f740a4 +01321499b5bac27b175405193197f9c463182e8084176704dff84680390242d3 +b26b80ba9aef7d5550c2aed207cab3fa463a3fad2fbde60570a17f8e054b10af +d8268bf2403e94ac9c58b0279c280d188a0fa17e72b733dbba67f3d034c7a7c7 +7eb403d3e797b816fe7c0d1f79f1c0d20281720c5333ef58547a3cea1dbe8559 +1364ed183589730bcf71f8e18dad4fc801f5551801412f996f8d65b1df649812 +f2aa5cc77ac7e6e8f0d98e174a57c0ac7969523aaf7e9b2514acb3222f99a84c +d63e5aa48b96bcc0d1a5d9296fc77c637d20bf1de5b4fb102c8bb0bfda46774e +a0f788702b89b1d271a1abe2bfc1942dec066072d2d3f730c01a839d000b9929 +0690c27ba648761ef907db118873161d4a86c1355c875a8abd699bbd0b75b155 +7736f8e70461c14f7c8889de01455aa40845e2985764053bc005dd3186f513f6 +4eac7bd28c274c5bed25333cbef3a221c975cbff8f5979c7ca7dc4fef8ad2ab4 +4e4bd49a3e505a86c07a46338a054c9a2b155c7680fd544628c793731a11bd99 +85b968dadb55c3130efb9ae5da3a0e4561af5e888b18acce732587546477ff80 +4eda2b12862c3aff56323d76a33f0739c655249305ad68a49d73afd8b4ee6a89 +0d2f1793b999109f5997e0a3163090c1369cbd67d9f7054084d6a5c33cd690f3 +7039f15f6a34f84a97d74fbccf7df103aa4e5df20919c5cbd9239eaa20e7a30c +261b872085835c90fc6f61c9a27dc5e40e02f922a9bc444f9c567971458df508 +88caea9fa731401104fede6d8c55a0a209f5b47d9b2e1faf7b93b1e40100b48a +7664930facf6ef1b1c45356f31feeaaeca1254196fd8e6f242a18811afb5af21 +9e9e49090d21634e2f904c6325934d5e7ac92537da11a937d7eda49d604226e2 +a87c1a7866e1eb3c15f5547cfe70c4aed987c0693f40a1c59edbf83bbe2fb94e +7ab4ccef3e61177373bb8f4cb731a1351aa465a71c1ecb11ba22a41d8ed4da28 +f0a9b97a66cca15db4f67b3fc02cc9a30d346adc0182a1a25cebb6a60d04a7c0 +dd1c2b0a7f3da10495990563d4aa0291f7a9678bb34b5c2c248ce03cb9e6b40a +83ed96125a09c6a44132a796bde8b7cfd1b7a2570115afba3b8ee9bb1b5311c7 +f2933541b288fe96a9b2f93873fe0890cbfd03df9f7a227d2d620d292d965b58 +fddb94f850d234d4870150812d16bfc2ae715ff67498c1b33acaa894b6e5a924 +cc9f6cf8ac765e680de75ef675706f617b3f55f449cea8ce7f1d3e7156d56e2b +c6c2401e683f9ff1f7a842f047d8348b547328d99c6e3b7c020e28e2d76f802e +7284053e63d6ecdd6a1fd7652dfde9879db49e373a9100e5f0e809fc321973a0 +3e2ecff17d797418a1a5d76f187e04589c435a654cc673cd26cf956d2004824b +658f5832cb37d4ecf4a99ed412cc51cfda06a6a20f75acf5c8042f34471e42aa +d62de862d1945bc26b1ab03a52f824935ff56f1cbf42a576cd30a1bfc56e1dfe +223331431eca79c16086dedca44d6b40bf07dae7f92213599b1be57b4c59fc60 +beb17508e483c079270952af15ae6fefce3dbf176830a75b919a93fdff69cb32 +67ac48d7da0db58b0af12005631b1c9072a74bf8d3e40e75189e0a5bd53c7a0e +e4cc146d80927fb85e975684236915db7c7e71d5ad0e05b595d03527909f8b15 +28f7a397b1ec84fc9e5f1f8071b824cc071210ca942618a1a95a0596a646d01e +b8155da65549c3a4ba7459185cb1d4dfbc5c2c2bfab19c2ee172140b459a598c +8e5d2c73f16db3465998dd683d089d8e2aa810781e71d4973e84bc5eb6f0402d +0df4c61bd5dbbae778a595f568b9e5c62be14de45c40294df5795c31d43f9221 +a8956e278741124dafe3bbc80935050f96dde750a99fac0df2f3f6797b704f78 +7d5e994b2b6bd78a0405feefc8436a1563b968b4ddfeb1408220fabf8cc49c0e +7d7be68058fb28b05626b6ac91b5c40e12f7fb36ebce6ce5fc3fd787f97e8fed +fc392a3a4373eb3b5ec958c0638d48947cf11b0c4632da94e0e36a8993fd5dd9 +b26fb04a5fa4f8b18a8e283a15a471230e1e5fffd30fd8dc4f57a0a1722cb270 +53af8b0766e295e36c2a825107fae5e9afebc612c129d6c9b9f49f31088d3f18 +8b8b6e6ef79ee377cb877ec25de30e975444ea26d97aa5fd6a5728897491b59d +bd6c0982cdf3673d593e51429b6e00aed22caaf5d542663b47c168d7b95cbf8d +1960c5c74460bd4e6e0dd43ba6ce22b10566ee890b324a5accd6a55dce6b583a +64890f48f2b15cbb8d7eaf7b0d8766763396dd40c825ce9621466f163f62cd68 +06567a37846cadd42c2abc9269f0565933bfe83b3af21a8355719a5aa3336ae8 +d23c777d0f6b79ea799659345844b116cb06f43b5d8b88af330a10cccb374417 +802fbd6b3e8816a4375caec919cc6d2bc32788b26dd416bd40d584afe32b11ac +1dd32d989bd71c1bbab157ebc062696cec35fb719d91e82c8754a91e92f57194 +1b389c93b9724d7a6183ff9d15cff8ecc79504d86de136c63211529a0ba6098a +7871fbacb811b77520185d6e566d591a81f90d0732daa21d49a006fb40c3c15e +097df028f48a7b2f897296385a4c4c84c81c3a33903d4b65058ddf777af805fb +bd56d8914979e7ef7b000663c977d74323ef51f110a7720f94aa8bd4bab901a3 +4a966a0e5f8ad8b63f6e3008b53929e9bdcf06fc80f7fe82dcfe566db50950e2 +5d557a9146084fb040a3ba3821252516b177bc58cc92ac80e7453e2e48305d34 +19900fa683a0a608d0561d96dae615c611e80c473ce329bbf976adbdb1324c5b +dff75bcf43b8b0962e1e21838cc6e2d00a6ef02d95a9c6ea785c37a40bd56413 +c533328538493b161ab22b5b21608f2376b0904fcc661014f6789b565c80b17b +50b07d5766b622b4f56e7b14c54ba7e3d005fb9b7f4b058d42acc472f3cdde99 +2af29573578cf55118c8c6d3bac95887ef7c20a0cd0b782e608b80b92aff0ea1 +07b47665c77f8824b7d254ec23f9557cc602ecc448f6f441875f1070e631616f +3552b619ebb46f767e7d7638db8ca166a044abf1f9bcbf5beaee51bd80b259e8 +f6f320848b6d7a76630decc2673e2efb110bce2378f2d5d13fdb48ba884c1fa6 +1b87cae7ece0269f12b7d6e05c20ec604e1af083585b4db7b95386de332af5ca +9839459692ba235f41b2848f1e6e2f453f0636c6c31389f112cdcbcceb2e7df9 +4e6e89304a2f551fa660b6dd4d15d47757f443b9ea2adb5c0a3f1620f5c2ebc8 +a54ac8afc3c6dc6dd5f7421e1f5aa2a8dd47c9261de3fabe8a4cf811ed4440a0 +52ab7cf7292824041f8ad6d45a64b8cf768a19b5d21e6b53cc8072d2c3df69e9 +33c1f32af9477a8f7c548b3bbdc36f1e8718f51f69edc2e188651f296ef26ab9 +7494ca987f52215a8c4b7fa34c5b7f055ec0977d95753abf105a4a89e36398ad +41671c742a150a339237ee364a18347cc82273d67013b82648ff7c0c029ada9f +0841e13a1385b570bb3fb787fd613e623ac32bc3b8c8c6d77b95c6bce57913ef +16eff1df7b6dbbf538c53d2862c848da9693fe29166753ea1f32d25544b6d86b +d65d1f550b9a5ce05cc9b84ca23b35896337761f47c76c9124bd58cd0c0369cf +81b3b214a11d78d72f44384710db6c0669b0389b8a3ff57483c9ae0bfb48a0cd +30f084abfa05053fa8669ebd1b88a75db76576408a8ec055416a481b92e5920e +78916d8645652a97356502ebbec2c258ec461ce55eec41c78a9eb7a7da43db72 +82f7ec6dfbf9bb507d69da194bc0f1c77cfff635f3fc96cd9be3f155907459a7 +6f044006e0f8e505e0ade1518a4d48b29b60f5c3cd19e9d36ad0e27a9a7278a4 +0526ed2c7a5efb144983a4acf9ebad98d8eb8d33290b4f62ed48baa4170a0044 +c70c16945130e196f9c67e3fee330b0a549dbca034932785718946542a81afa4 +1e93897df26f965d16de3666a7e5cea7c5d6a826e4a4465bec67c934ef0df98c +439dd378237970695611c399a4f35eb0ed01ab827d8425f130ef01e378f18739 +7fa7ebfbfe8d79a68ff506c27ded2f25d329e1edc76b2cf6cab5ae8b23a8fb56 +281ca10c0afd57fe65ec03f4ab003ee63b0d19f6cfaf4bc69218d2d624a069a7 +a2288459fb85ba2b6c78eafb25d788b1bcf5f0602efdbb61190ddcd5b59aa603 +9a0eb20e008c91db791295e0e491241e738005679a943463b727b2d4941940a6 +88b18a7cd273df6a7349fac20a5e96828dddd693c078b7641b838155ddfdf334 +e1c6c8650c2e262f08e1f37f1bcb80f9bb1ccd466274360559c345288cb602d5 +5dc788a912b206aad5f17c0f7208ff4c147fd456b0956c835cc66a90453a1339 +0cb8bc074faec722e3fdbc600f3b9213dbfd7e1ad9dd623cf6017fc6fc50b44e +127ae7c479881992556b4db7dcd780b9a8ddf9e66ad6ba036d0fccc90f92ddfc +77f3eaaafe0e39820d9a9f3e35060a4812b18da65332df255a090cb4c80ed140 +801b1656646d2e028fb9fdb67245580b775efe29900c622c1f36d1907ffa43da +4af8f9baebe95f09d94b4bfd84eb0e40fd0dcf94ea9a916f790074b0fb0178ec +7f9bc724ff18d6838b0b1a9edf2f3c389039813dba2ea749970889a4777130b4 +c434bcdf967d3529ff6356502f3d88fd455e6bc8e4d9c532ccfbb74245e981e8 +0d15be900e19b304b3a036428ef9abc5e5ca72666d08f6f67d3b38b41118b695 +0bfde97052ae7f8bf710d2d93f6e2f7c4312014d0b159c6f9afc7f65cf34c664 +0f17db0f0057ae61cf7ea6096d8a50f8f873dcbcd943091e2d5afdea02978041 +ca4668b68ed24e8e2aedb5347ab42e8b522ea7dd40b520a7d0d76b9ab025044b +0e994bce6fbb521a1a97a67717e318fe863699d7b3972021588aab9b99ba4e64 +ce3d9d5cf8f47b944e30e0f039b42da1f42ad72bd678542b28f446101e27579c +d6f6f3c416af59cfb6fc6f3bc789cde377667984e0605264f92df509fa2bc575 +dbb9134b15077990e3b4fcee8555428bfc2f078883e6ddb501efcca6a7af9dfe +a28b24c9489963198ac44c708355b67ba60bf3dc85017f76f9b2374492f95b66 +ae1a8abe5890fc0080bd4d3f53cc329bb58b73ee896ec5d2719f237cbec366dd +15f212bc09cf72c5b3c8e882230e9ab9e139045f0a4c828ac97d669c7dae7940 +6d23245752c483c1818b54975d7edfb6eb2fc2fab6a077738830d6fb8e64e1fd +68f670165f20c4f8a08727c1dd6eb92b394faf04bc77e90fdf3da1033bb7c3fd +69481cf47cf64685ccc68100279fdc8c99281cd262db350d41dae9285a500aeb +3ddd5113dd25ac5156fd99967e2cad71fd379b2b2ba32f43191431d50bae1023 +da92a57ccec105a5371db14422ca22646396c428f4548c4676c2934bf8ce6bf7 +a4001d94a9233f037712b7f35de31b84134acf74f411059e9188bc8f2cf3b768 +4c038564c8550e7986b86090540f0b3ff7f5e591730d57c15bee703bf82bb934 +b72b231e70287cedd8e0dd3a73eafef67e27d7063a80ec4e7a5dac0413709391 +36373533c2dcbd7da81ee367c1ca6cc9d20530c5153c3b870ea543156bef8e8a +bf895a54b0c2c31d18435ae46b70ee47f1ecd6e2f51f3ee59cd6eef092495488 +e76fc7b7910c28fd8d9e354d8fe60fef8008e34ec617c2ca0ebd58b6c844ab3d +517d387a13cf0ac6e6f67580c63abdeaf3d2b1aab71606251369a4c62a682504 +7dad48614024ba1e2becdcef5017e14c02b77eba6d1853b2387655853abcd728 +c0834ac98980e228860ef954e563f21b749a407594c4c165e27fd2264e6dc8be +3871aaf82871b34d5b3f1f5c9e56d170e152483014f6702a231a70204c5c1ca5 +6977bf58e30728ee7e728c5d6e1a54f77e961ecdb7f7878d9c6cb66ae3cd8185 +6de8b59377f776db437cb004cfb451f7a3b34803153d67876065fe0d8fac0079 +8b560155c1240016b6f1400bb53026b0791c7c0d784f0afd2a31251a9b5c5dd5 +899e497185cc1803ffd86cb066253c1a02a2f2cb1d1638bf11bda2931719fcf9 +03f5bd0a3da53ea4de7a317e4f05af850daa05345927a1433120acfaf85b2e24 +b09703aa3602aebfafd0a9a26f8e961e5ab02fea46b8763ccb8777fd574c3870 +25769fc7a569aed0a28781f9b21e4a672e414a4fc56282363a784b9c6911c4c2 +1bf7e3b41e917a8110419403a02baffdef98da621b7b78068c9313a959c877ab +42b7511e313cdd893200a92d9a49a91a41321705737a6f0c2ec69e945244890c +045bcc862bb05ad4d930553262026b858821f3a8777e9a0c19f614f8adc763db +7ab537baeb7583cbaa96ab0aad7a8ff9666e48e5f21d4a18a60384700e3ce3b0 +207dd5b925fd3bf40b54a38aafeb6ff57694c739e0a6186256c171eeeb680f70 +306a1316f4cc6e05f5bbd299851b22ae46c32ebd60e0dba32c63686ee0ab8115 +a96ec364a114d00d1325e104066171490b2a068b9384f63628ca8e5c5b01e4e4 +39a6b04359507f40a03704af38902e01b41f56727cc6ac3259c94b817967c704 +48ea1dfbc502933bc1da6ca3a95fed4016baf58b62c1af1b423c1932bff73c94 +64c26cb8cbbf62885ddd6b25ffcf1681ac7ae33734d6972c9724a4a6079596ed +f1ffdf37774a4ed93a9f0e4ff0acdd890039732d2dc41fedc9ac87ec72fe4e59 +39207da870665882f1db828c522afb4410f6c844fe4874e9a7e9206a3e20700b +05aadee34a129b58b75d14c6d88892aba5e53cba750745065345185845fd8c8f +ed51a553f501e5aa5a8bc4610b0630cebcf3f57fd6986db450732e201a7109e4 +d767c637d3e3da42e13fe617d49a9f7e0085510eef3ce4a0e78eee978f677d05 +dad90841dabf14c12e65dcc4c0484ccf1a4e2ca6617b355bc02aea5f1ba5ff7b +ee7408fe2e7f8b58e928251df122e81e05ccba3305ba2871c5df1e3d15092963 +4295326514606b504fa78a0ea8c057c24c714ea57525e87a121d54b49ecc6d26 +2811dc3d1be43714d6ea9a41109bb90731bb83bbbc14919da1e5a6534a1f663a +0b16db8e6c08f5ca6f2cd5de51281320bf5bb910ac6a1238f271152b9ade85e4 +a1f5d621cf61d8900bff0aa7111eaa1f55a3718e6a5e9673babff08565ce5eaf +ac1a4a40be1a14543d2579c2eb0cde8c447a41c7f42c63743d7847a8fd6a5361 +2400f8e114afafdf863cc5b885577e7eb5f4bb665d59ad4c3c3d02336f6a88c1 +b71ebce0f3251587174fe1ead0e8e29c8f4f0ec6fbbc853b09aad8e5f38ede08 +07aa11bdcc83c04d7e5607c67bc8c9049fd86a29b4a92787c03501b4f16913f5 +7d42eefa6d5fc90c3009d953d78f80714730bf3f894f37277aa5b0788e73019a +67b9f087ebe0d5a3ea85f514628d56d55ae5cb0cb8c05c65cc2318d47b00444d +488ad886f5bb5bb953b8ddf552a8fd8ca44413244a4680a84c886f0ffc507eeb +dba7615c48105027257f243d3dbacae3ab54c904207f9a7eee7b479d64fa5dc1 +e47f93b6f682b6893010788aafd9046f411cafe2ee21bb351adcc14f8d479cf0 +7b8f88d8379877d6555929fb15d3dee064494e36aafa49ab050f5fd5e9a8db1e +07bf86e8efd6b1df59a943ac27f62309b1f364b0dbf245f572651ddef1497c82 +2f4ef9708215278a83b4afc481739d72fb4a32e0ab1e1de798218940864811ca +c062bec1e20bb8d362bd817fdc306fe7e0362271494d3447927f32b33740c581 +298594c4def5a7a4c66864b1ca399b4a8f9789775e2cd933974799da178e1cda +ff0539ac4defb4eb74e8da337dad1d7162668b08b01862e64d16ba6b79e4142b +dd3f8bb7db33ad0d835f5755cc74c9b1b2aa2c12ceec44e45a2ad49e8bc340a7 +2d80bd690255210e0a0be1589f928838dcde966dc43fa70d1354723780bfbd17 +3038762454ddcd24cc1531c777e18f19d9849d30041dc7640483c4ef58a53b8b +a8b277ce1965ab563f7d330f59ab57351d10c192b2393cae30e435a4f9ff067b +985188879264416ee63df9e29283e2476fff6d2ebe95d16342e6e43f0d60f186 +6f46cda8672a7d660e2f8cec69ea0c344a2e80e9b1dc1520753dd5b248f5e561 +54ad84f9eafea39b70af34512d1efbc4cc44121a66ea2f916912ae226006c0b9 +669c6446b835ed2abb8be6ec42ad85d4009f155eee771d04337d9be216cc0450 +f32b5e08ed44312dd4dc87eebc7b57f1fd43cd74aeddee5424fda8caa4a1b072 +c4c8c4b4e2c79189654ff9f7d88393e5814c09f19140f04e55b1f9dfb8148d59 +f781ec4f3210fe0abe5e3036c6b6fbb68c5af853f7805abcf60e614ab8470a07 +39fb5473e9dd678b14535aae8bfe73858d8d3deae4a85f90409fd01e63184e09 +326d0359570720abcbfbd94c8b2420484b6422f597a4100bf247fdbadf6679ef +4ff31616cea77b08aafe30723b2c26a998287c132ae2ab6e385051642891e375 +6c4c29a4d9b71a3d86b93a449d92ae04f37cc4f68edefe704e5c99742439df8f +2bfa9fac19d0840ea40d716f1189e0ed3f025f3a234d857bb7e1f47bed99016a +93cf1f595ac8d95cbb7924e7999268e25fde9125e6e3b2cb547c9b74b121bceb +7caf880f60690ad2053a4e56fc80905d5e828c8abfd0ed6acaf0341554d6f249 +75894976e962181a200c54977d41d71c5975c10de57834b38accbeff3be77663 +91dcfb839003e14412e5aa90a8f5220b66678b1e0fd8f2ff7656f1f2e025ae5d +47034fafc46dd2de661bc712d78026d362e05deb800fac4b8c4770fa5c45d349 +f7a6a7d4f3cca0b9a28de0745d567c0f76a0d197e6e0e9cf038f88d894dbc42e +d766a88a811e504f11a240466641b16f79e22913e36c693b45551203303b8689 +651d3d15cd67c720584b591285ee8c59090a0ebd63ecddb25df96deb56c4beb8 +f96c824868d59d38926f486bc58ea697f57e73a694294e304397000bca02e08e +7d11ba00dd419b6c810613c35150aff7c8842023f76f5aea496ee897b24df273 +117aaf616ad1547be97c088bff1fe0cf701a76b5576ab1a5064dac4bddf0ea24 +f72b95f11adfa86e0cc159070e4fc63f847fef043ff79930f3fec71e7d24070b +f968896da3071ad93ce32c5604037321f20d329ed8ee7460e8bc1eb57699cc11 +441addfdb7ed114c033bef6c6560f13aabda1da4e2855727e0281f715936825f +1069a8297a96ecdd987c975905d420dd4d2b94dbef1914a4af294a3509fd6e80 +95afe2c38a58919edd94178ede7b3be71146b831563c69f9dc0809bfc9bfdc72 +11d2e1f351394e9afd3fd561d758c1e23d65723f66daf08268ba07e794bdb29d +11276d9cff6e97e4dc70ed5e45f8361ebb240d5f208a8aad9d807da3094a0d65 +039dc7156f8d2210a3136e670638ee236f560a84e2ec239db3c6728d5be10ba3 +046ac6bd6752e9d3496289d761a49b2a4787a33e253401172ff36392d42db73b +27cc3035e74126bd5762c295a2cb384bf572d296e6936d3941e58e70abfae223 +c2d781875f992eac370ce0faa9e606d8d0a53930f3d30e5ebc6edda406597d4e +7cdf92543f32609c353e765b012db568d05c31144d6c4964b4a713ad7bd0dcd8 +7151e75250239fdfd37246f6eb9f20399aa6869430309b1bfc622256420840e2 +34c7ccfa4e8e20644563b2651eccb64d7bc31d3e8a681bda769e7c17b9bdc881 +c6a868e0d22945bf46ecb0df469c11a30485da01f6dea71669adbb95a9b3f8bc +701cca74fa1dae963b0949dc583e4970bad2f27f5618a09e700b763f822819bc +87c9c83a2974fb47023abe3827da17428a4028192e38b1c89bd65c1e196d3e42 +cad7bac7deedccf53adb059f5f1686d7f97ee15a0f0d3b56f4e54d477092cd11 +bc8abf0c2ad8027211595630f6e65eeea97145ebae192fdd5a47c9d5693cc7c0 +645a8611f80c7494449a8644b831563becdd4dc27a5c451d2428cb0fa79eeee0 +5a4e2ae70b108a9881be2f89b28980e48d4e81614af16be4b6a749511e0d4acc +f2a13c19986eb0b926519033942411aad2244706cd01d2ed0b191bda10a79207 +a7885f0b559ef89848795212a6f80eb28c351cabd5f2209c93f473768d38fc80 +2c5e732a3265796cfee9d92ab1e728f401186cf967194a2784a3982dea570678 +8dc13ba68b4259cf1498be2fa79bce99fcf62f90f3118ca375d92aae6ff894af +e537711d6bac1ecef536176e2ca96f0e1f49d2d97e5c7e59598bf6dbceb394f3 +7caf72c076992de5bb24db15004c97da0c135910eb85986ea106de9b9a750b05 +2450129d3fb94817aa50d0657aa50c40e41a0e2ac1c801005604457262d10ded +aedc3cc5b83ad3e2f6ff5729e7ccd3917f74917e85ec4f01a07a5082b2da5982 +abb37929d054efac2bfa3a27e161c3ea83bab536cc5fd8357b7609cf76e410a2 +a0f648f1e14453d1ba1b2ed55ba3313d4c06f2d4bbe0ba80115f58c1a30686aa +3ce2cd3a62b9e4a55ba93f1ae35c8a1719fee86167e555bbcdb61846801cf5a6 +7cee578215fe3083917f6cc903658b829ed48855e0bf1184ba25e4a891d7b38f +39ba3110af35cf534115c7cf0454e6ee0f794dea2022729bb55ddce066808b97 +5661fef3a650d471443d266de66ae4b8f732806d90124761a56df096c380c92c +b9f225e49edfab33ec836f2f67e8cf8fe62be882b5db7d70e3ac7f128f13634c +a1e6f8a6da1a9a63eeace306f5f25fb32dac58301afc7908dc98236618396579 +55cd37e46ccc0186c2ed4992a19f88882e136afb8f2df63a3b488218ad946aa3 +6ed26ec48723fa93c261054c395595d6079f55b1137a5670ede801f14c37f4ca +d05141eeeb467a622d8ad66f4c06137667a000503049acb5632d2bccc6ba7956 +a1b10a3936672468789a594c2180d470aba330f9eec77df6d15cad95991306d9 +df3ddafc7262357de69223f09b951dd13b46cab01f0e732a8920e71fe19dcebc +ff3fafcb58d546a36fed36931daf9b88784770d5aed6a507d78bf08d545eabd2 +6f7d353fb1c3af2694b54e268e9207ea59d1b699f56fc38fb0b4f410c1b6f36b +dab2352f68395c0974aa2470beca4a662b3b1081285133ce6904f398d6fb1ae8 +4d3af0600554a229bd5e12822640d2a266ec6e73148289d671c5550c04f1c56e +ff02f7cf451deda817d588a6a427ee12742c9579fb79c2ae523fde28ae12d7c8 +637c4ce02275c033abd0a61743145b6ab1ec2b8bf0aab010e7bad09cb952bb86 +168c200d11549d5dc869e4d6ae1776df9b0c826d7a8c91fa398a46c5c4751230 +c6b403a62d1f54a54f425cd3264b12668e50a27728ee86aba5ebab3f9bd2a77e +9a8e6e5702e567cec516ef2f53d8d90e0c0cd49c71d1a3d62de36c18742b39b1 +392334c51eb432b855b42312f22809650738d052817c386b2d977c3dff73349c +7a126647dc3d67f451311abbadc653150d192284744132903c0391cdf53fb775 +05e0a6b5831d424b4a5a15d4327a4d58912592c6bc276850f40b3f8dbe9dc11b +160611167dc9b4c26146db926011d738d8aa5737c40898ed1cc7229b037b084c +3edeabcd5fc164fac3067643bca935d5c81984194a3a48f923a83ed8f63b2c22 +22c09e3e63325f7e59d179503dd5a5c8cb47280a65c1804527e269f16d64257b +66ff2fbfc811dd292770204e2c0bb341e79a3983e06d3dba57806cfce215aae5 +e889b04c26ced952e274295c361b8ac091675a74d1676a5476b6b59f3bb863f8 +42a334097eb92c051963ac3cf3e6e10ce648f5b2b7d3c5cb99af759ce6db8f0e +0319b25f8aceb5b26f50bd2492e0b58cee82a1ea363764778a75396b0d8806fe +ed9f5648ad024995113b031b7e7e28f14bb8a8b158ab623e1bfa47369ab6549c +1d15c5d0d8cb8c943e1f5938731b0639177a7735080ed3127896508b39343446 +463618c9d140a1647c57ec49ede38ba1f9448c766c4311f4de107460e2876e74 +5d59da2f8dfe6e6bcf5bea27674891a1f70d1f37bedf5f87dbdd6e87b88728f3 +a625706b3edda1762a075bba5299ba80e89e657961d2c828a7fc3008190c64b9 +e2ca6f1b2cb0217a97918cadc778464843df5bc64ce53d5c316b51a88caba2ec +2dd773e71f63d9c03b8e1d9da398d525807d14e1a0f992488e47e686af48856d +8ddb7fc82ec8baf3c4d3135da8f40d6468925d01dccb01678351e6a19dd8a187 +a2ae3e8f3106237a29b4af337025a26339a48a6d41567a5e799c3dadbed8ee5d +36d6c6ebe044e5bd11c9d4968b412ddc7f7b3861091089418e41a3ae4294c4c7 +71bd2d163bde2a4dfa155a3f2ffbaa4586650c0f18123d511897e98f5035d397 +ced856f750aabeefbab75dbc00f528490732bbec8bdb0f7ee4c429428c489d03 +f7a19a04950cd2de96dcb6d40804b6aa7b93d13ee45ffa89d1aa6b0112f5b0ff +d26ec68f4a8de230c260a37f6e0ca64d37003e7463f3394ad6856f2f532fcba6 +c1a46710b7a46e288fe4320da8203285b3bc86bcc2611c0066c916272b324a05 +2fa6608ec030a3a1e729312fe747228fd3ccab29ce1b34f112d861625c7cc519 +f5b817445c2df1d76d7f57729ddfd3002c4cbb2c9310d580f0646297fbd40a23 +89d88aa4701fc8afe67b6871c3cae0070c79900a4c0ca2eeb0aa11d6b453dd0f +3511de76972a27609eb0f7099277ff2b8000edd74962a1469eb0add2705665c0 +9ecba077ff031b53218ceae09277c165404a22c67ceefa7c1afa31d2b945eb45 +a4c7349ee82054614b3f572ebc6407b404a141ac40e39f014d433c6e4546a54a +220b5e06c1047a23cc38e7cc434ed12e7049f3e22de3bda349d50d14ba1d7eee +add4466812a39d41a59f23c14e7ef5f923d498a415b3b5a9e243db0d1ddeffbc +dd745c0a05a7c832fb395606a1468364a5a36911ca23de538728b6fb6de97b4d +84a5c9ce69cec019071deaabeabfbec1fb39192256c21e54adc0e6fab1075214 +08ef1e78a4095367e127c7636e39b18f5902d90b4ab3eedfd32ed2d1093726ba +f624a8c2eb499d68ad12a297c642be16f95f1be9d74e037c681675b2d31bcb3b +c300137ec88c0bcc42558bb00cd377048688942d7f71e0c064a3d9b1751ff61b +b205142a83648a3b042b1ede7da30ba12746a23b11e8d075349b17d6bbcb867d +cc4d47024e9564d4838be1e428ae2bd6cdaee5ee9cc39757c9f4a0722563d8b9 +a6d46bc94d189fd88f0ecf1c709329dff46272f763f7b5b4654dfc9cb8cba26d +f771abcc6c86ffe5a7d52ae1426e4f3350061a12434b265a220cb3b9bfac781d +2658579ef19fc30c16a573883ac4b0d97b943fe7f4c8d3437fb94c4aeff6240f +3df9ec618a7ab2c9489f9c9ec2517878633c8b6327050e88277006a6998239ce +abc3ce9b610e4c2bdf1c41706366e6c84eac7dab6657199f85315173dbf64e89 +72ff75266a6eae6461130f0487b8bfe2dcf471dee61cc6bc1d4c60ce9759587a +713402a6359166b60f3be43795f9311852b6d94ed4230f96f44e690e13794eff +9106a079c941883909fa260020d50a9b694a9591869905182e82fad78f1cd2db +470c328f227b29acf8ecd0c2e561392fb5eba574cffca432a9985d58f8f76ffe +024e73500c65a511234ee4f2cbba24ae8482b59c2021ba3b3fc75bb779892a3e +fac0885f02dc598f4605e23cc6c61c970a018f7b79d2987e144a153ab422b6a0 +546306d2bc307645534e58e2364dcd5bf342084ce38366b961ecaba61c5cb02b +99c93d938649e1dd5d0e6af35ded02d574b60338f3f21aa031b57e3bcd6f9b24 +3e403252010e3f1bac62e325a318919253cc3d47d0c408aa4fd2ee7d81bdac5b +50d7b599606078402612e0f650a24326ca65360d4946cc7b62a23dc0639e0033 +10c5dd0d943008f61df52ba020e877c3d50edc5a13249ba3cdef75cefa7b8099 +6499ff42493740187b1098a7ce2f732c150fb65918542c3c2e3989f074f72d33 +a7992e04276bb786a9222166c1ef100d6c011a4553d864c09f7b85dc33b4c175 +6e07b825b8d9cebc2e54754e2d2a06260b65a4d3b1c8e75f3da3fb496c295c7c +6c0fd58e39eb116c2a77ea129f3f2eb76cae47b2a202299b37ca6e0795f6e6a9 +67b831d200d7a0ffb9f2ac6d0dd16a064e0b8c0b75b1d0cf0ac120542c6734b6 +cb54cd5bc4513e2b21afc21d445315b1211b0e329fe645d932e9a0edd66a22b0 +8a38113689cff9e66c956ca46c15116e328797f826235ffdf6fab271b223059f +8db84f0ea2a6ebf26bbab4bbe685cd6bea94cb0d03af70dea5486ef8bfa40d5c +738841d2e2e86dd471d7f8dc50757825643dc546bc1180f8a7c37daf96a01763 +99708d0ba80cc26e8e025e3b1e0e4794e52fa7b94604fcedb9b1c77da16a4958 +90e946d607cd2eb6b496edbf0a583186f4d252687cc22a652511b4b06d29098c +c590c942c3200e9f59a0c9dbd88289269a1b225be2ee7f0c005afc568fe6f4b4 +249cc5a1c6053da8586dc854dd4d9adde1b0a7186991022bff7fd1867dfde4ec +75a7d001d4431f4322ccbeaff6887a352912a745fb6fe62b444c9b3b73e88c83 +7aea63730475f78c5fd7ac7024422bceedc91000eba7f19e1c65aaca1b6e2254 +f7b32993e5661554730f5deee7004594c4539ef21afae7741584bb46a6fd20ac +6effa7057a3dba4e4f155d077b2b7814839df7768609a009c0f1a94c7ba4edf7 +b5bbbc2185e790ac3d1e3df6c56287fda5079fd63d154b58e7e5531d064a4ea4 +09c12608e99cb664901294cd6653928418e8c33d334fdcf83eaf5e829d8217d8 +5331ff0a363d439bb81d4dd948dfee657c3c574802b6121688f18a8adf22374f +9e9769201a31a3b2f4b6c856cd49c34a97b61185d487fe64c81bb08a384b82d4 +143a4c141a9d1a44c03625e031b769a03725a7edf5bdd629965975cfed341662 +b93a3dee4b4d3bd2650f1a10dae6434975c846d77f056eeba7be2e28ed51d2ce +70367ddcf0dc8453cdf3e94ee436a6bcbb85460d1281ecc1da3e41276c139082 +1e4d2b827c7174693046a2c0b31410622acffa56d154d5f510af52f0b851bf1c +ba0e197f3304528f1dd1325ac3b6e5ed58db6a37b4593c7bc42c1e71d9be033c +cef5b6662ed578e7ea673c6f340218ec48495e62063832e9c07f9d1f87ab7f8c +cdd158c0a0d82bdff5b9f301264c7d2e79e47570651f67f0836cfb3ad949b214 +4b3e7110c0d2530df209fa6220cae437687de65c8e778fb4378f09f30606579f +11fccddd29f350549340ec788eb6fd5319d393e8e4c37d009838dcc32f6fb1ff +54613008e5aace1c10728907d0a5594a63ab040c7450635eee651479eb627f5e +176d30e2d5fb9425bd17ff738c83399d1eff1a0d5995bf6d1884856606a42385 +07510bdbf19ffe635112f830f619b576e3225b4e337f0d35ef38235768d4eb0d +ea79c2ae945c08f5c45c526928d9ae05b297b272121a590e465a36c3039690ca +3629de258182cf4ac67476ad6eb39e8f8611eaceb0404b61d23f3833eb0abea9 +22cd12a8c47e310d4a8180412a53273f222c7aa1bf6042e49b4ecf491b5072aa +d54763e40d7c730668e369beef8d67299eb4df9d4ff5bb3b98d7ca52539bcbc2 +45a3024768cca65a9c8bbab2d9bc8cdfa509530d2aa043b7c3f5471f7272bc2c +f23d4a1e8a337443d921b51c34c9de6fe12c20c7b064f3ac11cbef74e9534d73 +bf12d1867d278b420660fdeec8fe5a611848e761735faccfb98a49f8a5ec1902 +fc8237f6d970b1366af7a0ebcccf86613a142bf91f3b81e7d3308f1b9535b6da +2d655ed33b7c702bf578a1c9062fac0b947aaca69b96d79106bce6a3682013f2 +909884b7d0b8e514ba9f1bc9925cbc0b4f817d5c5570fed07cbe3409bc8fe82c +58a5e69fa928a295fdafdc33012e15d495a2e59899d9d203a79e226959a79e04 +37b980b4b755193baf6a3e2f34374b7525ca87f2fbb552cdaf5930b334695139 +d8bfcc19f0adb907cbe6cf7a50b5f593a8a26f046742336389849bd8677ce4e0 +fbb7b594c89df8970f9c52689814adfaed19a6028f0220261e3e30be0fcabe10 +5ee990e6350e6f9eb03c019000e263956f991925034883009d859fb1cca5be50 +70434916738ea44ca15798387f0ac552d2b1a0736e0846ba19d883c7601ebf55 +e8a1c5d41b6730af5bafcfa8d402126ea8e3bcbdae8292139ebce25ebaf8b152 +9137d59f9fab575066c34d0c8d1adbf06d76873e35264068512e6a001106ada7 +1e698bfa4efa5a08ca99e64cac5dddbbfab9bf5a0c0c2d47098d85a5c3ca99ad +f4886352cc49a8aadaa77022f051c560a0fc461cedf3a429e4fae07346fbf746 +1248ea75ce4301c6c7e3a0958afadbcaed1b68f3c2ee3910c8b8f30dedcecd56 +74244e57c8cdd4652ef2a6213fe61d446fd9c92679d9da7be442604a168ebbac +52728973666a8b29d75923e5d38ca49a7aea947a5e445aee98c44d68966a0d5d +eec17afc7e1d454a29dfc9b1c33287fcceeaed8745df8947f3938031e357b95b +9cee2d55ea102faecae5a88a54124cdc8ef445bf1ca81c5dfd3be73653269952 +975258d2c45a91a46b28f7edb3bcdabc9ce7a5c646f0bc1e76ff66d558df8be2 +148d7c0ae548a910ab82eacc32043d423cfc4e63fed29f613fb3a76001b83a45 +d384e942183a61829d0c99d84c87475eefcdf6277b72989655007493e4bf021c +9d43a58596639ed577a208d86eb3ff599972c0db25bd8f37701a5fba55105100 +2c6c58338eddec9db1d914e214446ea718002e30bb5e7334c444b970277ad264 +1f59003c3ddbc2fb750592acce2ee0a1cad08007603899b32e77afa21167e071 +3a0b1d81e17f81bc939b95dda8c86d8fb3e094624c8dcb0bcc386dfb8867bbf8 +0d8b53b61a7b853a15585e5129e857ac7d0104e47e2f9abc037b12e4b17cc0fa +a6787a17984b759762c3c940a14de04480752263a6beda995cd5c47bc39eada3 +0e37eb5a34197814cb05b199bdef273b73a6d2513fcfed62aa2cc37f3bc854cf +5ff411985b1f657a13e88608397b94ded01c3cbd9fabf35d71b4910bd7bb7683 +f886079b5e515474b04d7ac6150f80041edf3a30b5cadd8672df9e81e52f455c +a6c2ddab5d3cbb48c603534ba6635709df72f1bf1fc3dee5dd76bbbdd734f229 +f948a03b285b8fecc125c42ee230e5ac22228263189583c2d0a572e35496fca9 +817a2ff30db424c792c2b8d75bde952639fd4fafb1ff10615153ad977de8b712 +a22cc7f6ae35ae45c24c495aa46ef64d0c2b66a914ce7c21de38569266f3c7e9 +240f725a10322ea5155bf6c4fb20d106333aac9bd8d309caad4a0b953e960d64 +040d9e1eb98d7010039a179d4be21d392549fbd7680dbedbf81c2838d6ffdd0c +4072328cd818f938c59c137d7d5cba67e3adbaff2cd87b3c447f6f6e81db4739 +4130ac060a127f86e8ba1cd7a953222df6537561f015c2b208ac78b42c301ed8 +e3b709f7dfd355c4bcfe4c3641c90a9abeb464184a91cce8a21ce21090affb6a +7c7ea78d5852ddc414d1590a5e71d93a8d387e0fc79e4727894d81a762e3c922 +e4f69d3b7a8a5c2966381efeb2055708ce462937b73f4bc362a5f7c286333f12 +98f96428557224974a1251b27e4aede05e49adfc2fd47832af7fecaa2bf32398 +268cc7fa553f6bf74ff8fa0b1e1634b026f7e9b263b6d9b0d11fe010bad8bfc8 +05e178ef5e61b682e6a7979882723c7de34e4984d75ecc7b6fdc063e99deafd7 +9889ad6d0f3652f12fdee137e46115852cfcd2b8650c6d52741d987464e0eedf +457f85e29fcc3b8f031277e7e4666f6d805ca9993fc2f0c023ba1bf391385639 +f52866f0531169d3e0e995bc6f4e076024a7150152b02e5a5402f09a524f6bf6 +892f45f0d6b31d4dd4117e426cbd6fece1870b38dd8732dc47310249861df253 +82c027f6621675d7cdf7b09892a71ebcd2a8d52ecd993a504cbc4e5c8975eb0f +a7a75a7a238d5cb4f5372c0125c8736beba594cc3d5aa3a7bfad40497a959dea +b6d7ccc42e309474a6a0d9850585fec117dc4bae216157a829eb5634a32386ee +ba1db109d3d87581e330d03e65dd1d6f0e443d7e88c0620ac9bae07e397ed242 +d4956c0e29270ce7bfd33fa2f4cfce1ed0a29be6daaa9ef0b25815d84960b83f +09a17e84ea6c120ee4bea8a25223630f04363561517ded52656cdae5feaf0762 +b934d2aaa349df6167e7612c5cf5c7d9a4029555fd3f703745479c5e62b19abb +d6f578d9ebb87678f5414532e1d7aee5b5d790bcbb64453cd367fa21bd55d27b +97d2d0596bfc23a3da80b241f3b9c9ccc5b6d0bbca760fd447c3ce286e260a56 +8aa951de6e9f5c1b616c392308e5d933c1c08f9c72c7fbe3f5dca11bce472154 +7ef71ada196a4fa0287d09f60852b7b108ac663cc92085f6768989f1be64bca6 +e7deb5cfbae743d68bc230350e0075d5b309605343d3b16e0f8b84b52e98ea28 +33324d7e00beb6d9daf773452a55205f9625adddfd34b0ac0cace69bf35a77f9 +7de0efb4b5afbab288998ea80ebbc05f7e04a8147c3fd3254eeebdda3a097e61 +1f908190610cf904552c33c5e4c384cb5adf9994e240973824c7316fd1b12528 +465c0c2fc67577ea72fed03c703b20088c9e8b20cbf319f2e3ecfc992a458c48 +b6970b46a55e006d1b66e4cf71d607c15776936f62bb39098cbe2f823a4f5deb +bda36effbc096d06c3d290dff31e6483dd93ec6924a5323c88dc2329796d6bba +cdafcca089590bf2f114448a20560127cad8a038fc9dc4db56592c3c8ddad976 +897967a478729fd11f19fe5d8301dfb66eb32bb8687c13afd7c13a78f23a5531 +9541e1db3fa8f9382d164db0d2a23e4b4106e32676452bf192d39c0954675a7b +7c13b3ac0d8d033eda4f82a9af0cf10da854d197e3d86e653b22c78367ee4c8e +830b8ea98a57dbeab4366df7ed2a5ba68d0f475564874434647777ef4b521092 +c1317ace4697bb4b6a954561e8d98dff092b9ab16013a21f089148fd2b0cb01b +29c563858081e8b6c8143ce5611fdd6ea5a523bea18cff94f8bc3c0310c8707a +905c1f304ace286b3eba316810cd3e54ed43aca9162d8ab1749f15fd6305edcc +d28f1866de6029d2c2b64685ca5f23a3bba98e5867b0251d89432b84ab4a4b36 +575fdef412da126c48e174fe5f15564cf363d1921a042b56ee33f633046e61aa +bb05c3ca0e6fdbb691c143e9fab0677f96dd1cd549d3d756384bf6cd9de141f9 +9828454f217cb6808a10723946e745053d79f21ab32a3c63d844d1c14981415a +d1fb19f3ea8d473568b5d7d76e64387ec807b94a2464353bcda50a635acee66d +cb0e2ffdb432fa68b7c0046235053f3d3a339dcf1c58fbb16cd182aeca0f4734 +60b7302062349a2a027fc6befa7dea6c288bae41e84ab4225f315dcc4559630c +b48aac01954957f25bc94e250549ef939f4c68b23b724ea74b251c98ff547406 +3bae6cbc781f2c93b349959a364c7f1d62b945622a2bfd28fcd7b00b5e150a52 +d2a658cb618779e9c0e32b1112be65dd2419680d3041c777e2e918fec0985c3e +b5982a49c140f41d4734209385d1c5bfd892c5567af814663c311f3077455697 +c260babbb811fba86335691d88185d89be9ba660ef296acef8e062de070cc460 +7a303868654848c44973fb90d0eadf17d989112dff5512c9c5ff141041477bbe +c3851d80e6332e77d6f2c5c9a45ccc7483d6ca0e45bb16485ed1a77d7a845a71 +35873026dd1149bcd15cbc7fdb71c8e8b704dfacbe65cad50d834b27ea774042 +b01438564a68e79d76727a90d55d0da60a96cda7b36514ef8743cb2bfd5a27d9 +081a4a6f808e8a6e95493aef34d86d683dff6f48657993b2afd16c5821ce739f +59332166f9a97a45a4c02c8dd89d1ebc3e5b702e8cea783af9e7ebc367d4d0cc +a02920445705cbc5bf6c6aebc4eebb029cee19b84a0443d3fd3bc34d3da35340 +2d8392894196e39908eca31f2948247aea2441db010d4933a80a9b232a7b115a +3e2165c8477f786601591cdb1c222505ebf3c1438e6090888c170607129ef816 +35600d15fb97f1b630ca7b5edd18169949458ff4d2b7b5eb092e6fcb0ee5833f +cdd5369767b8e3b2db8f59fdc468fbe5cfb38ac61be7163736b14d861a724235 +b556adf434eb2315e38f27f68081adccb376a016ba1f46bd0c18fec64cd73608 +31e713c3ddfae0ae6452c6e39834326560ff931c51de3849fadbecc23156c9ff +480689a2cc9c577fc8c23fec07445d68df3e82b5d41ae0e2445270a232114d5a +2fb086aa21b95e743c4a7205695de52cbc527d55ea5810c09e0bc3d87ee3db4b +d3498ff59cd4b517b50326c74c487d03ded7e0416bea046b59d80d7ca7272387 +7fd985706e29c97769bd5389f3d4e33af7cb37fc061418a372a17d5a4dfddcc5 +6cfb3cfa41d3ed8aef017355f256baa5f1d25b29d4fa159ad1e7989c07248a62 +1d5415a646692c3b55fd9ddcf858dd0802349ceb1d00908c3617bb8bdc0e857d +1332bb42b6e501b42f00d07316d40c2591ad9f4125b91b43dd4e1023998349af +c570983c576a8b69fb5da570e314f6fca38a4bafa24920890827023a37f3fa54 +a8847d71684cc3fb83c7e7c69cfde982501fd135282cea18392f9db01a2d0799 +04f58bc425d53137b9ebe81015772fa158a7a78f7f250e04cc98c67275f7084d +c92d76c4aa58bc09284323c7afc1e154dc013de7eb9293cf1f0e3bd0dbb5b005 +827d08ebda90e1c613b0ecd9e75fa046792cc459695852bb0c28b8771455f6ae +1fd99ad634b9eb3dc774907af4162e7314d56e1ed734d05ca8e608b60a9d1597 +1e6a9729a9afa2bebc71992dc2a75cc86333a7d64282f225ee9249bf7c97d483 +6dff74f3fadfc512a89b2af803d782eca182bacf855f81437ea7288a0d2ed57e +b8c5da06edea54f81a2afe3263f3c22b0aedefc1e342c0188695ce2f45daf614 +a394a3dc3d212253a75c8d1e5ba23ac91a5aa5597c979208da5f046019cfe93a +88522ba2f65a5510672a5710b91b6bdbc6d1b9cf776d6f7091fbc538fb6226fd +825476d83278902757eb85768c8506a49138e4de1173a74cbfe8dd73cf088dd6 +121baa5e5fff412f85f40f46d10e788c14e841a15cf571f721242dee6cffac0a +e4e0b5e1999ddf993f60bf13c1bc0d8d7f36821c0ee933f295d9696b79a11b02 +03aed9b68c1b79deb9672fe6682e6ce3e12041cdf480235dc923c6fcf86fe03a +dbfc078e49a3d0fffb8f5c0154d67e61df267083df69800aeef10c7ffa470959 +8aabe62b04d72c6d151d3f9618cad28f28679d122994f772667fa1ee0bcc880a +ee6a429c7954d2990d127a7e430aae39a36a0c6993de496e32d8c2e3afc2d8f3 +1822438f78a84c1da77efe797fde11fef3bb37e5e4e7adea9ac52f6fde54de1f +e9d134237b7315d4ecc6431e1964b5e1f46403139ee4f4a986ad6c44ec794016 +608ba3d80de3b62a638d72c0098da1e11409051b5d28c53c26681e6c4005841e +345e80954f70ea9964ea410a4e9ed2afbdc4494554c8c8feda46f1aebcf4c206 +b419e5abfea56ae0b6c0b5ef75633514de82073a41edfc50fe2f9fd1baa4594a +0e30768d6bdb4b26f6076b3bbd9526ab9d3a5784515520539cf18719d48d9568 +825217c06a33d7e84618c185fe02ab5d03330098d3e3374503f5e5be4a9408e4 +3936b1dda4b305615b0d849e119eb6e4fd6fd3594d27230fc5f31d689ed5b0b6 +f25f01f2117268e17ae1d9adf475424c872c49d09723aea986bf5709960cfc94 +0d50a2c4ea199f506b763db1722e23e3a87d865be9200b8c1ba204c765a1bff5 +3979a345203a44098bd71d93255d3d4de64b89c48e27c80bcd5568746ff5c93e +cae6d8a1648f14dc007e9718fa7d52765f2a8e62aa5cb257503b782de2af859a +d36d32f6824bcd3068103206be6bf0a9b3a6f66d02aa9804730cc66b95eb88dc +974e9434250fd63b91112443c00d5d64d860a7686385e6382a479b75d30a5f70 +8990d1e75556bce3b4e7e0fa03177c3c0dabb88c9b029c1a906a8e2804d4c418 +22f1bcb84b2607883f23508a4b014ffe61aba9b5b44396899840207047c630b0 +3f0223b42a8ca21374ad8e9813a3772e48173610eebceef9b4a7df71f95b4061 +27fde813f981a417db07f007393d75b6d877b39cf07cc3ccb08949531b5ac443 +fb428bd36aae243e7eb0275147a9078b52086f291428d9f0dac84169b594cb4f +d24eba880a83cb5c3b23031778132f7a32a592bc4cf17312ce5f37b170c061b3 +11dab833a0ef6148102c47175aabcd7f9cf9e2753bd3e6e3edca4aeb489278c2 +5de644c2ee046ac427826427d4f6adf9d68af70a45698308c70ae367b264834f +f5ba1c0bc4941433c992bfb928588e7d104edaf9e80b216ccd10fec231baec28 +d66f430cac85b212f2306f52f9563032589acd2958cdacc835424c1cf7998692 +9bd10504173663388f7ddffb61ece4f9e02358043de1fdfe461789469766c885 +66222e5924f15dcd202f8f1323ee76fc088ef3073351f7d72bb8e24dd4df90a1 +114a73b8dd925cb4303f621e91466088a8f560a180e9132d6cb7ef3890a3846c +b4a15830c05b58ef859ee5d5f8977a367e33c14fecb65541531c50defe96ef20 +e535597cf230f8f59f386034232f56439ef518cacf3e564d98d3ad81c878756e +22a37a0a183b02dec4d15a04dcaa6547a7bad9435380b01b0108fb842e704996 +8ecd0e72a2635db88210e864319cbdc01703efa59ea4cb44ab77a5b096980b80 +f5ae995b6b91f3f406a8fb25e8f0e4c7a9303298115a5755434576bfc1770b32 +8bb0611bed8947b3fdb1e2447d01aae17e1165cd56a154d81e13d45a390c3447 +5ae7ad71f06b2727223b76b1bdbae43aae5e3000936988b13ca4507ae0252ddb +6c1cbf22ee54a5561da18b7602a2f48581bcf231f23b674a73c4b705f3d4d6bf +c88aeb00c1d40dc6177eaa3db6513ce2c628551ef79c20fdf05e9421eb54a8a8 +1e9ede7d8d7a3d03fd080758fe7f95d77199018874f730e9f4362b262ca51855 +ec36f3792241887786a9bfbe8980870436d88ad76a64bf40b67a08ec36076153 +c513e1a3da2c46acdfe5d4233292ca2e403e989e01a79e49c23f6f61173a4cb8 +089badebf6c4de916f77b325f5ed8adbe11617bf6cf635cfffdb6a25de264e1a +20c2c39b963dec9798cb967a4f1f299b8e432f8efcec017d65d53659e7adcd7f +cc06b323014d0add345767c3d63aef96d79a872d377418c47199780159a6f8ac +9356d379aaad972d8ccd01b42526052de6992979bf7cbfff7864aa33f86c42e1 +f24a966f093207d23fa00d96d5bf534059b3a6bfabb411b4c3848d3e9f99f97b +76dc1a816583f375612b2c018f923b5d305f88ddeab7901f1861e65b934e7114 +09be352a5dd60b3612413e04bde1efabadb801ed660ca0d48be24590b70946a4 +7b410ab6bef4f847ed227ad0470742b425978678a22afdf3f57b2306713d64ae +7ea1a6e6cccac54feee876402cf4f61793b4e7c50ecd337b1adbdf64c7efa3e4 +c58bff0930fc3afd25967b428d7d2882af9bb221ef6426fb02067482d6844474 +ad743104000b476ec403846375831d12035e3b5a278b2967b297caa2b2ec482f +7094760e2202e4bc377392a270a28098dd488d05b174e5560ea014583b6a9f75 +6a2b09e2a9a9265f13ddf3d9e9fb25ad0f9e34ff788443213a8eac5a293b974e +2834f7559dab12bc93227ed3c027b3386186b310a77d8f24098a272dd5c874e3 +f0824c0d9f0edaf1ce22fef31266908d8f655dbb7f6ad6445081eb6aaea42dad +826028c8ceb00cc8a72262b28ab4697c9ed5100076cc27dc76381c8491c78c10 +2e5dd132f996c9eeca24d4663f937e5e5935b896b1bb696930977cb0ed722e84 +a3be5b6c843f8c9f87e38b02f182017072b3df459a1a7e3f227fbcdeb1373d1b +a3f469286adc9e2496736c4f2e9dcd444c691e4d365b8b40eecbf848c0507c04 +62fe449d1d5f8e12178d10b53ee448060096bd5f3d8d26c71705eb7913d68176 +d919d66c2fc1f1710d858d0a46f3e9536722aa85b8247cab9ed5fef3545c8646 +cba59aa4f9f94cdfd6a57aa854124f86fe5f442dabee2a486529a213c6c45578 +30be3e9123203d31cca49bcf7be527507afea03be6b5405357d0be5e6d0218bc +a5254f0e7f9171b5bc979917ca87f6bc8419f71fdc3fb512f37965df3b9420a9 +fce76341c19a2f02723e1dbcdc600ee9af75e677437b81d7bf592dbb5e2709ca +93b14882192a4c7a1a3a98118255807c1b7831433401651df0a911c64115fdbe +7ede431fd5e0d28973f204643c962a9777230456ad3c903298399d4a054e3dc4 +d500b19571b1726b7555b520e3ee5505816cd5f8448a4274562f4558e6089a81 +ba45936a67c752a9e5eaa26fe974e0cd661b31226140a6fc4a932aedf4c149d8 +46b6cf791effb657f1767ff42379c0c6a321849006a730e44298c5c69eaaaae1 +35323733a4dcdf7689937f828cd8114150e172f3dd0f6a494e039ddceda36228 +6c7cf4f9127aeb9c96bd81562a17afb776a9cd2091daadc0b20681214b5b8fe1 +5269d9bc7e99a97c4dec87f294c3c8232be0c956fab350ab89d0bea9e2799fe4 +bfa0ca24afb007e9a169c627c8c15aaf28379c091bae5a5adae7504d7d405cfa +635b5ff06b705b4af8296be77cb8273e6ca8dc756747aed4ba41b6a2a1fa4681 +e7afaa3577d559b05eaf5db73ab7925f9ec68b72efc59d4a85456d006d2727ac +90be57e7b35ae0d4a53a56e52170562d756962dd09b8dd94fe9c5a41fffc4894 +627581a968bcbaeb9965be5c2c6e8dfe07eaaaf47c04144d601ae1104f863b77 +d773020f9d2824a4cce3b50d8de0699498d9363f9d60297d0ea4cd7567e1ad9a +4fac49f0ef846f5f3365b6e8e7aaad05e0d62d92d29229c751a7789703a559e5 +9c39060aa8c4ae392b2a128aac74b19ae4fc648b0260af15c1cab6a5dcb22496 +237da897b97bd740690f192c8b644db259d12edab83fcbb4acfcbe02444ed831 +2d117c8be3f51498cb536997f55c4001cc55ba26b0cf101e960a441a094e9521 +d4135551ccf12c7a1f0a3df9d7af5e8be34dfd8f7092a14b87f7171dbdb5cb47 +79da1786f50eb8fc41670def568ba1f946e25a4629a1d5717954681fe914d0f6 +d3463ec9fb16032c62bed673c9bfef7c10d65d1ef46d87a3277e0ee405e3375d +0f87e62132ede1f231d8194ad4f5f16c1a5ed32652bc58be70c29b243a57bf81 +eaa600a87b48bd3657c05984102b2b721cdcd8ae8d9d5b3bd224aa9d5cea4169 +3e343bb863be7a3526da971802089970ed815e75a6b8f66e97e4d7751634f695 +e9c04e201717fa800c9d7a42095d93065c3f82e45d5403028a3e1a35c3e0d74c +46c0d97acc09e143d657af6e9b6f19ab32fc1d6b6c385a2e3c483710dbad0d17 +e883f54431fe2d695db4ddb8525d0259849c04fd2147894de4b19161fe6240c3 +3ca8440bb6377ebc8b0951930accd582ce631a72dc10f7a83e1b0ad6e2bef840 +eccc616bccda53868b317cc2574238e06f132e1d2e8b7545ea36fc7fb6968506 +600ebd36e6c63f625603a24b986038550352581f0d23f5b259f167d7af0fb95b +64cd6ea7c4b938ab5cf922be0a0186f4e4a8625bd638fd181a18beada1a39c74 +31e67840a9a42ceddd3be18a42e891f8fbbcff35b14681a8c6c795a63e8811ae +0f443c93552e2cb76e9ce698c46a66b05be7d23e9a7098d8ae2c1720f57cb1a3 +ece104f0b952dae0a2eba0a757ac135eea1de09dcb1fcf7a41b0a575ef561659 +3db56d3932d3b267e64507085e2e08f110f402614dd5ac4e712f7c4799d39939 +0b27656477bbf51496eef9545bae40975fc98e490073b813e5b87f4d2965e860 +df2a2982263273c225ee5ad2ca8f788293509bc8f1d52594d7d811959152d627 +35881bb03a8166d27115e5162f0b75d0f507cac7c1e5a2d0fa7bd07cc3302b72 +f51119d7b4a3f6c79f0efcbbeda584f1ab39591fd8e13a342c463d289e10b481 +9dfb8ba71da5da1f65f919718be9bd2dc0c7cff251f5550e539831e52f9b7077 +3114959a1e65e7740c3f3df693b81912601eb82926c0176020bc659edf9b7760 +21bcd9dfc8feef98ca2aa9306fbdfd8bed0f8c2da3d6b04dce3463af1eb676be +348daf413764a22a22c5a9338181784ca6498a40662b273abdea31683c3fd096 +d9b28950af2c4127a079a6f24fb4711325c672611329b2154f9b608d6ce14884 +6d4e4e71a78872cde6ab7565db7acbf89d79df8adaab44f070fad17e31bb813f +6e84008da1582804ff67c02031cdd97fd022fa91d62dcfc38569e32cd0687253 +e532475b7f95c8cf5e25dad22baa2b987d89c43a5de50f7793fdcf19030e564c +908d538ee1cb3b270730965424c15ee1085c16fc8b54d1e92e91d870a8184ade +58d3f7e1e6a188456640c063c50d2be90afe2a07457e5288724d718d56f52d0b +9d83a58b181ba41c9c448ce17f3523faf7aae2e4d7903256190ee6d0d8e49ac5 +64b0cc9f781ce022975807938574ebcf9e45d07074b1c93e3b29e1261c5ab6f7 +cb67ec18fb933e4d9887fcfa1944fc7aab5cbf0b6d67326432569810418b9ee1 +01982254408efcdeb6f632f3bd79589e62e450950facdb43648172fc8938dafb +977fbdbf4c84386f36a04025938fb937d5ad51a49f0e18b37f8db3aa44e2748c +e9b0f421e0d030e575a0833ab352d2307190ff2520c52982384486408579f37a +83ed46d4a973f050cf9a1fd62b25f58b5bf17d88e2eccfb6223753a44e6a60b2 +265ff1c60d30b1cf11ff069aaa39d303bfe20ced38b1794dddc3d67d5322805b +3a840bce2b245a7384e43ff653e44eb6926bfa2c518a26d56b71f7a3e8de6a63 +8612636b7e6b06f90ab40705a5166b8860d46bc5c3c77ec825b1f4578c830ffb +efaf97118f119fd1c18c1062088a1f988cb682e5cc6d74b15d3a03d10d881854 +957e3dd7be77c9679a5508cff9efbd4034aa1a6d39d1ed5564e3138bae30bd90 +2bd577b17c182d9d2fa2d97c28a2ba99abcca77034dd68a68ec6fa2c36cb52b9 +f13eb362c038ee2cd7ec96e50f97ca9a948d087b69fe9da064d2aa519889e976 +1b280fa1b034b298a1e3487d0da13f3d3be3b387547245e2ce78d20ca9c945cc +a3ca6eac9fcdaa02a95fcfd2814ceb70f52de8bdb9c608b7ac71d6da87bb61f8 +acaa0d222e0e57c41ece26be229187ddc91e03df8ebdf01297cfb665c8c6cc3f +51938cbaecae5085f08b88a3856c8798f92e964fbf917ca22061e48fe54cbaaa +7778c8aad8abce70ceb03aea8b2964a9436c1aa04d0157e2324e579fe25175b6 +c8a0ff2a90148713a01f45b568befc40925be949135db70d745a8fa00caaac6e +31590d929b8f7bd494cf3068dea0b7d0a8c8df13d39094ec965f6cb14cb0fb31 +872f81136150bcee7853b80b5af56742e4f1b3b5f149510ca9e96c0f5e707b58 +351ad9aabf0bac49e7d348f9a153eb88ec9828041a0cf3e176fe6458e28d3de9 +652517493b4632b68a5e95f926106265d5629b763d7700b04a039c0fe7c4f001 +20269504b5b1295b68a04bbb152356c2ab5232e9c9f6f89f7a0b979ff7a692c0 +147652be2b51a411e060a0bf72a4bee43d4ae1ba1aad56ab0304c6f85a637372 +0cca72a6471a124b710a974ebe899348c13aa2e8832a007ad2c31ef9d9f61f95 +bb8cf5260a7ce66ce410e4e87d3449954be5f478f27e32beb05fa23dbf4b6614 +f150324921e7f086290f507a9c15b4a119993b3b5c294bc43c40c7da94acecd4 +367509085f0347369b4424b861471836f951b97444009aced38283fd987319e4 +b335e0400d8ae441941a233a9d6570883cba9e9e7ff5360e79fb5e944cf4eb90 +f824e7342eabb60dea659908b2260d74af16e1dcb0cba75242578eb1e1f008ba +64c8923e3688c047aa6ddf17b96a79100024d2a6bb159585cbba90b1684045d6 +96b1d4f4bd34d18af1d5b9a3c2b813050f629173e94b6399fa44b5b6ed83b63e +71f0f8938aa0805e168a744e482bc5ba215a4718ee07f0e37d6c4dca84fe5a44 +db40e013c249571a1c29c19f1076986838edb1e9314911d0742fb666d732d47e +05d6ba704be1c15b03f503c341076c384605bc14eedaaa7c65c949aeaf9766d3 +824c9b33d01799162eb0f5238337ccb6ef32a4a6999182c37316f4f29dfe5890 +29206b40de3c7f641971509f8581c80d426b450e80792deb110490d3c047a405 +17e8a80951f5b676fff4f496c6688905c4151002ef6cdcb4c195ca1ffe696604 +921a3d090a8f862d0071602ea7bcfac8aade06bb4d682d312133cff1a027327d +dafff17ea8fc52bf2c4a2e56557e881ca6ca9ed52be64c3f1c8b7fa6ff50d9ff +a3f2555889532f1bf1e71502605a316895b2f51314ec7ed6606df58cb1d2b5e5 +8653e98db1837b29bc6f84fa0fe01f1e9428b5c140f359b1d14a5726aedd9690 +b73e65d50a91efc5f7c9c42145569ac42ff083cf5bf1ac68682a62fab5667338 +91a2f03502d4fb54854bb4a85ddcd4724e4caf0545ec2dd7103bc9ee001ac49e +d76c9094e55417d0da50477b71c6afe4f2217469a006aa6f047184847d200bee +9dc6882e862362bdeeef60fe5dbfd20ec25de0ee273ca77739697273751680fd +17200dad22c5279c536776f132ea3048d7cde91f74e35fdef34a6598d10ddbb5 +b8ad0ab6e67b2bc498007a7983282ebd1cb737c29939a9add22133a033d8e74a +06f66590d610151f94870cfb2be27b38dd798bad8d0c71c3ea558d09ea8911a8 +f93a88ca79470a5bfb6d6ee27a33cd2579a9392b23c483ef9bb4a61a8db53401 +34fbc123ef45b39e393919cafe4d75138a117d8eb96bba48506f4f0fe50592c6 +f4fc1c3d765ed81d4c7a3926364d5c65f9ceae3c8665d01d4d66d99515ff94b2 +0ed889d89a873a3b3872b85aeb438331f9f34dbd833a8e0476342df14cc5bf50 +8159c21795df9ca9bf0817d8d1d74fd8594722a23d877a1e639072e839d676f5 +e9ad7580e9c06c3376aa72aa47c101dbea978d333fb1c85ac923d54e779edab5 +e52984bb6962c7885407710b5850f2adca1c803830a8c9ea1c44e412be9696b3 +3cc865c7a44cf2b8f869fac5505ede66aaa618bb532ca698912971ea8ca91736 +de59f372a007f5c83e40e5ce731bf7bdca3bbe60cfae906a1f55321e3e617a42 +fe4327e8a50f82c4d9c5db51fa034a3481f9081c70c5e044c6c3aa5a90629021 +6ce439a73c43933b7fa5e1c4827289701331ba64c57c8c8144925a26414a0f20 +6b9beb2916c456bdba6c4d260197ca497838e40c83551e87215793214e9e9461 +f4152041fc564d4d6b790f5742dbbd2c8cddf7262c1cef3cfd62de10e639679b +88aa4846f29a1034655fb2aba40de2d9471248755ddce97cb3cf90c937488295 +f67a518f790b12caea7eb0f80d85798c9032fe177396289c8f5ee068b40df854 +e9a4487734fb9e8c064504cf71e0ffe53020d97a3cf8f19b9678e8a3e0cebae6 +dd6bf5c6dd325941405718734adc3bb5a2563233a6dba612f56d9146691f73ff +eb7092dac401b4574fe51762dda03960e86697abed02544ac5b6e64eb1b4bd2a +55653cfdf72d99322aa90f0ec4897665773f87546db9b3e6d516c8af3419d004 +001d79a968a5f679b7b17276bc2d45700b575c0bf40befb52ec7687bc00d4364 +08cdd7c9ae5549749aec7669cde41cfd3350a168ef14e22ff28ec57e2e800b54 +7d06d0a0a5b620ee8b24a6e02f30d68af394be9ab29fd07b8265c50c7f28ea95 +fae03a1b8eadd2075e249e8ff59ddb3ac07d267b4bc54ef2e8431246c0139c94 +f4e8459577e7008ec0445f378de02310c1a460473d63f7223cdc29c1cd944486 +d59ffffc8fbc1fcccd315d954b945e0e0627af266b1272146383563a52e3bb67 +995894adae1c301c9edfb54e0166db3787444a057b2407a33db046a4ed9a1059 +a16e5b8ad9206b62ed761868cb054e9deca8669a4456c8c4d750aecc7985c278 +86a6e2174c3e73cb2ec30cc8cdf51dc04068cd33b9fc33c7e0fd8bfe2c5c6d94 +eda102f79c40e83233a35b4fe49949873c68c1cee341bdfbdcca0fa88feec616 +710cde0f9f0fcf5a61f94b0c89f95adbc85365594530abd4bd9fb7ac88bce722 +91d677a0fb9060e510b0d174829cc12222035e41022b96103a7424ca3ce710c5 +9ab2ebd561e7c6cba8cdf99a3875892e7da05b1ad54e186c3f3d50111fa7864c +64ae5823b7b1c003fcba38db5f20f801f59aa0baf4e4802c7a84edccf1251036 +6201e48a9feed9a81a8d7d444a05dacf5d9b5486d3ff7fa9691a1432b85a06b1 +709156584c9b6aa7a0190f1871079e5a9fb38dcb31964bc6daedba75eb7e24a2 +4fc857383643eb2573dae3c1d7549d86aa7ee7ca9ae22feca7587f542d34a6b3 +607090de17c627a10e062c9da4f1814c5a1a3800b62515612c2445e0867b8891 +c37c81f56f36d4c08d3afd5072bf8779b12949abfd2d081af230ada474cdd45d +f839a3289a26053c41f8ef47d4f91eb0f6fc7be7f41eb2c64b0052710ce2ade0 +192261e3701dfcf5e68c2c5e4825d05e4d32944387d6224d44e3de1e7e5142c4 +178e2d42ee98128abdb6e6b9a6590167076dfd05d333aa354e612f06170664d5 +485a1e59e27585d965346c2a1e6cb67f31f6d882a64d5723cb920efc78bab1f1 +062e970a200653a49b73447a30badc489dd0d54996273222a8ac611089ee1553 +ac8c3b473609bcec27ac20edc391565ee43ecf6da585de417a55f4bdedff6c1e +5799dfe8f070bfc1f9e34b9d96626d34246bf6b0bf5bab3a785747607c257621 +0d24f819e32fc965da611cb3196f49d3184f722086a397c6d1fba1a7f7a2e65c +8f8fd499397a381b3e8c53f6073c80e1600143d189528e774d222dfeb871aacb +60e41a641ccb5ea996b71d29c6c4ed83646050c3c5f2cd9dcf7dfeb50ba6ce96 +12a933900479150cf873a4e77ed04015b46aad15374c4882d070914739d92639 +df189bace51935d6b17035b1dc15ced2354cee565fdcdb115c6acfe479b491de +d5cac87f4c205e89c74b3f28c0d88537a676b23bb8b32523dc58807d1446ff5f +95c8dd4f9d2ccfc2396a9452fb60758da5f4cfe120b3047407073b96fc770eb6 +898317d173769f2943bac260acabc0b66bcb802bd92d2efe8c5728f81a646e3d +ffd77a505db6e6ebdccda183dd8590d5ae8bad19445c5377d2b3765a518938de +6f9554affddc3ae995ac0821a500494c00ff3dd07a076483cbede6b39b71f5da +8b27a452d1c0d29f04406f3ea1be8e3c3ad23138e84cf07d68e1e30d474fa284 +5bc8bebe7854329a8c85d7aa6d8936010267ea8ceee4217bb047ea6bca7d5fb6 +36aedff968224e7218506864f75a342bbef3903ea09ba5168e546d62760a1e97 +947506106adc4c2e6fcb8b5f31d8251dcfa10626a0fff1d69c9b23d59118f6b8 +c915d5eaf3f70f36f1e095ec72266acf9c2e363e8a1dea27d6048818b625e0ba +66b926a712476c9e407169fcc89f7623898e836a115a7c2dc47322db62e048b9 +6ccbdb2d47dfeb2b644d180ce58c9f450ac4fab5ffe007daca501b859b4b51b6 +23cbb4c14577555a88da040cd36c94d7b15896227d79f605fefca77bfb39bb9e +276a064030948a10086df5354a0dccf4c731a60ba801872512b25dc58667019b +f2584170829e025e4682e9225cd63ae8b81674dd234f0dfed03f709f0dbad9b8 +83921e142baf96bdcc921e2c91ebcf3e6b673e0bb95ebdd625ecdc469adb6920 +05a5366a6fd57e3a3508eb6938aa4633dca934c79444adf8dbc599feb8213e8e +996e281a807314354c977a4fda773babcfbe9f39ae515dd0491e1f988c84e1bf +dfbe33121c223233c241bc67a7325c1c2cf62fa78a19c7a9e4d453aedb7ea34e +28aa63e4010e7edb1ea207cd0ce4894999dc6ffec2b6ee67650a7da941818aae +01ee8800c65f6014a1e2dac189f34275cf25179f19eeefeaad35c12dc31539d7 +8acc603ac9514f7855327761c04d49f5ec931178a3e207e3627aad366cc9f21a +7ca89786bad85851d5c7f07c78af2a55d82d3d012630132ccbc48dac54821c93 +5b389164f3c8e9d099b5a59c4c5f97eebf5d5419b665527a6baebb0be3b4b78f +c59c09f01974c399ed6948943cc3445530c972ca51031e8b8f0fb1ef3b987156 +a7d7b66f67ff1cbb5f22d0d4cc6ab42611e31b9d9dcfd69dde62c5aa3b416265 +b990b47243d3ab10d3ca2600afcf32f83fb9b6d0a9c170cb3792f75b9e84ebb9 +628eb42962587fb549c1e94206cca16a08e1e2555a608902117f8e18fbdd6bbd +7e4343f658dccd29fcd344bacd9a1d4668daa639bae1bdcfd59329fb0443ae6f +14cbf5058558a52e50d17079b4921681b175316819ed608767263cb1ff25939d +a932b9c6eb071075818a2dd348f426a1d5250c1543094dbde1359da691bdf401 +29a21710d9356373534d3b5ac515c0f52a2d9ae58068781fecbeee46bd5e3130 +2454b8f91192d97c939e99e0b1cd37e90a64f56fabaccbd198253eedba3e1091 +2450b64e81119ab6f2367db9b69a532d9d89fcedcd7b3e46300a48eb09454300 +e27d1189d0d90cc8cfb3720f1465695df6d7a5ce9b79502ce0778c1fb98c7e02 +80e54effc477bcf6e47aef64558fa92dd475199f82f49a984e7bb448533a0697 +bcfbe08160c723651915066e1838345254222b2f4fb7bd9461e9b7ecef66f4ff +13ca31126b43525b3ae84aca0ee5cc888a799478e1aadc757937245e2988ae54 +0b76c0fd4b90994ed02ba9fabe22a434aa99baa8723b1472d260a611fe82c93b +9145f71698b5ddfe75d65a91abaaf52bc64ddb46f74b84e20bdaa84c95fc3999 +f46c0b0dfc887b3fa919cabccad0d37e06e9820f9b9d420e430165a80da44006 +0007f518fef4069ed7afe6f093fc73da3447133d5d6abd59c1978a2b597b6aa6 +6e0aa90945fbbfde4c43bfef3caadfda10cffcccf715e1158a15c6761857f938 +3f95cffe8d3e623a5e1ef500f16c331a1999354267e030e0c7eb9a6f3a4d6e08 +d030eb85299af43118e703a1d61a6915432289734d164f56d7c08d44351b05b2 +835d922ab34992eb523ae79468800af340042e5ca31e3c374397f9a9f2dd78db +641b5ce7a7989b175c0bbae12d446a66bf955fe43c159a882fc041af9c88b8d0 +2a86d46e4403c4c63ae49cdee6e9e28b0eacebf2f1f3b6008d076e12b40fdfde +aba137d9fa97658b3c2857b146e05927af961acfffa2a9394940f78df2ad2956 +e13e223dd787f78182a6259b8408e59062a5dedcdea20028d600d111de5b6390 +4f1df95bcdbb6e0e161608439d10e34b4e5ed9863d2eb2ea8c07fc6137555cc9 +2c17890130218b6495366a50f67c8d77c00e9732a11196ef9ec89b66beea9771 +7134a8ffb3eafbf1083c31cccd2b66853b5851af67919c4cfdbb93d3ae68b512 +c42a5311c9455740f127beacd6486b7ea17808017ab26bae649049c2e1546389 +a14f3dc4df4f5699f98079d5ca1344becc3e494c83a5447c117770b0f20eb2fa +6f9558627aa174d26b5c33d38cd7972fd1fcd7050313bce8503aa9ab62e8ba95 +3ea8889ee4c95fb3331a35771a3cd78e8cdaaec9256c959ca9873f71a06e5066 +d3f6882c3dec342bb97a67cf7dfab7aedaebcc908c28c67a20f3397b48e76d2b +87a2c54dc30a58883b1527e035ca6d366331fa98fdbbb4837ea8f0cc79d741e8 +6b0440e834a8897e2320489405e8fa8f600fff109c27490e52d2b3e36d3d3567 +818c13eaf4509e2c83ad278749a4b8163acd53f8a99bea07b58e23c5e5d08c00 +6000ac5b4e2494cdd384e7236e12bb8d2b5cb706cf6336ab7567683b442dd224 +4e330922eb98fe785af7e08855ffc179635a6446fbcc7b03037d08ea53a47a7a +cecdf0e17c2e8d917566d25e6d77c2781192e12906850167c6f84b1a718a7923 +7758863fceda314b0a792657d3ed3a71194d496caf394e72fa6436007b6c0dd9 +f09360d3782e0deb53ebcaa8532fa1db2de664c7e2476176fc40bce84481a8c6 +bf471eaac162f0bf317235a006d4126dc5ee52fb0d96eb1049616a88d198327b +dbca2ff00f47927d5b0a60a733f37e3064d5ae83f350f675477842d5d301bb5e +a4aab845c099b1285b6a49620d63c54aaf6c7c8683841db00c929c85761d35ee +cfe35b7eb9a0f0c94267d7e206f538b850ba365097a93cf1e41044e30a0d601f +89a3698e7a773840e0ea749bc429101a3a3706277b9d5282722cfd05278c4a65 +4293449d34fdd8ecd449a35f09e9a49a29f81b0a67eedce32219cb1cdb9d5a45 +7710dc7e96e4ab0ace1d56ced45f568f3bfb46f735f2bd6e34d2f286640014f0 +74ae453fad0f8309bf9bda41c2684728c7535f0767ec393fff595bffba3a1ec5 +630eec291e2f1c8503652dbf174d8dfc44e714c1bf8651ff39f74dded66568f1 +3ea6c4f518e19828a0ae70f6e0f4b70d420f16826f32e50804173d5e1091409e +815d4153654775ff14bfb50fdc22845f5f50b037d2e536f8d79fed1718892981 +fddcf1e50a67ac5416609d603e29ba40d250bf67ae9c25ebeb587b82fbbf0373 +422d2ad4bfecc31958abf7bc443f67d4d9cea0cc98a2caa9e1a008011ac8d0ad +3cd813f9df72ffc561df4e1bbf1ece86f5365bd9b48d7f7169c7b20dcb2372f0 +463f0da046415fda3a49d52738fdad88bca8c30d94d644027e3cc043c72e4eba +836ba1041dd73136db41d8c4b587fab80b840bfbbe4723e1d6fa16c7c60a9b9f +7054852442e64431b1764b50666194bc04ad70e4a80f29e086b61c5b79e1160f +74c8060014daa6a8fe0ac7161cc5dc798537a80880e87feb91db18c6b737351f +c97af89a9475d93a2aeebe1392d14f1fd44352c3ad3e391d0a8829a084bdd5c3 +4651b78a941d1428530d8c198d2e689a7a3b630019e75dea624cbcb547a8c1aa +65b8d22960e35b4a7282d4d36fb546c16da9504447d91edd2f2d198b3a00a6c9 +7e67c6d922bbdbd0b7c9f3ca720dfb0ecf19d77e649c14824159d855ae13de59 +caff29e3a569914c4a73374a55922380f01c138fc78b3fdbc74d85939dd2675d +1b01e39790ba05ff0429ba79b632ba44e451a812645b1ab3b117589f587c8cde +dc88c021ff75fb9fa6d6bf783262a6f9e48d8701a64958e0ea5c86f5be805731 +cf5defde2692c92c514841b231404db099ab1278e1a3b6bca120917f6a99c323 +ded2e8a42e0043841b46b598628ee65a04121860fa485c0f64b915d5fa128073 +9d50f89b92494f584adb7dd6ceda9c7905b0e57ff7c9c53af0eeb81cc3eb95bc +2df4840889eb2d34a57abf0a49da348d9dfb82f0c68c4a0fba22495baa9f5c59 +2bd47d0c8947dc44d858226c4def55dda2e2b3475e0969d34cbdf3830f1a9eda +ee4ad1afce4141b78ac310def0f73e2c0320332e5475fccb9ddf5adb1170204a +f90dabcb1ec8980623df239c6ad6a325fc79736a572eeba369c61d1e8036d1c8 +7c8d5b4f0d75bb55babf4cd2259210cd05a62e9a839ddd78c9d6745686ae53c3 +db7fe099ade891eb1eca805c745ef3816d77814c8250309f7e7c5670444718de +a9b291759ccc9dfe70af766569141c00ea4c9d8a74a4527ccd073fc5c3739645 +9cf543dfa3de324aca1c3df864e025bb978564f44c00adb52edd9e1b05319f65 +f74f06dd877c776a93b14c325337f439279b23ecb982581b0ce6c7c7a294daad +3874e84d2114a3631b27e2a89eaa2706de9d462cf5ca42b2aea29958649a481e +7cae6e6ea152db0e106164f91883b2f181c636286e6aab59b6ab5e46ff692820 +71cceb56ecde070538cb20f4a49590690c7f48d9ada1335aa91572ab34708338 +6f366de696e5e005b051af2478e2fd2b69a5c628b1cb284bbb7f0b3f09fc5764 +b41ae160dedb211e207908fd64471220303110da81e6022c0219765b849523e5 +2e1d2933de238ffb0690fd7a0124c6964a28e082c786b9fd6c072844fe8a10b7 +6313c4ea814c91ec72c3e2930dd9370726a5fa41615f8f12aebd34897dcdd4a6 +f0fdbfc57e4bbba5b108025953edae824830e0ae489328d103c2096f0165561a +802ffcc10c75831684179c7958b901c9c9fe618cd7f27444526c24d6f1b32288 +a8fdbbea8d798e25037d3760e2791d33675d245a919b872174b9a93daf449ad9 +ebcb831312463f4d2661a000367c3e887485003bc9c90673028e8381f0c4eb22 +6a1778bc880fee5e38b9ffd5dbe2c23d60f516855b97ebafec02a1185a06f9f9 +f25ccee0fa4a91d275179ef2761f0a7e79b0b561b0a8020d890ccd8e85e7e57d +a2f304e5655bb15ebcb38ff17d815fab5ef607b9a6dc680f58ff92f47249032d +1c8e1f67804dbadd9f2750f2e558714bad0121fead00636150310040fe21306c +015a14c8dc0d3bfe379bb05f6bbd7aa54dfa9f119d6056212f9ff48119926921 +ab783bbf9f00e2bd402a52dadb00a06710fffcb8740d4a822c52070292026cfc +66a284eb6a431b4d9686191c41ebbddd452b97ed6dc58e3dbf726d748f10efc1 +70f716da7a64617f58126090a3cbd619c851f059728b159b5a4bde0e0e93bcd8 +8d4b0c071ded6acfe348b76e44043232a893842416e33431172d041ad4be5690 +d15bdf5d7798a4d842cd7abc494484c5060ba11aac6dae658232c01d76cf32a5 +7762396939fda1cffc72c273232794bb9e8fea91af248528c408ec39a1436be6 +4bf775e63669aa919b49cea40588033c1b83520cf0b417580b102fc58052f1fc +133e0b0bd67b98f2ef8fc13d36b768ccc316fb51710a9c8f8cdebd709d4db09e +abb65a16c3dbc43e828b5a9072207aef0654fe171a1bc688e624a2c2f07a6650 713cfb7e01dfccd2075553b3f786ad19e6b5d3d13ba47f0d800b290749a526c9 -30848a4d556d513b19459c96244b26d947fc9e09d25c3719a3e40c2f22213aaa -054e776502b4aa4cb46bd049fda6776187ddd5222a9ef6ce30816af197e949b4 -5f2551bc1d21afccc5ca0c2e901dd5915ddfb39e0a10a51267d087a9bb5126ac -66ec6b2bc37c2129740c2e611ed61ff144919ff89b34b976166b1fd9bf1f92a9 -261bb9755e4299510e74b033ea9d2c4484dd200a49681e0fe12875cb9e0f654f 0f1d3efdd07f9feead7b2015b02d76ba6f0d61d66173507f76d986291b2543f6 -e8010d7db50bd68acbdb5abf3d2ea02319d8f81498b5a2c899125513cc223171 -cc6e51d15a89ef50623b7e8cd8503472b497468f86f146357c41b3dc731e85bd -32271a0e0ba74a715cef2511e927e9945ef1a2757d0655130e5114949c94b205 -e51611d99fc256b3159287178e24fe79655f60592c2cf7a0bb867235f77a3f22 -b29eaee0c047cd4fc7cfddb0970b859057c4b88602c1ddb158f24d34fd3ca98d -a826ea559284f10ac2d281d5e2fd3a67ef192ce469004db4ea9dff498da7f24b -393ba794c58779c1ee7f9758510622ab7f42facf9d0d79be6111259e1a56ebbd +8f5d087992f35b70a24caf747bdbc2e6469e0281533ce388742c5d2149a899f6 +df4926d13709bb88e23192eeca032937599ab4b8ef93984aa618eccf1f4cb06a +1442b1e915d2b58716dbb0da4c1c8ef7b0eb71166046d5cbff1031a01e21efb9 +712afc0cf65e12be4da48dcfabd800d34d13704b5dad99256ba184dddb70583e +d88f50ef0357e84ef769a7e5dee65b43b6ed2576d99a9576091d6bece77b3ce3 +de96dc6d65b10125aa25782f4562226d6d15f4f3273f37c1a99c9621ef2f0f2c +bfba6117cb85a5fbf4d5acc2e1f4033e9a062906b9e081a1e0f075d28d54770b +9152662afc5b0b642a85dbfddec329585aa5e65c32ff9e4e9b25e98bf241819f +65502666bae303206d40cb1b8bf2500b6698a8d4a66289b791468f4f49703b7c +7720c1db850568c67822c3c95d3121241c54c1ad6bc95a14427eb36a98d4f4dd +54cd546bda2927cd8af5d9ff7d649ab35e8a5d92f5c3a8708ec336532899ef4d +4c512f1b316fe78347d90484cdff2a262255d69d4527163b47bf63fb857d7090 +3f9e7f855027d7d6f3db697ce76b41323805d879d821224ffa77c8e0b4ba9118 +b17f07860b0c14e2bc6d34e195627d0dc4adece75d134042e84603cd96939578 +68d9901c3e1b60e588b5a162449195b9307a153766f2258f3cfa189ca4b5d618 +e5576849d5981f76d3b1d19184110c8991132115dbf1e780e7df0a7241df5a8d +da8966bc61cdadb5845c8dc43b288e92c0bc742755969b349fd721d6a38af544 +b2ba410dff075a4f91aee02773677a8b4c833c934ccde6e74d34ace4b7148580 +1c6c6f407aba94a67d6406b2b57dda4f46405b2092961a4c537205fbb9622718 +1a5627d7132751ed567d8144723ead630341d4f3f9916f392c6735d9837081ac +384d7a60507c144e6d622d7554b72a26a5a95572f1da765aa23cfa9548c33237 +cbd16c3072a65bd78bd24e8842634293963f8bd0c23553dfb27bfd0f800b3bd1 +f5d2ffa85eef5d9b1e0be73942a7c8d179e2fb1d81124dd9d6778d2940068a7c +6644192bedca2dcb2c4b193a91b91edf32193b4e7e524cf42676cadbff6aa8bd +5515285ee161a6d0e92b746fdb4a0d3d8727045e79e36fa76f20e0ffc132d987 +894d64b630d030d27ed1f01865fb97f2d191adf7eac737d8ff1e1bc245b9a046 +66299b177b6709e2ff572d06abb742105a9d8d7cc1fe1a01b4374e4f14120ea7 +c41f3826d749c13b906bb99b28914185fe596ee62a1acceace8abc134564a8b8 +8a160b1143d1c2d99e83c011c8faf7474e6b796a7fd3d28544ec086ac9d29854 +32ead108423bcd3a15975e0627f73a67f8c69136cfd89ca3f7776b17252b1c2c +9faaa6c7b786c447618edfb1c76a8e36600cc3621dfc1ba1fb63a9c8330db494 +89a311aa7fd60268c5c9b4144d88a4e8d210db42283ab2cb09271ee34bd7796e +d4c64b4503e737de8d7a84156a3f6811cd40bd80f1173a2691193ff333039aca +4a19454e927b2236bc99a3b116aa5322a4dffb4dbde8263437dd25c62ee1fbac +9943a47e446a9057edac23e79f7de354a43008069ea29959938fdb5a29dac095 +f1aeb130fe0ab732fc0b36fee6b89c183fa3afaea4165cfd919c828cb3dc27b0 +dc5ab4ea3cf0dc8b9d4f0e5a9d72eea4c94e4296162141cd74d1e4f38673624a +a2e8277ce1aad09fd95b2432b0fe5a2f6a24c17791b4ca528356d8582e3e62ce +a643772e10c7370a9e2c20d5416908b6c281fb4e83e15af6068db64db2892197 +72f59b18126dd3391a44e9dcc754ccb9028b327e6f9d111deae18480de7d6fbd +580e0bcc88214146b362948cd2154b9100d2a895c1741106165cefe487199054 +fcf954cf99fe5627f8b2cea1fa76d56872a2ba7c5f1666bb8640227263e3e6bd +07799483358740d519f7cc57e0426027eb33ab3012fa5d565f5cb2fadadde7d8 +a8bfb1d54d2e2f6ba3af36c332b6c33a58117ca84e21aa13db2874595913d251 +0132e5cb9d76ad5b470a4192e01655ee073b383965b1d3aa68cd29f4da983d78 +e1b912f72b5ea807cd51479f803c46658f78110f6a7cca7f476db7df0e2c3bbc +25c50c4a4938207dedfb73c603539c602c1391581fc7c4554bfd7cb186fd3b25 +6bc4a0f5bc77e1ebb244b53445b219d3bad378683bc645000bc8a760e5c93550 +3fb12d1e75fb9ff231ae18839b4eef27e60acadf27353597b10ec7eed55ebdad +6ee3df8af2c0f3641ac5b73f89660e8048678621b77efd0e36f849e610e3d543 +49441a6d2b5bc10d86eb6571a7649b267e6363ae43a4271614485a7c169cb2e8 +fe0880764cc9d15669dd6a23f70d54f4d15415286b7daaecffa54f940e64bdb1 +1a0692982fbdfc193d188d80e550a75fbc5c0951b0a1e4de1043ffaedd1937f7 +934548bb4b93faabff276b5ad2fc6109a883eadf8ad35c2d27fb0b839903c90e +f8cd1682a37f06cd5b3963a9203c51fbfa1aebb8f82c2c4ec9b30787b1dd9048 +58af1ccc221542955bca9c2600e71ef9157b43eaaf4d40f47d81cec81ecff561 +4478abc4570b369152a238834cb111481b74b8fc3023ca94fb8275b4531e72c0 +254b130178ad82a2440aa4506bc45c23502772952bd20adb094701c9508040ef +382be311d3c2d460664c00ec20e53abdebddfb7c96977a87075deb3f3d3deef3 +e676273e11d0e82fcb4eec39a01622a331a6f3a47a56dd088b85afdee0984e97 +31225a10229105786287f151f03835858a0de7601ef48d95c84a0f3c42ef6b03 +a07e1e086f9d0e93ac6e98a5923d88d57414438481b9671cbfeade4dd1ebb531 +7a8890f086d1b76ae9adf5bf7de2230b444874e6f34185d13f011f5e523a4c11 +d9920d28aa499f164621b167ffbe20687fed0f29e36ea1fbe254067913dc1ca9 +9bc230fc05458503dac38f290fa1bcdc13d7d6d5832dd01533fe554a845d847f +56b9d1938f7155691e95d7af717e2d313b57c5f06382726f3690dc5e26508945 +34f0d4ac9f4630b64c9c9a04cd62b1b2a3d6c14e293c096c905336aba5107e2c +054e776502b4aa4cb46bd049fda6776187ddd5222a9ef6ce30816af197e949b4 +d5c8db08359a29eae0a8832314eb860eab1ec9813264b708f228d0294eb46ce2 +63b0ed06b2d3a6eb78e176591abc3548a027a0e7f261d1398516925f5944807d +779dba5cbe7df2a30aa2c5fb6ea01e4d138ae5f0daaba524566bd3591b9503d7 +a8a98b1813fb488d4561f0e0d6261cf613b26b676df3b58bec889a65f7f1fb3a +fd0744eddcea5bbae28b65daa28373241ccc009e56854382c16b9d17cf2017c3 +3823b06f22f403535f1ed1e4c0bdcba397c7362f9c66df370c63501f16b7535b +5b72faf5c8b978a25a4f9e99a860caafc0a845fb6deebd79f88425ff933de029 +89431b8dc29ccc26985d898dd7aa4907fb287a3fcfd487393ee789e0daa4a49c +db2dafd6ba4e1fe84d1b47361c4671dae4c52902a276e30f16e6c6baddf57662 +a47628794691fbe9ad4d4adc4a16137945f46a8ffea83bb2610d7f7ec8d02ad5 +61b7e3389045d323b3c9b03bfff11f90e17e4a642ca3b44c889d91ee264df9ad +5f2842a66f2641c128340337063d0f34d5ed4e6bde2a9d268e54fd4cb7317492 +2a493a9719c03c11032e65e6994219c19f4c81ee1b9590c11f1da4bd972bba98 +4dd70c7440fc53726c040a6f0c6c05e11c8c3035afaf93e692e35b2915be55b9 +7c5375fb3241169471150411cd1f3c34f3b7b20817b41ec80d521e88c15aca28 +6adeed92841ff92692ec0aea23818ecb1d4e037b2ab4326877067b2c797cc809 +720d7a60dc73b27fa50203fb5a8bf9c2439499439327da2ba21b198611e50cda +49717c89152bf8d8a9383d4087a338ecdfc9a2578a88bce15cf01a0f2fee9bd6 +cb85ef47a1c2f4924cc6515a56cdcde23b47981a49d5120577146e8872b94db8 +413b1f0f3dd7a4e73e7cc8031780de1bb3456a270e7be673d1ff54142d6eda81 +961c9e2f015e4bcf06e6cf2e04b3deeb495cc92776085af8760d77ba61af452d +478ddb2dc0844d1abd69b0372660a51003c0ecec8ff89a86f93add30f2479cce +346d1a913ee4cbcb0311fa8dc77e65baaf8d95249b77581e707cf6cb18e46c55 +d7cb93fd68148815dba1ff84bc5e9dd32d4f61fce2798842e4755ac338458c94 +cfd473c7b1f15e558e1f4d211811e718174dd57a6d9a045342579bb707a52b94 +a323e9cce1a9c4a3951dfcf9e525bdb78a77a34d73e2353beb79009c8f8a73d3 +627a256c14b4d4841e67e79a2cc48d9f16934e77c304da17c52c230e7421153f +c9015c6ad7f7e59f8fcfb19f87347c9c9285a0356b668f969f3cfd31fd7dfd20 +0ce80f60e096ccaefcb787ef0ee3cf7bfbf7164649a3c7e63c4705684d373045 +aa7638781f16b52f40d2e691550bf4682ad10f323584ea56566b007d1580444a +5c088b8837d4b3414a4604358ee7ad7ea9c26abf50e4c733de1777a18c1f744d +94c0376bf8cc96c8a728db4ea9abc5b1daf2efb7be05dab3c6bf7ad4f462c358 +693d2d94c81610cc0811148dc54c9261ba75a5bde19a33339caf987d2106d1d2 +5f5f41a7d1783b044ca77c75d8c6a9104a83c9c9aa9d1c5f59af8f27f3427208 +6a00d75b34368c65711afd5a979bbc669577ac49f8885156d1f07e2c6bfa116b +5e9dad9498d8e9921a87d8ad814dd4e060da7e275a11d81acf0e396ca02aee5d +2e09cd097b1d3ecbd45ede4b4019d62480d27222aab708d3574b03503375bc51 +7986704f56406f40de9da0f75f7fadaae830c9340d893da8e853d4ed632d3613 +778568f790486a29c250a45d601120f30a83302e596e402e991c2fd97f196e60 +c587bf02524cd4a5dd529f855ee41192501255fa80f1073e044d678ec8865ed4 +5e451cdfe1614ecd48f73d93f767d651686985c7a6bbd033a4325b76c5a9750e +c9016fb840750ae7a0aee9135af8f90baa0cadd457d668d431a3b40e17879ff3 +089aaf0d90529605e92de89f303b6daac6a8b3d2365ab1843a06763ff3a61b65 +67abac191dd421c0b0d763c3436f1f4ab2a4f04c5ee12418ab28c4a608f8b7ed +2152369bb55306c2662ef31e432878b4a7d9cef62ebabf310301e965da618370 +7af5d784ed2347849ed485aa544625cfc10da0bea977667e9c0dabed82130418 +bab3cb6ca7624513c290056ca9d9dd768e1e24766c8274a9f16ed1d8305ff426 +6b474f895489a8052f928dc8b258f80ae24331fab35650b150a11c396bcc378e +7a8e0f41d6e6dda7033f8a8e456df113d2eba6bc790742cbf67009eecb0eb580 +aaaa34fbbce3383dcf4ea32475a0e0a32774ffc724e840190db16bf190c34be1 +cddf84e3199014fbad13a3c1c06c3901934ada1afd5c1640bea40d5185e24bc8 +a6c9247a760bdd862af1157fef8e4dcac2e33d7f60e394b149f4e22620486d80 +5bc5992d69d5842e119fe594c175638081880bc4631796379bd2ccd3b7124675 +c52e5c7afd23d74de3a860f57c60cbe4f63c75cc388db596364492be46297f24 +c2c976499bf3dff472da9252e990e49a00c66d2277eaeda63d792d4d24863638 +e97e360e51cfa9ee2fa7720c8d660faf5246a4fbb0c8d52c84e0af76b7be02c6 +e4446d9caa9e7af06db07bf83e81b96c8e783c48d0653664f47043e0387c8be2 +5c87e98e4541a0b55e3d0f1cb1831b93e003cf35063ade92502e6379b53c0fbd +39239656b9e496c7f8199908f229c5c6a2b7822d5c0d3bfd36fb2d6355e2cb1f +82759072950f9f88c64a7e33bd096899bc70d3d9ffc667b90b15d1698c2b06eb +2bc241bae962f35ad45d7edbd69b18b7da0608223ac8223af03e83c51816c494 562020c589b13373527aa059a1f176bd54a0b2187d0aa7007b41d97f99facb96 -607e8ac9f62647ee9d2bff659c1e08542aa99eec29a2bfc031215d31f37208f5 +4c5092439b4c117a91a7c7ca5d6dd79ce365f664f4b61060b99315947da64484 +1e3853af76de2f01c704981d8471d960ec786e09e1dd4450af152a618d30bfcb +c1ec95bde4686e2705aab12440f1bbb594ed37e7fb3467f280ab6d4851009334 +06531bf411cb31b669e4b6ce0354cfa2c2bff30d55c33553c6bf8a4da946e20d +9e48f83e5ce4cd704858f5185bf4eb98ab9966ae0f5fdb777362cfd8c1cccedc +8d8d1a54b84c50b98f2b7cc7629711a9e8545e31325a6a1cb88321d3faa25b02 +0bd2dabab83ce32e087466c1e5b07a6c21e4e84028d057af6413e70f3f0133a9 +1dab7aa7e13a55ab9031bbb7d95f3bc5a81b4fe1cdf664cd572150a3d5ddb87a +eefc82010b4c7e42733d702c3869f9bc170fad49f47948787dbff27795f29562 +884e559f294971a6868c3555ba855fcb2607384a9d1ccf10ebb2e6cf1e2a7bf2 +89daa601b73311e42dee11cd34c8c16e2432471bc8b8f3d27a413fb4c59dd6dd +85773081178a29401b1b3ca794d9c5bdc4b848d0f4cfd69a7f98bbc1497fe4ef +44734a9c48b60cda6ebc42c26d6223e978afdb2e6506f0233e43041f99eb8db2 +0571c659eea0a98ccbee0d8638803b5be1153f9421d026bfafc8efe95d3ca2f3 +501f1dca1da3cd30ebdedc570901243597c4a41366bc4c4ce0bed7f9cff00c39 +55870eb28ab7890c01af34865100a9dea848e86321f519fbb65e28fe677299b4 +7ec39703c5a00985484b1493d258da1c9971efdeba3315bbd3584684c9ccb803 +8ecf7c0bba830dfd339172926ab4ae8fa3d2bc054286b6838bb41e1a519ba5f5 +59267ee7cda1f660422d54c2782ba0cd26cfb1455057a6cb6106c58aa6205d0c +72cc00ce506867a2515a279fc5dbfd97dd3654261ba7723d36997e5637cf8d8f +8230a1fd29e3dc4ae4891e3be52206c7a55da54b44ad8ae6f6234b45ce37f753 +edbba55a9aac364dcfd6c8ef59b7e908b4c6d28c9a3d0ce7b65d2dad9edb9f3b +48b16434770b5a2873c290e50e3bd6f59a90217815523abc5ec8033b5c5004ec +f8454f608795d1d233fe53ed86b361dbd19aa63c591ef9a2684ad2cf8252d104 +6c354d1c4a23c8e947e7ab849942de1c4ec0cc158d14801487d857fce67dafdd +1b033479aee1b28f7d7af5ff029d9d7f8f2b81cc9fa3459c489bc0ec215b0e6a +7d25666f06424e2d9bf6a108d65400a4581fb9e9be54c92f71baf6c2d2f90f55 +0ad7544dc295ccb5691ce57cf65270113f051f63b28524a0c2b48f7b1aabca61 +0ebfb0ad538f162558c170e95e72f357dc1c8f4b90ba12b54ffe397fb7124c9c +099c975d37f1c9422e16db0e4d2903717508a550bc54ad27be2713d8d74e276a +7cb995e1362c2bb21640c886e36641c907c14ccafd84f307a1f74b0eeb782870 +00b0f05b0b9fa3dea1e7c74211c95467975ae8efa02f03eeecef8febdac9ad0e +7ed8b2c5407db118cd72363d965c5a09d194c3de5787a94f57d2bdb493e6cab0 +04032ea20e8b0594766e67a6517a247e059bcd547748fd6cd2b659c59a138f66 +4831babf5696b40d935cc552991af295b6de7a51e4d85419695e28dec0739bd5 +2f9d9071cd9ecba463f5c636faf106afa0a09ff87ac24497290a36d718cb70b5 +a887af491831652de111eca63da0423046089cc5381b347d70ed9bcc21fcee6d +91c023eff478100e94768b16a8c6b0c95a3d8abaa51e47117196c26064ad5a71 +d9c35922a4c7f0f6e0c7ae397232009375505686d13fabf211f72730977ebcd8 +455c96b9a44229c9ab9bd5be3e379310556f3e086b977ff533930ba669569292 +49d80493c154495f3a37c6e6d9d7f6a778bd446e78bb2d0f6b3bb9fe1e9c20e6 +96ba6e6dc41e037a4161c43b0ecdcc41a02c4646cd67f7fde4839d6e30299b81 +da0d7b63bea7141f6bda10bf9392df5656633c422868db496f26edf35d3af889 +364b923ec382e6623c6fc551ac6a1f26d5078dfc4324805a981e3d788ef6ed03 +a9c777de2eea92af61dee0cfb16531d8df5fea9d68757bb86f3ba261c245ef1c +59cda35f306894e1b6e9a4b427ef92d6bfd624fcd19e95c6740fb7cc5ce60a72 +14034095e038336c10d445083d6d2eff7cb91ef46c61d3fc2d2f5b2300039045 +a623a136b1ecc81ceab6e6952ea0eeddb721ae6a834eb5bdd591d4c2e09c0e38 +284d0d226ee59d91b836ba783dbd481b0922bff84177b80f67486e96a3a84c80 +c4ea15e50f72ae587d840828210a88350884fba15b82719853627266dc4aace0 +9409542217a10329ef0095e92a29e4464059948371ae9a3d6c58319a52052c90 +e7d4b67dfbf18e54c3371c8d01d724653d0d898132ced1a7eb20076d94da667b +213056fd6df457d3aa6f4e6c11f896f52ae12c87387d27bbcd4a524234cbb67f +3d80f3ef189bc602d14e512c6167ab9b6ecfe474488d29486a58b129666dce3b +fa545494c3b2f6a34bb2d7f1dae71979df159ef9b5204b5f0e4df265f4b2c949 +bec91311457d7dd90a4f4fa2f702f7839df02eb8ec249819cf713b8a2fd135f3 +1aa08b068d7ff1837b867dc9a73f4dfa2d4b3cca25469f81e1b75ba8574adbd1 +f1b994fc964f19fe34bc07b9be1a0f5a9fd93bbe41264b643a63b1186f1850bf +808c759f58afcc8cd45273a76329dd5af35bc3338f0d43f57c6291096500db32 +d0060cc3b53efed24564faa7a69ed3e862d5c206751db52ea6471adf7fd110a4 +acb1e7146622a4aee93dbf47a8d969ea84d0f47e098d82e6e975afdcc3eaf47a +d036ea10494c005cb7951d49d6d3467043bdad638731cbfd460a8cfc65f380e1 +19b15029b708cccfcd81d68cf1196e6577c010e7b72b270f3e4b2dc3067985f9 +5499bcc9db4bf8020d6a3b02fd042587cb48ea4c47ea693d707b77b80f21a1b0 +a76c827945cec184ec7b07d26bc7220a40541e18cfa76584ccdc1604030acd20 +41bc2dca735db7dad282c45304d38f29cdc0aefa0a051d7a020bea0759acde01 +8f2bea76e84bbd50f2653dde51904cd9ec30fb30a3cf7ce63c8117e66cb1e42e +5e0285293faef10a3c97f7570688bfa75dea27af4186b33fd6395b67398fec00 +cfa9e00f6f298bd911857ea037d09e2fb42b0a5145452ade9b2d9b8464ebb6f8 +105377b32d928c0ba51a870ceffe5f03b990402e973bbeaf85b7da6868faff34 +5b4a6f3ec40c0e6721cf2848c6ebf1b12f862eaeeac74b2677567c5e32754996 +25da48a74303a1339b8aa7e242fdcc97d6889bc1a2066e4478205607564147e8 +cc9f421202086446002d6abdb57d7163666f98233995d6ad6d69e0c75ba704f0 +9914e1d946c72ac4359706c114f9e769752a6fd1f3cccb14a7c132f7db8e373a +013295a1dc26d4caa5ee29676e7afe1acbe2bb35eac87ef8430415d98ec57012 +902d07ef61a6330dae40a656b7f8dc8372f7e575bfd7cd47f17588dfcb6c735c +746765793a4cd8fc2e8d65c699c5da82dc6ebbbd2412e8e39075169dc5a8d7ad +9005ce579a43b1ea968532718d2df5cef8d1d9d0f63ff2571ff92fe3ddadb156 +57068109ca9011738cf90f2e46474f122dc8c875eff23dd92b2bb1b59d1dfab3 +67b03fff7be275b03f09e082e771c876821e61bb22155f86342b54e723ff8bca +8c850c8ece0bd7c7874c24d43b690b3372c94c98b31141058f2c39dd3c461194 +3fc32c3b3dc18000567f09f1eca85919ea78d102c9ad59dee55ce5580e0d122e +70ac8a1459a2c23b25dd2171186750c54db098b8d6d214f3a1cb9c91f7a4545f +7cb92ecdb39820505d2d5fac724fa131437a4e94744f962c5b232e9701347cae +780d298936dd67f594bbb737af993fcc87384be16b0240a4f591aa02d87d660c +ec8e91a3180c8d0ca9f4524c27ee9241e737c1638d086bf75c62dcc31bd3695c +d2685a67fb9c2b770fd60b2b2c1570a764f4befe0695fc6fce0d3fef206a1974 +5e4264597a493f7a3ec9c66f6d4f820d0b3b5d645f7a6d94051c72266db25bae +878e637261705bc7591c6aab1f8146879e79fa7b3e64ded2f0d9a804bb09cf7c +4222afc57e02b67576c5fa6e010f64760614f9c6a8ab280e2a2ce51611cbdcb0 +f9921cb1d0fbdda2fe9b968b714adf525a9ca42312121d3005baabb5d13d223d +ef1560aa667b7c62ce76a5336c42ac1e4e46f5c00c8b8e6c3a0ebd01e735e8a7 +3eddde63ea46afe6e97bf3b8da41d1a229252ccb007bf59374f5efa4c98c2e2b +65d1b1b964611d0978f80fc588ce80fff0f97155e2ee5f785c0c16f6379e0987 +57a5ac37dab9b6b5fb2aa16abd8e727493e9695c09235846771218918448089a +243ca60f74b6a49daea14dee226b9d0e607c87236244c9400fa44f3324eabc84 +8ee39da18e0d1b41f81e28f3a66ba3f4581fbd2add9c0fb81caef44a4c51da7f +21fd932155561171784ea65cefe5d498701dfcfa4f91b088859f6444bef177ee +935171cc550745c318b2718afd7cc0b8d5fdf308f69a81136498bfc35a30f30d +67eeef4cdc88e0fc4591ff511ccd001a0bfc13f039a49b5f4e2e5729da7205f2 +7f2bf8c264bf0178ca76f1a862d39fb8015918a0cac57161a2d2f8eac88549d5 +cdf64c97975b25103f47537f196c6ded385cb11029c9177e0d245e58e8d1950d +322462b55df6498b891b3bea0ef7d7e284f66830b4a151f1f9c22b4b9e0214db +55de053b7de838af416492b03df560f582099ac29f21b2f54c5b051f71bf29de +9f34209abcfd9f16b67fb02fda21b077c3e2a9c0cfdab1b85fb3ab45a507ab8d +c15c904023b54914307539e930d4db5910cc0ec238a4bef9148b8df40ed10c90 +3e89c69a29ca3485dad7d4a8d975be9507a2305e798f845febf3c90ee5b79fe5 +c0d350d50c6462c343b32f6e768a19a3a94aa9c5a42b3d2c12cc15d42e0bb800 +e6d009e7aeb59b85ef01b64b71f6d34972e2918f487b87356952bbba365e8515 +34c5e4597f28921f87fda175d16ec0517d2e3178a4ec46a11bb68f4f34abf539 +76189824bee81d9616da50257d9dbcc8267edb91cbc23351fe5124dc724c0e12 +acb8205b697427c87aadef83574b5abce930faf83b6bf499784ba3e396059bca +482806525297e1a46d25b7b08adc7193f2392978911116a605c0302bfd67adde +9344199726f0eb987bef254f511032b98a917b2a7a938bc12a10d48a73504bbc +6412354bbeed31a54a7e0fab8924726edb2f79eb4e134c7a9631aa8230e31e3e +efc2568c6026f0d1e843e812035551eff424ac7c419dd26a2f9d5c8d7abb5a0a +732c0d3d30aadd3d73e7ec56023cafe20d98dc46aa6beded8cef1a1d5a5c12fc +85f353f7ba11efb38ccf91e31cfc26a76fa197746df672773a3c67a4f19d3fa0 +42411e36049e5b40425ccb17d66de7dea5535a9aaff06c485b46724953c9ca78 +56e703b7b0b109a0ec6d1a0f64b0d0cdefcb157e1a66202149f392be259fcfb3 +b90813408a5550d1d7efd0a7dbe2ccfeeedb655f4009ef60d80a5b203fc2d3f5 +d83885af7a465c6337e5e0ee014b2225ada2d47be3b4297b574000d94a551c13 +858c5086b54258bab7ef61fdbf4c08f78b87380dc8627684df1cb4d2e5d3f1e0 +7d1e92c898a9b7048b451cb1fdd7b9be6c3d81f9f2845a01e45214752fb41865 +9d9bd71488f5e33c3974a2383ac182f9c827c86b233e6d17024fd5a52c9152fd +00eb746ab26a55ba6c53d8b3260f4d3cb48919e629ab9f1a8071158d11ab097f +082c545a2c78588c3fa89819c223a151dcb9c19b05ea0736945781cfc506cb19 +9679c2b2e05b13e317709a23bfd5429762b3ef92f6d3d84217444dd1a99b8217 +9d2a3d36db09be26110ba8085024cf6a801cd29c6766b965c4a338a52c33326f +b449b2179974b2a0a6533cc00a7c6a2b5597b6ac8f91c456e1e8b4ee5867393e +94004f1e307c3a0ed43e0270049c61dadb0c6900c7b7181b58c4d768b3475e34 +6df0d989547117ba1bd109a3e35329ffa085bb7f1f7b5663dfde4cf70a10317e +aa5a705c3925310445303cbaaf57ad76ef3937cd871bf6e350603c4676f8fce6 +b7f796d5bb80286bbbe41f963eecfb5ab9dc41e036e131abae09789cde8582f4 +8f654f4732bb511b1a5e9e0930f546daaa31a3f7b717699862e908ea6e776d3b +85ba19f40c28c1704ed40eaad07ac840a1ebb89da3c2a0458eb63f61ac482f78 +16f7b3c2975183b8940328b9349c0ee4380bf743b605d2d888fca3fb5dcfd302 +e7175b849b545a19ae5f73bde21088c8c87f6635e180a4bcab95b3eaad44f746 +280aa849df5decfb645429b5cf0032c2b35718cb6fc1dcec7736266f2d775002 +4f4057f3593f2c693402d0dbda82b71f4b6db7658dcd2e9b8dc16b3f71598fad +be7aa895482831955e05c4278eb715c1ed3c8bd465181362e92f85cb74912c5a +8b6847d7cc36e6369432813aa3e5b5e162e0f84d5dc0d5e29ab7fe37f350b77d +f04f8cbba9c6391662107ad4a1b9eacbab6ef0f7811e38fb0e1f1ef105ee406a +a6a0d82d9cb5d8e8954090692cdaf9a225bf3000155fcf645c94af63a5969cf1 +1de3ed4c04240b7ccd44f91c9b525a0106600e0f149ed16a753f178a457b77f9 +ba4fa39344f707bb65912099b652b673fc95ba3fb9e186f67abdbafe934465dc +12240c0db033b5d9ea704eb0b90581b86e8422c5514d28e0951c547483a523e3 +9ba01fbf55a0017996806e94ef163bdf08e1b5221bb49f82b2b6b6b807939742 +c26aacfab1d28b5285be0ed573ce035ea8f93a8f90d00d24b5271e8499354ed5 +16d99335dd5705186137eb676101a21c79649df906bc3cc1407c884712d76456 +27290145da0856d54f5852cdc3b37ef6b6a9f5de2b199dae290fdd0dd3356e3c +497b8e5c841531203de45e56a8a6a3df4158d75e6530cb700f61ab9fb8dbaf97 +a64b0b9c82cb7c840d9dbf9a9d3689e566f737b09c2404eca0fcf25de22d6953 +39f771138da2f22786ce2fb216bfa431a485d655baf3eb0f0a12f4bdeea1b9f1 +a254fa3cf6f2a002fcd7c8d7b7d42b073aceca69e969a5b0467d4d294d8c6ab5 +062cebe6830405ed6f76e7cec183f659798910fb427bb85dd5331af9ae108b5b +5605842dbf1e3aad27f8785b5ac186b5d2611630adf30edc68a5325fd379b2fb +673081e3bf2aa46e0ec23880efe3202adbbd3ed65c9f814d4a17467720d5e436 +8c8e4c4e689ffeb48c44096c017275395ef09494c9829c17767f3f5e15dffbe8 +7a1845f7e5b71035754a273d448641e521a69fdf38b50a90ca69c65cdef4afa9 +772d8ae411f280936af9a0c198af115bdd0f14bba063f539a83408930bc9e118 +9daa68967cf3ecf5dd41c4218131afa3af4a46b3e40ac3088b98623d6dc31dac +5ae5be014ba43d0054e9e5a8028cef55ef765733fc42c58d91985c4a1a95c980 +d774e878ef009be9b0e4b5f48602559fddea82ad860643969158582a9c418185 +b5c00d9c573736609f09ff5ad1b68ccdb90f53eae4a43e26f003cceebba47b3b +3f7d71eb2067d559de8b7d2610c78e55bfc94f4737265feb2bce7b580b411cda +006fa988d1f9f8b5169bb699259eed3d414c3fe933ee31fbed7e0bb10113cf07 +1b6dd3b5c41b2d5d99fdb2d0fbf7dcb9f29142f37f79399f585935da05c5de55 +e24360a549a9859b0d8fbd98f25dff341962d74891f5e68130989c5903343d88 +f67aabadecbe6dc46b1897f2045b8f06999b7442cf047abcf901d5ca778adef9 +c80ffb705968cec17279f13518fd7a673dc1af8ca8482f7ac7fca67bad58e50a +c9245a992a5dbb470c0df0a2aecb46e0aaf90c80ce3aa0b67f615985ce0d704e +2d747cce829789de7a7d63e28e2ca010f08ac41460fbd7cf7c2f401acd03a3d2 +9fd94c4688e627d4d5a41fd7674b61bb4ea7d9b9735d62d4f71e145eab1dd401 +d90ebf4ddbe21e8865117fcc940ec652e771c6fda2d74b6193a128429ee5f8e3 +f86d0d2bda62648678d25146ff40cf13674ffcc1302da6146e109e6e6915c79a +1c508ca9f1a4e1b3c17f0b0aafed62de8bdbd3d2d1e068bd404adfe8788b0836 +fdec7f88568b3eec307146a2d1f170922f7e135c910da21c6a7aa446d39f76ed +f911c270502646024c02ad50e01c618c2e0580df3344ff172f6670ae8013749e +fd791d73340ea96b303db2309d37091973a15acb75185901de5cd3998ae73085 +aa102c4df0cf41da6fdda24cdf6186a236f8821c2fcff496dc7ddc63b81b5897 +a00cd42bcf23bbe7d0957c05ba84d07d0b1e5a063f79b858068126da36007da6 +9819bf168db06e1a166be928b0fc4c567a6b683558731764a524d25bcb38c1ea +034b16ba7f92180e0e5d4ba5eeef2cbea5da5b2de715baf5371d686caef66857 +8633ca380177f2cf0640837881a84e52a397ef61b2d43cd8f6fcced9c8cc778c +0697aefb8dbfeac95fd51c3e0ed814d8cf6779c144b853bf36dc3839b4fffd1a +154cb1f1a6632d3d96e52bb23412cd09518201faba4e4097d2b30290be93432d +79c0002d3dfbce81fa061affe5bca46e46768bc26ea3b8d1249107cee4669148 +c5bbf4c3e1c7d2c49b8b0ba00a4760f0e733970387eef72382c3132365f9d293 +c08573554a6e1a3a7c8c41a8a3f5f90a99fc2061af8d515048562a8dc0409c13 +3d392ccb5022723a96ed2b7840998e2f6ea3e5d76ad05adbfde0c7ac908e15c3 +20559e49311ac1bc57e553216cb7ee53865d4b2f4416d26e29cad3914d54100f +240c9d483e0a076e22d7ebee2061550b4285bc7555cda61f7b322604eafe82b1 +060310ba5cb72f3be139b05a50cf4d89be78cad3fa61b82b7e00167439a53ee0 +26eee3889d28f7c059fcc72286d576c4a578ecddba3215e09b793728d0809e16 +7cb537397a8f371c82b503a459cb2efd310d62f1a36d3578e840e0bb59790db8 +5529b79da55654025f9cfc29b3602222ebe626ba4ec6921d20b4bffc65b92b12 +18a47798daa35369903ab19f19fdddc32ae80debbb673ca308264e51fbca4e3a +df0a177d041d1b7da1d8a8f58a583523a7616388e5e250b87d3f6721bdec4703 +b6a86b01e92c218ca7e9442280b51bc6483efe51194154ce42ae2c77de5e8200 +0c43c7f0c6ba6a59de1a66b7932b56c2737ca0efb26bb6d3d5011ec57d50cc00 +4e4b2967dce0a6e668296c0458400f53ba82553ceb771a638cdd4b67f8604afa +a282d558a0012a5f69e89b9065e7bb9d112bd5ae0722f954cdf3ce6926b8b9fa +3ca5ca8af594f080db65859790cc26fb8427a7d904979c2980161f60b8890798 +b4b167623fbfb5ad1192f6457affe12c3d5014c9beb30a8c82ecb81e281e5519 +4f30834329f7edad2f63824893b0970e12707b6b0e0526532ad86bcf96695ecd +f01ad807f854a6930c0300298648b2912b524ca6b7ddff12f8b8a16c6dc7f133 +9aab36a3ad54cd4c9ce53651b081ad80f3a511b202cf247e8194f2e9bc09d3b0 +67d917f49aeb5d9985b9f7bbb376185e9f208e3062b77cc9a2545ed27f779b75 +2331814ae1de551b87950fb6540fdc00258971360f341fa848c6cf951144aba9 +d1fbbd30fc61e23fbde66a1d308879cd5b55328a03f2716a6e053efef48af9e5 +86e67d2d97850bce7595ed9f6468623152e8af46953208ecdff8bc0296a87acb +e6bed07a1073eb3a92062c8233e83810f54ad0c54a1dc924b12322fb6eadb57b +512a462521cf2221911e06dd58fe975ff1511460cf4d14d441e9a40b4cc203fe +3e69b5bde7413bccdfebf6f0062d25d1dae155121945b172324ad520ac0018f6 +3ede11a5006c288d12b5b65bbd33d398a764491b4400c8fc3fec83e974c0875e +45ef6f2985a53a10673ff0f2cf3b974d5faf5d6951bfcb191d4e57cfb7bdcf65 +f9247545acd45cdb07197ecc547976d007d31305d094a3e61d05e793d918be37 +645def9858a5f318b1a0c6b2dfe362e03ead69aec62d92dec7c4f64a1e0bdf58 +ba0777fd2d720c9dfd4da24b7eb3f2c658c5f872263d8c52584d6d1d3634ef5e +12a32fbb6f1d8785290fca81c9479b351fa8df646dfa4072fc91e5cec339de14 +e2cd5463424e7c2ffd6cec1c81621d20bfe1b7741ff1548574ac299b2e65eba1 +a2ee143cfdffa356d48527451b75eb81fecce1eb390dd10aee90987eebf0fd37 +b90c582f4030f83144dc7dca84bd87ab8bb4995828c3acb8cb81cb91f0204689 +67b5315dd933ddc61ed5995088bfd7e2cb856ef815ca5fb034b37ea45875ae68 +1e991c6854c4499ab7da19f2754a355d17a2c978816bda6a0ed61aa6af9ad04c +9397eeaf9f5700aa1a7e468a1b1027c1ce2a34d6a7854a83373a5c0e9427d9d1 +7cb1ba66844b01a9ce5b62a8f01f5f794bf8b1ca4486f1d1bdcd9b06025b9ddd +65d04046c2e30fb9748d3fe663210ae2291c63d7424ae311fefe2dd94f182c2a +e611412545b9f7a1ef0feb6b4d2a0824f51e654445cba2247f0e8d7b08118cc2 +188b80c55bd013cfd7a2b25db62ac91a1c4a51b68811b20456c9145d91fe0b04 +9e0c47600ec33341362a32de8980709e1bba02c90cfb13f5e6f5db613a456f1b +6a99330b7970acd9c2a19683ff733421003ca4fd9f629d4482463be1beca3277 +749066255f2d3a2f1409f764c7c8220c96cacd114b3a693c3b14a6a2b15e0385 +19fb3c01e4be5f4b538b400a6da152cf59d1898b2eb2ee3da7832c53fd35d468 +1ec0199e01f4d9300bc2367af6f1a2bfe40f32239239842bfb98970f5fb599d5 +1deeb28dd349ffa2560a82ea3d682be183af204e8683bcaca175414896d9bcea +f8d9e70096b38b30dc608dd368bde84887f5ea03185d7fb97f03b903128c92e4 +aeaa1c3944e465fbc1ee7018797af9fdf568f2a16446d8b9fb6cd6dab0510f1e +1c9c35b8e8fe7027321497991a3922626ffe6b452c86c7e49af00aa59718acb8 +2fd9d204f7986715a302c2735679684960263f8f7b8e805f768acc37d98f347f +4e4b14e0d955bfa053ce4a7c3245ab1253406b480f70247d7a5ba92636d13926 +f78c827099a5ebc612c5961ea844a23193229463ee792212a836585e28872856 +63377566ff48bcd51e5ecbc8cf0d61fbed98d4ca4d14928e46bfff0054eb1fa7 +3b363c755d5101f861b8e980b36e5c70a6b4f9329b4132df65e3b72b37ad128f +2fda462c1b05dba19cf2ba5e9a19a93ec4de0bf42389bf5831694bbe35a9f27f +7ab188a5b0c7741fbb3e2c0b1f8afdaccddd93e11e3fb1ecde1c8783ccc84933 +1e08b4da220dd0fa4aba50feaf5c2c7e6451da2ad81fa3834300efd733c036ab +a301e110c14e1f6a4e721f9b65259b429230fdfd24218f447107d0a26980af6c +1bcae69ef7bc9d3b637a2ea4080f01a9932e6d20290adb87596d49531a6b223b +e89caa31fc4edc8bf78c98461103ea56c2d366c13ff35002f3f90693eb36bade +e9c3e6b0047d3cd30819dbb495a29603cca9ffb00edfd960550efdb913282bd0 +99f10c8fe5f1aba938d343e4388c5d3cd0aa06aae35d1b3784f43537466ddb0c +f2c058b4eae46402ca11d3ee717125c87f469e125f14cdfd776fba2b93f5a4e9 +389441c88d003100dd2b18ae814870500bc359bdcff9f26bd341c57947be3331 +93eeb04421798c8af37e8315e4b610eee2161884facacdc79fdd0582c1dea0f0 +11efe081ba7a9b427f1385c783783afce90adc901a8d7545628fb19907b8e5e5 +037da7389842040606552c1047bd8f583b426010206cfe52b8f1ba70e4885b7c +485cd6b0eb17c59ea62f4a9feb82e0c9ceb4d395e711056b4814c4ff5a99e176 +acc3b0bac7b5caee72177e82ef621e0f6bf43f17710bb740cf8cb58c054cfcd0 +5e06a4087bfdfc9f9bbb94972a37f82d3acc52a5daa93e22172a1f2ffde28cea +ccecca8dc6083c5066b3618fc42d6fc27745c51ade1b82d332b2a6fceea44f1d +5eaa449ea80c7b899ed2423a6419134828fdb1c95a05fc633248c76759d743ac +f0acd6ef6f67edd92fd0e560919e44661216d8c961fd201c50ea512ca102635e +b652284255236d66c4ae8df6a40047e8ed165f5822e9b475a1946d152bd82575 +fb1759f381a5f5eebcd590efc472e47c63b72ad8e5a503a9eb5fa47e6edf1aa3 +bdeb134236ff8c5177f6b19f2b836c4b192c29109859277054104806c88b9600 +5e1c71de443e12f56b486c4f6962ca875c8378845cb80c5082314dc4319a25ba +cd390b3b760c981be2b472cc7bca1af1efe641820075fb5c93e680a621e05146 +cb4d13f1974f1d29b917136fc496acb3902f632dd88f8e53f1f5d3e18d220e56 +3f7cf5ca80d86836c05785d41c13f8ced0e417f985d936b91f439f2ba9490a96 +50c4dac1c4f00ebf780e3974894ca4d4981e473ab4f57e5974bc71d4e0e94c5d +d308506c751775ee7b5d2d217656153457fcad5ecc22fdad49ae3cccb48d98bd +5950cc57aaaa91a79644f7f510339823a4b602bfba9c6640b8ff07c1a41fc06b +51ea531c1bb769bdd220aeada686bb321a8fbe646fb1f22662c7352c3220e3da +5ed717a11d4656c86249585e246fb9a6e3d762b7d8dd56a4a729a6265323a3c3 +62baa93a61368d738ff19510d6bdefb483d22db1abea00b8a144a86a538c9043 +1da883051a17ab3a8cb2fa64859fbb717aa481a1c821d33e2717a746f1fbdea3 +6a53100cfeed1647a6b5c3534fa199c67c52b71606382b50d4f386525a77dc88 +87b443922d7d60bb7f0253071619d1e31912c44aa70f50875e962484b33c55ba +afba1f2ecb46524d0dd327765370cc48131eb91803ca3e902f979fc09f5e8532 +e4cb79d5604c8e65d3e7b79969c269203e3b75ba3fc2d0d8216fd0acfa76b3c4 +d62452a654340aac6f62cd9302bc8007a370aa332153e29b4df6ceb58b2d6fee +8c84a56cc66296a3599f325dbbdd268669b07a29ee29cecf1b7351be6cb050a9 +22ecce78d190c103f9179d917f7a6a2f347fdac0371a955402d9c5e98bedbd37 +4bd119ca5e4d3782d9a2aa30653407d4de122a98268ec1d55424e1aa718b6bb8 +076c1e52bd9ddef4e553688ce99ecaea7a0f89c0e2b651ac839802102931da2a +e01d7bad8125f1a466528e407302551465f8bc50693f609645047afdc5700e78 +4ae8009bf4a46e119f91820f418940fe19fdcf7cc1bd2ab5569d08be57a8284b +db63d9e2e47a293ad7c0cbcccf38db5efd651c29573ad26c39e863b71bb228c9 +6eef97c80d9e975c678a26044da564a51e5850b88630fbafb73204a5f7e34449 +929ef760d05cc55d231f090a215e1a783abc00a9115d1708e3fd1aacccd5d5be +4d225e2584fc6763f02e46ec15fdb6cdc44be16df5a0c9e87836288b822d5155 +24a1e103bc83dd7bf1ca8d9515553717896972804638445b3ca9e41a671f001c +e135d13dd7e9e195c0d1a9d396e49576a6f832a1a93c176ee4c0d1572258a828 +1d2129049016f97d52768e92e3ddf2d669915f3f1ad324b8ff23805671b0a88f +b1040c4ab8942c097e1a0a8de7bf2a97cf798ab1b0402fe729ad3b9faa69c65c +272c6b9acdf9c14c70e06d2ccc564b9de022f8cec9730546711a5715996574c1 +6f080d9992ec6c76ebe5f624853f64cc3c616d0b10fe20fdb6780c8fe47192ba +6bcb51e4a8c45b1a599ffd146f7ca52c54578be305dad1ff96efe4503433fdf0 +15e56695d9c7c64e636e6cbe2319a5d84b2d627d3982824e75d895eae30720e1 +6473b797f5b28987987577a4b46acb49f5d154c6ee402ed9114f7db3bf939377 +0635c503df05d4c7792522000bd03f24eb9d861ce394f3226b9f060c7d020ceb +f8f2c826dbe61dc2dfcde6f85d3021437384775a9abc2b2cac871c3465c67c7e +d493c02ede0463a74aaf120dd1cf140c2e7f5b119ec3556ebc5eb6994bead7aa +ab6e37a7502da756e41d25a8b2a4981d082277286e1847d5c1c493df2fed18fa +b72b35e22ef707071ac43ae4e7eafcf027eef76dd351bcf84ee0f749e8bc0bad +3920b85d7095379fc66aa854372f6dd0bba86821ddc1ae34c600f3a8f747cafb +e8c2d9a8504b514e292dcf0aba49c437ed98501a190719aff0297baf890a5b54 +fffccc385a9b1a669136dec710e826d99da70d6e6a2aaebc6fce2202abd0be21 +3d49c1b7bb44f5ce022d8c617593a26b957cbeace2e9fa3f38c2eccc6abfb6b0 +7c13e6548467a8d892d890f944bead7cc60823059213005706a0f5af1fd4fb72 +27cd79255fb2b51a07f435b836a15f15dbcc866055893047c1d7114ec371c181 +e04bbaeef4aa47a881cfaa7bb09f1d7258481bb001098737da165b47855932b4 +6953f23701a306b0893a2d0761544407759511c80e057c113b2dd260046c7e91 +447d49d08a3eb6183af91cacf1920c169b421bd7a6628edc236f7d7b73b9bd1c +0cf9bbb08d0ef4d77b5e0e83b18d92a713a8198a7b8c4de9d4c25b92a5014386 +2856bb4324a31a7a27f801efc888bf85a6cf8f7df4d19c1013df008a3602ad15 +11dad124ab5bdf74bbbf653bdf0e1286ff715dc0fda04d4e4078b1693593ea62 +319c346f1375204e421bff10a2de0d37adee62634b2fa6dc046714f14c08260f +627320e8ddd3f373041722d98af6732ff47cbe0ba9e65c0994128f4f2885d45a +6feecd025d23b7c4b558a14d7a04f18babbec2b24fe612d9b04dd2c9b8f45446 +0c33fbd02b4ab8141772c350600961765848e72069e4c0a9397e55b4beb9a1a6 +b86bf2d7648253e0d2ded5e81843f190064fd37aced6ead38f8611498faab564 +e8df671e19136a1f1b82ebb8980589e3c0fe4b97d13623ad45faf06f3169ce0a +e7e3c6160851e8b7bbac99ca699cea7858093ad4643a33d75ae8faf91f835bd7 +9906c67e04c5ccb2921ffc06a6a101f598e5095cd5027a014865d58f65b435d7 +bee1bfbd8abaad8530780e8c8fc6acc2b7265bf0159c61ad0f638c1f8405ab79 +e23c724e9dc9eb215bb603f5ec69f33a7a863d01e0c33cabfd52be253c826a75 +8d48ec0c5083ab0f5428bf26360e7221fe02ae2fb371c18902d27241b072522e +bfb16aa39bdcc9f429a27f16138ec7362e0becac0788969d24dbd13b6c885902 +30af43bb9eba76c66515354203eb790f122af9fe9464312247275f039946c061 +09477bacf10f3e97d2cacda589866dcb82bdad25ff8f3285d3980fbed3455fa9 +5b87326e1ea8b276f28801c5f4d249ca530fcc257c6944305f68e4e052972643 +bb506f964b618bea1d16b53d3f82682fcba33641d6fc5c3e962488c6e0f41e35 +e72d4ac01e830056a2e59decb441e983d99478ace0e976bcb6c4d129542b4b3e +3d125f02d0fdc7ed4ba7ebfa4a4133604afb514eda30723ef39a3ec9b156b69d +62446c242dfe108964b2347b1ac672f95dc6533d5a18a8588b3eb85c12988ecc +74a04f6734ad88b61468eaecbba86e10fc5132c461dec26a15daac9b6e3ca191 +8e47ad27abffcfaf9e0802fd405467d3a4e53569b78a3461dd04f7da964ee0b7 +16783f0e4a5d86534514280720695825665b2b897b5b1df5e105a1b3b8f4558f +155396dee935f33703c1edcec21ec872eee1947bf88a5b374dae028336f3758e +a4a2b60ec629521a023e7a8c1648373380dad586c854c2dd6c8a66b2f8d3838c +0f1fb147da2fdfe64d6ece99f07e3a06eefbc841824fe110e436ef96b35a1d22 +82fb88c35a2dee24d11109ecfa65b9e3ad6e10d37f16538c3a87cecf69d5ceec +218b089e70b2a495c56915dad7a55a9a3c7c729fcf4a45ac48fe8036500929bf +21f6ee607f03d7e2d42a9fd11cbed242d09cae0c1b893658fc2e9a0989a4f470 +45f41535db18427bbebbab0a124ccaa4b688f553052001d08945ed8738b03039 +82a8960f1d0601bc102de5035d7ab4dbd2558fd6348929fcfffa24b16cc54ab2 +1746bc146bbb4a126fdf15448ef86191ef644fe9a48ce7a6648ce6e726a81817 +097e9143da8b6e2a53da13a68a496750cb3bc103275e81bb758af55c3dee6737 +3d45cfcc8f8ea0126e1e84a4d84d3fb4ba4481c3fdaad535c797e059bf02d9ed +66724a7dc43fdba2647c5d453b7ceacd918334c716aa52cb6829cfef0a094a8f +8d767a9227b54640684c4a1fc3a43fe07b01fc73f9f77583760456507c5bc6a0 +0225feb554acb116bf399e804c206761345e212195848f7d574f336f891380d2 +d41d8cd8e328447860e92ae464e47a58f51c8ea2d8bdaa238d91b64fc88f3946 +703df70ca47c3ef54ce613eed28d9f303113f0a0878708eb264892dfd863d1c3 +08a76911a1e58d455aaaa0360b2b2cfee503d6d40ef17935d354ec4128a71417 +08bfd9b83964375d2b206144f38ea9a5e2965ca00425630ab795c9196b3b758e +066e102cdb294e5eba2df26dd8968b7406d76540157c86cfdbc3dbce4c20d068 +625656df09de81b47d05a764145bdd6aee1623139b5c3c22bc4af0a61b50c1ce +38320353b8dac12d5dcbf91a1b36a38f083652465424c556fe3791ab090b2ebd +20ea71321c433eb6221f9f7baac2d61cb06446315d517e3eee827b6f73469306 +1da8788d59a43aec654d688970b044151453076ec26d940f2545a3ceded9e2ef +084b469a565a8db2db7db3f367df813a0fe251a313ecf9a20363b7bcdea13a6b +60adeb042c157c4d80c39f7301813207153cb31154630b05a9602ad8bc2e0741 +e88149bef1cf7f539db9266c2329f1469f128823e45fbc33f2ad7210d3a7203b +542b2f4401a7f5aaa3781aef83889f7f48f9dfb3eefe6c8b51ab1f37ff916735 +4c58617ea1249b1c7f7d312d1635134381e78ea58bbe60363f260f71ea00d868 +c47329c7d747c80316273bb726e6ee87bae8fa3cf0ad22dcfd6d9af692459d07 +33f0fdf01081fcacd1a1d78204b1086c50d9d8798e7b216c6835c0bd8114db54 +a216c554f5429a2d9b78b6d215e318f471f5fe57c845919be8e05518167df4af +6cc92eb7a9ea78d759f3fcf3675c31c71f7a1bf9f47483eb211d940bc1b2a2d2 +b662580d2161840218833e521143aa2bf181c842fa37f98be1bc5b9137068e3b +173a85542a577f34d1731310d94a58e0ecbb7538c84ba021c18aa780d651c7f0 +036da43312463ef1dff92d7c894a5362e07ff5b3111d1f166ba4cd91f3b142b7 +39cf67812ec7a1101581c280442e72e0d2fffc9d0192e45e24938f8941024d9d +f41c60ea16b21f696611aab3a62552037fbe95012ac4a459a6c19c2c23cd3222 +04cfa7237e4f3122190b8b8dec28ff94a3d00955c77d1c1d4cc51537db0afc27 +098613fb6ecf597581eaf7d9e9d7a5c65979c89a6b58f687b514b52a707e2304 +75a2485b07644baa16e610b7fd06a67d6b9e884425439ab217e89e3e2e393eb7 +bd988dca987a913a0264e481bc2e8961668a3bb29f51c42cdef4b74c99b561dd +a3d3ac697f33ada49392469e66a14204de4464b23ddef2e6b4cdc212dc43bcab +637021c3dce8526150cb60ba3eba354a4a9fea778d4623cb407b67a1f95f5236 +ecc619c9d1dad94414049c3ad951d244ea9b29e6d3b099e756dc26495653757d +7336c1e3443fdf8a25c3b821ac378b0d2659bc49da81e9fe129142fe7a20782a +89e1a2dc4491c787b59afc4fcce6683038bea98fb0a7e1db598c5eb775c20085 +94fbfef25f116b423f810f60b8d4c6f494aba8d8b7c90ea150346cc88818e9fa +0f74c58e39cef7493b87318a2e6edbc8cf34ab3a0e83db5f43f40d7cc7af0d26 +9feeb4fd5faf78b95d767460d8efb78188f512090eaec0771ec9e65f88d57b4d +706da21f6d8d90809459a27f510625ae05c302a2f286fcd052b1b1816e368f30 +1ab9a612073725423d6626148e72b4b69d00088bdd12340889a7efddbc8620d5 +5589729fb1e1643a57acdee33090e0dc320bdc66939d0ee001532cc4f0e5bf15 +b935bfbd37db1723740fe6f076e5bbf53ebbc1052888396723dfe8e2543dea40 +53dce74fdd2e3aff6c5738ed520c01530e3c239693eccd248675002765aaa721 +00c4a55f63c44d2e8916cf786988cb22b7cc5630ef25cd571c8d094acd0f5d97 +4f7d9562c25467a64f0403269de64a906aa4dd0a0f0091a7f0d0e683872b4885 +7bfdb3aa0787da35b2ec4cd4887da0c2ed737c8028bf763cb735faffec2ecab6 +50d96c43c78ee35c96954ecb5e72be8d0142f6810c928a3c57e7590458f5b16e +8b67051186fc1bb6d3a879f9696621d0352af7abfa6278b1d2c70b6c5f042d3d +a80f68d30b4ed14f6f24461cf9ef99799d651e8af9c9bb218f343449e555ca74 +aa437628638cb98163f14fc91b2029b24aa19303fde63e9c33a509c1a9a7b62a +af283b8c1fe2e2a43dcd6992664eb1f1272aba683c9f75aece89bebf5a6a8ba2 +d3db1e77cd4bb36faa5f8b368e089f7d98d4b076bb8688f353ad35d42e99436c +74a2d23794c84fa5c0fe24b2ac6d9ba6836edc6862d454076134f04d47226ae6 +90fe4aabd2952cec384983efc97cdcd430768b8f8e31992f8bc332a40af48222 +c8a6c5ca8fb8661dbf24e21b5a9fdd2bcb38ab008a9af4105e679c47ca0d9ab8 +5d6628d684f9038cfacd56ffff298c81b31348b1615377c36052cf2d6db3f377 +e5475fa306f96418265f79674ff58bd5b4690bed88805f6ac4bec0dd488613d0 +eb6a5bf60f77d656d6205509c2611f69bec685d147b5e5538d4d03fda578d3de +0f77aa190ff3ab7ec9d563cfd66173fce4850f2a349c6073fd0cd9123755dfe4 +c3102ee4267e930ca38cc9a266e22aa8637d74bb08af30beb38f324fa9a43bc9 +df232b152bcf40d35f5cc78ba3a4199a13de9225979f9935e98b269f67a92cb5 +eeba0bc4b12d6cecbb4854f89eb3822477e72690682267f85aa2afd34f13dccc +e4fe49fac453c21f32723fcc5ac066553ceb0d6eccc03794a0985e3ac31c5702 +1fe3d42c34d70c8f6192be9f4771061c6fde1d55a086e18184a1f8af5c0fd87c +3130e1de4fa47a4bb3976388e0ad80d5d2e95ebf1de12a2a3484322aaed6df20 +10d44e89c9be89253117ce4af117c8b2b2cf3bb228f964e2b23e84c51044da5a +c6ee231a1bafe97969c02b0025d777ac496c0afef31b6d3e5c42bff099b32e86 +7fbd9853cdbde7cb5e11eafc0597b1cab3a895a39a05fc9c5b5981a0122bc144 +99f12bc99f420c60d28263fc8d546f75acd2d7c8cd485e42658dab9f06930fb8 +6494cdb062c4a1bc3e74760f9fd389c69c9cd0dcba246c0c58ab37688671edbd +261bb9755e4299510e74b033ea9d2c4484dd200a49681e0fe12875cb9e0f654f +e6c4f35ce3bdf932519de9c9056b196fa84d1aa9860824b177e89a9010b04ea0 +47a4ff75b8b3f006c2651d78d50cb28eb7086bc5ee042774873e595dcefdedb4 +a27cebdf5ea140d5a01e70713d8f483ec273482721f8ee7357a2b21aeb88b675 +5a32fc52360d43ba7764ca33a5692945ddcb11b7f4e6b2092e439fdef23d7b15 +aabf894a815ca072db22e11b6b296980c73efc1ff097e7a33a873b340e1e8cfe +22592e2d1463064769e39ae6d68f5f23d6327c91aab1fde108b7f4a3e381b51d +22ea615c9f50f226d81a21ce7655083124a20de4df222fb2335884637e616692 +fa928cdadefddf0aeb7027e05d97be567352fb973a357e6054bc06454a88c917 +776595c53a1a39c135c9078b917b4824b7c4627ffbd54aefc2102c5d27db5b30 +0435c719db432496667c9aa78a0ad6b05a95f31557cc9977799b73c4a4f486e9 +57dd36f69b16e1f54b77755753c486ec5423497412b2f65a09865a4bb356430b +d1e78f0babf79268778d6cf15aa5d366487bf62287ff001003a4ca8efb704d87 +46af7ed7dada9334b223d9d70e3eb6290979bc85f78e8617411e9503716b6a7b +08d65b4ff1c2336f80ba3780a5578e129e6805379a340489aba9fdff0c4a6e13 +8ad482e9fabf469deaddcb124ad27ba2a41df82fc811c03a1f23bc11df9df1b7 +15509b01e5ee29fcf75399ecacf7ec7036b6178d64dec1b5c930512a116a692b +05b0ab9e186a891133458510c8dddf7912bbbaf930637f0467247c0229808fa0 +13c644c4dbacee307d30d6719879ffa546756aaaa3b29d1125382ecb46474b1a +cbf62c4d4c652c932ef0ece58c8fbdd616efe3c138bbc768871e62ceceb40e11 +301c86e6b4295861d2e93071d7d7955fa68110befdb4cd626d68cd1bcc2d7b9f +5dc2a2e28431c6d64e1522bd945269bd9f839f98825e8affe6671b7388399d7a +b4b9d8bff7d67683bc8479715d9ac68422324f3ee2313daab0b8fd78825d3d97 +6495d86d2995256fd14b84d9e4f003892adc6a99a16739a6fc555621933d4214 +3ec6d85de8af1626d4c4f324181df7812bff18f2146c493c9bdc6f48d0927be2 +f6b5c4a9424fff38f6dcd4d1f60b5f0feba7dbebf6b901d40e1907e0fe79ccdf +1c458f8adfb5c24e6219e920287a37b0d96f812666ed48e0f287868ed38319be +b9adce74312e75a20002ea7e9a90ccdab10701f2b3dd2cbbf71a9b032cb2bb94 +c717f24a62c365d78e683c3613ee02e7303c64b63f5fe5b35cd9ff0049bce0b8 +fd7b01d012f67f58e12e076369da78c2b63f34b25598b3a114e59768ddbbb3a2 +32fb14a5a33e69c9743dcdb7758fe961d22b1949acc22584253a4b8c3f19e99d +ba97ba9d8a277042f04755cfd8d92c08f2ab7675c2da2b59cd1f8fcbcd5a69ce +b9b515b6171b47940809366f5d58591a56063db03fc39f678a03cb2b455f9428 +d128466ffc4c05b162bb51ba979b747b90c98f9704ebb2832ee773c3ac195e46 +baf45c152415f62e545f316c9048cae5e19d8b6da792633fd82b55e49262f892 +dad984f66d522bb2f71a9a1a5454ed10f090ac48d220a3ae9cf429959a3cab05 +b54ea07a9da21367d1e83e979163f6dac8d05e6a748b95328b25d4fbc9546520 +82165279ff017d9ab50e7aba8aa5b6e7c40dce4c88d69dcaa7cecf50ab313606 +83c58937d81962c11ef39d84386438a80ec20b6f40eda53486f56c9c9a451d35 +b1eca3f6ac95aacc306520efdee1b71902d7d2d2d16f6e999570d2415d63cd82 +52f2754cce304036e7ce4fe00cd5689e0001a6cb0deb08989427c41b7ea13b06 +382ccc97cb3b301af8f77c21953f2e9d3bc627cd7f3e56b661368e825f375f45 +25210853c824cb8a26f3cad66c473d4f8a38b2975f0c167b2f7f56f938f69c82 +11cc05625f4645043575deab804056c7a517475eabf6719193d7f4d9000a6f47 +99806ff619938f6910df77d8861169fb71c676466f21fc697b37613d513c5665 +b3c16e152733eca6f7052b51376fa3be6f6a97aaaafff75f2609cfd651a9a594 +6ee23c818d67787c3e7c8ef85853b5a993dbd85c30a55e7778cb872c4ecbe5da +862937f5972ad3bbd69475cc04dc7c9eedc5bf48dd225ebb513fbf697b4d1b5f +4bc8a6bbd9f01b7c20fb59adc81352ff087ff7dbc52efb3cc55f188edebf47d8 +ba4a2aee3d05fb1ee2977a42f6fddc33c9e39f1fcb442226ccea1e6ca561b617 +c47454f6454564cf2c6e624cec87e29f75666a814712dcaaad1d723702b1dec1 +ffaa91cb56f697e8c9b9134405a1f9f8d6b430617fd05ce436318ed362becbda +94f50caa126f720468e8e0d3b6058451c9924c80a6b3169e4923d974c511ea79 +28a93e8d422c208429df5443c3f3f536c44cc93677a99759b55c03a62711e468 +bb3b87601a2cb367d2c70ce98552d7ceae1190be52de6afa7d6fca55d1a98e63 +3e6aba35d3e71b8ba7185968d56d53b60bd58159dc138b45a662aa748047eb9e +10267868aef4a7cf60ac5da26c132d7faa38346273b4f87279f02df87c52116c +5413fc25a705ac68cc05dd7add5b553d923b2ec3210637c804cb13e2e6e3c464 +b74e33932733bdf0738930c2b37fcb582baf5ea99b999ee4edac8127e980eea3 +17f1914e5c8e1243dd6ce054aee9cc603902291eabfc188108da0737beb66891 +30f11d0627b5ba00615f00d7c5f8ae8ede781b4de4a2023b9557fa5c4044558e +8b97c2be125d2d4d404c3383fd8072b25d46a482aaaccf55730a56742fb157e5 +3c096a9f245bcb0ff1ed90278d2752d11a822bf1813f896155519b0b237eb20e +b02aa2d6a8158f5f6d4e1e669ec566ea4079b87096f2bbc19bcf196d51eaff7b +d3f3bb38d56bf26d8de02f0b6d1facf7dfed129db8fe4f67f5fbb5257b3d8d8d +30808259fd38cf81b921cbba2755620032aead75bcaebcd3521f3683981e9b48 +429ae4628927a9a5c16230a8fd6f0e5f652396aa94de3ec9b2b67eac09a0a6cc +983a56dc55c6977d039725e9918d00e98bd598593ca1d0847b4391273bf5cb50 +4562c14eee738de09fbddbd313289cd51f11ad81951be73a6c49a7fd2c10fe3e +a1f49c8f8c043f5b0a9f8c5cb7132952a0576b98a5637dd3d946d5ce8aef90e6 +800c2bb19d5907ebde7f54a749a3410f464919ca1636513d27d4e34d479c9bb2 +2cf261b770e40d61165f56df0f6865ec5249e2113b95d91aaf3f5ec5db468055 +fffe2b35f54fc10993124ebf3e88349f4f2489c43f2c80557ce3ba79fb198e3f +eef1f2d9d4f7cbaec3e50738aa2f25f75bcbe7ae80885129cf26dd61fcd2d684 +e041111696696d07e5fb4b6a439f43c33601426ac65700515f29344299f18fca +8a26a0852b5240947925b864d91db59995cbf1158ad0189e108452c5e96bb477 +954fc6d2f8581e4af6d1ac4935b84696b977349404cc339611324fd76c737c25 +ee1bf839d511d2b0de3b07a837d1175316a7f94ef0528d3f8dc94cca211620db +6f4da6f46fe3eacd86f19b981cdab577dc969cc9cd695c3cb9be7539d7604133 +a30e227f2ec8c79561d8f5e1311225dc8476459106dcb32b1769324b9de23afc +a331f1cf43f0add8ae45d1e27ff743e691becfb5a47ddf0afbf335d9d8c5963b +2e5dce6430ff0854db8fa0cb34c8eb4daf12ca8e51da8de9a14a02711ec96c92 +fc206a8e0afd37e8458953c6a8e35d9820cd233c5b8a4e4f63e10023a37be64b +a41a28f7e42bdaf72848ad408e8c6d2555275019d3a6391f24f54335b202c350 +319ab99f5daa2548652043db0a2e53198ebc29b80aae4b0b88e1ebbdf4cdab7c +ac8d9e90423c04d5e0f8a181b2d4ede788b86d236d2f8875d002c00ed667b1f9 +0ebd5b7a3cbce0720ebfb86c41832c91e947549aec4fe3e9bcffcde2d83f63a3 +378952e80a8b59a6defd4f38d9269c0cf89833c886ad0945f715839a1633d27f +b8157616e0b5b009a95ec2a85a740ca336305de3fbef75382c09fc9030cd9795 +f7717f073832af434ed4623dc485c325694e53a1eb443739276518c78ad32248 +11447e20b4e7ca4c7d4ef7b49ed412582414b35f4d457df735f6ce053067a2cb +356e79b2aa8bc3449492dca3e3767d52abe4493c93fa378740de2ec43ea077e2 +fc4cdf6dfbc54cd15227026648c03a6be8a1bc57e8b1f4286ca57f25fbef6d11 +38c2ac73630e567a5a70ba8dec51d0df8d39df8fc67f25b1f35dd02f4b6e150e +c0e00e27175e649b149980011aa8baad5691a9afacf951996968df7a3dd3d0f7 +e1717cdc0a92bf120df74c1c5c15188415e650cd967bbcf433ec66ae8cfb00cf +304685258605cd9da92209731642c74b7830895aa5a5e949680b55cdef503c18 +41ae8d981e75a54402220564a078d5ffcae1a74650b0a98667e073a3610927b4 +67f75a12b2c2b1cb3f667d22f93253005f739b82e08508c4b7d9f25ea4eeea8b +c569c33fffa67e7aa4998d74fdf8701847e17ac3a0b55bb1672d5196e98146cf +289a6c36994466d9800971f5797735a9ad4355404f255bfe479309226cefe2d5 +4ea7ee648c9d55fbbd37b8ecdf6368ca095e3b8d23439fd0de17b23029ccc470 +5d700bf1233e052b1504ab4ddbfd13a8bba907b9fffe16d1bae172e90e4dd680 +da9409a087ae100441a578b4354b74a8dc4be3acb8757534206ab8f0da8152c4 +3f119e27900f4648319011d21d0ce403317ddd16c73b7c7df0d2c3bca31ccd8e +ba61babda725bb53aa37475a778988c3e84029081852f0f2be114a98f46385f6 +e9f52a4e61f8a1d0f7360036187f8fe457c7d8f6834cacf006ac136a31c0c0aa +5e3d459986161589455cf0b7e112212fa173fbf20f65bf1f4588338e2b05620c +2ee04e2fb0c8aa150e523fbd82d065248289057a3ffe946d751105aeea3cee39 +fe804ade979ba0e485efd3e3b965b8d9bb283bbefa6be9acd0f779a23e605fb1 +cd2a8466cb8279dad96eae14ef42b075ea97d520df7b0afecffe0bb7f1728417 +9bcd070fded5d3b8a1f44d1b11af7c7c6a7f63f06fd84018f46158c2e07b9ce4 +82004e7a7b50d39c92b1cee4344b662c075e22816fb20399580212a66d122d9c +bfb1a9b8cf4af746bffb1cdd3fcb885602d2e36d31966131a6cf9fcf97d5449f +9cce800c65bf76f69e573e3c88d7cd99c0ff058b3d6e15f220ec784e8c0bdfdb +6b97b650c06a253aa0716be82054881cb85632e2ba8f8e206819ae30bc721009 +56e4905b054e12740109b887afa013157ae9bd4e23a1a9d0eefe4092ee921050 +2d34e1c97c3de2aa059c6a2d22ca918e20e263d35bfa39b96e9cb098f556ecd1 +11984f44a9187f6e645c7b0105b52905c82efb94565fc95e4ec55ebe03557e16 +1ac207c0dca85dc12d10a043aca99b5c9aaf583d2aa8fd41f41f9b31696963fe +a2d2517008b95d931b2a5df400ac1015035c09bc79ccf0c6365884c08287dc87 +198fe38e4de28af59069a6d6df1543487694e5c7075c7bcab9534394e6d44160 +541edb4b74f309134cc57851f44923294804f642eb85f93b25271e681b400f1c +7a00d22ac3ec77adab6b50aa90951d2ba7f6416386e69ffcbdae0bb85416de0b +382be757fa40774ff39680eedb1b520833bfbcc779896eae4e2e5bf892451e03 +cf7187f109d9a7508d791ea946555b9bc14b235908642a522ebdb1da88301646 +1b47347427d8c4a8fda115503a96e5350983bd0e454f831d2395528e16542049 +5f3491ff9569af2f43ab0459b30be6ea7849400527841350ded83f9d1240c7cc +3559ae081d4927a809fc10cc833617dcdff12222a06f8fcf3e280a0769a6405d +7797f3a58d73c3ab36bb88215437846dc662b64120f977fa544b72ea8d321030 +ff9358cee4f94e0b4813c4424b7fd7e5931dbe4fb447623d5a0416f01b013b52 +8664c750ee7d618f862ed441ab6bb3df65fb98f855a4ddb9bb95e1a0dba626b2 +1d79ed2edfa92c3995312ed11a8cf4aad36cc1e3a8f4bb42d2aa0f29205e3485 +73216ba3a01c98b22dd99872cd38185c41e9433d4e71d8d092302c7c2f11e742 +2697c2453e57e8373bf02c4761e948c720858356ec239a22f28f58474de6e462 +b6f2429998c10759d7a63385e50565b0c2316ffe6e4b51c29c0b010980f1afeb +6a435c38ee831717289e529b29802cecf3bd72107ad3ec42a39932a619d955ea +13938be2ecc799bcc779775c67982bc19e52cc3a5ee16c07c8843f3b0df6f7ae +fc4730f915a2ba9822bcb1916c5402fa30eec3512a21d079b23032351ffb70ac +5332608e2dde3668d992ea5572ab94f28a5da401c6230dc13c69b8257f47e322 +5bf97ec2da86ff87669e31c06d97ad3575c3336a449c0f15e474ccd90c709da7 +e321fdebd3bdaf82765582fc1e37f150d86a01c9c2b54ef4dd82975a528b5761 +51feeb2726169f2a5e2826a3548246bfa3972cc4f862ebd7d106b0c847656d49 +ff92f58d3fb194ebe093ee9315b1117fc03b75f270fae86c5818e77bf1db7978 +f7d171d7416a02bb4b42f643d8c85b2cbd208c80381d77a3646a1aaf60afa035 +21173ddc88e389dea03a7ae0fa2175103eda21214df14d4a73d4faf6f92c35d7 +6aed957c964c83361e50f1047a34468e95a810d961ff08036e5c1727fa233879 +f111b475c585d2b5f72f35eeae5ccc006ced57e916d0c849091bd27baef60e09 +af481e2d6b741da62f760c7324607ba467279ed2cc26a24846c9604d42092f8e +1123036bcf240cdcfb398a9dfdf4b17e4b0af4d02cfa89c728d2095aa4407026 +4bf4b1814d5bf55ac3f0a36d2acd116631ace9241267da7101f07ddb8504ffd4 +cc29e0e2c3f34ba58c036c63b774fafefea9368d0fd83e050187484d8ceda8ef +5221e913f5349a2aba2aa2ae3fc76d35b87b0212b7030d50dccc1d59ff529965 +e6dadf2527a69744447b12927ca0a3161e819398a7bfa5f08bf3ed20c0b6d014 +ec24d9a807416ea69bdf6103e8c003aad17c35784b1b2b2f82272c10a01382cf +32581354946c249046daf4acb0a2296e3b446c44e0d7cb8529a54cdb90fe93e8 +271ea297da421ab506d26597c863598fd7b897d26b7514d7904ee828137400a9 +0031da6252125a1199f740e3c90c45359d27c695c6849e537e4173dccbc9e1e4 +e92895fea3a705929e77f06c3384ecd6d30ffe2057a0f5b654d2bdc680e0427c +f1ae6b8a1e3ae6a8746d867ac44807b86dc72889f415eb543bbe6018bf2c6dde +86d44a984bf04e3822a7e604f58b006a1718eea01e36858d395deaa7925e2e44 +7a9e9fcfb71a5c23f8c763b8e6505fe8c17f8dc5af52b19ebeead87e078082d0 +6c136af58a090cf460cfd495f6d46e1572a75fa0f7f5f7191e6b974f1edb6023 +354432c6a726ef3697f5df89bd938ec4902f6854e0aaaf5a7e030a1c1f8a9a96 +36d3492ad5f22e98f29ce0cfe575ce63a3f7a04b599580d33ad8b5251a396fa4 +db956d6f8d75e426cc1448cacdd556af8d1e1a490e5abdf326dcacdbc3c47755 +172ee74f2c13defd1ab4fb05bce2a2750f3c4d0952f8451fb5c736268bd36ff6 +d17c2beda41c5e4d75813937ba1562d7c3092855711b60a476ced4bea19daa1b +7f633879eeec4f76bea7d75a6a233681400b8912690fcee8417c4de875930a4b +617e5b9b772aa2cca910e0f7d71c68fa781ae5f6c87717d7ca0f51bcb8f06c67 +bef93e4811c3f7133825033ace72adb52d34c3e1447ee6c589a813f4c1fd0d4b +288e69bace0c84bfa9150c95b2f75d797e2ca716b1b08e6a989838fc6a56d194 +3aa0256dfa305f9d3c4d77f98ddebd4a37bbbbf229ef2b2e215128522296743d +01f3cecada7ed1deedf23eebc6a9f95668b08a45e2d34e033e96a3d40a06025f +1ebfe0aecbd30ff546cc33081cde3abc7bc8320ba6cf824c189d31a5911b58be +7ee39c538e97395d94b36396eba5f140911d1156f0ac03945cb920f299564261 +7a41df7255c7d308e663b53c8df7ee8da507079f20c599274142e59721ea21d6 +d1e1bce3634ccf7d4cdf1253338818a413904af68d0d118e24f691bb3aea912d +f561dd555e9726ed474a1f5cb1dbcaceb70496264f485d77372771d9504c2e77 +3bc7809e5e37b5f67db4d3a5f9dfc69e2c96aa6eaf68c5b03a596dab012d079f +c365c722abaa90b1a2dd9cf4038cb0b497159d84a4fbea01cb4927dd4a5778bf +0b7edce16e4ba271bd363a15540898ce5e659aee52545fe890a55a6e71a25984 +23042ae487a09a15e2ec0ae325959f5a302a30ceb1f998dfd82c4b7426ba0c6b +a59a2b64cfffdced679d468fe7e1e38013af804c6b17db6a70f0ec611801d30e +80b657e3d565bfd82b87fc9dec95c4915bb969a449f8b7371196667fc69dca00 +d5b93229f11a527bf2528a0554b95ec5dc21fd451380332b17385543cd3c7a83 +5feddc06542c849b33217e91abd13e8ebc208b35fbaef85bfbfe5cd88fbad54c +a85a28b5fd50e7fa846a74e37f29b820ed74f4fe2dfcd08b506bb54f4b64dae8 +82fa56e84ec7e396f97806f0617814b2da473e6475be1d93cefa5216ebb473bf +20288fd650524b6ce3c45522c412664ceb382bc78b0d72c65e964d7e0a168606 +5b06bb0eba9746e7f3ba26a6c125c80eda3f27aa88bf753587f6a76c794c3739 +5c6c6337984a961e21770ae4fb3c3d60cdd6c44749f66fa913cc0afba0bcfee6 +44fa2f9505fb9eeb49a19791cb187ca1382baec6fd2ab51db31da77e95e0c726 +098c2489bdbb5d728fd74327edf0303f0a2185bf5871b636ab9322cdfe7e73d5 +c0eab7e1d5cab91a06e028929ccfe0dc8f3f8c5b324ac3ff628c12d7cfc117e9 +cdadd96afe76973232d3d4b35015cdf8f30d77a41b6a561ff5478c2e1e0e1e6b +cae34367610dc3eb123c6140d31ad2ec7799189906f7dd7b7e4905dc5afcf2eb +0b036dfcd54233607db0240ed765315133c90befe834949c470a7e132897c7e8 +03325e9459c1ae99fc443f7b8b3a3cb01b2a2b17a42b8121c5cd8c83b375fd75 +97e01fbad0e04bf7f855562ed81464646ca5a6b29d4d058dbd165be5f785c155 +704d2fa42e01e568826c73dcd922f0ea3e3f5c26fd2e406bdb84b5ef23bcc8dc +bf83bf172395f3c95009fe319fb028630a7d0905b47fa2f7c8794fd32a6443cb +1c953063092f0b338818868df48e49aa6e134b6022248a20920456c693dcabc2 +b33a0aeca0c98654c6ce705fbd367dbb7486f6e49a878402025d3466944b0899 +a407b187e8bb9d07a2fc0800394007cbca0de39896b14c67dd99501c3407f9df +4ed03b7ec42df27459b802a2d2c4efd22b7d3bbad6de74cf0fdc1a2155eda0e1 +a78893790d028f88634b1ada5beccd99c48cf02174ba417baa29361f74fb4be4 +489763c2caf67a698913d5e7e8a22902899c590d8c47490a893d6245e27ef31b +ef184829c8cb5c7cf358c6bb2ebacf26cc6904fc9d6c4678340a42e081609323 +cab865910ed8ade413af57a20af437d6cde5581b3d15d78bcf52ae5586ae1d3f +47e49fb45d2940fd9e7a905cb76e42b51ce1e69d7b990ea3807e56d1c4bc8cd5 +6d8f052e2b4e842617c8341c666d10e573f950d009d15610e3b4a297783c26fe +502bb6f07a4f9c10c4bd7d6a17336feb8f0274c0672240925e64b76830ef88ed +4e3f7578572f4b54fae02b769e63357c6797453f9acad2636ecedbd309aeae25 +b6dc30e17f48612e805bf459c1163b93c8c797160dd719f351153bccfde4d033 +8d53024b5340e46556051eae86e17f94f80283692ab6ecf7a21e485133736e9b +40a69e4b7f733b8e60cdbe2e7a5b1fbeef864f1ad7dc821ac9210414fbd6c485 +c1a25668b3a665e9bc4eca605bb028355a9edd8533f9af7db56595f93fdf476e +f00a189a58037af7e6ce33a409698a586e901f2e2fa03d53f02d20d4a52bca89 +e26b8d1382d9e04fcce9bf4b43072c00aae4f029c1b6be2a842885a2ae94160f +2f8f55f4f5922146fcd74d16b4f59fd5b6d294af58fd472345d751d4124ad70a +e51ef88f3ac585d5a776f026977dc229c81e68b360f8cef21dcbec48844f90ec +3d60e991e18031eb99096770d84f35af0b5aa98e3d25f8ec62bc1574a602fdf6 +5d203e1faa69479af10ad34a9aacba6d9ced6b03f3a9d934ce30554c335f60a6 +997e1901d513430719c2c96643cfbf5cd32e80eba160122cab14f36c7cc0e4dc +2d8fa3fbd052969fa8259eabde5bd22738943c006a9e1218ed697896fb545488 +65109c0b4e4e843d8b0e27b429a78d1277ac999af71ef7c31952e45b0f747b2d +793734e5e7974cec5ea1753af5a9471b67edf56bfd97748c28ace6392238d0e1 5d448cfcb36c8f6b1c56cc5befbaf65e834c80613744bf76af759eb735b9336e -30c3be34ae193e65aef359402a0e0a3e5bc74cddcb9f156fc18226de0aba0251 -1aef558645f6c9de23619ed3bc55fa93238360e2ac3aae0f22937fdf0a07c576 -4f58eb15c3ff3da11f074bb7dda41a4faf9fbf03b3ab5ac96b88b880be5b6d2f -2b381f25a8fb3e6f4be79cd7777f0aee1bf4f89787d8622375c7686e962971d2 -e1e53a01f56bd6daacbe53e3ca18fe1fb6c0722184c84165611639e71eeb44e9 -f1e653cde750a5a6fcaee3543e97f2de221d3a66f51024fc7831afb3de635ead -2d80fdcc1105546c6abd4a1bf6ff9bbf7b6735a57c47026ac54ba576477ccdac -c547aecb53ca27ca12a95eeb4790d33c987ec205f55a8640e297e0cbaa63cddd -fa8834d2c05860738f929479b1cb95515bfde4c28a45c3ece9486341bb786ff3 -32e52ea5a1c2aa1f18fe72dcb8ff0c4bf11a7cb1cfd98b096122774b19c64dea +ed1a896d53c1f83c97cf26993d4342bfa7c692aaadeaa0b181c6edbcb0dc9d7c +bf9b42429c88f6586e952480cb73dfc7c63524b110d59bbc4a77d789063dc260 +4e3cc5f1c2097d8c6800482c8d39147a403a9a5080b0b9d777e1f00c815685b6 +b0d314667701e86f4c84b8eae07fa37871870b27a9121758785ffa1531af4939 +0a01426f2d75f1386ade1d9d32f7a16f56905970c136fd7ca974a8aa5598c937 +c46bf1f9866e899e1728e8cd6a19adb5ddc76de33696ccf288cc2a68988c19b2 +f932a6f921ea2c1e7d920be5667f963c1dda94b976f1dc0ccaaad5af56750330 +83e21a4166e71ac1eca43d29f4aa850416dc8462dfa808c7ce1e3affd5a46cbc +271171197888fe90a37ef2fc0f579faf60e1d1075710780be8dbebdc2977c4ee +53bef52f912acf44b45bd8d0ade66755f325cd7ac00e72795ec9dfbab4c1b896 +8d1e30bfdb34a2491dea6621d3be49bc6e255a15a7aa7a0657ed4db707c047ce +3e784a3eb07caab85420934308adcbcba09a09a7d03faa5c79aa5726866bceee +908f32cf4db4d6f57cb4648627b7e0fdd2fb570ee190febb1e55c5dc951ec361 +e7213208762ad15b3d801bb0027c01fcbcb0ae0cd083d2b364f44cbb64b7bc0e +6bf2e63258dea34f07f25ae21b6109a755606909c434d856cf18fcf482660e1f +fbcd48cff010e1755fe69a21337550dd5b58664b63f67a826a3965cbb802d999 +09b6166c4643184817811d12c0d5993df05786da29993f9b6a7050a14bceb186 +562000f6699d4068280439df1e9779fbc278ea84b4c0d5c68d64df3e39d39b88 +d9ce2462e1084615471bd6c5bf6b0e1b384e35780f8b3276695796bc9f1b41c4 +0213d5d7b9b82dc36ef3e19420bec516afd1b27d7ad03e243530c198a111bbca +3cfab790d298d6b94926800691e569714f94bfad6819bf79df245d7a88f31b89 +a264b30a431cce5b1a1669223b7ab0f3aebdc5285f251e4f48aba3726f5978b9 +81fda39873c6ebb85ff1a277c9acf4b0651b1911d0fd5e7a960a28da58d88e24 +061b01691efc83a8ac9a6d474953f12e467ea3f8f61296ca8fd7447741c18727 +ec4552c85106e0284254b8b8e62ca7a8c07a415cd868df056ff3c7dc3b76c802 +334b70e6b9a08046cabc7bae845a1abf759ef02ad0ae99fbcc17f92b5976b0c9 +7aed463e4dcf547d349da528b9811b5e28c94e6b250aee6add5d3005afbd09bf +2cff0c2f6f3b95dd33388be72b1488a1fea1821fdd0b5f94d416bcb6fbdd5b79 +180ac14dcdbf3759430aafcac0a4b28201914a6b2ed15bb4b470cbc9b7244997 +f01c623f26750a8e3d8a9f5802f880f5fd8f3f3d384546efcd615c44c909e82d +4df12c98405835675732fc1852e3a193a8844c71973e4c1e7c9a131b3b72fdee +88b77a44cbda3eab2f16e5e71712b6c95e90a22d39b305075d44186adb84ca6d +d6a3a5a8c6fb82d1bfd28c7d4f09549552aabd0c599022985e1cf6612b80c976 +5abeccf01f8074a8004b4c10492de2274eb6fe70fbee2f07da0e9693751fbd4c +012c1ef4a62a6f41ab0d416a1a48660fc1215f5489e660ff41452044d94a0bde +354a82835d1c0264bdd4ae12c8ce33af04560d96dcce0472f412828841b8e1f7 +5f2551bc1d21afccc5ca0c2e901dd5915ddfb39e0a10a51267d087a9bb5126ac +16aaeb7ec76c76b97cf688d1b2294d800019c50f0a2ccc17f23c4159c8f70aef +2a71c8abbe494f5a7b77e210023aba67ee3ad72873d80d9106a6a904cb08110d +93be193605b4a6decb7cb4312e3d45cbfbebc5869e619a209539bf58eeaae8d6 +f51a2c88523a07e0df9abcedbce12e768359a02704093ab088176f9e64880317 +de86c733a263624132acc1d49d8401418dde8131340f7c705fc372e4b104432c +278fe7a833141ed5e770d3f204cf837137243c59b083fa703486785d9be95cb5 +0977d2f7d367d7b3a8ebb4b09463fa9bc5e2eeeb93dcde380a46bbbc2ba72a04 +39050ddffa4765287812ea46793c03180ca10f7c270fa6a3565dc41d28a271bb +43c1206686871994f42d1ac390303c9a56406b21568bfe7c8005eb4a1afb21ae +c9bdc14687387d7d7761ebd530bff5b4189f279464ae3f63f9b8b93ce9b1927e +2ff342a5e7367c65aa623357649905e04cb48aa40aadc450cde961ce8b99065e +10744ba895073a0c7e50c8dcd45c3318cdd5fb6f969ad5d44a9913879604105d +788f0d52e2e9bfc0db0a8ee972fb2b4ad3d89a49a994c78184138adcc6e5c492 +137e59ffe9bc6853e04b50423f5c5307b4dd24122921ac718624360aa1c28233 +290079b62dbdfcfd0ae51082dc6fc7cfe4c22603dabc72083e9fa8b9ca54845f +623d128c689a3fb4ad54a8354feed630c7c053eb76a11a5a0280d7d9e65d9c4d +8cbe833cd2e0cabf04a7c6b2dab874253ad1caa1b1fbd54e0f797c622486248b +df0291d524420253464051254e3961669a2d9aa35a678b8574416de67064f103 +270d3702033f5f4175d70ba59c7a048819e2a301b2c462bc376dfb095ce0de0a +4bc8885e02aae8662c1717a198a5b5e567ec210c963d7e773b2e0d0d38d252dd +b480bcbf8c02857ea59a95e6d7529bc65de9de53167f5cbf185ca0b3299154e8 +a4bbc21a3a5133b50bdaa33e1fc82b93aa0ee1c9609c583a310b9ea1cb2b5708 +e00e397f1f27d1cf78a68252e1c4c8e491cfcb9c6d31dc40ab15a0aacaa7b12b +1ed1e232ed6faf18f7b9111005949cc3be914e0e77d72eef1bb58a439c208da8 +b85f8721ee147e0f1d0893b2f12999caed4ff163bb2056a19dbbd4413a4bcd4c +b75a67cf8f598b5aacea7fee52d6a5364329398aad09ffa4965e5133d3d753ae +f69f1db424770f4c0968895cce8e672dc25e987d402138ba4887b083ab821247 4928b35d4a4375407d4984352ac715787a026bd60133644e9a4a496e9e17a73e -3d5f5e0de34b1b00fbfaea133550865c6ca36d9c8f87a31829994e09ce78b237 -195671e6f4a1d6e07c54c31f45ef210642fe05b3ab06011a8d9ab722bdceb0a0 -d7109a6d7dc31c66645aab1f196f7f443c551ecf84e5d779bf7960013d2e001e -501d7d02be0a0e7d61c4a88f4fc592f4741ef764f248fba354bd5fa7c3715943 -da419f20fbca14290ec1354efe22493fac7be8b804e73f66ac8eada3dcccfa73 -fe976f5cc884a042ef595778d344eeb0480eb8519b712f12c169d992e7ef6b46 -6a00d75b34368c65711afd5a979bbc669577ac49f8885156d1f07e2c6bfa116b -a06bcf91beee19d07ec3e3a96279924b58951f25827514b2e9bbebf807149891 -4df509521a5f585245ac7b63f60be24ff91617c89bf6986111d447b563b34ff2 -1e2219a02d4ab33bf2278b5109e007a06049a6bf9301a5efc9d6655b2c89fc5b -fe28fa2fe28f15e55b93311c2bda8843e0ac6dee81afbf2eafef57b51601edd0 -6f2e1ee03b1cb03a9f217d1ae6cfa47e61602dcc2b411bb87b2a72e486d7f194 +3a104d3ade01ab3b7f3e29915c8e032354aa811d0476f4a16322aafcccea4e56 +c3bdce9d2a6a9a5bec080feeb96babd80644d1a53e39e0340e695d50bae395fa +9fd0509589d6f83538f5b7a2ea6a4d74a061ee1b4118ca833820683856aaa28a +ec7286cd86bd479efc98d8af58b5b3c13bd5b4733266485cfb72016797409355 +f3d3d75973a0646d8b93fd27f4dc58c0f27800502dc773186fb3a28aeb53ec64 +a60ac4cfdea2a39e53241ad5636f993bdef01463e81082de8b41b0a83b6d8654 +7e65af60e9c8babaf0dded1dae5d84bc6461c23b2b61a59cd2b9984f880b0abc +86e07b9b5052aa371de87260945555c358155f7bc461e8d5b50ebd09d19c8380 +f35ec75fdc77f1b7e6ccca702bf66dd787e6c3165d4037cf2943c59e5fe63839 +c9a782f519986779d6f37be3d9309bda4cdfe58e12709c1b4da5e60217ea18a8 +7ca940f27837c872dd94a4223ca3c1e0e0b30e9c3db060b3ea0595120b43050e +987d76b51bd48176ab3cc630a5ee0214112fe8f48ee5fa905b325293b98e58a2 +97e0ac16d62be1b320b11d23a2ce09671604115889c09f4070d4666a26821693 +927c98c0b02b2fce276b058cff33de28ea737685992458fd9329259d5c410df8 +23fab74d3f31d8dc74ae91a9bec15339022604ef4afc3f2828e2f49d9263d1dd +d8d129d6e734c1fb8483c7745677b1d4504137c1318785955054f432d1b44f57 +eeb2f90835be6a78b974e5604c1bbbdfafac2975ccf860dc6e29096a92a49629 +dc4cbd599bdca611ddc90a4ec272b3741ffac658c5afd409cc4585ef211f22c5 +3ec4396863837402f0637ed078eab5edd7f2d837912110d096bb491f30495284 +df335381e8b04effac9f6dcc57a09a66c4c9e09b8264d022630634f465b5c35d +09e3542b832f4bdd9eefd92c35c5963846fa5d3a76293207730489e7f9125921 +8a65208a2f456b92a25da0605eda8dc7cf899cdc8320cac31fb63ed08cce04ab +372e95302e54cdbbc6221aa066d3f7bfc08cde388b6e4cf4a448ee180322518b +c3a542bc37788d3872c92b68220899ca76fef89e0d32101dc45e075b3ffc5cf0 +79c5a8ebae612f0348b78395aab01a27087e4b5892c6f93f20b14efb0ded051e +46ed70f073f99030b6acbbe679a633c9fff8780fd002761a88c284c3a12a21fd +f32ff8cd620719cbb69c3b03254aed834368b7a5f69cb4b7d3f0332f21e29ea6 +46af53efeedb1cd366dc8d031baef9f893b2f27745ba12096c8d18288486ffeb +a6a3db0e7c85368f1aad28359855230b6dd6678c751f60e19592ebb487abe17d +4ec75bc934da27bd34f45b6ba301404ba0d686381e37f46e37b305c37a10be35 +6fd1af0ad43bbcf728184c6bcb6a48f1eedc2bae0066a9bc42fa9cddb1de028d +d97dd52b18670c246b5b389106b35b96b05bf678f2ff17dc6b0e97023d3950d3 +5c940b126e3e4e80148782f32aada256737ca6479dd9fe53c74f0793f0861f88 +a6177179254b203b5b3d8097a222c673ab8e885df8e7050e6dbc30ef5f5bbf17 +62602d5306f7404e2d7203ad3d64a0da646e79cbeb6a09f0038eeee65949d60a +3553913143ef96c9c0db1e05c9f96f02fc12706d9f2a07c2c7d44a574f972482 +b7a717a08d7bb771d800c19fda05a4e7ac9bc9acd6c3ebae94156b8bd6166344 +a9447c68d4a3db76925058721bce734737952edc8d836a78603473b5b322e7df +4af214321b0237fdf4eccdcf17e33e316bdc199961794d6d7e531769021b56ee +df8b130db7321fbb9346d6b53d7b58e9f6d06afc77de17b3757a1471ea507869 +9ddd6f17198fbab21a0ba18c7cf2b5f37511a2193b018c9746618dadc42cbf90 +81e27781d8e21f909cc12bd273f13ce10082e24350115f49474d079de6bcb1eb +cab3cdf822d993f077f6a6812bcac1740dc36ef24a0852dc0c79da7530824f08 +56f0aa36b51c2971c5e5337de1c9ccbed6570f6a57f81c7ce1d4c1c54bc60ae4 +43cdae759e6c10cdad953e07d348814685318b379b2600f79e6b39aa17ab7462 +93e9bad50782458a1581abd5b4e3a70be5d23ab7927dfb5a5104e40a4aef703e +a24deb27115094d610054aa97a3913742363fca01df49f71bdb5239ce8b914ab +29fd68962c30655aa6ef9b192d19649b133468999480b2d1fd4ab8fc0b535a30 +1d029bd990eeefe93b253a25a969b8ebd1bdc5095b8b0e81494c78a6693c07ca +6408aa26ce074c80a744472a2d45f92a5dd9bb698d09894c166ba3119979e9ff +92b0dfd5ac0b6e2e8dae164570747de735b1c26b71b5afb813e26ba22622fda8 +87a039f6ea334b61bac246684c75fe201746851a72d944ba75757b7f858bffc6 +62fd468573822af8cc7e7ee67e0bd158b9314a7d7d15a504de8a47da9423a1f2 +424792ca94267b11bdcda5af5d896fa624f119b2c886bf7211e19cac7500ef82 +a8ca117ae3556e2970c1ea6552f8de10b3d2d3c70d77d1452c38db53cdac73b7 +30296c8fd2fc9ef712dd572846767e4f8bd09788350ead55456e57db2fa22e45 +8f40974a37ce9865fb4560d2be69716014c511403b8d6c16096f5982200d80bc +9c184685c9b3dd107f3da78a1e45f11aedfa94c260ecfd6a72149ddc84973de1 +a14630eb406a928c6f08c226511784bc851212327822e4a6c6226e65ba0ad87b +317537faded98a65ce6ad9a5c7db62569528ebb33534075207fb16c7b4c6dce6 +81cecd7d1135ab9f7c92b4530d93858961077ad2321376f5225e4e3cf2f39fc5 +30604dde9d5aca8b3afe3085e006be1c315d70726dd5764e7f5a6d633e825a80 +7e988284817f893a3a2f9c51a7da982b2f29d7494121f5d83a0008671c865929 +d4bb030c8880a87764f4df89137678bd1eeb517f1ce66784ca21a1794130cc75 +13bbbc98f8f34a9fc31303dd75b1bc6ec7602348ef5c985816407e1397ae1d6f +b10fcf88e9ea770c7a170ff150188850041e14d2c5f30cb80320d2fc13152cfe +8fcf3762ced81771b824c50c3543210f06fa1b3276cd8bb5741ab82d10bd9735 +f89b2a5849c961c420c17819571c34982427b9a05c5ede886df502643418eab3 +24e3949aaf10e4155e3cb7be1f4eac2db9dea04e31cf904c99737fd5322dd0da +ccc6253c11d89af11bdcf20bdf513112ff3c0bc6fe526045542e1edf9ac6ecd6 +2a913432682d6dec351e66034b7f9cc2f64385974684e06b57dcd5e491730b0a +1ddae77e15cdeb0eb24af3eb70eb0e4e69ef93f16ed26869b716569b6adf1b8c +7dca003d51c42ded7feb497a7bd163adacd9f8274302dfaa4f889c9507c667fc +b27bcbeae0d3682814c3f308d66d77da0ce24c2a41c130f39a5768d30b64f5b6 +624317485b0dea29daaec6fd6bb7fda31cc6ea00e3efb5efed4aff14d0068a4c +fe67f3c3c7bd2b518863e241d77de378b0c6577ef9492284a5948db8370d7053 +fd7a567bc2a68e76f39540ab8e01a9c9bf6668d3d77c5705c195429778f12546 +063739d777ae4310d036c6461c1a5b3d731c78b26dba37c06c0c6c5fa3cfde63 +64f175931b26812b1af8c29c20724b2e2af3d0c151c453b601c2274d43cecaf6 +2b7222221ef1f49b38f0b7d5ce04a312dd4c56492ef4ca45fdaa57f419a4f2d4 +15229d101ee197bf179a9e11235901992d486cd99aafa632086733afb1e8008d +095fba50cf84cdd4f4d3dba6ae9ec9b06148eb46bef19029e1471a19a0459984 +5246ea08c3eca4fb23e14d1d2a040fc55ea7834223eb7d235b2d47eb950f5574 +366444ef34a7aef346e045035d5a17c66b0aed8f93538a197b04fdb740159859 +6d591ee06e1d68699f42802480d586fbd988ab6abd7b911cff06b307a0aa7e69 +0c2fde2e6a550c3553e91c733636e75ebbf6f62052d7b64e79b6c04ec1530b21 +d445ece16d21807ab1d287109a775938ea09418befc20224a918882f7c81a619 +4891006444918b895fd13ec97d4b7d671141e0675b9d64fc751b5b1be7d4c3cd +3cb68baa7d424517cef3cf785191f4a927f75bd5111765e24f541277b235a522 +e5145332793533c93b0d20d5eec0e9003c78458c25eaab02bcd3fdc66ab92ec9 +21a35f23ef8bb1f20bd309738445653b35794f195464d641b823416e0d220ee6 +c7c0cc6d879fac3a5774bca00cac0e8a56c52c930e51d16c8bb45ac3f8fba3e8 +a5dff8ab3c4b4e44770d76111f22a12aafd300f11f23e14ececf8c0a8bf60b16 +56a628c6ec9d0e183c4bf8e631c9b19627bef283e927c5de83f45ab3bdd911bc +9d3ad5c70154474405171bf4f645225891fb70aaf0a01eb44ea1ee3c509da33f +b73474d1689027e4e65dd1bd0c6b0ac279101fe5f8a1f03820e11081c0bf2728 +cfe1b508511f26ede8468852f80f2394b92a109628c01dd414aff5ad2fe629bc +c5f8bc0f398b69700b270a4f8cdc53199f84dafe40f3a09b72e37848aadc2aa1 +24712f29874d05505fe4c74320dd51cce66def98b76fb1963b26afc1945b4c82 +d4f0e7ab0e8643b608fe22c68747cdcdede17e1c87753db6df06227377b6aab5 +903d757c6a163a3ea489cf28de8c37ff4fb81b7977912a1f86747971752e5ccf +5982a1b482ecbf33192fd3425c05210bcf500dcbb3df20abbb7f21cc73d18766 +41697ee8c0c57ad63c51c1aae8ef5cc81ddaab3708d95fc45b872ad35c26edfa +3bccf768043487e4680f108599ddf52a68c60d217a1bab253d4e3026b7221d8e +416c5f21f2c823cff8c48ca91e15e61a7e4d95237ff093fc3f17c67466a55c08 +e53f5793517a0f950040fb771eda852275d7430afdba83e21a41ca49682bd39e +00d6eda8dab9a1fabc00a0704057f0a9b152c4c5b8183bd019f4888410633d6a +fb6a93a024fee3c14806ea03c7dc494e53c49806ad9a2d27ed008aa63dfade7c +6141c7b3b3a3eee139e608a0bad9ada5f122610fe5bcefc0aaa6a6aa54d368f5 +5bcad6dc58b6a2568ef82fdfef18f5cc8e5f189cdf43423ddb4234745de64194 +9f85769c112dad02f50eac20b2c55c2a0d654e6e56d38ca12df576f2992b1329 +041fd3a18ce6785ac452ce452ddc21ba73de2e1788e9f4926d7912c66f089bb1 +de7a0328bcb32ffadfeda9edbe576ec37cd2b8ba64d88f7190f061475f360901 +dc5a626c9414c1d79c0071ee763f621e3a9fac9351bb34ac3cec3241fd5c4cc0 +faba3f4ba4e7416f035bb807e50873cd8c510d2d001ca449d5a7586e8acf36b2 +f34b2aefe1c19bc24688576d3e0a49c80fb529accf23e15f11eafdcd0b9180ce +d29d21fae667e384ea891c751b42487777c44df2c8f1eba14f5b2704db92c06b +abec8a200db7e423df225cc8837f3de9bd5d5a4713958de796d1dc34bcf6f5bc +93b81be2eeef5fe7cfa547fbf16829fd729cd7ee1e75b4908cf1e07ad14d4d59 +e8d4d8766642b7ed625c76f03636326cf78f9aa8aa744e49e392507de3335a53 +4fb823aab5e47c7fe40075d699a7056390cf0b96d8ac78cd85dd417785f3452e +66c1dbcbe1ea61c2b450aa97adb7fe84547085b89b2503a04b0c14f8ce0af95f +24a5c4e494dab9094973184060483c1a2b85d1ce1b9a82a626eac5c34b121d8f +e8a88097a902212e22fe263e797ccdf899247600dfa1cf69ace87ca22bd494dc +55473324a576e966c7b1249ef44b7b53323cdecffceeb6f7790ae51549d59da5 +c7f94ecf8cba8b421afc55fd627b04ddd81618e05f84ada21e13d23835d054cf +e6168843909f84c7a2cf6dccdc0a0b4670a83d6b440a5434d2e01aa9af41f61d +950dc7a272cdc559569325c25bde0f9407c18aa2c4da2c56f2d9cb68fd1cf1c1 +fff5fcaf7a52047be6ee64077b44aaec937275306033b09ebe03a8a6e85817bf +bd2085bf1bf0c90179089c4cfac8e1f57c59e2c03fc258c4dfac808f23a4d88f +caac504295c06c09246ba121e2902a0ae44354c4e96af29bab4d4918fb57cd4a +6700f7bac64ba80f5845856267dddb739bd7fc4815e205a41c8222e9abb6e9cd +c655919f90fdff70682d735adeb0acf3b801ee718206606647e92f0d9e5bef23 +844180c0a4f8625627a583a4eecf22bca9fca008b9e6ec8e22fb01b677de87d8 +88877248b629da0df5a8e31fd0d1fbecafe48a3d1fc65eaff141ddd9bdb3361a +461570b1d4894e0eaef5db795ec75726a0305808104be67e3022ac55eac6159c +ce2e97ae718f6c6b5cb537b99b511ab73f5577cb52ace204ed57c5971143b441 +55e2c2b106554f42fbe3ab601b74fac94d6ea07834df928426233bbf558713b7 +d7d0f5173c2d2cd92f96978b6e462baf37b55e24bc46cf485497e3b5b8c59811 +f67dc4fb5cd09c2513b293727f428cc5e87510431ec94fed40652fdaf0248673 +d15229547c87b42528ee4780606a14d0928dd0328142e5f3bdd924b8fb6ec7d4 +ee1090a4c597e3f5feca0e4516753b0266a5552f34336579540c6f9c8d863caa +03ebac2aaf222d7332789dbb1423e3869edb30bc3760f6f3669ccfd3cd787677 +5b71faa9dfe326cfca20c3e57f1d8570365f88fce2f835e8f7a8ddbf5f6723ea +ed8c4e7cae43bfce7c0fb1b5651c34110a08d7ea51a96d5cdd8a21d6dd9478fe +d54f8f64da628450848655afa5bf68b874909434064a19b5e534cd4790e57ef5 +b09e35107e2ba0e49bec515675b144d8870aa7f3e304384ef1356d0aadba40d0 +b6ee205092cca81398420d74124bd62d493d6514240fabeadece7eeedce133d2 +df64016f1686c2d2ca0db01cc59e9d2d70c449633199f0c9a9ded4603a22a2f8 +c6ec0ef150433414fe0aa25d4f9eeaa63a926b13de41e7c0689f737409100af1 +5273f51ca9d8193d91172ab050fb1f21cefc2691d35973cc04231456e1ddd418 +120c5ea29685dc1f59d6fc60d494baab02f5ecd31835f70e9d3fa1acab230cc1 +b63963dcc7976de3ee8a2fa4e9fe2af0008d04cb76d6c56abe00e07b388e4e48 +f1159e6bf0904cc092d0ddf098dce395ef760f3ccd8a41c475d8ec42080fdbc8 +d602b052b18af6e2d715d5ab39fbba754a02fa138f7059139caea465ab37fbad +e4e87ac2beabb8a8b8782ffc6971c41ba8465bb0c4b3004f18123a31bc08236f +d55f5fe8070f399887c98bc27f29827bba4ec26f158ea704e555eaf50e0137e5 +d25938359f998563af3cf5377af5aeb60cd4333112a1ca5516869ebe07fbbc90 +8a843c2fc2db153123d56d0a1d7c2aa2ec0552aa0c9297bf1d2756404e9348be +381e7d018f74d95bc67f91c3b6e85a7eb6fe5801c221ff20bee127528845c265 +e20b79694ae88509bfa5f7a20bfee10e79ec126b3ab103df4656e6ff6ee07232 +bce2ff8528e17fadadf3d347949fd531672126d57ffb27c1ca869f503c9b2135 +5676b21586b3da13f1f03642a5d4d6eb502792bd1c44563bf6cd59b2737e7553 +021f7fba0b72b5f3d31eb93d06ca0f8cca35f948798e133faa75b74047e8c180 +d647901bbe0cfcd4cef8fc87b6925ae88e9f7e501441077a47c7006a93bae1a7 +71531db280f61dab2c5d70bd100850b5b348a2fbaae8d488cec04339d1262b45 +f12fcc9d8b0f8544e8e45094100c678d32d842fe91c29a9f0f6e187ef7192a1f +42fb4252f03aef5d460299d694eaa45095482fb59282600c4095a9fe3aebd2b8 +98f4a1691f83beb110f3bc2b726e3b4542a3eba1116d57820de95393f93cbb21 +2895be4341ad9dea12c3265f71e00a20cedfbad75856b20d37c13b0d63dd7eae +4698904a9d5e8e35d1875977a6c75243bc895d6efec907108beb7916aee6fe9c +045ec692a5694e0275016b0ea672db9561be18db0d8f720fdde195b7f95d512e +80547dc73a2729ea79a000d5e5fdf384dabd99257bf46c91cb24a577b33374fd +fea9879e7da3c571ce7b413841442c9d2f0ca04984cf23177c9cb9c52f801c58 +ee2f6b4b245b84bb272d19861c08c795ddd66bf08428bfc389c5aaaa4adfc07d +fc75eeb010333a7d4cc49e7ca2caa58923b1e1eec3ecd0a8fefb878b2cff45bd +e00e93dbb808e4912e4fd9c9227f41fcc7ec70e684f30f8fe9a9a1d36c8b0733 +3261ea87aa7e8d461e6f7e8d0b1e6d5418e1ea542ab21472eeb0bc2c997fb01f +b935f6a4cc18eeedefb78d3498ec8b4dc6bb61d038b9df282686d09f8aac7d53 +7dd522ef376dd0e96306abc1be6e1ec4eec4695fa380f30a7ce452cb358f85dc +9b470b7033ec2ef0e9d4d264c5be22c205d0a528d75a6c03ff2af481e0b33107 +1db51a96fad880e9ba77f07f28b96172f84915116b4b5c809bd6d1267488f4d3 +b73076a77722f691ef78f4198061dddf6572f95eaf2c45b7a724b1808bd307bd +39901295aed33206b618dbe15dc11caa383b499ef9b8144c69f393558ec81744 +b88e1c041fc748ca4fafcf5f31e00c20467f1130462d9e01604d20d00aa6fe8a +822828130ddca55f7b943fcfe1bd331cdfe357430c6d8d1292d110bf44862661 +0922b68bca7566feacc3c1f70d8e910340c509fd4f7234d7c4bbb26d11d304bf +22fdc216dd348375bc6d3277761ad26a9b2754c0bd300c119380d6b849efd1fc +eb3e29a4eb5af8387f80fb1bfd7799af6418c1243d8f637035cc6278a35d2747 +c1ccb2e841f110ec639fd46cf287648e11ee0da44de72b3e2cebfb2f67e705f7 +5a783ef98d4ee4575ebaca024138aef3455642bc44aa85e663ff16ad0fb95ae0 +5ff0b645ccc18f67606b99d09bcf24d1177d111c9bbb2f57b0d215b5caf9bc85 +01c3f0d92f56bad0fa7297e363253ce91afd9fea6f4b220431b1a3006541882c +8495c2d5cb052e421ebe71928ed2d389c24020db270a7e72363d4702b32b0d2e +7df3307e84b5aae70c7244624c4e627e19eb810f4990be57cc02349263a0026c +a62ef44c94bde81531ec6938d9971802c6b01492bb487d552052ef83707de93f +2fe0f577c3bdd5ae66ab06b97092334b740ab016de1fb629e2c7a94d4d967e32 +e56ba2317814226cd32a8ba488550afef6e5a44361697f125d889458c238701a +17af26a0fc638c9153a57ca5357382d28d7e8f07f67ff02e9b5921431d3957a0 +63ea086abb5c4fc1ce57eab83104666136b29f41c7b454d12fe6eadaa365371a +a66a23b610e7e51079f6d9f522ec9f6df279e99bcdc922a55ca043828edb9b0a +ae4283a8eac969535e1beaee23a1ffef309b08df04c3eac5f24f3385958a67c8 +cd820ddfcea985d1eecbcf48f4139e934bccd849fb1a1f1a225908f1be097ba6 +45226dc82b41a1754b1ce1f18e264f447d6fe8d7757d12d601938906965f58d7 +66cd25d8f7f77441d2c57e8bb3ec0d9ced98a8e54b6b107dabdecd98fdcdda08 +4b4a5fd88c4bc90b87addec6f07175323721de086ada49070af69ac80d5e2e82 +8c0078b31019640c61301a28dbe9931d449ae82cdc72b16f25afe678d0f7fa35 +2f26ef45203ba477bb9ee38be0049d4b794ac169805608bae95ea71a7b1f0d71 +b3598df24340bca2767fb5cc23949a174461015e7ff7dfd0fb32c8eaa0d21aa7 +f366961a77955c9bd8ec42a120a97b0e798417b53517e31d0eaf7e8259de4e72 +fa4f07518e2407aa364550fa344152b424fa0eeec4cb9a1b7eb946321ea1c5db +2aa77a090823b10d01e1023ff86c2577f23af0b4e10abf5a2baf069a606707c7 +21aed7f6bdad94bf02279e528f53c49a401a1528f79291cb7f8da7d544d1e97d +935c8162fb14a2e82ab4e3e2ba0d136506da3dabf939f6003fecbc34376945e7 +65775d2f215148ed213fcc5587d35e09a9561563e7de65a08867e7da49245229 +81b211124200c2b3ec489e6289ba20b3cc928cddf80451b8dfd902a03cbe5058 +fd666abae3f3cd985bade5b089391c6547d6604eff3bfc779c03cea5dfb7f688 +7a71af3b5fc9aab773eb25cde6e21b344608ec7f1db3664e1aec04e97ca440e7 +5016303f5807c16d2228e13f9e46eff5fce2c138d7845b86046b4ea6987d9f7f +c016cf9ad8fdcccf33a39eb7878cfe6ceec4a716d4234f47562d99d0cbfc026a +3c9ff8b37e02d2adefacad4c319231203f6549f75dd0bd605d432a6a47d57922 +87a018d99d9c8f83fdb33c408a5d68c532eb9c550878994942cd11a885f6b636 +8856c8742cb8f53f03bba5cfdbf6a0a871a6d5e5608d73a47aad69ec45ba1631 +2ebec5ad12c46e226578c88154097977cdd7384df4b47c98ae1b5a73009b8d0c +9d175467aa29dd3b5e8728e15a6de49b99b762a24fa0648fe57604e4270675b4 +6bd1806df951cc6074b1c1019e3cf27ab493e421bda830ad54c2965badda0a2a +a72e8cbadec2b9dfc5ba8fa553620dd13e597c1094dbae865b122453cfd27c94 +c94bc2d1b33fc6bdea57b3008f25f3cac75a82bbe644367b13391ec6eef37e93 +a97ed1e2a1279358e6456ece5bba564455f11d1ef0949fdeaa25168b377d7af1 +a15b8655f56da3154c8420bbd3f38b03abae9ca95ae22238b8906bcb85d6e545 +63aafbdc6470b5288f70b3ac6063a59acb0a88492f2560023a4112c2a77f9795 +cfb81afba1a930f28497bf4b6168868612c220b0eb356ef17243f0f522af2b8d +d9bd905c8dd80fa063f579e0b8665c85353ad28d199052eacd4b79cfe233d032 +7ccd9daccf569a6016173298dfcf6e74a16b169b68599a853f19e516139daafd +6b6f00940c2048e1087a6e3954929f5bae1be3e74af0e4d67c16c7645a588105 +280428476ef9fa360b6e9334fc1085371a6991a8dea25d21c89bf52303d4ed27 +5e92e851331bed72c2f071622f935b13bc546052ab6bf1d93c4bedb1874e4ef2 +9acbca60437a52735c17a2f6642bbab45a5fc2248d19dcb7e3a61ad061e246ef +cb7602a69a31ea6228d44e8de00f25488160ac5be7e893468e3ef6f6a5be3a38 +d9d3b508ad5c2bd3aaad9a141b7d3c7512b01b9f97a67109e8eae5e406535d9b +4cdda6f7076a26b5dd63f5eb3542fe151b7266a8f79620d968b33a1a2694e2f3 +d255c2af6fc2897d6c4c4eabb50a8414e173006e9f9080b611bcfbeaee826303 +174568b0887e4da8e29ee0865f208791e813b1e5968c922bdaa6c7a49ed36e20 +a165a12860c2450c16f4328c28d018b9fb41c42cbc498cebf4109ecfd2828e72 +da34d3d8cc0268ab89016204d52f4d556510de4f136f27e67b01cd9f782adb47 +ce5182f11629e431c827bf6a72ba0974d6510ed12cde60901ce079f4f666ca27 +364ae47222dc0f386a8ac92450c00e661ba2d9f5f3716c7f2537d48df6cf016a +ace9740a9f9ded55e044c49947b6594247a72034e1773faa820fdfaac84d1444 +365d15023ad3cf01dc64efd7abee52477376594bf13b9cf73973fffeef536dd4 +b94771d38835fa037b5f1b6314c96be80516b3d31522b5734d239d9348959499 +cdb48ce1419f0ff4844347c039219f81ee34c21a8e14f5d1d8b2459114c11ea1 +bfbaee3d514c35bbcb02769a3912d98b9a873cb0a78255809184354cc429cfc7 +ceb2038750e3a6026f622889e891579d4d24e91adb4c5ec9ff12e008441fa3b8 +7da5fd597c97f37ed5e8553ac7f140ca877eb6a4fbcb351c3d070996088bc4da +c5ce85572cc2bc159f3ff3d2bad5546fbe3705a36ea95d1e27c9a70195af8517 +8c0c61e66aa62b5c851018f2971aa32ced258ba4b68ab2a6d63c770f787a3e58 +470e4221ed1035f2a001a3570f0c0448c325308963e5c49b630e1d7b0970d532 +5f6f13ec777a59b17791c8292a15a8b0ac48865206eb224c6edcad18b198bea7 +4411171fbbe196094e60c70589d8212c8a03f8678d1283d428f0ec49bacd9233 +45da9ce932d5a27515b5706ae3ccbb005ac08efb276a9f4e49becceab45aa940 +b8ed2ecaa7512a086403c68e050e027b596ee941f96c433a92b8574d664b5184 +779a5345eea3680a5f485fd7f4afe55f8bf09a8f832f68088fc095e4dfa1a490 +6ed40e63e886d5f8409c468f1dcd94a60ea266f813270e1ef5c6fd9f950e32dd +9b94d7014d1ee3ceaa69c9b10d76212603318deca6ae13c499540c057aa33b56 +5a59688b1cc209913f15a6babb28d95b939c0a0a64b778164749965ec39995c4 +d7fc700a746c511fa7989ed994740e2c6adf8177df4c47f6dc5eed9af7976ee1 +ef200b36c2008e9699130d073a87ab0444c5a5982ae22818065f4651cf82bbab +8bfb5bd6a1da16e1be0f8089c9d524ea3b5c8507c82b80242ee129d35a14658d +7a45b4b656d182cc8074f5e80834354c36247c29b0cef6b3f0abd61ea8b4b11c +9c3b58309b3cfd129f6f46a803732446716002f5c51b5784d10a9b7bfed4888c +9608843146ca38d716f36f79a7e137c18b9b2b1cf88dd7ef189e5fd93553234c +7f91eec3b26934d7add813437122aeea8bbd34f6003ec520544db0a655a2490b +01e1bc3b0791e66f7b6f67fd0cb4572f33fbe9ba79dbc8261696d45976aa8698 +5acc8d0d01a087bccf76d8b00e2e718cb89a851b9751334a4570a0e7a78c43a1 +75300adb34e13214f0ef195fcec89295d26eab98b457091ca12d0ceb8aa00d32 +9f417a32dbc3cb2e077053f85d7dc0aff7d706f99ffa1a9354ebab33cdd7e94d +c1c0e93e54663673f53a4e774d8d6b6d79199d1300731ee2250fe6cdac5cb368 +fbc12bc889fb3d8150fde2311baabfee3fb762da5021d852fcffe7081899f0e0 +9eb4324ae44eafae1c214f61a4c883e744cd622bd677024dd7214d36c263b5ed +3c46e1f7a29a8cd6df966c1acfcbfb07725908dda4ae7c67daa3b79c4562946c +ff3b31b767765ba551a4b150a76101060c2fe2c2e9bb68335b505313d4b4bf49 +da9b42321867933ea4d5d3829dc6d26e577a11d1c3bb08972b1f036129ce0962 +0eb252c01c7a74e104b664fe14a99b6d6fc4ef5b9eb22a4deb6708030bb993ae +02f6e4c9a41a5203552da8b7fdc135cf7302d6e83079b53afaf62eeb3b25f59d +29064c4d131a6ffc8b5143973f9af28cc2ff85a545ea9d498fd740cad6a340db +f930414c753569d688581c391a5c4e41bb5e43c829ae94a031eb36a7195940ce +482fd9128a281f14c6213b8065189a7f9a3b68da0716936b23b45976a4364c0f +8d423895ffd10527bcdbcd8bca0468716cda0c5a6fd8483e9dbf4e5bc6d5ebd4 +5427596611e73a2494666e337e30fe00a1cef14f5517a9dbe62224f3cda97fc7 +66785ce5a8d57ad364d8caebea4d44777f6f6d98c9c1deb473f09cdef9048d63 +e19ec8ef252fb24a7f74466d93d7544cc5bd017ba084a7c6671a14f174f8ce66 +6e23730cc2bf817dea1f097a519c6c1605f51d7ccd254ce7f1182f9c2a0155ba +14e3dba3758c1ce86a93f7b93a15f5920f3a88e34776609857ca3c1068ca24ae +59e6c30bd72a3104d733fb2d197dc911f020b6e096d461b0da9af0a32c0f33f1 +99b139a1bfa3b50973c882be74108261f201cbc20696f1aca4dda3547fb83628 +f3669de7875dec76e286e7d6cfc90751e7e88a9faca280c0ac94d73e71a80647 +d55aca5b4557ee675e81889d1126530759a0d30820b1bf62a1eaa3fbc30ed56e +ab58465bbfc39244fe92a6b13ef6479fcdeec6cb118038659af63a8218a53cd1 +5f46924f2e23189d6f9481e1f718bb72376577e3746509c9405f49a37497493b +d7bf714c8bc5dc285e4c5555c9563c5ee1c857863ad8810773392a05e249364e +e2042fa7d7cb4da795c38bb17b76bfb94965e0164c0930362db0c28bc06e1fb2 +f2cced87d8f89e172229c1bab7650b87124a8f7493eb9d76c7ea49d056a07b2d +c4fca7284be57bdf4caa683c351f214654c137bacaf7bd0a6cfa966f605a7cee +afe05592e2aad56bd8e04eae47195187fa54defa5c3d7264cda0733f64e4c3b5 +47eca767ef1806a13b3160dd02a4eab001b21b51b32bd7dc9b49384f168f9354 +4a50886835d6d59d07f28d08d650b3a691ecd74fba087c182011bb969e01d01c +c85c0199ac0089d5c701b32e0924a34fc2b9c1bd07ea4d905b9219aaa7adff61 +f3ab26267ca7a03dd265362982db98daa7c6e0aee3e808ea089386a7a8312bf0 +7046f234639d52b16a8162be089659e1e64b77038537307c09dfdd2e5de2b2b9 +9cc491797d5fa756094e953f824ef09d21f7db694e6ca95b44429e58ea9cc1e5 +ea57b6b06cf20acfe8dc444cb8a5684efb0a2699ce91f213fdf85784d8d9f9f8 +57f115bb1460d42ed38bb9cc4e167fa41895256c739c1e9d57b26fd32bb8329e +dcc34853771f1edc6c43fdf08fc89266735f9dfb19ec871eeae7367778ba2cae +c5927770b7704c09100a47dfe7601886cfe749e2a0efb751c809fde69a7e6bad +d9adebcf8f0ca1350198b597ba38fc4fe565918ea1ad1b9dc71e66396011fe5b +396e5b31ee4c56a7080808e04f9c16deaedb9e757575657edd2236a426797f0e +0c7694679a8a9c9e01797fe6d50b205f78bfa08c103a6a071f254f315202a472 +8a05f652b44f71aad20f58a04644f00f6ba6c8426d02373b841740cedd89ab9d +7849853cd88485833cb6c66a85a549fe315b5029a624c5b3f9408e73783403d3 +a29ce83ebb869439cca17e8ab0a2c2c46ed4ddef68af71b09f2da49d45ce34f7 +ea1a2c226edbd132f7ff4768fc4e43eb7f78719676e26dd57d187817dd53b853 +f6c8576710217355c82c12e3a474a0ab7424845fd97461db0a865a763e7bcdd5 +751ad692b11556c12583effe3a744ae8e3a65f21b5f3c4bc24f4b4e4dd497196 +2a22457b1e2830b6338a9b573b4739a3c8ed460fc71b5fdf52027f24e90cecc0 +64eb8c24f9364529b7f62990757840bb418ec5abaf78afa90542003a4a22da80 +c0252a0d11028647001beffd1d62c42900c47169c083d23f94d4187756a07563 +623beca6a69c5fba9d31d49200b9495e2890b57075009c0342f4bfaf5f3a47a4 +9fcae54b8ccaa3c00114513bc2448d11b1cc8ff31f3937698fd40cc221a09663 +f6688172613d08ffc52e324f13d1609fc2e28f9ccf3b3a427b740e4ca9163d2d +8971146d485d0f4d74624e51b16aa8adf0ae3d1a5ab999e76b8fa1e573d6de8e +9a82462893ba03430facbbe10da9bd40ac580de81cd1cc1481e2b12040fd1eec +a109a097255499032f8e99b116ddd7ca99f096996446baf129f6c2df2f3f751c +f916591fdced3e6f86599662e46965250d7db1fe3a6bfcae64b23ea1afc10991 +9008c80895976491b9cb22afc42388886d626f4e45d2e78ff01a7fde4460b4f0 +c01e9437a83182bffd2b2f2fd7b66bba0b7410dc475987a3fffe0754cc217a26 +c13175c938e3f403e540909a5e11b4d78388a98b8d7394fc098b466d8cd41b41 +eb19d975da3e1a7b398a98f6bc0255b11e5a44c7305bc48ddd6f30afc357582c +b03141821bbac69485b9160261019aa97cda2e7c0d0580e0a4cb2a06d9a78bb9 +bb0c45fa302281328b2e3a3c639f127e404f424f05540bdb16104287cc6d201e +2829cd35adc5226ca37e0dfe5e33dccb4d444e07add3662505aea5a835c8464b +38bd56f192cf929341e20be9bed44c48eca5f8aaeaafea93364bc09a437924d3 +1a73b1a7d94b3e65292bb543e9b89889f8113646152219b2d096809a87fc86bc +362769bcb7846c3278c5c3a012a34e73d3ea6b75c16f0eaa43ac2767725c459d +98425e9199000c0dfb177e3f0d718923763ebd4807e772eca895bc6768b72a35 +4ce7091f3009fbb79ae6a32f6c800b775967dfc6098e6d7791d623a9deef46d5 +b4d5b929508742e1b1d80ec182af65aa9b3f824752c719f7f868ed122ce9a671 +dc630a523ddd69bba1395e8ae1e5c5e09b3bb840b732ec77cb58e0a409f723ba +2f7ac1a687be06cb1f44770fc24089fb71cccfd89d600324cccdee8185bb35ec +c68f558f43992d5d342c75ab608b1d7aac0c54c906dd8f828082b78dbbb87512 +ace7ee2696f4233eb9b7be1fc1161367ba18e7732a6126c761f826a021020bcb +d730db24faebceaedfc407e8a5a8a6217fda4123ba2d73ac48ba6387695ce65d +432b8b381e70611b52307ad0d70988316ba3b554080e4433dbf749b1f1378533 +c0d75845b1b21b6d6392f8fe8b7c386aa79d78f732df7d5d42dfcafec965d7c1 +8ffa91f2fe706360ef61524a7070376f76336ecedd9cdda18757db84fd09c3cd +39319f2f3bdb3c8439ac3d98f5dec67e2627545956580d39be424bf0c3125480 +921b6972870e18520f1072d0f20d7cc4d477574539865b9e2429d8995bab8bf3 +3d41cf85b32a6bce7f766fffe54d399be503d7d4310e9e39aaa32d31a7831817 +58bc766d3c2b53b2ba809ea324a118f3462fc9b31d6b0c84b59a0ffa57b95229 +70744b835941646b11baee6a2eee6fc8d7679081647860804f51166eb9081942 +d2165a3dc4f46981795609d095fe8b2aa8af73c59e72c3c823c6cb330c878375 +a2c0d000b692661825fc5675ecb1d21129e48507d85e9d77b78b6570609c13f5 +229399c8cb0e5809c0e2c61b589d7e4a6ea418ebb78e13a7f3246619c9b01fda +5c37b68c8f8023cca53be56c331f26e8e3a15c1f71b03e90ce8a10b5e3868d7b +53367c9fb5e503dc2a026bb2f32ffc3d83d594cd35b5489c75a71c1bf0b5576f +5661402eb416e30e22d780d5952d53c176c87593e59c6a762b917f50733f3d50 +27f4d324cf382295ec0f2e7b4a68a809091247f7818f82f704e9daed8fbd759c +dd6cf15cea29938d2858d090633276a985b5c5b946c8e79d508c486c3546076c +bdd5c8d0c2852b1cc69816e8b475fc0cc9dad0725ee623f4d3cd88cb106722bc +d175178c5df2ee708924be190724ec5f3bf7a34395a42c8a473fa98c67e5ab29 +4a3a7000d6c0420732c0d2723155a7167661361c771f83619fc8dca8d2f16c5c +4f061d9aebcfa8df098ed2ea7060eff01aae92099cd93b4ee49a0026fef35952 +042f4525c7afa81c7f11bc0687ec919ffc82e6f30aee26f3269fb8afd73d3afb +d1ff1fc52440a62586e14e94a6d02591e83ce92d39e142c72faa7385ee67c9de +3b9681e3c166773d2af66da2e0ad4ae3b583b7d1c796f3b8fc1f33f5b13b43cb +0fb3b87042b3b7f168912927b00b155b05201955014afa337b1dd6cf65917a3d +87066e286356b7fe565c089ddd872510fcfb771d0bc8e090afb155743db0827b +e809ced51d8913022e7d949ab42dced250e121e309b118320dc3d2b46b210c43 +057ce720effaabfd7c1579f7f2ab28d57879dedbcd8726c6d0e592e384987e8a +6669b64ddef2594a23dadaa795325938fc48c57a016cfe2a2422fd3e68ef35be +25280625fb975446ee1bccf778933b3036e146ef59991fbe79d9613b0c9d5839 +6c6e704aad88ad3eeb78332fafe378d8feb7174549eb23e2ec2232406e71b447 +4268e9770e9de360f66a68388e3ad516b99fb6ecb0398fcddb404f2314c93852 +533af69d70a896c05386d68233d0b4f628e410aeba52b30c95c7c1a5e821fd96 +f06f753521a12846778d9433cc283977687b418651519bcedd858f45557cd0db +31b80f8160396bb957223856d0bee2bdf03eb24245729bfeea0350a7d54cedd6 +75633ad93688b75d05e60de48956a0385f67b8d0a276b16a121783b7284aa832 +2842576e749d4f68c51eb75c913a88d6ff343dd564cb2650d3e1917b8867a350 +547914966f871354e653fecbd7b36aa72574572239f680c4dc07fc2fcfe47cec +3b613d5533cc0a8f092b7d94f6de89d0888e03c9ae11f4c31dfaa97766c29c7c +4acd515ca47d6ed0a3529f614334c26835a6d4e976c14ab910bcaaa7b36d0a23 +88259a5412270ef7d7ad5e193bd1fb80116876572be64e5ed4ee0655a90663ea +3415272952cd2403d3472d2796ceede3a698257173ebb32c88e7a8cbf07044cd +c7053257b8e58e97e15004238014c2ac5c29133469df69fd8895251a131127dc +879b31c585a599d4d5562fda8e8afbe0e95e3181c49b4ed2311f4f937d3257e4 +fe1e001716914fec7c17357fab233efb81cc67772a559dfad42174174522af25 +3d90d0c89cc5dea2e84c35082618ba10266e222475d5ee2197824a7d59523857 +d00dcaabb6665ffe310c7715d47c253d4c1363548865e13ccab1e8731961e43d +7d60d4e0f52d6bc73c1acaee6fe332f247f6e6adb84991a03122e3ac849c9250 +239abad46af37f676d73b160d653d43d8bcd21818accdec68c2ccfe05b767c1e +515a70d79f2f4e3ed6ae1e4dfc0f6d260d1445e72b22b0b8043ff12d06bfa975 +c3eca74e820cf051171a008e87fd3dd35926d1dbf83d92cacbecb6a5c46eba70 +8336e695305d3d09e868595b7bb0cd2113cc4b5a8fa2a3fb82d0b773c29f9d7c +72023407d0df8ddcf13f937491ad34554535d82b6f3c196c5a8941c7192aae4e +7c984fbf2f922cd11ddaebd62e14206306993bf5d89fa28ac073645d0d6b5bd0 +523d94de2738df3d17c9916f28f1f917ad924981bedc05661b9745c426b626e8 +1c80a0993cc265142aafff11cef0ea2f556fb8b4ba5f17e2146250f7456d91dc +28a5fb4c5359819be76eb2e5072a6d7df64fc87dbb48550481ce0752f8961405 +c67f93f277fe77cd78ea15fa184fa70f352a82508ad2fa66d972ddf49c08d5c2 +035f34539f9e91fb89cc28a20e34ac2fecfe32c6b488dca969c872e8a8b83889 +41c9519949e3e3417f7d2c6cc96fadd580ecc55a2304f658ce3a279db4ca73d8 +55c7362b043afea5300915bee55df239d1ad86f07262e445bfefba3e4432f12a +25c4f8f8cf15c2476d11508794f3399d685afa08302a4281e3659fb0059e056a +f1526dabef35d633231945a9bf0fbb91407df2b800fa0ec5de9d9f98998fe26a +51767f184ad3e3e96c7eea385e948372e9ff8f084ca0ea42aee6aa294a40d65a +1b8b42d9e60256d1931abb4cfae3a9bce173db7153aaefdc2938e367cc93c0d8 +665e701e426304253cb6c6c0e18a892857b2889daf06067ebbdbf6ecc367cf48 +38c528d4b1bd8880a26d015f7be69d4fbd200611f2c914916c08e1d26e0dce66 +9d53c8863c352d1a0816ec77d8fc422ab74f1a0438f2aa18b3dcba27f25ee916 +07319cf4b9a4d5bb01e5f47d8bcc6eba7abdaa1d5d28f5bb68a576e87b84a8a4 +c137fa9351f1d335316d242728c8d89f3e4347381696b119f82ebf1cd96860c3 +616a3c7621e815d686d7e10c4c09e34b1a6381de3698e8582abf7a1c8194bf24 +bf0a8a673a9963cfc7e02a016c30f4e642de3e2ff775b15c7e02cb07d0a96ee4 +a92898793b636e3ab616742ffa1e48215e19b1104a9c3794a0dffc54e43d3121 +aad99827508566c232737285acfc38d8c9414335fbbd8a08d9b19b8fc0676429 +81a1ad2ac4e0b5fc0bfc1c843991619c8307e8843adedefdd6c60c93ca9d3af2 +08dd105aff64eddc47cec570ea24608e43542dfdee00ad3f60d917b4fc9d4e48 +5a6773112b8156643f2ad4dd4734e500e459a05c245399b71b0344affbef5e52 +6ce03f19092ded9a1832c68ce71e95bf15dc2c731975b91735e6576beeaf6d78 +b694fce273598ed927c67369dc061372edff607f367e6cfcdeb9ed6ef96784a9 +62de6453795c5938bc18cf6e5a19c547af1f69303a7b02bd747ea30b44319f6d +ed6773eb8f90c35ef22f222299edfa17bcfce15a88c48f63884adf771ae49431 +eaa7d0979cabbf027cb0410f6562c7b037e918299d628dc9aa11f0ee246bc3e0 +fe784bf70453b9b2ddde668f2d474821507573434f84a46e1b1f6c28a5f1ecd7 +ee1cefc4067d1c234726e772f6829166cfa052836ae8cb5ead8e1823437cecbd +45a091a735aa1be3efa3ad89fd1d044b3fef4fdbff6148c7a9e24b1cd1048d89 +5fe0768a47090dba2ecbb66cf4c8d405f992b0e2a24c03cf480f77a70cd8efd0 +530a73dc0b0c926e263ae6116c7b9df471b71f0f650e46d9a84ae40763f14009 +0cd6bd62e97825f463e21cf2cac000f58e3544368300d796ee08f7a6de957dd4 +8ebf6fb79e91b4b5336dcc829225d877eb09052d011fb5f9c0f8a1394c9e4b14 +71eb0097b55369771caa4aa4e2920c457378d7f70c61893163e4bb2447bd8ef3 +4f6478da3089556099aacc61f5e41cc7b73af9c15b25ae0ed797c1ec31f2412b +9a08c19ce90878d34fb68fbb19f0f66be2c612a56ecee5e312a6a7ccb70bac88 +685bd9a78f0e4c931d5c2bc64811713395af006a61bbb70f682e6760d2ad1e2d +aa802720724db4fad5a7acb36640161a964aa9cf01e917768efb377ffe94d744 +385e81e1ce9261c3a12ff8b8e7dd10db7fe0090809a4761541e59a8af1942a8e +0c67d43ee7ad19c26a3d24c8267c37bb698f884c6a7fbc91713e5610a88882ef +e44ba2671ef3ecc2237df2f7e6be07e85da67596717204e8a86a1bc0683f9b4b +d5d1b373000ca31029591f41ed5c09906dfaa220e1f9c3f5aafdce09f0087d71 +7f246e0126b79821c8f055ea427acaa37ef150d6bbdb984f6179bba05182a9bd +995c63406978ab13032fd8122e894e096329a0afb9e676a5f065fed3c2337ee2 +04b98ccd521cd715ddef40d5d75d46a3c7ce6416be6aa61b8e51fd6374dd9b7b +0ab3728f08daf1918dbcfe3f866296a5a4b9bdc42c2b86a4cf624ba6196abd84 +e5489b5f9c859fb0173eda877a3f539a33b0fdecb066bbf4b5c7df9cf6622ad8 +97808dbceed22294e2ea05aa750ef944a60775eee96e02d28628dd0b115bfc3e +388565b9f8e5780db9c571f6b55593dd84b9a16fdb1b74f8b32d9a613ecef342 +a8bd1bfe0acaf4d654b3a228a1540c9b5d6e20aa5eb25934762e50b7763da8e4 +005c6196f3e89db6e0b8c0802a35e3e94338d468b319ef502de294281a83bc35 +542aa5ed26b440a5cfeafb15044601b3bb5cd6c0941dcfffe3542ef71969dfac +bc23a5aba168c77fe23a7796517509c283cfcb900341a85e079b257477a2a572 +88a3f0651f201d9e9973a45412f002b085e499c52c5394710ae8591ea1ca21c2 +e846a28d93f56652b27e8b994a0af7bbdf7adaae2d5fdd6c3c70a508b5d07dd6 +efd7ffafabb07c548fcfeb9f0eb862233828c466fb584e1e3dff21ef2316d56f +2f479813aed08440c90f05c349fbe0c1378801e30c6b1daa05f82f426196007d +c6f95309ae789aa0acfdddcdbb9dd967e6ae59fee45025e726957534649e9a61 +aa97df76c82cbde7f46edcd233cbdc0ce61922fba824a00fd52071b104a9a3a3 +d28dc66b4e32439458fc7fc0ce9afd3f189cbe4bff296bed6cc6febe1df208fd +1799a808a2a721cdab00a7bb5fc052bfc601d5350d436298816af8d500a7925e +b4baac3dd349a1b2adcae0e9c1250ae43476d3405b9834172879c6aa7101e8b0 +4896cd2098056578af3292355516c06963776d8fcb7115c53da5e4b9e6a19a0b +b9264d8578ef6bad18c4b8d2fc63abdc4202af2b0d932e6b0f867239b072e32f +4fc00f3ada7ce14c0f5b8b147a8e31045409c0f1300b8a599038a5c8aa42da64 +09e6c65b9cd9b595b77cfe5c31d6c9eeb28540bba0494d90939639309d600e39 +55df19ac1383afdd44259c75d24c9110096df6296c25c324a182c7cd8245bfa2 +1ab4803a92eca1586329084df13a0e7876a8e144afd76951ae209222ea41c2ca +d5a17e719a5519f459d7969efeea4fcc85d372f22f353a64844601889739aea1 +245c007e0de8e24d7cbc8c6ce3ddd0b5ac8cb97bbccb45b3409ce101e329b5e1 +f3d221c5086b88e12afffd8e1a3da0769afc6dbbdc4f376eefc485cee2a9ce34 +da4de266cb78083af982e454488e4defb19d79f28916301e86f05e1dc10b89b5 +5ad2b66b5b883ec2bdd3eb2fde47998a3f629f3274b156543b5cefa200833962 +6c7c2d84cd618bc265e01477211bf6e7a93868e48acbb0f69870612b3971ee81 +3e9751556d4d6409c8ff03b3e580b5bb476feb83d9016bf6fdc9965489753c1c +0c7ce46482a9d9f511c118ba18d1bc505fac643ab3a825ae02fa533220566592 +505cd667f1e9cf8da3f8cff570cccae918027d5309ba6c6f01b9096d5493b591 +28aaefaaeab2c648acfe61b53cade9cc9d72985718d85da2936cc80ccc6fe3e0 +fb0d306f8957a9512e727e3462ece44ea1a1f0cde3d11d9cf796aa92cdcd3a44 +1074b8e6979809cc6cc15a4d5436400b0e81ea3830b0bf74c7cf7c5ac7663580 +fd8a839ebe70c444c15274a6c6baa10acdc71712e47d99f1e7b0264b100ccb28 +376b128f543f9a9050197790f20d8a0e3f77486389d608a227d85b66bac0aca5 +fa0f5c3c9f7632620c7bf9c19a86dae5d8f8f9ffa96795cdc2bb9acf3f22603a +e5ed29fa002d202a7fa263f641f632ed51ef433f679bd8780de0b98e99020a20 +9202ac89a242769a93b799d05ea95b49805762144adbdfa086c76024a552cd3e +5dce03f43abcca94ce924661e4d9d74d5388d10a55a71ddfd45de8d6efe77f6f +3345bc6c8a5632342ab8e74c0caf2eefc2baffc0c4d8e78c11d0914ac4d3c300 +efaf0009b6ba0807d589a552975cb31279868731754d507fbc22dd7824200dde +46ff842c9e2f7d06621781a0d77707024f1d2abcd98c329e10c5db5ad41df708 +31c2a886a7da65b2d6f8f7b9521b77095e44164c1d14481656ba25d4dfef8c26 +6edb45a2a50fe1efee2cad6d4e6e9832ca0915cc9c119f39af5355fb8413b289 +0116cb33d4af228a15d3f2951370c24b3da23274e9835307707067ec7422640c +7f66c3bee096d46b8ea320ddc416143aed6667dcb6c13dbf491444a052834f40 +5570fb237a0e1081b8ada535ede51dbc63635716b9f61051737af8be970f5581 +ba8f6e6fcee0d6ef74ff123967c1cc9d6d3e683ebd1e9adb099e2dc0929f0850 +48da683177c7dd82392d21f0a13ad7556ae07eb9fd03870df7968412be97f37f +062a618c336ab945580126a14aa4d07ec336ccc8f3e32339cb1cd0a0d1dd7674 +d35899a1e92bd4b4667f3424182905bbec0ada6ec5853ec2f22b293fafbeaa85 +d1156e5752876584e17b45f887a826b8c3b9a72fd33e70805c9d8f3f03bf81bd +b121ddd4c5dc762bc6c56935919db200c0624f8ba9ca6522a2ed14e9109cd5de +229079a281a5e0e51b805d92bad8b4b7a4473d7c39c784835d051ef45b61ec06 +2866af25cc585fc28693af577192708b1480d517e7cdc61ec7d8741bdda629d0 +d2a0916a6ae0e4037136a12b442ab61184b78e6a8e097a0c9cd2a50ea89b6648 +da0f1bec9ff9ca09a6187b2480a1d6448d4d7b97804c6db05ce952b794174cdb +9576654613bf8c0e1edef4bf3d075f9a353062c8701c490f1dd797e8eed7af6f +1788919841d4d2629ef8eeac78fa5bb50cd9c6d57c8359d9ff8388882ed4c473 +c2f88a56a718b6178ab915a8563e0b0f19c6f377ea6507b11491f0a05584574b +4c6d13fcf37ad1246690ca798f7f9ed574f3b33ca634bbe2489929a14a41fd06 +d46dcb999054ec2c83bbf25ae43df367039bd19876649758cbf71fd5b11fb231 +905514727f24de3b3bdf37701954a3915824290e12561ce42960ff0733a28b84 +41006ac910217a962f6416a3f7264e5e8deee0f0e112c706c6d290eaac43b58b +549b2b25ce0d26d08b9374f76c4bcf378488e7a4811d832085852ff30294d8b3 +e001199c6f0207cfcb2bc7e894119a9173cdc463f3a071b54c9cc42eb00b650d +45a1202be80712aaeedaff1bddfa1ee3a897e874f3a1c88350b91d9223dacd87 +f8438c7a53b0eb1d1b198d7acf540cec9db7aaee3a274f892d1f2bd522738b29 +351a773b93e13539854b015e68f23ddc7ffd9b356fd29e992f7426f7682da82d +37b62e78d5fcb988367c6486f89676cdf6da1bb842fa7257aca7f5303b3107d4 +ecbeaea92644e4b32ceb5a922b70a150d25b54bfe8c3bf1fe27dc689bf0606aa +607e8ac9f62647ee9d2bff659c1e08542aa99eec29a2bfc031215d31f37208f5 +57d7b09ddf00c95b78ebeb7d5ec1242180379e225da9848835a2df213901b148 +a9a0eebace661d6a589f9393950c4d59e819a975b06b6243cd7d024c92a9177c +955f8f4c2917f58ff30ea7c8a5a0a07915865174d761aeacb5bd38e5dff4b2bd +dbab66de5cf29eb9ca549dc0db0513087060257c98fc5aa5cd27210e89076b68 +3a5a537ef02cf705f04b1487dd5ad6f7686d5c27a7ad8c90678cb413c27c5808 +95ccbece717ba641c01be95dc3fd6bea33e4d25a61980a03d1da84d9031fc90e +619c63ca08ec08a67f07cb572034b93056b6202173ef2595278f6d7cc945aba6 +33f3419df0c07e31190bf104dbf0fb5e26afe4426ac7b07aef8eb511707fdba8 +742f3f5e30054e9898e56d9b26750f05b5a2cfd7744e9d99057088df26e4f584 +a4ea8fed43ca5d0d4f09daf5898b70e435ac5aa0469ad3ccbdd6c2e6a2f61bd0 +f30782dc627110812424f991f5d6df1ca14af401a6cc1896addafd74815ca502 +6c128f945d163d1a9692af5c167cf0727aaafb4f32f3678cf28e11a04c3f27ad +6e062b4af3358e0e83298bdc7a884251c9d12e3d2a4e646a7e6a9eb126d382b8 +129214ab7894404fa1382add75aaad04d344569c0d4f7bc11cb8352a332b80be +142c68f821042a02f523334fe54c880dcc9536a401d58dad6da2375313df8d72 +59addb84108ce05ce6cc89175b8277c0458daf6cdc1244ec7e547170d4ec5614 +f3ba337c544ab0113acf18280f611f798883fdf11456104f648f364b74baa09e +f1f5b8ac2522bede838ddbd30f403daaa718fa1717a427a4a55df5f13bced40c +88888888885196b991992ff2e0ef850034b6267a5ffce59e9961c204b25957e9 +985268f865d3d9794459eac85a5007eee037e0a9c0f105429b01c836cc2a9bfd +51841ebe84bbcd25ac7b7c9e42a60834f1af0be57294e26d52a5daec7232b9b3 +fe8b0e123c747e5d5f3d98ccb41cb341f607980b0ff4520e00842fd1b5e18032 +c943d3466cc2dd5cf569a7c3c24dcd3cefe6fd7bfe3803165c38608d139b863f +72232b27f144f59f2a99174c12a678b833c9630c338992c94b987b2c8b8cb019 +39e71569dae671a735a4599429b9cf086b8bf08996a9bc5d459aadb6d988193f +e68ab8d8d03dbbe90d70959a901677c765e5a0217681a70720ead4c92e69f905 +44c580b2c5e6d515d612c75fc38c85463ed307e6e15c85a7dece61630ab470ab +9f3060a2d77d7d2888f0f236d6d9d1f5a3fe7ca9baea663430829982f3363574 +2eabcf91e7cef03aa214bec4fb2d1db5f305588de5de1ffa15f707ceff038bda +709948ccee295a472105e289dc342bb69862941bc983d78918a8a426fda65d14 +728266ed49fe28f07275f15188b6115ea60236c0e9e968b03f545c2aa7cfa6bf +eeff905bc1556d393129ca90c28416c18925229b7d8c6087e44ff78a9ae9a164 +5bf51ea0e46a91a5c3efa666ae144bd7353aa755942459a48769574d3a2c83f4 +211a931398dcd6dbc471ac35aa741b70563110c01cf56dd68bba9fc79d4cece3 +ab1674aebde0ca57d52df24047cbf25600c6285db9bb31c6abcf8c0820202eb8 +0d1913d193dc82392f65bdb001706730a966159ce86d10e2f2ea75c839d0c3df +02c8ba2ade03bd5a0a157de7fd57f5e6572854fab40f06c29614909a5b7ead4a +583ea5bae59a2057a48bde0385cd96862fdd2cae7e74b74aa19a24639abe53a6 +69c001ce6b95e03c09ccb66016c70d8113439d1c0cf5b1d478591146ca454255 +c8b6e8dbbe49371b3ebb6fe5d1e736bdb85551504c6690405aec5e088273f4b7 +ba0ab4da907eb987c1f05a7ac49e2874849e4659aec28658a3fa8cae79ef225d +5542a6f2f8f87b5957fbb050fdcb1e68ce827cab703181d6ae56e79554151f8f +120ebd8c6e16cb08c9752f18ac011b7ca71f571d2fb1624712653a7f633a5cc6 +b08a6d13a5eecc52f35eff8c6cb90749db2ead4c8fe3221a8ffe7e5c01e92206 +0adc4a57d322771a90f93e7b907b6a3510c8065b162bdba54c6d0a9b7e9d1126 f1e4a46ca6d52af9edffd961f105e37d653062ea94436fb0ae83437cc2eb3552 -4138d633105a5c05a683e44762de2b4c7228aa08fb44ea199b31a002816d7afa -c4da5fecb9ee797031869cfd18c85032de50c1927f03bc4e3a9effbb2c25627a -157ba593e460784fffab72c644eb11eddf851f7a1734c1f42258e2924f3cf5e6 -e6c4f35ce3bdf932519de9c9056b196fa84d1aa9860824b177e89a9010b04ea0 -03543c24ba237106a435f53b3915f9d50b8cb9a31c34af534a46b2a62e97b456 -72056e5941ca613511c0cfc3081336c241e7e8a172003d4d668a6a2b4c3e6de4 -af178d0a7b8e7f966b3080b2836f5011b09c9ecb771e51ff7d075e5e0ec33409 -d015e3f97284bc217eddee377e5ab47100a7fbd13a66fdd1fcb9acfc0454f35e -fd634363ae6eef2d18ac8b15d4e09e9cfe42d75bc484417a5910ad636cb36d0c -78699d0d5143ebd1d652501c5ccc2e92c1d839e827311c9c8843e33eabf5f499 -d4c64b4503e737de8d7a84156a3f6811cd40bd80f1173a2691193ff333039aca -00c4a55f63c44d2e8916cf786988cb22b7cc5630ef25cd571c8d094acd0f5d97 -46c0d97acc09e143d657af6e9b6f19ab32fc1d6b6c385a2e3c483710dbad0d17 -b5d3c7844be6ba6e3743404617074e8f36022d1cad3984a19f3f86bfa5f5873b -331c77387f77ef84eefe9cfb1364986812950262a63753bc38b56788914447dc -c02edd9072f7a2638e66a6e39aeb3989e0e458a8af62de4ce19199adaac7f6b4 -11dab833a0ef6148102c47175aabcd7f9cf9e2753bd3e6e3edca4aeb489278c2 -7f46e9e0dd3e25bef73469a492982232314e0631eff76367d7ccbd179c5e0299 -751daec3159100873c9ff23eb238b1b89b6ad090b87470be5c63a634a81326a1 -749066255f2d3a2f1409f764c7c8220c96cacd114b3a693c3b14a6a2b15e0385 -c94490de2b84dd75b512de2009f44ae1deb901f35590feb085f6a8c5ee526ec5 -1532f6a2029b5e8c21a0754e4040c3cfd3813057833345de20114743a50682c5 -f47105345c8e1695e51e7762fb69e5b4fc118aab4a287832e2b9643aef5ddb78 -a1abf44f506bafa649f89bbe9e43a5ce3c8a180a7512a111c0644793efb435e3 -d0a627c672fb58b0c099c9140477c08831389a82794fe542a66bfebaa036d078 -3ac1100e7fd86cd4a642eb98501e46ec849fe33f6ad48d2e9e4f87ea66d99d0d +903ad787eb000ebda9b7cf38c3895051e48f4ef2994dbb653ba6b5d33f339c38 +780cf7f4b8d0d3c00b079d56ae1e4124ce38589ade63704f808e18993deab4b5 +9ad533ca0c354d3d84d0a13e7e44662a3a9811ae7406b797bd328f782d0b7e55 +99caac952114658b7346bb27358582bccaa3ab9f24543ee981742a0439ee29f0 +bf3211c48cc464fa446253dfe57624b1d520f99eda607f3bee396acac8181c57 +9b09ee41fbc37d041a35a7155f2bb063bf221be1770e55c036fb1d0db7990cd1 +4a7cae32b6d742cdad0b8f9d5c303ae7d6991a193fcca1f5030f41cc04b7ee8b +a12860c888d3eccc492a58348f204fbe14f49297e102d769b8a4522da50e9d6b +9ac9ffdbfb793aa545f0710c0056eadad6f662c0f549cc9b8b67acaba41ea607 +f8796c1ebde047d419a7db968d2638805ee52b40907ae451437aa0a9513b4ae0 +ae7c92b04cb05f5d8e869bcb02c0fb8d9d1c4cd845a290cd435c16d315749405 +41a29ade9ff476e7d75c431da8615953d5b3ad91a6b4ed5fa0317ccd80bd5640 +6ff0ada4b8b06bf3c370219503ccd76a0076e60e4f0886ae86a362621d51db72 +9ac8b8d081c5f3e696b957d4444ec5718562984cf3b051916a042c584c2a5713 +e141d8355689f92037da304b20386368bd04f707bbabc072ff9c61c19b186dff +89340f47d618eeadebce54ac293b9e0c360b27fdfcb1fc1ecdb3528fee8404c2 +f8c8f8db9c402362dd6b5332e81debdd0e4ce83ae4224238496d9fdab730b245 +0f1b4b0f3c6a68b2b86c98808f5ad6534337edda484f3289bcc303754ec0b6d6 +13fecde99dd23f1c5ff5c8130135ef51d7583692079d7e94a757095a82db0ab3 +56191ed0534dc737e2ef6fee6e99794c6ab33eca29411bdf750eb9e234234da9 +fe7f4ea17f0060cc0e8b3620371c2e2ce13b4e49c47901f2a3d587771d2d373e +3687b28d94a0d3678f40cce95a3a5a3dd93e56c7ffb45f1f4419976c9cc58935 +fb8d3554101b708a750b58324997aa98d73c08886517308186af962cacee91dc +3a50f8eac4b0b01ac6b0815fabcc0af1b77b36d3586c90419f7ac6adf0b2b6b6 +a739d1bb89c0af34ab5538ada2d0c74a086fb18f370a3b6103782ef715ce73f8 +1e112179d6783031f1811071808bdf9406a8ad2cc99745465a79293d67ee994b +a9878880b62fa1c6f86db005d1b1f0d1615edc57231952adcaec28210274d336 +2032684cc9136ea9e179a2fad06809e16f5522b5666fab7adbf0566cee482eee +8eb1eaf6e5b17328b174bb6c2597f5e2ec3d1a9b24e68c467cd7f74f5b83b37d +78eba89d557927e7350a2fdc8b940a81a81c10e791c6f6169b7ba28fd8e3cd55 +05c6c3956d29471641a64c742bc20b0df2f0433967a93551b3b44be45bb1940d +515cabb2025b42711646fc81a651031dcfc2f97c70f9f4ed3266a20de4de2d51 +1c89165bf0811a71d664613101469e4315137e42fab5c7c6286372f0ab3f038c +8455798ea34fb3a8ddd3a3d70117e3627caedc79e2b8e153f6dc9d90e4030cd9 +75014b0b913c56ddcccac98821d223a6e259d5284e05ce7c19cbf4ac7913f84a +19364cc29c68f5190caa6da1c8f8ec23c6b12db4922ec4d72fd5a8847e343699 +153b5aa84498d5730d45d2b530dd395b6f977e6e83a0e95581d47682eb9465c5 +d72ac7ce1612e1e0ee0b9f9af20c2c57d0cacf5b2c6f66e3df799ee8a1d20c86 +1faf3dd00c7de2679e2cc35898c98e659d36f73120d72be97c81598e13b0c4ec +a5deda9df42f0b10233d7bb88827df41b63b275eac9ad37df77b42a5f875f068 +bdcc76b394415bf035f008ddeea997e2f911d6402b2d42ba01706b2dcb960572 +a4f3a1c858c631149a0fb3035455d4170148e43b302350c2fde8bb5462c53c7b +35b76ece18e1c4d156d970f86877f34ebdae6592c60b8df068881d841bed1be6 +7013f8d0e29348302913b39e5375264300ec218a60f3edade5fec9c958e2595a +a5a584c1bf3bc1ada56598d97506e82f38261440874af90dc6c21712bde9ba87 +63b6af2f0253db0765575ae7a46c76e329a5553b36f5bf1d42737041181d8f10 +e5b9466fd3be35d969f4620fbc02fb8d5259b3246f5ca759153276a5b82570bc +de2e69890984836a8f32a764e3023ce648fcd1a1c5fc0d6a1d2ea8446b771474 +b0b7bd49d319d08330ee5633b0950cb7989738060ec629d4449e31de66dec814 +0988270f512a54e00c7978aa2fe33b512f6db3744433a19e21d22c95fa7d29e6 +aa38fc0507ca3ce3ed337906c6664c65f1974a2c900d7780cbe2db5bd7082d65 +09bb5719d8be69ce54d400083ffbb9a19bdec1c176e4a47873886d800d557864 +bf1f5733c9ea086f29b9084d4d2d3ce9c6206255e69cef40d6f1f80232b7f744 +95200409c9cf6f13a0e4ae6149a16a4225c2e988da03c0199974f2fa41eee059 +3c49e3bfaf3fe1637fc8b95ca5d4517b6c17c8968565099c54645214376e8214 +a0a3c22f800e7cd63b1685d6f670ea9904e761b66378e373f4ef6367c6f7fa75 +1543e279d50fe4122253e8cd951cd9058aa9bef4bd214f8191eb625d843b4704 +f893d36a99e2e7c7258af907966964270e2c7d9505cd9b0192a880946f94846b +80a119c5c30eeec46ce473e27e1a24f0541e80bfef5b38ae7c2d0b3526f11abc +127716b8e17dd15c3d1f1028fbff69ca3301e060ae65febd72fcf9ad16378366 +ea58f66533b297b91dab622c8ee7692834b40b7a2ceb1e932f34e4882bd02d33 +db3618ad90eed4b5af7fd9e556f779efb55a2b5de0f96bf6fcec902aa5c1d1b2 +fe7a7c15b26203eebfb146daefbd85c60f7afc83689a9f1bbc3002cc574aee48 +beaac4c5066b5def64a42807784e677c82daab1be5d6b2a8895e824712c5bf08 +5c57e90e80b5793f52c21bd8bff6524031d424c389fe1cbcdfd2b609b522e64e +abeba025a56d2d32643656991dd4594729de26bf9800fe3d1ba265935d78bb18 +e2864c178680e26ff4467cf616436942b070fca737d344a6b2adf017319582e4 +df473259f8f64c555fd042758c28301c96c05b5e076c155d76a114256b88e8fa +98622237d4e7ef1118f685e1cfbe8f78937b20ae02dfcd3a5859d6a4f1a08c81 +4a66e0756a826dc8552acb17a13d9ad41d7f7ab8b15d54182c0d18146052e08b +7d6b291fa96e78287f9e664bd08ffb82e2c0e15275bfe4d54283bf5eed34d436 +d59b2f5e60af3242d0ea7380c9b7941e707493efae476bcfe1e7d37707282bd0 +73da360d701f24f68fa640a3792e2259d46a538c640cc02164005d02fcc08a21 +20eb18e6241b16ddcbfde83d68f42ed4c7a489c56cd5f7dfcda6a55cf08732e8 +c7b6a88bb36c301a4fff0253f841625be1ff10483ab8b6430957a263f3543a22 +0cec7d226aed1c3870e0de46578db89cb7b52f485689b180e13eebc1b0c72813 +54d1be5d4f90f64ed1834801b11f09847ac7a4cc70d8b8ff14efb81d722aef13 +107b1923d8125186633f39209afa8d64fbe41d611f40a9d61f8d798a561366c7 +e18f48c949baf9e2c257586a75e001b3e26e5e166146b87081310fa425e41bf7 +fd48b47df59eecdd1f12e8d27b62912d2859c95f7741b62538a87cc6182afbd7 +fe6d83bd87053e0ddab426b5f1035dbf1daa40f29639d3e35e678513706077b7 +18e689caf0d26182e5d901db06016671c4b261dc5dc328f85aec98e510c892fc +1150dc02fa2bff860d6090e60e05b8e614f8c4bd0771ae0264103ffede3ffbac +a88c30bbd1c1a17a8fd2004b7ae52508a3546c1c9ae85a94031a5b992ad7ecf4 +7ea89c98c44837976fb1f866ffb8007abe995f99965a8fac9911e29d52d3071e +b863edfc7bba0538f087fea2c8763084bcc5b78a85b9190f039bc21d5fb4077f +9871c8c4b70f3c8a2167a56dcb70132d058f77460bcf36d8cd154622c92cc38d +cb1094b3c10ecf5e39ffed13e6cb3207ccfa19306ab09205fdb2902cbf534ca3 +02c747abb9322fa822dabc623a408f141015f324fbc237319b2bf06b4e361b36 +75b0addb10ce5128ca2540b10a4b5490cf4781d9d7284cdddc4ed1c94dde861e +01e46127a9aa9ecd0b836c0f313368e590c449ded8d53ccb78dd2822fe3448b4 +2ac0d276ccc9158d896d32696c318abbcbfabd100df3bce56fb5ef9a0846457e +0d304e551199d09c277bd2269ca9e9bd02dd5267ff2d97373295ac6507337913 +902e9a8479a71c5e97eed59cd2d0b3ebb984fe169875946899679fce177a3e46 +1c503f5451d3e4e399ddf8a6aeda787327a78afd01e2ecc161cd74f261297244 +09c21ea5589264bc17ae372fea55b526138deacd72fe2c5157a2d4d076a12c20 +03efa7f2b0902c6c1d23d0cbdf945b71975feda3d65dc0cb0698e6b7e552acf1 +6be7a5e610ad76a763eb69fd4eeecc546b1a5bdb539226a73d857a2469d5f0b9 +b2bf524e651095a0c04adef422b2d979a079dc64a45b9e538679e2fb06d516a0 +b9555893a89c1d1afe281ef5b86f8d5e99256c35bb0103cdc6fb8c5a703a0d76 +bae8c033dcfddedab92dbc836025296391f739eb9844db8660bcc04824d11e14 +42a5480b2c9b2fb46a428780f93203d742ae216c466ea9e03c82dd9cc5ef2121 +194151ed8df351bf35cea9a93761230d929ac4c868e34bd2794307aa4afb8ef0 +8f9750b86c285722a1eddebea0ba0a086a477d144fc6e5ed0d04fb46ca9c6558 +ec89ce698fbdbd8d16b906ee2c41cd73a7a615b3675fe8fd7cb176ccbe202b14 +b5db1b8b002e24497e316afc1d3bae038ec0f01e27858724fd80ead5b211f4a7 +d4b37982bf34d067a2705c1b37c623c9a14651162330085ad3c60b62c6cdb0bc +01ebca32faecd3e433a0240785dcc81441ad546a1a58451b6cafcb3a4b58ee04 +b127ee87a3bf6d2b4a655873a33488ad0948feef7ad1e5f17673e1335d25fe31 +8e5185048cb94ffb141ff86ab57550092d0d9e9ea007786ce95df1b75520c428 +f4637d5fe3c34c72cca183e3850bf96d2bc0d69bc2943c70dbd9eac34f039b24 +0ade90373919230062ecf8844c7366dd462c83f40daa60398c873b37a7f9d56b +03f3f4f5e746f7755a2c3fb615302996d540ccfead3e8f1c34fe3b202b959d93 +0e8dfbe308483b9b6397f3e773313be0dfd1533a2fa613bc09af5aaf872fa816 +98b3e5f730dbb19c6d3f0370df3486127a14dee10a4e4e37453176b8d1f6569d +19fce64044d9a2506755184188b15a7a486eb95d4c569c88b130695a0de64add +d77af91f7c5fd7197936600222767c29ce3a09d72882e0feff808a01095adafb +5dc659b609edcab9535f1c186163417e536aef43dd6136cc648b51468c523cce +393ba794c58779c1ee7f9758510622ab7f42facf9d0d79be6111259e1a56ebbd +2aa53f9b08da11dcd42d223e7d91af504e8b594a376058fae800585c04e18e1c +1cc42019721917c8a767a7a067c1ba526e892ab20446b86d1d85502a05f113d2 +e6a3feb44f25b7ea4f796fd9f0715d05ae8ae4afe666afed6e1906782da15289 +ef58d5afce5b996ab124b6d8badee04288fa0e2dde01904087b5204a7e64c442 +4774b79f811437fa091a466403e405564086f879d2dc01f45a589726d8a6f752 +bc6dac0eab42c59638a7b0df16e92d5b35535ef6cb925a1cb594d739996b12ba +a344b16e17e66b8a6d438e3db2c225eccad7a1bde87fa7f25796b99c34e4c66c +2cf42abe1ece9b07360cd8839f9e0a8146608b3df9f63e0791af5d49d855a6e4 +099dafdb96d3ebe65b795b35ed22d67a922901b6fa2b8337c92289ea7e4699ae +6c087f23ff7c23c5f350a9fb283a4bb89fb4453520519c9350a3fd142285fa44 +8d644475a04da3daeb324a5d3c6a3ba2c4c1ebb36a7b0985581bc249bf480089 +c25f73bc82e3d7d6f4197d3a7073c5f84599bb6ad646e6b543c0b22b2446c3e3 +e98ef24456e802c084ceadaaf99bb11d110d2380c94109ecde3d44249b4d1c07 +8fb03d4b9df622007bc138108b6a38e9bac71f91940676029da29d89504e72e9 +bbf75d3ae7619df58a5d66d82308a7aec862584131cd32c5da7f4ca28b37438f +2748f15f4ec9bf5574ae925564fc564f0cf27054b7b470d164898960f2db5abf +b7205e18ca1e3c2bd901d87170f08e23c2dcd3ee9f9ec3010778372b9dd2b527 +b9c46f9273edb5371ebd0cc9cb71f4fdd299958929c10cd4923ca80257afaf3b +caf42ad21f31c12de754242ad6b282a48a8ceadf3242c71d6192385b238e2fd7 +e09d104e718c87e434ddd69f348027b4cca04a464948a467daf1d3a2820ef525 +363d88272cfe019ba677fcf0ecf023dc2bc0fd5895bde423f0f411eb198744b9 +57b8fcabb61b38cd629195cf9942dad532e8a23b3b43a5efd1ffe446f39accff +a826ea559284f10ac2d281d5e2fd3a67ef192ce469004db4ea9dff498da7f24b +e49e348e0f948e807c7a8edb3618ec36ec1c6134bf88494f21d676d91c2b2f68 +c5b1b4d384f12e091f52240eca971aed1079c3746493bf768b9ccf646acb3f6f +0e5e00559933b5929a632ae4f9d86fcaa6b26d6adcd06438ee1594300931a574 +f884d287e8c5c00cddc714bdc2367b15de83bfddd0577e016c94e8c51cf654b8 +5df57513de99454227c729f4f48880813ad89a6149406c89cb34202a6639e782 +a66b76273f2e5cac09912235f5ea902c9b49634c685e215d99fab6782428e7d5 +d2c58b18c7f724fc92031de6869dfce8787b6330e4ebc9c01856b977eb6f33c5 +8dcab0e8e4f37eca49f2468f75b6a5fbc1345de51df17079cb804f41d232690d +3ea448f664ba0688446ff4c904229456d2be144f5a1a4fc540ea107c3407020c +043d26be9a82e267d723037d50a799b98bce4ea638c4282b7ba31dcb3b1da376 +2879e934d1ca3c1955cddad5edd1b46b706583065180bb6a1d9fe674d1ddbd1c +2a57dae85320543d698e929ad435447f58e772b1e01f56366903dc43702ce609 +652dc85226a255c97233f1f5e3ca922b9436e304d326c1eff0d83a3f0e6a865b +6b4c3f34600bfc6109540d73963b8d7b26f9f22b03521a2326e59e2f10e60a70 +57a7c1d46ca2bd284d8dbe0f415d0f961a6b02bf134cab8f480346551a028ccd +8d74cdf783d64ec2801a5c9018a3687bd644ac42d5f3bc77224a47b90dd359a9 +87a36b486397703f39846e521f2e1a54879a8b13d7cd70d4f8b416da6da2e500 +4cd600a052071b7332fe6e1128ae57cc26790380e0d608e67e55e0efc0ef0857 +de4b8ca529bbc4174315df77d5c5b7c4aed351cba404b04ac4f48145ffbd0e74 +904d039ce2f3825ae1fee72b75c39c5cd26247bf887a3f5378f57a49c13d8875 +bc14e757792bab302541f79ea24e3ad24a70bcabe2e77d2af46d462e503ce98d +3be36e39f1aacb33a2b29084ce99a53398193ae5ba2cd316f004eaf527f0c73f +65d249fa9930b31c192034e7f039e51c17e0a5ce9470adad12eb2b1dbef5a080 +a79108e6371f378c52bbd930eaa5f594669d31abcf58176ab582bcf0d74ab652 +f0c4d4594c70cfe64e2a0f3d8ccd8140799ae1405bcd9e9319943021f132ce4b +403238ed374d135bea06947b2e2f7b3af296b101ddd6f829e6fe77f781f0805f +bff51b4e32623858199cca601560c47c7a67ba86256be224eb3214c0b972e448 +2ed7b335eeeb9a73283da91089f03c5179957b3630a0146b4675aaf1aa316f68 +6941caa3f62f5462668fce06fbea53b2e078072da2e6fe832fc9fd17ac97d399 +fa4592ebe6bcff70d8f0bd2365af32a3713dbb06d7006993c789348ce1992ae1 +ab980ed336134e2b8e130e44b59433421e5ad9a0af0287b58f71ccc5d450aef2 +00d60a0c0a8b1355c15931c3a729ee6d966bf62f7b18171746a75213a17d2c5b +6dcdd3ea6074fdb9e7f33b965e693c53fb6b48d88f573b085475374d43b30746 +9cf4b1c1f59ee56148b5254972270169a10855bf63d6db39e784777541ce700a +d2ef411b8867a0c06ec1ee1fc060468072068b66cad2f37d07e1f19d3bbfc774 +a79e61e5456d0580b6b010ba1c711404fbf7a6e9be3e36270014f5653be9ee40 +999a43a0d9b9409ce25cd824fc57499480d8853aa8acf2109f4d041f4ce7015f +01b9735631df4c2953541fc16906217f26a1af5c23e7a2eef345e516a756bf34 +0c74aa73bd8c3dde03268a2447d1df9dba8ff05c48e14e70f62c785f8c0e0447 +95a61bca0187840a674ee36689856c45e6a2ca151396e0b58608aa90008127d2 +e054880c270db5c535f00dbe8c19a7a3303e1a5e4f2e16a00f90bb46b6d5c80a +22f443847db662d39d023dea545e115840c307160df0ea19df41cdb39f11c428 +a1501250daf41bab535c9fe97146137d4fbef4d5e19cf9716c6a12087c37647a +85954b8070762e3a89333300bf650f3be61c3e4fc636ebd7d0741e1046b5c9c1 +2f01956bfdde1fcba2fd926ab53f910fd7c53690000ef871dd333c6aa38d4c01 +91c6d2c8760a90ac611e770005db3c1cdda6e2be72ec6ca8a6419b28d73b4b56 +5883ca99ee4a01ffcb31c462fb1c72dc0bae3daecd46da50f8ec6402088fa7d8 +5b2b3f1ed7857040d575b55a58d32b0322a1741e67e6d2c6072ce178f26c8f46 +4b6ccdd0077738f002825ada3ff4c484c5a7c253bb1be1fd106b100d54fa994b +751e91e498359559ef7d1d455ce1fcce86ff14f4f9b2be44ce290485c070cc57 +bffc60c5e5833f5296c97e64ecd889c8246fdcd9e3febb09ae2642ae7e582e3e +6bfc92ab1ae8323b9d3e8b7527264a9222a03364ca2595c0007c95c5754ebf83 +1c61901ace30d6444b0a85b14b8c6af152353d51759d37862e2142fc90834828 +e37e6c0e8f05c2af030a18c95ce5cb17f72ff719a6c020020373535109b11daf +2164be5181c03742e1bed6f352d424fe32a63bb9234a4e5c5913820b45c6804d +160c034564e18d90d6ddcb9eb5abb7724c43b17a69b2953c9b8ff445f06137d3 +75aca1b2311cb72a7975828f0036fcf06c23cdf0d1f159be20ad98fa68815cda +26ca0a1968cf4bc9bb0c0283bab5e8555f3f8d2a537302f24b48db8615ece41d +91841aff383692268b6e6e8dd4db468b193980f06a11a674593ced444c5f092b +5328b5afc54ecbc36d720317b4d27bf5ccd383f35074592ab3493c8d76ccda62 +cf45fc7796b8fd2f7b6d1121dadd3450aae32c479ed8bf97168187e293882dd0 +bffd60d9b05c57c55eeb9247d07980b46b29363ecce91ec21819a75c3b1f276e +095e2fd1f5631c484bf398d7e00357b7bd94de95e4f887a92623972e08a98f7a +18b703c384e73ded9e2d58fb83c6b76ceafcf743a4d757a89d922b64c59842d3 +8004f2962ed7b8b436bfb922ecd0de64ee6c093cf26a518a9f97b4e248e88a6e +386467b33c0f3148f7531e0ae7348e68b26840be0bed4c51f4ec9a7bf73efcf9 +6819fcb2c558361e42be2167951318ccab1c6b3571d25f8850985094d9d04ac1 +20794f00c313260de3350ac0529b69deea7f69c4849834dc4c28339e2b9d89fb +de275dc5a9ad045a295ae98b8b7b5f113e79e778590a8a1925b597bf0407409e +66e623f3dbd35672fe01ba210386c3f06f2b7ee5976567cb2a26206b14226bd6 +0f72a4a65d4e319055313bc032f98f7425beb91affe1c18c9d55f209ae562af7 +4d28f92400c2ea1b5d126774c239312cd7e0710b8868bda36478149bedd6b643 +4c1065f9f8f548a8ab83f2dd12ea108280bc743fe79beb28a8c530e275129cfa +2a271beb48576c7348841af80e8e112bc91cc4c2e2dca1366d1220a50ff1fff6 +fff6d4a266c8d84f5b84baa172f79e1c4e45eaa49bef1b7b4416affa667eef98 +0c41adc94ce8806bbbb55b7461f9fa56de5895d32e0572dc9a5818d0984d1b18 +4863f946330aa9d3dac343600940b81656e6c59a879beb715a5db248f442c7b6 +b26339a9da63a9132a94b39a087061a5754698f5cbc4ee9857383c8ef07c79d4 +76e3c979f1f7d6551bcca4bb79ea4e4c7d5d61da58cba3ba8d47fd7b10e35806 +7e613d37f7b6279739020b93ed9bbca3b5e8846d7338ec21fbdf301448b54b18 +6802224d6bc1c75b4229406e599a07ae4eb6d51edb699b184982b5eb4d381bb9 +3980310ec8766d17ac9f8288b023a2ff9d5a00c5256d61cbd800ab18a09d628c +102f2c7a78469083b9fb968b5e7c8da17df297b6f2493d5bc2c227945fb175be +29e6271526fe93d3700e91c4fa914e0d4fb660abc797e1ad95c5d4cd6602d9a5 +ede71bb6a1fae497d3fca94caa99b433c33a907fa761ec712ced777b2cfbdc25 +22f279a8bc0df2287fdfc3076c90d91db7b286b3cbf0fd7dce69a509f1965583 +0cc450fc32f9835b45470def3643e723359b3570301087db893075a59c5e994f +a07d69ee5e80ae37a04def2c2e7b0da9dabddfe9baf1feda26a6ec0b9cfdd3e1 +f6184c9f5a5c919956ac39d4ad05118dd219446b056dd0dcae51730bbaacff4e +2636a82421d404415e259898ed307963bba2f87ef6343e0c98fe746948ca9bf8 +d7c45fba692bf57f0a9c5f7241d6a71fb55789caadd9bd024625f2bd480f9f43 +6ea95aa5a2134d9c6185aae6b51e92b4ff44e811cb95577307aa552eda00eea6 +6350ef6541697b2e097886431cec8c2613dbc28b2536301edf7c734ab26bbe8a +626a3586c13085feb31c4ef0d19049f34e79f34e811aa66691642f40d98c7a1a +7f657ffc72bbe5f6bffc9bf31349317a112e6aaf37fa2c7c222bbc76599a89b3 +1f8abcfeb56ae49d6d893de20e722e6aab7fc5dd9208e8a52792af13685dc02a +e7fef00187178f880b6b258d9cf24d4ea626ff8722b33beaad11d4c7fb95abdf +1167c5a5d56293055ad589cda956277d8ee36f556b947e3eba75e0ca4a1ae442 +894952825d6bd511d460ec118f1c8f4436e69d3a89c5128a4f64cc42d6f07683 +7c8f8f7ed6412eb69e0b039b7ac4c965c222ba763889fcc969eadc73b09dad26 +b5ea273032ae34d694c112ad921c2b8638c38a1c7903585b82b604eec4a48314 +0112433201659d58a096a9db311fa9d23eef66ebf81f8584b9fa29fdb89359c2 +3f52bb5e8aa7479989bd18d242c8390a7556f479730c9dc5a82e908d362fafb5 +027a478a4f099be9a6096d719d32c69610813cdea69d0a1f1e72b83179d0fc3a +0c5022a8ecc03a4feb624e7efaab43f0f3c8e5af942bd2802399655a3d3e9816 +dd8e612c3d6cf898deb0333d0d3ee5739e4624574a7cb54baa3177244a0c858a +8ea7e3f69f12b63e0a86f5a1cc3098afc16add4a6fa456b50e24afb406b7438f +6b4095b2acac170547138b28c988d0477b0e6d94d2e5335921d28aca26e9986c +07394777bd2115041214a71e2f22717d53d81c6e6e69f7687df2b4b49b14bd4e +7131f061afd41ce959f7de6370dc52e42bc39174f6e1a9c138153efb8b380d43 +f0c008f4116c32a5b6a849ef9b14488b29490bdef348237b773bc266e433fbbb +57d40788a4a1b31ff6fde785a86ae935dfd7a7cbea09f3ffeed2279a60f49d74 +0b623297d1c7ebdc96c79b35f04d1a4e32fc62177650678056e77377477b946d +70bae10ed4dc6bb9d92a72fd075214d6766eb750fc87d327031390818d489084 +135d993977a161f8a5b694000ed257e48ecdc1ee11bfee7d2f521f4a88227415 +0e91714cc5efd828292f4245ef9875853fa464a5ac6400816652da269d36dda3 +f9c129d6ee345b631a7987abffd588e043245fe23e2dfde3d7c1fb5ba9bdda34 +78e10c08c78c032bc73f74cb922398e1004c512e0b8cc7f9e157821e25a12141 +a6ac5c479e0bfb55603721c86e6783b6f29f1e803e8761485ff80de5ea4609b8 +1c1b1d00192649e3fbeb0d3788791916572f58ccb3cbe5bf3e71601b02ee4745 +df75bf99e20bee86031c23079cb784a4864eda6111f3f451ed992a78a91c7531 +b876f3b2fef63386a8e1dc0e303fb1af91d471fa80ec379cd065b27d2d79b691 +24a9c73a68c88ec5a55a9c78945a3e72212a67e9f6665474894c2e2494c21337 +56da27bdb53127a5196a056791ea6b8b52966912940d63c23cc0520b2d7ed4ef +e1506ecb9fc0c2dca76fdefb921a51bb1bd465e95eb6d5a2c4b1f2957f0eb101 +0d20a23d144ec67f162eb8fdb0df7156d81ba64e0373ac4529e9ea2b829984c6 +8fd19991af0e905c6c8ee2f4e311a27e940a98a09f1fb7e4bacca9379d5bf7dc +fe0b4888fc607c0bd706d7955de35c0eb30e0a99c67963b02cc1f2b2c9900d7b +26bbbd1dd14d3191912520bb951c8dbc9c50f22805f3c048c846e1ed999d7dc1 +8062f212610d05566cf8d41f560655ee4bdf39a204e19e978834de3830593f54 +21037e9441bf31c392f86376a6a80d4ad2e005c3b0c0f8d8ceade7f619179d9f +1d8719a77eeb762272c0dc78e79b49e99701bcd9fcfa0f38ad5c73c33ee46405 d9da15f260de0a73a3abe1ea584eaf1f9b4853374d3fe952bd7f1d43709acf56 +0aa1c75311a5fd663420146c5693d08d44aae832d7a1623b25650cd82e802cd0 +629373c0c1efe99c386f93f5b24fcdbaa85afe494978a4270a56d0c32a8ba742 +7da86d47dc6df84f35e7ff46f4aec205349be5634a95d4e3f2546ae17c22df2f +fa813f12a0e147f4b5d4a185051b59a781d5f1d1b5e27e878c726258b5fe0b15 +9be65410c64f92e93a61cc529aa5b4e55eee7a56c13d8c80d8320fa23283c4ed +6d52c8c6a45f5ad8984183d9296bddaffc4c2cecf02a3072030cc7aefa909e0f +a4887648f6cd372d00f57561eb202cea9b0566a1c01d1f5ab52372f451dc9636 +ef98897bb26beebecf5cbbf0864fb4aff755c4eb8c478e23e51ce80528b3d275 +a607ccec4fdad256f948d083afab8498f4348abf7a25e2d5003b2098fe5e85ef +8cad0ce4183bec55417bf7ffd6e88b288fb47dfce7a47594244481b6fa38474c +cffa83e00069787e0d116f6d219d75e6cb08bcae727789955914828b42cec577 +2cc27835b1e15761c9edb36ba2c3ee086dc79daf6e655fbe8b8beccfb3646541 +71948ad27157fe2f80d177c9fcc6afaf3428f0fcc4991aa18dddc8ae57d84bbb +8d28c37bd01a65cff065a3d0279f16f7251fc8fe51837bbd9d9ed7ffe74d0afc +a6604e4d3e37b514e61158b50f7e72014fc3a16902e7dde50aa810205a601c46 +7f27ae75295c15f1972fefb7955f67f07c9cde459334af8698304bef05a07dc3 +0be531f90b7f03eacfde082f494050039b1e81a651fa114b3cea053b3ce7b3aa +bd14ff7640606046a7ca7899f4bd58fc4dee574f1c11cf328a364d9b99de471d +47bc52671e583c08ffe129d2fa6180ea0d68ce8b92169d9d1f1453cdfbbd4e66 +357225d6fc5a5a8aad8916d35c58c05b4c00af05e3f5e9069a6905ca7f820d65 +14dca7836407782411d2f9d7f9b62d770e0dcbc43d30d417dde6745ac00de412 +087742207b0e7f0d171f0ce4999bb1003ec9e7da29dfcb67d2b2b3590b462679 +24b90706f20a1d3a61603284d214f67673d3a37f24669478568e6adf71050f1a +b65547e285ca6ab1af1c46776fe5e36e20879b6a3d639e47e10d846a5b6f1dd2 +b783ac6f17b3d8e7aee6249a39db9cd455bdd573eef26bfd4c1f56392ed96de8 +cf400034ccfb391cb82148455675c37449fdc261801bb8529c7695d673bcf163 +7a8553f103ae032ab8bb27720928661d1e8002f8e11272123739fa88225d719a +838a91750115716cd9be0aa19d2c466eebe4bcff2da969521e558e74e8ecf065 +71c4918d4b8f216b7bdba9036edb693507441ae36b06d1cef89227e20449b027 +dc1dfc01351ddad66b748a5d14273830045dd98f5da8ea31519bde3cd64a9e58 +e6d2a99f5a493ee6ffff83763628685bfe5a379d7887076d1885ba2c4f63c35c +9b44d85a42c4ab3eed641b11a56a7c0d83515a6f62ef0b4b452a43c246327bd1 +f9bc168e7952e99aae7e9f519216a3c749a3120b373a9cd6a648cac0182540f1 +4fb635d71dbef87e1e9b7208c98bbfaceac8865135a6e0be3d584ff581170534 +49aba705dcce7936d6f7b7ed5768ab763f81019bc6c901a15cff778dfdd7290e +99b7c996f6b884dc5a1752a58aa22fef6dabc3cdf38e04777cc51dd791b55636 +aa63d04ba24a2009b744888777e8047ad6f4ef85fc21293fddc6853ba64901c1 +58604c09b73911c848baec48dd0df33b106bd30a9874893fd77663b5a63d1fee +0fa45a4d4c0e916541612d6ad5fa60602581d204e70746a6292961f7939a5b4a +9d85547186a4edcc9f06e5f7c356d972d6d156be94cf5e1bb11e0dcaea4f7e0b +2be8a70eb8c3b0cb472dfc5f9d1422aa1ca681b7623fe410a9f7027a9ca95d69 +7d0060e4c98cb562b358daca31f837c090e239742f6dd7fa04afeefd6ac3257e +d62329aa2dcada088cd7f7f81f7dd6af8d2d6e507154674e9e0ac0b42c63eeb1 +d770bbf2ee6a120cdbe2c40ded56a58054f4e335d9274f64126a00ed936fe6d5 +df9f49679c5b54cf4c556228be9ce33e08e0b27e6a33effff34efd10132a98f4 +57c778b188a39a178e1658e1fc83155d9a41e84a6508028335156900df926b16 +2107bc0caa700c8c1d42a31f3b3bc34eec1785bf6043de2615ca436dc26bd39d +d24ab60da59846b69b88344fb976625f96d0c10c6c0c924b8c9fd4aaf01b32b2 +6fd2ce6b7c4040b52535a22d19ef2cc0ae21ddadce8c80b50fb1fac3ef58115b +1b892e00e8ad5ebdab8793540bd4d1dac3133b0f092e789110cc1b4b99d9ab4f +77023fe69dbb31dae4bdbafde42f92d45a26370becdcd5701522928b6a73f5fe +bd1ffce5f2d254231ed58ae6933ff2cd0e8dda25f020aafc0a30ff5ee4ccbbd6 +8bcc3cde6c695b341cc2e8d7ee6157e09f96478b7a8b7bd1b7c4f2c7d8582b8e +56d8516d7f1372b28a190e2ee63dd3a33f120accc85ef50f1ac5651e06bae72d +b43f068822e680db306d3251dc1f28b60b45a6286f5309b2ce02f71726139656 +35a3067d18d6d67c239fad56d295fba03452d15e1204fae5384c16fa56043501 +8a24f9faef54ba1d0adac676ea4042f4e33bac85205029ddf1957fdf95361d54 +ee967c6d8d73bcc91e49c269d94f96eaa8eea5dceb2a1457c0bd1987682fc5ca +6fbd3d73e7709a327738526647e6f3bca1af4bfdea8d845472c0431f5f983d00 +707812f887f3178de6586577221e410bfc66e65f8ddc00c73c6cca0799900001 +eba7f466218e028f629e28075aa12a44cec9c473b547ddce58e72f6aef2f139b +f856e86a2540108a701347a8dde122cc0b178777c72ebb36a8818a1e8f86f6cb +fc131477ec248605c2ab6599845a55b3442edbc83394d88f2e7081155ce9898a +9d82c9dbe26be42c3b9bcc81bacc2460480c12c119c783c13dd9742ff4c44056 +342e81c6a116caebf2c79968d7f1d73e77f698307cda275b517691ef9d08ebc2 +2e5af0bc02262649523fa59e359ea8fa55e1054b33f53f5cd69d00c12021810f +6d2c47bcbb8bd25801d9f03ab7bb4a97c3c0b1818537e293ff226605eacf4fa4 +385a4d48c1ef4d1e09c7bc2f26ab6dd9769ed5efc86871c0a804f160e2acbd36 +aa9492df75947757b4c54eb3514d252753311d5ea010e87b872703839b8777d3 +6f27338a30abe4dd888d4df232014612ba94900e9795715a2eb989e1216a9af5 +b8be7debc4d4eb0282d58b1cab520621b54fccf6090cecb3c591e6e8bbfce0e6 +004947e806c5afa74ea4b64de0bfe63bb7488c2c3e4e5d4d5d6c8403d16de46a +02c6b48c54ee437c0c1da25863179215f33b1f23ee89e5d13b423174491e1aa4 +262161bef2f4193f852de5c645d00fe155de3c2ec86e7d3bbf2052eb0939d7ab +29bc16c7ffc48394f743fcc7f9625718b0e276e7eb995c9e04d9ae110f37d419 +7831f9e2a958e760f542cde5c8f3309881fc37b30ce7f18de49c83a28b2235f1 +df1bb89e84a1c981d67b3b174d38120c790e8429150a9f9f536d0a12b9bf2637 +9677a00f7ec11f94da6e891bcda249b7cdfa9fbaeaef2122ada7d54bc695991c +82c6cebacafe85c4099958f2f9a7bf6389d954c68037a3f84f9da23f22b0404f +11b26c7d7881bae8dfd0378c0a6144f6a9480f68eca67c9e9c1347a5baef105f +ae9e7012bea2ea6fdcd7baa078503fd03afd96d22dcb7f0a88c1655f8288ac7d +8242101f9bd09461d4a8071eff46bd5c2853e3e4b1109ebc295703fc45bce8d3 +895c8f042dca11dcf99b12efbd80b5d0ffef494702ff8d5555e1feaacac91626 +aef0b594cbd2922ff54dd151d293bbdd002b222dbf1bf04b5ef27c50aaa79743 +44ae0df08b631c511224cbcce9a8e939aa9ee0df7082e722363fea7927bfaec9 +5086371005a058bdd283b4045c0edfef1f6ec13e404a38afcd0b777964005531 +491b55873b1992665a2c6cc19763282797c7da6efb79b1ee9fd6300a8c1838cc +6d6fa8fa6a2d20c046ffb2cbd5d046885f1e9d199b630a672f4a5a6b0ed0eadd +31da124d841a44a0b84ca12cc05a2651588cda0b92534d75c9bc12d3b79ce3ad +995873a15b6533d7dbd913f7594e5e07a70b0b3e048cad24d37594982468af77 +889bb6a7d582e0a3845a6c0062e5012cb3506e70987cf359398a9d3a08ff8c22 +bb53f10dc3630537b9b746f2eb1d81e6f5c99e59081daec894fec9a2dcfcf06b +cebdc4941806c8ecc36c379533379ca8f218bfb62c30db64ceeeb82bdf14fe88 +00bbd67a57b7ed2e6f46a0bb0b31c221c0867943778db6922ee9cb4bccb1a931 +750a27adc83d719ce863303f4c8d7f74a4ea83c95fa092ed4c2faf26a56f858c +ddd24fb80dcb3012150fc7395a32df3422b64e2e0e6463e3bc97001cff04008f +892ac99de9efffb8790ee35510fcc34f87980d445eb4ac1cddd42dc01f93effa +1373183a485d08103392c00712d0b96627fc2ff23ac52fc5979ce27be2e4262b +4f47d16b0911139f7a9dc066c15101452871fcf9fea332b80adc078702f6dc75 +a4fada66644d57fd902ba5f9058afc10a79e87a2b3b494355dc178a57f9cf55b +bb1a4386e25f7ce880cc74ead709b09d5c59a5a5dc0264ffb9c75bdcf5aa76a9 +5ea528b6479a8d92140661d2907dc101fd1a8bbca74d49d9df6c65cc68cfb9b0 +ec379d256b8492c14ba9156bc64a31826f3f4c680f4d9dcf1b14b590fd272abe +2ccbd7c89259ec7955ee27d1ee2d2476c318ea558369bf70f0fc891c046bce6d +3a9a0495bff6e5011e19da484a234cd4fdf65ae8a1edeb676b18ffcbefe4acb9 +f16ecbdb776dda76a7e96f5594875e9fec5d666459e370e45cb71ca55f7adb09 +621e415b6cb6e207cecde6c8125e9f209cede18e40aa241da392ae315d40db51 +9c4b6a8295f1b5fc177c31ab1a9ef73e6c606425a452d972d1e2694d8c03447b +e1eb440bfdcb90eb0b6fa377bd0e536d676dd6c10697f9dbfb7ca9dc57abafdd +6e8cc4b84cab9df3ab3e1a1a0412b7f2e8a41cf7637961a2c33edbcfead9d894 +d702de002954b3ceed1ff3fd628118d74a42cf0bc887413866ac2403b642aaf4 +d013ad5e7bacc7869e35b354fd241a44ae997408f874302da1a2e83804db6d2b +fd5dbb0cc1793fde82bf2549c8c71b4977957e1d42aa03b9f4f61f487d8ee790 +4093baadf53c44636768afa3f6bc120d6b17eabdcf7b9eca7891cea65a725329 +31e4606b9275007ebbee6bccf4c94d75392ead4a24d574385d72410db6cd2bef +3ca765427ef0eb921c41f114f66cbd853ec92b184494b044efcb60dfaffa41d9 +2925b92af2d3243960f13cac1cdc478d984b3e9c8d758c6e1262d7a8f48d6373 +76c0a470e5da3a0fd36c84035351a096a3f554af09d3853c7120be340b6ecb19 +f4c5d0af3f0f0ad299d889a47df833fc9b3c86ea3a4145c18578a726fb3d7b42 +8c4edb54071e56342fb8ee5af6337541964708bb757a339092866ebd42a07262 +c1311a7f803f80b441e4395f44c578810e8ae6dee64a9db68a2a9cdaf6885d21 +9b128a6e1d11db8c6d2287ee2cdf805a41ebe191786b70a22e93ad743381517b +d79b8abf6c1d4262ac8b06f5b1e7d5be0075e5f5ef549319cb27ff2249abe912 +9582540c38fce4b277c47ce50be1cc3b53640c25ea14355033643f3766d60c66 +70ed9ccbc66071fbf415b88502031577444c7aa7d53e82a0361dafb776112062 +f4513f9d2e051a3dee4e4da71034c72b99d62a81a97d46aadd9be63b41ac6098 +006cee82da34170cdc93bd8de6fb40598b0bf3915afd84cd1f5a7563ec9f9e0b +d94debb273dcbbfb93d9424a553508254538038983c7d4082da35c6205913494 +560bb5b6a9b48a52b1b8d7e787371bf323a4050aabff367cc01a5cec2c1e2c4a +13ebf847a6a4956190f9f2235683d0e14a45d859a1a34328601a1a83ad09b82e +900ec60f825fb759438b76088b34a45d4760ece68878a1589e743747ae4cadbd +c6ffa24b855fd7d6fb7c1c71e1785c3cffbab4bc160985d97cf1df399525b04f +cb57c94eba2d5c02591a7dd4fb1785e725c82b37010bfac359f2f1e033889670 +c9501a6e552a457437a618e8b39ff96124898010d7048e7ed0936026fb6190bb +fbc2cca7b34ea50cf03fc905b471ec7027fb445e0f457436a9ebe2a5b5bc197d +dec9cdc6785865de9f5cb82e625f6601af7440d5f539443791d661bc2cc3e5bd +7077c693d8b4af463781a7b7df92ecb3ae8ac9d1cf016244327d1c75e4d60123 +281f4014eaf8a3d01044382e57e0e3d2b03a1dba8c7da747b456470343564c51 +242f8d05ed142a2050ffb131e55ab9f85eab3460a6647176804334a69cfa48d7 +3c6a04c31a65fb69f92158f5a1d94d848130bf206cb2b2a4f98059d724b38c7b +101633e4083da4249bc01bdfce62c02034afb5b6c8a4bde9077a66efa61aa173 +061adfaf4856942ce6174a9753208426ded01a8c5cf1f39eb507c7d3664ffae0 +8bccaefc07ad1a757fea5ef60b27c2c6cb1967dc6bf5e525b4072629b3774fba +1371512961e741fe4f4eb0b5481a2685d60d280ff9743e5135029692f6d939cf +142ef084bce05900e3573b85abd7d51e79e516481f675f0769a1eb325d824159 +f85c4454ed5f92e088dbc2fe712152bf4c11c58b935d9d1f9d013e28c466e23e +732409643c0f16d2989d82f2e9fa128e3c47cf5767510ae0076da2de9257d529 +d10c32a5d1137338367c32454990e4b98f6f1a09d82340327d6910eab6b75e85 +e0e75863a67a6621376fa95bf7518d2df07c03f85226ec80c9d2e751c5af9dcf +a60d78ae421fef8b570ce9dae3cf10a65e1ad171c6d4de063c81a45c99edb2fc +651115ddd2f7493147ce19f013a632eab30c5dd40ecb31e886663b2470f0ee5c +98f38fee065b764b0d626f9051e958efa95cccd2ea77707c2fa2f50df7c8db75 +0791e8bb1bf90039eae6e473095074f0d01a5394c7d09fa3c71fe9b6fcaf5d99 +b5e88130b170d91a980ee8ea1a2952caeea152b318d38967a1bee8735ac94cd9 +fe426a357dbc11cdc8268c08a2bb66ec1ad3e100b32ef81220cafe955662d56e +7e219d62b739c9bf4e626ddc9e8c497b8a6d24d9052ad7d9176d69d7138edc24 +ebde966b607e1781e6009096cee041690482c3cbf99c775a1eb06fd31c52914b +682bae293ba9e865e42186455b07c1f9000480cf4f83e9a0639c4327bd557446 +8502bc65a8e9b11996a912da4eb42378c57b6a89a0c940422a9e61e62e5932e1 +86e09de1f4dd2ff1d164cef1ec22720421bb4d8d1a6554ecf163cd5eef84cab1 +47386fd5d68abffed7116ad1426a515e30ce38ef022950f34f1fec130c613f0a +2bffaf82efe6cb217c85174f22429ee1204449802bf7e190cb93bdb52509191b +c0cadc2046d982a30b1c6a4b91b3a8475bf69101c04382616c03f3b5b55984e0 +ae275db2521787e11e949db848d43e51659e4b5398d748a3c1f964d12aa123c1 +282765de8e517b5357cfec15d0cd1c2ea830ef09c5a186f5cb6017c008c6344c +0a331187bb44a28b342bd2fdfd2ff58147f0e4e43444b5efd89c71f3176caea6 +07ba955a174bb7c67a8f42504fa287db7c0ba1ca9783ba039ae174bc80017564 +5faaf62a57cf11dfc0a77ea6dd70f4eaef23498cced5338737db5d118720333d +d9a514de486ddc2e049224b8a121aa8d54009c6468b45ccebb94846aec6c6b40 +0b8afd413460360a6fb5c4c42241d3bc1811c36461b2cc17d23984773e638e70 +43961438ddd1335268fe9cff04aa1615d06ab9239f931006d4ff8d4a9f17bc12 +4df509521a5f585245ac7b63f60be24ff91617c89bf6986111d447b563b34ff2 +4c46dcf5b152eaff56b3056aa6df53470330ce4f051bcbba72f1be0452d537b6 +0b93c2ed78f1dbf73f81785e7f038fca002485ed514adabfcb7ee77464125fe5 +c723f7b90b8a460e3f1bcca57c3a47361223581aefdde3b1184e43a81a2d479e +2dc24214f7bd00bf8949ca36dac389fdc6f44ac4e2ab2cb6a2b6974efaebde80 +78469571cdd841e00fc1753378ed8af831e3f2f5f548a32d6438e6ad959a110e +5eddfcaca70c38540eae624a5da94d25947a56cca5c479496d2736bb4a3b7b85 +491bba27933daac8ce7de5dc7af6146781b5c3f3f0366b4069da0f908ee14fee +850d9841ec040916948e2fd554f5d2fa310efd0cea960679224797b640a2a31f +b736562196ac80da2ac359dc7bc862ad5a702a51ba0c1e20c462ce7d7fd583d2 +952254b6117063f7d1621155751d0a28e459b73d8151ff3718f74cb4fb4ebfb0 +6bfa6772064ae23a3f1f34e6bdff625582e5f8fe3562f00bd830e61358fb4034 +d01a918d6de91bb81972a85d28e944bd7b3c1bd37180e144744063dbe1f7b5dd +6c964e0afc359e9c0e71fc0805e9ab587b6b3db8773aebf1b42be95a5f9c277d +37db30b8a78dd4309a27d25a319635721f55a7ec178d8df7d3d6f26a5f8f534f +2e67de5e2d57d20ad1f02bdad085a390e3e28c2aa4e944bfe2233d0ef4ad7ee0 +e5c5c5120822c99307966363f6f025c229130f5fcbc0a06f58b5f15b7d78fdac +e98e3e9f81cbc3d9e748e65ddeb3d001721efe02893412c151430943179d5620 +f29d78e11b4969f83bc4c3d1a9242187a38afd67181fcabcf366bae5d464c6e6 +56689baa126382cdb7dcbc09d28addaf0622199a2c500ab60bd8661956386714 +e45596793a3cbfe2854718298b2873d713838e313ea6f4cc779119cee6b0d6df +4243eafaa10312ab96393bbb430b524cfebbc09c25fe0b6e0012d532d7191aff +17596be44371c32b667845aec2f6262d3e5cc977367b5666d5a85fca302664eb +c8a181085631b7452a36ccdf88980cd581d83ecf1575e5307544ac8f4032836c +550445fbf17934c34228fb1aa8c60eed5d6cf5abb16bd9b0358e55ad0cd0c9f2 +d147362789d7f704b438161d0cf1228df40c67600fc19b048070d735d0c3262b +be6bbf79c48261a3c54c47d19003601598f219a985ab2ff54020efb18d53323a +7a4c4d3611c1b2d8cc0fcf5b889c64fd95d2d63d65e3ee8786ccd7988cd8d5a7 +191251156bd59ea60fad7a20d75d644f3810e811a62dfa445c322821889afbb2 +d57b58e523930fdb7965eba7a823757ad3813e51a688a6b5d4105bfe40c870c7 +32eeb71bdd0ce1153f5ffd722c1cff8c8beac46add2faad4d4dded184dffbe0b +0f285500b80c0a1a6d571ab85a2950991028e6f2072c18f5b0f26e549c22fd15 +67754bf321c2a85666f14e9ea2a0de1f6d0ceb8e3ad8428a8e7f4f2073b94a95 +fdf23eba0ffb92fc721494546dc4a4cdec77869bc89efe2f7cb9f213cb909b95 +24847f0be2a100bb01e22c91c94998d9ef2f4bd4aefb10f16b20b811b3581579 +1d9e3caa9bcda611782372d0186a69bc20759f65a10e6566cb79a375bd5343de +8cc819f70fed9bf7c5d7e7805cb58e6bf61a9f25581aac3d3495b332ef5892a8 +8ef1cd1ceba5e1edf910a13e077715477d9629d54975d7d19ee3cbd0809cecd5 +30490dbb2234b1e3ff5f0ff22a25ca5ca277fe574f8cde80d456511080a1623a +b2c1d40662356cfc4ce5c6d3d5db286d631b4d6b7e140c25990b364b89ef331b +534c82fadcc43b12e6d3378ae798047cf909000b3017a24b769903f5b7daa807 +91733a34f18065dcd59641011b45890114a9c2387d52e1bb7f89e3a7fc5b258e +e95ba3c7d65ba8f7f49f766161b390a4044e1c73b3e5aa3091b4b41829e8b9c0 +537c5fb3a61cf78d62951194a1c039402c146eb34eeee1a08771bf178fc8bff5 +885b538b492494e20bdb1cf146226229d29aae3c94942faaa8fe7fe84295fd30 +96c4dafb543012b8d4a1cbd9d5cce2ca609ccb914fe8c3182f932e066c977595 +2cc9123974ff8558289f0d5e4b50fc8e1ebc3e5f33e836fcc074834bf84b45f3 +0fdfdce7a90db27147ee168103b36985f61ad43065fe6664951c5861d361c5aa +6df284f006191e823c1a496076a7b45e8562f840d53e152b4c4d335acbb9b42b +a2d6ea0af7a5523da36883e03ee1d77a5d4b49eef097643f51c5cb4d3e066f41 +6bd4278c6a22a03127387fbe11a27dc7e926d506e72bddd67c9128db5ae79d23 +f78506452b9582c177fefd3e3b3d08d247f6bb163f01e5827fba55e11e1dc153 +817e1591e4aa336dfd0bb42419920cf29832e62b9ec4b07daf023fe55ca4cc6f +02f15ca84bd65b8bb6fa65b417bda821894a01059dcece02a30cd708f1b9066c +e11f7b74d4a92600fc30643d0b23e0a40009fe1c92197d95824207c75c81e15c +9435e09487f12fa449e9e898d890af6eb2037fab659ac1b91aa157d8d3316212 +89b5005a00d77d1608540f2d27f6b140e0ef33a01ae9c1d1b6aea027bd00b16d +a02e2e9dd842efd5a5c16d4d8461dbd31455237ed09d0675d69dbafe0ca46c0b +d5c92eb2a4ea105a1f4331eb49899c00d37bbd498a0097db32ef077c9356a4ca +15bb8444baf346a30a87af9f53b26a3ca4be96a70a168b387ec7ba3f839c1c78 +880e5231be0dfa9722db86a78f55c93fb220f9f7244301b03b3d2a2659e425a5 +8519bad4672807650d689487a8f1ed93ea0d75875b5e5bd3b1e02e5b436fa358 +350cb1f7231b1ff85666c2fbd77dd406ac72691de726950ee7ccceef1579761f +e526ab77add39fa2bfb4e6d47f69adfa4a24afd9eb068629324b526ac89e87a1 +62794f160c85497efb4fc594bb01d711dd4872d14382afb9edb362bd4d7b163a +73ce2b15f1c5ff2a0ff77ba7ea7cdbb8540858f51302e466e99dbca2289d55b8 +1569eb5661775381952b58d67b6aa7e4ce17c322849638b12fdf1b66af8a9d5a +5c07819d89f3132f6216cf62009d95cfda05bc4345330647adee20b3abf343b2 +7d3fb1a2704a337bbc7b96611a5d59c3a1df4f0c0c23f9432c5f50bbc3abe82b +ddf2ed9160bca4243c312c8326977dcfd999608576e0231fd3daaafd9183f2a3 +bb141dcdd14d89f9a00cde6002444d5cdb467d63e3b78fbf0bbfeb5dfe2a10c3 +5a619554c8c43fa7522766829bd6f0d22dd82b87a767f2de84283ef25384051a +20a892c9e456b4a15e8fcd621cebe3fe0cee5985b9f17d75c92de6d69bb1107c +1f8fcdaf407627592cc49c95cd70762f2343bc123f6e82572a63c7f0bc7bc0bf +944982f057f7a2c88b54ebf5956f587388d1350ae295b4df480ac39cc2aef7e3 +bc26dbc2db2983ff0f029be6e3e1015ef4c56081bcf4d4162cd1c17c7a2521ca +772b3d57c5cca6c978150ab6309aae771bc322646272ae0a2d302c69a72c0fc8 +01ce47fddb3920c763b17ab0a5aa17ba4ead8d651a4b97461dfbc5afa0958c3a +a951b9a6204acb6a254c328942688b006c73daf7af93d7dfe1d4c784f8a9a51e +38d5382e11cf3ad6476b7451cd501ebee0539453d2808f0cb76f5637da63074f +78dcba76bcdd404f4597c6be549455acb4b12597f0675427f4da3a48ac5d7af2 +d03a4c0196ed88ac144d2284b21c5478cbaf5c1a96319f18bf3ae76e0f5893b0 +840a97091ab8d4f782c0daf9f3c7f67eaf7eae595a42d5fe0f7778a4cb3797b6 +50bd273b5b763b0ca1596bd715dde964d8b86f60cb579c9e0a2fe1a9c0ffde5d +ed178aebd26b682900e990bf47e155bba9d9da9c7b8102748a5251b85113cf8a +8936c41426939fe5f07e1b5ea80ed2512cbee0c0c0818c443a5f46e6bd59aac3 +f92e67b6c3f112fd0dfecb85e9833121e57240c04f864c40a0c5e86eeccb1c56 +0e5075865c62573797890b953d7edb62a6fce9e9ab7d7c7a4e44b9696932c403 +9eaa5046c4614fb6a93a8ade544f20fe63e627642a85b3c4ecb938bf31cfe87b +d1953a8a32722b02ffa34a2be7f6a3cbf6f8993c30f25b04d27cc69710910084 +ab539e7a9f45cc673ec8639ae1a8394f002cd126ac7a51151a7a5ce6e8ac36a5 +b629fc203878de20b184a6036045ec7872cda4859638c7410e0f758769fa1d61 +f52495dca85fdba1baf2e9ac651f13c6e2fa67752106b41a50f2498340c4cca9 +68c7dbf8ce6a1dc995d91a9849bf61541d9eea392eb426f758368145e8b84c3c +3a495fdb1d66229ee0d2f7eacf9b889d116f6fe6bba4ffdaeee52fe8b845dffc +a2223061eb10d65d7a76621f0427ff6c08b238a25b86b5ad93431d2022906615 +e13443cc3f649aeaa8bb7d9ea8d6b224a37d3d2d5df9012e92797be146abb7af +0c1899b4e5cd4ab52aa5c88aa06cfc9e2cd252e7708e41f47f1f1953d6a4d977 +72c36e036e34dbfbbaaef1ec1a6ee029fe2384b491a030474a14a0241872d7b3 +47839b8e6883550bdba2c65499c04054a34cef6a15cce006d8e93fdaa536c04e +a470669fcc2078491ff53da37c5a214dfb0fd1c3593d93cb5e526ceeffb17313 +b2eab2718e9f050a51577230167acdad0895ac53ce5b0337af87de4d42eeb03d +9bcfbc5196c5a252b6d87d75ba3c6d13cf509dba984ab34b262a7b40cf24cad9 +83ed294f10065db0a646ff4029e965c1b6314a5a627406e4d17e006e9766406a +0689a8537bdd0ca6df7090613233c77f75312a98d93290dc219c943351889458 +36027cffc79edbdbe3c0b37facf387135837183d28b0cc969b05de1150167967 +a226bad0d8fe850ff084d95b224972158a9050b28569f17657aeb3518af7e2dc +43c72013958451b1beb761cce6e155f88f1e7455b30183f037fae6ac3e5ef00c +65e2138c619783e9887eb8693da7c354792785fa7cb7f80a30c7a427eb01ab2e +43030528e8a7e94f14e241024b70def32ab9c8e4b2e6e21d67c8794de81ef09e +5400a84b9c5b7fefbba9d651c9447e4517024a6d724befea78c37d775bfaef2b +a39678926e85713d5ab0202fe8056d5db3265fccfa27247315bbacb3c74c3d89 +0490bdc0933495c993bc551d6b34b7dbcb89a807f39d12d9118de54c3b2443fa +137198dc7ae259859b651cd2f0951627bf701eccff266621fbb50069efca09c9 +7392268b291489de1b32569f4180960fae7099549e605b087f5cd64e026f2ee0 +861429d2121729bca3b7fc35df621f1a95d612abb575bbbbf57f29c661d8ec0f +de339fd5b37d5dad46fd9270a7e7a9e99d0c75bb1b0525dd9d266d2fc6c19cd7 +c4e992af01a6531d713170bb54545ffe5255bafbb4f665fca959610617385f5a +419a96c8085276e9e341cf598cea6ac6e524d11bf8c63693c5e20b20a43a80f8 +67a54aa6bdbe711d12100192fcb22dbfd0df60852736485537dc2dbc4d53f43d +90ec5bf5ce1f90648627aa93704532842e982a1edd93e6764b7a4ad040ff307e +2d6f6c13df79a300f8e57a927f05014e6fbe23246abe5fa353ff1f7909319c7d +ae55da97bbca0b686d416e57782dd68b15f70eae6c163e6775bd0dbb96d51b04 +ec6489de65a3c84561d9d3b2fbdd1ffc3d47bd6f8c2e38fc944f9455ae7c704e +04790459b7eac375ccdbe5d108d74024754704b0f62561c657c49ecafe3d794d +b3e4cc9d44102228e0a83eca3ed391e53e0a6b0768c128752ccba19bb43152b8 +f263e84d61556213c34f07caa5535ce74a8228ced78f63629378dcbd6b29d2c4 +5703f125fa6433551d31d1d01bba8ea5694b3ef9a9633f793b7f258cf54ee307 +104536329a17c0fc991d49ca92f70a3a783594759e644fc53d68b3e963439ddf +1474e0663b25437d21cb3247dff190f927311052db377c9001b8104e7d16cbde +331c77387f77ef84eefe9cfb1364986812950262a63753bc38b56788914447dc +bc288f2dd6357e905d87f08b531d949d982221dc77d316d38649f70487b14484 +c90f9ff9fb7a2b7e07b4813bb4b57a1b22fb757d2de3f2545f73a52eb8e40f25 +0b7f4326eb4c46a3455e6fd8dc6c103bcb71865e126bc86dfea3b43b6389a8ec +6557fc38109fa831ac80bec5b951ca7a13db709979884be923c6e88df20f4cba +e51d71d2873dabf714e6d8d86b13b57ec7fb9bcd52b2ecb586b0732b6f51127b +41939b9ce4b709b1c81c8c304e4238f140d06640848923dabf07d3e3028b39e4 +cef7d3a0e0eab7cd1793003c1d5863bc165af3ec845a12c9c5e45774cca203c4 +5f8e8158904ced82c56671ad4fe9a4a3e136665590eba62b8f490c0b5e25f91f +7257f999dc5911efe68be8340bb7bbbcb7517594c48c824770897b57931465c5 +be65e899c13d0f49ef5d4e6d5de7213078a5dcfb28b096bca4844047bf8f2b56 +32271a0e0ba74a715cef2511e927e9945ef1a2757d0655130e5114949c94b205 +ac2507c9cc2b5f3201f09b1f757fce7fea029311b620ba116adb7f7527b2dbb3 +aa15522e19d3c34257d7de66906ddd2bfa38cff43b3039daae747c52812ee0fd +ae53564d2030434647f404379c2a8a37b4726618a76994f779ed7eac5983dc27 +94cd49c87637f19d7222a856f1eee2d30825079582ece28d52ab06814516abd4 +dcaed1fa71f8c633eea1b44cdc74a05ed3896aed3e3ac67a9853fc48c67f20bd +e0acd2919b908bd86c61486c08406a5d40400a43333d23db60b0595007c4753f +f02486d56b084ff316697f4e148b32e640e60b47eb747b3adc29d8ce0939ef61 +499fd482997639f924eab76744d1b1c6c3901e6ff944057081b70c7eafda21ad +1b3ed3f93d0291d0222c1bf9d7026882f9a122443dd9afa876c99a34d3aee79d +e58eadcd82d81dbc545fade9104d6925a89f599a4366f9403b773115d88cca07 +b5704a3d26b8ce38e4af17ca90881fe2b8f6cd59bab9e70d9a9610d388f6cf44 +bd2671f710ae5a43c6ddf9bfb504c685cf5181358079180a2fc682db3e9675df +08bfae28c6be7c32ae8bbea86186e47402cbc3ce70e69e753613782c656b74ac +53dfc35d305bb6de8636daf26cf167f1fa83649d4ff7da82ad68b3e137284818 +7d73dbd506c024176c76d51bec6e89ae2d504f628412b53952df4298fb115081 +c2c168690e01aba6b48175236ae192a20c9a6b11889cee6df4455d5e30b98597 +79419d69422a01009157e3fb2449a8c10422e14a0fa1ceaf7bb6f9930354e2e6 +1744dae99992254e3478c80221703953b4e7a327b18a7e196c22cb7e873e245a +0a44ec3c4847fe94c14129b74f978753a2757565bb3bd583f10bacd5b2f2a96a +3d8f549a9c6cd08439748884d6b32e17022143e02983f10a6ec3e29e82eb93d2 +b7d936d5e8c75f7afdcc2b75c43765b6e227a88d2713a6503abc7abc8b8db678 +829fae39d50851cd3ac28b2172bdf571784ecc2bdbd5b4018f75e54aabd29538 +e48dc617781f06f79f66ed8493f45a983cc542377cea520341f64e326cb9dfe3 +5ac51f43e0846d045c47bba520c8956f4b1bcde0f5c748d0d098cdde5d5fc55d +165ffcf218b4d250aadb2fd12e73fa6f1e87c1c0f5ddc5398722001171439ab4 +91bba3a17be20c5687347a4614318c60880e9604b95cc37566dd1e05523e60e6 +fc94b65160000d3af4a0ce1e73af86ee39d5e1c2d6f543d1c8a7b5b754332d16 +2fec51ea954112b77af5e584ddf478bfc1520fd2205b85f68bfcd4b6c909a791 +3dd09627ff359ffd7d81cdee83cc2f91746b3b9eb2ee6f08ebf795b788dd5551 +661717ec666317605d3ccc4656e8dfc6d98556db2853c393ef0deb9a0b4f6fe1 +ca779b21a33c8500c6a6909bca3e6a073cfa80e561fa788e58e90d53eba40308 +aa7c5a84bd25fea1c58eb671e89eceaf8066fae2dd26f6e20af0ba8da3cceb40 +ae9c764976e53bd3d193e90d2188930feb85f75104aff65e0b699f7ea40363be +eed646436901ac04c641fec1deac91ad066a598c5439aca005b8b56f70dd6a2f +59b5ee4979c3df0674a7bb6c9db554f4e3e2a95e9566051d971bd51f196c7c11 +3b759ccdc52c2b27ea0d545b0a25cdc88223914cac6f879d9432072d385508aa +8b4f92382384d833c560b0934d031fd3a55d1cb867a6212c4b3d31586360b2a5 +da6f5c278fadb87b03532ecc242b39899b1fb1b5625f457a7b43f972c614d124 +78699d0d5143ebd1d652501c5ccc2e92c1d839e827311c9c8843e33eabf5f499 +669dd76665f83308de7a353197244811848a6fcd3cc1f07dd44103617491af66 +2e9a28d72f9cb208297d12289ca3596063329e9e1090394db4240f189862c330 +f39163564331cec9c05688788e25096cd95ab495038c6bb203244a2175dbe08a +b9d8869bea54606df91b216179ee99888556691e0874effa3858fb408c7d1b9a +3e30527e6999ac26cdc19d03e89804653f1b9223c96a5298885b17e396f9725f +99bb2172aec03bcb3d54fdad6841214d1309bd720856a96955df4b3efe86012d +109a869622bc7450a4b36715220a977bd2acd46255c7945987d8d68f70dcda1b +e6d6d088eb9a5ff76f5a0a6f3e6193608c3e59a69ab9b734e3554428cddd0eae +b9f57457c5a962ca8f67122cebe1cbbf5cee79cc7edd3794182473a1d66429cc +4745a9c3ae1c1b4a2ed9ae0c2e9d476d65565e6a44454f58a33c82485c99b18b +284f8efc379a6ab3d58afea7f693aa845032b06248bbc4db4cb375deb921d9b1 +89d16d94844468705d365d8b252aa7c02267eb321a24f57ee2ab1f9c0b693d9b +361c665730ebbf33b1375272bc59ba3411c2c937165aad01fea246c43fdafbb7 +b68f347cb270120c52e9ff251581209da81425735e1ac520b884096e93bff3b0 +ab7efa786f7ef4617edd4cf7d5dc029bfe6b3f808233bb47efd8aee7d646a746 +e472d24de8e1ba5d97f42adc6e6c0dd7dabf119c1ef99e36b52d8524efcba420 +e7dc61bbbd052464c6445e53ed94ae16153ca782b23af58e24c143b6d478b54e +a7a0e98d9ffcdc98c901753f36310c8703295a89ac76f370dd7cf779fa300a40 +a7ca317aa81981d99356cf6bce3b19aaed7dbbd0282879a363381007a717c74a +0a8ac2a36c0c4126424fc41fa68eb69bc5f9211a912e89d5e8174b5e27d13cc7 +0f66d567180ad91a6cad0ae5ca20ad91d74f24cb06467d9b628dda5a5a4a0651 +30befed588ef70f635ea5ffa034519b3cb0a31ce93da4f78be1fe55677d3294d +97d17d13b01c4744963f3e5ca6131fed27e6204e2ad2f78b04b40af3ff8416a9 +6eb72d5d1558dd1c754f718441ab50e79f3d87e2728a45bd1856e20662c8999c +13a82a31476ab851296b0f836e541608b41f9de1251393b9d38bbd198b52f819 +f1371a335f69042ed9a07edbae3f7a9ab4acdb9714dfe5a36510b75e7b14606d +d98a7db3ed34c2fa7b0d72a17da9da49e4623e7928769ed659fd0cf68822fa13 +b0c051e09b83e3b3c3d7dccbcc23b57fd1a98f6714265d5dec0a5dc74af8a8ac +c816fb1a46e97bc1736a2144d57d9b7c61202685325e4902077ac08afe66db1e +74e9f6a5b336e4270aac4396cc3d38202050b84d65d580f0aa4255400814aa3a +ff0f62bb8a40886ac861660b18af1b333a8eee725591cc0a7242650c28b515d9 +31fc57f6acd3b33ae7697f3eeaf817de2a6a9f437f152c4255fe2a25de292be8 +a5a042f615d022be9f2a11d88e4ab384f656d9119cb013543da577d340687dc0 +fe27a2d8cca2be43ad124e6cb45bde5d6851e3d2eb9702e8a3bda55f7eaa01b6 +2b134c99cd4e74b86aca4fcf3af32940f4060a106d9b750634d58a6643d70d8f +349cb04b0334d7e6356f685332151465992a23216a7d9a1723590889d379ea47 +40fbdd1723159afdb9d6b6b00023545e5b11946c826aae507c79a59ee40efdd6 +3f7ab26ffa64ec0734da75276bac98d6eef8218c3c21766a21af0515e1ddf7d1 +6c5ccb215cada17f9c38a5b55b7bdbaf2b2cecafb51b788e90bdb7acd2427483 +c450815ef7464894c3d57832aa590d86eb0cef070cc305db061fc842e0f5492e +8552656766a0b5d8442206500b4d4e3d35958b9501d3e19764741864b16a4853 +1cb082e64e2de5ca287017c87247313fd6cb4226282ae836c859ff3779532224 +d9e1b22e2f74c296b6a96c876bbd159f6a1aa1292ed84a35ce835f6657ec7669 +77cd6f09047912f2dc69a457a0f040285006d4bacc695031969d5265074d8767 +dd210f53b71c70be6b3c89f2b87d45c718cd3125eb4b9b2aa9b5071b7660e9b8 +dcc9d1893280cb656eff20f3725e7cb8bb787b5f94abbac07c067913eef011f2 +38d1b92734a7682f76a511c6d31a35eb0db82313933a1e3526e8cdfa57e73961 +96cd7e92a6d6ff3011a2147c17562cd2de5c98e619e2b08865ac8df3b7d4180d +ff781f5ccdff7a07a3edb2bb9cc262183bd0750b67d1cbd8233425299482974c +c667fd8e84af84527e613f8defd4c8ad29d4db17107c120f64aa30bdddf28f79 +ee6845b61efdf0e7cb4aef0998b116e57e294c72b72c4629846b743311d3030c +767b85b0f4eb55d9a6d1459a63dfbe482298357d737b9e295b18b22f05951948 +ecd6e7105c0abc459e93bd13da37d31266559b1408e8646ee65d792382c54e78 +fa4ed7dbe4fdf792f8dcca408c0297a573af541806fedb9dd746e35de0e31fde +1b29e19a7bc81304c6ff0f8bee5ed79a6158e80cbd2ccd68e53d2df5db4849f0 +85191581505bba5048b1a6ae39a1e3adf65b5f38018406f0d5563cbf51e534c5 +24e61a82c563e3517a442af6137fe0f7ae6b88b1d6b09f53af9520bd2159cf1d +65a4eff69fbf97128816534c40cbd3e4bc4eb1559d9cb314dad354a55661c03f +7880cb6b0422fd2f2ba1b7e3ff59bb7a22dc393bcc36a4cd7e6f4e571ed718a1 +60c46701d761f1a609f9e675648a763040dd0b763bcba2519bdcf88875fc410d +b992bf15e21b2b19c096254cf769831af79647f15b76624f9f9e137e1a68242a +9e11824fec07359eabe6aecdbd2f03c2e7f8cc780792bff240da878df634088e +507cf00a104cd70a859800c88adce53f676590b305e9cbfe83227c39bb6787e6 +2c3361e8d36583b061d83bdbce02dd0e10ffc48238b0ef0f0aa96ee7aff5354c +96f38f07429777d9314ca0d99c881a49c1447a219e02d92f7911d7e162a5f800 +7301b0fac4a23e626c411a47d76955d58a4e7833c21794cc264579724ec63289 +bb3adaa21e230416f401f89f977bdc186ba656980430193cf43fb7ac27d6fc9c +10271957b61a72887f2c9a08b6cd20bc6a22abac31cdd3df92626e10af72a24c +3f2ecf3a1bc64fd431358b34af41e60b45da42af585bcda364f8894488813f14 +e2b03f1ce66bd5e90dcc2159e634b9bfb9004640dec7295ea19e9f20b8d9dfdf +08ae31a4c7f39147818308dc68c1f179fa893f5bfd56ee3647169233b11df36a +61b708d7322033b5847791aaad03324de04d662f34bcc1f969e2ddddbe9bbe9b +29cec9f021239f053eb04668e7a46c7908580f00e1a21a055590216531bcade8 +3ab437c68d324d95c9c22337dc54e44c35f7076ce3bce2b7878cd339a60aa94f +00d705df7e4d32dca8633c6ac9920f6b38da49b33eb6aa4de0822f23d91844e6 +5254df0af0385f267fbdda35528578788499beecf9092e10a8e74a656fc7ca70 +28a74895e7c837be1b90a2f652df11994bc9eef27d81ad3dcba9e554b7f5fa78 +0dc58ee231b90c98191e4eb12d0b713100393239c4e1423f56e5a9fbe9a47a46 +f2bb39ef4c826a60505ec938470b9af73d0836ae5128ef1f7f086d226cb81238 +26e8b71a8c7c043ca18cf83956ae00f293d397059c3a028e18d49821ef93a10b +8a4ad9e18a6639b620a5518c182b966c97fdaa06f88d56e91c7ee99b1e43aa8d +278a9746c0b868c3411b826682283c3466eb7a93b863f52bad360521d60b7a02 +ac01477e202086e27a661ede0fee7b0b4f2759a83ea8cd9c9ced3b2bfa05de1c +86fff7253255f412eb4456c3ef80318671c081e96aaec27b7b90ae0b51449311 +b0f09ad016f16bb6c189339795f62a150aa329e1cffb50314264264d9e9c6e4f +a0940d6a65a300139490c760e3072104cafe4ddc5bdd601a8577cf34fe56e56b +ca4254ca8f99029236bf3e4061f66944eb8449e25ebacd0df5b08441afca8629 +a7d09e75fe78c32b762773436d7d18a6aad941a44eee9afc869283d6772ffbb8 +e7599201cc39f4d5c1ada0875ebfce3d361dacf2b7de7b37bfe16f2bdacc58d0 +f2f986f2cea963a6073ef33a4f72f8fdd751b3e5e7c8281e951966adf89c82ed +26617cec79a786b44cfd546a4d7f731fd3db9c077ba9a6b381f1cafb070f9d7e +de99b15fc5028708648b7f1b9b8d307b25de2b141744c709d52b3ce08f32cf19 +2c060354a2208125a0a855823122f589cb954b1d5804bb1605dd6abe751ca976 +2d29120f2cde14ab562dd6f20a358e175748ebabe994b2cdcae8400c6b899b70 +1972942d34f8ab8bcf1cf32ef039a82f3c64c3705d88839b1407584d203c2b49 +b966aa04b58ae3be1e3561c0970015bc21f63b02c63dce11f919294f38eaba0e +e9467294d53fb9ae4b82ab5ea704aed0ec989b7fdaeef89134bcab30ed3bfa8e +ac564c8d297fc6035f032e8a4a58b0e7ba5fca3c91e70765703e6708b33d582e +6ac634e681e2db6f603e45e1296da486d7e98f4ba8f0b4ef3a6e7680b79bbb57 +c9ade905c330beba2e75418d2b41e589630104465748217220c87fbe466ba118 +7ca0200f96e830ffb47c0edd493b72ae92157eaf9eaed1502ab379e7d53c753f +36a7ce5b8f6434eb4e68612408b7d6062fc985ee562830cabec961edcfb6da08 +930f84256814c4be0be52a186ba1be78ca63ca4d53d9110da0b9b9510465b886 +e0f3e1e9fb766159837a7211e97211cac0374412d7de25e78c6b0b219f60400c +89b42658bfe122ffc5a249f9204aa8ba77922b264ac4670b35694e0660b04613 +5f73b1ba688a55abec74f53d0b2efd2cf28f6cfe6887173ae393f45e82e2cf10 +a907911f1deeda9e819a21458ebff534b9c2f04818b0a8a2bed49a6dbe31deaa +880a53b6d9e8d27bf3efe5dd2c7a20757aad1809da42b401b9b537710078a5ad +e31c69f0b1e877bb0d71cc9801c56fbcfe8444810a44df8256981e383495ab83 +8a41830affed7cfaf909813bf2844d06c74a5c2dcd8ef070db3c93ba2e0c6b3f +89ed49b703083dd2c866865e8bc0f626556708e73104c12e04b293850b5ae418 +b53573f2486bd4514191c53f3b1563d54ed5c0efa5efada2a69ff18384f2f748 +996a3002ec6d59a20bc8be46f078107e9c7047f7237cf3b64e9b877c8aa5b276 +891a4afcc573b65af4e3b33bbc39c17e498a2963ebba329844c37ca6d5f28e57 +0243a0b54e2cbc6581b3c8e73ed72f9ba6ca63d6e03d87d5710483af3ed963c2 +4e6b40e498fd0f7324f5ef7cf90f7db47f51879704d701f03a807eb60ba9729e +8732ef9a6fb98fab923f74ebc531cfb8eae1c72657c95a1fac23211ab9553b11 +9a4c439f19a047cd02bd3d4b9949a1147fb152c75e0feadc5400ac9122e7860c +bf53da6f31276953d47112e455ea156979e109a5136be8ccc0ed8efc885c4bfc +d760142cea74c9af523cf6ee95b9792aee32309888405b447e44985626adc41d +9b2a36fd1140e9d0e72d4deadfb058979d4a197cde6d118f3d09cfc532623468 +f4fa780b5cac206fbae4fad8c9a44772f467a94d1bea453846717d9e0de81bb0 +957cd3b6556cd841f4bd85e75aed98aeaabc9386c1322edeba051607ad0948f2 +e1fff3b2570f2c7f9e25723505859e89539192054bafaeddb5bd0eea558f956e +bab514b41044b48d237ca223178013bf3fbed3d59ccfcd18ca5af2473d7e1d05 +dbc6a1267a0b9c54b1aa36eae5a2d13f965b7a948d1d61fc2c40803b862bc1d6 +62f6ef8e35629e538f5febdeecddae88b1dd5f165ebd5303d4ae43781d912dd3 +17ee43213721a76948a8b7c5c23c9875cc68ded968dc9ad62baa68857dc3ae8d +4e381a3434630b860c68e3a82179744f186da91d7f2a32f332573dbf096f1c8f +e035cf96a747c98e4bcb9cc0f83ea905f6bc0a9b3dc6ab59e883d9f8e702a0ce +d549483e387636b9a9693e1ae02378f3db198cfd6172db06c7667457d7cad173 +440491ead10ab66b4b4e076b495c13c70a7251b1f3c2c79a6d2e48c06af9f13c +585c16b4debabcc57f6a55ae79b6a366e3b609b50775e2fa7aaa29fb308b5c8c +74a38ffbb3138c92f5a2797cbfa829b78e94e8f426b8f79d4a46802e39dc56dc +3d5f5e0de34b1b00fbfaea133550865c6ca36d9c8f87a31829994e09ce78b237 +4b6a8df6a02588ab1d0781d6f817abb53d27e8b142986a36da8d3b1aee32ad7b +bc52886407409c20cda9615d316e7bfc1d055bad292fc1b044a9045667651d90 +31e7ab06af45df501da8cb91c05d35acb559d2ec6aba2686bb33d01d9c305b66 +cc183b54d325a7919c6d08cfaa203a259b4a691d8d01c94c97b44358f040cf9e +7ca9e18c0a42cba9d8988fe314567054e1469d6a22c20e83f53ebd8bb6c21251 +850908f55bd7b512f20895253f09d2edbe775a8594b9d9649e714425ccec45d2 +ebe946365a6135afb1904c3ff84fe5094f8d01a003500ff08dc9cd47e0923ee1 +f11d3ca9f33bc0c029aa718f1736e0ee854dd41b3cf0e23a03400955989e3f43 +f1ae9980b1f4eaa7e0cd8c0c1f0ccb112661d86bfdb39f0bbe997288f7b5d144 +aac7a68805f394eed203b8448cab5ac384782bae222820ff8e83c3212e429121 +bf308838c2f42c2907c2811f0188749e775541a3f17591cbabb3447b18d09d3b +027353de3e541828ba02911bb28648cd5b1d2a22fdb32aad88155356a71e07c2 +816f56296ff7e2b3531510167da60e590487f2561e7d5e1c07a1453120210f03 +87205f407511c09aa210c7a394129ba1213a78fa99ab66e9a0c79de3664b96a3 +c3cc975b73da6c110a1f2e85e263a1055b6863cc87ba577c24ceeb39dd8fc78c +ac25ef46b37883c5698e9fa71d962b3f8d2a148e89c383c5a8b75172661efc38 +0148a6661ca58b79ecac28596049ac006b7f915f28f317fc7ceb1414b932f66d +d0fd211e1582829c4199038a3b80f81bb312a5592ae58ee9e815dc608c9bb3d1 +c12b398e0a7e895b3def77e9f0dc32a8ccb1ba6c145f24503b563388ca307980 +e59bebf466bcfa540d475fb9503b4a75aa40cba89b903b32350212b5b653eb09 +3266ba11cef272e1b67481c00099a6e0983743ee0f8497440585ddd167406899 +75d81280564d4e691410457a46379f6d1219c41cf7862cf9019d6d9889caa6d8 +3c7aecd4d799a79df76a9b0db90550762e7d6a57f500d992d7aecf4757fc05a1 +9c54969821914d00a6b1bbaa887aa505e5b9e198ce805d69893a8c5825713248 +f2adb41a5e5dde999750d6571a51af3c6a75db7d167decf10a25d53565d78d83 +1081d42e875f218d6f9dd7fa51ace13263d903b99aca50aded9595da6474ebfe +c8965070a1b123043ad0ec9b91a6f8973965354933ca5552d503c37c463ea75f +4912b4b39370659b75386d6a974b67e4c7e5434f1604912c6b742b76c5f80401 +5e1b8541313249e161e4cdfd13e9b012d3a399b60c1f346456d36aa169fc30cf +022ccbf697879b8abfa031a5ed7b93a67031c3b3770fea0e7d0d70a0a3d7b40c +afb56bfc7554c61e6f72e65c4528f4b9ef6d93266ef1f29ed8cb5a25043f268d +3924149d3a71dd370a151d1a110defef096de93be043cf4aa09b8b765665efb9 +b97b13203de7d12249db2b0620df7cb2427e6285ae52fdfb28aa5c2ad8b77360 +09489613d4dee865265da94f0c652a7aca4e9369fcb70ed5d8e73845a0d03fd9 +5186b4db47ef4f531dad78d576b9fe473379346f280deffdf9989fc0b579a806 +cdf24342c9dd0f2672adc780816350025db36560f4e5aa9226a993627ea46261 +bbffe54ff8bb61637c3cf2bd50797438cafa0207ae6974edebe39bdd2f338969 +6651596e9d5122ba68661c3566750ced7fb018776b84b595b65daac168f14780 +f3f8b6d2a2b56bd5cd2a6bd1a49ae88b49fd7bc3c7c54b6913847eeaf3968d53 +d7a8297ba332ac9a518fadbe70bff80ff76686f1ccd459e92e0a2925730f0690 +f1b800d77abd1d48ff1a091494dab0cefdbcf8f839b81b15787db45e78af5d4a +2323324418795c574fc3273d22164decbce0d92a67859e4d33df2e5b6f7f4239 +37bdf7aedfb7a4dd239a252cc7044bd83d0935a3874d514112c16fb47ddeab00 +2348e77301e2742d8509993ac7113ee43f44e51910336807219d18a71d4b615e +ddbe543fe23ff195359e49f0848310f55cb1f4de66af463cab2b3a88b3c7a8f4 +717c0ebc88fea82a10b3d918d8f3f6d0b159f25a9b55b46674149f966069897a +b49104faded5904d0174f084e5c54c16135ae896e0d8d4a94b5d3f1e5d0a90ce +26ff3f3d32f48fb9bc841fad5460bdb5ce1e909dd95c8b1fdad4a63a37fc802e +39891a964a70563205b37f6688220a9cbde7bf05c3ec922c136fa4982ed998b1 +6df6c2d7ce660939b23a921f29a4f7077ff9fb998bb62c1e5e66ab125ef375e3 +1a905d194085bc5f81a51d6c1410978f04193c410cafd322304c9d33ab6b23b6 +03f3b3550d100d8fb265d7c553c16b3699aabb5628bf0cfacb2608847304bc6f +a036abe679e73ec4184a6b8bf7e4c3760d6878eda59b36a60f3e09ef13c50e60 +859b3b38d452ef89a659cf90b2ab373426e5784b82268b1361761917f28d625d +8cdeb451a15e78ff17261ab5a01032c843b251ea217db256d61b90cbaf2a2d2a +eeb00996a4acc6d9e23d49272da68a6a0089e98e0503e4b383616ec40df8c152 +81d3d2ceb730d93f2117e2f6f5a80f16dbd18e753acf200a9b90d782901c00d4 +134ca7beec62027b08450788784b2e15f0c322d7d62f3ed831a7ef9e743fb23b +cd12ba33baeb21153b476fc10aa9100f795644e4d378f3151d4424e628d25a08 +a0358a77ed6b05eec6b337f5b71e11d1f7bbac5b40898260794b6cc224310d91 +a4f39bcb6cda5587151afcedadf536c61dab05ec95f819145c9fb983c5516991 +8704408e78c3bf2ccb4ab46d2f2c0dcaa9e6d64a159293fda0b9f3591690f6f5 +13a46ba2972b11231cd044e20d13b4bf34c3271225b25185189217dcc717107b +d8accf0140a68afbfd9a31988798775b83219728c085c5971015b82e3cc2d83f +aff9722a9867bda2a1820bdcbd0a4ba406024881df9c688d536924d4aad821d9 +98fe2e5e4373e35bcdfd43cd98b146fd2ccf2673415f87201ba750c2c7d3b6fc +541983582a3fb39f422a7c9357ebd2cd19806dd5f65cbbd82403e95c2baff8de +5a8453e7be387d77dee25d95092e1bcbeb2ca752446b72089e51e2a263779439 +660670fb9f573123490dc84c058230712e4cefac3f1d2423814e57ab3e4c2f51 +bd22a4f9daff3309dc6d29574767ed3bb9c32d6b9781758a7de3a82e2bf88f80 +95f6023b7272b594abc5470d97aafeb2acac563ff67a2bf172d6ce3a8aaa09da +c56ca3d8ca8652fdd942d03e06758f3fbdefca6f9b961d313e4acd3a7a83659f +698ba5a7447a63aae6d9fe00a3124cb15b38da7b1467ab2930436f70b1c102b5 +394eb6a12f3c23e030bad0f66cafc2935ba71fbe8988ae16caeb23ed401ea750 +78b4d2e161768ac9d84a4a67f18a1fc759d49353f6c3ef0a39c49d7b91431fc7 +5ac88651c3681fefac99864fa0db4e591942d6afeda35e3409304543d45da26d +5ef398cc07eb167b28560e33409c7c5492069ac38f5b0c6ae24331e74c26bda0 +8be3e0f46e1e2e1f898e2646e642428c3c1b196aa98d5ad73771b93b580f1625 +ca2817d3d6ddc96ee9034edd252f1b76a89cb9a2ef3eeb62eeba5d8cf0a52ca1 +ec15cc1674e7a9d565d941132971ac7db252f684fb4fd4066427444a01fda5ec +c1301bbf001f5fe7c83dd98ea7de0e66fc216b709474018e1979e9ba2249f68c +0b097e47f264d3ca34718261b92242841ba9d21316c4eb682d54fd48e14d0fcb +c8e238467864e37b3052e3f56b15aa3335214a26ec41058add2f33dd5ddd7ff3 +953b9a5b1ce8907ad7497c3735052c8efca51c927cb2c72bdd8ef5c8093ad928 +d5f107067034a696854dd2ddad3e6e67015717c15153c343c21d567f98f43acc +cc064089fac9282110c20ff014c0bb53299c77a5c93456c3d6671882cc7af79b +6d2236797dae3bb87387f08296d6a604ddfe2bda7e4337e1a29b7784d9a5baa0 +eb07951cc13ab614cf97023b8bca33c1360847cb107351413236a3f5724745a4 +f49a5944783af38ec7f91503bc49d5d1df7b8ba5fc1f72bf80703058d967855c +0ed73856b5da22b2f0dd71763e15e232b85abbf98822b22643bb66f0f8134476 +e46899cd78a3adfcb03bca7f51d588b55c08066f18e0a0a0d462d73afb58b0e9 +d5008f629a92dda8de8d4f6d259115c86c4569ac8f147d66f1412b49fc800357 +b6123d40feedc844647759588ef09b766064ac4d1dff5e64742791c4d4421d79 +a5ea6385de15813c0794d96051b474e0d38a50ec551090800c53740a0dbfbea2 +107c20cabee5663797edda4695aec83bb01609c0977b5a59ad40720a3d99d5b9 +9cf398dc78d55ad7f0032dd2740e4928a50a8bb2397733dcc367bc6496c8de2e +f7c12e1155b546ace8c60a216549a244600347454d4dae4a5fdc119276c4bda4 +e4a1b1f85ba8d3bdb77397e30055fc02f18a4affa2f8baeb7c377ccc0cc2d244 +7159a9bf0648673cf7102305f5318d3d6788df18c41d81950c97d0449f06f204 +851a10c20be1bf696009b7452283a1c1801ae3f628340a366511f972cb27e709 +93cfbd9bf9359b18fa3b3ec84c33f08704998a205530275f903e1c5eb9f5f590 +379e4ea29f4caabcf6f4337936f1c6ec8bc87109ffa667ea4eaad64db0930a2f +8c9d4f7269885e73e6ce067cc0f0b4af65145ec69c64d087d77d055ebd96d05f +7e316d5231638b3bc0fc590d171ea52935f2ed0226dad161cffba84203420146 +89e0764625c9cb43c175bf4a2aef78f2c8b557243f37ffce7842b6ad2eb31adf +3141a7488f918215edffd2eb130ea00c7a8e598cef6aa4d0cafae9c8bc1b951e +042103b178a9217bbe7dc81f8d24dbece68e72fd7e201e89af835f27928bffcf +1a01d7ed8ef48f1aca8a48404d6dfaaf1e5a6c5bdab4cab7f34a2d8279132a28 +09daf2014fe3f03c96045a3ef2e6ab907f0c895a9e9e357bfbfa1b3c3d1abc1c +e6afba12b462921cbe7c47280a7058bef1b510e2714bbd2108ab4d371a035da6 +96a83819f1b1c61251c934b87c17d85ac848639dbeb584fbc204ad09857b6a8e +d1eb125bda8110e193cfc13d2d25bbe9eb65dbc425b43c9a46fc6cb2b287d577 +e63d96eae142df3f42cfe1aaa0873093dfefeacd60936bb10543e7d394da43ef +cc7dc394c5f7690fc13d6d8108d3267d1f8307be6647aa013b7c5ddc79bf3bf6 +2c5c3ab08e620d56c47ad8c1e815c556fd85b51389ba55d7787bcfa860ee9a56 +b50ad0bf07e606e9a4756f859bb41d95a64c5cf4719933eccce433417246a06a +d35da651b66d557e1fc4540329d2ee2ae5c929202cfc4aecb81087e81f074b7e +91ad77f3dcdc62bdf81d147ea6bc03a1c48543c546f92612276358eec846ae70 +c8a66f02bf82632ed4ad38854a15b99fe8d4b5ed5a6d877175f364cc43145546 +1ae1d54c53aa2010e7e172cd736b28cfba30346c605e74bbfc58114eb1f9f1aa +a40bff04419e0198de71be67293d6098119f76bdc9111f56f45fd7774239a8c7 +51a98c63d91c29dd82f6819510bbf6a15d0d2e2eec78a59d7610937ff418a7f4 +07743db28742237f90b9cddd4f5611ba1d1f53d71d56a6268f563080185919ff +56673e60252efb5acdc122410a5cf43c9f5a6a56022509fb125b8c4a0b773a1a +2d5bf0bf0777b2f914164de89bba6321000f656814e15779be1818c8cb0f3ed2 +84a1b53d4e73c607e76165ad9a4d6d1d36729e83ed798dd1a2f7a0e70d53ae3b +18646b57ceb8c3f7f57fa6bb95ab7d70e4b3265d60ec4bf5ee9a870ae3d91cb2 +b4a2d2fdb5071f5de093f84a76e22c65382c4d3fa053511da9013ba2fe7efa40 +53cec7ba2dc54fa46466c0d6c55a5869851b5a8617e4e21962f219b1956c0faa +df9ac28fd4ffceb40305617dacb13a58e45a20d4cce72ae242873efcf4fb3922 +c21efd335d60ee1ca25cb7fc5581e77c2a595310af20beffda320daec33049c1 +0f38c3747879991e918ef90a978eb3e266e9d20fbe54fc9f4fe75237a75c9f1c +d950ac5d6bfecdb72f83c130414ed6d370b4a4fd84af267d3573f71e0b5fc6ca +18aa3fd906ad29ddd2154bc2e09781ee50078d2b905214805e4d48aaf9e366b7 +cba25c4eaa6cd851ed89f2bafb07197887d62d8a88ca360b72f3d50f75e671ac +9be36ae28afbeb3d896958f72f9c02fd3460e96dc525cc22466ef40bdd4d8d8e +eb4b8630b93508da9c197c0fffde911f871b8a2c4abcca773c96878686de8300 +868e263a7fc0bb0b98f009ac13ebc0ed6d4d1a91837fdc7bd1f40a64d5764ad8 +55d856074c126902d70e8328be059b72424684c956c947b21d35d86119636212 +c5a042f7ebb78342c6c19d32e1d86009161a409e338399ddf4ebdf04a3cdb2c4 +90950c341b189be5715a1b6865dc1d345c3df78f5a6f4d170c3ddf687bd50ada +2b5e9926cf8abaac9192a405131406b0abcaaf27c9ea8a91770c29d92ec5e43e +8c8a89aa60d22d0342adfd66dadc73dd9481a74fe9fbbd8b65e6ec15251e131a +0f57515099a25b5632667161b03bf684bf0a8ad34db4cf33dd090f530eac2377 +4ab33c9ffa7bc55d05965fa9b3127920f9ab5c731dc8bf255e41504ec4f24293 +f98462fca92caeb56a67097c835470ba1e790266d9d3c38a43f94c2130bd6786 +fe0d8ed75c2a91d8b32327c190b73809f9e9f4ea41f227a2527205b1b85a12b7 +2983d81de17147d288466652bb37f4e8828f19f2d79605eeae626955f700f310 +25436f14237738a6be29bc161d7d6c077ac08c39f28686817e3867e1bd4ce765 +b37d59f476fec2ccaa6faf64478848f232e23e1beaba6151e972d882feb8b996 +667af161e4ae2cab5c4b20fdfdf4f960443ef61c53564b6e44a310e557f5b52e +e8330020ab969cc3b8e1aa1b4e5ab8d21aee185ff21cc30e2aba586fca93f7e0 +9a127620b355b8175170213042a6f9b4df3aa1bef4046f6be73e81f6f2694006 +a1eddf5ff3f1c5a760ac1dab80b3220b8048d4009a07275dee306a3350e905a6 +8a55a4f179370e44c4f67dc31f88dcd25b9de90ed9dfcc2c26f73fa95c8e54e0 +0c09cb82b0d16302a4e67f80a98508cdd3e7d66e9c951a41241aea3ec3735901 +ea7b142483ddf0f065469fb386afa9a91a74aacaf3fc57a85facd78abfae5708 +debf06297e7556e7bfec6250b4487d29c7f61e60499a72551b5817c836c5c025 +94cbc33f793c55a52282b934ef6689190b550e67179f2975d45bc0dd11bd7829 +49410cccc13d6a0dbab3fde04836773d185bb4d46a332d32965eedd2ab8eebaa +c212dc36443128a8a0953331a8eb655d5d8fc9213781550db63ab7443cbaf1e2 +c2432559e7a6d98f5973ada70913faddd976f702da2c051284bd9f7b5deb595a +ec4b87ca63cec112765a1fe9236581ac5567c16be9e6c0cedcdb08283a8033ac +dbb3b10ca1a6d0653bc1a9800de240020d6ac9d89fbebd77d6eb530401c8e5e8 +faceb9ac544738ce1d3d7869e15ff79b4dc642bc9691ee785c0c629988a44d6a +f76c2690fe2a61749face27bf143e74a4d334fd201a91c579e96c6388354b544 diff --git a/src/block.rs b/src/block.rs index e414388..ae3cc7a 100644 --- a/src/block.rs +++ b/src/block.rs @@ -129,6 +129,14 @@ impl Block { .expect("Failed to write coinbase transaction to file"); } + for i in 0..self.transactions.len() { + // if tx.calculate_wtxid().unwrap() == "35f1e96e0c00a213134b533d93a6b3cf074c24178b640c1fbdecfe0724455e66" { + // println!("{:?}", tx); + // println!("{:?}", tx.calculate_txid()); + // } + println!("{} {}", self.txids[i], self.transactions[i].weight()); + } + // Write transaction IDs for txid in &self.txids { writeln!(output, "{}", txid).expect("Failed to write txid to file"); diff --git a/src/main.rs b/src/main.rs index c29aa09..bcf3aba 100644 --- a/src/main.rs +++ b/src/main.rs @@ -72,13 +72,33 @@ fn get_tx() -> Vec { } fn select_tx_for_block(txs: Vec) -> Vec { - // let mut res = vec!{}; - // for i in 0..100 { - // res.push(txs[i]); - // } - // res - println!("{:?}", txs.len()); - txs[..1600].to_vec() + const MAX_BLOCK_WEIGHT: usize = 4_000_000 - 1000; // Standard weight units of a block + + let mut selected_txs: Vec = Vec::new(); + let mut total_weight = 0; + + // Sort transactions by their fee rate (fee per weight unit) in descending order + let mut txs_sorted = txs; + txs_sorted.sort_by(|a, b| { + let fee_rate_a = a.fee() as f64 / a.weight() as f64; + let fee_rate_b = b.fee() as f64 / b.weight() as f64; + fee_rate_b.partial_cmp(&fee_rate_a).unwrap_or(std::cmp::Ordering::Equal) + }); + + // Select transactions to maximize fee and fit within block weight + for tx in txs_sorted { + let tx_weight = tx.weight(); + if total_weight + tx_weight <= MAX_BLOCK_WEIGHT { + selected_txs.push(tx); + total_weight += tx_weight; + } else { + // If adding this transaction exceeds the block weight limit, stop adding. + break; + } + } + + println!("Total transactions selected: {}, Total weight: {}", selected_txs.len(), total_weight); + selected_txs } fn main() { @@ -90,15 +110,10 @@ fn main() { let br = 6_250_000_000; let cb_tx = create_coinbase_transaction(br, total_fees, "".to_owned()); + println!("cb {}", cb_tx.weight()); let mut valid_tx = vec![cb_tx]; valid_tx.append(&mut valid); - // for tx in &valid_tx { - // // if tx.calculate_wtxid().unwrap() == "35f1e96e0c00a213134b533d93a6b3cf074c24178b640c1fbdecfe0724455e66" { - // // println!("{:?}", tx); - // // println!("{:?}", tx.calculate_txid()); - // // } - // println!("{}", tx.calculate_wtxid().unwrap()); - // } + // println!("mai{:?}", valid_tx[1].calculate_txid()); // println!("mai{:?}", valid_tx[1].calculate_wtxid()); diff --git a/src/tx.rs b/src/tx.rs index 9a6848a..17024ab 100644 --- a/src/tx.rs +++ b/src/tx.rs @@ -63,7 +63,7 @@ impl Transaction { true } - + pub fn fee(&self) -> u64 { let mut in_value = 0; for input in &self.vin { @@ -224,6 +224,109 @@ impl Transaction { == "0000000000000000000000000000000000000000000000000000000000000000" && self.vin[0].vout == 0xffffffff } + + // Calculate the transaction weight + pub fn weight(&self) -> usize { + let base_size = self.base_size(); + let total_size = self.total_size(); + (base_size * 3) + total_size + } + + // Calculate the base size of the transaction (size without witness data) + fn base_size(&self) -> usize { + let mut data = Vec::new(); + + // Transaction version + data.extend_from_slice(&self.version.to_le_bytes()); + + // Inputs + data.extend_from_slice(&serialize_varint(self.vin.len() as u64)); + for input in &self.vin { + let prev_txid = hex::decode(&input.txid).unwrap(); + data.extend(prev_txid.iter().rev()); + data.extend_from_slice(&input.vout.to_le_bytes()); + let script = hex::decode(&input.scriptsig).unwrap(); + data.extend_from_slice(&serialize_varint(script.len() as u64)); + data.extend(script); + data.extend_from_slice(&input.sequence.to_le_bytes()); + } + + // Outputs + data.extend_from_slice(&serialize_varint(self.vout.len() as u64)); + for output in &self.vout { + data.extend_from_slice(&output.value.to_le_bytes()); + let script = hex::decode(&output.scriptpubkey).unwrap(); + data.extend_from_slice(&serialize_varint(script.len() as u64)); + data.extend(script); + } + + // Locktime + data.extend_from_slice(&self.locktime.to_le_bytes()); + + data.len() + } + + // Calculate the total size of the transaction (size with witness data) + fn total_size(&self) -> usize { + let mut data = Vec::new(); + + // Transaction version + data.extend_from_slice(&self.version.to_le_bytes()); + + // Marker and Flag + if self.has_witness() { + data.push(0x00); // Marker + data.push(0x01); // Flag + } + + // Inputs + data.extend_from_slice(&serialize_varint(self.vin.len() as u64)); + for input in &self.vin { + let prev_txid = hex::decode(&input.txid).unwrap(); + data.extend(prev_txid.iter().rev()); + data.extend_from_slice(&input.vout.to_le_bytes()); + let script = hex::decode(&input.scriptsig).unwrap(); + data.extend_from_slice(&serialize_varint(script.len() as u64)); + data.extend(script); + data.extend_from_slice(&input.sequence.to_le_bytes()); + } + + // Outputs + data.extend_from_slice(&serialize_varint(self.vout.len() as u64)); + for output in &self.vout { + data.extend_from_slice(&output.value.to_le_bytes()); + let script = hex::decode(&output.scriptpubkey).unwrap(); + data.extend_from_slice(&serialize_varint(script.len() as u64)); + data.extend(script); + } + + // Witness data + if self.has_witness() { + for input in &self.vin { + if let Some(witness) = &input.witness { + data.extend_from_slice(&serialize_varint(witness.len() as u64)); + for item in witness { + let witness_data = hex::decode(item).unwrap(); + data.extend_from_slice(&serialize_varint(witness_data.len() as u64)); + data.extend(witness_data); + } + } else { + data.push(0x00); // No witness data + } + } + } + + // Locktime + data.extend_from_slice(&self.locktime.to_le_bytes()); + + data.len() + } + // Check if the transaction has witness data + fn has_witness(&self) -> bool { + self.vin.iter().any(|input| input.witness.is_some()) + } + + } fn serialize_varint(value: u64) -> Vec { From c24442d1c9d41d8fff85bb65a379751c439d8a03 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Mon, 15 Apr 2024 22:23:12 -0700 Subject: [PATCH 13/16] . --- output.txt | 2356 +-------------------------------------------------- src/main.rs | 5 + 2 files changed, 8 insertions(+), 2353 deletions(-) diff --git a/output.txt b/output.txt index 7e9ebd7..f0cc41b 100644 --- a/output.txt +++ b/output.txt @@ -1,6 +1,6 @@ -0400000000000000000000000000000000000000000000000000000000000000000000004180d9d7b54c29ae791a18a2ef0fa15243c93033eb319e837e8715f780a7c726a3301b66ffff001fb0300200 -010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff2e31363030313430663163383362376561396537666566643262313061616338633638306564653835653364353066ffffffff0262b31376010000001976a914b472a266d0bd89c13706a4132ccfb16f7c3b9fcb88ac0000000000000000266a24aa21a9ed5641c82aed4212679005b6971bd6d4c79ae9996ce72fe55f707de0e3557424990120000000000000000000000000000000000000000000000000000000000000000000000000 -e20653615f3a3537b5c0bc677b9ba6e41f0d8d915224000cd0c7bfba1c184d60 +0400000000000000000000000000000000000000000000000000000000000000000000008c28561495a04d4c9f18319af04f3f0ebcb4a4aefb9b0f6aac70fc3a0010c7ef8c0a1e66ffff001f351c0000 +010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff2e31363030313430663163383362376561396537666566643262313061616338633638306564653835653364353066ffffffff0243693275010000001976a914b472a266d0bd89c13706a4132ccfb16f7c3b9fcb88ac0000000000000000266a24aa21a9ed5e997f4781deecd1ae5b7d8954c0239567a85ddece7a5dea6ce407d26725dd5b0120000000000000000000000000000000000000000000000000000000000000000000000000 +10ec7ec0b17c254ed1245d320ad894dee75594e27ac8e5b6c28b861582249b57 82f9f96db7bdbb9e70626747632e373b34eefd50d613dfea7092744169591b6e 7cb2a4f55245bae141a5d6ad51c08d7a9fdf2c2b905e4d97639ed80b82e69800 a9e537569db3c64340ed5abcdd983e9bb1b6ad6f90c93bc80d31c5cc0490bcea @@ -1002,2353 +1002,3 @@ ab783bbf9f00e2bd402a52dadb00a06710fffcb8740d4a822c52070292026cfc 8d4b0c071ded6acfe348b76e44043232a893842416e33431172d041ad4be5690 d15bdf5d7798a4d842cd7abc494484c5060ba11aac6dae658232c01d76cf32a5 7762396939fda1cffc72c273232794bb9e8fea91af248528c408ec39a1436be6 -4bf775e63669aa919b49cea40588033c1b83520cf0b417580b102fc58052f1fc -133e0b0bd67b98f2ef8fc13d36b768ccc316fb51710a9c8f8cdebd709d4db09e -abb65a16c3dbc43e828b5a9072207aef0654fe171a1bc688e624a2c2f07a6650 -713cfb7e01dfccd2075553b3f786ad19e6b5d3d13ba47f0d800b290749a526c9 -0f1d3efdd07f9feead7b2015b02d76ba6f0d61d66173507f76d986291b2543f6 -8f5d087992f35b70a24caf747bdbc2e6469e0281533ce388742c5d2149a899f6 -df4926d13709bb88e23192eeca032937599ab4b8ef93984aa618eccf1f4cb06a -1442b1e915d2b58716dbb0da4c1c8ef7b0eb71166046d5cbff1031a01e21efb9 -712afc0cf65e12be4da48dcfabd800d34d13704b5dad99256ba184dddb70583e -d88f50ef0357e84ef769a7e5dee65b43b6ed2576d99a9576091d6bece77b3ce3 -de96dc6d65b10125aa25782f4562226d6d15f4f3273f37c1a99c9621ef2f0f2c -bfba6117cb85a5fbf4d5acc2e1f4033e9a062906b9e081a1e0f075d28d54770b -9152662afc5b0b642a85dbfddec329585aa5e65c32ff9e4e9b25e98bf241819f -65502666bae303206d40cb1b8bf2500b6698a8d4a66289b791468f4f49703b7c -7720c1db850568c67822c3c95d3121241c54c1ad6bc95a14427eb36a98d4f4dd -54cd546bda2927cd8af5d9ff7d649ab35e8a5d92f5c3a8708ec336532899ef4d -4c512f1b316fe78347d90484cdff2a262255d69d4527163b47bf63fb857d7090 -3f9e7f855027d7d6f3db697ce76b41323805d879d821224ffa77c8e0b4ba9118 -b17f07860b0c14e2bc6d34e195627d0dc4adece75d134042e84603cd96939578 -68d9901c3e1b60e588b5a162449195b9307a153766f2258f3cfa189ca4b5d618 -e5576849d5981f76d3b1d19184110c8991132115dbf1e780e7df0a7241df5a8d -da8966bc61cdadb5845c8dc43b288e92c0bc742755969b349fd721d6a38af544 -b2ba410dff075a4f91aee02773677a8b4c833c934ccde6e74d34ace4b7148580 -1c6c6f407aba94a67d6406b2b57dda4f46405b2092961a4c537205fbb9622718 -1a5627d7132751ed567d8144723ead630341d4f3f9916f392c6735d9837081ac -384d7a60507c144e6d622d7554b72a26a5a95572f1da765aa23cfa9548c33237 -cbd16c3072a65bd78bd24e8842634293963f8bd0c23553dfb27bfd0f800b3bd1 -f5d2ffa85eef5d9b1e0be73942a7c8d179e2fb1d81124dd9d6778d2940068a7c -6644192bedca2dcb2c4b193a91b91edf32193b4e7e524cf42676cadbff6aa8bd -5515285ee161a6d0e92b746fdb4a0d3d8727045e79e36fa76f20e0ffc132d987 -894d64b630d030d27ed1f01865fb97f2d191adf7eac737d8ff1e1bc245b9a046 -66299b177b6709e2ff572d06abb742105a9d8d7cc1fe1a01b4374e4f14120ea7 -c41f3826d749c13b906bb99b28914185fe596ee62a1acceace8abc134564a8b8 -8a160b1143d1c2d99e83c011c8faf7474e6b796a7fd3d28544ec086ac9d29854 -32ead108423bcd3a15975e0627f73a67f8c69136cfd89ca3f7776b17252b1c2c -9faaa6c7b786c447618edfb1c76a8e36600cc3621dfc1ba1fb63a9c8330db494 -89a311aa7fd60268c5c9b4144d88a4e8d210db42283ab2cb09271ee34bd7796e -d4c64b4503e737de8d7a84156a3f6811cd40bd80f1173a2691193ff333039aca -4a19454e927b2236bc99a3b116aa5322a4dffb4dbde8263437dd25c62ee1fbac -9943a47e446a9057edac23e79f7de354a43008069ea29959938fdb5a29dac095 -f1aeb130fe0ab732fc0b36fee6b89c183fa3afaea4165cfd919c828cb3dc27b0 -dc5ab4ea3cf0dc8b9d4f0e5a9d72eea4c94e4296162141cd74d1e4f38673624a -a2e8277ce1aad09fd95b2432b0fe5a2f6a24c17791b4ca528356d8582e3e62ce -a643772e10c7370a9e2c20d5416908b6c281fb4e83e15af6068db64db2892197 -72f59b18126dd3391a44e9dcc754ccb9028b327e6f9d111deae18480de7d6fbd -580e0bcc88214146b362948cd2154b9100d2a895c1741106165cefe487199054 -fcf954cf99fe5627f8b2cea1fa76d56872a2ba7c5f1666bb8640227263e3e6bd -07799483358740d519f7cc57e0426027eb33ab3012fa5d565f5cb2fadadde7d8 -a8bfb1d54d2e2f6ba3af36c332b6c33a58117ca84e21aa13db2874595913d251 -0132e5cb9d76ad5b470a4192e01655ee073b383965b1d3aa68cd29f4da983d78 -e1b912f72b5ea807cd51479f803c46658f78110f6a7cca7f476db7df0e2c3bbc -25c50c4a4938207dedfb73c603539c602c1391581fc7c4554bfd7cb186fd3b25 -6bc4a0f5bc77e1ebb244b53445b219d3bad378683bc645000bc8a760e5c93550 -3fb12d1e75fb9ff231ae18839b4eef27e60acadf27353597b10ec7eed55ebdad -6ee3df8af2c0f3641ac5b73f89660e8048678621b77efd0e36f849e610e3d543 -49441a6d2b5bc10d86eb6571a7649b267e6363ae43a4271614485a7c169cb2e8 -fe0880764cc9d15669dd6a23f70d54f4d15415286b7daaecffa54f940e64bdb1 -1a0692982fbdfc193d188d80e550a75fbc5c0951b0a1e4de1043ffaedd1937f7 -934548bb4b93faabff276b5ad2fc6109a883eadf8ad35c2d27fb0b839903c90e -f8cd1682a37f06cd5b3963a9203c51fbfa1aebb8f82c2c4ec9b30787b1dd9048 -58af1ccc221542955bca9c2600e71ef9157b43eaaf4d40f47d81cec81ecff561 -4478abc4570b369152a238834cb111481b74b8fc3023ca94fb8275b4531e72c0 -254b130178ad82a2440aa4506bc45c23502772952bd20adb094701c9508040ef -382be311d3c2d460664c00ec20e53abdebddfb7c96977a87075deb3f3d3deef3 -e676273e11d0e82fcb4eec39a01622a331a6f3a47a56dd088b85afdee0984e97 -31225a10229105786287f151f03835858a0de7601ef48d95c84a0f3c42ef6b03 -a07e1e086f9d0e93ac6e98a5923d88d57414438481b9671cbfeade4dd1ebb531 -7a8890f086d1b76ae9adf5bf7de2230b444874e6f34185d13f011f5e523a4c11 -d9920d28aa499f164621b167ffbe20687fed0f29e36ea1fbe254067913dc1ca9 -9bc230fc05458503dac38f290fa1bcdc13d7d6d5832dd01533fe554a845d847f -56b9d1938f7155691e95d7af717e2d313b57c5f06382726f3690dc5e26508945 -34f0d4ac9f4630b64c9c9a04cd62b1b2a3d6c14e293c096c905336aba5107e2c -054e776502b4aa4cb46bd049fda6776187ddd5222a9ef6ce30816af197e949b4 -d5c8db08359a29eae0a8832314eb860eab1ec9813264b708f228d0294eb46ce2 -63b0ed06b2d3a6eb78e176591abc3548a027a0e7f261d1398516925f5944807d -779dba5cbe7df2a30aa2c5fb6ea01e4d138ae5f0daaba524566bd3591b9503d7 -a8a98b1813fb488d4561f0e0d6261cf613b26b676df3b58bec889a65f7f1fb3a -fd0744eddcea5bbae28b65daa28373241ccc009e56854382c16b9d17cf2017c3 -3823b06f22f403535f1ed1e4c0bdcba397c7362f9c66df370c63501f16b7535b -5b72faf5c8b978a25a4f9e99a860caafc0a845fb6deebd79f88425ff933de029 -89431b8dc29ccc26985d898dd7aa4907fb287a3fcfd487393ee789e0daa4a49c -db2dafd6ba4e1fe84d1b47361c4671dae4c52902a276e30f16e6c6baddf57662 -a47628794691fbe9ad4d4adc4a16137945f46a8ffea83bb2610d7f7ec8d02ad5 -61b7e3389045d323b3c9b03bfff11f90e17e4a642ca3b44c889d91ee264df9ad -5f2842a66f2641c128340337063d0f34d5ed4e6bde2a9d268e54fd4cb7317492 -2a493a9719c03c11032e65e6994219c19f4c81ee1b9590c11f1da4bd972bba98 -4dd70c7440fc53726c040a6f0c6c05e11c8c3035afaf93e692e35b2915be55b9 -7c5375fb3241169471150411cd1f3c34f3b7b20817b41ec80d521e88c15aca28 -6adeed92841ff92692ec0aea23818ecb1d4e037b2ab4326877067b2c797cc809 -720d7a60dc73b27fa50203fb5a8bf9c2439499439327da2ba21b198611e50cda -49717c89152bf8d8a9383d4087a338ecdfc9a2578a88bce15cf01a0f2fee9bd6 -cb85ef47a1c2f4924cc6515a56cdcde23b47981a49d5120577146e8872b94db8 -413b1f0f3dd7a4e73e7cc8031780de1bb3456a270e7be673d1ff54142d6eda81 -961c9e2f015e4bcf06e6cf2e04b3deeb495cc92776085af8760d77ba61af452d -478ddb2dc0844d1abd69b0372660a51003c0ecec8ff89a86f93add30f2479cce -346d1a913ee4cbcb0311fa8dc77e65baaf8d95249b77581e707cf6cb18e46c55 -d7cb93fd68148815dba1ff84bc5e9dd32d4f61fce2798842e4755ac338458c94 -cfd473c7b1f15e558e1f4d211811e718174dd57a6d9a045342579bb707a52b94 -a323e9cce1a9c4a3951dfcf9e525bdb78a77a34d73e2353beb79009c8f8a73d3 -627a256c14b4d4841e67e79a2cc48d9f16934e77c304da17c52c230e7421153f -c9015c6ad7f7e59f8fcfb19f87347c9c9285a0356b668f969f3cfd31fd7dfd20 -0ce80f60e096ccaefcb787ef0ee3cf7bfbf7164649a3c7e63c4705684d373045 -aa7638781f16b52f40d2e691550bf4682ad10f323584ea56566b007d1580444a -5c088b8837d4b3414a4604358ee7ad7ea9c26abf50e4c733de1777a18c1f744d -94c0376bf8cc96c8a728db4ea9abc5b1daf2efb7be05dab3c6bf7ad4f462c358 -693d2d94c81610cc0811148dc54c9261ba75a5bde19a33339caf987d2106d1d2 -5f5f41a7d1783b044ca77c75d8c6a9104a83c9c9aa9d1c5f59af8f27f3427208 -6a00d75b34368c65711afd5a979bbc669577ac49f8885156d1f07e2c6bfa116b -5e9dad9498d8e9921a87d8ad814dd4e060da7e275a11d81acf0e396ca02aee5d -2e09cd097b1d3ecbd45ede4b4019d62480d27222aab708d3574b03503375bc51 -7986704f56406f40de9da0f75f7fadaae830c9340d893da8e853d4ed632d3613 -778568f790486a29c250a45d601120f30a83302e596e402e991c2fd97f196e60 -c587bf02524cd4a5dd529f855ee41192501255fa80f1073e044d678ec8865ed4 -5e451cdfe1614ecd48f73d93f767d651686985c7a6bbd033a4325b76c5a9750e -c9016fb840750ae7a0aee9135af8f90baa0cadd457d668d431a3b40e17879ff3 -089aaf0d90529605e92de89f303b6daac6a8b3d2365ab1843a06763ff3a61b65 -67abac191dd421c0b0d763c3436f1f4ab2a4f04c5ee12418ab28c4a608f8b7ed -2152369bb55306c2662ef31e432878b4a7d9cef62ebabf310301e965da618370 -7af5d784ed2347849ed485aa544625cfc10da0bea977667e9c0dabed82130418 -bab3cb6ca7624513c290056ca9d9dd768e1e24766c8274a9f16ed1d8305ff426 -6b474f895489a8052f928dc8b258f80ae24331fab35650b150a11c396bcc378e -7a8e0f41d6e6dda7033f8a8e456df113d2eba6bc790742cbf67009eecb0eb580 -aaaa34fbbce3383dcf4ea32475a0e0a32774ffc724e840190db16bf190c34be1 -cddf84e3199014fbad13a3c1c06c3901934ada1afd5c1640bea40d5185e24bc8 -a6c9247a760bdd862af1157fef8e4dcac2e33d7f60e394b149f4e22620486d80 -5bc5992d69d5842e119fe594c175638081880bc4631796379bd2ccd3b7124675 -c52e5c7afd23d74de3a860f57c60cbe4f63c75cc388db596364492be46297f24 -c2c976499bf3dff472da9252e990e49a00c66d2277eaeda63d792d4d24863638 -e97e360e51cfa9ee2fa7720c8d660faf5246a4fbb0c8d52c84e0af76b7be02c6 -e4446d9caa9e7af06db07bf83e81b96c8e783c48d0653664f47043e0387c8be2 -5c87e98e4541a0b55e3d0f1cb1831b93e003cf35063ade92502e6379b53c0fbd -39239656b9e496c7f8199908f229c5c6a2b7822d5c0d3bfd36fb2d6355e2cb1f -82759072950f9f88c64a7e33bd096899bc70d3d9ffc667b90b15d1698c2b06eb -2bc241bae962f35ad45d7edbd69b18b7da0608223ac8223af03e83c51816c494 -562020c589b13373527aa059a1f176bd54a0b2187d0aa7007b41d97f99facb96 -4c5092439b4c117a91a7c7ca5d6dd79ce365f664f4b61060b99315947da64484 -1e3853af76de2f01c704981d8471d960ec786e09e1dd4450af152a618d30bfcb -c1ec95bde4686e2705aab12440f1bbb594ed37e7fb3467f280ab6d4851009334 -06531bf411cb31b669e4b6ce0354cfa2c2bff30d55c33553c6bf8a4da946e20d -9e48f83e5ce4cd704858f5185bf4eb98ab9966ae0f5fdb777362cfd8c1cccedc -8d8d1a54b84c50b98f2b7cc7629711a9e8545e31325a6a1cb88321d3faa25b02 -0bd2dabab83ce32e087466c1e5b07a6c21e4e84028d057af6413e70f3f0133a9 -1dab7aa7e13a55ab9031bbb7d95f3bc5a81b4fe1cdf664cd572150a3d5ddb87a -eefc82010b4c7e42733d702c3869f9bc170fad49f47948787dbff27795f29562 -884e559f294971a6868c3555ba855fcb2607384a9d1ccf10ebb2e6cf1e2a7bf2 -89daa601b73311e42dee11cd34c8c16e2432471bc8b8f3d27a413fb4c59dd6dd -85773081178a29401b1b3ca794d9c5bdc4b848d0f4cfd69a7f98bbc1497fe4ef -44734a9c48b60cda6ebc42c26d6223e978afdb2e6506f0233e43041f99eb8db2 -0571c659eea0a98ccbee0d8638803b5be1153f9421d026bfafc8efe95d3ca2f3 -501f1dca1da3cd30ebdedc570901243597c4a41366bc4c4ce0bed7f9cff00c39 -55870eb28ab7890c01af34865100a9dea848e86321f519fbb65e28fe677299b4 -7ec39703c5a00985484b1493d258da1c9971efdeba3315bbd3584684c9ccb803 -8ecf7c0bba830dfd339172926ab4ae8fa3d2bc054286b6838bb41e1a519ba5f5 -59267ee7cda1f660422d54c2782ba0cd26cfb1455057a6cb6106c58aa6205d0c -72cc00ce506867a2515a279fc5dbfd97dd3654261ba7723d36997e5637cf8d8f -8230a1fd29e3dc4ae4891e3be52206c7a55da54b44ad8ae6f6234b45ce37f753 -edbba55a9aac364dcfd6c8ef59b7e908b4c6d28c9a3d0ce7b65d2dad9edb9f3b -48b16434770b5a2873c290e50e3bd6f59a90217815523abc5ec8033b5c5004ec -f8454f608795d1d233fe53ed86b361dbd19aa63c591ef9a2684ad2cf8252d104 -6c354d1c4a23c8e947e7ab849942de1c4ec0cc158d14801487d857fce67dafdd -1b033479aee1b28f7d7af5ff029d9d7f8f2b81cc9fa3459c489bc0ec215b0e6a -7d25666f06424e2d9bf6a108d65400a4581fb9e9be54c92f71baf6c2d2f90f55 -0ad7544dc295ccb5691ce57cf65270113f051f63b28524a0c2b48f7b1aabca61 -0ebfb0ad538f162558c170e95e72f357dc1c8f4b90ba12b54ffe397fb7124c9c -099c975d37f1c9422e16db0e4d2903717508a550bc54ad27be2713d8d74e276a -7cb995e1362c2bb21640c886e36641c907c14ccafd84f307a1f74b0eeb782870 -00b0f05b0b9fa3dea1e7c74211c95467975ae8efa02f03eeecef8febdac9ad0e -7ed8b2c5407db118cd72363d965c5a09d194c3de5787a94f57d2bdb493e6cab0 -04032ea20e8b0594766e67a6517a247e059bcd547748fd6cd2b659c59a138f66 -4831babf5696b40d935cc552991af295b6de7a51e4d85419695e28dec0739bd5 -2f9d9071cd9ecba463f5c636faf106afa0a09ff87ac24497290a36d718cb70b5 -a887af491831652de111eca63da0423046089cc5381b347d70ed9bcc21fcee6d -91c023eff478100e94768b16a8c6b0c95a3d8abaa51e47117196c26064ad5a71 -d9c35922a4c7f0f6e0c7ae397232009375505686d13fabf211f72730977ebcd8 -455c96b9a44229c9ab9bd5be3e379310556f3e086b977ff533930ba669569292 -49d80493c154495f3a37c6e6d9d7f6a778bd446e78bb2d0f6b3bb9fe1e9c20e6 -96ba6e6dc41e037a4161c43b0ecdcc41a02c4646cd67f7fde4839d6e30299b81 -da0d7b63bea7141f6bda10bf9392df5656633c422868db496f26edf35d3af889 -364b923ec382e6623c6fc551ac6a1f26d5078dfc4324805a981e3d788ef6ed03 -a9c777de2eea92af61dee0cfb16531d8df5fea9d68757bb86f3ba261c245ef1c -59cda35f306894e1b6e9a4b427ef92d6bfd624fcd19e95c6740fb7cc5ce60a72 -14034095e038336c10d445083d6d2eff7cb91ef46c61d3fc2d2f5b2300039045 -a623a136b1ecc81ceab6e6952ea0eeddb721ae6a834eb5bdd591d4c2e09c0e38 -284d0d226ee59d91b836ba783dbd481b0922bff84177b80f67486e96a3a84c80 -c4ea15e50f72ae587d840828210a88350884fba15b82719853627266dc4aace0 -9409542217a10329ef0095e92a29e4464059948371ae9a3d6c58319a52052c90 -e7d4b67dfbf18e54c3371c8d01d724653d0d898132ced1a7eb20076d94da667b -213056fd6df457d3aa6f4e6c11f896f52ae12c87387d27bbcd4a524234cbb67f -3d80f3ef189bc602d14e512c6167ab9b6ecfe474488d29486a58b129666dce3b -fa545494c3b2f6a34bb2d7f1dae71979df159ef9b5204b5f0e4df265f4b2c949 -bec91311457d7dd90a4f4fa2f702f7839df02eb8ec249819cf713b8a2fd135f3 -1aa08b068d7ff1837b867dc9a73f4dfa2d4b3cca25469f81e1b75ba8574adbd1 -f1b994fc964f19fe34bc07b9be1a0f5a9fd93bbe41264b643a63b1186f1850bf -808c759f58afcc8cd45273a76329dd5af35bc3338f0d43f57c6291096500db32 -d0060cc3b53efed24564faa7a69ed3e862d5c206751db52ea6471adf7fd110a4 -acb1e7146622a4aee93dbf47a8d969ea84d0f47e098d82e6e975afdcc3eaf47a -d036ea10494c005cb7951d49d6d3467043bdad638731cbfd460a8cfc65f380e1 -19b15029b708cccfcd81d68cf1196e6577c010e7b72b270f3e4b2dc3067985f9 -5499bcc9db4bf8020d6a3b02fd042587cb48ea4c47ea693d707b77b80f21a1b0 -a76c827945cec184ec7b07d26bc7220a40541e18cfa76584ccdc1604030acd20 -41bc2dca735db7dad282c45304d38f29cdc0aefa0a051d7a020bea0759acde01 -8f2bea76e84bbd50f2653dde51904cd9ec30fb30a3cf7ce63c8117e66cb1e42e -5e0285293faef10a3c97f7570688bfa75dea27af4186b33fd6395b67398fec00 -cfa9e00f6f298bd911857ea037d09e2fb42b0a5145452ade9b2d9b8464ebb6f8 -105377b32d928c0ba51a870ceffe5f03b990402e973bbeaf85b7da6868faff34 -5b4a6f3ec40c0e6721cf2848c6ebf1b12f862eaeeac74b2677567c5e32754996 -25da48a74303a1339b8aa7e242fdcc97d6889bc1a2066e4478205607564147e8 -cc9f421202086446002d6abdb57d7163666f98233995d6ad6d69e0c75ba704f0 -9914e1d946c72ac4359706c114f9e769752a6fd1f3cccb14a7c132f7db8e373a -013295a1dc26d4caa5ee29676e7afe1acbe2bb35eac87ef8430415d98ec57012 -902d07ef61a6330dae40a656b7f8dc8372f7e575bfd7cd47f17588dfcb6c735c -746765793a4cd8fc2e8d65c699c5da82dc6ebbbd2412e8e39075169dc5a8d7ad -9005ce579a43b1ea968532718d2df5cef8d1d9d0f63ff2571ff92fe3ddadb156 -57068109ca9011738cf90f2e46474f122dc8c875eff23dd92b2bb1b59d1dfab3 -67b03fff7be275b03f09e082e771c876821e61bb22155f86342b54e723ff8bca -8c850c8ece0bd7c7874c24d43b690b3372c94c98b31141058f2c39dd3c461194 -3fc32c3b3dc18000567f09f1eca85919ea78d102c9ad59dee55ce5580e0d122e -70ac8a1459a2c23b25dd2171186750c54db098b8d6d214f3a1cb9c91f7a4545f -7cb92ecdb39820505d2d5fac724fa131437a4e94744f962c5b232e9701347cae -780d298936dd67f594bbb737af993fcc87384be16b0240a4f591aa02d87d660c -ec8e91a3180c8d0ca9f4524c27ee9241e737c1638d086bf75c62dcc31bd3695c -d2685a67fb9c2b770fd60b2b2c1570a764f4befe0695fc6fce0d3fef206a1974 -5e4264597a493f7a3ec9c66f6d4f820d0b3b5d645f7a6d94051c72266db25bae -878e637261705bc7591c6aab1f8146879e79fa7b3e64ded2f0d9a804bb09cf7c -4222afc57e02b67576c5fa6e010f64760614f9c6a8ab280e2a2ce51611cbdcb0 -f9921cb1d0fbdda2fe9b968b714adf525a9ca42312121d3005baabb5d13d223d -ef1560aa667b7c62ce76a5336c42ac1e4e46f5c00c8b8e6c3a0ebd01e735e8a7 -3eddde63ea46afe6e97bf3b8da41d1a229252ccb007bf59374f5efa4c98c2e2b -65d1b1b964611d0978f80fc588ce80fff0f97155e2ee5f785c0c16f6379e0987 -57a5ac37dab9b6b5fb2aa16abd8e727493e9695c09235846771218918448089a -243ca60f74b6a49daea14dee226b9d0e607c87236244c9400fa44f3324eabc84 -8ee39da18e0d1b41f81e28f3a66ba3f4581fbd2add9c0fb81caef44a4c51da7f -21fd932155561171784ea65cefe5d498701dfcfa4f91b088859f6444bef177ee -935171cc550745c318b2718afd7cc0b8d5fdf308f69a81136498bfc35a30f30d -67eeef4cdc88e0fc4591ff511ccd001a0bfc13f039a49b5f4e2e5729da7205f2 -7f2bf8c264bf0178ca76f1a862d39fb8015918a0cac57161a2d2f8eac88549d5 -cdf64c97975b25103f47537f196c6ded385cb11029c9177e0d245e58e8d1950d -322462b55df6498b891b3bea0ef7d7e284f66830b4a151f1f9c22b4b9e0214db -55de053b7de838af416492b03df560f582099ac29f21b2f54c5b051f71bf29de -9f34209abcfd9f16b67fb02fda21b077c3e2a9c0cfdab1b85fb3ab45a507ab8d -c15c904023b54914307539e930d4db5910cc0ec238a4bef9148b8df40ed10c90 -3e89c69a29ca3485dad7d4a8d975be9507a2305e798f845febf3c90ee5b79fe5 -c0d350d50c6462c343b32f6e768a19a3a94aa9c5a42b3d2c12cc15d42e0bb800 -e6d009e7aeb59b85ef01b64b71f6d34972e2918f487b87356952bbba365e8515 -34c5e4597f28921f87fda175d16ec0517d2e3178a4ec46a11bb68f4f34abf539 -76189824bee81d9616da50257d9dbcc8267edb91cbc23351fe5124dc724c0e12 -acb8205b697427c87aadef83574b5abce930faf83b6bf499784ba3e396059bca -482806525297e1a46d25b7b08adc7193f2392978911116a605c0302bfd67adde -9344199726f0eb987bef254f511032b98a917b2a7a938bc12a10d48a73504bbc -6412354bbeed31a54a7e0fab8924726edb2f79eb4e134c7a9631aa8230e31e3e -efc2568c6026f0d1e843e812035551eff424ac7c419dd26a2f9d5c8d7abb5a0a -732c0d3d30aadd3d73e7ec56023cafe20d98dc46aa6beded8cef1a1d5a5c12fc -85f353f7ba11efb38ccf91e31cfc26a76fa197746df672773a3c67a4f19d3fa0 -42411e36049e5b40425ccb17d66de7dea5535a9aaff06c485b46724953c9ca78 -56e703b7b0b109a0ec6d1a0f64b0d0cdefcb157e1a66202149f392be259fcfb3 -b90813408a5550d1d7efd0a7dbe2ccfeeedb655f4009ef60d80a5b203fc2d3f5 -d83885af7a465c6337e5e0ee014b2225ada2d47be3b4297b574000d94a551c13 -858c5086b54258bab7ef61fdbf4c08f78b87380dc8627684df1cb4d2e5d3f1e0 -7d1e92c898a9b7048b451cb1fdd7b9be6c3d81f9f2845a01e45214752fb41865 -9d9bd71488f5e33c3974a2383ac182f9c827c86b233e6d17024fd5a52c9152fd -00eb746ab26a55ba6c53d8b3260f4d3cb48919e629ab9f1a8071158d11ab097f -082c545a2c78588c3fa89819c223a151dcb9c19b05ea0736945781cfc506cb19 -9679c2b2e05b13e317709a23bfd5429762b3ef92f6d3d84217444dd1a99b8217 -9d2a3d36db09be26110ba8085024cf6a801cd29c6766b965c4a338a52c33326f -b449b2179974b2a0a6533cc00a7c6a2b5597b6ac8f91c456e1e8b4ee5867393e -94004f1e307c3a0ed43e0270049c61dadb0c6900c7b7181b58c4d768b3475e34 -6df0d989547117ba1bd109a3e35329ffa085bb7f1f7b5663dfde4cf70a10317e -aa5a705c3925310445303cbaaf57ad76ef3937cd871bf6e350603c4676f8fce6 -b7f796d5bb80286bbbe41f963eecfb5ab9dc41e036e131abae09789cde8582f4 -8f654f4732bb511b1a5e9e0930f546daaa31a3f7b717699862e908ea6e776d3b -85ba19f40c28c1704ed40eaad07ac840a1ebb89da3c2a0458eb63f61ac482f78 -16f7b3c2975183b8940328b9349c0ee4380bf743b605d2d888fca3fb5dcfd302 -e7175b849b545a19ae5f73bde21088c8c87f6635e180a4bcab95b3eaad44f746 -280aa849df5decfb645429b5cf0032c2b35718cb6fc1dcec7736266f2d775002 -4f4057f3593f2c693402d0dbda82b71f4b6db7658dcd2e9b8dc16b3f71598fad -be7aa895482831955e05c4278eb715c1ed3c8bd465181362e92f85cb74912c5a -8b6847d7cc36e6369432813aa3e5b5e162e0f84d5dc0d5e29ab7fe37f350b77d -f04f8cbba9c6391662107ad4a1b9eacbab6ef0f7811e38fb0e1f1ef105ee406a -a6a0d82d9cb5d8e8954090692cdaf9a225bf3000155fcf645c94af63a5969cf1 -1de3ed4c04240b7ccd44f91c9b525a0106600e0f149ed16a753f178a457b77f9 -ba4fa39344f707bb65912099b652b673fc95ba3fb9e186f67abdbafe934465dc -12240c0db033b5d9ea704eb0b90581b86e8422c5514d28e0951c547483a523e3 -9ba01fbf55a0017996806e94ef163bdf08e1b5221bb49f82b2b6b6b807939742 -c26aacfab1d28b5285be0ed573ce035ea8f93a8f90d00d24b5271e8499354ed5 -16d99335dd5705186137eb676101a21c79649df906bc3cc1407c884712d76456 -27290145da0856d54f5852cdc3b37ef6b6a9f5de2b199dae290fdd0dd3356e3c -497b8e5c841531203de45e56a8a6a3df4158d75e6530cb700f61ab9fb8dbaf97 -a64b0b9c82cb7c840d9dbf9a9d3689e566f737b09c2404eca0fcf25de22d6953 -39f771138da2f22786ce2fb216bfa431a485d655baf3eb0f0a12f4bdeea1b9f1 -a254fa3cf6f2a002fcd7c8d7b7d42b073aceca69e969a5b0467d4d294d8c6ab5 -062cebe6830405ed6f76e7cec183f659798910fb427bb85dd5331af9ae108b5b -5605842dbf1e3aad27f8785b5ac186b5d2611630adf30edc68a5325fd379b2fb -673081e3bf2aa46e0ec23880efe3202adbbd3ed65c9f814d4a17467720d5e436 -8c8e4c4e689ffeb48c44096c017275395ef09494c9829c17767f3f5e15dffbe8 -7a1845f7e5b71035754a273d448641e521a69fdf38b50a90ca69c65cdef4afa9 -772d8ae411f280936af9a0c198af115bdd0f14bba063f539a83408930bc9e118 -9daa68967cf3ecf5dd41c4218131afa3af4a46b3e40ac3088b98623d6dc31dac -5ae5be014ba43d0054e9e5a8028cef55ef765733fc42c58d91985c4a1a95c980 -d774e878ef009be9b0e4b5f48602559fddea82ad860643969158582a9c418185 -b5c00d9c573736609f09ff5ad1b68ccdb90f53eae4a43e26f003cceebba47b3b -3f7d71eb2067d559de8b7d2610c78e55bfc94f4737265feb2bce7b580b411cda -006fa988d1f9f8b5169bb699259eed3d414c3fe933ee31fbed7e0bb10113cf07 -1b6dd3b5c41b2d5d99fdb2d0fbf7dcb9f29142f37f79399f585935da05c5de55 -e24360a549a9859b0d8fbd98f25dff341962d74891f5e68130989c5903343d88 -f67aabadecbe6dc46b1897f2045b8f06999b7442cf047abcf901d5ca778adef9 -c80ffb705968cec17279f13518fd7a673dc1af8ca8482f7ac7fca67bad58e50a -c9245a992a5dbb470c0df0a2aecb46e0aaf90c80ce3aa0b67f615985ce0d704e -2d747cce829789de7a7d63e28e2ca010f08ac41460fbd7cf7c2f401acd03a3d2 -9fd94c4688e627d4d5a41fd7674b61bb4ea7d9b9735d62d4f71e145eab1dd401 -d90ebf4ddbe21e8865117fcc940ec652e771c6fda2d74b6193a128429ee5f8e3 -f86d0d2bda62648678d25146ff40cf13674ffcc1302da6146e109e6e6915c79a -1c508ca9f1a4e1b3c17f0b0aafed62de8bdbd3d2d1e068bd404adfe8788b0836 -fdec7f88568b3eec307146a2d1f170922f7e135c910da21c6a7aa446d39f76ed -f911c270502646024c02ad50e01c618c2e0580df3344ff172f6670ae8013749e -fd791d73340ea96b303db2309d37091973a15acb75185901de5cd3998ae73085 -aa102c4df0cf41da6fdda24cdf6186a236f8821c2fcff496dc7ddc63b81b5897 -a00cd42bcf23bbe7d0957c05ba84d07d0b1e5a063f79b858068126da36007da6 -9819bf168db06e1a166be928b0fc4c567a6b683558731764a524d25bcb38c1ea -034b16ba7f92180e0e5d4ba5eeef2cbea5da5b2de715baf5371d686caef66857 -8633ca380177f2cf0640837881a84e52a397ef61b2d43cd8f6fcced9c8cc778c -0697aefb8dbfeac95fd51c3e0ed814d8cf6779c144b853bf36dc3839b4fffd1a -154cb1f1a6632d3d96e52bb23412cd09518201faba4e4097d2b30290be93432d -79c0002d3dfbce81fa061affe5bca46e46768bc26ea3b8d1249107cee4669148 -c5bbf4c3e1c7d2c49b8b0ba00a4760f0e733970387eef72382c3132365f9d293 -c08573554a6e1a3a7c8c41a8a3f5f90a99fc2061af8d515048562a8dc0409c13 -3d392ccb5022723a96ed2b7840998e2f6ea3e5d76ad05adbfde0c7ac908e15c3 -20559e49311ac1bc57e553216cb7ee53865d4b2f4416d26e29cad3914d54100f -240c9d483e0a076e22d7ebee2061550b4285bc7555cda61f7b322604eafe82b1 -060310ba5cb72f3be139b05a50cf4d89be78cad3fa61b82b7e00167439a53ee0 -26eee3889d28f7c059fcc72286d576c4a578ecddba3215e09b793728d0809e16 -7cb537397a8f371c82b503a459cb2efd310d62f1a36d3578e840e0bb59790db8 -5529b79da55654025f9cfc29b3602222ebe626ba4ec6921d20b4bffc65b92b12 -18a47798daa35369903ab19f19fdddc32ae80debbb673ca308264e51fbca4e3a -df0a177d041d1b7da1d8a8f58a583523a7616388e5e250b87d3f6721bdec4703 -b6a86b01e92c218ca7e9442280b51bc6483efe51194154ce42ae2c77de5e8200 -0c43c7f0c6ba6a59de1a66b7932b56c2737ca0efb26bb6d3d5011ec57d50cc00 -4e4b2967dce0a6e668296c0458400f53ba82553ceb771a638cdd4b67f8604afa -a282d558a0012a5f69e89b9065e7bb9d112bd5ae0722f954cdf3ce6926b8b9fa -3ca5ca8af594f080db65859790cc26fb8427a7d904979c2980161f60b8890798 -b4b167623fbfb5ad1192f6457affe12c3d5014c9beb30a8c82ecb81e281e5519 -4f30834329f7edad2f63824893b0970e12707b6b0e0526532ad86bcf96695ecd -f01ad807f854a6930c0300298648b2912b524ca6b7ddff12f8b8a16c6dc7f133 -9aab36a3ad54cd4c9ce53651b081ad80f3a511b202cf247e8194f2e9bc09d3b0 -67d917f49aeb5d9985b9f7bbb376185e9f208e3062b77cc9a2545ed27f779b75 -2331814ae1de551b87950fb6540fdc00258971360f341fa848c6cf951144aba9 -d1fbbd30fc61e23fbde66a1d308879cd5b55328a03f2716a6e053efef48af9e5 -86e67d2d97850bce7595ed9f6468623152e8af46953208ecdff8bc0296a87acb -e6bed07a1073eb3a92062c8233e83810f54ad0c54a1dc924b12322fb6eadb57b -512a462521cf2221911e06dd58fe975ff1511460cf4d14d441e9a40b4cc203fe -3e69b5bde7413bccdfebf6f0062d25d1dae155121945b172324ad520ac0018f6 -3ede11a5006c288d12b5b65bbd33d398a764491b4400c8fc3fec83e974c0875e -45ef6f2985a53a10673ff0f2cf3b974d5faf5d6951bfcb191d4e57cfb7bdcf65 -f9247545acd45cdb07197ecc547976d007d31305d094a3e61d05e793d918be37 -645def9858a5f318b1a0c6b2dfe362e03ead69aec62d92dec7c4f64a1e0bdf58 -ba0777fd2d720c9dfd4da24b7eb3f2c658c5f872263d8c52584d6d1d3634ef5e -12a32fbb6f1d8785290fca81c9479b351fa8df646dfa4072fc91e5cec339de14 -e2cd5463424e7c2ffd6cec1c81621d20bfe1b7741ff1548574ac299b2e65eba1 -a2ee143cfdffa356d48527451b75eb81fecce1eb390dd10aee90987eebf0fd37 -b90c582f4030f83144dc7dca84bd87ab8bb4995828c3acb8cb81cb91f0204689 -67b5315dd933ddc61ed5995088bfd7e2cb856ef815ca5fb034b37ea45875ae68 -1e991c6854c4499ab7da19f2754a355d17a2c978816bda6a0ed61aa6af9ad04c -9397eeaf9f5700aa1a7e468a1b1027c1ce2a34d6a7854a83373a5c0e9427d9d1 -7cb1ba66844b01a9ce5b62a8f01f5f794bf8b1ca4486f1d1bdcd9b06025b9ddd -65d04046c2e30fb9748d3fe663210ae2291c63d7424ae311fefe2dd94f182c2a -e611412545b9f7a1ef0feb6b4d2a0824f51e654445cba2247f0e8d7b08118cc2 -188b80c55bd013cfd7a2b25db62ac91a1c4a51b68811b20456c9145d91fe0b04 -9e0c47600ec33341362a32de8980709e1bba02c90cfb13f5e6f5db613a456f1b -6a99330b7970acd9c2a19683ff733421003ca4fd9f629d4482463be1beca3277 -749066255f2d3a2f1409f764c7c8220c96cacd114b3a693c3b14a6a2b15e0385 -19fb3c01e4be5f4b538b400a6da152cf59d1898b2eb2ee3da7832c53fd35d468 -1ec0199e01f4d9300bc2367af6f1a2bfe40f32239239842bfb98970f5fb599d5 -1deeb28dd349ffa2560a82ea3d682be183af204e8683bcaca175414896d9bcea -f8d9e70096b38b30dc608dd368bde84887f5ea03185d7fb97f03b903128c92e4 -aeaa1c3944e465fbc1ee7018797af9fdf568f2a16446d8b9fb6cd6dab0510f1e -1c9c35b8e8fe7027321497991a3922626ffe6b452c86c7e49af00aa59718acb8 -2fd9d204f7986715a302c2735679684960263f8f7b8e805f768acc37d98f347f -4e4b14e0d955bfa053ce4a7c3245ab1253406b480f70247d7a5ba92636d13926 -f78c827099a5ebc612c5961ea844a23193229463ee792212a836585e28872856 -63377566ff48bcd51e5ecbc8cf0d61fbed98d4ca4d14928e46bfff0054eb1fa7 -3b363c755d5101f861b8e980b36e5c70a6b4f9329b4132df65e3b72b37ad128f -2fda462c1b05dba19cf2ba5e9a19a93ec4de0bf42389bf5831694bbe35a9f27f -7ab188a5b0c7741fbb3e2c0b1f8afdaccddd93e11e3fb1ecde1c8783ccc84933 -1e08b4da220dd0fa4aba50feaf5c2c7e6451da2ad81fa3834300efd733c036ab -a301e110c14e1f6a4e721f9b65259b429230fdfd24218f447107d0a26980af6c -1bcae69ef7bc9d3b637a2ea4080f01a9932e6d20290adb87596d49531a6b223b -e89caa31fc4edc8bf78c98461103ea56c2d366c13ff35002f3f90693eb36bade -e9c3e6b0047d3cd30819dbb495a29603cca9ffb00edfd960550efdb913282bd0 -99f10c8fe5f1aba938d343e4388c5d3cd0aa06aae35d1b3784f43537466ddb0c -f2c058b4eae46402ca11d3ee717125c87f469e125f14cdfd776fba2b93f5a4e9 -389441c88d003100dd2b18ae814870500bc359bdcff9f26bd341c57947be3331 -93eeb04421798c8af37e8315e4b610eee2161884facacdc79fdd0582c1dea0f0 -11efe081ba7a9b427f1385c783783afce90adc901a8d7545628fb19907b8e5e5 -037da7389842040606552c1047bd8f583b426010206cfe52b8f1ba70e4885b7c -485cd6b0eb17c59ea62f4a9feb82e0c9ceb4d395e711056b4814c4ff5a99e176 -acc3b0bac7b5caee72177e82ef621e0f6bf43f17710bb740cf8cb58c054cfcd0 -5e06a4087bfdfc9f9bbb94972a37f82d3acc52a5daa93e22172a1f2ffde28cea -ccecca8dc6083c5066b3618fc42d6fc27745c51ade1b82d332b2a6fceea44f1d -5eaa449ea80c7b899ed2423a6419134828fdb1c95a05fc633248c76759d743ac -f0acd6ef6f67edd92fd0e560919e44661216d8c961fd201c50ea512ca102635e -b652284255236d66c4ae8df6a40047e8ed165f5822e9b475a1946d152bd82575 -fb1759f381a5f5eebcd590efc472e47c63b72ad8e5a503a9eb5fa47e6edf1aa3 -bdeb134236ff8c5177f6b19f2b836c4b192c29109859277054104806c88b9600 -5e1c71de443e12f56b486c4f6962ca875c8378845cb80c5082314dc4319a25ba -cd390b3b760c981be2b472cc7bca1af1efe641820075fb5c93e680a621e05146 -cb4d13f1974f1d29b917136fc496acb3902f632dd88f8e53f1f5d3e18d220e56 -3f7cf5ca80d86836c05785d41c13f8ced0e417f985d936b91f439f2ba9490a96 -50c4dac1c4f00ebf780e3974894ca4d4981e473ab4f57e5974bc71d4e0e94c5d -d308506c751775ee7b5d2d217656153457fcad5ecc22fdad49ae3cccb48d98bd -5950cc57aaaa91a79644f7f510339823a4b602bfba9c6640b8ff07c1a41fc06b -51ea531c1bb769bdd220aeada686bb321a8fbe646fb1f22662c7352c3220e3da -5ed717a11d4656c86249585e246fb9a6e3d762b7d8dd56a4a729a6265323a3c3 -62baa93a61368d738ff19510d6bdefb483d22db1abea00b8a144a86a538c9043 -1da883051a17ab3a8cb2fa64859fbb717aa481a1c821d33e2717a746f1fbdea3 -6a53100cfeed1647a6b5c3534fa199c67c52b71606382b50d4f386525a77dc88 -87b443922d7d60bb7f0253071619d1e31912c44aa70f50875e962484b33c55ba -afba1f2ecb46524d0dd327765370cc48131eb91803ca3e902f979fc09f5e8532 -e4cb79d5604c8e65d3e7b79969c269203e3b75ba3fc2d0d8216fd0acfa76b3c4 -d62452a654340aac6f62cd9302bc8007a370aa332153e29b4df6ceb58b2d6fee -8c84a56cc66296a3599f325dbbdd268669b07a29ee29cecf1b7351be6cb050a9 -22ecce78d190c103f9179d917f7a6a2f347fdac0371a955402d9c5e98bedbd37 -4bd119ca5e4d3782d9a2aa30653407d4de122a98268ec1d55424e1aa718b6bb8 -076c1e52bd9ddef4e553688ce99ecaea7a0f89c0e2b651ac839802102931da2a -e01d7bad8125f1a466528e407302551465f8bc50693f609645047afdc5700e78 -4ae8009bf4a46e119f91820f418940fe19fdcf7cc1bd2ab5569d08be57a8284b -db63d9e2e47a293ad7c0cbcccf38db5efd651c29573ad26c39e863b71bb228c9 -6eef97c80d9e975c678a26044da564a51e5850b88630fbafb73204a5f7e34449 -929ef760d05cc55d231f090a215e1a783abc00a9115d1708e3fd1aacccd5d5be -4d225e2584fc6763f02e46ec15fdb6cdc44be16df5a0c9e87836288b822d5155 -24a1e103bc83dd7bf1ca8d9515553717896972804638445b3ca9e41a671f001c -e135d13dd7e9e195c0d1a9d396e49576a6f832a1a93c176ee4c0d1572258a828 -1d2129049016f97d52768e92e3ddf2d669915f3f1ad324b8ff23805671b0a88f -b1040c4ab8942c097e1a0a8de7bf2a97cf798ab1b0402fe729ad3b9faa69c65c -272c6b9acdf9c14c70e06d2ccc564b9de022f8cec9730546711a5715996574c1 -6f080d9992ec6c76ebe5f624853f64cc3c616d0b10fe20fdb6780c8fe47192ba -6bcb51e4a8c45b1a599ffd146f7ca52c54578be305dad1ff96efe4503433fdf0 -15e56695d9c7c64e636e6cbe2319a5d84b2d627d3982824e75d895eae30720e1 -6473b797f5b28987987577a4b46acb49f5d154c6ee402ed9114f7db3bf939377 -0635c503df05d4c7792522000bd03f24eb9d861ce394f3226b9f060c7d020ceb -f8f2c826dbe61dc2dfcde6f85d3021437384775a9abc2b2cac871c3465c67c7e -d493c02ede0463a74aaf120dd1cf140c2e7f5b119ec3556ebc5eb6994bead7aa -ab6e37a7502da756e41d25a8b2a4981d082277286e1847d5c1c493df2fed18fa -b72b35e22ef707071ac43ae4e7eafcf027eef76dd351bcf84ee0f749e8bc0bad -3920b85d7095379fc66aa854372f6dd0bba86821ddc1ae34c600f3a8f747cafb -e8c2d9a8504b514e292dcf0aba49c437ed98501a190719aff0297baf890a5b54 -fffccc385a9b1a669136dec710e826d99da70d6e6a2aaebc6fce2202abd0be21 -3d49c1b7bb44f5ce022d8c617593a26b957cbeace2e9fa3f38c2eccc6abfb6b0 -7c13e6548467a8d892d890f944bead7cc60823059213005706a0f5af1fd4fb72 -27cd79255fb2b51a07f435b836a15f15dbcc866055893047c1d7114ec371c181 -e04bbaeef4aa47a881cfaa7bb09f1d7258481bb001098737da165b47855932b4 -6953f23701a306b0893a2d0761544407759511c80e057c113b2dd260046c7e91 -447d49d08a3eb6183af91cacf1920c169b421bd7a6628edc236f7d7b73b9bd1c -0cf9bbb08d0ef4d77b5e0e83b18d92a713a8198a7b8c4de9d4c25b92a5014386 -2856bb4324a31a7a27f801efc888bf85a6cf8f7df4d19c1013df008a3602ad15 -11dad124ab5bdf74bbbf653bdf0e1286ff715dc0fda04d4e4078b1693593ea62 -319c346f1375204e421bff10a2de0d37adee62634b2fa6dc046714f14c08260f -627320e8ddd3f373041722d98af6732ff47cbe0ba9e65c0994128f4f2885d45a -6feecd025d23b7c4b558a14d7a04f18babbec2b24fe612d9b04dd2c9b8f45446 -0c33fbd02b4ab8141772c350600961765848e72069e4c0a9397e55b4beb9a1a6 -b86bf2d7648253e0d2ded5e81843f190064fd37aced6ead38f8611498faab564 -e8df671e19136a1f1b82ebb8980589e3c0fe4b97d13623ad45faf06f3169ce0a -e7e3c6160851e8b7bbac99ca699cea7858093ad4643a33d75ae8faf91f835bd7 -9906c67e04c5ccb2921ffc06a6a101f598e5095cd5027a014865d58f65b435d7 -bee1bfbd8abaad8530780e8c8fc6acc2b7265bf0159c61ad0f638c1f8405ab79 -e23c724e9dc9eb215bb603f5ec69f33a7a863d01e0c33cabfd52be253c826a75 -8d48ec0c5083ab0f5428bf26360e7221fe02ae2fb371c18902d27241b072522e -bfb16aa39bdcc9f429a27f16138ec7362e0becac0788969d24dbd13b6c885902 -30af43bb9eba76c66515354203eb790f122af9fe9464312247275f039946c061 -09477bacf10f3e97d2cacda589866dcb82bdad25ff8f3285d3980fbed3455fa9 -5b87326e1ea8b276f28801c5f4d249ca530fcc257c6944305f68e4e052972643 -bb506f964b618bea1d16b53d3f82682fcba33641d6fc5c3e962488c6e0f41e35 -e72d4ac01e830056a2e59decb441e983d99478ace0e976bcb6c4d129542b4b3e -3d125f02d0fdc7ed4ba7ebfa4a4133604afb514eda30723ef39a3ec9b156b69d -62446c242dfe108964b2347b1ac672f95dc6533d5a18a8588b3eb85c12988ecc -74a04f6734ad88b61468eaecbba86e10fc5132c461dec26a15daac9b6e3ca191 -8e47ad27abffcfaf9e0802fd405467d3a4e53569b78a3461dd04f7da964ee0b7 -16783f0e4a5d86534514280720695825665b2b897b5b1df5e105a1b3b8f4558f -155396dee935f33703c1edcec21ec872eee1947bf88a5b374dae028336f3758e -a4a2b60ec629521a023e7a8c1648373380dad586c854c2dd6c8a66b2f8d3838c -0f1fb147da2fdfe64d6ece99f07e3a06eefbc841824fe110e436ef96b35a1d22 -82fb88c35a2dee24d11109ecfa65b9e3ad6e10d37f16538c3a87cecf69d5ceec -218b089e70b2a495c56915dad7a55a9a3c7c729fcf4a45ac48fe8036500929bf -21f6ee607f03d7e2d42a9fd11cbed242d09cae0c1b893658fc2e9a0989a4f470 -45f41535db18427bbebbab0a124ccaa4b688f553052001d08945ed8738b03039 -82a8960f1d0601bc102de5035d7ab4dbd2558fd6348929fcfffa24b16cc54ab2 -1746bc146bbb4a126fdf15448ef86191ef644fe9a48ce7a6648ce6e726a81817 -097e9143da8b6e2a53da13a68a496750cb3bc103275e81bb758af55c3dee6737 -3d45cfcc8f8ea0126e1e84a4d84d3fb4ba4481c3fdaad535c797e059bf02d9ed -66724a7dc43fdba2647c5d453b7ceacd918334c716aa52cb6829cfef0a094a8f -8d767a9227b54640684c4a1fc3a43fe07b01fc73f9f77583760456507c5bc6a0 -0225feb554acb116bf399e804c206761345e212195848f7d574f336f891380d2 -d41d8cd8e328447860e92ae464e47a58f51c8ea2d8bdaa238d91b64fc88f3946 -703df70ca47c3ef54ce613eed28d9f303113f0a0878708eb264892dfd863d1c3 -08a76911a1e58d455aaaa0360b2b2cfee503d6d40ef17935d354ec4128a71417 -08bfd9b83964375d2b206144f38ea9a5e2965ca00425630ab795c9196b3b758e -066e102cdb294e5eba2df26dd8968b7406d76540157c86cfdbc3dbce4c20d068 -625656df09de81b47d05a764145bdd6aee1623139b5c3c22bc4af0a61b50c1ce -38320353b8dac12d5dcbf91a1b36a38f083652465424c556fe3791ab090b2ebd -20ea71321c433eb6221f9f7baac2d61cb06446315d517e3eee827b6f73469306 -1da8788d59a43aec654d688970b044151453076ec26d940f2545a3ceded9e2ef -084b469a565a8db2db7db3f367df813a0fe251a313ecf9a20363b7bcdea13a6b -60adeb042c157c4d80c39f7301813207153cb31154630b05a9602ad8bc2e0741 -e88149bef1cf7f539db9266c2329f1469f128823e45fbc33f2ad7210d3a7203b -542b2f4401a7f5aaa3781aef83889f7f48f9dfb3eefe6c8b51ab1f37ff916735 -4c58617ea1249b1c7f7d312d1635134381e78ea58bbe60363f260f71ea00d868 -c47329c7d747c80316273bb726e6ee87bae8fa3cf0ad22dcfd6d9af692459d07 -33f0fdf01081fcacd1a1d78204b1086c50d9d8798e7b216c6835c0bd8114db54 -a216c554f5429a2d9b78b6d215e318f471f5fe57c845919be8e05518167df4af -6cc92eb7a9ea78d759f3fcf3675c31c71f7a1bf9f47483eb211d940bc1b2a2d2 -b662580d2161840218833e521143aa2bf181c842fa37f98be1bc5b9137068e3b -173a85542a577f34d1731310d94a58e0ecbb7538c84ba021c18aa780d651c7f0 -036da43312463ef1dff92d7c894a5362e07ff5b3111d1f166ba4cd91f3b142b7 -39cf67812ec7a1101581c280442e72e0d2fffc9d0192e45e24938f8941024d9d -f41c60ea16b21f696611aab3a62552037fbe95012ac4a459a6c19c2c23cd3222 -04cfa7237e4f3122190b8b8dec28ff94a3d00955c77d1c1d4cc51537db0afc27 -098613fb6ecf597581eaf7d9e9d7a5c65979c89a6b58f687b514b52a707e2304 -75a2485b07644baa16e610b7fd06a67d6b9e884425439ab217e89e3e2e393eb7 -bd988dca987a913a0264e481bc2e8961668a3bb29f51c42cdef4b74c99b561dd -a3d3ac697f33ada49392469e66a14204de4464b23ddef2e6b4cdc212dc43bcab -637021c3dce8526150cb60ba3eba354a4a9fea778d4623cb407b67a1f95f5236 -ecc619c9d1dad94414049c3ad951d244ea9b29e6d3b099e756dc26495653757d -7336c1e3443fdf8a25c3b821ac378b0d2659bc49da81e9fe129142fe7a20782a -89e1a2dc4491c787b59afc4fcce6683038bea98fb0a7e1db598c5eb775c20085 -94fbfef25f116b423f810f60b8d4c6f494aba8d8b7c90ea150346cc88818e9fa -0f74c58e39cef7493b87318a2e6edbc8cf34ab3a0e83db5f43f40d7cc7af0d26 -9feeb4fd5faf78b95d767460d8efb78188f512090eaec0771ec9e65f88d57b4d -706da21f6d8d90809459a27f510625ae05c302a2f286fcd052b1b1816e368f30 -1ab9a612073725423d6626148e72b4b69d00088bdd12340889a7efddbc8620d5 -5589729fb1e1643a57acdee33090e0dc320bdc66939d0ee001532cc4f0e5bf15 -b935bfbd37db1723740fe6f076e5bbf53ebbc1052888396723dfe8e2543dea40 -53dce74fdd2e3aff6c5738ed520c01530e3c239693eccd248675002765aaa721 -00c4a55f63c44d2e8916cf786988cb22b7cc5630ef25cd571c8d094acd0f5d97 -4f7d9562c25467a64f0403269de64a906aa4dd0a0f0091a7f0d0e683872b4885 -7bfdb3aa0787da35b2ec4cd4887da0c2ed737c8028bf763cb735faffec2ecab6 -50d96c43c78ee35c96954ecb5e72be8d0142f6810c928a3c57e7590458f5b16e -8b67051186fc1bb6d3a879f9696621d0352af7abfa6278b1d2c70b6c5f042d3d -a80f68d30b4ed14f6f24461cf9ef99799d651e8af9c9bb218f343449e555ca74 -aa437628638cb98163f14fc91b2029b24aa19303fde63e9c33a509c1a9a7b62a -af283b8c1fe2e2a43dcd6992664eb1f1272aba683c9f75aece89bebf5a6a8ba2 -d3db1e77cd4bb36faa5f8b368e089f7d98d4b076bb8688f353ad35d42e99436c -74a2d23794c84fa5c0fe24b2ac6d9ba6836edc6862d454076134f04d47226ae6 -90fe4aabd2952cec384983efc97cdcd430768b8f8e31992f8bc332a40af48222 -c8a6c5ca8fb8661dbf24e21b5a9fdd2bcb38ab008a9af4105e679c47ca0d9ab8 -5d6628d684f9038cfacd56ffff298c81b31348b1615377c36052cf2d6db3f377 -e5475fa306f96418265f79674ff58bd5b4690bed88805f6ac4bec0dd488613d0 -eb6a5bf60f77d656d6205509c2611f69bec685d147b5e5538d4d03fda578d3de -0f77aa190ff3ab7ec9d563cfd66173fce4850f2a349c6073fd0cd9123755dfe4 -c3102ee4267e930ca38cc9a266e22aa8637d74bb08af30beb38f324fa9a43bc9 -df232b152bcf40d35f5cc78ba3a4199a13de9225979f9935e98b269f67a92cb5 -eeba0bc4b12d6cecbb4854f89eb3822477e72690682267f85aa2afd34f13dccc -e4fe49fac453c21f32723fcc5ac066553ceb0d6eccc03794a0985e3ac31c5702 -1fe3d42c34d70c8f6192be9f4771061c6fde1d55a086e18184a1f8af5c0fd87c -3130e1de4fa47a4bb3976388e0ad80d5d2e95ebf1de12a2a3484322aaed6df20 -10d44e89c9be89253117ce4af117c8b2b2cf3bb228f964e2b23e84c51044da5a -c6ee231a1bafe97969c02b0025d777ac496c0afef31b6d3e5c42bff099b32e86 -7fbd9853cdbde7cb5e11eafc0597b1cab3a895a39a05fc9c5b5981a0122bc144 -99f12bc99f420c60d28263fc8d546f75acd2d7c8cd485e42658dab9f06930fb8 -6494cdb062c4a1bc3e74760f9fd389c69c9cd0dcba246c0c58ab37688671edbd -261bb9755e4299510e74b033ea9d2c4484dd200a49681e0fe12875cb9e0f654f -e6c4f35ce3bdf932519de9c9056b196fa84d1aa9860824b177e89a9010b04ea0 -47a4ff75b8b3f006c2651d78d50cb28eb7086bc5ee042774873e595dcefdedb4 -a27cebdf5ea140d5a01e70713d8f483ec273482721f8ee7357a2b21aeb88b675 -5a32fc52360d43ba7764ca33a5692945ddcb11b7f4e6b2092e439fdef23d7b15 -aabf894a815ca072db22e11b6b296980c73efc1ff097e7a33a873b340e1e8cfe -22592e2d1463064769e39ae6d68f5f23d6327c91aab1fde108b7f4a3e381b51d -22ea615c9f50f226d81a21ce7655083124a20de4df222fb2335884637e616692 -fa928cdadefddf0aeb7027e05d97be567352fb973a357e6054bc06454a88c917 -776595c53a1a39c135c9078b917b4824b7c4627ffbd54aefc2102c5d27db5b30 -0435c719db432496667c9aa78a0ad6b05a95f31557cc9977799b73c4a4f486e9 -57dd36f69b16e1f54b77755753c486ec5423497412b2f65a09865a4bb356430b -d1e78f0babf79268778d6cf15aa5d366487bf62287ff001003a4ca8efb704d87 -46af7ed7dada9334b223d9d70e3eb6290979bc85f78e8617411e9503716b6a7b -08d65b4ff1c2336f80ba3780a5578e129e6805379a340489aba9fdff0c4a6e13 -8ad482e9fabf469deaddcb124ad27ba2a41df82fc811c03a1f23bc11df9df1b7 -15509b01e5ee29fcf75399ecacf7ec7036b6178d64dec1b5c930512a116a692b -05b0ab9e186a891133458510c8dddf7912bbbaf930637f0467247c0229808fa0 -13c644c4dbacee307d30d6719879ffa546756aaaa3b29d1125382ecb46474b1a -cbf62c4d4c652c932ef0ece58c8fbdd616efe3c138bbc768871e62ceceb40e11 -301c86e6b4295861d2e93071d7d7955fa68110befdb4cd626d68cd1bcc2d7b9f -5dc2a2e28431c6d64e1522bd945269bd9f839f98825e8affe6671b7388399d7a -b4b9d8bff7d67683bc8479715d9ac68422324f3ee2313daab0b8fd78825d3d97 -6495d86d2995256fd14b84d9e4f003892adc6a99a16739a6fc555621933d4214 -3ec6d85de8af1626d4c4f324181df7812bff18f2146c493c9bdc6f48d0927be2 -f6b5c4a9424fff38f6dcd4d1f60b5f0feba7dbebf6b901d40e1907e0fe79ccdf -1c458f8adfb5c24e6219e920287a37b0d96f812666ed48e0f287868ed38319be -b9adce74312e75a20002ea7e9a90ccdab10701f2b3dd2cbbf71a9b032cb2bb94 -c717f24a62c365d78e683c3613ee02e7303c64b63f5fe5b35cd9ff0049bce0b8 -fd7b01d012f67f58e12e076369da78c2b63f34b25598b3a114e59768ddbbb3a2 -32fb14a5a33e69c9743dcdb7758fe961d22b1949acc22584253a4b8c3f19e99d -ba97ba9d8a277042f04755cfd8d92c08f2ab7675c2da2b59cd1f8fcbcd5a69ce -b9b515b6171b47940809366f5d58591a56063db03fc39f678a03cb2b455f9428 -d128466ffc4c05b162bb51ba979b747b90c98f9704ebb2832ee773c3ac195e46 -baf45c152415f62e545f316c9048cae5e19d8b6da792633fd82b55e49262f892 -dad984f66d522bb2f71a9a1a5454ed10f090ac48d220a3ae9cf429959a3cab05 -b54ea07a9da21367d1e83e979163f6dac8d05e6a748b95328b25d4fbc9546520 -82165279ff017d9ab50e7aba8aa5b6e7c40dce4c88d69dcaa7cecf50ab313606 -83c58937d81962c11ef39d84386438a80ec20b6f40eda53486f56c9c9a451d35 -b1eca3f6ac95aacc306520efdee1b71902d7d2d2d16f6e999570d2415d63cd82 -52f2754cce304036e7ce4fe00cd5689e0001a6cb0deb08989427c41b7ea13b06 -382ccc97cb3b301af8f77c21953f2e9d3bc627cd7f3e56b661368e825f375f45 -25210853c824cb8a26f3cad66c473d4f8a38b2975f0c167b2f7f56f938f69c82 -11cc05625f4645043575deab804056c7a517475eabf6719193d7f4d9000a6f47 -99806ff619938f6910df77d8861169fb71c676466f21fc697b37613d513c5665 -b3c16e152733eca6f7052b51376fa3be6f6a97aaaafff75f2609cfd651a9a594 -6ee23c818d67787c3e7c8ef85853b5a993dbd85c30a55e7778cb872c4ecbe5da -862937f5972ad3bbd69475cc04dc7c9eedc5bf48dd225ebb513fbf697b4d1b5f -4bc8a6bbd9f01b7c20fb59adc81352ff087ff7dbc52efb3cc55f188edebf47d8 -ba4a2aee3d05fb1ee2977a42f6fddc33c9e39f1fcb442226ccea1e6ca561b617 -c47454f6454564cf2c6e624cec87e29f75666a814712dcaaad1d723702b1dec1 -ffaa91cb56f697e8c9b9134405a1f9f8d6b430617fd05ce436318ed362becbda -94f50caa126f720468e8e0d3b6058451c9924c80a6b3169e4923d974c511ea79 -28a93e8d422c208429df5443c3f3f536c44cc93677a99759b55c03a62711e468 -bb3b87601a2cb367d2c70ce98552d7ceae1190be52de6afa7d6fca55d1a98e63 -3e6aba35d3e71b8ba7185968d56d53b60bd58159dc138b45a662aa748047eb9e -10267868aef4a7cf60ac5da26c132d7faa38346273b4f87279f02df87c52116c -5413fc25a705ac68cc05dd7add5b553d923b2ec3210637c804cb13e2e6e3c464 -b74e33932733bdf0738930c2b37fcb582baf5ea99b999ee4edac8127e980eea3 -17f1914e5c8e1243dd6ce054aee9cc603902291eabfc188108da0737beb66891 -30f11d0627b5ba00615f00d7c5f8ae8ede781b4de4a2023b9557fa5c4044558e -8b97c2be125d2d4d404c3383fd8072b25d46a482aaaccf55730a56742fb157e5 -3c096a9f245bcb0ff1ed90278d2752d11a822bf1813f896155519b0b237eb20e -b02aa2d6a8158f5f6d4e1e669ec566ea4079b87096f2bbc19bcf196d51eaff7b -d3f3bb38d56bf26d8de02f0b6d1facf7dfed129db8fe4f67f5fbb5257b3d8d8d -30808259fd38cf81b921cbba2755620032aead75bcaebcd3521f3683981e9b48 -429ae4628927a9a5c16230a8fd6f0e5f652396aa94de3ec9b2b67eac09a0a6cc -983a56dc55c6977d039725e9918d00e98bd598593ca1d0847b4391273bf5cb50 -4562c14eee738de09fbddbd313289cd51f11ad81951be73a6c49a7fd2c10fe3e -a1f49c8f8c043f5b0a9f8c5cb7132952a0576b98a5637dd3d946d5ce8aef90e6 -800c2bb19d5907ebde7f54a749a3410f464919ca1636513d27d4e34d479c9bb2 -2cf261b770e40d61165f56df0f6865ec5249e2113b95d91aaf3f5ec5db468055 -fffe2b35f54fc10993124ebf3e88349f4f2489c43f2c80557ce3ba79fb198e3f -eef1f2d9d4f7cbaec3e50738aa2f25f75bcbe7ae80885129cf26dd61fcd2d684 -e041111696696d07e5fb4b6a439f43c33601426ac65700515f29344299f18fca -8a26a0852b5240947925b864d91db59995cbf1158ad0189e108452c5e96bb477 -954fc6d2f8581e4af6d1ac4935b84696b977349404cc339611324fd76c737c25 -ee1bf839d511d2b0de3b07a837d1175316a7f94ef0528d3f8dc94cca211620db -6f4da6f46fe3eacd86f19b981cdab577dc969cc9cd695c3cb9be7539d7604133 -a30e227f2ec8c79561d8f5e1311225dc8476459106dcb32b1769324b9de23afc -a331f1cf43f0add8ae45d1e27ff743e691becfb5a47ddf0afbf335d9d8c5963b -2e5dce6430ff0854db8fa0cb34c8eb4daf12ca8e51da8de9a14a02711ec96c92 -fc206a8e0afd37e8458953c6a8e35d9820cd233c5b8a4e4f63e10023a37be64b -a41a28f7e42bdaf72848ad408e8c6d2555275019d3a6391f24f54335b202c350 -319ab99f5daa2548652043db0a2e53198ebc29b80aae4b0b88e1ebbdf4cdab7c -ac8d9e90423c04d5e0f8a181b2d4ede788b86d236d2f8875d002c00ed667b1f9 -0ebd5b7a3cbce0720ebfb86c41832c91e947549aec4fe3e9bcffcde2d83f63a3 -378952e80a8b59a6defd4f38d9269c0cf89833c886ad0945f715839a1633d27f -b8157616e0b5b009a95ec2a85a740ca336305de3fbef75382c09fc9030cd9795 -f7717f073832af434ed4623dc485c325694e53a1eb443739276518c78ad32248 -11447e20b4e7ca4c7d4ef7b49ed412582414b35f4d457df735f6ce053067a2cb -356e79b2aa8bc3449492dca3e3767d52abe4493c93fa378740de2ec43ea077e2 -fc4cdf6dfbc54cd15227026648c03a6be8a1bc57e8b1f4286ca57f25fbef6d11 -38c2ac73630e567a5a70ba8dec51d0df8d39df8fc67f25b1f35dd02f4b6e150e -c0e00e27175e649b149980011aa8baad5691a9afacf951996968df7a3dd3d0f7 -e1717cdc0a92bf120df74c1c5c15188415e650cd967bbcf433ec66ae8cfb00cf -304685258605cd9da92209731642c74b7830895aa5a5e949680b55cdef503c18 -41ae8d981e75a54402220564a078d5ffcae1a74650b0a98667e073a3610927b4 -67f75a12b2c2b1cb3f667d22f93253005f739b82e08508c4b7d9f25ea4eeea8b -c569c33fffa67e7aa4998d74fdf8701847e17ac3a0b55bb1672d5196e98146cf -289a6c36994466d9800971f5797735a9ad4355404f255bfe479309226cefe2d5 -4ea7ee648c9d55fbbd37b8ecdf6368ca095e3b8d23439fd0de17b23029ccc470 -5d700bf1233e052b1504ab4ddbfd13a8bba907b9fffe16d1bae172e90e4dd680 -da9409a087ae100441a578b4354b74a8dc4be3acb8757534206ab8f0da8152c4 -3f119e27900f4648319011d21d0ce403317ddd16c73b7c7df0d2c3bca31ccd8e -ba61babda725bb53aa37475a778988c3e84029081852f0f2be114a98f46385f6 -e9f52a4e61f8a1d0f7360036187f8fe457c7d8f6834cacf006ac136a31c0c0aa -5e3d459986161589455cf0b7e112212fa173fbf20f65bf1f4588338e2b05620c -2ee04e2fb0c8aa150e523fbd82d065248289057a3ffe946d751105aeea3cee39 -fe804ade979ba0e485efd3e3b965b8d9bb283bbefa6be9acd0f779a23e605fb1 -cd2a8466cb8279dad96eae14ef42b075ea97d520df7b0afecffe0bb7f1728417 -9bcd070fded5d3b8a1f44d1b11af7c7c6a7f63f06fd84018f46158c2e07b9ce4 -82004e7a7b50d39c92b1cee4344b662c075e22816fb20399580212a66d122d9c -bfb1a9b8cf4af746bffb1cdd3fcb885602d2e36d31966131a6cf9fcf97d5449f -9cce800c65bf76f69e573e3c88d7cd99c0ff058b3d6e15f220ec784e8c0bdfdb -6b97b650c06a253aa0716be82054881cb85632e2ba8f8e206819ae30bc721009 -56e4905b054e12740109b887afa013157ae9bd4e23a1a9d0eefe4092ee921050 -2d34e1c97c3de2aa059c6a2d22ca918e20e263d35bfa39b96e9cb098f556ecd1 -11984f44a9187f6e645c7b0105b52905c82efb94565fc95e4ec55ebe03557e16 -1ac207c0dca85dc12d10a043aca99b5c9aaf583d2aa8fd41f41f9b31696963fe -a2d2517008b95d931b2a5df400ac1015035c09bc79ccf0c6365884c08287dc87 -198fe38e4de28af59069a6d6df1543487694e5c7075c7bcab9534394e6d44160 -541edb4b74f309134cc57851f44923294804f642eb85f93b25271e681b400f1c -7a00d22ac3ec77adab6b50aa90951d2ba7f6416386e69ffcbdae0bb85416de0b -382be757fa40774ff39680eedb1b520833bfbcc779896eae4e2e5bf892451e03 -cf7187f109d9a7508d791ea946555b9bc14b235908642a522ebdb1da88301646 -1b47347427d8c4a8fda115503a96e5350983bd0e454f831d2395528e16542049 -5f3491ff9569af2f43ab0459b30be6ea7849400527841350ded83f9d1240c7cc -3559ae081d4927a809fc10cc833617dcdff12222a06f8fcf3e280a0769a6405d -7797f3a58d73c3ab36bb88215437846dc662b64120f977fa544b72ea8d321030 -ff9358cee4f94e0b4813c4424b7fd7e5931dbe4fb447623d5a0416f01b013b52 -8664c750ee7d618f862ed441ab6bb3df65fb98f855a4ddb9bb95e1a0dba626b2 -1d79ed2edfa92c3995312ed11a8cf4aad36cc1e3a8f4bb42d2aa0f29205e3485 -73216ba3a01c98b22dd99872cd38185c41e9433d4e71d8d092302c7c2f11e742 -2697c2453e57e8373bf02c4761e948c720858356ec239a22f28f58474de6e462 -b6f2429998c10759d7a63385e50565b0c2316ffe6e4b51c29c0b010980f1afeb -6a435c38ee831717289e529b29802cecf3bd72107ad3ec42a39932a619d955ea -13938be2ecc799bcc779775c67982bc19e52cc3a5ee16c07c8843f3b0df6f7ae -fc4730f915a2ba9822bcb1916c5402fa30eec3512a21d079b23032351ffb70ac -5332608e2dde3668d992ea5572ab94f28a5da401c6230dc13c69b8257f47e322 -5bf97ec2da86ff87669e31c06d97ad3575c3336a449c0f15e474ccd90c709da7 -e321fdebd3bdaf82765582fc1e37f150d86a01c9c2b54ef4dd82975a528b5761 -51feeb2726169f2a5e2826a3548246bfa3972cc4f862ebd7d106b0c847656d49 -ff92f58d3fb194ebe093ee9315b1117fc03b75f270fae86c5818e77bf1db7978 -f7d171d7416a02bb4b42f643d8c85b2cbd208c80381d77a3646a1aaf60afa035 -21173ddc88e389dea03a7ae0fa2175103eda21214df14d4a73d4faf6f92c35d7 -6aed957c964c83361e50f1047a34468e95a810d961ff08036e5c1727fa233879 -f111b475c585d2b5f72f35eeae5ccc006ced57e916d0c849091bd27baef60e09 -af481e2d6b741da62f760c7324607ba467279ed2cc26a24846c9604d42092f8e -1123036bcf240cdcfb398a9dfdf4b17e4b0af4d02cfa89c728d2095aa4407026 -4bf4b1814d5bf55ac3f0a36d2acd116631ace9241267da7101f07ddb8504ffd4 -cc29e0e2c3f34ba58c036c63b774fafefea9368d0fd83e050187484d8ceda8ef -5221e913f5349a2aba2aa2ae3fc76d35b87b0212b7030d50dccc1d59ff529965 -e6dadf2527a69744447b12927ca0a3161e819398a7bfa5f08bf3ed20c0b6d014 -ec24d9a807416ea69bdf6103e8c003aad17c35784b1b2b2f82272c10a01382cf -32581354946c249046daf4acb0a2296e3b446c44e0d7cb8529a54cdb90fe93e8 -271ea297da421ab506d26597c863598fd7b897d26b7514d7904ee828137400a9 -0031da6252125a1199f740e3c90c45359d27c695c6849e537e4173dccbc9e1e4 -e92895fea3a705929e77f06c3384ecd6d30ffe2057a0f5b654d2bdc680e0427c -f1ae6b8a1e3ae6a8746d867ac44807b86dc72889f415eb543bbe6018bf2c6dde -86d44a984bf04e3822a7e604f58b006a1718eea01e36858d395deaa7925e2e44 -7a9e9fcfb71a5c23f8c763b8e6505fe8c17f8dc5af52b19ebeead87e078082d0 -6c136af58a090cf460cfd495f6d46e1572a75fa0f7f5f7191e6b974f1edb6023 -354432c6a726ef3697f5df89bd938ec4902f6854e0aaaf5a7e030a1c1f8a9a96 -36d3492ad5f22e98f29ce0cfe575ce63a3f7a04b599580d33ad8b5251a396fa4 -db956d6f8d75e426cc1448cacdd556af8d1e1a490e5abdf326dcacdbc3c47755 -172ee74f2c13defd1ab4fb05bce2a2750f3c4d0952f8451fb5c736268bd36ff6 -d17c2beda41c5e4d75813937ba1562d7c3092855711b60a476ced4bea19daa1b -7f633879eeec4f76bea7d75a6a233681400b8912690fcee8417c4de875930a4b -617e5b9b772aa2cca910e0f7d71c68fa781ae5f6c87717d7ca0f51bcb8f06c67 -bef93e4811c3f7133825033ace72adb52d34c3e1447ee6c589a813f4c1fd0d4b -288e69bace0c84bfa9150c95b2f75d797e2ca716b1b08e6a989838fc6a56d194 -3aa0256dfa305f9d3c4d77f98ddebd4a37bbbbf229ef2b2e215128522296743d -01f3cecada7ed1deedf23eebc6a9f95668b08a45e2d34e033e96a3d40a06025f -1ebfe0aecbd30ff546cc33081cde3abc7bc8320ba6cf824c189d31a5911b58be -7ee39c538e97395d94b36396eba5f140911d1156f0ac03945cb920f299564261 -7a41df7255c7d308e663b53c8df7ee8da507079f20c599274142e59721ea21d6 -d1e1bce3634ccf7d4cdf1253338818a413904af68d0d118e24f691bb3aea912d -f561dd555e9726ed474a1f5cb1dbcaceb70496264f485d77372771d9504c2e77 -3bc7809e5e37b5f67db4d3a5f9dfc69e2c96aa6eaf68c5b03a596dab012d079f -c365c722abaa90b1a2dd9cf4038cb0b497159d84a4fbea01cb4927dd4a5778bf -0b7edce16e4ba271bd363a15540898ce5e659aee52545fe890a55a6e71a25984 -23042ae487a09a15e2ec0ae325959f5a302a30ceb1f998dfd82c4b7426ba0c6b -a59a2b64cfffdced679d468fe7e1e38013af804c6b17db6a70f0ec611801d30e -80b657e3d565bfd82b87fc9dec95c4915bb969a449f8b7371196667fc69dca00 -d5b93229f11a527bf2528a0554b95ec5dc21fd451380332b17385543cd3c7a83 -5feddc06542c849b33217e91abd13e8ebc208b35fbaef85bfbfe5cd88fbad54c -a85a28b5fd50e7fa846a74e37f29b820ed74f4fe2dfcd08b506bb54f4b64dae8 -82fa56e84ec7e396f97806f0617814b2da473e6475be1d93cefa5216ebb473bf -20288fd650524b6ce3c45522c412664ceb382bc78b0d72c65e964d7e0a168606 -5b06bb0eba9746e7f3ba26a6c125c80eda3f27aa88bf753587f6a76c794c3739 -5c6c6337984a961e21770ae4fb3c3d60cdd6c44749f66fa913cc0afba0bcfee6 -44fa2f9505fb9eeb49a19791cb187ca1382baec6fd2ab51db31da77e95e0c726 -098c2489bdbb5d728fd74327edf0303f0a2185bf5871b636ab9322cdfe7e73d5 -c0eab7e1d5cab91a06e028929ccfe0dc8f3f8c5b324ac3ff628c12d7cfc117e9 -cdadd96afe76973232d3d4b35015cdf8f30d77a41b6a561ff5478c2e1e0e1e6b -cae34367610dc3eb123c6140d31ad2ec7799189906f7dd7b7e4905dc5afcf2eb -0b036dfcd54233607db0240ed765315133c90befe834949c470a7e132897c7e8 -03325e9459c1ae99fc443f7b8b3a3cb01b2a2b17a42b8121c5cd8c83b375fd75 -97e01fbad0e04bf7f855562ed81464646ca5a6b29d4d058dbd165be5f785c155 -704d2fa42e01e568826c73dcd922f0ea3e3f5c26fd2e406bdb84b5ef23bcc8dc -bf83bf172395f3c95009fe319fb028630a7d0905b47fa2f7c8794fd32a6443cb -1c953063092f0b338818868df48e49aa6e134b6022248a20920456c693dcabc2 -b33a0aeca0c98654c6ce705fbd367dbb7486f6e49a878402025d3466944b0899 -a407b187e8bb9d07a2fc0800394007cbca0de39896b14c67dd99501c3407f9df -4ed03b7ec42df27459b802a2d2c4efd22b7d3bbad6de74cf0fdc1a2155eda0e1 -a78893790d028f88634b1ada5beccd99c48cf02174ba417baa29361f74fb4be4 -489763c2caf67a698913d5e7e8a22902899c590d8c47490a893d6245e27ef31b -ef184829c8cb5c7cf358c6bb2ebacf26cc6904fc9d6c4678340a42e081609323 -cab865910ed8ade413af57a20af437d6cde5581b3d15d78bcf52ae5586ae1d3f -47e49fb45d2940fd9e7a905cb76e42b51ce1e69d7b990ea3807e56d1c4bc8cd5 -6d8f052e2b4e842617c8341c666d10e573f950d009d15610e3b4a297783c26fe -502bb6f07a4f9c10c4bd7d6a17336feb8f0274c0672240925e64b76830ef88ed -4e3f7578572f4b54fae02b769e63357c6797453f9acad2636ecedbd309aeae25 -b6dc30e17f48612e805bf459c1163b93c8c797160dd719f351153bccfde4d033 -8d53024b5340e46556051eae86e17f94f80283692ab6ecf7a21e485133736e9b -40a69e4b7f733b8e60cdbe2e7a5b1fbeef864f1ad7dc821ac9210414fbd6c485 -c1a25668b3a665e9bc4eca605bb028355a9edd8533f9af7db56595f93fdf476e -f00a189a58037af7e6ce33a409698a586e901f2e2fa03d53f02d20d4a52bca89 -e26b8d1382d9e04fcce9bf4b43072c00aae4f029c1b6be2a842885a2ae94160f -2f8f55f4f5922146fcd74d16b4f59fd5b6d294af58fd472345d751d4124ad70a -e51ef88f3ac585d5a776f026977dc229c81e68b360f8cef21dcbec48844f90ec -3d60e991e18031eb99096770d84f35af0b5aa98e3d25f8ec62bc1574a602fdf6 -5d203e1faa69479af10ad34a9aacba6d9ced6b03f3a9d934ce30554c335f60a6 -997e1901d513430719c2c96643cfbf5cd32e80eba160122cab14f36c7cc0e4dc -2d8fa3fbd052969fa8259eabde5bd22738943c006a9e1218ed697896fb545488 -65109c0b4e4e843d8b0e27b429a78d1277ac999af71ef7c31952e45b0f747b2d -793734e5e7974cec5ea1753af5a9471b67edf56bfd97748c28ace6392238d0e1 -5d448cfcb36c8f6b1c56cc5befbaf65e834c80613744bf76af759eb735b9336e -ed1a896d53c1f83c97cf26993d4342bfa7c692aaadeaa0b181c6edbcb0dc9d7c -bf9b42429c88f6586e952480cb73dfc7c63524b110d59bbc4a77d789063dc260 -4e3cc5f1c2097d8c6800482c8d39147a403a9a5080b0b9d777e1f00c815685b6 -b0d314667701e86f4c84b8eae07fa37871870b27a9121758785ffa1531af4939 -0a01426f2d75f1386ade1d9d32f7a16f56905970c136fd7ca974a8aa5598c937 -c46bf1f9866e899e1728e8cd6a19adb5ddc76de33696ccf288cc2a68988c19b2 -f932a6f921ea2c1e7d920be5667f963c1dda94b976f1dc0ccaaad5af56750330 -83e21a4166e71ac1eca43d29f4aa850416dc8462dfa808c7ce1e3affd5a46cbc -271171197888fe90a37ef2fc0f579faf60e1d1075710780be8dbebdc2977c4ee -53bef52f912acf44b45bd8d0ade66755f325cd7ac00e72795ec9dfbab4c1b896 -8d1e30bfdb34a2491dea6621d3be49bc6e255a15a7aa7a0657ed4db707c047ce -3e784a3eb07caab85420934308adcbcba09a09a7d03faa5c79aa5726866bceee -908f32cf4db4d6f57cb4648627b7e0fdd2fb570ee190febb1e55c5dc951ec361 -e7213208762ad15b3d801bb0027c01fcbcb0ae0cd083d2b364f44cbb64b7bc0e -6bf2e63258dea34f07f25ae21b6109a755606909c434d856cf18fcf482660e1f -fbcd48cff010e1755fe69a21337550dd5b58664b63f67a826a3965cbb802d999 -09b6166c4643184817811d12c0d5993df05786da29993f9b6a7050a14bceb186 -562000f6699d4068280439df1e9779fbc278ea84b4c0d5c68d64df3e39d39b88 -d9ce2462e1084615471bd6c5bf6b0e1b384e35780f8b3276695796bc9f1b41c4 -0213d5d7b9b82dc36ef3e19420bec516afd1b27d7ad03e243530c198a111bbca -3cfab790d298d6b94926800691e569714f94bfad6819bf79df245d7a88f31b89 -a264b30a431cce5b1a1669223b7ab0f3aebdc5285f251e4f48aba3726f5978b9 -81fda39873c6ebb85ff1a277c9acf4b0651b1911d0fd5e7a960a28da58d88e24 -061b01691efc83a8ac9a6d474953f12e467ea3f8f61296ca8fd7447741c18727 -ec4552c85106e0284254b8b8e62ca7a8c07a415cd868df056ff3c7dc3b76c802 -334b70e6b9a08046cabc7bae845a1abf759ef02ad0ae99fbcc17f92b5976b0c9 -7aed463e4dcf547d349da528b9811b5e28c94e6b250aee6add5d3005afbd09bf -2cff0c2f6f3b95dd33388be72b1488a1fea1821fdd0b5f94d416bcb6fbdd5b79 -180ac14dcdbf3759430aafcac0a4b28201914a6b2ed15bb4b470cbc9b7244997 -f01c623f26750a8e3d8a9f5802f880f5fd8f3f3d384546efcd615c44c909e82d -4df12c98405835675732fc1852e3a193a8844c71973e4c1e7c9a131b3b72fdee -88b77a44cbda3eab2f16e5e71712b6c95e90a22d39b305075d44186adb84ca6d -d6a3a5a8c6fb82d1bfd28c7d4f09549552aabd0c599022985e1cf6612b80c976 -5abeccf01f8074a8004b4c10492de2274eb6fe70fbee2f07da0e9693751fbd4c -012c1ef4a62a6f41ab0d416a1a48660fc1215f5489e660ff41452044d94a0bde -354a82835d1c0264bdd4ae12c8ce33af04560d96dcce0472f412828841b8e1f7 -5f2551bc1d21afccc5ca0c2e901dd5915ddfb39e0a10a51267d087a9bb5126ac -16aaeb7ec76c76b97cf688d1b2294d800019c50f0a2ccc17f23c4159c8f70aef -2a71c8abbe494f5a7b77e210023aba67ee3ad72873d80d9106a6a904cb08110d -93be193605b4a6decb7cb4312e3d45cbfbebc5869e619a209539bf58eeaae8d6 -f51a2c88523a07e0df9abcedbce12e768359a02704093ab088176f9e64880317 -de86c733a263624132acc1d49d8401418dde8131340f7c705fc372e4b104432c -278fe7a833141ed5e770d3f204cf837137243c59b083fa703486785d9be95cb5 -0977d2f7d367d7b3a8ebb4b09463fa9bc5e2eeeb93dcde380a46bbbc2ba72a04 -39050ddffa4765287812ea46793c03180ca10f7c270fa6a3565dc41d28a271bb -43c1206686871994f42d1ac390303c9a56406b21568bfe7c8005eb4a1afb21ae -c9bdc14687387d7d7761ebd530bff5b4189f279464ae3f63f9b8b93ce9b1927e -2ff342a5e7367c65aa623357649905e04cb48aa40aadc450cde961ce8b99065e -10744ba895073a0c7e50c8dcd45c3318cdd5fb6f969ad5d44a9913879604105d -788f0d52e2e9bfc0db0a8ee972fb2b4ad3d89a49a994c78184138adcc6e5c492 -137e59ffe9bc6853e04b50423f5c5307b4dd24122921ac718624360aa1c28233 -290079b62dbdfcfd0ae51082dc6fc7cfe4c22603dabc72083e9fa8b9ca54845f -623d128c689a3fb4ad54a8354feed630c7c053eb76a11a5a0280d7d9e65d9c4d -8cbe833cd2e0cabf04a7c6b2dab874253ad1caa1b1fbd54e0f797c622486248b -df0291d524420253464051254e3961669a2d9aa35a678b8574416de67064f103 -270d3702033f5f4175d70ba59c7a048819e2a301b2c462bc376dfb095ce0de0a -4bc8885e02aae8662c1717a198a5b5e567ec210c963d7e773b2e0d0d38d252dd -b480bcbf8c02857ea59a95e6d7529bc65de9de53167f5cbf185ca0b3299154e8 -a4bbc21a3a5133b50bdaa33e1fc82b93aa0ee1c9609c583a310b9ea1cb2b5708 -e00e397f1f27d1cf78a68252e1c4c8e491cfcb9c6d31dc40ab15a0aacaa7b12b -1ed1e232ed6faf18f7b9111005949cc3be914e0e77d72eef1bb58a439c208da8 -b85f8721ee147e0f1d0893b2f12999caed4ff163bb2056a19dbbd4413a4bcd4c -b75a67cf8f598b5aacea7fee52d6a5364329398aad09ffa4965e5133d3d753ae -f69f1db424770f4c0968895cce8e672dc25e987d402138ba4887b083ab821247 -4928b35d4a4375407d4984352ac715787a026bd60133644e9a4a496e9e17a73e -3a104d3ade01ab3b7f3e29915c8e032354aa811d0476f4a16322aafcccea4e56 -c3bdce9d2a6a9a5bec080feeb96babd80644d1a53e39e0340e695d50bae395fa -9fd0509589d6f83538f5b7a2ea6a4d74a061ee1b4118ca833820683856aaa28a -ec7286cd86bd479efc98d8af58b5b3c13bd5b4733266485cfb72016797409355 -f3d3d75973a0646d8b93fd27f4dc58c0f27800502dc773186fb3a28aeb53ec64 -a60ac4cfdea2a39e53241ad5636f993bdef01463e81082de8b41b0a83b6d8654 -7e65af60e9c8babaf0dded1dae5d84bc6461c23b2b61a59cd2b9984f880b0abc -86e07b9b5052aa371de87260945555c358155f7bc461e8d5b50ebd09d19c8380 -f35ec75fdc77f1b7e6ccca702bf66dd787e6c3165d4037cf2943c59e5fe63839 -c9a782f519986779d6f37be3d9309bda4cdfe58e12709c1b4da5e60217ea18a8 -7ca940f27837c872dd94a4223ca3c1e0e0b30e9c3db060b3ea0595120b43050e -987d76b51bd48176ab3cc630a5ee0214112fe8f48ee5fa905b325293b98e58a2 -97e0ac16d62be1b320b11d23a2ce09671604115889c09f4070d4666a26821693 -927c98c0b02b2fce276b058cff33de28ea737685992458fd9329259d5c410df8 -23fab74d3f31d8dc74ae91a9bec15339022604ef4afc3f2828e2f49d9263d1dd -d8d129d6e734c1fb8483c7745677b1d4504137c1318785955054f432d1b44f57 -eeb2f90835be6a78b974e5604c1bbbdfafac2975ccf860dc6e29096a92a49629 -dc4cbd599bdca611ddc90a4ec272b3741ffac658c5afd409cc4585ef211f22c5 -3ec4396863837402f0637ed078eab5edd7f2d837912110d096bb491f30495284 -df335381e8b04effac9f6dcc57a09a66c4c9e09b8264d022630634f465b5c35d -09e3542b832f4bdd9eefd92c35c5963846fa5d3a76293207730489e7f9125921 -8a65208a2f456b92a25da0605eda8dc7cf899cdc8320cac31fb63ed08cce04ab -372e95302e54cdbbc6221aa066d3f7bfc08cde388b6e4cf4a448ee180322518b -c3a542bc37788d3872c92b68220899ca76fef89e0d32101dc45e075b3ffc5cf0 -79c5a8ebae612f0348b78395aab01a27087e4b5892c6f93f20b14efb0ded051e -46ed70f073f99030b6acbbe679a633c9fff8780fd002761a88c284c3a12a21fd -f32ff8cd620719cbb69c3b03254aed834368b7a5f69cb4b7d3f0332f21e29ea6 -46af53efeedb1cd366dc8d031baef9f893b2f27745ba12096c8d18288486ffeb -a6a3db0e7c85368f1aad28359855230b6dd6678c751f60e19592ebb487abe17d -4ec75bc934da27bd34f45b6ba301404ba0d686381e37f46e37b305c37a10be35 -6fd1af0ad43bbcf728184c6bcb6a48f1eedc2bae0066a9bc42fa9cddb1de028d -d97dd52b18670c246b5b389106b35b96b05bf678f2ff17dc6b0e97023d3950d3 -5c940b126e3e4e80148782f32aada256737ca6479dd9fe53c74f0793f0861f88 -a6177179254b203b5b3d8097a222c673ab8e885df8e7050e6dbc30ef5f5bbf17 -62602d5306f7404e2d7203ad3d64a0da646e79cbeb6a09f0038eeee65949d60a -3553913143ef96c9c0db1e05c9f96f02fc12706d9f2a07c2c7d44a574f972482 -b7a717a08d7bb771d800c19fda05a4e7ac9bc9acd6c3ebae94156b8bd6166344 -a9447c68d4a3db76925058721bce734737952edc8d836a78603473b5b322e7df -4af214321b0237fdf4eccdcf17e33e316bdc199961794d6d7e531769021b56ee -df8b130db7321fbb9346d6b53d7b58e9f6d06afc77de17b3757a1471ea507869 -9ddd6f17198fbab21a0ba18c7cf2b5f37511a2193b018c9746618dadc42cbf90 -81e27781d8e21f909cc12bd273f13ce10082e24350115f49474d079de6bcb1eb -cab3cdf822d993f077f6a6812bcac1740dc36ef24a0852dc0c79da7530824f08 -56f0aa36b51c2971c5e5337de1c9ccbed6570f6a57f81c7ce1d4c1c54bc60ae4 -43cdae759e6c10cdad953e07d348814685318b379b2600f79e6b39aa17ab7462 -93e9bad50782458a1581abd5b4e3a70be5d23ab7927dfb5a5104e40a4aef703e -a24deb27115094d610054aa97a3913742363fca01df49f71bdb5239ce8b914ab -29fd68962c30655aa6ef9b192d19649b133468999480b2d1fd4ab8fc0b535a30 -1d029bd990eeefe93b253a25a969b8ebd1bdc5095b8b0e81494c78a6693c07ca -6408aa26ce074c80a744472a2d45f92a5dd9bb698d09894c166ba3119979e9ff -92b0dfd5ac0b6e2e8dae164570747de735b1c26b71b5afb813e26ba22622fda8 -87a039f6ea334b61bac246684c75fe201746851a72d944ba75757b7f858bffc6 -62fd468573822af8cc7e7ee67e0bd158b9314a7d7d15a504de8a47da9423a1f2 -424792ca94267b11bdcda5af5d896fa624f119b2c886bf7211e19cac7500ef82 -a8ca117ae3556e2970c1ea6552f8de10b3d2d3c70d77d1452c38db53cdac73b7 -30296c8fd2fc9ef712dd572846767e4f8bd09788350ead55456e57db2fa22e45 -8f40974a37ce9865fb4560d2be69716014c511403b8d6c16096f5982200d80bc -9c184685c9b3dd107f3da78a1e45f11aedfa94c260ecfd6a72149ddc84973de1 -a14630eb406a928c6f08c226511784bc851212327822e4a6c6226e65ba0ad87b -317537faded98a65ce6ad9a5c7db62569528ebb33534075207fb16c7b4c6dce6 -81cecd7d1135ab9f7c92b4530d93858961077ad2321376f5225e4e3cf2f39fc5 -30604dde9d5aca8b3afe3085e006be1c315d70726dd5764e7f5a6d633e825a80 -7e988284817f893a3a2f9c51a7da982b2f29d7494121f5d83a0008671c865929 -d4bb030c8880a87764f4df89137678bd1eeb517f1ce66784ca21a1794130cc75 -13bbbc98f8f34a9fc31303dd75b1bc6ec7602348ef5c985816407e1397ae1d6f -b10fcf88e9ea770c7a170ff150188850041e14d2c5f30cb80320d2fc13152cfe -8fcf3762ced81771b824c50c3543210f06fa1b3276cd8bb5741ab82d10bd9735 -f89b2a5849c961c420c17819571c34982427b9a05c5ede886df502643418eab3 -24e3949aaf10e4155e3cb7be1f4eac2db9dea04e31cf904c99737fd5322dd0da -ccc6253c11d89af11bdcf20bdf513112ff3c0bc6fe526045542e1edf9ac6ecd6 -2a913432682d6dec351e66034b7f9cc2f64385974684e06b57dcd5e491730b0a -1ddae77e15cdeb0eb24af3eb70eb0e4e69ef93f16ed26869b716569b6adf1b8c -7dca003d51c42ded7feb497a7bd163adacd9f8274302dfaa4f889c9507c667fc -b27bcbeae0d3682814c3f308d66d77da0ce24c2a41c130f39a5768d30b64f5b6 -624317485b0dea29daaec6fd6bb7fda31cc6ea00e3efb5efed4aff14d0068a4c -fe67f3c3c7bd2b518863e241d77de378b0c6577ef9492284a5948db8370d7053 -fd7a567bc2a68e76f39540ab8e01a9c9bf6668d3d77c5705c195429778f12546 -063739d777ae4310d036c6461c1a5b3d731c78b26dba37c06c0c6c5fa3cfde63 -64f175931b26812b1af8c29c20724b2e2af3d0c151c453b601c2274d43cecaf6 -2b7222221ef1f49b38f0b7d5ce04a312dd4c56492ef4ca45fdaa57f419a4f2d4 -15229d101ee197bf179a9e11235901992d486cd99aafa632086733afb1e8008d -095fba50cf84cdd4f4d3dba6ae9ec9b06148eb46bef19029e1471a19a0459984 -5246ea08c3eca4fb23e14d1d2a040fc55ea7834223eb7d235b2d47eb950f5574 -366444ef34a7aef346e045035d5a17c66b0aed8f93538a197b04fdb740159859 -6d591ee06e1d68699f42802480d586fbd988ab6abd7b911cff06b307a0aa7e69 -0c2fde2e6a550c3553e91c733636e75ebbf6f62052d7b64e79b6c04ec1530b21 -d445ece16d21807ab1d287109a775938ea09418befc20224a918882f7c81a619 -4891006444918b895fd13ec97d4b7d671141e0675b9d64fc751b5b1be7d4c3cd -3cb68baa7d424517cef3cf785191f4a927f75bd5111765e24f541277b235a522 -e5145332793533c93b0d20d5eec0e9003c78458c25eaab02bcd3fdc66ab92ec9 -21a35f23ef8bb1f20bd309738445653b35794f195464d641b823416e0d220ee6 -c7c0cc6d879fac3a5774bca00cac0e8a56c52c930e51d16c8bb45ac3f8fba3e8 -a5dff8ab3c4b4e44770d76111f22a12aafd300f11f23e14ececf8c0a8bf60b16 -56a628c6ec9d0e183c4bf8e631c9b19627bef283e927c5de83f45ab3bdd911bc -9d3ad5c70154474405171bf4f645225891fb70aaf0a01eb44ea1ee3c509da33f -b73474d1689027e4e65dd1bd0c6b0ac279101fe5f8a1f03820e11081c0bf2728 -cfe1b508511f26ede8468852f80f2394b92a109628c01dd414aff5ad2fe629bc -c5f8bc0f398b69700b270a4f8cdc53199f84dafe40f3a09b72e37848aadc2aa1 -24712f29874d05505fe4c74320dd51cce66def98b76fb1963b26afc1945b4c82 -d4f0e7ab0e8643b608fe22c68747cdcdede17e1c87753db6df06227377b6aab5 -903d757c6a163a3ea489cf28de8c37ff4fb81b7977912a1f86747971752e5ccf -5982a1b482ecbf33192fd3425c05210bcf500dcbb3df20abbb7f21cc73d18766 -41697ee8c0c57ad63c51c1aae8ef5cc81ddaab3708d95fc45b872ad35c26edfa -3bccf768043487e4680f108599ddf52a68c60d217a1bab253d4e3026b7221d8e -416c5f21f2c823cff8c48ca91e15e61a7e4d95237ff093fc3f17c67466a55c08 -e53f5793517a0f950040fb771eda852275d7430afdba83e21a41ca49682bd39e -00d6eda8dab9a1fabc00a0704057f0a9b152c4c5b8183bd019f4888410633d6a -fb6a93a024fee3c14806ea03c7dc494e53c49806ad9a2d27ed008aa63dfade7c -6141c7b3b3a3eee139e608a0bad9ada5f122610fe5bcefc0aaa6a6aa54d368f5 -5bcad6dc58b6a2568ef82fdfef18f5cc8e5f189cdf43423ddb4234745de64194 -9f85769c112dad02f50eac20b2c55c2a0d654e6e56d38ca12df576f2992b1329 -041fd3a18ce6785ac452ce452ddc21ba73de2e1788e9f4926d7912c66f089bb1 -de7a0328bcb32ffadfeda9edbe576ec37cd2b8ba64d88f7190f061475f360901 -dc5a626c9414c1d79c0071ee763f621e3a9fac9351bb34ac3cec3241fd5c4cc0 -faba3f4ba4e7416f035bb807e50873cd8c510d2d001ca449d5a7586e8acf36b2 -f34b2aefe1c19bc24688576d3e0a49c80fb529accf23e15f11eafdcd0b9180ce -d29d21fae667e384ea891c751b42487777c44df2c8f1eba14f5b2704db92c06b -abec8a200db7e423df225cc8837f3de9bd5d5a4713958de796d1dc34bcf6f5bc -93b81be2eeef5fe7cfa547fbf16829fd729cd7ee1e75b4908cf1e07ad14d4d59 -e8d4d8766642b7ed625c76f03636326cf78f9aa8aa744e49e392507de3335a53 -4fb823aab5e47c7fe40075d699a7056390cf0b96d8ac78cd85dd417785f3452e -66c1dbcbe1ea61c2b450aa97adb7fe84547085b89b2503a04b0c14f8ce0af95f -24a5c4e494dab9094973184060483c1a2b85d1ce1b9a82a626eac5c34b121d8f -e8a88097a902212e22fe263e797ccdf899247600dfa1cf69ace87ca22bd494dc -55473324a576e966c7b1249ef44b7b53323cdecffceeb6f7790ae51549d59da5 -c7f94ecf8cba8b421afc55fd627b04ddd81618e05f84ada21e13d23835d054cf -e6168843909f84c7a2cf6dccdc0a0b4670a83d6b440a5434d2e01aa9af41f61d -950dc7a272cdc559569325c25bde0f9407c18aa2c4da2c56f2d9cb68fd1cf1c1 -fff5fcaf7a52047be6ee64077b44aaec937275306033b09ebe03a8a6e85817bf -bd2085bf1bf0c90179089c4cfac8e1f57c59e2c03fc258c4dfac808f23a4d88f -caac504295c06c09246ba121e2902a0ae44354c4e96af29bab4d4918fb57cd4a -6700f7bac64ba80f5845856267dddb739bd7fc4815e205a41c8222e9abb6e9cd -c655919f90fdff70682d735adeb0acf3b801ee718206606647e92f0d9e5bef23 -844180c0a4f8625627a583a4eecf22bca9fca008b9e6ec8e22fb01b677de87d8 -88877248b629da0df5a8e31fd0d1fbecafe48a3d1fc65eaff141ddd9bdb3361a -461570b1d4894e0eaef5db795ec75726a0305808104be67e3022ac55eac6159c -ce2e97ae718f6c6b5cb537b99b511ab73f5577cb52ace204ed57c5971143b441 -55e2c2b106554f42fbe3ab601b74fac94d6ea07834df928426233bbf558713b7 -d7d0f5173c2d2cd92f96978b6e462baf37b55e24bc46cf485497e3b5b8c59811 -f67dc4fb5cd09c2513b293727f428cc5e87510431ec94fed40652fdaf0248673 -d15229547c87b42528ee4780606a14d0928dd0328142e5f3bdd924b8fb6ec7d4 -ee1090a4c597e3f5feca0e4516753b0266a5552f34336579540c6f9c8d863caa -03ebac2aaf222d7332789dbb1423e3869edb30bc3760f6f3669ccfd3cd787677 -5b71faa9dfe326cfca20c3e57f1d8570365f88fce2f835e8f7a8ddbf5f6723ea -ed8c4e7cae43bfce7c0fb1b5651c34110a08d7ea51a96d5cdd8a21d6dd9478fe -d54f8f64da628450848655afa5bf68b874909434064a19b5e534cd4790e57ef5 -b09e35107e2ba0e49bec515675b144d8870aa7f3e304384ef1356d0aadba40d0 -b6ee205092cca81398420d74124bd62d493d6514240fabeadece7eeedce133d2 -df64016f1686c2d2ca0db01cc59e9d2d70c449633199f0c9a9ded4603a22a2f8 -c6ec0ef150433414fe0aa25d4f9eeaa63a926b13de41e7c0689f737409100af1 -5273f51ca9d8193d91172ab050fb1f21cefc2691d35973cc04231456e1ddd418 -120c5ea29685dc1f59d6fc60d494baab02f5ecd31835f70e9d3fa1acab230cc1 -b63963dcc7976de3ee8a2fa4e9fe2af0008d04cb76d6c56abe00e07b388e4e48 -f1159e6bf0904cc092d0ddf098dce395ef760f3ccd8a41c475d8ec42080fdbc8 -d602b052b18af6e2d715d5ab39fbba754a02fa138f7059139caea465ab37fbad -e4e87ac2beabb8a8b8782ffc6971c41ba8465bb0c4b3004f18123a31bc08236f -d55f5fe8070f399887c98bc27f29827bba4ec26f158ea704e555eaf50e0137e5 -d25938359f998563af3cf5377af5aeb60cd4333112a1ca5516869ebe07fbbc90 -8a843c2fc2db153123d56d0a1d7c2aa2ec0552aa0c9297bf1d2756404e9348be -381e7d018f74d95bc67f91c3b6e85a7eb6fe5801c221ff20bee127528845c265 -e20b79694ae88509bfa5f7a20bfee10e79ec126b3ab103df4656e6ff6ee07232 -bce2ff8528e17fadadf3d347949fd531672126d57ffb27c1ca869f503c9b2135 -5676b21586b3da13f1f03642a5d4d6eb502792bd1c44563bf6cd59b2737e7553 -021f7fba0b72b5f3d31eb93d06ca0f8cca35f948798e133faa75b74047e8c180 -d647901bbe0cfcd4cef8fc87b6925ae88e9f7e501441077a47c7006a93bae1a7 -71531db280f61dab2c5d70bd100850b5b348a2fbaae8d488cec04339d1262b45 -f12fcc9d8b0f8544e8e45094100c678d32d842fe91c29a9f0f6e187ef7192a1f -42fb4252f03aef5d460299d694eaa45095482fb59282600c4095a9fe3aebd2b8 -98f4a1691f83beb110f3bc2b726e3b4542a3eba1116d57820de95393f93cbb21 -2895be4341ad9dea12c3265f71e00a20cedfbad75856b20d37c13b0d63dd7eae -4698904a9d5e8e35d1875977a6c75243bc895d6efec907108beb7916aee6fe9c -045ec692a5694e0275016b0ea672db9561be18db0d8f720fdde195b7f95d512e -80547dc73a2729ea79a000d5e5fdf384dabd99257bf46c91cb24a577b33374fd -fea9879e7da3c571ce7b413841442c9d2f0ca04984cf23177c9cb9c52f801c58 -ee2f6b4b245b84bb272d19861c08c795ddd66bf08428bfc389c5aaaa4adfc07d -fc75eeb010333a7d4cc49e7ca2caa58923b1e1eec3ecd0a8fefb878b2cff45bd -e00e93dbb808e4912e4fd9c9227f41fcc7ec70e684f30f8fe9a9a1d36c8b0733 -3261ea87aa7e8d461e6f7e8d0b1e6d5418e1ea542ab21472eeb0bc2c997fb01f -b935f6a4cc18eeedefb78d3498ec8b4dc6bb61d038b9df282686d09f8aac7d53 -7dd522ef376dd0e96306abc1be6e1ec4eec4695fa380f30a7ce452cb358f85dc -9b470b7033ec2ef0e9d4d264c5be22c205d0a528d75a6c03ff2af481e0b33107 -1db51a96fad880e9ba77f07f28b96172f84915116b4b5c809bd6d1267488f4d3 -b73076a77722f691ef78f4198061dddf6572f95eaf2c45b7a724b1808bd307bd -39901295aed33206b618dbe15dc11caa383b499ef9b8144c69f393558ec81744 -b88e1c041fc748ca4fafcf5f31e00c20467f1130462d9e01604d20d00aa6fe8a -822828130ddca55f7b943fcfe1bd331cdfe357430c6d8d1292d110bf44862661 -0922b68bca7566feacc3c1f70d8e910340c509fd4f7234d7c4bbb26d11d304bf -22fdc216dd348375bc6d3277761ad26a9b2754c0bd300c119380d6b849efd1fc -eb3e29a4eb5af8387f80fb1bfd7799af6418c1243d8f637035cc6278a35d2747 -c1ccb2e841f110ec639fd46cf287648e11ee0da44de72b3e2cebfb2f67e705f7 -5a783ef98d4ee4575ebaca024138aef3455642bc44aa85e663ff16ad0fb95ae0 -5ff0b645ccc18f67606b99d09bcf24d1177d111c9bbb2f57b0d215b5caf9bc85 -01c3f0d92f56bad0fa7297e363253ce91afd9fea6f4b220431b1a3006541882c -8495c2d5cb052e421ebe71928ed2d389c24020db270a7e72363d4702b32b0d2e -7df3307e84b5aae70c7244624c4e627e19eb810f4990be57cc02349263a0026c -a62ef44c94bde81531ec6938d9971802c6b01492bb487d552052ef83707de93f -2fe0f577c3bdd5ae66ab06b97092334b740ab016de1fb629e2c7a94d4d967e32 -e56ba2317814226cd32a8ba488550afef6e5a44361697f125d889458c238701a -17af26a0fc638c9153a57ca5357382d28d7e8f07f67ff02e9b5921431d3957a0 -63ea086abb5c4fc1ce57eab83104666136b29f41c7b454d12fe6eadaa365371a -a66a23b610e7e51079f6d9f522ec9f6df279e99bcdc922a55ca043828edb9b0a -ae4283a8eac969535e1beaee23a1ffef309b08df04c3eac5f24f3385958a67c8 -cd820ddfcea985d1eecbcf48f4139e934bccd849fb1a1f1a225908f1be097ba6 -45226dc82b41a1754b1ce1f18e264f447d6fe8d7757d12d601938906965f58d7 -66cd25d8f7f77441d2c57e8bb3ec0d9ced98a8e54b6b107dabdecd98fdcdda08 -4b4a5fd88c4bc90b87addec6f07175323721de086ada49070af69ac80d5e2e82 -8c0078b31019640c61301a28dbe9931d449ae82cdc72b16f25afe678d0f7fa35 -2f26ef45203ba477bb9ee38be0049d4b794ac169805608bae95ea71a7b1f0d71 -b3598df24340bca2767fb5cc23949a174461015e7ff7dfd0fb32c8eaa0d21aa7 -f366961a77955c9bd8ec42a120a97b0e798417b53517e31d0eaf7e8259de4e72 -fa4f07518e2407aa364550fa344152b424fa0eeec4cb9a1b7eb946321ea1c5db -2aa77a090823b10d01e1023ff86c2577f23af0b4e10abf5a2baf069a606707c7 -21aed7f6bdad94bf02279e528f53c49a401a1528f79291cb7f8da7d544d1e97d -935c8162fb14a2e82ab4e3e2ba0d136506da3dabf939f6003fecbc34376945e7 -65775d2f215148ed213fcc5587d35e09a9561563e7de65a08867e7da49245229 -81b211124200c2b3ec489e6289ba20b3cc928cddf80451b8dfd902a03cbe5058 -fd666abae3f3cd985bade5b089391c6547d6604eff3bfc779c03cea5dfb7f688 -7a71af3b5fc9aab773eb25cde6e21b344608ec7f1db3664e1aec04e97ca440e7 -5016303f5807c16d2228e13f9e46eff5fce2c138d7845b86046b4ea6987d9f7f -c016cf9ad8fdcccf33a39eb7878cfe6ceec4a716d4234f47562d99d0cbfc026a -3c9ff8b37e02d2adefacad4c319231203f6549f75dd0bd605d432a6a47d57922 -87a018d99d9c8f83fdb33c408a5d68c532eb9c550878994942cd11a885f6b636 -8856c8742cb8f53f03bba5cfdbf6a0a871a6d5e5608d73a47aad69ec45ba1631 -2ebec5ad12c46e226578c88154097977cdd7384df4b47c98ae1b5a73009b8d0c -9d175467aa29dd3b5e8728e15a6de49b99b762a24fa0648fe57604e4270675b4 -6bd1806df951cc6074b1c1019e3cf27ab493e421bda830ad54c2965badda0a2a -a72e8cbadec2b9dfc5ba8fa553620dd13e597c1094dbae865b122453cfd27c94 -c94bc2d1b33fc6bdea57b3008f25f3cac75a82bbe644367b13391ec6eef37e93 -a97ed1e2a1279358e6456ece5bba564455f11d1ef0949fdeaa25168b377d7af1 -a15b8655f56da3154c8420bbd3f38b03abae9ca95ae22238b8906bcb85d6e545 -63aafbdc6470b5288f70b3ac6063a59acb0a88492f2560023a4112c2a77f9795 -cfb81afba1a930f28497bf4b6168868612c220b0eb356ef17243f0f522af2b8d -d9bd905c8dd80fa063f579e0b8665c85353ad28d199052eacd4b79cfe233d032 -7ccd9daccf569a6016173298dfcf6e74a16b169b68599a853f19e516139daafd -6b6f00940c2048e1087a6e3954929f5bae1be3e74af0e4d67c16c7645a588105 -280428476ef9fa360b6e9334fc1085371a6991a8dea25d21c89bf52303d4ed27 -5e92e851331bed72c2f071622f935b13bc546052ab6bf1d93c4bedb1874e4ef2 -9acbca60437a52735c17a2f6642bbab45a5fc2248d19dcb7e3a61ad061e246ef -cb7602a69a31ea6228d44e8de00f25488160ac5be7e893468e3ef6f6a5be3a38 -d9d3b508ad5c2bd3aaad9a141b7d3c7512b01b9f97a67109e8eae5e406535d9b -4cdda6f7076a26b5dd63f5eb3542fe151b7266a8f79620d968b33a1a2694e2f3 -d255c2af6fc2897d6c4c4eabb50a8414e173006e9f9080b611bcfbeaee826303 -174568b0887e4da8e29ee0865f208791e813b1e5968c922bdaa6c7a49ed36e20 -a165a12860c2450c16f4328c28d018b9fb41c42cbc498cebf4109ecfd2828e72 -da34d3d8cc0268ab89016204d52f4d556510de4f136f27e67b01cd9f782adb47 -ce5182f11629e431c827bf6a72ba0974d6510ed12cde60901ce079f4f666ca27 -364ae47222dc0f386a8ac92450c00e661ba2d9f5f3716c7f2537d48df6cf016a -ace9740a9f9ded55e044c49947b6594247a72034e1773faa820fdfaac84d1444 -365d15023ad3cf01dc64efd7abee52477376594bf13b9cf73973fffeef536dd4 -b94771d38835fa037b5f1b6314c96be80516b3d31522b5734d239d9348959499 -cdb48ce1419f0ff4844347c039219f81ee34c21a8e14f5d1d8b2459114c11ea1 -bfbaee3d514c35bbcb02769a3912d98b9a873cb0a78255809184354cc429cfc7 -ceb2038750e3a6026f622889e891579d4d24e91adb4c5ec9ff12e008441fa3b8 -7da5fd597c97f37ed5e8553ac7f140ca877eb6a4fbcb351c3d070996088bc4da -c5ce85572cc2bc159f3ff3d2bad5546fbe3705a36ea95d1e27c9a70195af8517 -8c0c61e66aa62b5c851018f2971aa32ced258ba4b68ab2a6d63c770f787a3e58 -470e4221ed1035f2a001a3570f0c0448c325308963e5c49b630e1d7b0970d532 -5f6f13ec777a59b17791c8292a15a8b0ac48865206eb224c6edcad18b198bea7 -4411171fbbe196094e60c70589d8212c8a03f8678d1283d428f0ec49bacd9233 -45da9ce932d5a27515b5706ae3ccbb005ac08efb276a9f4e49becceab45aa940 -b8ed2ecaa7512a086403c68e050e027b596ee941f96c433a92b8574d664b5184 -779a5345eea3680a5f485fd7f4afe55f8bf09a8f832f68088fc095e4dfa1a490 -6ed40e63e886d5f8409c468f1dcd94a60ea266f813270e1ef5c6fd9f950e32dd -9b94d7014d1ee3ceaa69c9b10d76212603318deca6ae13c499540c057aa33b56 -5a59688b1cc209913f15a6babb28d95b939c0a0a64b778164749965ec39995c4 -d7fc700a746c511fa7989ed994740e2c6adf8177df4c47f6dc5eed9af7976ee1 -ef200b36c2008e9699130d073a87ab0444c5a5982ae22818065f4651cf82bbab -8bfb5bd6a1da16e1be0f8089c9d524ea3b5c8507c82b80242ee129d35a14658d -7a45b4b656d182cc8074f5e80834354c36247c29b0cef6b3f0abd61ea8b4b11c -9c3b58309b3cfd129f6f46a803732446716002f5c51b5784d10a9b7bfed4888c -9608843146ca38d716f36f79a7e137c18b9b2b1cf88dd7ef189e5fd93553234c -7f91eec3b26934d7add813437122aeea8bbd34f6003ec520544db0a655a2490b -01e1bc3b0791e66f7b6f67fd0cb4572f33fbe9ba79dbc8261696d45976aa8698 -5acc8d0d01a087bccf76d8b00e2e718cb89a851b9751334a4570a0e7a78c43a1 -75300adb34e13214f0ef195fcec89295d26eab98b457091ca12d0ceb8aa00d32 -9f417a32dbc3cb2e077053f85d7dc0aff7d706f99ffa1a9354ebab33cdd7e94d -c1c0e93e54663673f53a4e774d8d6b6d79199d1300731ee2250fe6cdac5cb368 -fbc12bc889fb3d8150fde2311baabfee3fb762da5021d852fcffe7081899f0e0 -9eb4324ae44eafae1c214f61a4c883e744cd622bd677024dd7214d36c263b5ed -3c46e1f7a29a8cd6df966c1acfcbfb07725908dda4ae7c67daa3b79c4562946c -ff3b31b767765ba551a4b150a76101060c2fe2c2e9bb68335b505313d4b4bf49 -da9b42321867933ea4d5d3829dc6d26e577a11d1c3bb08972b1f036129ce0962 -0eb252c01c7a74e104b664fe14a99b6d6fc4ef5b9eb22a4deb6708030bb993ae -02f6e4c9a41a5203552da8b7fdc135cf7302d6e83079b53afaf62eeb3b25f59d -29064c4d131a6ffc8b5143973f9af28cc2ff85a545ea9d498fd740cad6a340db -f930414c753569d688581c391a5c4e41bb5e43c829ae94a031eb36a7195940ce -482fd9128a281f14c6213b8065189a7f9a3b68da0716936b23b45976a4364c0f -8d423895ffd10527bcdbcd8bca0468716cda0c5a6fd8483e9dbf4e5bc6d5ebd4 -5427596611e73a2494666e337e30fe00a1cef14f5517a9dbe62224f3cda97fc7 -66785ce5a8d57ad364d8caebea4d44777f6f6d98c9c1deb473f09cdef9048d63 -e19ec8ef252fb24a7f74466d93d7544cc5bd017ba084a7c6671a14f174f8ce66 -6e23730cc2bf817dea1f097a519c6c1605f51d7ccd254ce7f1182f9c2a0155ba -14e3dba3758c1ce86a93f7b93a15f5920f3a88e34776609857ca3c1068ca24ae -59e6c30bd72a3104d733fb2d197dc911f020b6e096d461b0da9af0a32c0f33f1 -99b139a1bfa3b50973c882be74108261f201cbc20696f1aca4dda3547fb83628 -f3669de7875dec76e286e7d6cfc90751e7e88a9faca280c0ac94d73e71a80647 -d55aca5b4557ee675e81889d1126530759a0d30820b1bf62a1eaa3fbc30ed56e -ab58465bbfc39244fe92a6b13ef6479fcdeec6cb118038659af63a8218a53cd1 -5f46924f2e23189d6f9481e1f718bb72376577e3746509c9405f49a37497493b -d7bf714c8bc5dc285e4c5555c9563c5ee1c857863ad8810773392a05e249364e -e2042fa7d7cb4da795c38bb17b76bfb94965e0164c0930362db0c28bc06e1fb2 -f2cced87d8f89e172229c1bab7650b87124a8f7493eb9d76c7ea49d056a07b2d -c4fca7284be57bdf4caa683c351f214654c137bacaf7bd0a6cfa966f605a7cee -afe05592e2aad56bd8e04eae47195187fa54defa5c3d7264cda0733f64e4c3b5 -47eca767ef1806a13b3160dd02a4eab001b21b51b32bd7dc9b49384f168f9354 -4a50886835d6d59d07f28d08d650b3a691ecd74fba087c182011bb969e01d01c -c85c0199ac0089d5c701b32e0924a34fc2b9c1bd07ea4d905b9219aaa7adff61 -f3ab26267ca7a03dd265362982db98daa7c6e0aee3e808ea089386a7a8312bf0 -7046f234639d52b16a8162be089659e1e64b77038537307c09dfdd2e5de2b2b9 -9cc491797d5fa756094e953f824ef09d21f7db694e6ca95b44429e58ea9cc1e5 -ea57b6b06cf20acfe8dc444cb8a5684efb0a2699ce91f213fdf85784d8d9f9f8 -57f115bb1460d42ed38bb9cc4e167fa41895256c739c1e9d57b26fd32bb8329e -dcc34853771f1edc6c43fdf08fc89266735f9dfb19ec871eeae7367778ba2cae -c5927770b7704c09100a47dfe7601886cfe749e2a0efb751c809fde69a7e6bad -d9adebcf8f0ca1350198b597ba38fc4fe565918ea1ad1b9dc71e66396011fe5b -396e5b31ee4c56a7080808e04f9c16deaedb9e757575657edd2236a426797f0e -0c7694679a8a9c9e01797fe6d50b205f78bfa08c103a6a071f254f315202a472 -8a05f652b44f71aad20f58a04644f00f6ba6c8426d02373b841740cedd89ab9d -7849853cd88485833cb6c66a85a549fe315b5029a624c5b3f9408e73783403d3 -a29ce83ebb869439cca17e8ab0a2c2c46ed4ddef68af71b09f2da49d45ce34f7 -ea1a2c226edbd132f7ff4768fc4e43eb7f78719676e26dd57d187817dd53b853 -f6c8576710217355c82c12e3a474a0ab7424845fd97461db0a865a763e7bcdd5 -751ad692b11556c12583effe3a744ae8e3a65f21b5f3c4bc24f4b4e4dd497196 -2a22457b1e2830b6338a9b573b4739a3c8ed460fc71b5fdf52027f24e90cecc0 -64eb8c24f9364529b7f62990757840bb418ec5abaf78afa90542003a4a22da80 -c0252a0d11028647001beffd1d62c42900c47169c083d23f94d4187756a07563 -623beca6a69c5fba9d31d49200b9495e2890b57075009c0342f4bfaf5f3a47a4 -9fcae54b8ccaa3c00114513bc2448d11b1cc8ff31f3937698fd40cc221a09663 -f6688172613d08ffc52e324f13d1609fc2e28f9ccf3b3a427b740e4ca9163d2d -8971146d485d0f4d74624e51b16aa8adf0ae3d1a5ab999e76b8fa1e573d6de8e -9a82462893ba03430facbbe10da9bd40ac580de81cd1cc1481e2b12040fd1eec -a109a097255499032f8e99b116ddd7ca99f096996446baf129f6c2df2f3f751c -f916591fdced3e6f86599662e46965250d7db1fe3a6bfcae64b23ea1afc10991 -9008c80895976491b9cb22afc42388886d626f4e45d2e78ff01a7fde4460b4f0 -c01e9437a83182bffd2b2f2fd7b66bba0b7410dc475987a3fffe0754cc217a26 -c13175c938e3f403e540909a5e11b4d78388a98b8d7394fc098b466d8cd41b41 -eb19d975da3e1a7b398a98f6bc0255b11e5a44c7305bc48ddd6f30afc357582c -b03141821bbac69485b9160261019aa97cda2e7c0d0580e0a4cb2a06d9a78bb9 -bb0c45fa302281328b2e3a3c639f127e404f424f05540bdb16104287cc6d201e -2829cd35adc5226ca37e0dfe5e33dccb4d444e07add3662505aea5a835c8464b -38bd56f192cf929341e20be9bed44c48eca5f8aaeaafea93364bc09a437924d3 -1a73b1a7d94b3e65292bb543e9b89889f8113646152219b2d096809a87fc86bc -362769bcb7846c3278c5c3a012a34e73d3ea6b75c16f0eaa43ac2767725c459d -98425e9199000c0dfb177e3f0d718923763ebd4807e772eca895bc6768b72a35 -4ce7091f3009fbb79ae6a32f6c800b775967dfc6098e6d7791d623a9deef46d5 -b4d5b929508742e1b1d80ec182af65aa9b3f824752c719f7f868ed122ce9a671 -dc630a523ddd69bba1395e8ae1e5c5e09b3bb840b732ec77cb58e0a409f723ba -2f7ac1a687be06cb1f44770fc24089fb71cccfd89d600324cccdee8185bb35ec -c68f558f43992d5d342c75ab608b1d7aac0c54c906dd8f828082b78dbbb87512 -ace7ee2696f4233eb9b7be1fc1161367ba18e7732a6126c761f826a021020bcb -d730db24faebceaedfc407e8a5a8a6217fda4123ba2d73ac48ba6387695ce65d -432b8b381e70611b52307ad0d70988316ba3b554080e4433dbf749b1f1378533 -c0d75845b1b21b6d6392f8fe8b7c386aa79d78f732df7d5d42dfcafec965d7c1 -8ffa91f2fe706360ef61524a7070376f76336ecedd9cdda18757db84fd09c3cd -39319f2f3bdb3c8439ac3d98f5dec67e2627545956580d39be424bf0c3125480 -921b6972870e18520f1072d0f20d7cc4d477574539865b9e2429d8995bab8bf3 -3d41cf85b32a6bce7f766fffe54d399be503d7d4310e9e39aaa32d31a7831817 -58bc766d3c2b53b2ba809ea324a118f3462fc9b31d6b0c84b59a0ffa57b95229 -70744b835941646b11baee6a2eee6fc8d7679081647860804f51166eb9081942 -d2165a3dc4f46981795609d095fe8b2aa8af73c59e72c3c823c6cb330c878375 -a2c0d000b692661825fc5675ecb1d21129e48507d85e9d77b78b6570609c13f5 -229399c8cb0e5809c0e2c61b589d7e4a6ea418ebb78e13a7f3246619c9b01fda -5c37b68c8f8023cca53be56c331f26e8e3a15c1f71b03e90ce8a10b5e3868d7b -53367c9fb5e503dc2a026bb2f32ffc3d83d594cd35b5489c75a71c1bf0b5576f -5661402eb416e30e22d780d5952d53c176c87593e59c6a762b917f50733f3d50 -27f4d324cf382295ec0f2e7b4a68a809091247f7818f82f704e9daed8fbd759c -dd6cf15cea29938d2858d090633276a985b5c5b946c8e79d508c486c3546076c -bdd5c8d0c2852b1cc69816e8b475fc0cc9dad0725ee623f4d3cd88cb106722bc -d175178c5df2ee708924be190724ec5f3bf7a34395a42c8a473fa98c67e5ab29 -4a3a7000d6c0420732c0d2723155a7167661361c771f83619fc8dca8d2f16c5c -4f061d9aebcfa8df098ed2ea7060eff01aae92099cd93b4ee49a0026fef35952 -042f4525c7afa81c7f11bc0687ec919ffc82e6f30aee26f3269fb8afd73d3afb -d1ff1fc52440a62586e14e94a6d02591e83ce92d39e142c72faa7385ee67c9de -3b9681e3c166773d2af66da2e0ad4ae3b583b7d1c796f3b8fc1f33f5b13b43cb -0fb3b87042b3b7f168912927b00b155b05201955014afa337b1dd6cf65917a3d -87066e286356b7fe565c089ddd872510fcfb771d0bc8e090afb155743db0827b -e809ced51d8913022e7d949ab42dced250e121e309b118320dc3d2b46b210c43 -057ce720effaabfd7c1579f7f2ab28d57879dedbcd8726c6d0e592e384987e8a -6669b64ddef2594a23dadaa795325938fc48c57a016cfe2a2422fd3e68ef35be -25280625fb975446ee1bccf778933b3036e146ef59991fbe79d9613b0c9d5839 -6c6e704aad88ad3eeb78332fafe378d8feb7174549eb23e2ec2232406e71b447 -4268e9770e9de360f66a68388e3ad516b99fb6ecb0398fcddb404f2314c93852 -533af69d70a896c05386d68233d0b4f628e410aeba52b30c95c7c1a5e821fd96 -f06f753521a12846778d9433cc283977687b418651519bcedd858f45557cd0db -31b80f8160396bb957223856d0bee2bdf03eb24245729bfeea0350a7d54cedd6 -75633ad93688b75d05e60de48956a0385f67b8d0a276b16a121783b7284aa832 -2842576e749d4f68c51eb75c913a88d6ff343dd564cb2650d3e1917b8867a350 -547914966f871354e653fecbd7b36aa72574572239f680c4dc07fc2fcfe47cec -3b613d5533cc0a8f092b7d94f6de89d0888e03c9ae11f4c31dfaa97766c29c7c -4acd515ca47d6ed0a3529f614334c26835a6d4e976c14ab910bcaaa7b36d0a23 -88259a5412270ef7d7ad5e193bd1fb80116876572be64e5ed4ee0655a90663ea -3415272952cd2403d3472d2796ceede3a698257173ebb32c88e7a8cbf07044cd -c7053257b8e58e97e15004238014c2ac5c29133469df69fd8895251a131127dc -879b31c585a599d4d5562fda8e8afbe0e95e3181c49b4ed2311f4f937d3257e4 -fe1e001716914fec7c17357fab233efb81cc67772a559dfad42174174522af25 -3d90d0c89cc5dea2e84c35082618ba10266e222475d5ee2197824a7d59523857 -d00dcaabb6665ffe310c7715d47c253d4c1363548865e13ccab1e8731961e43d -7d60d4e0f52d6bc73c1acaee6fe332f247f6e6adb84991a03122e3ac849c9250 -239abad46af37f676d73b160d653d43d8bcd21818accdec68c2ccfe05b767c1e -515a70d79f2f4e3ed6ae1e4dfc0f6d260d1445e72b22b0b8043ff12d06bfa975 -c3eca74e820cf051171a008e87fd3dd35926d1dbf83d92cacbecb6a5c46eba70 -8336e695305d3d09e868595b7bb0cd2113cc4b5a8fa2a3fb82d0b773c29f9d7c -72023407d0df8ddcf13f937491ad34554535d82b6f3c196c5a8941c7192aae4e -7c984fbf2f922cd11ddaebd62e14206306993bf5d89fa28ac073645d0d6b5bd0 -523d94de2738df3d17c9916f28f1f917ad924981bedc05661b9745c426b626e8 -1c80a0993cc265142aafff11cef0ea2f556fb8b4ba5f17e2146250f7456d91dc -28a5fb4c5359819be76eb2e5072a6d7df64fc87dbb48550481ce0752f8961405 -c67f93f277fe77cd78ea15fa184fa70f352a82508ad2fa66d972ddf49c08d5c2 -035f34539f9e91fb89cc28a20e34ac2fecfe32c6b488dca969c872e8a8b83889 -41c9519949e3e3417f7d2c6cc96fadd580ecc55a2304f658ce3a279db4ca73d8 -55c7362b043afea5300915bee55df239d1ad86f07262e445bfefba3e4432f12a -25c4f8f8cf15c2476d11508794f3399d685afa08302a4281e3659fb0059e056a -f1526dabef35d633231945a9bf0fbb91407df2b800fa0ec5de9d9f98998fe26a -51767f184ad3e3e96c7eea385e948372e9ff8f084ca0ea42aee6aa294a40d65a -1b8b42d9e60256d1931abb4cfae3a9bce173db7153aaefdc2938e367cc93c0d8 -665e701e426304253cb6c6c0e18a892857b2889daf06067ebbdbf6ecc367cf48 -38c528d4b1bd8880a26d015f7be69d4fbd200611f2c914916c08e1d26e0dce66 -9d53c8863c352d1a0816ec77d8fc422ab74f1a0438f2aa18b3dcba27f25ee916 -07319cf4b9a4d5bb01e5f47d8bcc6eba7abdaa1d5d28f5bb68a576e87b84a8a4 -c137fa9351f1d335316d242728c8d89f3e4347381696b119f82ebf1cd96860c3 -616a3c7621e815d686d7e10c4c09e34b1a6381de3698e8582abf7a1c8194bf24 -bf0a8a673a9963cfc7e02a016c30f4e642de3e2ff775b15c7e02cb07d0a96ee4 -a92898793b636e3ab616742ffa1e48215e19b1104a9c3794a0dffc54e43d3121 -aad99827508566c232737285acfc38d8c9414335fbbd8a08d9b19b8fc0676429 -81a1ad2ac4e0b5fc0bfc1c843991619c8307e8843adedefdd6c60c93ca9d3af2 -08dd105aff64eddc47cec570ea24608e43542dfdee00ad3f60d917b4fc9d4e48 -5a6773112b8156643f2ad4dd4734e500e459a05c245399b71b0344affbef5e52 -6ce03f19092ded9a1832c68ce71e95bf15dc2c731975b91735e6576beeaf6d78 -b694fce273598ed927c67369dc061372edff607f367e6cfcdeb9ed6ef96784a9 -62de6453795c5938bc18cf6e5a19c547af1f69303a7b02bd747ea30b44319f6d -ed6773eb8f90c35ef22f222299edfa17bcfce15a88c48f63884adf771ae49431 -eaa7d0979cabbf027cb0410f6562c7b037e918299d628dc9aa11f0ee246bc3e0 -fe784bf70453b9b2ddde668f2d474821507573434f84a46e1b1f6c28a5f1ecd7 -ee1cefc4067d1c234726e772f6829166cfa052836ae8cb5ead8e1823437cecbd -45a091a735aa1be3efa3ad89fd1d044b3fef4fdbff6148c7a9e24b1cd1048d89 -5fe0768a47090dba2ecbb66cf4c8d405f992b0e2a24c03cf480f77a70cd8efd0 -530a73dc0b0c926e263ae6116c7b9df471b71f0f650e46d9a84ae40763f14009 -0cd6bd62e97825f463e21cf2cac000f58e3544368300d796ee08f7a6de957dd4 -8ebf6fb79e91b4b5336dcc829225d877eb09052d011fb5f9c0f8a1394c9e4b14 -71eb0097b55369771caa4aa4e2920c457378d7f70c61893163e4bb2447bd8ef3 -4f6478da3089556099aacc61f5e41cc7b73af9c15b25ae0ed797c1ec31f2412b -9a08c19ce90878d34fb68fbb19f0f66be2c612a56ecee5e312a6a7ccb70bac88 -685bd9a78f0e4c931d5c2bc64811713395af006a61bbb70f682e6760d2ad1e2d -aa802720724db4fad5a7acb36640161a964aa9cf01e917768efb377ffe94d744 -385e81e1ce9261c3a12ff8b8e7dd10db7fe0090809a4761541e59a8af1942a8e -0c67d43ee7ad19c26a3d24c8267c37bb698f884c6a7fbc91713e5610a88882ef -e44ba2671ef3ecc2237df2f7e6be07e85da67596717204e8a86a1bc0683f9b4b -d5d1b373000ca31029591f41ed5c09906dfaa220e1f9c3f5aafdce09f0087d71 -7f246e0126b79821c8f055ea427acaa37ef150d6bbdb984f6179bba05182a9bd -995c63406978ab13032fd8122e894e096329a0afb9e676a5f065fed3c2337ee2 -04b98ccd521cd715ddef40d5d75d46a3c7ce6416be6aa61b8e51fd6374dd9b7b -0ab3728f08daf1918dbcfe3f866296a5a4b9bdc42c2b86a4cf624ba6196abd84 -e5489b5f9c859fb0173eda877a3f539a33b0fdecb066bbf4b5c7df9cf6622ad8 -97808dbceed22294e2ea05aa750ef944a60775eee96e02d28628dd0b115bfc3e -388565b9f8e5780db9c571f6b55593dd84b9a16fdb1b74f8b32d9a613ecef342 -a8bd1bfe0acaf4d654b3a228a1540c9b5d6e20aa5eb25934762e50b7763da8e4 -005c6196f3e89db6e0b8c0802a35e3e94338d468b319ef502de294281a83bc35 -542aa5ed26b440a5cfeafb15044601b3bb5cd6c0941dcfffe3542ef71969dfac -bc23a5aba168c77fe23a7796517509c283cfcb900341a85e079b257477a2a572 -88a3f0651f201d9e9973a45412f002b085e499c52c5394710ae8591ea1ca21c2 -e846a28d93f56652b27e8b994a0af7bbdf7adaae2d5fdd6c3c70a508b5d07dd6 -efd7ffafabb07c548fcfeb9f0eb862233828c466fb584e1e3dff21ef2316d56f -2f479813aed08440c90f05c349fbe0c1378801e30c6b1daa05f82f426196007d -c6f95309ae789aa0acfdddcdbb9dd967e6ae59fee45025e726957534649e9a61 -aa97df76c82cbde7f46edcd233cbdc0ce61922fba824a00fd52071b104a9a3a3 -d28dc66b4e32439458fc7fc0ce9afd3f189cbe4bff296bed6cc6febe1df208fd -1799a808a2a721cdab00a7bb5fc052bfc601d5350d436298816af8d500a7925e -b4baac3dd349a1b2adcae0e9c1250ae43476d3405b9834172879c6aa7101e8b0 -4896cd2098056578af3292355516c06963776d8fcb7115c53da5e4b9e6a19a0b -b9264d8578ef6bad18c4b8d2fc63abdc4202af2b0d932e6b0f867239b072e32f -4fc00f3ada7ce14c0f5b8b147a8e31045409c0f1300b8a599038a5c8aa42da64 -09e6c65b9cd9b595b77cfe5c31d6c9eeb28540bba0494d90939639309d600e39 -55df19ac1383afdd44259c75d24c9110096df6296c25c324a182c7cd8245bfa2 -1ab4803a92eca1586329084df13a0e7876a8e144afd76951ae209222ea41c2ca -d5a17e719a5519f459d7969efeea4fcc85d372f22f353a64844601889739aea1 -245c007e0de8e24d7cbc8c6ce3ddd0b5ac8cb97bbccb45b3409ce101e329b5e1 -f3d221c5086b88e12afffd8e1a3da0769afc6dbbdc4f376eefc485cee2a9ce34 -da4de266cb78083af982e454488e4defb19d79f28916301e86f05e1dc10b89b5 -5ad2b66b5b883ec2bdd3eb2fde47998a3f629f3274b156543b5cefa200833962 -6c7c2d84cd618bc265e01477211bf6e7a93868e48acbb0f69870612b3971ee81 -3e9751556d4d6409c8ff03b3e580b5bb476feb83d9016bf6fdc9965489753c1c -0c7ce46482a9d9f511c118ba18d1bc505fac643ab3a825ae02fa533220566592 -505cd667f1e9cf8da3f8cff570cccae918027d5309ba6c6f01b9096d5493b591 -28aaefaaeab2c648acfe61b53cade9cc9d72985718d85da2936cc80ccc6fe3e0 -fb0d306f8957a9512e727e3462ece44ea1a1f0cde3d11d9cf796aa92cdcd3a44 -1074b8e6979809cc6cc15a4d5436400b0e81ea3830b0bf74c7cf7c5ac7663580 -fd8a839ebe70c444c15274a6c6baa10acdc71712e47d99f1e7b0264b100ccb28 -376b128f543f9a9050197790f20d8a0e3f77486389d608a227d85b66bac0aca5 -fa0f5c3c9f7632620c7bf9c19a86dae5d8f8f9ffa96795cdc2bb9acf3f22603a -e5ed29fa002d202a7fa263f641f632ed51ef433f679bd8780de0b98e99020a20 -9202ac89a242769a93b799d05ea95b49805762144adbdfa086c76024a552cd3e -5dce03f43abcca94ce924661e4d9d74d5388d10a55a71ddfd45de8d6efe77f6f -3345bc6c8a5632342ab8e74c0caf2eefc2baffc0c4d8e78c11d0914ac4d3c300 -efaf0009b6ba0807d589a552975cb31279868731754d507fbc22dd7824200dde -46ff842c9e2f7d06621781a0d77707024f1d2abcd98c329e10c5db5ad41df708 -31c2a886a7da65b2d6f8f7b9521b77095e44164c1d14481656ba25d4dfef8c26 -6edb45a2a50fe1efee2cad6d4e6e9832ca0915cc9c119f39af5355fb8413b289 -0116cb33d4af228a15d3f2951370c24b3da23274e9835307707067ec7422640c -7f66c3bee096d46b8ea320ddc416143aed6667dcb6c13dbf491444a052834f40 -5570fb237a0e1081b8ada535ede51dbc63635716b9f61051737af8be970f5581 -ba8f6e6fcee0d6ef74ff123967c1cc9d6d3e683ebd1e9adb099e2dc0929f0850 -48da683177c7dd82392d21f0a13ad7556ae07eb9fd03870df7968412be97f37f -062a618c336ab945580126a14aa4d07ec336ccc8f3e32339cb1cd0a0d1dd7674 -d35899a1e92bd4b4667f3424182905bbec0ada6ec5853ec2f22b293fafbeaa85 -d1156e5752876584e17b45f887a826b8c3b9a72fd33e70805c9d8f3f03bf81bd -b121ddd4c5dc762bc6c56935919db200c0624f8ba9ca6522a2ed14e9109cd5de -229079a281a5e0e51b805d92bad8b4b7a4473d7c39c784835d051ef45b61ec06 -2866af25cc585fc28693af577192708b1480d517e7cdc61ec7d8741bdda629d0 -d2a0916a6ae0e4037136a12b442ab61184b78e6a8e097a0c9cd2a50ea89b6648 -da0f1bec9ff9ca09a6187b2480a1d6448d4d7b97804c6db05ce952b794174cdb -9576654613bf8c0e1edef4bf3d075f9a353062c8701c490f1dd797e8eed7af6f -1788919841d4d2629ef8eeac78fa5bb50cd9c6d57c8359d9ff8388882ed4c473 -c2f88a56a718b6178ab915a8563e0b0f19c6f377ea6507b11491f0a05584574b -4c6d13fcf37ad1246690ca798f7f9ed574f3b33ca634bbe2489929a14a41fd06 -d46dcb999054ec2c83bbf25ae43df367039bd19876649758cbf71fd5b11fb231 -905514727f24de3b3bdf37701954a3915824290e12561ce42960ff0733a28b84 -41006ac910217a962f6416a3f7264e5e8deee0f0e112c706c6d290eaac43b58b -549b2b25ce0d26d08b9374f76c4bcf378488e7a4811d832085852ff30294d8b3 -e001199c6f0207cfcb2bc7e894119a9173cdc463f3a071b54c9cc42eb00b650d -45a1202be80712aaeedaff1bddfa1ee3a897e874f3a1c88350b91d9223dacd87 -f8438c7a53b0eb1d1b198d7acf540cec9db7aaee3a274f892d1f2bd522738b29 -351a773b93e13539854b015e68f23ddc7ffd9b356fd29e992f7426f7682da82d -37b62e78d5fcb988367c6486f89676cdf6da1bb842fa7257aca7f5303b3107d4 -ecbeaea92644e4b32ceb5a922b70a150d25b54bfe8c3bf1fe27dc689bf0606aa -607e8ac9f62647ee9d2bff659c1e08542aa99eec29a2bfc031215d31f37208f5 -57d7b09ddf00c95b78ebeb7d5ec1242180379e225da9848835a2df213901b148 -a9a0eebace661d6a589f9393950c4d59e819a975b06b6243cd7d024c92a9177c -955f8f4c2917f58ff30ea7c8a5a0a07915865174d761aeacb5bd38e5dff4b2bd -dbab66de5cf29eb9ca549dc0db0513087060257c98fc5aa5cd27210e89076b68 -3a5a537ef02cf705f04b1487dd5ad6f7686d5c27a7ad8c90678cb413c27c5808 -95ccbece717ba641c01be95dc3fd6bea33e4d25a61980a03d1da84d9031fc90e -619c63ca08ec08a67f07cb572034b93056b6202173ef2595278f6d7cc945aba6 -33f3419df0c07e31190bf104dbf0fb5e26afe4426ac7b07aef8eb511707fdba8 -742f3f5e30054e9898e56d9b26750f05b5a2cfd7744e9d99057088df26e4f584 -a4ea8fed43ca5d0d4f09daf5898b70e435ac5aa0469ad3ccbdd6c2e6a2f61bd0 -f30782dc627110812424f991f5d6df1ca14af401a6cc1896addafd74815ca502 -6c128f945d163d1a9692af5c167cf0727aaafb4f32f3678cf28e11a04c3f27ad -6e062b4af3358e0e83298bdc7a884251c9d12e3d2a4e646a7e6a9eb126d382b8 -129214ab7894404fa1382add75aaad04d344569c0d4f7bc11cb8352a332b80be -142c68f821042a02f523334fe54c880dcc9536a401d58dad6da2375313df8d72 -59addb84108ce05ce6cc89175b8277c0458daf6cdc1244ec7e547170d4ec5614 -f3ba337c544ab0113acf18280f611f798883fdf11456104f648f364b74baa09e -f1f5b8ac2522bede838ddbd30f403daaa718fa1717a427a4a55df5f13bced40c -88888888885196b991992ff2e0ef850034b6267a5ffce59e9961c204b25957e9 -985268f865d3d9794459eac85a5007eee037e0a9c0f105429b01c836cc2a9bfd -51841ebe84bbcd25ac7b7c9e42a60834f1af0be57294e26d52a5daec7232b9b3 -fe8b0e123c747e5d5f3d98ccb41cb341f607980b0ff4520e00842fd1b5e18032 -c943d3466cc2dd5cf569a7c3c24dcd3cefe6fd7bfe3803165c38608d139b863f -72232b27f144f59f2a99174c12a678b833c9630c338992c94b987b2c8b8cb019 -39e71569dae671a735a4599429b9cf086b8bf08996a9bc5d459aadb6d988193f -e68ab8d8d03dbbe90d70959a901677c765e5a0217681a70720ead4c92e69f905 -44c580b2c5e6d515d612c75fc38c85463ed307e6e15c85a7dece61630ab470ab -9f3060a2d77d7d2888f0f236d6d9d1f5a3fe7ca9baea663430829982f3363574 -2eabcf91e7cef03aa214bec4fb2d1db5f305588de5de1ffa15f707ceff038bda -709948ccee295a472105e289dc342bb69862941bc983d78918a8a426fda65d14 -728266ed49fe28f07275f15188b6115ea60236c0e9e968b03f545c2aa7cfa6bf -eeff905bc1556d393129ca90c28416c18925229b7d8c6087e44ff78a9ae9a164 -5bf51ea0e46a91a5c3efa666ae144bd7353aa755942459a48769574d3a2c83f4 -211a931398dcd6dbc471ac35aa741b70563110c01cf56dd68bba9fc79d4cece3 -ab1674aebde0ca57d52df24047cbf25600c6285db9bb31c6abcf8c0820202eb8 -0d1913d193dc82392f65bdb001706730a966159ce86d10e2f2ea75c839d0c3df -02c8ba2ade03bd5a0a157de7fd57f5e6572854fab40f06c29614909a5b7ead4a -583ea5bae59a2057a48bde0385cd96862fdd2cae7e74b74aa19a24639abe53a6 -69c001ce6b95e03c09ccb66016c70d8113439d1c0cf5b1d478591146ca454255 -c8b6e8dbbe49371b3ebb6fe5d1e736bdb85551504c6690405aec5e088273f4b7 -ba0ab4da907eb987c1f05a7ac49e2874849e4659aec28658a3fa8cae79ef225d -5542a6f2f8f87b5957fbb050fdcb1e68ce827cab703181d6ae56e79554151f8f -120ebd8c6e16cb08c9752f18ac011b7ca71f571d2fb1624712653a7f633a5cc6 -b08a6d13a5eecc52f35eff8c6cb90749db2ead4c8fe3221a8ffe7e5c01e92206 -0adc4a57d322771a90f93e7b907b6a3510c8065b162bdba54c6d0a9b7e9d1126 -f1e4a46ca6d52af9edffd961f105e37d653062ea94436fb0ae83437cc2eb3552 -903ad787eb000ebda9b7cf38c3895051e48f4ef2994dbb653ba6b5d33f339c38 -780cf7f4b8d0d3c00b079d56ae1e4124ce38589ade63704f808e18993deab4b5 -9ad533ca0c354d3d84d0a13e7e44662a3a9811ae7406b797bd328f782d0b7e55 -99caac952114658b7346bb27358582bccaa3ab9f24543ee981742a0439ee29f0 -bf3211c48cc464fa446253dfe57624b1d520f99eda607f3bee396acac8181c57 -9b09ee41fbc37d041a35a7155f2bb063bf221be1770e55c036fb1d0db7990cd1 -4a7cae32b6d742cdad0b8f9d5c303ae7d6991a193fcca1f5030f41cc04b7ee8b -a12860c888d3eccc492a58348f204fbe14f49297e102d769b8a4522da50e9d6b -9ac9ffdbfb793aa545f0710c0056eadad6f662c0f549cc9b8b67acaba41ea607 -f8796c1ebde047d419a7db968d2638805ee52b40907ae451437aa0a9513b4ae0 -ae7c92b04cb05f5d8e869bcb02c0fb8d9d1c4cd845a290cd435c16d315749405 -41a29ade9ff476e7d75c431da8615953d5b3ad91a6b4ed5fa0317ccd80bd5640 -6ff0ada4b8b06bf3c370219503ccd76a0076e60e4f0886ae86a362621d51db72 -9ac8b8d081c5f3e696b957d4444ec5718562984cf3b051916a042c584c2a5713 -e141d8355689f92037da304b20386368bd04f707bbabc072ff9c61c19b186dff -89340f47d618eeadebce54ac293b9e0c360b27fdfcb1fc1ecdb3528fee8404c2 -f8c8f8db9c402362dd6b5332e81debdd0e4ce83ae4224238496d9fdab730b245 -0f1b4b0f3c6a68b2b86c98808f5ad6534337edda484f3289bcc303754ec0b6d6 -13fecde99dd23f1c5ff5c8130135ef51d7583692079d7e94a757095a82db0ab3 -56191ed0534dc737e2ef6fee6e99794c6ab33eca29411bdf750eb9e234234da9 -fe7f4ea17f0060cc0e8b3620371c2e2ce13b4e49c47901f2a3d587771d2d373e -3687b28d94a0d3678f40cce95a3a5a3dd93e56c7ffb45f1f4419976c9cc58935 -fb8d3554101b708a750b58324997aa98d73c08886517308186af962cacee91dc -3a50f8eac4b0b01ac6b0815fabcc0af1b77b36d3586c90419f7ac6adf0b2b6b6 -a739d1bb89c0af34ab5538ada2d0c74a086fb18f370a3b6103782ef715ce73f8 -1e112179d6783031f1811071808bdf9406a8ad2cc99745465a79293d67ee994b -a9878880b62fa1c6f86db005d1b1f0d1615edc57231952adcaec28210274d336 -2032684cc9136ea9e179a2fad06809e16f5522b5666fab7adbf0566cee482eee -8eb1eaf6e5b17328b174bb6c2597f5e2ec3d1a9b24e68c467cd7f74f5b83b37d -78eba89d557927e7350a2fdc8b940a81a81c10e791c6f6169b7ba28fd8e3cd55 -05c6c3956d29471641a64c742bc20b0df2f0433967a93551b3b44be45bb1940d -515cabb2025b42711646fc81a651031dcfc2f97c70f9f4ed3266a20de4de2d51 -1c89165bf0811a71d664613101469e4315137e42fab5c7c6286372f0ab3f038c -8455798ea34fb3a8ddd3a3d70117e3627caedc79e2b8e153f6dc9d90e4030cd9 -75014b0b913c56ddcccac98821d223a6e259d5284e05ce7c19cbf4ac7913f84a -19364cc29c68f5190caa6da1c8f8ec23c6b12db4922ec4d72fd5a8847e343699 -153b5aa84498d5730d45d2b530dd395b6f977e6e83a0e95581d47682eb9465c5 -d72ac7ce1612e1e0ee0b9f9af20c2c57d0cacf5b2c6f66e3df799ee8a1d20c86 -1faf3dd00c7de2679e2cc35898c98e659d36f73120d72be97c81598e13b0c4ec -a5deda9df42f0b10233d7bb88827df41b63b275eac9ad37df77b42a5f875f068 -bdcc76b394415bf035f008ddeea997e2f911d6402b2d42ba01706b2dcb960572 -a4f3a1c858c631149a0fb3035455d4170148e43b302350c2fde8bb5462c53c7b -35b76ece18e1c4d156d970f86877f34ebdae6592c60b8df068881d841bed1be6 -7013f8d0e29348302913b39e5375264300ec218a60f3edade5fec9c958e2595a -a5a584c1bf3bc1ada56598d97506e82f38261440874af90dc6c21712bde9ba87 -63b6af2f0253db0765575ae7a46c76e329a5553b36f5bf1d42737041181d8f10 -e5b9466fd3be35d969f4620fbc02fb8d5259b3246f5ca759153276a5b82570bc -de2e69890984836a8f32a764e3023ce648fcd1a1c5fc0d6a1d2ea8446b771474 -b0b7bd49d319d08330ee5633b0950cb7989738060ec629d4449e31de66dec814 -0988270f512a54e00c7978aa2fe33b512f6db3744433a19e21d22c95fa7d29e6 -aa38fc0507ca3ce3ed337906c6664c65f1974a2c900d7780cbe2db5bd7082d65 -09bb5719d8be69ce54d400083ffbb9a19bdec1c176e4a47873886d800d557864 -bf1f5733c9ea086f29b9084d4d2d3ce9c6206255e69cef40d6f1f80232b7f744 -95200409c9cf6f13a0e4ae6149a16a4225c2e988da03c0199974f2fa41eee059 -3c49e3bfaf3fe1637fc8b95ca5d4517b6c17c8968565099c54645214376e8214 -a0a3c22f800e7cd63b1685d6f670ea9904e761b66378e373f4ef6367c6f7fa75 -1543e279d50fe4122253e8cd951cd9058aa9bef4bd214f8191eb625d843b4704 -f893d36a99e2e7c7258af907966964270e2c7d9505cd9b0192a880946f94846b -80a119c5c30eeec46ce473e27e1a24f0541e80bfef5b38ae7c2d0b3526f11abc -127716b8e17dd15c3d1f1028fbff69ca3301e060ae65febd72fcf9ad16378366 -ea58f66533b297b91dab622c8ee7692834b40b7a2ceb1e932f34e4882bd02d33 -db3618ad90eed4b5af7fd9e556f779efb55a2b5de0f96bf6fcec902aa5c1d1b2 -fe7a7c15b26203eebfb146daefbd85c60f7afc83689a9f1bbc3002cc574aee48 -beaac4c5066b5def64a42807784e677c82daab1be5d6b2a8895e824712c5bf08 -5c57e90e80b5793f52c21bd8bff6524031d424c389fe1cbcdfd2b609b522e64e -abeba025a56d2d32643656991dd4594729de26bf9800fe3d1ba265935d78bb18 -e2864c178680e26ff4467cf616436942b070fca737d344a6b2adf017319582e4 -df473259f8f64c555fd042758c28301c96c05b5e076c155d76a114256b88e8fa -98622237d4e7ef1118f685e1cfbe8f78937b20ae02dfcd3a5859d6a4f1a08c81 -4a66e0756a826dc8552acb17a13d9ad41d7f7ab8b15d54182c0d18146052e08b -7d6b291fa96e78287f9e664bd08ffb82e2c0e15275bfe4d54283bf5eed34d436 -d59b2f5e60af3242d0ea7380c9b7941e707493efae476bcfe1e7d37707282bd0 -73da360d701f24f68fa640a3792e2259d46a538c640cc02164005d02fcc08a21 -20eb18e6241b16ddcbfde83d68f42ed4c7a489c56cd5f7dfcda6a55cf08732e8 -c7b6a88bb36c301a4fff0253f841625be1ff10483ab8b6430957a263f3543a22 -0cec7d226aed1c3870e0de46578db89cb7b52f485689b180e13eebc1b0c72813 -54d1be5d4f90f64ed1834801b11f09847ac7a4cc70d8b8ff14efb81d722aef13 -107b1923d8125186633f39209afa8d64fbe41d611f40a9d61f8d798a561366c7 -e18f48c949baf9e2c257586a75e001b3e26e5e166146b87081310fa425e41bf7 -fd48b47df59eecdd1f12e8d27b62912d2859c95f7741b62538a87cc6182afbd7 -fe6d83bd87053e0ddab426b5f1035dbf1daa40f29639d3e35e678513706077b7 -18e689caf0d26182e5d901db06016671c4b261dc5dc328f85aec98e510c892fc -1150dc02fa2bff860d6090e60e05b8e614f8c4bd0771ae0264103ffede3ffbac -a88c30bbd1c1a17a8fd2004b7ae52508a3546c1c9ae85a94031a5b992ad7ecf4 -7ea89c98c44837976fb1f866ffb8007abe995f99965a8fac9911e29d52d3071e -b863edfc7bba0538f087fea2c8763084bcc5b78a85b9190f039bc21d5fb4077f -9871c8c4b70f3c8a2167a56dcb70132d058f77460bcf36d8cd154622c92cc38d -cb1094b3c10ecf5e39ffed13e6cb3207ccfa19306ab09205fdb2902cbf534ca3 -02c747abb9322fa822dabc623a408f141015f324fbc237319b2bf06b4e361b36 -75b0addb10ce5128ca2540b10a4b5490cf4781d9d7284cdddc4ed1c94dde861e -01e46127a9aa9ecd0b836c0f313368e590c449ded8d53ccb78dd2822fe3448b4 -2ac0d276ccc9158d896d32696c318abbcbfabd100df3bce56fb5ef9a0846457e -0d304e551199d09c277bd2269ca9e9bd02dd5267ff2d97373295ac6507337913 -902e9a8479a71c5e97eed59cd2d0b3ebb984fe169875946899679fce177a3e46 -1c503f5451d3e4e399ddf8a6aeda787327a78afd01e2ecc161cd74f261297244 -09c21ea5589264bc17ae372fea55b526138deacd72fe2c5157a2d4d076a12c20 -03efa7f2b0902c6c1d23d0cbdf945b71975feda3d65dc0cb0698e6b7e552acf1 -6be7a5e610ad76a763eb69fd4eeecc546b1a5bdb539226a73d857a2469d5f0b9 -b2bf524e651095a0c04adef422b2d979a079dc64a45b9e538679e2fb06d516a0 -b9555893a89c1d1afe281ef5b86f8d5e99256c35bb0103cdc6fb8c5a703a0d76 -bae8c033dcfddedab92dbc836025296391f739eb9844db8660bcc04824d11e14 -42a5480b2c9b2fb46a428780f93203d742ae216c466ea9e03c82dd9cc5ef2121 -194151ed8df351bf35cea9a93761230d929ac4c868e34bd2794307aa4afb8ef0 -8f9750b86c285722a1eddebea0ba0a086a477d144fc6e5ed0d04fb46ca9c6558 -ec89ce698fbdbd8d16b906ee2c41cd73a7a615b3675fe8fd7cb176ccbe202b14 -b5db1b8b002e24497e316afc1d3bae038ec0f01e27858724fd80ead5b211f4a7 -d4b37982bf34d067a2705c1b37c623c9a14651162330085ad3c60b62c6cdb0bc -01ebca32faecd3e433a0240785dcc81441ad546a1a58451b6cafcb3a4b58ee04 -b127ee87a3bf6d2b4a655873a33488ad0948feef7ad1e5f17673e1335d25fe31 -8e5185048cb94ffb141ff86ab57550092d0d9e9ea007786ce95df1b75520c428 -f4637d5fe3c34c72cca183e3850bf96d2bc0d69bc2943c70dbd9eac34f039b24 -0ade90373919230062ecf8844c7366dd462c83f40daa60398c873b37a7f9d56b -03f3f4f5e746f7755a2c3fb615302996d540ccfead3e8f1c34fe3b202b959d93 -0e8dfbe308483b9b6397f3e773313be0dfd1533a2fa613bc09af5aaf872fa816 -98b3e5f730dbb19c6d3f0370df3486127a14dee10a4e4e37453176b8d1f6569d -19fce64044d9a2506755184188b15a7a486eb95d4c569c88b130695a0de64add -d77af91f7c5fd7197936600222767c29ce3a09d72882e0feff808a01095adafb -5dc659b609edcab9535f1c186163417e536aef43dd6136cc648b51468c523cce -393ba794c58779c1ee7f9758510622ab7f42facf9d0d79be6111259e1a56ebbd -2aa53f9b08da11dcd42d223e7d91af504e8b594a376058fae800585c04e18e1c -1cc42019721917c8a767a7a067c1ba526e892ab20446b86d1d85502a05f113d2 -e6a3feb44f25b7ea4f796fd9f0715d05ae8ae4afe666afed6e1906782da15289 -ef58d5afce5b996ab124b6d8badee04288fa0e2dde01904087b5204a7e64c442 -4774b79f811437fa091a466403e405564086f879d2dc01f45a589726d8a6f752 -bc6dac0eab42c59638a7b0df16e92d5b35535ef6cb925a1cb594d739996b12ba -a344b16e17e66b8a6d438e3db2c225eccad7a1bde87fa7f25796b99c34e4c66c -2cf42abe1ece9b07360cd8839f9e0a8146608b3df9f63e0791af5d49d855a6e4 -099dafdb96d3ebe65b795b35ed22d67a922901b6fa2b8337c92289ea7e4699ae -6c087f23ff7c23c5f350a9fb283a4bb89fb4453520519c9350a3fd142285fa44 -8d644475a04da3daeb324a5d3c6a3ba2c4c1ebb36a7b0985581bc249bf480089 -c25f73bc82e3d7d6f4197d3a7073c5f84599bb6ad646e6b543c0b22b2446c3e3 -e98ef24456e802c084ceadaaf99bb11d110d2380c94109ecde3d44249b4d1c07 -8fb03d4b9df622007bc138108b6a38e9bac71f91940676029da29d89504e72e9 -bbf75d3ae7619df58a5d66d82308a7aec862584131cd32c5da7f4ca28b37438f -2748f15f4ec9bf5574ae925564fc564f0cf27054b7b470d164898960f2db5abf -b7205e18ca1e3c2bd901d87170f08e23c2dcd3ee9f9ec3010778372b9dd2b527 -b9c46f9273edb5371ebd0cc9cb71f4fdd299958929c10cd4923ca80257afaf3b -caf42ad21f31c12de754242ad6b282a48a8ceadf3242c71d6192385b238e2fd7 -e09d104e718c87e434ddd69f348027b4cca04a464948a467daf1d3a2820ef525 -363d88272cfe019ba677fcf0ecf023dc2bc0fd5895bde423f0f411eb198744b9 -57b8fcabb61b38cd629195cf9942dad532e8a23b3b43a5efd1ffe446f39accff -a826ea559284f10ac2d281d5e2fd3a67ef192ce469004db4ea9dff498da7f24b -e49e348e0f948e807c7a8edb3618ec36ec1c6134bf88494f21d676d91c2b2f68 -c5b1b4d384f12e091f52240eca971aed1079c3746493bf768b9ccf646acb3f6f -0e5e00559933b5929a632ae4f9d86fcaa6b26d6adcd06438ee1594300931a574 -f884d287e8c5c00cddc714bdc2367b15de83bfddd0577e016c94e8c51cf654b8 -5df57513de99454227c729f4f48880813ad89a6149406c89cb34202a6639e782 -a66b76273f2e5cac09912235f5ea902c9b49634c685e215d99fab6782428e7d5 -d2c58b18c7f724fc92031de6869dfce8787b6330e4ebc9c01856b977eb6f33c5 -8dcab0e8e4f37eca49f2468f75b6a5fbc1345de51df17079cb804f41d232690d -3ea448f664ba0688446ff4c904229456d2be144f5a1a4fc540ea107c3407020c -043d26be9a82e267d723037d50a799b98bce4ea638c4282b7ba31dcb3b1da376 -2879e934d1ca3c1955cddad5edd1b46b706583065180bb6a1d9fe674d1ddbd1c -2a57dae85320543d698e929ad435447f58e772b1e01f56366903dc43702ce609 -652dc85226a255c97233f1f5e3ca922b9436e304d326c1eff0d83a3f0e6a865b -6b4c3f34600bfc6109540d73963b8d7b26f9f22b03521a2326e59e2f10e60a70 -57a7c1d46ca2bd284d8dbe0f415d0f961a6b02bf134cab8f480346551a028ccd -8d74cdf783d64ec2801a5c9018a3687bd644ac42d5f3bc77224a47b90dd359a9 -87a36b486397703f39846e521f2e1a54879a8b13d7cd70d4f8b416da6da2e500 -4cd600a052071b7332fe6e1128ae57cc26790380e0d608e67e55e0efc0ef0857 -de4b8ca529bbc4174315df77d5c5b7c4aed351cba404b04ac4f48145ffbd0e74 -904d039ce2f3825ae1fee72b75c39c5cd26247bf887a3f5378f57a49c13d8875 -bc14e757792bab302541f79ea24e3ad24a70bcabe2e77d2af46d462e503ce98d -3be36e39f1aacb33a2b29084ce99a53398193ae5ba2cd316f004eaf527f0c73f -65d249fa9930b31c192034e7f039e51c17e0a5ce9470adad12eb2b1dbef5a080 -a79108e6371f378c52bbd930eaa5f594669d31abcf58176ab582bcf0d74ab652 -f0c4d4594c70cfe64e2a0f3d8ccd8140799ae1405bcd9e9319943021f132ce4b -403238ed374d135bea06947b2e2f7b3af296b101ddd6f829e6fe77f781f0805f -bff51b4e32623858199cca601560c47c7a67ba86256be224eb3214c0b972e448 -2ed7b335eeeb9a73283da91089f03c5179957b3630a0146b4675aaf1aa316f68 -6941caa3f62f5462668fce06fbea53b2e078072da2e6fe832fc9fd17ac97d399 -fa4592ebe6bcff70d8f0bd2365af32a3713dbb06d7006993c789348ce1992ae1 -ab980ed336134e2b8e130e44b59433421e5ad9a0af0287b58f71ccc5d450aef2 -00d60a0c0a8b1355c15931c3a729ee6d966bf62f7b18171746a75213a17d2c5b -6dcdd3ea6074fdb9e7f33b965e693c53fb6b48d88f573b085475374d43b30746 -9cf4b1c1f59ee56148b5254972270169a10855bf63d6db39e784777541ce700a -d2ef411b8867a0c06ec1ee1fc060468072068b66cad2f37d07e1f19d3bbfc774 -a79e61e5456d0580b6b010ba1c711404fbf7a6e9be3e36270014f5653be9ee40 -999a43a0d9b9409ce25cd824fc57499480d8853aa8acf2109f4d041f4ce7015f -01b9735631df4c2953541fc16906217f26a1af5c23e7a2eef345e516a756bf34 -0c74aa73bd8c3dde03268a2447d1df9dba8ff05c48e14e70f62c785f8c0e0447 -95a61bca0187840a674ee36689856c45e6a2ca151396e0b58608aa90008127d2 -e054880c270db5c535f00dbe8c19a7a3303e1a5e4f2e16a00f90bb46b6d5c80a -22f443847db662d39d023dea545e115840c307160df0ea19df41cdb39f11c428 -a1501250daf41bab535c9fe97146137d4fbef4d5e19cf9716c6a12087c37647a -85954b8070762e3a89333300bf650f3be61c3e4fc636ebd7d0741e1046b5c9c1 -2f01956bfdde1fcba2fd926ab53f910fd7c53690000ef871dd333c6aa38d4c01 -91c6d2c8760a90ac611e770005db3c1cdda6e2be72ec6ca8a6419b28d73b4b56 -5883ca99ee4a01ffcb31c462fb1c72dc0bae3daecd46da50f8ec6402088fa7d8 -5b2b3f1ed7857040d575b55a58d32b0322a1741e67e6d2c6072ce178f26c8f46 -4b6ccdd0077738f002825ada3ff4c484c5a7c253bb1be1fd106b100d54fa994b -751e91e498359559ef7d1d455ce1fcce86ff14f4f9b2be44ce290485c070cc57 -bffc60c5e5833f5296c97e64ecd889c8246fdcd9e3febb09ae2642ae7e582e3e -6bfc92ab1ae8323b9d3e8b7527264a9222a03364ca2595c0007c95c5754ebf83 -1c61901ace30d6444b0a85b14b8c6af152353d51759d37862e2142fc90834828 -e37e6c0e8f05c2af030a18c95ce5cb17f72ff719a6c020020373535109b11daf -2164be5181c03742e1bed6f352d424fe32a63bb9234a4e5c5913820b45c6804d -160c034564e18d90d6ddcb9eb5abb7724c43b17a69b2953c9b8ff445f06137d3 -75aca1b2311cb72a7975828f0036fcf06c23cdf0d1f159be20ad98fa68815cda -26ca0a1968cf4bc9bb0c0283bab5e8555f3f8d2a537302f24b48db8615ece41d -91841aff383692268b6e6e8dd4db468b193980f06a11a674593ced444c5f092b -5328b5afc54ecbc36d720317b4d27bf5ccd383f35074592ab3493c8d76ccda62 -cf45fc7796b8fd2f7b6d1121dadd3450aae32c479ed8bf97168187e293882dd0 -bffd60d9b05c57c55eeb9247d07980b46b29363ecce91ec21819a75c3b1f276e -095e2fd1f5631c484bf398d7e00357b7bd94de95e4f887a92623972e08a98f7a -18b703c384e73ded9e2d58fb83c6b76ceafcf743a4d757a89d922b64c59842d3 -8004f2962ed7b8b436bfb922ecd0de64ee6c093cf26a518a9f97b4e248e88a6e -386467b33c0f3148f7531e0ae7348e68b26840be0bed4c51f4ec9a7bf73efcf9 -6819fcb2c558361e42be2167951318ccab1c6b3571d25f8850985094d9d04ac1 -20794f00c313260de3350ac0529b69deea7f69c4849834dc4c28339e2b9d89fb -de275dc5a9ad045a295ae98b8b7b5f113e79e778590a8a1925b597bf0407409e -66e623f3dbd35672fe01ba210386c3f06f2b7ee5976567cb2a26206b14226bd6 -0f72a4a65d4e319055313bc032f98f7425beb91affe1c18c9d55f209ae562af7 -4d28f92400c2ea1b5d126774c239312cd7e0710b8868bda36478149bedd6b643 -4c1065f9f8f548a8ab83f2dd12ea108280bc743fe79beb28a8c530e275129cfa -2a271beb48576c7348841af80e8e112bc91cc4c2e2dca1366d1220a50ff1fff6 -fff6d4a266c8d84f5b84baa172f79e1c4e45eaa49bef1b7b4416affa667eef98 -0c41adc94ce8806bbbb55b7461f9fa56de5895d32e0572dc9a5818d0984d1b18 -4863f946330aa9d3dac343600940b81656e6c59a879beb715a5db248f442c7b6 -b26339a9da63a9132a94b39a087061a5754698f5cbc4ee9857383c8ef07c79d4 -76e3c979f1f7d6551bcca4bb79ea4e4c7d5d61da58cba3ba8d47fd7b10e35806 -7e613d37f7b6279739020b93ed9bbca3b5e8846d7338ec21fbdf301448b54b18 -6802224d6bc1c75b4229406e599a07ae4eb6d51edb699b184982b5eb4d381bb9 -3980310ec8766d17ac9f8288b023a2ff9d5a00c5256d61cbd800ab18a09d628c -102f2c7a78469083b9fb968b5e7c8da17df297b6f2493d5bc2c227945fb175be -29e6271526fe93d3700e91c4fa914e0d4fb660abc797e1ad95c5d4cd6602d9a5 -ede71bb6a1fae497d3fca94caa99b433c33a907fa761ec712ced777b2cfbdc25 -22f279a8bc0df2287fdfc3076c90d91db7b286b3cbf0fd7dce69a509f1965583 -0cc450fc32f9835b45470def3643e723359b3570301087db893075a59c5e994f -a07d69ee5e80ae37a04def2c2e7b0da9dabddfe9baf1feda26a6ec0b9cfdd3e1 -f6184c9f5a5c919956ac39d4ad05118dd219446b056dd0dcae51730bbaacff4e -2636a82421d404415e259898ed307963bba2f87ef6343e0c98fe746948ca9bf8 -d7c45fba692bf57f0a9c5f7241d6a71fb55789caadd9bd024625f2bd480f9f43 -6ea95aa5a2134d9c6185aae6b51e92b4ff44e811cb95577307aa552eda00eea6 -6350ef6541697b2e097886431cec8c2613dbc28b2536301edf7c734ab26bbe8a -626a3586c13085feb31c4ef0d19049f34e79f34e811aa66691642f40d98c7a1a -7f657ffc72bbe5f6bffc9bf31349317a112e6aaf37fa2c7c222bbc76599a89b3 -1f8abcfeb56ae49d6d893de20e722e6aab7fc5dd9208e8a52792af13685dc02a -e7fef00187178f880b6b258d9cf24d4ea626ff8722b33beaad11d4c7fb95abdf -1167c5a5d56293055ad589cda956277d8ee36f556b947e3eba75e0ca4a1ae442 -894952825d6bd511d460ec118f1c8f4436e69d3a89c5128a4f64cc42d6f07683 -7c8f8f7ed6412eb69e0b039b7ac4c965c222ba763889fcc969eadc73b09dad26 -b5ea273032ae34d694c112ad921c2b8638c38a1c7903585b82b604eec4a48314 -0112433201659d58a096a9db311fa9d23eef66ebf81f8584b9fa29fdb89359c2 -3f52bb5e8aa7479989bd18d242c8390a7556f479730c9dc5a82e908d362fafb5 -027a478a4f099be9a6096d719d32c69610813cdea69d0a1f1e72b83179d0fc3a -0c5022a8ecc03a4feb624e7efaab43f0f3c8e5af942bd2802399655a3d3e9816 -dd8e612c3d6cf898deb0333d0d3ee5739e4624574a7cb54baa3177244a0c858a -8ea7e3f69f12b63e0a86f5a1cc3098afc16add4a6fa456b50e24afb406b7438f -6b4095b2acac170547138b28c988d0477b0e6d94d2e5335921d28aca26e9986c -07394777bd2115041214a71e2f22717d53d81c6e6e69f7687df2b4b49b14bd4e -7131f061afd41ce959f7de6370dc52e42bc39174f6e1a9c138153efb8b380d43 -f0c008f4116c32a5b6a849ef9b14488b29490bdef348237b773bc266e433fbbb -57d40788a4a1b31ff6fde785a86ae935dfd7a7cbea09f3ffeed2279a60f49d74 -0b623297d1c7ebdc96c79b35f04d1a4e32fc62177650678056e77377477b946d -70bae10ed4dc6bb9d92a72fd075214d6766eb750fc87d327031390818d489084 -135d993977a161f8a5b694000ed257e48ecdc1ee11bfee7d2f521f4a88227415 -0e91714cc5efd828292f4245ef9875853fa464a5ac6400816652da269d36dda3 -f9c129d6ee345b631a7987abffd588e043245fe23e2dfde3d7c1fb5ba9bdda34 -78e10c08c78c032bc73f74cb922398e1004c512e0b8cc7f9e157821e25a12141 -a6ac5c479e0bfb55603721c86e6783b6f29f1e803e8761485ff80de5ea4609b8 -1c1b1d00192649e3fbeb0d3788791916572f58ccb3cbe5bf3e71601b02ee4745 -df75bf99e20bee86031c23079cb784a4864eda6111f3f451ed992a78a91c7531 -b876f3b2fef63386a8e1dc0e303fb1af91d471fa80ec379cd065b27d2d79b691 -24a9c73a68c88ec5a55a9c78945a3e72212a67e9f6665474894c2e2494c21337 -56da27bdb53127a5196a056791ea6b8b52966912940d63c23cc0520b2d7ed4ef -e1506ecb9fc0c2dca76fdefb921a51bb1bd465e95eb6d5a2c4b1f2957f0eb101 -0d20a23d144ec67f162eb8fdb0df7156d81ba64e0373ac4529e9ea2b829984c6 -8fd19991af0e905c6c8ee2f4e311a27e940a98a09f1fb7e4bacca9379d5bf7dc -fe0b4888fc607c0bd706d7955de35c0eb30e0a99c67963b02cc1f2b2c9900d7b -26bbbd1dd14d3191912520bb951c8dbc9c50f22805f3c048c846e1ed999d7dc1 -8062f212610d05566cf8d41f560655ee4bdf39a204e19e978834de3830593f54 -21037e9441bf31c392f86376a6a80d4ad2e005c3b0c0f8d8ceade7f619179d9f -1d8719a77eeb762272c0dc78e79b49e99701bcd9fcfa0f38ad5c73c33ee46405 -d9da15f260de0a73a3abe1ea584eaf1f9b4853374d3fe952bd7f1d43709acf56 -0aa1c75311a5fd663420146c5693d08d44aae832d7a1623b25650cd82e802cd0 -629373c0c1efe99c386f93f5b24fcdbaa85afe494978a4270a56d0c32a8ba742 -7da86d47dc6df84f35e7ff46f4aec205349be5634a95d4e3f2546ae17c22df2f -fa813f12a0e147f4b5d4a185051b59a781d5f1d1b5e27e878c726258b5fe0b15 -9be65410c64f92e93a61cc529aa5b4e55eee7a56c13d8c80d8320fa23283c4ed -6d52c8c6a45f5ad8984183d9296bddaffc4c2cecf02a3072030cc7aefa909e0f -a4887648f6cd372d00f57561eb202cea9b0566a1c01d1f5ab52372f451dc9636 -ef98897bb26beebecf5cbbf0864fb4aff755c4eb8c478e23e51ce80528b3d275 -a607ccec4fdad256f948d083afab8498f4348abf7a25e2d5003b2098fe5e85ef -8cad0ce4183bec55417bf7ffd6e88b288fb47dfce7a47594244481b6fa38474c -cffa83e00069787e0d116f6d219d75e6cb08bcae727789955914828b42cec577 -2cc27835b1e15761c9edb36ba2c3ee086dc79daf6e655fbe8b8beccfb3646541 -71948ad27157fe2f80d177c9fcc6afaf3428f0fcc4991aa18dddc8ae57d84bbb -8d28c37bd01a65cff065a3d0279f16f7251fc8fe51837bbd9d9ed7ffe74d0afc -a6604e4d3e37b514e61158b50f7e72014fc3a16902e7dde50aa810205a601c46 -7f27ae75295c15f1972fefb7955f67f07c9cde459334af8698304bef05a07dc3 -0be531f90b7f03eacfde082f494050039b1e81a651fa114b3cea053b3ce7b3aa -bd14ff7640606046a7ca7899f4bd58fc4dee574f1c11cf328a364d9b99de471d -47bc52671e583c08ffe129d2fa6180ea0d68ce8b92169d9d1f1453cdfbbd4e66 -357225d6fc5a5a8aad8916d35c58c05b4c00af05e3f5e9069a6905ca7f820d65 -14dca7836407782411d2f9d7f9b62d770e0dcbc43d30d417dde6745ac00de412 -087742207b0e7f0d171f0ce4999bb1003ec9e7da29dfcb67d2b2b3590b462679 -24b90706f20a1d3a61603284d214f67673d3a37f24669478568e6adf71050f1a -b65547e285ca6ab1af1c46776fe5e36e20879b6a3d639e47e10d846a5b6f1dd2 -b783ac6f17b3d8e7aee6249a39db9cd455bdd573eef26bfd4c1f56392ed96de8 -cf400034ccfb391cb82148455675c37449fdc261801bb8529c7695d673bcf163 -7a8553f103ae032ab8bb27720928661d1e8002f8e11272123739fa88225d719a -838a91750115716cd9be0aa19d2c466eebe4bcff2da969521e558e74e8ecf065 -71c4918d4b8f216b7bdba9036edb693507441ae36b06d1cef89227e20449b027 -dc1dfc01351ddad66b748a5d14273830045dd98f5da8ea31519bde3cd64a9e58 -e6d2a99f5a493ee6ffff83763628685bfe5a379d7887076d1885ba2c4f63c35c -9b44d85a42c4ab3eed641b11a56a7c0d83515a6f62ef0b4b452a43c246327bd1 -f9bc168e7952e99aae7e9f519216a3c749a3120b373a9cd6a648cac0182540f1 -4fb635d71dbef87e1e9b7208c98bbfaceac8865135a6e0be3d584ff581170534 -49aba705dcce7936d6f7b7ed5768ab763f81019bc6c901a15cff778dfdd7290e -99b7c996f6b884dc5a1752a58aa22fef6dabc3cdf38e04777cc51dd791b55636 -aa63d04ba24a2009b744888777e8047ad6f4ef85fc21293fddc6853ba64901c1 -58604c09b73911c848baec48dd0df33b106bd30a9874893fd77663b5a63d1fee -0fa45a4d4c0e916541612d6ad5fa60602581d204e70746a6292961f7939a5b4a -9d85547186a4edcc9f06e5f7c356d972d6d156be94cf5e1bb11e0dcaea4f7e0b -2be8a70eb8c3b0cb472dfc5f9d1422aa1ca681b7623fe410a9f7027a9ca95d69 -7d0060e4c98cb562b358daca31f837c090e239742f6dd7fa04afeefd6ac3257e -d62329aa2dcada088cd7f7f81f7dd6af8d2d6e507154674e9e0ac0b42c63eeb1 -d770bbf2ee6a120cdbe2c40ded56a58054f4e335d9274f64126a00ed936fe6d5 -df9f49679c5b54cf4c556228be9ce33e08e0b27e6a33effff34efd10132a98f4 -57c778b188a39a178e1658e1fc83155d9a41e84a6508028335156900df926b16 -2107bc0caa700c8c1d42a31f3b3bc34eec1785bf6043de2615ca436dc26bd39d -d24ab60da59846b69b88344fb976625f96d0c10c6c0c924b8c9fd4aaf01b32b2 -6fd2ce6b7c4040b52535a22d19ef2cc0ae21ddadce8c80b50fb1fac3ef58115b -1b892e00e8ad5ebdab8793540bd4d1dac3133b0f092e789110cc1b4b99d9ab4f -77023fe69dbb31dae4bdbafde42f92d45a26370becdcd5701522928b6a73f5fe -bd1ffce5f2d254231ed58ae6933ff2cd0e8dda25f020aafc0a30ff5ee4ccbbd6 -8bcc3cde6c695b341cc2e8d7ee6157e09f96478b7a8b7bd1b7c4f2c7d8582b8e -56d8516d7f1372b28a190e2ee63dd3a33f120accc85ef50f1ac5651e06bae72d -b43f068822e680db306d3251dc1f28b60b45a6286f5309b2ce02f71726139656 -35a3067d18d6d67c239fad56d295fba03452d15e1204fae5384c16fa56043501 -8a24f9faef54ba1d0adac676ea4042f4e33bac85205029ddf1957fdf95361d54 -ee967c6d8d73bcc91e49c269d94f96eaa8eea5dceb2a1457c0bd1987682fc5ca -6fbd3d73e7709a327738526647e6f3bca1af4bfdea8d845472c0431f5f983d00 -707812f887f3178de6586577221e410bfc66e65f8ddc00c73c6cca0799900001 -eba7f466218e028f629e28075aa12a44cec9c473b547ddce58e72f6aef2f139b -f856e86a2540108a701347a8dde122cc0b178777c72ebb36a8818a1e8f86f6cb -fc131477ec248605c2ab6599845a55b3442edbc83394d88f2e7081155ce9898a -9d82c9dbe26be42c3b9bcc81bacc2460480c12c119c783c13dd9742ff4c44056 -342e81c6a116caebf2c79968d7f1d73e77f698307cda275b517691ef9d08ebc2 -2e5af0bc02262649523fa59e359ea8fa55e1054b33f53f5cd69d00c12021810f -6d2c47bcbb8bd25801d9f03ab7bb4a97c3c0b1818537e293ff226605eacf4fa4 -385a4d48c1ef4d1e09c7bc2f26ab6dd9769ed5efc86871c0a804f160e2acbd36 -aa9492df75947757b4c54eb3514d252753311d5ea010e87b872703839b8777d3 -6f27338a30abe4dd888d4df232014612ba94900e9795715a2eb989e1216a9af5 -b8be7debc4d4eb0282d58b1cab520621b54fccf6090cecb3c591e6e8bbfce0e6 -004947e806c5afa74ea4b64de0bfe63bb7488c2c3e4e5d4d5d6c8403d16de46a -02c6b48c54ee437c0c1da25863179215f33b1f23ee89e5d13b423174491e1aa4 -262161bef2f4193f852de5c645d00fe155de3c2ec86e7d3bbf2052eb0939d7ab -29bc16c7ffc48394f743fcc7f9625718b0e276e7eb995c9e04d9ae110f37d419 -7831f9e2a958e760f542cde5c8f3309881fc37b30ce7f18de49c83a28b2235f1 -df1bb89e84a1c981d67b3b174d38120c790e8429150a9f9f536d0a12b9bf2637 -9677a00f7ec11f94da6e891bcda249b7cdfa9fbaeaef2122ada7d54bc695991c -82c6cebacafe85c4099958f2f9a7bf6389d954c68037a3f84f9da23f22b0404f -11b26c7d7881bae8dfd0378c0a6144f6a9480f68eca67c9e9c1347a5baef105f -ae9e7012bea2ea6fdcd7baa078503fd03afd96d22dcb7f0a88c1655f8288ac7d -8242101f9bd09461d4a8071eff46bd5c2853e3e4b1109ebc295703fc45bce8d3 -895c8f042dca11dcf99b12efbd80b5d0ffef494702ff8d5555e1feaacac91626 -aef0b594cbd2922ff54dd151d293bbdd002b222dbf1bf04b5ef27c50aaa79743 -44ae0df08b631c511224cbcce9a8e939aa9ee0df7082e722363fea7927bfaec9 -5086371005a058bdd283b4045c0edfef1f6ec13e404a38afcd0b777964005531 -491b55873b1992665a2c6cc19763282797c7da6efb79b1ee9fd6300a8c1838cc -6d6fa8fa6a2d20c046ffb2cbd5d046885f1e9d199b630a672f4a5a6b0ed0eadd -31da124d841a44a0b84ca12cc05a2651588cda0b92534d75c9bc12d3b79ce3ad -995873a15b6533d7dbd913f7594e5e07a70b0b3e048cad24d37594982468af77 -889bb6a7d582e0a3845a6c0062e5012cb3506e70987cf359398a9d3a08ff8c22 -bb53f10dc3630537b9b746f2eb1d81e6f5c99e59081daec894fec9a2dcfcf06b -cebdc4941806c8ecc36c379533379ca8f218bfb62c30db64ceeeb82bdf14fe88 -00bbd67a57b7ed2e6f46a0bb0b31c221c0867943778db6922ee9cb4bccb1a931 -750a27adc83d719ce863303f4c8d7f74a4ea83c95fa092ed4c2faf26a56f858c -ddd24fb80dcb3012150fc7395a32df3422b64e2e0e6463e3bc97001cff04008f -892ac99de9efffb8790ee35510fcc34f87980d445eb4ac1cddd42dc01f93effa -1373183a485d08103392c00712d0b96627fc2ff23ac52fc5979ce27be2e4262b -4f47d16b0911139f7a9dc066c15101452871fcf9fea332b80adc078702f6dc75 -a4fada66644d57fd902ba5f9058afc10a79e87a2b3b494355dc178a57f9cf55b -bb1a4386e25f7ce880cc74ead709b09d5c59a5a5dc0264ffb9c75bdcf5aa76a9 -5ea528b6479a8d92140661d2907dc101fd1a8bbca74d49d9df6c65cc68cfb9b0 -ec379d256b8492c14ba9156bc64a31826f3f4c680f4d9dcf1b14b590fd272abe -2ccbd7c89259ec7955ee27d1ee2d2476c318ea558369bf70f0fc891c046bce6d -3a9a0495bff6e5011e19da484a234cd4fdf65ae8a1edeb676b18ffcbefe4acb9 -f16ecbdb776dda76a7e96f5594875e9fec5d666459e370e45cb71ca55f7adb09 -621e415b6cb6e207cecde6c8125e9f209cede18e40aa241da392ae315d40db51 -9c4b6a8295f1b5fc177c31ab1a9ef73e6c606425a452d972d1e2694d8c03447b -e1eb440bfdcb90eb0b6fa377bd0e536d676dd6c10697f9dbfb7ca9dc57abafdd -6e8cc4b84cab9df3ab3e1a1a0412b7f2e8a41cf7637961a2c33edbcfead9d894 -d702de002954b3ceed1ff3fd628118d74a42cf0bc887413866ac2403b642aaf4 -d013ad5e7bacc7869e35b354fd241a44ae997408f874302da1a2e83804db6d2b -fd5dbb0cc1793fde82bf2549c8c71b4977957e1d42aa03b9f4f61f487d8ee790 -4093baadf53c44636768afa3f6bc120d6b17eabdcf7b9eca7891cea65a725329 -31e4606b9275007ebbee6bccf4c94d75392ead4a24d574385d72410db6cd2bef -3ca765427ef0eb921c41f114f66cbd853ec92b184494b044efcb60dfaffa41d9 -2925b92af2d3243960f13cac1cdc478d984b3e9c8d758c6e1262d7a8f48d6373 -76c0a470e5da3a0fd36c84035351a096a3f554af09d3853c7120be340b6ecb19 -f4c5d0af3f0f0ad299d889a47df833fc9b3c86ea3a4145c18578a726fb3d7b42 -8c4edb54071e56342fb8ee5af6337541964708bb757a339092866ebd42a07262 -c1311a7f803f80b441e4395f44c578810e8ae6dee64a9db68a2a9cdaf6885d21 -9b128a6e1d11db8c6d2287ee2cdf805a41ebe191786b70a22e93ad743381517b -d79b8abf6c1d4262ac8b06f5b1e7d5be0075e5f5ef549319cb27ff2249abe912 -9582540c38fce4b277c47ce50be1cc3b53640c25ea14355033643f3766d60c66 -70ed9ccbc66071fbf415b88502031577444c7aa7d53e82a0361dafb776112062 -f4513f9d2e051a3dee4e4da71034c72b99d62a81a97d46aadd9be63b41ac6098 -006cee82da34170cdc93bd8de6fb40598b0bf3915afd84cd1f5a7563ec9f9e0b -d94debb273dcbbfb93d9424a553508254538038983c7d4082da35c6205913494 -560bb5b6a9b48a52b1b8d7e787371bf323a4050aabff367cc01a5cec2c1e2c4a -13ebf847a6a4956190f9f2235683d0e14a45d859a1a34328601a1a83ad09b82e -900ec60f825fb759438b76088b34a45d4760ece68878a1589e743747ae4cadbd -c6ffa24b855fd7d6fb7c1c71e1785c3cffbab4bc160985d97cf1df399525b04f -cb57c94eba2d5c02591a7dd4fb1785e725c82b37010bfac359f2f1e033889670 -c9501a6e552a457437a618e8b39ff96124898010d7048e7ed0936026fb6190bb -fbc2cca7b34ea50cf03fc905b471ec7027fb445e0f457436a9ebe2a5b5bc197d -dec9cdc6785865de9f5cb82e625f6601af7440d5f539443791d661bc2cc3e5bd -7077c693d8b4af463781a7b7df92ecb3ae8ac9d1cf016244327d1c75e4d60123 -281f4014eaf8a3d01044382e57e0e3d2b03a1dba8c7da747b456470343564c51 -242f8d05ed142a2050ffb131e55ab9f85eab3460a6647176804334a69cfa48d7 -3c6a04c31a65fb69f92158f5a1d94d848130bf206cb2b2a4f98059d724b38c7b -101633e4083da4249bc01bdfce62c02034afb5b6c8a4bde9077a66efa61aa173 -061adfaf4856942ce6174a9753208426ded01a8c5cf1f39eb507c7d3664ffae0 -8bccaefc07ad1a757fea5ef60b27c2c6cb1967dc6bf5e525b4072629b3774fba -1371512961e741fe4f4eb0b5481a2685d60d280ff9743e5135029692f6d939cf -142ef084bce05900e3573b85abd7d51e79e516481f675f0769a1eb325d824159 -f85c4454ed5f92e088dbc2fe712152bf4c11c58b935d9d1f9d013e28c466e23e -732409643c0f16d2989d82f2e9fa128e3c47cf5767510ae0076da2de9257d529 -d10c32a5d1137338367c32454990e4b98f6f1a09d82340327d6910eab6b75e85 -e0e75863a67a6621376fa95bf7518d2df07c03f85226ec80c9d2e751c5af9dcf -a60d78ae421fef8b570ce9dae3cf10a65e1ad171c6d4de063c81a45c99edb2fc -651115ddd2f7493147ce19f013a632eab30c5dd40ecb31e886663b2470f0ee5c -98f38fee065b764b0d626f9051e958efa95cccd2ea77707c2fa2f50df7c8db75 -0791e8bb1bf90039eae6e473095074f0d01a5394c7d09fa3c71fe9b6fcaf5d99 -b5e88130b170d91a980ee8ea1a2952caeea152b318d38967a1bee8735ac94cd9 -fe426a357dbc11cdc8268c08a2bb66ec1ad3e100b32ef81220cafe955662d56e -7e219d62b739c9bf4e626ddc9e8c497b8a6d24d9052ad7d9176d69d7138edc24 -ebde966b607e1781e6009096cee041690482c3cbf99c775a1eb06fd31c52914b -682bae293ba9e865e42186455b07c1f9000480cf4f83e9a0639c4327bd557446 -8502bc65a8e9b11996a912da4eb42378c57b6a89a0c940422a9e61e62e5932e1 -86e09de1f4dd2ff1d164cef1ec22720421bb4d8d1a6554ecf163cd5eef84cab1 -47386fd5d68abffed7116ad1426a515e30ce38ef022950f34f1fec130c613f0a -2bffaf82efe6cb217c85174f22429ee1204449802bf7e190cb93bdb52509191b -c0cadc2046d982a30b1c6a4b91b3a8475bf69101c04382616c03f3b5b55984e0 -ae275db2521787e11e949db848d43e51659e4b5398d748a3c1f964d12aa123c1 -282765de8e517b5357cfec15d0cd1c2ea830ef09c5a186f5cb6017c008c6344c -0a331187bb44a28b342bd2fdfd2ff58147f0e4e43444b5efd89c71f3176caea6 -07ba955a174bb7c67a8f42504fa287db7c0ba1ca9783ba039ae174bc80017564 -5faaf62a57cf11dfc0a77ea6dd70f4eaef23498cced5338737db5d118720333d -d9a514de486ddc2e049224b8a121aa8d54009c6468b45ccebb94846aec6c6b40 -0b8afd413460360a6fb5c4c42241d3bc1811c36461b2cc17d23984773e638e70 -43961438ddd1335268fe9cff04aa1615d06ab9239f931006d4ff8d4a9f17bc12 -4df509521a5f585245ac7b63f60be24ff91617c89bf6986111d447b563b34ff2 -4c46dcf5b152eaff56b3056aa6df53470330ce4f051bcbba72f1be0452d537b6 -0b93c2ed78f1dbf73f81785e7f038fca002485ed514adabfcb7ee77464125fe5 -c723f7b90b8a460e3f1bcca57c3a47361223581aefdde3b1184e43a81a2d479e -2dc24214f7bd00bf8949ca36dac389fdc6f44ac4e2ab2cb6a2b6974efaebde80 -78469571cdd841e00fc1753378ed8af831e3f2f5f548a32d6438e6ad959a110e -5eddfcaca70c38540eae624a5da94d25947a56cca5c479496d2736bb4a3b7b85 -491bba27933daac8ce7de5dc7af6146781b5c3f3f0366b4069da0f908ee14fee -850d9841ec040916948e2fd554f5d2fa310efd0cea960679224797b640a2a31f -b736562196ac80da2ac359dc7bc862ad5a702a51ba0c1e20c462ce7d7fd583d2 -952254b6117063f7d1621155751d0a28e459b73d8151ff3718f74cb4fb4ebfb0 -6bfa6772064ae23a3f1f34e6bdff625582e5f8fe3562f00bd830e61358fb4034 -d01a918d6de91bb81972a85d28e944bd7b3c1bd37180e144744063dbe1f7b5dd -6c964e0afc359e9c0e71fc0805e9ab587b6b3db8773aebf1b42be95a5f9c277d -37db30b8a78dd4309a27d25a319635721f55a7ec178d8df7d3d6f26a5f8f534f -2e67de5e2d57d20ad1f02bdad085a390e3e28c2aa4e944bfe2233d0ef4ad7ee0 -e5c5c5120822c99307966363f6f025c229130f5fcbc0a06f58b5f15b7d78fdac -e98e3e9f81cbc3d9e748e65ddeb3d001721efe02893412c151430943179d5620 -f29d78e11b4969f83bc4c3d1a9242187a38afd67181fcabcf366bae5d464c6e6 -56689baa126382cdb7dcbc09d28addaf0622199a2c500ab60bd8661956386714 -e45596793a3cbfe2854718298b2873d713838e313ea6f4cc779119cee6b0d6df -4243eafaa10312ab96393bbb430b524cfebbc09c25fe0b6e0012d532d7191aff -17596be44371c32b667845aec2f6262d3e5cc977367b5666d5a85fca302664eb -c8a181085631b7452a36ccdf88980cd581d83ecf1575e5307544ac8f4032836c -550445fbf17934c34228fb1aa8c60eed5d6cf5abb16bd9b0358e55ad0cd0c9f2 -d147362789d7f704b438161d0cf1228df40c67600fc19b048070d735d0c3262b -be6bbf79c48261a3c54c47d19003601598f219a985ab2ff54020efb18d53323a -7a4c4d3611c1b2d8cc0fcf5b889c64fd95d2d63d65e3ee8786ccd7988cd8d5a7 -191251156bd59ea60fad7a20d75d644f3810e811a62dfa445c322821889afbb2 -d57b58e523930fdb7965eba7a823757ad3813e51a688a6b5d4105bfe40c870c7 -32eeb71bdd0ce1153f5ffd722c1cff8c8beac46add2faad4d4dded184dffbe0b -0f285500b80c0a1a6d571ab85a2950991028e6f2072c18f5b0f26e549c22fd15 -67754bf321c2a85666f14e9ea2a0de1f6d0ceb8e3ad8428a8e7f4f2073b94a95 -fdf23eba0ffb92fc721494546dc4a4cdec77869bc89efe2f7cb9f213cb909b95 -24847f0be2a100bb01e22c91c94998d9ef2f4bd4aefb10f16b20b811b3581579 -1d9e3caa9bcda611782372d0186a69bc20759f65a10e6566cb79a375bd5343de -8cc819f70fed9bf7c5d7e7805cb58e6bf61a9f25581aac3d3495b332ef5892a8 -8ef1cd1ceba5e1edf910a13e077715477d9629d54975d7d19ee3cbd0809cecd5 -30490dbb2234b1e3ff5f0ff22a25ca5ca277fe574f8cde80d456511080a1623a -b2c1d40662356cfc4ce5c6d3d5db286d631b4d6b7e140c25990b364b89ef331b -534c82fadcc43b12e6d3378ae798047cf909000b3017a24b769903f5b7daa807 -91733a34f18065dcd59641011b45890114a9c2387d52e1bb7f89e3a7fc5b258e -e95ba3c7d65ba8f7f49f766161b390a4044e1c73b3e5aa3091b4b41829e8b9c0 -537c5fb3a61cf78d62951194a1c039402c146eb34eeee1a08771bf178fc8bff5 -885b538b492494e20bdb1cf146226229d29aae3c94942faaa8fe7fe84295fd30 -96c4dafb543012b8d4a1cbd9d5cce2ca609ccb914fe8c3182f932e066c977595 -2cc9123974ff8558289f0d5e4b50fc8e1ebc3e5f33e836fcc074834bf84b45f3 -0fdfdce7a90db27147ee168103b36985f61ad43065fe6664951c5861d361c5aa -6df284f006191e823c1a496076a7b45e8562f840d53e152b4c4d335acbb9b42b -a2d6ea0af7a5523da36883e03ee1d77a5d4b49eef097643f51c5cb4d3e066f41 -6bd4278c6a22a03127387fbe11a27dc7e926d506e72bddd67c9128db5ae79d23 -f78506452b9582c177fefd3e3b3d08d247f6bb163f01e5827fba55e11e1dc153 -817e1591e4aa336dfd0bb42419920cf29832e62b9ec4b07daf023fe55ca4cc6f -02f15ca84bd65b8bb6fa65b417bda821894a01059dcece02a30cd708f1b9066c -e11f7b74d4a92600fc30643d0b23e0a40009fe1c92197d95824207c75c81e15c -9435e09487f12fa449e9e898d890af6eb2037fab659ac1b91aa157d8d3316212 -89b5005a00d77d1608540f2d27f6b140e0ef33a01ae9c1d1b6aea027bd00b16d -a02e2e9dd842efd5a5c16d4d8461dbd31455237ed09d0675d69dbafe0ca46c0b -d5c92eb2a4ea105a1f4331eb49899c00d37bbd498a0097db32ef077c9356a4ca -15bb8444baf346a30a87af9f53b26a3ca4be96a70a168b387ec7ba3f839c1c78 -880e5231be0dfa9722db86a78f55c93fb220f9f7244301b03b3d2a2659e425a5 -8519bad4672807650d689487a8f1ed93ea0d75875b5e5bd3b1e02e5b436fa358 -350cb1f7231b1ff85666c2fbd77dd406ac72691de726950ee7ccceef1579761f -e526ab77add39fa2bfb4e6d47f69adfa4a24afd9eb068629324b526ac89e87a1 -62794f160c85497efb4fc594bb01d711dd4872d14382afb9edb362bd4d7b163a -73ce2b15f1c5ff2a0ff77ba7ea7cdbb8540858f51302e466e99dbca2289d55b8 -1569eb5661775381952b58d67b6aa7e4ce17c322849638b12fdf1b66af8a9d5a -5c07819d89f3132f6216cf62009d95cfda05bc4345330647adee20b3abf343b2 -7d3fb1a2704a337bbc7b96611a5d59c3a1df4f0c0c23f9432c5f50bbc3abe82b -ddf2ed9160bca4243c312c8326977dcfd999608576e0231fd3daaafd9183f2a3 -bb141dcdd14d89f9a00cde6002444d5cdb467d63e3b78fbf0bbfeb5dfe2a10c3 -5a619554c8c43fa7522766829bd6f0d22dd82b87a767f2de84283ef25384051a -20a892c9e456b4a15e8fcd621cebe3fe0cee5985b9f17d75c92de6d69bb1107c -1f8fcdaf407627592cc49c95cd70762f2343bc123f6e82572a63c7f0bc7bc0bf -944982f057f7a2c88b54ebf5956f587388d1350ae295b4df480ac39cc2aef7e3 -bc26dbc2db2983ff0f029be6e3e1015ef4c56081bcf4d4162cd1c17c7a2521ca -772b3d57c5cca6c978150ab6309aae771bc322646272ae0a2d302c69a72c0fc8 -01ce47fddb3920c763b17ab0a5aa17ba4ead8d651a4b97461dfbc5afa0958c3a -a951b9a6204acb6a254c328942688b006c73daf7af93d7dfe1d4c784f8a9a51e -38d5382e11cf3ad6476b7451cd501ebee0539453d2808f0cb76f5637da63074f -78dcba76bcdd404f4597c6be549455acb4b12597f0675427f4da3a48ac5d7af2 -d03a4c0196ed88ac144d2284b21c5478cbaf5c1a96319f18bf3ae76e0f5893b0 -840a97091ab8d4f782c0daf9f3c7f67eaf7eae595a42d5fe0f7778a4cb3797b6 -50bd273b5b763b0ca1596bd715dde964d8b86f60cb579c9e0a2fe1a9c0ffde5d -ed178aebd26b682900e990bf47e155bba9d9da9c7b8102748a5251b85113cf8a -8936c41426939fe5f07e1b5ea80ed2512cbee0c0c0818c443a5f46e6bd59aac3 -f92e67b6c3f112fd0dfecb85e9833121e57240c04f864c40a0c5e86eeccb1c56 -0e5075865c62573797890b953d7edb62a6fce9e9ab7d7c7a4e44b9696932c403 -9eaa5046c4614fb6a93a8ade544f20fe63e627642a85b3c4ecb938bf31cfe87b -d1953a8a32722b02ffa34a2be7f6a3cbf6f8993c30f25b04d27cc69710910084 -ab539e7a9f45cc673ec8639ae1a8394f002cd126ac7a51151a7a5ce6e8ac36a5 -b629fc203878de20b184a6036045ec7872cda4859638c7410e0f758769fa1d61 -f52495dca85fdba1baf2e9ac651f13c6e2fa67752106b41a50f2498340c4cca9 -68c7dbf8ce6a1dc995d91a9849bf61541d9eea392eb426f758368145e8b84c3c -3a495fdb1d66229ee0d2f7eacf9b889d116f6fe6bba4ffdaeee52fe8b845dffc -a2223061eb10d65d7a76621f0427ff6c08b238a25b86b5ad93431d2022906615 -e13443cc3f649aeaa8bb7d9ea8d6b224a37d3d2d5df9012e92797be146abb7af -0c1899b4e5cd4ab52aa5c88aa06cfc9e2cd252e7708e41f47f1f1953d6a4d977 -72c36e036e34dbfbbaaef1ec1a6ee029fe2384b491a030474a14a0241872d7b3 -47839b8e6883550bdba2c65499c04054a34cef6a15cce006d8e93fdaa536c04e -a470669fcc2078491ff53da37c5a214dfb0fd1c3593d93cb5e526ceeffb17313 -b2eab2718e9f050a51577230167acdad0895ac53ce5b0337af87de4d42eeb03d -9bcfbc5196c5a252b6d87d75ba3c6d13cf509dba984ab34b262a7b40cf24cad9 -83ed294f10065db0a646ff4029e965c1b6314a5a627406e4d17e006e9766406a -0689a8537bdd0ca6df7090613233c77f75312a98d93290dc219c943351889458 -36027cffc79edbdbe3c0b37facf387135837183d28b0cc969b05de1150167967 -a226bad0d8fe850ff084d95b224972158a9050b28569f17657aeb3518af7e2dc -43c72013958451b1beb761cce6e155f88f1e7455b30183f037fae6ac3e5ef00c -65e2138c619783e9887eb8693da7c354792785fa7cb7f80a30c7a427eb01ab2e -43030528e8a7e94f14e241024b70def32ab9c8e4b2e6e21d67c8794de81ef09e -5400a84b9c5b7fefbba9d651c9447e4517024a6d724befea78c37d775bfaef2b -a39678926e85713d5ab0202fe8056d5db3265fccfa27247315bbacb3c74c3d89 -0490bdc0933495c993bc551d6b34b7dbcb89a807f39d12d9118de54c3b2443fa -137198dc7ae259859b651cd2f0951627bf701eccff266621fbb50069efca09c9 -7392268b291489de1b32569f4180960fae7099549e605b087f5cd64e026f2ee0 -861429d2121729bca3b7fc35df621f1a95d612abb575bbbbf57f29c661d8ec0f -de339fd5b37d5dad46fd9270a7e7a9e99d0c75bb1b0525dd9d266d2fc6c19cd7 -c4e992af01a6531d713170bb54545ffe5255bafbb4f665fca959610617385f5a -419a96c8085276e9e341cf598cea6ac6e524d11bf8c63693c5e20b20a43a80f8 -67a54aa6bdbe711d12100192fcb22dbfd0df60852736485537dc2dbc4d53f43d -90ec5bf5ce1f90648627aa93704532842e982a1edd93e6764b7a4ad040ff307e -2d6f6c13df79a300f8e57a927f05014e6fbe23246abe5fa353ff1f7909319c7d -ae55da97bbca0b686d416e57782dd68b15f70eae6c163e6775bd0dbb96d51b04 -ec6489de65a3c84561d9d3b2fbdd1ffc3d47bd6f8c2e38fc944f9455ae7c704e -04790459b7eac375ccdbe5d108d74024754704b0f62561c657c49ecafe3d794d -b3e4cc9d44102228e0a83eca3ed391e53e0a6b0768c128752ccba19bb43152b8 -f263e84d61556213c34f07caa5535ce74a8228ced78f63629378dcbd6b29d2c4 -5703f125fa6433551d31d1d01bba8ea5694b3ef9a9633f793b7f258cf54ee307 -104536329a17c0fc991d49ca92f70a3a783594759e644fc53d68b3e963439ddf -1474e0663b25437d21cb3247dff190f927311052db377c9001b8104e7d16cbde -331c77387f77ef84eefe9cfb1364986812950262a63753bc38b56788914447dc -bc288f2dd6357e905d87f08b531d949d982221dc77d316d38649f70487b14484 -c90f9ff9fb7a2b7e07b4813bb4b57a1b22fb757d2de3f2545f73a52eb8e40f25 -0b7f4326eb4c46a3455e6fd8dc6c103bcb71865e126bc86dfea3b43b6389a8ec -6557fc38109fa831ac80bec5b951ca7a13db709979884be923c6e88df20f4cba -e51d71d2873dabf714e6d8d86b13b57ec7fb9bcd52b2ecb586b0732b6f51127b -41939b9ce4b709b1c81c8c304e4238f140d06640848923dabf07d3e3028b39e4 -cef7d3a0e0eab7cd1793003c1d5863bc165af3ec845a12c9c5e45774cca203c4 -5f8e8158904ced82c56671ad4fe9a4a3e136665590eba62b8f490c0b5e25f91f -7257f999dc5911efe68be8340bb7bbbcb7517594c48c824770897b57931465c5 -be65e899c13d0f49ef5d4e6d5de7213078a5dcfb28b096bca4844047bf8f2b56 -32271a0e0ba74a715cef2511e927e9945ef1a2757d0655130e5114949c94b205 -ac2507c9cc2b5f3201f09b1f757fce7fea029311b620ba116adb7f7527b2dbb3 -aa15522e19d3c34257d7de66906ddd2bfa38cff43b3039daae747c52812ee0fd -ae53564d2030434647f404379c2a8a37b4726618a76994f779ed7eac5983dc27 -94cd49c87637f19d7222a856f1eee2d30825079582ece28d52ab06814516abd4 -dcaed1fa71f8c633eea1b44cdc74a05ed3896aed3e3ac67a9853fc48c67f20bd -e0acd2919b908bd86c61486c08406a5d40400a43333d23db60b0595007c4753f -f02486d56b084ff316697f4e148b32e640e60b47eb747b3adc29d8ce0939ef61 -499fd482997639f924eab76744d1b1c6c3901e6ff944057081b70c7eafda21ad -1b3ed3f93d0291d0222c1bf9d7026882f9a122443dd9afa876c99a34d3aee79d -e58eadcd82d81dbc545fade9104d6925a89f599a4366f9403b773115d88cca07 -b5704a3d26b8ce38e4af17ca90881fe2b8f6cd59bab9e70d9a9610d388f6cf44 -bd2671f710ae5a43c6ddf9bfb504c685cf5181358079180a2fc682db3e9675df -08bfae28c6be7c32ae8bbea86186e47402cbc3ce70e69e753613782c656b74ac -53dfc35d305bb6de8636daf26cf167f1fa83649d4ff7da82ad68b3e137284818 -7d73dbd506c024176c76d51bec6e89ae2d504f628412b53952df4298fb115081 -c2c168690e01aba6b48175236ae192a20c9a6b11889cee6df4455d5e30b98597 -79419d69422a01009157e3fb2449a8c10422e14a0fa1ceaf7bb6f9930354e2e6 -1744dae99992254e3478c80221703953b4e7a327b18a7e196c22cb7e873e245a -0a44ec3c4847fe94c14129b74f978753a2757565bb3bd583f10bacd5b2f2a96a -3d8f549a9c6cd08439748884d6b32e17022143e02983f10a6ec3e29e82eb93d2 -b7d936d5e8c75f7afdcc2b75c43765b6e227a88d2713a6503abc7abc8b8db678 -829fae39d50851cd3ac28b2172bdf571784ecc2bdbd5b4018f75e54aabd29538 -e48dc617781f06f79f66ed8493f45a983cc542377cea520341f64e326cb9dfe3 -5ac51f43e0846d045c47bba520c8956f4b1bcde0f5c748d0d098cdde5d5fc55d -165ffcf218b4d250aadb2fd12e73fa6f1e87c1c0f5ddc5398722001171439ab4 -91bba3a17be20c5687347a4614318c60880e9604b95cc37566dd1e05523e60e6 -fc94b65160000d3af4a0ce1e73af86ee39d5e1c2d6f543d1c8a7b5b754332d16 -2fec51ea954112b77af5e584ddf478bfc1520fd2205b85f68bfcd4b6c909a791 -3dd09627ff359ffd7d81cdee83cc2f91746b3b9eb2ee6f08ebf795b788dd5551 -661717ec666317605d3ccc4656e8dfc6d98556db2853c393ef0deb9a0b4f6fe1 -ca779b21a33c8500c6a6909bca3e6a073cfa80e561fa788e58e90d53eba40308 -aa7c5a84bd25fea1c58eb671e89eceaf8066fae2dd26f6e20af0ba8da3cceb40 -ae9c764976e53bd3d193e90d2188930feb85f75104aff65e0b699f7ea40363be -eed646436901ac04c641fec1deac91ad066a598c5439aca005b8b56f70dd6a2f -59b5ee4979c3df0674a7bb6c9db554f4e3e2a95e9566051d971bd51f196c7c11 -3b759ccdc52c2b27ea0d545b0a25cdc88223914cac6f879d9432072d385508aa -8b4f92382384d833c560b0934d031fd3a55d1cb867a6212c4b3d31586360b2a5 -da6f5c278fadb87b03532ecc242b39899b1fb1b5625f457a7b43f972c614d124 -78699d0d5143ebd1d652501c5ccc2e92c1d839e827311c9c8843e33eabf5f499 -669dd76665f83308de7a353197244811848a6fcd3cc1f07dd44103617491af66 -2e9a28d72f9cb208297d12289ca3596063329e9e1090394db4240f189862c330 -f39163564331cec9c05688788e25096cd95ab495038c6bb203244a2175dbe08a -b9d8869bea54606df91b216179ee99888556691e0874effa3858fb408c7d1b9a -3e30527e6999ac26cdc19d03e89804653f1b9223c96a5298885b17e396f9725f -99bb2172aec03bcb3d54fdad6841214d1309bd720856a96955df4b3efe86012d -109a869622bc7450a4b36715220a977bd2acd46255c7945987d8d68f70dcda1b -e6d6d088eb9a5ff76f5a0a6f3e6193608c3e59a69ab9b734e3554428cddd0eae -b9f57457c5a962ca8f67122cebe1cbbf5cee79cc7edd3794182473a1d66429cc -4745a9c3ae1c1b4a2ed9ae0c2e9d476d65565e6a44454f58a33c82485c99b18b -284f8efc379a6ab3d58afea7f693aa845032b06248bbc4db4cb375deb921d9b1 -89d16d94844468705d365d8b252aa7c02267eb321a24f57ee2ab1f9c0b693d9b -361c665730ebbf33b1375272bc59ba3411c2c937165aad01fea246c43fdafbb7 -b68f347cb270120c52e9ff251581209da81425735e1ac520b884096e93bff3b0 -ab7efa786f7ef4617edd4cf7d5dc029bfe6b3f808233bb47efd8aee7d646a746 -e472d24de8e1ba5d97f42adc6e6c0dd7dabf119c1ef99e36b52d8524efcba420 -e7dc61bbbd052464c6445e53ed94ae16153ca782b23af58e24c143b6d478b54e -a7a0e98d9ffcdc98c901753f36310c8703295a89ac76f370dd7cf779fa300a40 -a7ca317aa81981d99356cf6bce3b19aaed7dbbd0282879a363381007a717c74a -0a8ac2a36c0c4126424fc41fa68eb69bc5f9211a912e89d5e8174b5e27d13cc7 -0f66d567180ad91a6cad0ae5ca20ad91d74f24cb06467d9b628dda5a5a4a0651 -30befed588ef70f635ea5ffa034519b3cb0a31ce93da4f78be1fe55677d3294d -97d17d13b01c4744963f3e5ca6131fed27e6204e2ad2f78b04b40af3ff8416a9 -6eb72d5d1558dd1c754f718441ab50e79f3d87e2728a45bd1856e20662c8999c -13a82a31476ab851296b0f836e541608b41f9de1251393b9d38bbd198b52f819 -f1371a335f69042ed9a07edbae3f7a9ab4acdb9714dfe5a36510b75e7b14606d -d98a7db3ed34c2fa7b0d72a17da9da49e4623e7928769ed659fd0cf68822fa13 -b0c051e09b83e3b3c3d7dccbcc23b57fd1a98f6714265d5dec0a5dc74af8a8ac -c816fb1a46e97bc1736a2144d57d9b7c61202685325e4902077ac08afe66db1e -74e9f6a5b336e4270aac4396cc3d38202050b84d65d580f0aa4255400814aa3a -ff0f62bb8a40886ac861660b18af1b333a8eee725591cc0a7242650c28b515d9 -31fc57f6acd3b33ae7697f3eeaf817de2a6a9f437f152c4255fe2a25de292be8 -a5a042f615d022be9f2a11d88e4ab384f656d9119cb013543da577d340687dc0 -fe27a2d8cca2be43ad124e6cb45bde5d6851e3d2eb9702e8a3bda55f7eaa01b6 -2b134c99cd4e74b86aca4fcf3af32940f4060a106d9b750634d58a6643d70d8f -349cb04b0334d7e6356f685332151465992a23216a7d9a1723590889d379ea47 -40fbdd1723159afdb9d6b6b00023545e5b11946c826aae507c79a59ee40efdd6 -3f7ab26ffa64ec0734da75276bac98d6eef8218c3c21766a21af0515e1ddf7d1 -6c5ccb215cada17f9c38a5b55b7bdbaf2b2cecafb51b788e90bdb7acd2427483 -c450815ef7464894c3d57832aa590d86eb0cef070cc305db061fc842e0f5492e -8552656766a0b5d8442206500b4d4e3d35958b9501d3e19764741864b16a4853 -1cb082e64e2de5ca287017c87247313fd6cb4226282ae836c859ff3779532224 -d9e1b22e2f74c296b6a96c876bbd159f6a1aa1292ed84a35ce835f6657ec7669 -77cd6f09047912f2dc69a457a0f040285006d4bacc695031969d5265074d8767 -dd210f53b71c70be6b3c89f2b87d45c718cd3125eb4b9b2aa9b5071b7660e9b8 -dcc9d1893280cb656eff20f3725e7cb8bb787b5f94abbac07c067913eef011f2 -38d1b92734a7682f76a511c6d31a35eb0db82313933a1e3526e8cdfa57e73961 -96cd7e92a6d6ff3011a2147c17562cd2de5c98e619e2b08865ac8df3b7d4180d -ff781f5ccdff7a07a3edb2bb9cc262183bd0750b67d1cbd8233425299482974c -c667fd8e84af84527e613f8defd4c8ad29d4db17107c120f64aa30bdddf28f79 -ee6845b61efdf0e7cb4aef0998b116e57e294c72b72c4629846b743311d3030c -767b85b0f4eb55d9a6d1459a63dfbe482298357d737b9e295b18b22f05951948 -ecd6e7105c0abc459e93bd13da37d31266559b1408e8646ee65d792382c54e78 -fa4ed7dbe4fdf792f8dcca408c0297a573af541806fedb9dd746e35de0e31fde -1b29e19a7bc81304c6ff0f8bee5ed79a6158e80cbd2ccd68e53d2df5db4849f0 -85191581505bba5048b1a6ae39a1e3adf65b5f38018406f0d5563cbf51e534c5 -24e61a82c563e3517a442af6137fe0f7ae6b88b1d6b09f53af9520bd2159cf1d -65a4eff69fbf97128816534c40cbd3e4bc4eb1559d9cb314dad354a55661c03f -7880cb6b0422fd2f2ba1b7e3ff59bb7a22dc393bcc36a4cd7e6f4e571ed718a1 -60c46701d761f1a609f9e675648a763040dd0b763bcba2519bdcf88875fc410d -b992bf15e21b2b19c096254cf769831af79647f15b76624f9f9e137e1a68242a -9e11824fec07359eabe6aecdbd2f03c2e7f8cc780792bff240da878df634088e -507cf00a104cd70a859800c88adce53f676590b305e9cbfe83227c39bb6787e6 -2c3361e8d36583b061d83bdbce02dd0e10ffc48238b0ef0f0aa96ee7aff5354c -96f38f07429777d9314ca0d99c881a49c1447a219e02d92f7911d7e162a5f800 -7301b0fac4a23e626c411a47d76955d58a4e7833c21794cc264579724ec63289 -bb3adaa21e230416f401f89f977bdc186ba656980430193cf43fb7ac27d6fc9c -10271957b61a72887f2c9a08b6cd20bc6a22abac31cdd3df92626e10af72a24c -3f2ecf3a1bc64fd431358b34af41e60b45da42af585bcda364f8894488813f14 -e2b03f1ce66bd5e90dcc2159e634b9bfb9004640dec7295ea19e9f20b8d9dfdf -08ae31a4c7f39147818308dc68c1f179fa893f5bfd56ee3647169233b11df36a -61b708d7322033b5847791aaad03324de04d662f34bcc1f969e2ddddbe9bbe9b -29cec9f021239f053eb04668e7a46c7908580f00e1a21a055590216531bcade8 -3ab437c68d324d95c9c22337dc54e44c35f7076ce3bce2b7878cd339a60aa94f -00d705df7e4d32dca8633c6ac9920f6b38da49b33eb6aa4de0822f23d91844e6 -5254df0af0385f267fbdda35528578788499beecf9092e10a8e74a656fc7ca70 -28a74895e7c837be1b90a2f652df11994bc9eef27d81ad3dcba9e554b7f5fa78 -0dc58ee231b90c98191e4eb12d0b713100393239c4e1423f56e5a9fbe9a47a46 -f2bb39ef4c826a60505ec938470b9af73d0836ae5128ef1f7f086d226cb81238 -26e8b71a8c7c043ca18cf83956ae00f293d397059c3a028e18d49821ef93a10b -8a4ad9e18a6639b620a5518c182b966c97fdaa06f88d56e91c7ee99b1e43aa8d -278a9746c0b868c3411b826682283c3466eb7a93b863f52bad360521d60b7a02 -ac01477e202086e27a661ede0fee7b0b4f2759a83ea8cd9c9ced3b2bfa05de1c -86fff7253255f412eb4456c3ef80318671c081e96aaec27b7b90ae0b51449311 -b0f09ad016f16bb6c189339795f62a150aa329e1cffb50314264264d9e9c6e4f -a0940d6a65a300139490c760e3072104cafe4ddc5bdd601a8577cf34fe56e56b -ca4254ca8f99029236bf3e4061f66944eb8449e25ebacd0df5b08441afca8629 -a7d09e75fe78c32b762773436d7d18a6aad941a44eee9afc869283d6772ffbb8 -e7599201cc39f4d5c1ada0875ebfce3d361dacf2b7de7b37bfe16f2bdacc58d0 -f2f986f2cea963a6073ef33a4f72f8fdd751b3e5e7c8281e951966adf89c82ed -26617cec79a786b44cfd546a4d7f731fd3db9c077ba9a6b381f1cafb070f9d7e -de99b15fc5028708648b7f1b9b8d307b25de2b141744c709d52b3ce08f32cf19 -2c060354a2208125a0a855823122f589cb954b1d5804bb1605dd6abe751ca976 -2d29120f2cde14ab562dd6f20a358e175748ebabe994b2cdcae8400c6b899b70 -1972942d34f8ab8bcf1cf32ef039a82f3c64c3705d88839b1407584d203c2b49 -b966aa04b58ae3be1e3561c0970015bc21f63b02c63dce11f919294f38eaba0e -e9467294d53fb9ae4b82ab5ea704aed0ec989b7fdaeef89134bcab30ed3bfa8e -ac564c8d297fc6035f032e8a4a58b0e7ba5fca3c91e70765703e6708b33d582e -6ac634e681e2db6f603e45e1296da486d7e98f4ba8f0b4ef3a6e7680b79bbb57 -c9ade905c330beba2e75418d2b41e589630104465748217220c87fbe466ba118 -7ca0200f96e830ffb47c0edd493b72ae92157eaf9eaed1502ab379e7d53c753f -36a7ce5b8f6434eb4e68612408b7d6062fc985ee562830cabec961edcfb6da08 -930f84256814c4be0be52a186ba1be78ca63ca4d53d9110da0b9b9510465b886 -e0f3e1e9fb766159837a7211e97211cac0374412d7de25e78c6b0b219f60400c -89b42658bfe122ffc5a249f9204aa8ba77922b264ac4670b35694e0660b04613 -5f73b1ba688a55abec74f53d0b2efd2cf28f6cfe6887173ae393f45e82e2cf10 -a907911f1deeda9e819a21458ebff534b9c2f04818b0a8a2bed49a6dbe31deaa -880a53b6d9e8d27bf3efe5dd2c7a20757aad1809da42b401b9b537710078a5ad -e31c69f0b1e877bb0d71cc9801c56fbcfe8444810a44df8256981e383495ab83 -8a41830affed7cfaf909813bf2844d06c74a5c2dcd8ef070db3c93ba2e0c6b3f -89ed49b703083dd2c866865e8bc0f626556708e73104c12e04b293850b5ae418 -b53573f2486bd4514191c53f3b1563d54ed5c0efa5efada2a69ff18384f2f748 -996a3002ec6d59a20bc8be46f078107e9c7047f7237cf3b64e9b877c8aa5b276 -891a4afcc573b65af4e3b33bbc39c17e498a2963ebba329844c37ca6d5f28e57 -0243a0b54e2cbc6581b3c8e73ed72f9ba6ca63d6e03d87d5710483af3ed963c2 -4e6b40e498fd0f7324f5ef7cf90f7db47f51879704d701f03a807eb60ba9729e -8732ef9a6fb98fab923f74ebc531cfb8eae1c72657c95a1fac23211ab9553b11 -9a4c439f19a047cd02bd3d4b9949a1147fb152c75e0feadc5400ac9122e7860c -bf53da6f31276953d47112e455ea156979e109a5136be8ccc0ed8efc885c4bfc -d760142cea74c9af523cf6ee95b9792aee32309888405b447e44985626adc41d -9b2a36fd1140e9d0e72d4deadfb058979d4a197cde6d118f3d09cfc532623468 -f4fa780b5cac206fbae4fad8c9a44772f467a94d1bea453846717d9e0de81bb0 -957cd3b6556cd841f4bd85e75aed98aeaabc9386c1322edeba051607ad0948f2 -e1fff3b2570f2c7f9e25723505859e89539192054bafaeddb5bd0eea558f956e -bab514b41044b48d237ca223178013bf3fbed3d59ccfcd18ca5af2473d7e1d05 -dbc6a1267a0b9c54b1aa36eae5a2d13f965b7a948d1d61fc2c40803b862bc1d6 -62f6ef8e35629e538f5febdeecddae88b1dd5f165ebd5303d4ae43781d912dd3 -17ee43213721a76948a8b7c5c23c9875cc68ded968dc9ad62baa68857dc3ae8d -4e381a3434630b860c68e3a82179744f186da91d7f2a32f332573dbf096f1c8f -e035cf96a747c98e4bcb9cc0f83ea905f6bc0a9b3dc6ab59e883d9f8e702a0ce -d549483e387636b9a9693e1ae02378f3db198cfd6172db06c7667457d7cad173 -440491ead10ab66b4b4e076b495c13c70a7251b1f3c2c79a6d2e48c06af9f13c -585c16b4debabcc57f6a55ae79b6a366e3b609b50775e2fa7aaa29fb308b5c8c -74a38ffbb3138c92f5a2797cbfa829b78e94e8f426b8f79d4a46802e39dc56dc -3d5f5e0de34b1b00fbfaea133550865c6ca36d9c8f87a31829994e09ce78b237 -4b6a8df6a02588ab1d0781d6f817abb53d27e8b142986a36da8d3b1aee32ad7b -bc52886407409c20cda9615d316e7bfc1d055bad292fc1b044a9045667651d90 -31e7ab06af45df501da8cb91c05d35acb559d2ec6aba2686bb33d01d9c305b66 -cc183b54d325a7919c6d08cfaa203a259b4a691d8d01c94c97b44358f040cf9e -7ca9e18c0a42cba9d8988fe314567054e1469d6a22c20e83f53ebd8bb6c21251 -850908f55bd7b512f20895253f09d2edbe775a8594b9d9649e714425ccec45d2 -ebe946365a6135afb1904c3ff84fe5094f8d01a003500ff08dc9cd47e0923ee1 -f11d3ca9f33bc0c029aa718f1736e0ee854dd41b3cf0e23a03400955989e3f43 -f1ae9980b1f4eaa7e0cd8c0c1f0ccb112661d86bfdb39f0bbe997288f7b5d144 -aac7a68805f394eed203b8448cab5ac384782bae222820ff8e83c3212e429121 -bf308838c2f42c2907c2811f0188749e775541a3f17591cbabb3447b18d09d3b -027353de3e541828ba02911bb28648cd5b1d2a22fdb32aad88155356a71e07c2 -816f56296ff7e2b3531510167da60e590487f2561e7d5e1c07a1453120210f03 -87205f407511c09aa210c7a394129ba1213a78fa99ab66e9a0c79de3664b96a3 -c3cc975b73da6c110a1f2e85e263a1055b6863cc87ba577c24ceeb39dd8fc78c -ac25ef46b37883c5698e9fa71d962b3f8d2a148e89c383c5a8b75172661efc38 -0148a6661ca58b79ecac28596049ac006b7f915f28f317fc7ceb1414b932f66d -d0fd211e1582829c4199038a3b80f81bb312a5592ae58ee9e815dc608c9bb3d1 -c12b398e0a7e895b3def77e9f0dc32a8ccb1ba6c145f24503b563388ca307980 -e59bebf466bcfa540d475fb9503b4a75aa40cba89b903b32350212b5b653eb09 -3266ba11cef272e1b67481c00099a6e0983743ee0f8497440585ddd167406899 -75d81280564d4e691410457a46379f6d1219c41cf7862cf9019d6d9889caa6d8 -3c7aecd4d799a79df76a9b0db90550762e7d6a57f500d992d7aecf4757fc05a1 -9c54969821914d00a6b1bbaa887aa505e5b9e198ce805d69893a8c5825713248 -f2adb41a5e5dde999750d6571a51af3c6a75db7d167decf10a25d53565d78d83 -1081d42e875f218d6f9dd7fa51ace13263d903b99aca50aded9595da6474ebfe -c8965070a1b123043ad0ec9b91a6f8973965354933ca5552d503c37c463ea75f -4912b4b39370659b75386d6a974b67e4c7e5434f1604912c6b742b76c5f80401 -5e1b8541313249e161e4cdfd13e9b012d3a399b60c1f346456d36aa169fc30cf -022ccbf697879b8abfa031a5ed7b93a67031c3b3770fea0e7d0d70a0a3d7b40c -afb56bfc7554c61e6f72e65c4528f4b9ef6d93266ef1f29ed8cb5a25043f268d -3924149d3a71dd370a151d1a110defef096de93be043cf4aa09b8b765665efb9 -b97b13203de7d12249db2b0620df7cb2427e6285ae52fdfb28aa5c2ad8b77360 -09489613d4dee865265da94f0c652a7aca4e9369fcb70ed5d8e73845a0d03fd9 -5186b4db47ef4f531dad78d576b9fe473379346f280deffdf9989fc0b579a806 -cdf24342c9dd0f2672adc780816350025db36560f4e5aa9226a993627ea46261 -bbffe54ff8bb61637c3cf2bd50797438cafa0207ae6974edebe39bdd2f338969 -6651596e9d5122ba68661c3566750ced7fb018776b84b595b65daac168f14780 -f3f8b6d2a2b56bd5cd2a6bd1a49ae88b49fd7bc3c7c54b6913847eeaf3968d53 -d7a8297ba332ac9a518fadbe70bff80ff76686f1ccd459e92e0a2925730f0690 -f1b800d77abd1d48ff1a091494dab0cefdbcf8f839b81b15787db45e78af5d4a -2323324418795c574fc3273d22164decbce0d92a67859e4d33df2e5b6f7f4239 -37bdf7aedfb7a4dd239a252cc7044bd83d0935a3874d514112c16fb47ddeab00 -2348e77301e2742d8509993ac7113ee43f44e51910336807219d18a71d4b615e -ddbe543fe23ff195359e49f0848310f55cb1f4de66af463cab2b3a88b3c7a8f4 -717c0ebc88fea82a10b3d918d8f3f6d0b159f25a9b55b46674149f966069897a -b49104faded5904d0174f084e5c54c16135ae896e0d8d4a94b5d3f1e5d0a90ce -26ff3f3d32f48fb9bc841fad5460bdb5ce1e909dd95c8b1fdad4a63a37fc802e -39891a964a70563205b37f6688220a9cbde7bf05c3ec922c136fa4982ed998b1 -6df6c2d7ce660939b23a921f29a4f7077ff9fb998bb62c1e5e66ab125ef375e3 -1a905d194085bc5f81a51d6c1410978f04193c410cafd322304c9d33ab6b23b6 -03f3b3550d100d8fb265d7c553c16b3699aabb5628bf0cfacb2608847304bc6f -a036abe679e73ec4184a6b8bf7e4c3760d6878eda59b36a60f3e09ef13c50e60 -859b3b38d452ef89a659cf90b2ab373426e5784b82268b1361761917f28d625d -8cdeb451a15e78ff17261ab5a01032c843b251ea217db256d61b90cbaf2a2d2a -eeb00996a4acc6d9e23d49272da68a6a0089e98e0503e4b383616ec40df8c152 -81d3d2ceb730d93f2117e2f6f5a80f16dbd18e753acf200a9b90d782901c00d4 -134ca7beec62027b08450788784b2e15f0c322d7d62f3ed831a7ef9e743fb23b -cd12ba33baeb21153b476fc10aa9100f795644e4d378f3151d4424e628d25a08 -a0358a77ed6b05eec6b337f5b71e11d1f7bbac5b40898260794b6cc224310d91 -a4f39bcb6cda5587151afcedadf536c61dab05ec95f819145c9fb983c5516991 -8704408e78c3bf2ccb4ab46d2f2c0dcaa9e6d64a159293fda0b9f3591690f6f5 -13a46ba2972b11231cd044e20d13b4bf34c3271225b25185189217dcc717107b -d8accf0140a68afbfd9a31988798775b83219728c085c5971015b82e3cc2d83f -aff9722a9867bda2a1820bdcbd0a4ba406024881df9c688d536924d4aad821d9 -98fe2e5e4373e35bcdfd43cd98b146fd2ccf2673415f87201ba750c2c7d3b6fc -541983582a3fb39f422a7c9357ebd2cd19806dd5f65cbbd82403e95c2baff8de -5a8453e7be387d77dee25d95092e1bcbeb2ca752446b72089e51e2a263779439 -660670fb9f573123490dc84c058230712e4cefac3f1d2423814e57ab3e4c2f51 -bd22a4f9daff3309dc6d29574767ed3bb9c32d6b9781758a7de3a82e2bf88f80 -95f6023b7272b594abc5470d97aafeb2acac563ff67a2bf172d6ce3a8aaa09da -c56ca3d8ca8652fdd942d03e06758f3fbdefca6f9b961d313e4acd3a7a83659f -698ba5a7447a63aae6d9fe00a3124cb15b38da7b1467ab2930436f70b1c102b5 -394eb6a12f3c23e030bad0f66cafc2935ba71fbe8988ae16caeb23ed401ea750 -78b4d2e161768ac9d84a4a67f18a1fc759d49353f6c3ef0a39c49d7b91431fc7 -5ac88651c3681fefac99864fa0db4e591942d6afeda35e3409304543d45da26d -5ef398cc07eb167b28560e33409c7c5492069ac38f5b0c6ae24331e74c26bda0 -8be3e0f46e1e2e1f898e2646e642428c3c1b196aa98d5ad73771b93b580f1625 -ca2817d3d6ddc96ee9034edd252f1b76a89cb9a2ef3eeb62eeba5d8cf0a52ca1 -ec15cc1674e7a9d565d941132971ac7db252f684fb4fd4066427444a01fda5ec -c1301bbf001f5fe7c83dd98ea7de0e66fc216b709474018e1979e9ba2249f68c -0b097e47f264d3ca34718261b92242841ba9d21316c4eb682d54fd48e14d0fcb -c8e238467864e37b3052e3f56b15aa3335214a26ec41058add2f33dd5ddd7ff3 -953b9a5b1ce8907ad7497c3735052c8efca51c927cb2c72bdd8ef5c8093ad928 -d5f107067034a696854dd2ddad3e6e67015717c15153c343c21d567f98f43acc -cc064089fac9282110c20ff014c0bb53299c77a5c93456c3d6671882cc7af79b -6d2236797dae3bb87387f08296d6a604ddfe2bda7e4337e1a29b7784d9a5baa0 -eb07951cc13ab614cf97023b8bca33c1360847cb107351413236a3f5724745a4 -f49a5944783af38ec7f91503bc49d5d1df7b8ba5fc1f72bf80703058d967855c -0ed73856b5da22b2f0dd71763e15e232b85abbf98822b22643bb66f0f8134476 -e46899cd78a3adfcb03bca7f51d588b55c08066f18e0a0a0d462d73afb58b0e9 -d5008f629a92dda8de8d4f6d259115c86c4569ac8f147d66f1412b49fc800357 -b6123d40feedc844647759588ef09b766064ac4d1dff5e64742791c4d4421d79 -a5ea6385de15813c0794d96051b474e0d38a50ec551090800c53740a0dbfbea2 -107c20cabee5663797edda4695aec83bb01609c0977b5a59ad40720a3d99d5b9 -9cf398dc78d55ad7f0032dd2740e4928a50a8bb2397733dcc367bc6496c8de2e -f7c12e1155b546ace8c60a216549a244600347454d4dae4a5fdc119276c4bda4 -e4a1b1f85ba8d3bdb77397e30055fc02f18a4affa2f8baeb7c377ccc0cc2d244 -7159a9bf0648673cf7102305f5318d3d6788df18c41d81950c97d0449f06f204 -851a10c20be1bf696009b7452283a1c1801ae3f628340a366511f972cb27e709 -93cfbd9bf9359b18fa3b3ec84c33f08704998a205530275f903e1c5eb9f5f590 -379e4ea29f4caabcf6f4337936f1c6ec8bc87109ffa667ea4eaad64db0930a2f -8c9d4f7269885e73e6ce067cc0f0b4af65145ec69c64d087d77d055ebd96d05f -7e316d5231638b3bc0fc590d171ea52935f2ed0226dad161cffba84203420146 -89e0764625c9cb43c175bf4a2aef78f2c8b557243f37ffce7842b6ad2eb31adf -3141a7488f918215edffd2eb130ea00c7a8e598cef6aa4d0cafae9c8bc1b951e -042103b178a9217bbe7dc81f8d24dbece68e72fd7e201e89af835f27928bffcf -1a01d7ed8ef48f1aca8a48404d6dfaaf1e5a6c5bdab4cab7f34a2d8279132a28 -09daf2014fe3f03c96045a3ef2e6ab907f0c895a9e9e357bfbfa1b3c3d1abc1c -e6afba12b462921cbe7c47280a7058bef1b510e2714bbd2108ab4d371a035da6 -96a83819f1b1c61251c934b87c17d85ac848639dbeb584fbc204ad09857b6a8e -d1eb125bda8110e193cfc13d2d25bbe9eb65dbc425b43c9a46fc6cb2b287d577 -e63d96eae142df3f42cfe1aaa0873093dfefeacd60936bb10543e7d394da43ef -cc7dc394c5f7690fc13d6d8108d3267d1f8307be6647aa013b7c5ddc79bf3bf6 -2c5c3ab08e620d56c47ad8c1e815c556fd85b51389ba55d7787bcfa860ee9a56 -b50ad0bf07e606e9a4756f859bb41d95a64c5cf4719933eccce433417246a06a -d35da651b66d557e1fc4540329d2ee2ae5c929202cfc4aecb81087e81f074b7e -91ad77f3dcdc62bdf81d147ea6bc03a1c48543c546f92612276358eec846ae70 -c8a66f02bf82632ed4ad38854a15b99fe8d4b5ed5a6d877175f364cc43145546 -1ae1d54c53aa2010e7e172cd736b28cfba30346c605e74bbfc58114eb1f9f1aa -a40bff04419e0198de71be67293d6098119f76bdc9111f56f45fd7774239a8c7 -51a98c63d91c29dd82f6819510bbf6a15d0d2e2eec78a59d7610937ff418a7f4 -07743db28742237f90b9cddd4f5611ba1d1f53d71d56a6268f563080185919ff -56673e60252efb5acdc122410a5cf43c9f5a6a56022509fb125b8c4a0b773a1a -2d5bf0bf0777b2f914164de89bba6321000f656814e15779be1818c8cb0f3ed2 -84a1b53d4e73c607e76165ad9a4d6d1d36729e83ed798dd1a2f7a0e70d53ae3b -18646b57ceb8c3f7f57fa6bb95ab7d70e4b3265d60ec4bf5ee9a870ae3d91cb2 -b4a2d2fdb5071f5de093f84a76e22c65382c4d3fa053511da9013ba2fe7efa40 -53cec7ba2dc54fa46466c0d6c55a5869851b5a8617e4e21962f219b1956c0faa -df9ac28fd4ffceb40305617dacb13a58e45a20d4cce72ae242873efcf4fb3922 -c21efd335d60ee1ca25cb7fc5581e77c2a595310af20beffda320daec33049c1 -0f38c3747879991e918ef90a978eb3e266e9d20fbe54fc9f4fe75237a75c9f1c -d950ac5d6bfecdb72f83c130414ed6d370b4a4fd84af267d3573f71e0b5fc6ca -18aa3fd906ad29ddd2154bc2e09781ee50078d2b905214805e4d48aaf9e366b7 -cba25c4eaa6cd851ed89f2bafb07197887d62d8a88ca360b72f3d50f75e671ac -9be36ae28afbeb3d896958f72f9c02fd3460e96dc525cc22466ef40bdd4d8d8e -eb4b8630b93508da9c197c0fffde911f871b8a2c4abcca773c96878686de8300 -868e263a7fc0bb0b98f009ac13ebc0ed6d4d1a91837fdc7bd1f40a64d5764ad8 -55d856074c126902d70e8328be059b72424684c956c947b21d35d86119636212 -c5a042f7ebb78342c6c19d32e1d86009161a409e338399ddf4ebdf04a3cdb2c4 -90950c341b189be5715a1b6865dc1d345c3df78f5a6f4d170c3ddf687bd50ada -2b5e9926cf8abaac9192a405131406b0abcaaf27c9ea8a91770c29d92ec5e43e -8c8a89aa60d22d0342adfd66dadc73dd9481a74fe9fbbd8b65e6ec15251e131a -0f57515099a25b5632667161b03bf684bf0a8ad34db4cf33dd090f530eac2377 -4ab33c9ffa7bc55d05965fa9b3127920f9ab5c731dc8bf255e41504ec4f24293 -f98462fca92caeb56a67097c835470ba1e790266d9d3c38a43f94c2130bd6786 -fe0d8ed75c2a91d8b32327c190b73809f9e9f4ea41f227a2527205b1b85a12b7 -2983d81de17147d288466652bb37f4e8828f19f2d79605eeae626955f700f310 -25436f14237738a6be29bc161d7d6c077ac08c39f28686817e3867e1bd4ce765 -b37d59f476fec2ccaa6faf64478848f232e23e1beaba6151e972d882feb8b996 -667af161e4ae2cab5c4b20fdfdf4f960443ef61c53564b6e44a310e557f5b52e -e8330020ab969cc3b8e1aa1b4e5ab8d21aee185ff21cc30e2aba586fca93f7e0 -9a127620b355b8175170213042a6f9b4df3aa1bef4046f6be73e81f6f2694006 -a1eddf5ff3f1c5a760ac1dab80b3220b8048d4009a07275dee306a3350e905a6 -8a55a4f179370e44c4f67dc31f88dcd25b9de90ed9dfcc2c26f73fa95c8e54e0 -0c09cb82b0d16302a4e67f80a98508cdd3e7d66e9c951a41241aea3ec3735901 -ea7b142483ddf0f065469fb386afa9a91a74aacaf3fc57a85facd78abfae5708 -debf06297e7556e7bfec6250b4487d29c7f61e60499a72551b5817c836c5c025 -94cbc33f793c55a52282b934ef6689190b550e67179f2975d45bc0dd11bd7829 -49410cccc13d6a0dbab3fde04836773d185bb4d46a332d32965eedd2ab8eebaa -c212dc36443128a8a0953331a8eb655d5d8fc9213781550db63ab7443cbaf1e2 -c2432559e7a6d98f5973ada70913faddd976f702da2c051284bd9f7b5deb595a -ec4b87ca63cec112765a1fe9236581ac5567c16be9e6c0cedcdb08283a8033ac -dbb3b10ca1a6d0653bc1a9800de240020d6ac9d89fbebd77d6eb530401c8e5e8 -faceb9ac544738ce1d3d7869e15ff79b4dc642bc9691ee785c0c629988a44d6a -f76c2690fe2a61749face27bf143e74a4d334fd201a91c579e96c6388354b544 diff --git a/src/main.rs b/src/main.rs index bcf3aba..ac39f31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -84,13 +84,18 @@ fn select_tx_for_block(txs: Vec) -> Vec { let fee_rate_b = b.fee() as f64 / b.weight() as f64; fee_rate_b.partial_cmp(&fee_rate_a).unwrap_or(std::cmp::Ordering::Equal) }); + let mut c = 0; // Select transactions to maximize fee and fit within block weight for tx in txs_sorted { let tx_weight = tx.weight(); if total_weight + tx_weight <= MAX_BLOCK_WEIGHT { selected_txs.push(tx); + c+=1; total_weight += tx_weight; + if c > 2500 { + break; + } } else { // If adding this transaction exceeds the block weight limit, stop adding. break; From 56afafabf1a64670be5cd7f6bcf2896494f04cda Mon Sep 17 00:00:00 2001 From: 0x0 Date: Tue, 16 Apr 2024 13:11:06 -0700 Subject: [PATCH 14/16] . --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index ac39f31..e872e73 100644 --- a/src/main.rs +++ b/src/main.rs @@ -93,7 +93,7 @@ fn select_tx_for_block(txs: Vec) -> Vec { selected_txs.push(tx); c+=1; total_weight += tx_weight; - if c > 2500 { + if c > 100 { break; } } else { From 0ec448a05473a950decb0a170297adbefa2fcfd4 Mon Sep 17 00:00:00 2001 From: 0x0 Date: Tue, 16 Apr 2024 13:32:26 -0700 Subject: [PATCH 15/16] . --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index e872e73..aa7f0d9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -93,7 +93,7 @@ fn select_tx_for_block(txs: Vec) -> Vec { selected_txs.push(tx); c+=1; total_weight += tx_weight; - if c > 100 { + if c > 1000 { break; } } else { From 1cdce39de12bb11616c655785e36b7d7d71b00dc Mon Sep 17 00:00:00 2001 From: 0x0 Date: Tue, 16 Apr 2024 13:40:31 -0700 Subject: [PATCH 16/16] . --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index aa7f0d9..9fb10eb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -93,7 +93,7 @@ fn select_tx_for_block(txs: Vec) -> Vec { selected_txs.push(tx); c+=1; total_weight += tx_weight; - if c > 1000 { + if c > 2000 { break; } } else {