diff --git a/Makefile b/Makefile index 9a8ed77208..f4b75dfe6a 100644 --- a/Makefile +++ b/Makefile @@ -132,6 +132,10 @@ anvil_start_with_block_time: @echo "Starting Anvil..." anvil --load-state contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json --block-time 7 +anvil_start_with_block_time_with_more_prefunded_accounts: + @echo "Starting Anvil..." + anvil --load-state contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json --block-time 7 -a 2000 + _AGGREGATOR_: aggregator_start: @@ -280,7 +284,7 @@ verifier_disable: __BATCHER__: -BURST_SIZE=5 +BURST_SIZE ?= 5 user_fund_payment_service: @. ./scripts/user_fund_payment_service_devnet.sh @@ -297,6 +301,11 @@ batcher_start_local: user_fund_payment_service @$(MAKE) run_storage & @cargo run --manifest-path ./batcher/aligned-batcher/Cargo.toml --release -- --config ./config-files/config-batcher.yaml --env-file ./batcher/aligned-batcher/.env.dev +batcher_start_local_no_fund: + @echo "Starting Batcher..." + @$(MAKE) run_storage & + @cargo run --manifest-path ./batcher/aligned-batcher/Cargo.toml --release -- --config ./config-files/config-batcher.yaml --env-file ./batcher/aligned-batcher/.env.dev + install_batcher: @cargo install --path batcher/aligned-batcher @@ -444,6 +453,82 @@ batcher_send_burst_groth16: batcher/target/release/aligned @mkdir -p scripts/test_files/gnark_groth16_bn254_infinite_script/infinite_proofs @./batcher/aligned/send_burst_tasks.sh $(BURST_SIZE) $(START_COUNTER) + +__TASK_SENDER__: +BURST_TIME_SECS ?= 3 + +task_sender_generate_groth16_proofs: + @cd batcher/aligned-task-sender && \ + cargo run --release -- generate-proofs \ + --number-of-proofs $(NUMBER_OF_PROOFS) --proof-type groth16 \ + --dir-to-save-proofs $(CURDIR)/scripts/test_files/task_sender/proofs + +# ===== DEVNET ===== +task_sender_fund_wallets_devnet: + @cd batcher/aligned-task-sender && \ + cargo run --release -- generate-and-fund-wallets \ + --eth-rpc-url http://localhost:8545 \ + --network devnet \ + --amount-to-deposit 1 \ + --amount-to-deposit-to-aligned 0.9999 \ + --private-keys-filepath $(CURDIR)/batcher/aligned-task-sender/wallets/devnet + +task_sender_send_infinite_proofs_devnet: + @cd batcher/aligned-task-sender && \ + cargo run --release -- send-infinite-proofs \ + --burst-size $(BURST_SIZE) --burst-time-secs $(BURST_TIME_SECS) \ + --eth-rpc-url http://localhost:8545 \ + --batcher-url ws://localhost:8080 \ + --network devnet \ + --proofs-dirpath $(CURDIR)/scripts/test_files/task_sender/proofs \ + --private-keys-filepath $(CURDIR)/batcher/aligned-task-sender/wallets/devnet + +task_sender_test_connections_devnet: + @cd batcher/aligned-task-sender && \ + cargo run --release -- test-connections \ + --batcher-url ws://localhost:8080 \ + --num-senders $(NUM_SENDERS) + +# ===== HOLESKY-STAGE ===== +task_sender_generate_and_fund_wallets_holesky_stage: + @cd batcher/aligned-task-sender && \ + cargo run --release -- generate-and-fund-wallets \ + --eth-rpc-url https://ethereum-holesky-rpc.publicnode.com \ + --network holesky-stage \ + --funding-wallet-private-key $(FUNDING_WALLET_PRIVATE_KEY) \ + --number-wallets $(NUM_WALLETS) \ + --amount-to-deposit $(AMOUNT_TO_DEPOSIT) \ + --amount-to-deposit-to-aligned $(AMOUNT_TO_DEPOSIT_TO_ALIGNED) \ + --private-keys-filepath $(CURDIR)/batcher/aligned-task-sender/wallets/holesky-stage + +task_sender_send_infinite_proofs_holesky_stage: + @cd batcher/aligned-task-sender && \ + cargo run --release -- send-infinite-proofs \ + --burst-size $(BURST_SIZE) --burst-time-secs $(BURST_TIME_SECS) \ + --eth-rpc-url https://ethereum-holesky-rpc.publicnode.com \ + --batcher-url wss://stage.batcher.alignedlayer.com \ + --network holesky-stage \ + --proofs-dirpath $(CURDIR)/scripts/test_files/task_sender/proofs \ + --private-keys-filepath $(CURDIR)/batcher/aligned-task-sender/wallets/holesky-stage + +task_sender_test_connections_holesky_stage: + @cd batcher/aligned-task-sender && \ + cargo run --release -- test-connections \ + --batcher-url wss://stage.batcher.alignedlayer.com \ + --num-senders $(NUM_SENDERS) + +__UTILS__: +aligned_get_user_balance_devnet: + @cd batcher/aligned/ && cargo run --release -- get-user-balance \ + --user_addr $(USER_ADDR) + +aligned_get_user_balance_holesky: + @cd batcher/aligned/ && cargo run --release -- get-user-balance \ + --rpc_url https://ethereum-holesky-rpc.publicnode.com \ + --network holesky \ + --user_addr $(USER_ADDR) + + __GENERATE_PROOFS__: # TODO add a default proving system diff --git a/batcher/Cargo.lock b/batcher/Cargo.lock index 523afae674..6155d4b038 100644 --- a/batcher/Cargo.lock +++ b/batcher/Cargo.lock @@ -113,7 +113,7 @@ dependencies = [ "once_cell", "priority-queue", "prometheus", - "reqwest 0.12.8", + "reqwest 0.12.9", "risc0-zkvm", "serde", "serde_json", @@ -147,9 +147,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" [[package]] name = "alloy-primitives" @@ -194,7 +194,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -210,7 +210,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "syn-solidity", "tiny-keccak", ] @@ -226,7 +226,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "syn-solidity", ] @@ -253,9 +253,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.17" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -268,9 +268,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8365de52b16c035ff4fcafe0092ba9390540e3e352870ac09933bebcaa2c8c56" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" @@ -302,9 +302,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.91" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] name = "ark-bn254" @@ -569,7 +569,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -597,7 +597,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -608,9 +608,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-config" -version = "1.5.9" +version = "1.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6448cfb224dd6a9b9ac734f58622dd0d4751f3589f3b777345745f46b2eb14" +checksum = "9b49afaa341e8dd8577e1a2200468f98956d6eda50bcf4a53246cc00174ba924" dependencies = [ "aws-credential-types", "aws-runtime", @@ -676,9 +676,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.58.0" +version = "1.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0656a79cf5e6ab0d4bb2465cd750a7a2fd7ea26c062183ed94225f5782e22365" +checksum = "0506cc60e392e33712d47717d5ae5760a3b134bf8ee7aea7e43df3d7e2669ae0" dependencies = [ "aws-credential-types", "aws-runtime", @@ -710,9 +710,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.47.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8776850becacbd3a82a4737a9375ddb5c6832a51379f24443a98e61513f852c" +checksum = "09677244a9da92172c8dc60109b4a9658597d4d298b188dd0018b6a66b410ca4" dependencies = [ "aws-credential-types", "aws-runtime", @@ -732,9 +732,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.48.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0007b5b8004547133319b6c4e87193eee2a0bcb3e4c18c75d09febe9dab7b383" +checksum = "81fea2f3a8bb3bd10932ae7ad59cc59f65f270fc9183a7e91f501dc5efbef7ee" dependencies = [ "aws-credential-types", "aws-runtime", @@ -754,9 +754,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.47.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fffaa356e7f1c725908b75136d53207fa714e348f365671df14e95a60530ad3" +checksum = "53dcf5e7d9bd1517b8b998e170e650047cea8a2b85fe1835abe3210713e541b7" dependencies = [ "aws-credential-types", "aws-runtime", @@ -916,9 +916,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.7.2" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e086682a53d3aa241192aa110fa8dfce98f2f5ac2ead0de84d41582c7e8fdb96" +checksum = "92165296a47a812b267b4f41032ff8069ab7ff783696d217f0994a0d7ab585cd" dependencies = [ "aws-smithy-async", "aws-smithy-types", @@ -933,9 +933,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.2.8" +version = "1.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c9cdc179e6afbf5d391ab08c85eac817b51c87e1892a5edb5f7bbdc64314b4" +checksum = "4fbd94a32b3a7d55d3806fe27d98d3ad393050439dd05eb53ece36ec5e3d3510" dependencies = [ "base64-simd", "bytes", @@ -1140,7 +1140,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1250,16 +1250,16 @@ source = "git+https://github.com/risc0/risc0?tag=v1.1.2#2ba504fddd84376235d335ec dependencies = [ "duplicate", "maybe-async", - "reqwest 0.12.8", + "reqwest 0.12.9", "serde", "thiserror", ] [[package]] name = "borsh" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +checksum = "f5327f6c99920069d1fe374aa743be1af0031dea9f250852cdf1ae6a0861ee24" dependencies = [ "borsh-derive", "cfg_aliases", @@ -1267,16 +1267,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +checksum = "10aedd8f1a81a8aafbfde924b0e3061cd6fedd6f6bbcfc6a76e6fd426d7bfe26" dependencies = [ "once_cell", "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.85", - "syn_derive", + "syn 2.0.87", ] [[package]] @@ -1318,7 +1317,7 @@ checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1401,9 +1400,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.31" +version = "1.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf" dependencies = [ "jobserver", "libc", @@ -1519,7 +1518,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1665,9 +1664,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" dependencies = [ "libc", ] @@ -1787,7 +1786,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1924,7 +1923,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1944,7 +1943,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2023,6 +2022,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "docker-generate" version = "0.1.3" @@ -2194,7 +2204,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2372,7 +2382,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "syn 2.0.85", + "syn 2.0.87", "toml", "walkdir", ] @@ -2390,7 +2400,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2416,7 +2426,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.85", + "syn 2.0.87", "tempfile", "thiserror", "tiny-keccak", @@ -2567,9 +2577,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" [[package]] name = "fastrlp" @@ -2695,7 +2705,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2801,7 +2811,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3056,9 +3066,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" dependencies = [ "allocator-api2", "equivalent", @@ -3347,14 +3357,143 @@ dependencies = [ "tracing", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -3408,7 +3547,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.1", ] [[package]] @@ -3602,7 +3741,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" dependencies = [ - "regex-automata 0.4.8", + "regex-automata 0.4.9", ] [[package]] @@ -3645,7 +3784,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3659,9 +3798,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.161" +version = "0.2.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" [[package]] name = "libgit2-sys" @@ -3687,9 +3826,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00419de735aac21d53b0de5ce2c03bd3627277cf471300f27ebc89f7d828047" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libredox" @@ -3719,6 +3858,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + [[package]] name = "lock_api" version = "0.4.12" @@ -3741,7 +3886,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.0", + "hashbrown 0.15.1", ] [[package]] @@ -3776,7 +3921,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4090,7 +4235,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4180,7 +4325,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4698,7 +4843,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4736,7 +4881,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4811,7 +4956,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4971,7 +5116,7 @@ dependencies = [ "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -5023,10 +5168,11 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.5" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" dependencies = [ + "cfg_aliases", "libc", "once_cell", "socket2", @@ -5145,7 +5291,7 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -5160,9 +5306,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -5233,9 +5379,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.8" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "base64 0.22.1", "bytes", @@ -5291,7 +5437,7 @@ dependencies = [ "anyhow", "async-trait", "http 1.1.0", - "reqwest 0.12.8", + "reqwest 0.12.9", "serde", "thiserror", "tower-service", @@ -5650,9 +5796,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.38" +version = "0.38.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a" +checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" dependencies = [ "bitflags 2.6.0", "errno", @@ -5807,7 +5953,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -5911,9 +6057,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", @@ -5960,22 +6106,22 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.213" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" +checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.213" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" +checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6008,7 +6154,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6047,9 +6193,9 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.1.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" +checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9" dependencies = [ "futures", "log", @@ -6061,13 +6207,13 @@ dependencies = [ [[package]] name = "serial_test_derive" -version = "3.1.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" +checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6548,7 +6694,7 @@ dependencies = [ "p3-field", "p3-fri", "prost", - "reqwest 0.12.8", + "reqwest 0.12.9", "reqwest-middleware", "serde", "sp1-core-executor", @@ -6640,9 +6786,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" dependencies = [ "quote", - "syn 2.0.85", + "syn 2.0.87", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -6687,7 +6839,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6738,9 +6890,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.85" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -6756,19 +6908,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.85", -] - -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6786,6 +6926,17 @@ dependencies = [ "futures-core", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "sysinfo" version = "0.30.13" @@ -6849,11 +7000,30 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "task-sender" +version = "0.1.0" +dependencies = [ + "aligned-sdk", + "clap", + "env_logger", + "ethers", + "futures-util", + "log", + "rpassword", + "serde", + "serde_json", + "sha3", + "tokio", + "tokio-tungstenite 0.24.0", + "url", +] + [[package]] name = "tempfile" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", @@ -6875,22 +7045,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.65" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.65" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6945,6 +7115,16 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.8.0" @@ -6962,9 +7142,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.41.0" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" dependencies = [ "backtrace", "bytes", @@ -6986,7 +7166,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -7065,6 +7245,24 @@ dependencies = [ "webpki-roots 0.26.6", ] +[[package]] +name = "tokio-tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +dependencies = [ + "futures-util", + "log", + "native-tls", + "rustls 0.23.16", + "rustls-pki-types", + "tokio", + "tokio-native-tls", + "tokio-rustls 0.26.0", + "tungstenite 0.24.0", + "webpki-roots 0.26.6", +] + [[package]] name = "tokio-util" version = "0.7.12" @@ -7171,7 +7369,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -7311,6 +7509,27 @@ dependencies = [ "utf-8", ] +[[package]] +name = "tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.1.0", + "httparse", + "log", + "native-tls", + "rand", + "rustls 0.23.16", + "rustls-pki-types", + "sha1", + "thiserror", + "utf-8", +] + [[package]] name = "twirp-rs" version = "0.13.0-succinct" @@ -7324,7 +7543,7 @@ dependencies = [ "http-body-util", "hyper 1.5.0", "prost", - "reqwest 0.12.8", + "reqwest 0.12.9", "serde", "serde_json", "thiserror", @@ -7369,27 +7588,12 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" -[[package]] -name = "unicode-bidi" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" - [[package]] name = "unicode-ident" version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" -[[package]] -name = "unicode-normalization" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] - [[package]] name = "unicode-width" version = "0.1.14" @@ -7422,9 +7626,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" dependencies = [ "form_urlencoded", "idna", @@ -7443,6 +7647,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -7596,7 +7812,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "wasm-bindgen-shared", ] @@ -7630,7 +7846,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -7945,6 +8161,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "ws_stream_wasm" version = "0.7.4" @@ -7985,6 +8213,30 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -8003,7 +8255,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure", ] [[package]] @@ -8023,7 +8296,29 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] diff --git a/batcher/Cargo.toml b/batcher/Cargo.toml index f7489c6daf..ddec141070 100644 --- a/batcher/Cargo.toml +++ b/batcher/Cargo.toml @@ -1,7 +1,3 @@ [workspace] -members = [ - "aligned-batcher", - "aligned-sdk", - "aligned" -] +members = ["aligned-batcher", "aligned-sdk", "aligned", "aligned-task-sender"] resolver = "2" diff --git a/batcher/aligned-task-sender/Cargo.toml b/batcher/aligned-task-sender/Cargo.toml new file mode 100644 index 0000000000..94f08fb5ef --- /dev/null +++ b/batcher/aligned-task-sender/Cargo.toml @@ -0,0 +1,32 @@ + +[package] +name = "task-sender" +version = "0.1.0" +edition = "2021" + +[dependencies] +serde = { version = "1.0.201", features = ["derive"] } +serde_json = "1.0.117" +futures-util = "0.3.30" +tokio = { version = "1.40.0", features = [ + "io-std", + "time", + "macros", + "rt", + "rt-multi-thread", + "sync", + "process", + "fs", +] } +tokio-tungstenite = { version = "0.24.0", features = [ + "rustls-tls-webpki-roots", + "native-tls", +] } +url = "2.5.0" +log = "0.4.21" +env_logger = "0.11.3" +clap = { version = "4.5.4", features = ["derive"] } +ethers = { version = "2.0", features = ["ws", "rustls", "eip712"] } +aligned-sdk = { path = "../aligned-sdk" } +rpassword = "7.3.1" +sha3 = { version = "0.10.8" } diff --git a/batcher/aligned-task-sender/README.md b/batcher/aligned-task-sender/README.md new file mode 100644 index 0000000000..73b1df8686 --- /dev/null +++ b/batcher/aligned-task-sender/README.md @@ -0,0 +1,95 @@ +# Task Sender +This CLI is made to stress-test the network. + +It has the following commands: + +## GenerateProofs + +This command is to generate N Groth16 proofs. + +To run it, you can: +```bash +cargo run --release -- generate-proofs \ + --number-of-proofs --proof-type groth16 \ + --dir-to-save-proofs $(PWD)/scripts/test_files/task_sender/proofs +``` + +We also have a make target: +```bash +NUMBER_OF_PROOFS=15 make task_sender_generate_groth16_proofs +``` +## GenerateAndFundWallets + +This command is to generate N wallets, and fund them in the BatcherPaymentService. + +To run it, you can: +```bash +cargo run --release -- generate-and-fund-wallets \ + --eth-rpc-url \ + --network \ + --funding-wallet-private-key \ + --number-wallets \ + --amount-to-deposit \ + --amount-to-deposit-to-aligned \ + --private-keys-filepath +``` + +### In Testnet +```bash +NUM_WALLETS= make task_sender_generate_and_fund_wallets_holesky_stage +``` + +### In Devnet: +Run anvil with more prefunded accounts, using the following make target: +```bash +make anvil_start_with_block_time_with_more_prefunded +``` + +Then run the following make target, with `NUM_WALLETS` being the amount of wallets you want to deposit funds to aligned payment service, up to 1000. +```bash +NUM_WALLETS= make task_sender_generate_and_fund_wallets_devnet +``` + +## SendInfiniteProofs + +This command sends `BURST_SIZE` proofs from each private key in `PATH_TO_PRIVATE_KEYS_FILE` every `BURST_TIME_SECS` seconds. + +To vary the amount of senders, it is recommended to have a backup with all private keys, and add/remove keys from the file being used. + +To run it, you can: +```bash +cargo run --release -- send-infinite-proofs \ + --burst-size --burst-time-secs \ + --eth-rpc-url \ + --batcher-url \ + --network holesky-stage \ + --proofs-dirpath $(PWD)/scripts/test_files/task_sender/proofs \ + --private-keys-filepath +``` + +We also have the following related make targets +```bash +BURST_SIZE= BURST_TIME_SECS= make task_sender_send_infinite_proofs_devnet +``` +```bash +BURST_SIZE= BURST_TIME_SECS= make task_sender_send_infinite_proofs_holesky_stage +``` + +## TestConnections + +This command enables and hangs N connections with the Batcher. + +To run it, you can: +``` +cargo run --release -- test-connections \ + --batcher-url \ + --num-senders +``` + +We also have the following related make targets: +```bash +NUM_SENDERS= make task_sender_test_connections_devnet +``` +```bash +NUM_SENDERS= make task_sender_test_connections_holesky_stage +``` diff --git a/batcher/aligned-task-sender/rust-toolchain b/batcher/aligned-task-sender/rust-toolchain new file mode 100644 index 0000000000..989860f406 --- /dev/null +++ b/batcher/aligned-task-sender/rust-toolchain @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2024-04-17" +components = ["llvm-tools", "rustc-dev"] diff --git a/batcher/aligned-task-sender/src/commands.rs b/batcher/aligned-task-sender/src/commands.rs new file mode 100644 index 0000000000..8d6a904555 --- /dev/null +++ b/batcher/aligned-task-sender/src/commands.rs @@ -0,0 +1,453 @@ +use aligned_sdk::core::types::{Network, ProvingSystemId, VerificationData}; +use aligned_sdk::sdk::{deposit_to_aligned, get_nonce_from_ethereum, submit_multiple}; +use ethers::prelude::*; +use ethers::utils::parse_ether; +use futures_util::StreamExt; +use k256::ecdsa::SigningKey; +use log::{debug, error, info}; +use rand::seq::SliceRandom; +use rand::thread_rng; +use std::fs::{self, File}; +use std::io::ErrorKind; +use std::io::{BufRead, BufReader, Write}; +use std::process::Command; +use std::str::FromStr; +use std::thread; +use std::time::Duration; +use tokio::join; +use tokio_tungstenite::connect_async; + +use crate::structs::{ + GenerateAndFundWalletsArgs, GenerateProofsArgs, ProofType, SendInfiniteProofsArgs, + TestConnectionsArgs, +}; + +const GROTH_16_PROOF_GENERATOR_FILE_PATH: &str = + "../../scripts/test_files/gnark_groth16_bn254_infinite_script/cmd/main.go"; +pub async fn generate_proofs(args: GenerateProofsArgs) { + std::fs::create_dir_all(args.dir_to_save_proofs.clone()).expect("Could not create directory"); + + let mut handles = vec![]; + for i in 1..args.number_of_proofs + 1 { + let dir_to_save_proofs = args.dir_to_save_proofs.clone(); + + let handle = thread::spawn(move || { + match args.proof_type { + ProofType::Groth16 => { + let dir_to_save_proofs = + format!("{}/groth16_{}/", dir_to_save_proofs.clone(), i); + + // we need to create the directory as the go script does not handle it + if let Err(e) = fs::create_dir(dir_to_save_proofs.clone()) { + if e.kind() != ErrorKind::AlreadyExists { + eprintln!("Error creating directory: {}", e); + // Handle or log the error, but don't panic. + } + } + + Command::new("go") + .arg("run") + .arg(GROTH_16_PROOF_GENERATOR_FILE_PATH) + .arg(format!("{:?}", i)) + .arg(dir_to_save_proofs) + .status() + .unwrap(); + } + } + }); + handles.push(handle); + } + + for handle in handles { + let _ = handle.join(); + } +} + +pub async fn generate_and_fund_wallets(args: GenerateAndFundWalletsArgs) { + if matches!(args.network.into(), Network::Devnet) { + let Ok(eth_rpc_provider) = Provider::::try_from(args.eth_rpc_url.clone()) else { + error!("Could not connect to eth rpc"); + return; + }; + let Ok(chain_id) = eth_rpc_provider.get_chainid().await else { + error!("Could not get chain id"); + return; + }; + let amount_to_deposit_to_aligned = + parse_ether(&args.amount_to_deposit_to_aligned).expect("Ether format should be: XX.XX"); + + let file = match File::open(&args.private_keys_filepath) { + Ok(f) => f, + Err(err) => { + error!("Could not open private keys file: {}", err.to_string()); + return; + } + }; + let file_reader = BufReader::new(file); + + let mut handles = vec![]; + for (i, line) in file_reader.lines().enumerate() { + // Load the wallet + let private_key_str = line.unwrap(); + let wallet = Wallet::from_str(private_key_str.trim()) + .expect("Invalid private key") + .with_chain_id(chain_id.as_u64()); + + // Send funds to aligned from the wallet + let funded_wallet_signer = + SignerMiddleware::new(eth_rpc_provider.clone(), wallet.clone()); + tokio::time::sleep(Duration::from_millis(50)).await; // To avoid overloading the RPC + let handle = tokio::spawn(async move { + if let Err(err) = deposit_to_aligned( + amount_to_deposit_to_aligned, + funded_wallet_signer.clone(), + args.network.into(), + ) + .await + { + error!("Could not deposit to aligned, err: {:?}", err); + return; + } + info!("Successfully deposited to aligned for wallet {}", i); + }); + handles.push(handle); + } + + for handle in handles { + handle.await.expect("The task panicked"); + } + + info!("All wallets funded"); + + return; + } + + info!("Creating and funding wallets"); + let Ok(eth_rpc_provider) = Provider::::try_from(args.eth_rpc_url.clone()) else { + error!("Could not connect to eth rpc"); + return; + }; + let Ok(chain_id) = eth_rpc_provider.get_chainid().await else { + error!("Could not get chain id"); + return; + }; + + let file = File::create(&args.private_keys_filepath); + let mut file = match file { + Ok(f) => f, + Err(err) => { + error!("Could not open private keys file: {}", err.to_string()); + return; + } + }; + + let funding_wallet = args + .funding_wallet_private_key + .parse::>() + .expect("Invalid private key") + .with_chain_id(chain_id.as_u64()); + + for i in 0..args.number_of_wallets { + // this is necessary because of the move + let eth_rpc_provider = eth_rpc_provider.clone(); + let funding_wallet = funding_wallet.clone(); + let amount_to_deposit = args.amount_to_deposit.clone(); + let amount_to_deposit_aligned = args.amount_to_deposit_to_aligned.clone(); + + // Generate new wallet + let wallet = Wallet::new(&mut thread_rng()).with_chain_id(chain_id.as_u64()); + info!("Generated wallet {} with address {:?}", i, wallet.address()); + + // Fund the wallet + let signer = SignerMiddleware::new(eth_rpc_provider.clone(), funding_wallet.clone()); + let amount_to_deposit = + parse_ether(&amount_to_deposit).expect("Ether format should be: XX.XX"); + info!("Depositing {}wei to wallet {}", amount_to_deposit, i); + let tx = TransactionRequest::new() + .from(funding_wallet.address()) + .to(wallet.address()) + .value(amount_to_deposit); + + let pending_transaction = match signer.send_transaction(tx, None).await { + Ok(tx) => tx, + Err(err) => { + error!("Could not fund wallet {}", err.to_string()); + return; + } + }; + if let Err(err) = pending_transaction.await { + error!("Could not fund wallet {}", err.to_string()); + } + info!("Wallet {} funded", i); + + // Deposit to aligned + let amount_to_deposit_to_aligned = + parse_ether(&amount_to_deposit_aligned).expect("Ether format should be: XX.XX"); + info!( + "Depositing {}wei to aligned {}", + amount_to_deposit_to_aligned, i + ); + let signer = SignerMiddleware::new(eth_rpc_provider.clone(), wallet.clone()); + if let Err(err) = + deposit_to_aligned(amount_to_deposit_to_aligned, signer, args.network.into()).await + { + error!("Could not deposit to aligned, err: {:?}", err); + return; + } + info!("Successfully deposited to aligned for wallet {}", i); + + // Store private key + info!("Storing private key"); + let signer_bytes = wallet.signer().to_bytes(); + let secret_key_hex = ethers::utils::hex::encode(signer_bytes); + + if let Err(err) = writeln!(file, "{}", secret_key_hex) { + error!("Could not store private key: {}", err.to_string()); + } else { + info!("Private key {} stored", i); + } + } +} + +/// infinitely hangs connections +pub async fn test_connection(args: TestConnectionsArgs) { + if args.batcher_url == "wss://batcher.alignedlayer.com" { + error!("Network not supported by the connection tester"); + return; + } + info!("Going to only open a connection"); + let mut handlers = vec![]; + + for i in 0..args.num_senders { + let ws_url = args.batcher_url.clone(); + let handle = tokio::spawn(async move { + let conn = connect_async(ws_url).await; + if let Ok((mut ws_stream, _)) = conn { + info!("Opened connection for {}", i); + while let Some(msg) = ws_stream.next().await { + match msg { + Ok(message) => debug!("Received message: {:?}", message), + Err(e) => { + info!("WebSocket error: {}", e); + break; + } + } + } + } else { + error!("Could not connect to socket, err {:?}", conn.err()); + } + }); + handlers.push(handle); + } + + for handle in handlers { + let _ = join!(handle); + } +} + +struct Sender { + wallet: Wallet, +} + +pub async fn send_infinite_proofs(args: SendInfiniteProofsArgs) { + if matches!(args.network.into(), Network::Holesky) { + error!("Network not supported this infinite proof sender"); + return; + } + + info!("Loading wallets"); + let mut senders = vec![]; + let Ok(eth_rpc_provider) = Provider::::try_from(args.eth_rpc_url.clone()) else { + error!("Could not connect to eth rpc"); + return; + }; + let Ok(chain_id) = eth_rpc_provider.get_chainid().await else { + error!("Could not get chain id"); + return; + }; + + let file = match File::open(&args.private_keys_filepath) { + Ok(file) => file, + Err(err) => { + error!("Could not open private keys file: {}", err.to_string()); + return; + } + }; + + let reader = BufReader::new(file); + + // now here we need to load the senders from the provided files + for line in reader.lines() { + let private_key_str = match line { + Ok(line) => line, + Err(err) => { + error!( + "Could not read line from private keys file: {}", + err.to_string() + ); + return; + } + }; + let wallet = Wallet::from_str(private_key_str.trim()).expect("Invalid private key"); + let wallet = wallet.with_chain_id(chain_id.as_u64()); + let sender = Sender { wallet }; + + // info!("Wallet {} loaded", i); + senders.push(sender); + } + + if senders.is_empty() { + error!("No wallets in file"); + return; + } + info!("All wallets loaded"); + + info!("Loading proofs verification data"); + let verification_data = + get_verification_data_from_proofs_folder(args.proofs_dir, senders[0].wallet.address()); + if verification_data.is_empty() { + error!("Verification data empty, not continuing"); + return; + } + info!("Proofs loaded!"); + + let max_fee = U256::from_dec_str(&args.max_fee).expect("Invalid max fee"); + + let mut handles = vec![]; + info!("Starting senders!"); + for (i, sender) in senders.iter().enumerate() { + // this is necessary because of the move + let eth_rpc_url = args.eth_rpc_url.clone(); + let batcher_url = args.batcher_url.clone(); + let wallet = sender.wallet.clone(); + let verification_data = verification_data.clone(); + + // a thread to send tasks from each loaded wallet: + let handle = tokio::spawn(async move { + let mut nonce = + get_nonce_from_ethereum(ð_rpc_url, wallet.address(), args.network.into()) + .await + .inspect_err(|e| { + error!( + "Could not get nonce: {:?}, for sender {:?}", + e, + wallet.address() + ) + }) + .unwrap(); + + loop { + let mut result = Vec::with_capacity(args.burst_size); + while result.len() < args.burst_size { + let samples = verification_data + .choose_multiple(&mut thread_rng(), args.burst_size - result.len()); + result.extend(samples.cloned()); + } + let verification_data_to_send = result; + + info!( + "Sending {:?} Proofs to Aligned Batcher on {:?} from sender {}, nonce: {}, address: {:?}", + args.burst_size, args.network, i, nonce, wallet.address(), + ); + let batcher_url = batcher_url.clone(); + + let aligned_verification_data = submit_multiple( + &batcher_url.clone(), + args.network.into(), + &verification_data_to_send.clone(), + max_fee, + wallet.clone(), + nonce, + ) + .await; + + for aligned_verification_data in aligned_verification_data { + match aligned_verification_data { + Ok(_) => { + debug!("Response received for sender {}", i); + nonce += U256::from(1); + } + Err(e) => { + error!( + "Error submitting proofs to aligned: {:?} from sender {}", + e, i + ); + } + } + } + info!("All responses received for sender {}", i); + + tokio::time::sleep(Duration::from_secs(args.burst_time_secs)).await; + } + }); + + handles.push(handle); + } + + for handle in handles { + let _ = join!(handle); + } +} + +/// Returns the corresponding verification data for the generated proofs directory +fn get_verification_data_from_proofs_folder( + dir_path: String, + default_addr: Address, +) -> Vec { + let mut verifications_data = vec![]; + + info!("Reading proofs from {:?}", dir_path); + + let dir = std::fs::read_dir(dir_path).expect("Directory does not exists"); + + for proof_folder in dir { + // each proof_folder is a dir called groth16_n + let proof_folder_dir = proof_folder.unwrap().path(); + if proof_folder_dir.is_dir() { + // todo(marcos): this should be improved if we want to support more proofs + // currently we stored the proofs on subdirs with a prefix for the proof type + // and here we check the subdir name and based on build the verification data accordingly + if proof_folder_dir.to_str().unwrap().contains("groth16") { + // Get the first file from the folder + let first_file = fs::read_dir(proof_folder_dir.clone()) + .expect("Can't read proofs directory") + .filter_map(|entry| entry.ok().map(|e| e.path())) + .find(|path| path.is_file()) // Find any valid file + .expect("No valid proof files found"); + + // Extract the base name (file stem) without extension + let base_name = first_file + .file_stem() + .and_then(|s| s.to_str()) + .expect("Failed to extract base name"); + + // Generate the paths for the other files + let proof_path = proof_folder_dir.join(format!("{}.proof", base_name)); + let public_input_path = proof_folder_dir.join(format!("{}.pub", base_name)); + let vk_path = proof_folder_dir.join(format!("{}.vk", base_name)); + + let Ok(proof) = std::fs::read(&proof_path) else { + continue; + }; + let Ok(public_input) = std::fs::read(&public_input_path) else { + continue; + }; + let Ok(vk) = std::fs::read(&vk_path) else { + continue; + }; + + let verification_data = VerificationData { + proving_system: ProvingSystemId::Groth16Bn254, + proof, + pub_input: Some(public_input), + verification_key: Some(vk), + vm_program_code: None, + proof_generator_addr: default_addr, + }; + verifications_data.push(verification_data); + } + } + } + + verifications_data +} diff --git a/batcher/aligned-task-sender/src/lib.rs b/batcher/aligned-task-sender/src/lib.rs new file mode 100644 index 0000000000..008ff5cc59 --- /dev/null +++ b/batcher/aligned-task-sender/src/lib.rs @@ -0,0 +1,2 @@ +pub mod commands; +pub mod structs; diff --git a/batcher/aligned-task-sender/src/main.rs b/batcher/aligned-task-sender/src/main.rs new file mode 100644 index 0000000000..f726cd1e83 --- /dev/null +++ b/batcher/aligned-task-sender/src/main.rs @@ -0,0 +1,21 @@ +use clap::Parser; +use env_logger::Env; +use task_sender::{ + commands, + structs::{TaskSenderArgs, TaskSenderCommands}, +}; + +#[tokio::main] +async fn main() { + env_logger::Builder::from_env(Env::default().default_filter_or("info")).init(); + let args = TaskSenderArgs::parse(); + + match args.command { + TaskSenderCommands::GenerateAndFundWallets(args) => { + commands::generate_and_fund_wallets(args).await + } + TaskSenderCommands::GenerateProofs(args) => commands::generate_proofs(args).await, + TaskSenderCommands::SendInfiniteProofs(args) => commands::send_infinite_proofs(args).await, + TaskSenderCommands::TestConnections(args) => commands::test_connection(args).await, + } +} diff --git a/batcher/aligned-task-sender/src/structs.rs b/batcher/aligned-task-sender/src/structs.rs new file mode 100644 index 0000000000..a1c449f721 --- /dev/null +++ b/batcher/aligned-task-sender/src/structs.rs @@ -0,0 +1,168 @@ +use aligned_sdk::core::types::Network; +use clap::Parser; +use clap::Subcommand; +use clap::ValueEnum; + +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +pub struct TaskSenderArgs { + #[clap(subcommand)] + pub command: TaskSenderCommands, +} + +#[derive(Subcommand, Debug)] +pub enum TaskSenderCommands { + #[clap(about = "Genere proofs")] + GenerateProofs(GenerateProofsArgs), + #[clap(about = "Open socket connections with batcher")] + TestConnections(TestConnectionsArgs), + #[clap(about = "Send infinite proofs from a private-keys file")] + SendInfiniteProofs(SendInfiniteProofsArgs), + #[clap(about = "Generates wallets and funds it in aligned from one wallet")] + GenerateAndFundWallets(GenerateAndFundWalletsArgs), +} + +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +pub struct GenerateProofsArgs { + #[arg(name = "The number of proofs to generate", long = "number-of-proofs")] + pub number_of_proofs: usize, + #[arg(name = "The type of proof to generate", long = "proof-type")] + pub proof_type: ProofType, + #[arg( + name = "The directory to which save the proofs. You'd then provide this path when sending proofs", + long = "dir-to-save-proofs" + )] + pub dir_to_save_proofs: String, +} + +#[derive(Parser, Clone, Debug, ValueEnum)] +pub enum ProofType { + Groth16, +} + +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +pub struct GenerateAndFundWalletsArgs { + #[arg( + name = "Ethereum RPC provider connection address", + long = "eth-rpc-url", + default_value = "http://localhost:8545" + )] + pub eth_rpc_url: String, + #[arg( + name = "The funding wallet private key", + long = "funding-wallet-private-key", + default_value = "" + )] + pub funding_wallet_private_key: String, + #[arg( + name = "The number of wallets to generate", + long = "number-wallets", + default_value = "1" + )] + pub number_of_wallets: usize, + #[arg( + name = "The amount to deposit to the wallets in ether", + long = "amount-to-deposit" + )] + pub amount_to_deposit: String, + #[arg( + name = "The amount to deposit to aligned in ether", + long = "amount-to-deposit-to-aligned" + )] + pub amount_to_deposit_to_aligned: String, + #[arg( + name = "The filepath to which to save the generated wallets's private key", + long = "private-keys-filepath" + )] + pub private_keys_filepath: String, + #[arg( + name = "The Ethereum network's name", + long = "network", + default_value = "devnet" + )] + pub network: NetworkArg, +} + +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +pub struct TestConnectionsArgs { + #[arg( + name = "Batcher connection address", + long = "batcher-url", + default_value = "ws://localhost:8080" + )] + pub batcher_url: String, + #[arg( + name = "Number of spawned sockets", + long = "num-senders", + default_value = "1" + )] + pub num_senders: usize, +} + +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +pub struct SendInfiniteProofsArgs { + #[arg( + name = "Ethereum RPC provider connection address", + long = "eth-rpc-url", + default_value = "http://localhost:8545" + )] + pub eth_rpc_url: String, + #[arg( + name = "Batcher connection address", + long = "batcher-url", + default_value = "ws://localhost:8080" + )] + pub batcher_url: String, + #[arg( + name = "Number of proofs per burst", + long = "burst-size", + default_value = "10" + )] + pub burst_size: usize, + #[arg( + name = "Time to wait between bursts in seconds", + long = "burst-time-secs", + default_value = "3" + )] + pub burst_time_secs: u64, + #[arg(name = "Max Fee", long = "max-fee", default_value = "1300000000000000")] + pub max_fee: String, + #[arg( + name = "The Ethereum network's name", + long = "network", + default_value = "devnet" + )] + pub network: NetworkArg, + #[arg( + name = "Private keys filepath for the senders", + long = "private-keys-filepath" + )] + pub private_keys_filepath: String, + #[arg( + name = "The generated proofs directory", + long = "proofs-dirpath", + default_value = "devnet" + )] + pub proofs_dir: String, +} + +#[derive(Debug, Clone, Copy, ValueEnum)] +pub enum NetworkArg { + Devnet, + Holesky, + HoleskyStage, +} + +impl From for Network { + fn from(chain_arg: NetworkArg) -> Self { + match chain_arg { + NetworkArg::Devnet => Network::Devnet, + NetworkArg::Holesky => Network::Holesky, + NetworkArg::HoleskyStage => Network::HoleskyStage, + } + } +} diff --git a/batcher/aligned-task-sender/wallets/devnet b/batcher/aligned-task-sender/wallets/devnet new file mode 100644 index 0000000000..42cb8555e3 --- /dev/null +++ b/batcher/aligned-task-sender/wallets/devnet @@ -0,0 +1 @@ +0xc01362fbec4384a90802c33a2f31b925e7d22b6e36c657fc317c7139ff19e097 diff --git a/batcher/aligned-task-sender/wallets/devnet-backup b/batcher/aligned-task-sender/wallets/devnet-backup new file mode 100644 index 0000000000..1d910473d4 --- /dev/null +++ b/batcher/aligned-task-sender/wallets/devnet-backup @@ -0,0 +1,1990 @@ +0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897 +0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82 +0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1 +0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd +0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa +0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61 +0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0 +0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd +0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0 +0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e +0xeaa861a9a01391ed3d587d8a5a84ca56ee277629a8b02c22093a419bf240e65d +0xc511b2aa70776d4ff1d376e8537903dae36896132c90b91d52c1dfbae267cd8b +0x224b7eb7449992aac96d631d9677f7bf5888245eef6d6eeda31e62d2f29a83e4 +0x4624e0802698b9769f5bdb260a3777fbd4941ad2901f5966b854f953497eec1b +0x375ad145df13ed97f8ca8e27bb21ebf2a3819e9e0a06509a812db377e533def7 +0x18743e59419b01d1d846d97ea070b5a3368a3e7f6f0242cf497e1baac6972427 +0xe383b226df7c8282489889170b0f68f66af6459261f4833a781acd0804fafe7a +0xf3a6b71b94f5cd909fb2dbb287da47badaa6d8bcdc45d595e2884835d8749001 +0x4e249d317253b9641e477aba8dd5d8f1f7cf5250a5acadd1229693e262720a19 +0x233c86e887ac435d7f7dc64979d7758d69320906a0d340d2b6518b0fd20aa998 +0x85a74ca11529e215137ccffd9c95b2c72c5fb0295c973eb21032e823329b3d2d +0xac8698a440d33b866b6ffe8775621ce1a4e6ebd04ab7980deb97b3d997fc64fb +0xf076539fbce50f0513c488f32bf81524d30ca7a29f400d68378cc5b1b17bc8f2 +0x5544b8b2010dbdbef382d254802d856629156aba578f453a76af01b81a80104e +0x47003709a0a9a4431899d4e014c1fd01c5aad19e873172538a02370a119bae11 +0x9644b39377553a920edc79a275f45fa5399cbcf030972f771d0bca8097f9aad3 +0xcaa7b4a2d30d1d565716199f068f69ba5df586cf32ce396744858924fdf827f0 +0xfc5a028670e1b6381ea876dd444d3faaee96cffae6db8d93ca6141130259247c +0x5b92c5fe82d4fabee0bc6d95b4b8a3f9680a0ed7801f631035528f32c9eb2ad5 +0xb68ac4aa2137dd31fd0732436d8e59e959bb62b4db2e6107b15f594caf0f405f +0xc95eaed402c8bd203ba04d81b35509f17d0719e3f71f40061a2ec2889bc4caa7 +0x55afe0ab59c1f7bbd00d5531ddb834c3c0d289a4ff8f318e498cb3f004db0b53 +0xc3f9b30f83d660231203f8395762fa4257fa7db32039f739630f87b8836552cc +0x3db34a7bcc6424e7eadb8e290ce6b3e1423c6e3ef482dd890a812cd3c12bbede +0xae2daaa1ce8a70e510243a77187d2bc8da63f0186074e4a4e3a7bfae7fa0d639 +0x5ea5c783b615eb12be1afd2bdd9d96fae56dda0efe894da77286501fd56bac64 +0xf702e0ff916a5a76aaf953de7583d128c013e7f13ecee5d701b49917361c5e90 +0x7ec49efc632757533404c2139a55b4d60d565105ca930a58709a1c52d86cf5d3 +0x755e273950f5ae64f02096ae99fe7d4f478a28afd39ef2422068ee7304c636c0 +0xaf6ecabcdbbfb2aefa8248b19d811234cd95caa51b8e59b6ffd3d4bbc2a6be4c +0x70c2bd1b41084c2e2238551eace483321f8c1a413a471c3b49c8a5d1d6b3d0c4 +0xcb8e373c93609268cdcec93450f3578b92bb20c3ac2e77968d106025005f97b5 +0x6f29f6e0b750bcdd31c3403f48f11d72215990375b6d23380b39c9bbf854a7d3 +0xff249f7eba6d8d3a65794995d724400a23d3b0bd1714265c965870ef47808be8 +0x5599a7be5589682da3e0094806840e8510dae6493665a701b06c59cbe9d97968 +0x93de2205919f5b472723722fedb992e962c34d29c4caaedd82cd33e16f1fd3cf +0xd20ecf81c6c3ad87a4e8dbeb7ceef41dd0eebc7a1657efb9d34e47217694b5cb +0xe4058704ed240d68a94b6fb226824734ddabd4b1fe37bc85ce22f5b17f98830e +0x4ae4408221b5042c0ee36f6e9e6b586a00d0452aa89df2e7f4f5aec42152ec43 +0x0e7c38ba429fa5081692121c4fcf6304ca5895c6c86d31ed155b0493c516107f +0xd5df67c2e4da3ff9c8c6045d9b7c41581efeb2a3660921ad4ba863cc4b8c211c +0x92456ac1fa1ef65a04fb4689580ad5e4cda7369f3620ef3a02fa4015725f460a +0x65b10e7d7315bb8b7f7c6eefcbd87b36ad4007c4ade9c032354f016e84ad9c5e +0x365820b3376c77dab008476d49f7cd7af87fc7bbd57dc490378106c3353b2b33 +0xb07579b9864bb8e69e8b6e716284ab5b5f39fe5bb57ae4c83af795a242390202 +0xbf071d2b017426fcbf763cce3b3efe3ffc9663a42c77a431df521ef6c79cacad +0x8bbffff1588b3c4eb8d415382546f6f6d5f0f61087c3be7c7c4d9e0d41d97258 +0xb658f0575a14a7ac05075cb0f8727f0aae168a091dfb32d92514d1a7c11cf498 +0x228330af91fa515d7514cf5ac6594ab90b296cbd8ff7bc4567306aa66cacd79f +0xe6f80f9618311c0cd58f6a3fc6621cdbf6da4a72cc42e2974c98829343e7927b +0x36d0435aa9a2c24d72a0aa69673b3acc2649969c38a581103df491aac6c33dd4 +0xf3ed98f9148171cfed177aef647e8ac0e2579075f640d05d37df28e6e0551083 +0x8fc20c439fd7cf4f36217471a5db7594188540cf9997a314520a018de27544dd +0x549078aab3adafeff862b2d40b6b27756c5c4669475c3367edfb8dcf63ea1ae5 +0xacf192decb2e4ddd8ad61693ab8edd67e3620b2ed79880ff4e1e04482c52c916 +0x47dc59330fb8c356ef61c55c11f9bb49ee463df50cbfe59f389de7637037b029 +0xf0050439b33fd77f7183f44375bc43a869a9880dca82a187fab9be91e020d029 +0xe995cc7ea38e5c2927b97607765c2a20f4a6052d6810a3a1102e84d77c0df13b +0x8232e778c8e32eddb268e12aee5e82c7bb540cc176e150d64f35ee4ae2faf2b2 +0xba8c9ff38e4179748925335a9891b969214b37dc3723a1754b8b849d3eea9ac0 +0xe66935494406a2b7cddd5b90f0a416cd499353f9f5b16d3f53e9db79b5af315c +0xdf1d05a0dc7ff9b702517352bbcc48cd78c4f1c8e7e0be4a7e8c9d8a01318dca +0xaf905e7d181f83cf2b32316c035db8cc6dc37b8ee658a39c648a40f7f5aea732 +0x2e07199788560fbb67ad75c647ab4c1288c035e370cd8efd8cc98c117a9e1dbc +0xbeab65f35a77de7af63a97748e6a3bb90372f9225ebc6e8d0f1dc14098ac683a +0x0ae04d323697ac9f6590e30ac497b8bb84ba66a3f7db8648792e92a5773c9dc7 +0x7cda9d93162b809fb8474f22c724da7e9590ac3bfba54ec15bdd54953ab3e5ff +0xf6702b85537d0a844debc36e28e409af35c683a0d968ff1a01eab8bc17542397 +0x4034badb4e3cdf45d4032c7671a82d4967a0ce4c1bf3ddb72bf8fba38c151f6f +0x967483ff906486d78577d1749000ddcee7c65f480f154fb5d9d45170f0489d33 +0x9c9186fb8f85adc661f3da56dd64e3b9a3f95b17c05ed9c6561f9ee9225da327 +0xef463dfdd318a103afeb0e4e75b3c3c0b13a681c2dc48b22bc05a949d5fa28d5 +0x165b52d20a0ebc82b1e87bd02e221f3a2bec6ff6f61326eea3e6180cc23ccf43 +0x945ff88d4066b8f6d61eb1dbc7c31dc1ad0078b8a781e0ea7b4c4f097e62dfd3 +0x1ecfea2bcec4e5e3af2430ae90d554bc272cd7743efb66138c90840c729ebffe +0xa6d83a50114f5bbd5557832caf948c4f202e31e7f8dd3bffdb579bf78dc4c166 +0xf6b39438613b3f5dae4e84a73e90ea8a4efa0ab7b69cc532fdfe3932d20d52bb +0x41f789906acc91db1f402d803b8537830856da0211f4ccf22f526d918b26c881 +0xc1b5e6b1cd081956fa11c35329eeb84d31bceaf7253e84e0f90323d55065aa1f +0xa3f5fbad1692c5b72802300aefb5b760364018018ddb5fe7589a2203d0d10e60 +0xdae4671006c60a3619556ace98eca6f6e092948d05b13070a27ac492a4fba419 +0x13986e078393fca89aedc2ecd014df01dfbff153434c04b2e38cfedcbef710f7 +0x7382cc0c1dd9fc4ff87ed969fafac4c040ebd4890d0b8fa35781524df5b15476 +0x360e8f096c6aaec3c922df1a82a7b954b69b42bdc20a6b71b2f50438c13d2ec5 +0x956840865a0d252ee192c683c48befc5d8432aa7b334be6cb79133cfacfcda1a +0x9dece36dc7cb98e2e521e85efa7417d68744f00ab93caf70ec39dc3d6b16d916 +0xc69422615b990ce3dbed91d6ed41e378ff92f0ebf23b8d18bf3db912c6797fa1 +0xbb78950939f8a5d5c0d3225d4d38cbfd7eace2c2b8347fa8ca97726cd10e486a +0x42e75fe4e54a2126d34a7e302d8dff04d888dbd434a6c690cfc2e1e3d9499c10 +0xb479c6ebcce0347b5a9335f52519198307f01a7c4917e6b1e93e123a77e74aff +0x9e4e3ca5a15203ef569824c74164789921d372c12b83f1aeba7d4e096a8338fd +0x3659cf616cb9eff3ecdd1ce36221a3744df6deb907007dc2ad4330dc66aa2d13 +0x23fe537a715500e8edf9a949d1a5894fd5296a257b412e6f7e598b22bc62b060 +0xf1a9dd9e1f43e6832b9950520b8fe73203d14f171cb5b07dceb0d3090878045f +0x2130940937fb474f9a6ac3ea114536c5d693ae1f918bec1e33e98de810db312e +0x755e7b431c9224a9d798e1c03d0f8d7084486aeee98ab8ea87d4538a502a73c8 +0x914a73ad0b138eedf80704f9ccd81be56f33bbd5f8b371c82de3b6b6a5a23ff7 +0xf40eb48d6b4964072dad455aadf0f84e94d00a19695865bbe226f9b560c9ed76 +0x69fcf89b49fb124ae6f6004a7028184cc8620f1d6e9daa9f97098ef693a03f80 +0xcb926b6ec105a6c4a04a64dd1edab6b2a52c4ad5ec91ea1155ed80e43d4b5753 +0xeb949ffe81c4e6f9c0802eb23f2352143584e124420c529f7f36e99a4388f8dd +0xe1c267d388404c17aa37690dd952df1f92d77cafd9586a8f1ec55bcb76a7bd72 +0xc6c3aac097ed6d31631dfa9e90afcfc017fe3bebdc2a25228b76cc89ea2329e2 +0xcdfe2ef67fba32ae8f2eaef3404b9326e497856c95a7e892b5cd14d6c0db9bba +0x4e2860f6001eda84086f8334a1fb30c9f7da9a9945cf477d07da504a40a3ffaa +0xe8a11992568a8a9f8ef966dc68237833fc726d4c78718c0aba510b029dab86e5 +0xd7cb3084b252751f5a6a3ec06a267451d390724fdb3f572560d998af8d00dae0 +0x9e56ccf010fa4073274b8177ccaad46fbaf286645310d03ac9bb6afa922a7c36 +0x3485433f309a15382a616266b0d9bcad7bfd94026f51ddf226a9b2c01100753f +0xff95c96bf8aeb045cb4412b6a5790ee415ac56cdb2f793d3d39ed2b99bf36d7b +0x04aa05e0090ecde1658293ac3c2e2e5815d12b3eea881c4f3a03f438d5702550 +0x3fb3e3897798d4aeef73cd15a4fcc08589aaabec2d2ae8edd9aa0af4de818d51 +0x8a9c0a6175796266811b71b781b5e904ddf2667577821f1ea771a095b34d1e2d +0x3f3902b5229286a6ae7aab0accae2f75fb3350b009c6a3dcef9010fa7fd88f86 +0x9f3164decddb563079c43f281edc6fafdb6cbbaf5fcae2d94bc061ac5db1198b +0x5e32a6927be49af4d1dec605e1f0fd82a43e8f63b44ba44358c70f289c10f5dc +0x1a04c0b38b8a2f5cc7069a246ce237601dfb10e35dd5d7742d115333950bbc9e +0x6f9ea5387d5fd341163fd5953fc1905c9fc45934455ab72376d65875218fb52b +0x49a4c2edb2ed23bcb545dfe29e66aedf7bee22c34ab2985570cf0bead212a872 +0xcdefba1d86c5dba7e79045d3d9651c93ff2a9a6e04c19840b319943cf69abbf2 +0x00d0d1d0ad58ae173096d9c2ce22a3afaa6b7bfd2303e02b5be06ba14166287d +0xe85a4387a8dd7dacc0c10fdc8179c47bb8c3e95bc9a4e16d23c3f24c075240c3 +0x753cac0a8953fe9586774347cf976bbd0c20a9b20d0673fab24c70f22968ebec +0xefba72e89d0c50b6482d5ebee569d535d9b8ec36c894d5cdb2ce6865424c2fb7 +0x07e224a335ad28bd1bd1720fc8a7dbc5b21e405e9b404ad2b4d4b861546769d6 +0x248cc6dbf36ea49bd5201d32284d9434a3b40d4c627f65703337dd5d208faae9 +0xa12a5b6a7a870cfac5c2fce0e27a8a2aef0b2bd885e20bd74b0920788f8354d0 +0xa92912c2bfcacf51e9553895d7f534df8de94a6736a1720afb901f79e75eab7d +0xe0d22c53f9ca377cc7efbb6d1cc5a7f4889a835fc6d45a0246813148bbfdd1f8 +0x55b54cb79a181a07c1d2a21434367e87d300e79e1250fe3d7b1177f557168771 +0x2dfb47b1acdb34494d130cca790c19a7ad0f9b4561c3e184b3a20b1ace7ede04 +0x1d5350cbc0d917dde29e4b5c68c0d4f22954eb5c59b323628942eecc20f0c879 +0xc61541515527c1d8c39176526df74ac1cb020de2fb977310e0871a4d2bc2b959 +0xabb054f51848310ba938942e7ed31625ba8e7f660726ad52309c048a5bcd2f2d +0x4709c005ae2609eaf81911438cf2f5c6b80d46af4821b703b05f2a17dd0d5394 +0x5a470f4130a4cbc39a808fc82e4c44af94ba8eada0c8300254828d3ce0052ec8 +0x523bf92cf62b4f8dca313c494727bd3d2777f1d5dc1cc09eeae8a730015d8bf7 +0x8ab60b0289efe597a1c0536241f1f86a0ef950e0a1da7169f8fd39242a4a9a31 +0x18d11eb51348341cb7d787e2174a8f0b2a76557ea03dddc13055ca206fdca55e +0x21a71648ac75efde8c23180ebbcfe36b3d4d46b83951d22db77f11059d592698 +0x2b1fe903563f40b41b5a800000473d4b84a23ac8d2f8bed1c9fece936fe46495 +0xe7d5b09518f7c5d945f8861d4c554ff93633c609d5cb109e0c012bfcc272ab88 +0x35e66144e44e2afea7a0d2870f7a66c59455145026e8744cfac3c895f603d8ed +0xdda3dfedc05d88c00d8c304f01be4d566066c553d0d4dae1c582ac1212066271 +0x5a855ed2296b386ff056ec8917e5037115df187ab13a4c535a346ef5ed89ab32 +0x09e60e0e5cbcf0b58e88a6506d0d3c24cd2210ea93a2d4f5abedbac3f7059262 +0x11c9d25faf75494ceba12b9e259ef63246976e3cd37b22c1fdbd0f40f4883e55 +0x51bc341f9bd42cd0649ad2ff30862a2b70fd308553625fbb782fe7f58d0a8f7f +0x61d202fc3d2a61588817438a07bde05f85fd8e3b09002e115459ef0dcdeb2b83 +0x8f24fe8d528bf343ee224bc92d90f628dd1f1caed30bafd93ae749cdd721497d +0xe13548a057b4901d0ab7bb68b0ba101ef4333329237fe176bb262326c2cc8216 +0x4102e6bb1b9b329dc4cf3a47ec54fee3d5d40a2f79509434558dad396e6979fa +0x60b5e1ced01781ce3c52b5b9e9b83f62087518dc3010401a5e7a2bae1fea5300 +0xbbb1c2d826ff4a62fe8b5f63173c8ad9bfe3eb8c0ff2f5a000dd61fdf5d7c531 +0x2455397264eba7ebbecc7699d8b42b6b3d5e40e4c56b7004d906e230db65a348 +0x6816e277a0be663d9d6bafe325bb2b712f2fb7c1f0415abf469e9f98abee02c6 +0xbcb94b7ff4b6be5002cd0e2ebb57293f8d3c4b3209dd3892dfade5e1b806b1fa +0x426bf37e40f77275c5f293e490b7806dc82509c9fc2bd044f509485ca6a932c2 +0xe80693ebd618626ae88e349d3d8798ac2745a1a82ea56ec42cc85ec59f7b82b6 +0xcbd9a89c258df6c08135bdd2770a92a3b0bc5a42dc08f285f091f1b244e1d065 +0x9e8480dcd0e2a35ee4716269ff9b4426791547c805af603dbe6b2a0ef011fb50 +0x0d6b9e5f22ceeb524cfd976fdd907e2c8f4165fb2dc9295dca968062852357af +0xd051f407a61ba9538518a2d99cef2116f23fd5db9711e063318932c3bff42104 +0xe444a661e2860b70afce0f6f065526889d6312dec69531968eb6dada85daf40d +0x7e75b3d870b9ba859e6759d022ce47c66b3d4c2a47f0c11c966505480d52eccf +0x59fb80a4096fb2213fb731a96d05a69e9fd5c911d3205293985a9b29439f8ca1 +0xc5d528b6283bc8f870b68a38631781d651ff8535a914995a1a938c70bdf0fc97 +0x326c946bae242b0f2a633d339d1e701d49c1407c7d6a5e77c7138ab22b8cffe9 +0x7f22821ffee838e4bc689997cabadfc9758c809f61c1e74da0cc693a41b933c9 +0xa33206e4347f28befe79dfcaa0472cb480fcac201b06779f01dc9ef9200304d3 +0x426275d2d7f49348c074458839945c85fbdfafdb4786570c0493125d9d70081e +0x43f9da23c2b3934c017c4e995d427ae5b3aa5db231467ef5211bf6d35eea3924 +0x98c322422fcb314e45c4302f68907f19b6071d4e0f40ab2fdae518e443a63a1e +0x747ebfee29d69c5f7104aeffef639c3e33bba755e6c893a4e3403239d9079001 +0xd27798744baaa809fb04fa587023a3f80dfae7a9f6a2978d1fad89571d84d478 +0x315af7e67ccb8057a7a3042819b23f54c0cb363d3f7940eb94c31cb96fe76c11 +0x69c8ddd795b4c62ed26f47378cc6cacf756da820141e266adf88f5030b70ebae +0xc3b3069db55f91b22d6ee2c5a6ef1abb5496459b31c0c8b99f8144b250bf4741 +0x137de7434b515433963e00d1a603ad183ebd6cc544c69da5434adbe4ed661a9a +0x82a73fdc29a4efc87a00e5481c5487a805aa9d5a61899916f33c7c64c3ba39e6 +0x07b012df6827416cd5c59d1085fd464bba4fcfaed7c31fc9e6ea5aff9099ef6b +0xdb3cbe142405613728f68f593129d22443904ebf0951af698d71f496de47c5d3 +0xc502efd23d6c8d503ca9b7d5de5465e50fdb110a8c64113a5e08d66a1b98ce38 +0xc38de1a2f0822d9238571424bed611800a8daed60663c76b8f5d0a36e441a3b0 +0xb7fa7b57b3b9cb84d0b8ff88d9b42c2545ec2f57eca34f35e687b4a69a5bb736 +0x5d9b1cb39b6a1b144fc93edeb50e7199f64090026a0564dad11c878939755534 +0xe85d4679a98de2f94bd839fa79fa49b40bace9967fbeeb20db283933975a9fef +0xfb07091daf99c1d493820ae8dcbc439b48b13ca844684bb1dcae27c9e680e62b +0xac889ab5e011c06ceda7b35fd96931f6b9ad22186382e0bafec086863824b09b +0x9904da7fe786e5d1f8629b565b688425d78053d4325e746c5ad8ac4328248037 +0x45d5969c824aaf3cd51cb7ef6ad20d55d5cd1d8302fbfdb9639909c633f11e69 +0x7f7dc896ac13f07eff6235f8ae12726e24814fb73afed3c7ce6f3b8214fdf61d +0xeb6fa77a9e569391754afc0efeb081e9d03db6bf5769e2da6e2b5960e8ac4d59 +0xdafbe70359c299525046fd039364bcef2f876daf8b9baf667d0365995b3a3c21 +0xd6cc04e73641afc726557d28421b01bdecb97306b97536c75076839badd54617 +0xe6821abf5467cf0b338b6a46ccae4d8e4c2b52fffce1fc0c08b4ad52cb9f057c +0x204eb436358c5c85bca2872a88fc60022ecd5c5ddb999716384fa0e48a4d9ede +0x79a200706a98a5149e0c85034fd73bda2ae9f96e4826015c12152ec8677d52b3 +0x0b877bc5d5a77be9fd7361c4df8e58d3b13e9720af94a982719fec4007847713 +0x0e7b2b0b7bb6de99693e8cbbda1d41e9367a5ecf860ccc439095999d0493b86d +0x87e04b328797f748fac2ae83d0e1cfe8fc66c7e63228d89c5bc5ff2f5da2e594 +0x83c9436017d99395f9b50bf587494342ad49427424175dd59b60ddb7df652391 +0x08b9e0a79b3ae903d71c24c0713a871da53041a04067784aa2c56d448923aff1 +0xf67e5c0120bae3df8282022ea121fd668d8397c2dc68f97a9052ddf7ee594e48 +0xc358c0b90479a56a6d93dbdc4e95eff85441310970a74e79e44e0ca2ffe7e81f +0xc570d4c82167be3ba311e99a4be6924df2a1edb24003d2e245ed61b9a71738fe +0xd55919a09e5af4879081144966ecbc0e40f8a64534e9217b264d5f812521a1bc +0x693d63ab8a5ce98a1deaabcc63524d42f5d7f66ee30c19f206e193152c56b41d +0x6a76785e9c9868dcc0a9eb7a0d72d23b0e52c1d1246799bff0dc82323951e1de +0xb83ed0d95c93c677c5371710653a174ba6b36c597c9338d2bfa148700f9f9182 +0xb3aa24a3ff1615f1cbe4113a1e9826ae2ac0bae92b028a38fb05239337d1326a +0x8f153ae6e8d3e8c0ade94fe672fd08f90a00f964ca4e2f048c217719a1bef63a +0x8ea55aee2acf3b129485916e9b139ced7eef032f6736e2936d0b6c548b08995f +0x20ecd9ada72b89f89c6ec72d0d6e035639b6d691e61ed0d0765f9d8f125f19c3 +0x917deda585bf14c783ddb671cf24c391a0ba067d886bbc127a9683ebab92fc44 +0x5dde4256aa2d3227f27b4860fa287bd2269f2e11c85385fa198face7a53d92a3 +0x42f9877ead3d657998601eed97cd721dae2238484e6fcbfec3d61025dc03f0bb +0xa01265eb20f0e670fe8038bbcb336379620146405f7a72bf96049c2681f91d40 +0x2b6ad735341b6b072c475dd76f5c3bd9bdedbbf62295be2ce7deceb890889a19 +0x127b46521d69451f40d5cd267819283e636e312c69d62aa47cb09f6c798c6883 +0xbd9887a2638c15ff96ec8979812ac8951f29aad66315e476c8e088ad5b2e3589 +0x0d4be759e78bca120345820d936a0c13f54cfca3c3f959c62fcc3841cdc8f053 +0x32c1eb9d34c460bb7c6f2fc7c0c61198c1d9315463072abe2c290c184c16ce51 +0x8b5256538c7e3e07a8ea9612ac2b9ff91002c829efbef9045b614ac46cb9c25c +0x8b3ecdedae0e156642ddd877d6482fd9f00907027ec7ced2718fe4cb7036dbb7 +0xb9713c71e2149b7afad41a351f7cbf2cd1eeb20333de038410cf691201684a73 +0x670c5c428f99af33a244e0e9a6a1542dba40d45fee37191ceecadb601dfcbecd +0x52877317c0be57066cd609b0adea58f9f5965ad7c7e09a883789eb158a39dd9d +0xf5be9d3c549f4dbfa1c5131a15fe832e64f25d1b0e13aab50ea2c325cc74735a +0x84446166e9b7597604ea5850517f23a9d2e68bf3bbfad7a1ffbe33c26f9f29bf +0xa51b21c9a49142c5564f7db7c8f1e00adc6bcd64f9af9bf67ac8db570c18324a +0x26e1850156333efba84b22afee203b441d33edd4bf455591b9d188f70969cc7d +0x258d60d00d239b66054e0a047181bf319d55152d94760dfa31bc183214ce2904 +0x8edb68faf1ed146ab03ee31148dfaab7c613e284f4138d278882b4961d47d3a7 +0x17bfa1c83c8b7f26e1b90f5887a4c9b5a8e51d0d4b8c96aee8207fd47bf55af9 +0xb12314189079e58326214784addb297b700d5516cd973bb2830e4e2df54d5481 +0xf342200f80367cd35715b37f7977c4be4d1afe01f7587e4ac242dc35e2353fdf +0x0c109833d558e07a1848480fbf7719e3296c81d86a080a7712ce18281fe8ead8 +0xd0973db11d18c4492a8df53f2226b4207396ca995bcbc5e7eddd4fd00e240fa2 +0xbbd18eb613cfa479dc4026cbc9789e56b3f63affafe1a894bed762b108cd8623 +0x7935db0e42515dcf678e046b83dd7a8cc7e61603f12f0b10ef30bd0ae68373cd +0xe2e9ad72027eeecc03e0b99b56f9e7261fab000a49cb525de3431ab7b4930148 +0x67fc296ea905a2ed491dc19212ceec9d05e1209b82a92e8fa7b387ac75472fa8 +0x7d0780326532db792495e3da0fa64ebd6d8d892f4b81d2272c04d7017637f29d +0xcf2f10fb73543d5b8f17bb5af76c9323025e41ad7407cd5f6920a5a58f38df7d +0x6de727158e42b4709ec657b64d9c5aa186d8eae4dff27cea4f4b405100f96315 +0x5870133d571e4f43341ce902f3a86aafd7b250d2372e686f97fc82504d28d2b7 +0xab1ee3a8f40afbebd769911bbcb8ee7ebeb8e41d234250dcf7eb7a4044c43933 +0xb055a1d24c1ef66faa3b62f8166a6057e8f5bced9d5bbc39e5b6fe88dc20cd96 +0xa87bd7caf07ac860800d1fcf7e7dd5dace6e737e8a0e0ff9ad383065ef3e846b +0x758691193b8bd439c1995f45f1fe04230c0c76a881f560aead6b49b44e99604e +0xadcfe256614cce705942e2f16d5e4c1f52080f8a5d8afbb554d45c1a8832ce36 +0x284f719926426b45e7f547977b774bfde2d08a9c9850402b0acaafe99b84036c +0x05899ddedb736e0eefb6283c33cda84028dd43dfa7f687776d6d9b8e30a92bce +0x340b502ade3aeee7231e3674911b795ec9a9f8b14c71a80cda73b56a39fc506b +0x08442ba44c340932684a81d29a5483f76821deb0ac4283e766dcffa8e1265b44 +0x01abb54cca57a987c6276fe391ee2389ab84cd2ce27cb3704e2248ba06359620 +0xb0de1b2b206d3dc3d8a7274ec8d76f8f7278e33c525394129ca44c794ad6edc6 +0xbe36e25def15fd24bd1a882cd440346819bfaa17d33c5762c649155b928e0e30 +0x09e8aee14c2e5d11408fb5bf00b46116f7a4d9fe3be479b2800f01552714ccdc +0x22abc251603cba815f254d37296a2278a1c22b6ead1a8945b5f665f0c1e0c93d +0x400ab247ef5d1436908ba14111941dd3d4e1526cfde6b0f6f17f8896f5864035 +0x033f6420efd8395b86f1e6c9c3f118357ed925ac8ad5d0843f28f2da93efcac2 +0xd8ef91d4ba0f8425b6809efb19ccf1d9319aff04f36f9e49a22d4fd405b5186b +0x6e029a3bfb1116951bca513d8b7541c91063285cda27de90c615426b64ec1175 +0x567b6250a26a5c1f7d48a6c5db9ff29befec0c22a77f39f0394ab63b662e92e7 +0xe0607e26371c169845dbd177ba9e1f0d79b69aad85ccdfef2c89d8984bd2eb5e +0x7002b29c8e65b4c276628d4913fd74cb4e05b942518b2580c0c7158ba8246aa5 +0x8164de5fcc226c3f3d31164d4f8f8149cff905d43b1bc1818b2983aacf45002c +0x19969d7fa1361445a9e0cf45e09840dd1013b1bd37029e88bfea0fa7d565484c +0xff8c0c80e8c4b9d00e6a7c2bae0858600299dc179ad128814a59d51092eed767 +0xded2fc3dd32a4a6b04596a4b5f4f96f7ac0964caa0798fc5584f01c248422db0 +0x70511e8eca9d1404b9f150f2f3d7d2b6632ef3953251c104d6dd78f91f091e8c +0x6efd05d456d918b2b379ec2ff7d6a3c038f4d6babb2a2c6d35eff3f2b049d42e +0xca50d47af6446a6e81a0023fadb81242424ce97fbc4d3235e19c463e2f4d2949 +0xc849c39792142ca26ddfed8b6a578573a0bb1369248af8f97c7f7f6b7efc38c9 +0x46cee3ba8e460b7f19ce4c990ed682d356bfd0035baa182804628f0f40d6492b +0x3986e2be03190bbb4da246caf1544a6b10a57c3fd43153af54809b558bd6c8ac +0xd4f4e12ad8fb6a92394497e3c7d2cfc1ae127abbe70c00cb5fb58c1d192e5d0b +0xb70ce1834afa7785cf04f060fa3f072e1618e3d202b3de0130a6e921da47e51c +0x31f01500fb999fe79d19fe9f22d67aad4968a97fa15c1d22281c96357df5feaa +0x7732ac60e9225701b43e7f51e6b5b0f3b26fd20b9e05b640c02bd54d625c5a91 +0x679d85b14540ff74718edbdcf4e5b2ff09288117076092c66c5ced052f84b366 +0x3a76842502937666a00d34376b269c6e1e3db54316c6cffe8992fd83cc82a928 +0xc5f67bdfd0b37babda883637b14e81b3e64b8015a0f448b62d077c95fc456b3d +0xde27e0c589facc31029d32d89db92806a97a60505ccc7e968dbec787ebcffded +0x8e0be16d82945eadd9386e146dd8e55e807e998209177a57fd18c58ad61f0940 +0x2c5704bf6f841ebf372c2a55e6c5af24be8aae78813d42c402f31756db463bcc +0x091b5fcdf4eba045b7709910b4e308171a248e86912786ee7127d739aab8e421 +0xac98f5facad91f8cb7c83247ada2ecb269b4e362f8f8fe9b805ec0dc60529a8b +0x39f467a160e298e2592dfca06205f7d8e7eb3473835456b9508515d08c35574a +0x1543ce5c82684cde74cdaf6c63b75fd535acc8db805d332714744ecb2c24ec64 +0x8cc05141f5ea8a0301befb656daa4c87af5ad2e37b78243612231c702289e3f6 +0xa6be52a302153cd4efc08c79166861d4b6e12a92be4f1831183942f462fdb42f +0x83190bc4559fa6a5fa6bcd6be63232f675c081ebdc01b6c4751524b0e43fdb17 +0xce93cf52215b9d669169428155f56deca75f0eda566ddec4f53de4e050c290ee +0x752749bc48e6fe7228d71827a7339d16121a11cf15eaca1c042c1bc2b166c724 +0xf6a08943c37d3ce0d34389c48de939770f99e7b340dd8b868dd95bb5f7ed19d5 +0xd81cf47175a491765f59465b78cb666439955ab788dc2e479ee2fbec0635f2f6 +0xabf4f3c4a3f586f1668694b1929254b74b0428e4dad71337bc5765ee9b72b785 +0xb73989252cb0fefdce1bf48e5a62b52677433408e899d6c3c696a24e6524de9f +0x558fa3c3a7a18f3997aea1d7328d9755b32bd7b067b6704cb63095ed4ff087da +0x68191b7fd65eb501318483c4c55d89ab29f9c00dd8fecc3dfd6bfce92a3908ed +0x81fa95028a6ae2f562542c2cce3feae89a35477b76137ea8459f1fd5e84ae22e +0x2ca7a77798a5dbf669192821e14e68bb65f65e251c695f42917d58f362e0aa44 +0x0ccc0f3b9f2bad2fd78699495b32ac8d53670658e8c52e4a074296931dabf5a5 +0x2c0e4e0df2f95b9cf73124d4dab890296674f1ccf931d0ff9c7f028c3903c75f +0x46c20d47e563ccc1bc4305dd82bfbfacdb85b3e549aa51ca104c003e88469949 +0x6bf795577240293ae96b115cbf7f8dba0ae18bc264adeeec8f0bd6b67fd5285a +0xe78fbe51b760508fee69fb2e20e7e58b2893a30b5994e080d705024b04ff54af +0x9e10adfad7ed21fefcd63550aaa0d78dba2834aa255afc5a1af0a62b30805281 +0x659166e0ad4c633e443c1a66bb5fe1b665fd0b94650fafc09f6750eb1bebeb34 +0x996b26f0254e0136afe3fbcee64fcaa61f6067b8a5d0d206eed1a33b4632f290 +0x73ac8fccaaf337298bd71e4dd955e814a7ee7851e29ac08937a15bf5fa85603b +0x0a2200f3d52ed82cfeb1b04392b5f0963acec09103e6c6857065b0cf86f572bf +0x019bd7d2601f5441e67c4f50f8e8f0da2c96f182a8248abb85d944b08ec66ff0 +0x9620024b71b3ec9ca8a6ea6527096297b19a1a8ef381434651ff699046142ffb +0x909ac9fb3e2110a3af6e9e4595a424c17edfc327b5bb3b5406988fa1b168acd2 +0x8d7893aba1a114947521a8e90dc20b407e9d78abfaed15a74bc8e6525f5bd9a6 +0x3a25346f497a9d28979c025fac9f155ab4e44c219c463c240e01e7a80606acaf +0x90833c284e887aacd8338c01c4d54783f7e2209baf311fb17f5ab8aa83849add +0x06b4f7e56ef5f85c681ff0e1216403f8b7b50d73af8751b83320dc7f22f8735f +0x387f9d7e6afe7b7b2eadf4fb92717e48597dc87c5a5d23b842fe0e9f45083c8c +0xfc4b63b0b849c844907c019effa8bef40b1638bd5f0208debf604c8686e09846 +0x64de4d37405bf4fbe00c2f09d46f62dde42436389d9082aeefb89502233345c3 +0x9f12bd689b135e96d4fb668ba3ea5694da70033bb77a0aac7117c288563eede4 +0xf20a3bf1f5c3153f816649d8293d4eee3d200b1486f9637fe56d22700f7963a3 +0xe96af7d18ae9f2c3059a739c70a37081819472b201fdea9b3a3b1d3849a96282 +0xa700cf8bdc19fc10687b72c5ee13439b6de26cbf0b7a3d610716b3fa204a0f4f +0x2c5eec008ca0d144459b6836cd352947e77d7c7e5a687b89abdd0517dae6e762 +0x2ac890f22716426f5e5f1e91ce3ad0af79fa7571b951a704b68a3635e7a61afe +0xd7c156c4c17db91235f7201a53bab3d9d3362cc234cd6c032e8f283e069e4f09 +0x82ca21dd5af448011657c632da5e428c2592c20e282a68853ca2b205d11c3f33 +0xd1cf1c6ca2f556695fbda913154181fabdba80323b3725ef55e16a442ea58a07 +0xdb2472e9d8a50ec3ad20f2c9c4ec167ac7c5759b64cecc4c74548f01502a6aab +0x2a8ca24e03a9eae6e84754e96b3bcef097bb456359719812ee6043aa818060f5 +0xa9ad72d0439505d60ee82c842bf998c8c8e7c2cbaf7bc6bd70b8b8961130385b +0xab90a5d1513c00de4f95b1b374625db8de0a8b9da06d8580a55248634f0d5e3b +0x5edf44f4d6b5be117fcc9c700a2a2633dbf3ddc9ed5b3ff36468bad62be07980 +0x15535e762aa42c5ce6455c362fe9ae6c0eef80c8db06ee3b261eb5d29fcc5ab9 +0xc1acab0b3f734a64c96a87078b379778cce6a0d441291ae66082dae55b1bd675 +0x3312c2e3b5ae954fcb6db2cfa5930a84cc4ff7e8b0a1ac07ed88487de1b033f0 +0xa56ca1b4b7f63ecab0f1222e5cbcc847cf471c2b974a88cb69dc760a461e82ec +0x0b341fcd0ec1d9664f93b8fd34da3facf9a6040248107877a22fa3b68545405b +0x0a2ff817d20d31c4606715ca829768cf286a2dc0272dd20db93de134b03196e8 +0x4c9bdec19e9c4413cf329fa849e56501700efe652b2bb24b412a9f5b78833476 +0x6e5601896f9b8e4f2ffe416344b9a55a6d80c50e4917f77c2cb177b18705a0b6 +0x5d707e2f3de51ba78513f0152a24d3d1fe26d2697f23e54850c9edd6763d4671 +0x962d36971ebe638f01cb75cc14eb2e3cca7bbe9d7e10195a85f4544cda0d3f64 +0xe1f5c20d4a05fbe495981406a95418420d362db0591f21b158804caccfa2724d +0x635512287c6f040d19c16728e3b9245b497d3b2818687c35864c9cd3fb1b4241 +0xc9f864111b6ab1b8c749d9e37c60687844c60f24930db03ee068239bed0a715a +0x679384524b30e56faab265e40cf518119c3d3b1ab00fdb768ecf9280966b6d17 +0x999dad699cd169b39aa5bbf79dc01de07d5dcffbd8d73c2ab9c5a1cbe04a0bf2 +0xd76a885ae49cb42aa715fe262a0d514d69202df5f88f4517bd277ab8fc716b70 +0x278109e49bd900e84ba754efd05d54ba1eb30a41552405694b77d5c2d852fcc9 +0x7185e581884dedd3ff09dd5278182245302a1441bcefe6a31c3c8b6f79c8c34a +0x1d05b6ad90e70f2b3d9f45d7c5e82cf877ce418ca6cbc3ce8267e41563aaff11 +0x347972648f61175cc835871baf7750bef5c3dc2d884cda1162c93c5d3eed5f91 +0xf3c35ff5e2d4bdfc3fd5807e0a996f0bbdfb3935141858bdf29b41916b66044b +0xf03de1d49627b23554582b86509968b6f4275e891f225b8980daf581fda773a6 +0x70432debe4e64ccce84bc848a6273ca7e3fad96b9f82ad60283c7bbf76d6072f +0xacf9ccfd4047107e5d6fde8fa0d581ad18d4b07ec5bec205448295d49dd21520 +0x982a9b9c740a13096a84aecda5b825ab67b666e294b0ab7c9136d8957dcdfd29 +0xff10ecd00c493d9acd2ee6442a59171322537354f0c8e0704c64c39608f9db39 +0xf62b1c76aff8c9bd0865cd8f4d0f4b1ebe5bbd7aacff907883ab2221a92d492d +0x7a2aebe93b490481eb9fbdad664ae4f2dd50263646324f5e722a38fec549a759 +0x198d3a3752568bf16d4079efa02721e17d8654c381032f9799e82106dc3f1e69 +0x0039bb699ed8169c54964615f9499146079d46e3d26974a7008ec0bea9bdfa6a +0xb73988f2e9fe7dd2eb3558a0b4e764a8fb2d9e7bba9c3ae4eb28a4722f9f5c24 +0x97d1e2854fb930b286d9fe5bd39cdf34929a66ce4f3e16f8003e57d20aa69acf +0xb0be743ff47b6d8330c446611a2427e360368ec42e05b8bcaada81649394bd77 +0xe29c90f170eadde23ae429f99cbf88918bc8320886611d829c25ddc6c7c9ac6d +0x3886ad966454590f95155c50eb3c8fe58a4b6bece54a188ceb330cc90d81b0f8 +0x6b59507345ed324c8fc12d01e6fb3b86d550f8514b792e5cede920ef2b87eb17 +0x0b56c827b4633dae3354727223e2d0e71bdbf51e948b9ec61028442bda781bbe +0x252772f10543509e88683f80e22f4406effb88c50714010eb8bc249ccd569c61 +0x203ccfbafc0f9cdb5f378d4fe8f1fc57b7ddc800fc44d08217d865397114267b +0x2b3e4c62fe7ffa5ce473c4fbe7ee3f090ce489772d86edc6a7b7f4a82e21ba9a +0x14053d400c98bbda60274d5d8454a4bd1e43cbe412da1e1d51231f0b248470de +0x7b2f99e8d1efaa6f3f6f430421971dcdc27f139d0b32d4c4453405de1669eed7 +0x6b51c7a3eaef1df7bd8ee73f97ee165b9b212ea5e54fa57479259304d7f24388 +0x9e011bb20452212aec7e6a5023420c9f2017618bfc3fc3e59e99a17d5d255afa +0x189e7f02112025a0b340f056d2c4cbceda03330158fbb26885f0ab8e48743801 +0x358eb6cb1c388fd03cbc55bb8bf794df034174f9da93978efe8281d97fe4357d +0x2173ae3d0aa64171825d3a28fd2ab236e5c31ff9a5cdd62e087672ade31aab81 +0x7b6b23077c53275ce45ae75e80e3568bb4e3cdf63e604f109fd9cb8a10f1dcc0 +0x9ebf5b3fc4d9ba97e3e10968079c87cb0f547f51815f531cd9017c8e0db69b3f +0x9961a9d98a192af3118e971947183fccd8da8dca58f28d9e3fcf210042adc461 +0xbdc40cb4926cfa6cf1aaf391b3b06f38f8fb170be627df93b5e94874bba35eb3 +0xd8718c326a1eb84bff4b9d8ac1048d6f135cbbea4e2757b4136dfc37d1d1f8b2 +0xf18d86ab2523a7cf1c7d1c74e8d0be892c83125759b98c9e5870f351262a3967 +0x0c238995c0f19839915dc45dec8725cc1752d8582c0cd2a2aaaef641650564e0 +0x822627d7b58115a6bf1d92e624e494332bd387d8fe33771eec8293856d812dbb +0x3775bd6b61cc63cd3d1e01e4cc02335e9af2a5bd84ccdbc5b0fc4c2fdc2b9a9b +0xf75a54d42d0657475a422504da155f87664ef722ed905ad9fe09e0a6643be8a4 +0x0ad59ebfef928ae8bba38e13d257c8db60d553e6c0b0938abd81e05c2471fbf0 +0x897d4984d600366064c07806c0407ed272dfbf011fa356686ab363dc9a15498c +0xf80ead74f8a57754d6dd1f8a76f201917439bbeba1f84ac59131c233158c8f82 +0xf9259882c8487d6c3a0a8432515f0b919f5ef875fbd28e0f420ccde84d6c6d11 +0x671f72d4f28c3dc00fe81607071954e8516db590ff156f4edd09a081e4758b8a +0x2c19b88746e3940d764ea0fc859f97dbe8600846b6789a05c198d86dbf9287c8 +0xd2df43df44a4ae8a93598f7a251c5be8a79515f8d5848e60cbeb9c71eed248ee +0x2c54368a6d9226160cc69ce7a885c8ded2cacdb5ac9ed48f21f378bb66857c1e +0xee351d8e0262bab564b1564699875748e4f1f14fb0470a573dfb9063b6c3cf6f +0x46f3a0a417639f504cbdd2964c2ac98b31f420b8e1ff8fcaf67cf13bdb2c561c +0xff89a5c848ac752910d9261ec014ca5255148e66dc8b42670a36ad751a16899e +0xd41f2de6f3919d8b79098d48eff95809573ece97beef07119901d67dd3f3dc29 +0x7c4994c0611c7c82629e15b6ab7bc88c6d6750e2d6e4876fcbb75a59285c05eb +0x3d3563c725315ab0f83ea910a84141a9265d5b287ab89b0c461ad3802f15842b +0x7dfb6c85416dd8a64feb79e0a83aa680f5a01104a9913edbb80ab712d3480f38 +0xaddc3cf4db615f73da42667659d52d7473350c00a8eaeccd8513168022cc30aa +0x0c97f0d0ef9d51940aca1f4631193621d6e9a2e2c0f9f22d74a928687e2a003f +0x0a9a439084465771d004c0801b92c52839c2cba753a93da80a8f5171193c71cd +0x657f0e26bb7c5cbaabe4f46d68da8bfc4c483ffedc79a6d128cc9fbe04d7c2d1 +0xd535c62ba07c94784c811666da31f80b7288dfb074e3676ffdca2215ea9f4f89 +0xd3d1440f745c2a01a2597d1dfec9c80e6b947ab274d9697bf0390f4af6c78c65 +0x0fb9ff40281dd56f604c8543355aa7776038bc5ee1df65d45fa4ad33969f60ea +0x1c7a5e6123b1e3465faecdbb499da6e5952a6e27394c181b6278c9e0351e9b1b +0xb0ecd0a4de80580ed85475b9fbbc85ffa5a0177288e23f482b0fdf6e549ed243 +0xe6bf0a946c7079151953d05c0c9087e9e6c35ceb24c0f0e377df7b47ce009537 +0xf92636dc4e708ef8363b4e59d1daebdbde0b24e3a908c8df73b18a187cd53d66 +0xbec588c55a0be36f149047d5cca75fc9ce08c75f507f600ba4f83ba4ad0236ad +0xb544eadaefd0baf35fc3e5ab74911d0d5258f28dcfcb9f460cf8a3fdd42a4b80 +0x4fbe86cd9b0a4ad0acc7b352a89f630d75c6de357cbccff5617491a474b3ae92 +0x3ed45fed7b5317286e5bfccc0cac907f954f18ec7d0c85ada5f973f15eb30820 +0x3a2ab9373de891811f0fb66eca66f12e6836598f298a2f65e3676e71ff98530e +0x5bf4209636c29c114b22dbb46cd36d5d36c5320ca622fc3c2d40db5f11d146a1 +0x00e3069119ee6c19fdb7e9ee561bf464f78dc94ebcdd41d6edfb42298e99135b +0x466eb99209c7d85df1a4737b4e838f95c0ee66c0c573cccaf5e6567b8e0c54f0 +0xd38c2ce948523d4cc07d52c964345ce3f650ca115ce9713009183835b0268186 +0x7d8b85929e5eddd3bc9dc91a0b5aca9cb52c2ddb018ffea531b7d9389befc250 +0xfe3ee418ea2cd24fef4f657e9da539481d3e5b846d431fb2d4b3829e8a77af56 +0x281e5aba7daa682098c0635ef6be9173740bb00277272b82ae768dc07bc97511 +0xfedc81b09f6a4512a641af5d7e85a10dc17708f79cb9d3cb1741155dc7e5d7d3 +0xc372ecbf0b1bb6c60d71f9f5d6596c7dc6469c324e6cc8f0f8e88793ad2a1844 +0xb77632f328b14accaadf3c49f963646af81f5e8f31cf91dbfd64a155164ea956 +0x5e9d41aeb8d1341e0ab9f3b1d9f38ab3ddb0ed6753f01d6cf27c00a3fd42398f +0xbc3b22de54404f2aa89a6ffb8f61e21ca3310261604ac3668f6ac9e78c4fbe30 +0xcf622047e8f7016b73e76ad0630299dd245069326e3941042105a6e98d9e01be +0x2ac52684dac4f82f22cdd51852dd0b18255d99b9b0dcb414b1fa034a56ec93c3 +0x129795dd40191b2ed3cee2c098f105d67fd7b01939bc3b8b2c312581b4da753d +0x6553b340b1de44b29ee94ad6337fc93b3bdce5be052d3f385441e6b4d9988f7a +0x584c20e95fb01eceab9262b47971e6778491b128feb1ed3e718030b3083861cd +0xc4c7bf7730b3eb2a34bef24e19b6fa4e9546d15f2f653f646e1f71e3a9b5afd9 +0x040f4a567d508e6cc2f13acac73f17b6024ee4300c0171e507013587ef62ea42 +0x4ec2f633e5cd8b453f2071a8c125282f2f364eb64ddbf014ae51a96a7628ede5 +0x07388497a3b5e4737c7806760f9f5cec02831db1606cc6b0451ca0fd95520ec2 +0xe9d5d047a4cec05e4e2548af0e9efd513baf15e5b0ffbf3b5d9fdf00cb41f390 +0xd85aeb75d02714802c9fae9d0941bfe85198773b1cdb55556a9564cc2d95f346 +0xab698de65549c26c7d9b237d5d5cded67cffde66fde25c3a7b09f22fc979790f +0xb60dac6d12915542f08662874a0bf72d82935375b44aab293df9d9384c3d0710 +0x64fee119bb9ba560216fcc34f0ecf37ec8cc9e9e800bbae8d36722b5615a0e42 +0xea28e89079caea62341bc67920f34050a5e6c374787b6358fc004a2cfab4806d +0xb5f8413715d3dd022713a385d86ae2749a9c99c97db0ebc512f0d3428d69b073 +0x1add5c3ba75aca63ec3fb9e29ad674d24eda9066ce500655adc7b77fffb583cf +0xe7278a864b718b714682d06125784011858aab49d9befecc926bedc19fe667b4 +0x12ea1e5246a841622e6e173d1c8470e5eea0115572c893b3f7fef66ee589072c +0xa801753735ad305fdbcce2df31180d591dd2abb424a6abfee9fd851035dd2333 +0x45d20d15d051301799619cdefa81192dcdd54e64ba393ae3afc5e48765734013 +0x5a611722adc54997cec9d4b19cc617e7b6e005ea584cdccf5acbd4b00143c3d3 +0xfef281f8c59e9241a36d1e7764ab92e16cc7b8865736648bef7faf7e80a90279 +0xaaa0a71cf2398afed930706950f02041dfe0024a7cd84eed8e300e784f54eea7 +0x4905535385dce5b2b5da7e4b514248508cf53f3fb029ea49f1831788daf1a917 +0xc02c38b019662ba9070152bc87bc6b9814ee0eb772f71ca48555eb6c40f57460 +0xa5cd78c18a70518350e657442d2cf3bbb5b4007985c858b6f65d1d014b831457 +0x6c3955bf4e5428e1f4c2d3f5286991c958a231e197c420d7acd0b1aaf7780e96 +0xf24ae1834ddce861b2d2ec5e3f7dd52a25b9351e3437f25411b8636e92520338 +0xd8add4bec194e73bd92decd45bc1b1630ab761132cd7db0b9a6abc7eade3c77b +0x9fff22e9825fc3b6ca930618fb80cf7cbedfd0a520f5f815e9fae5dcb9aa717b +0xe50d8442abc1c4aea89f60e90fc02b2229e75a699ec22886a5ec4902edcaeaa3 +0xe50503d68299914fb53279b70699fa803cc118f1e74d4ed2025e2f5f3829ee6c +0x6c012e79214ce9228dacb1327b6c0638549b11b33c49d6044ce677dd4ffde9fc +0x2714a040c37c8dff75ac9964f699e8b281f5d129adaf11a4bb8c321debce2c86 +0x9aecec2dc0e894aee84b96118c57e72801468477c702dc3042ee0037cc180bfb +0xc3ef655effb8b97abf2fb81f812747b3b7516f75c64f7a53401c7b78b6b850cf +0x3012a13899b3b3de015b1b8242b2045c8302217ce91659b9247a5547dfe76f70 +0xf0502df833668705c709d90c943cd08fb3f2d2887eefd586fc274198efd52165 +0x0932a80f69168155407dd4bedaf43787e98797ee61e26fe7a5241281bde85436 +0x5164f55d68dfea715364e74f2c6369af04239405832cf768010f5970ed8af919 +0xf3be0661f9fa90d191f2058ffd04e63eec1ccf2de44faef10b32c7b182a077d5 +0x13dfbe4eb50090c96c89b0febd3f1889323391ffba3d0e576a62e0c9181724b7 +0xe277568c674f02e06687aeddd3f16c8d530b9e7310e8c2606f14c7d8f8722373 +0x8c893c7a2402f58f5c8ce60457342b3b047512f4051460ab6eb244956753d542 +0x0178b1c2b78a1edb55566bef4de594cf6f72b85bc22ac8755375006c636684c8 +0xc4a37ad6735eb28be9aaaf0f4827956bdf601ad21e1ce0aef2498fce1113c14d +0x48f0ff5d2ff7cdad1a2be4e0fbfc85b0ecad67a529c5dbab35999c50e67b052f +0xa68456078297c2c58facca3ff8e42413b9a7bca2f116e9e24dac2dbeed9657b1 +0xd0d69614e987efdb7f6d16cdc03eb3f8c1a494f5e47ad81c03a42a5e08479898 +0x78d2374248bc4aeb4e1d05c6675f469e9e12ebbc9baa89e6aba0b36fd896f83b +0x34857abc26826772bd8a717a5c7a47226b4cab6ab2058af07e59f4cc13183924 +0x3ed39f39efea7c7fcf5f10c4225fa7065d78d8306ac91d51c1a590aff18a2c93 +0xbb6e7fbd8be4b2e7137fc1651fd4671e78ca7cee56597a201ffd139b12c395fe +0xfc7de77367c72aac38e2ec9a538101bdc94a147d9f101f004b3a3d6da11cdf87 +0xd6aee4f69bcefa0a300977cb735b6b9a908d5a9bd6768693e11b57fe673a621a +0x8ff7c8d7e263a391bfcd56b6f46ddade81cc1c8a6036ef32fb02d73a9e344fab +0x686001b3fd9042ca3416efa2cc03357a9862d46c4672f83b8bc905701066a5db +0x089710323628168e28b092884ba0d193b4300531db2eaab6ad206867b3a7106e +0xd9faa2479f84917759e79ef2e1858e48ceb1117d586703c3595ff60702054025 +0xb4b3cfbe261c743eade34fccbf61a9dd09770e55ecd56c31d1a00a924d747e2a +0x668b215b7a3f1456501e12e7d33aba372a18e0d42afd99a498c6519a157bffcc +0x21de7641bb1a78dbc0678a44417a67a5c7e858a291cb8b34b676204bdd94abdf +0xe9b3e18c4c138144920067f0e6739d5dd480acc7a0d97b07ecdfedb5e9fb5f65 +0x3aec1a13cad24f22e7be95437343c21e790d859b164c88299255dbca4d0b2c6c +0x70d68492e1a2a18427450a081a9372c9e448017bed6fd83caaa8216a44935e07 +0x188f15d16ddb2bde69fa2e4bb3458fd3137628c5b7aa95ad94a18ea160db6bcd +0xb13371794e4faae721954c713e26ee84f46a1af53abcaf80f220435268f45964 +0xe07842cc2bc7b8ed3445453f1bb439420dda675009373bac9d30f0686eb0d4ab +0x3f736bba68ece58c809b3522938c9df67d88e05bdb6793c5758be15471aa1110 +0xd57d3cc9ba0f70929678edbbe03c218e2ee2f4b270a05f9e266f706e2e9cd6ff +0x2f77959e45bfd6dd22b98bf1ee8afe7cb74a9865d9f7eb4846ef0c423cacfd5b +0x6aeea84f3610c898dea898a5f4851b4be251e96a8db99cf61f782c805ee33bf8 +0x5790b1de00e52ebabc3642243bb66c1a0d86b1927e5d068cdb5d01d56b0fe095 +0x3b8d8dfab5802f49d0ec15135ff894d59a8fd441737c9df8130e87340d19db88 +0xd0527e123a18eda679f9f903758c322c4b9c4047eba2f980ff8f18bc1c7f814f +0xbbb418f5a11d166966f0ac6d88dba2dcc909bb9135646200b574ba655f25e99f +0xd782bb30df1a46706d5c9d37bdf48b79797b543df3e74290f6e37b1b742b871b +0xad59b862c73016b45ba51ba22b27f1f09cdbdeef68bb285b76685b96944cdad5 +0x8de55c64c0dab538c7e9b80a9148c2125d5b11fe0db5e6e877a20b52758b1a1f +0x9ca23323ddef3a60005b19c44669bdc7bdfcaa1f1ed7ff824ecb9f0c2c484410 +0x262c71893f47606b7601f0f4211bf95354d231e3c0b7d46d549937028b5049c0 +0x381873b05abf94075b2f801467539ecbc57f78abcc51a135744179a644a967a6 +0x67d6415d0c12fd2f49387f640cc192dd73d6a7f08ca4a3535dfbdb71b326befe +0xf09c23dfc58efe1ca5e07b815594d463480654c03edc34f833479ad6e59b9c3f +0x3ac39453c8888aa5a3ec7ef323bb5d046a77c550cf9b00c0ebbcbc035e78a82b +0xb64b6236f8df261693d03998ef6af1442a0d0635c82be174a937c646bf949943 +0x4a614fe9b96b2e5ea9bd16f966cdcb8248265c642322471be8c8ffa6730dbd16 +0x53539aa956e62e11076699c41378e5db6612f3ca2f1d88f5b0d2a320ab194151 +0x0bfabdff172a823b15c24f905c3fbb3c0e15cb764c057ef9d6b012b60e419023 +0x785dfa50373ace0bbfcf7a7e4c7675c7cfc97c13dea98f876cb6bba95b1f0baf +0x1e26405e4ad0594581e0ce55018fff8dc8ee6f5fce5b77599cdd6f146465c23c +0xa8cdc8157157adc14ac1af2a6353eae95458cb8767fab3f113021002616f3528 +0x72af8edad89d4955380b8f56f3f5b2c10e77aeaf2ea03194f099ebb5a769dbb1 +0x9c92e84b4fa5b840a7e4a93b5bbf118b1be6d1487aa0fe5fb122c681ffc4784d +0x0769469fcb63ea9a867faa00e09619d7c7ba3d1cfb2e3125c0bd9dd7a4b75f65 +0x383e3f38cd50f7b341aee697a43c1349e22a6160303e7cc398b94e879475f362 +0xbd84965f50f2331f2b885bcb1685633dfac87558865d8bf2e6f5146959f120fe +0x3a00ecea53dad64b38ff11109e472b8d503a38c1d38f296176a2efd15b0911c0 +0x40fb4c772408683d48a86faf4b5beb5d0532fa4987e7f424f0fb6606246c8875 +0xb39b827a25543cfb53abdd5fa2be6f0f5a3d182958c5c3b5a5ce4c5b783b5fb8 +0x7b432d89dac385dcb8e2a7b933e0f51895b3b8a7a072407483b479e1f54db1be +0x1ecad3c71404063ad17affe6ba7831d741e3222b46d7f828989c7b53c343392d +0x9717b21dcaa62cd4f8066f8119e07cda96df80b49c3f949f2b0836c6923259c1 +0xbb64383b8d1c77ddca527d9e5f9864c3180e195a1834b384b49ca6ee9211f9d8 +0x16db7cf4fb0ca354baaca66bbcaecd0875aec09b8ec64084324da5e36748f894 +0x86bce630bea2fd284e3cf4164fa42700dc19c9860d138f911138097b7858a05e +0x98f5c9caf85f68c3b8fe3001a429a2600b0baa35ad0fbc9829f9e3668d86acfb +0xa878b73df6b3aafe6d6618b2cecb49eb613496b13b281efb3592055f10ce4a6b +0x8e48b727bf1115ce4780142f1c43d4d6c1fbc55cb4901cdd31b02c6e2f011e98 +0xa96d55c9da0b4f1dfed0daa90d98e917dd5aed96a616ec233aea547c9b38d0aa +0xdda212b4a83d1f6cf2ecf4d382608b6be0329d44d9766ba969f88af04db80dec +0xd043704fca25b7a8f8916284588097fe926b8d0bc3755ba2699bbeff2d7768f4 +0xd79db323d0aefddbc26c60c71c45341a922190f5e0c99496da05064d135217f8 +0x0f6f7d9aff28e4373d924fc37d49205c0c504213af2b364a1b70416496e7c621 +0x3bf48ebe83ec5211f32543551bf5fe6f4255f4e9e6f113cf6c29787fb3c1d781 +0x7880414e7edfe25cd7834df21514064d0bcd33f6d24450d3c398e367852d20c7 +0xcfe85fa9ad1d572c2c45f40b99f39140a50787f467bc4fe5a5eace4f05130f74 +0x54243066ab29cbb89b413fe85b2e5ed1c4acb95e74a1da308a8e7c23592b0df0 +0xc3da4fe190fba6410876923be45b97916f06a3030d8c3172df674264c08d7ca6 +0x1af723c58bf61969de1d5e8682af5c41720bf2784f42e2e1bb1c934b982f93fb +0xeaee3d0f2eba72d91e916f8a6e80a8ad5c2733ede6da5a8ae743b9cbfc099dfb +0xae8366388edc8ddf37a5b1a032642fee5d9f7fbc3cca21ca215fec1b3d554719 +0x1a8a9ddb4126548f5bb622cebd833986ad8f7be986a0d6227589799c7e2aa3c5 +0x903156f39326029d1d2ba3a01672c7b3c375013e49f16a2e0cec1da4cf56d1e3 +0x4b16f5fc783334016ec6b4167e72224708ecef6ed13c097f4cbcf35fe858f649 +0x506f6d9961ca487ff14cd472cf53b215b2ac1e00c4792e85d446edde790c6137 +0x2f73b667759d7ab2432efcdb4d77d75beda5415f99d51fbf1ac2fd402b9dc811 +0x2850db3a3e6919e8a44d77e656e9629623839a5fb42f672d55e254240979ee6e +0xc288916257fb63c9e5cfb5ba7131c426c21f01834c94ed557b9c20ff7d182a95 +0x8c0b12308e0ab18c6f201f17ef2d583a6e0cb1e62a6b65b37122a21b3f717d71 +0x29a823f84506feb227b140a00fdbd40d727e38aeacfa9af9948e41c4fa529e62 +0xc7637bff793efc5a73d6282bb808b5f797b1d393faf4eae634e915b09ead77ad +0x2280cf9ea703a227793e32164b09351af98b2eb73a414ed104342d2491e011f0 +0xbbbd0e81e5151a5848e966685066e1c97fc4738ae25d020634e48c70a9aa5f1e +0xdbe8e9b2c1c1f237664246b0ab0bf4a0deb35a4c94108565e288dd3f8db896ad +0x9ec3d27f5d96f29c87e7b5ad6d454a4793b9d0fd7cce81d5490726e3d565ac4d +0xc95059a35920db8cdfdf96c75694d98442e9c6e82d305bbc516df0c555b59a56 +0x93919c97a79c49c1ee8c1355c09d70bc3ce1266979a9fd9db7d40252a629fae9 +0xbee3a9f0c2e33040baaac3f4f6de480f8ac867b57edae9a3f05820983abddb2c +0x260198bde4e3c9c47114cc59fe8264025aab4fb5a2a0f3a60f6e8b1d49d18275 +0xc61d494a8d109dbe87e464258e8529f6e4a0887d84a167556b66cb476e419053 +0xa85e29fe61560efa91e2ec9c101a74f0c7f6f3fdb3ec18fbce498cc8f737f9c6 +0x45d15a7e6705c38a7e2aaca17d8d818b5ddbbe69b885d5e308a6a8892cb591fe +0x4d2bb9bb5faf85ed46ea00b1fe4d4c25d1cdcfaae21f8d8b3b2e4b773757e1e7 +0xfdd283ea63b3917e4c4ed365d7fca66aef82ac204a2409d3f990ae5cf721923a +0x2d20541abd0c2ed50cb9380184c4734bbf85c1f9b0c7a96214df42429eaad242 +0x21315b364288a38601ec6523309baeac6abc6e02187099f9fb73e7b874c63895 +0xb5d1923683913e1d07aa0f860bb98954e9e349a5fb93825687ce983d20203938 +0x657a5d124aa23e70cc9acf3c251a284b66fe6899e9e7b889919dc34c332d30ea +0x55b99eef5fee7c847e37f1665e0ee800991cd0d1716448c4433dec1f0b20ddb7 +0xbd2a040b3df849dc5e127d6240dcde329d712d9a6eb0181c5c905e5740b36372 +0x505425b7c598caa14f02cbcc48d8da223fd900d6b48e09d31c73b66f2b95e02a +0x72e841b97c14660dec81321aa7a06202bb0aa0b569669f2fe57d486d63541af7 +0x30067fa819f1c6d6cba284a0bdd718f4da4f860be13f709f1d6a7c2bbea7ebf7 +0xcb04de52ad30688ba1990ba8e190f550e5317a0c80cdfc0d8b6045d273193dd7 +0x3fe7e30943ba6a6ce68aacaf7e9805cbdefdfd419262892099aa5e17c9a7b5bf +0x459939880e6dec1f80962b3465d203b08e4d9d0cfbc5613b3259cc76d3d51d59 +0xd1013c86772d3a5c1dd94d71a9d2dc776138b612242e6b8e833ff57b48b2be18 +0xc6191900e8b928b5edc06e322d83c5a4a00b768819dc237b6833ac5bc563d2ea +0x9a81783d3467dac902158356daed072136269f15ac3b6cd3ed06e8fe3764facc +0x4e2a980486cee5072f93944e5850e84b8b8316d1502ed771c3679fae80a62430 +0x9ced3babe20b56a96b89ba2379d89fd8c334142427d6a1974cf6837783dace9f +0x9df114a2052bd3c814c67b4f26bf1a94f8c6f6338053824d383f8f3966112bbb +0x79c2b3a888d389888aed0dde35373e02d716b67abcdfe2a36657b6c15dbfa520 +0x3b51a422b8b9575827e74fca524380ef2b76dc7286cd69e0d4f178183f780fd9 +0x530dc0ee46b3eb55ee58ae504844dbf19c8949460185658ee40094c1a959e110 +0x8652dc134207853b8903e7562c643562d15160c310bf7d3b2c719dac02137a23 +0xb9467660b894dbdff540f7f002aad2fef3356318d1bd451fe35712bb65cbf662 +0xabbc0496943d5a57ff5c0183bb1bc91360c3bb4ea3130b46ce9e3a9fc8501388 +0xca7657ac915fa2cc9de8c1b4ce3f7f731fb7066c39daf9e0924eb9f46ca3f000 +0xc38d1dcb3093146f460bed7ed6d4cb061184c7a23bbade14465571ca40e86b7f +0xa7419259bfd05222e7c0692df9989f56111c5e8e3c94402fd5bfbac0f051fb66 +0x67a51e8872f06043f0cc74e9ce3e115b0e538d63e5fc8eefd9749397d844a927 +0xf431a9457e17fd32cc2ee07ec7736c9f6393aab962c68ba9fe4f38f3c88ed6b7 +0xe0355ba8ab3ecdb691ac6f09f4240806dc28d890dc54ad2faf6fdfbd4600cbdb +0x7770d2fb01047c76e72a3c07fad17d136725a64f242f5931f85a51dfae31a5db +0x68dd39f216a1ef220b5b2f930177ad0cc1bd4cd3d99c1a214a010335bcb75ead +0xdaef9e6fd07c2da19b0128145126e049cd6f653103e4fb0e902409466bc1052e +0x019cdcba3e809caeefda9c8c8fcf83e4021847563527ad85ca69407e65d1b482 +0xe5ea80529b96d223fee5a119738a1601a17e3dac5204cab36793405abecfa7e7 +0x36d09308680579db2040f01f41b08f6ec157fed1b921f103ec5e0a99f598797e +0xc920d8011ed48dc4296d3615fd8be8ed6b6f8db75ee2fae9dc07a4c1b194af60 +0x8377af53d0f9065e9e30256b89a1c4e3da6b4663f59e11c9e1f66a4edfea1b01 +0x47cf3abf57cfa9b32b186179689e5d93733ba1836f7de4c2f3ceadea209a0163 +0x91f04c8203a7cfaf6625c7355669ae639a9bde9c28d7f91313349ebb8c5546d3 +0xd2140155f3c54904ac641f2f5576ac8795d2a9ff2d4ffc41529405bb2e4c8670 +0x1a8925030d529e893c13b3ceac48a379e595796fd2be7582412a3c387b61e55b +0xc7e88dab967c083f1c7723494c5bf543d4012ef58bea0a7b8ee1cb2afd37d7a5 +0x898b7db0f8c4406174d40ef01dc839581d8fe5e069b1ae2fc367893fb6e3115c +0x48e3f628fbae441e7b83536308db1aaf3a7dce32f7cd6e5e01d1d4a76bcdbd0f +0xe9ba86832517fd187226a8b0a3bda22bced89036288c8f8d364a5bbfeb9ddbbc +0xda0c848100ff4d9e9cdaf6f2feaf3ea327f6bfd54692b786b69c2e7e90f579d5 +0x45da4840743f2292e6a9719ff894c129e9083a5cf76e5eb2a4057faf3c5540d8 +0xc42c388698466d1131f3d0f4b8281909fbe3961e6c812956d8ce8f3b9657e451 +0xed61d2b3514af0df3550e736832a9c5c617bd946322b9271b8336ce727fb2c69 +0x4859976153d4f34c49629598dbd3f56c94c1bbfeaa938660f7cbcbf8748679b9 +0x2fbb4627644a873b8d3776504247b2ddd2faefb4d9b329db61f1ac493ccd4d98 +0xf7f6a99c89089639752450626dcfc9206a921405ded79d7cce7bf5cb0136b607 +0xc0cf961064ea369e7844394cb4e03d21d8f66d144210f8e5b479993fac91f0f0 +0x6266aee5c4080a636f123e6ee6b92b2417670ba6b29881c25307fc3bc6441014 +0x82c2b5b18e7b0fe044d399bbae8a12ffe548b8c5afdedf62ff8b65f028d4a111 +0xebb42e62203374d927b7f4a83b5ede254a423503024e637f838fbfc265888b08 +0xbd250766598ca1aaa003a38a67372c67f062f0548bea38326b5fa0f4657a9efa +0xf24a1fa6433bbe0e301de09be89498166067a7806be38b33d60e2dc62a912b99 +0x36466a7ba85fec3a5356c8b31b407e9a5d1fa5ee87fefb2f96380ac282155cb4 +0xbaa72765061ec2d57e290ce234c8660d88297e54f71d7b81554c215aec2f5693 +0x82c443d6d839571f4090de083b2682368685c44793a5c331027fb6abca6ac038 +0x4d015e776cf967b4206921828f75616b26f914060bc43f12ae81a1a38863f862 +0x7f954887d8547b063f1c614cac767f5f71e9e51ee765065a8ba9c4e35b543ef1 +0xb3512b4ca2bfe1fcec6e8cb310c3b04a477c1043df7412528f04b521150ab510 +0xc69e4048807d99e26133d329605ea501c0004885609c22a22b21c46bfcacbc5a +0x5768a98d37177f46e453bea08de87e11d838972df2ea036980e9f9b92ef41a98 +0x70485aa23ebd33d6d1841481802cd227a8208a9d993a729ea2ba472662ea5f12 +0xaf88fb1a4261675caf477edf61d209a5a047cbde80232144d2442b905ac00f2f +0x0316550c741ef372c01675584be9adfab1c680fa28668761fde3bf4f9e2b1240 +0x4bf4231b82938d7064e51e5e14c90a28f7c1105c9d7ec917645a975318fe549d +0x5a3dbe32307b822b5c56c6f7b713bf0abd2b31d84072bf7427a2821eb5ec5e57 +0xe3bad59b50543700ae4a64b00e20dadb800c67d6da6f83b96b477c52874746e1 +0xeda83c8ba17da1a73d89956ea8ab90389bf65df288cd83eea50d7c219255803f +0x9214a0224c6c24393f914f393a2855d52f5c756ea6ebfcd5d8bf2b9df345812b +0x39b63ec24221df929d1cc99c5ee11633f70a154423022f6881069d7a77fefa3d +0x0c5501c62ff2b7dbc793195c481fdc663accaba200a5c9c99d3d2fccd7859a76 +0x5d552bf4a6cc8bd4b7a71196d0e324810bbdcc4e68a406726053467f3472b325 +0xa5fb86028b3bad3340186c11f697b74f949c8c5904efe558f25542958c4e3980 +0x3e3b5053547f93939b64978b2bdfe3f68c69056b4ba1044db1518c5d14ec6344 +0x38ced5d5dcaf641282a6e02822360b92e62796c6b46ea57945904d967dc99434 +0xd478c54ebcc6fa816cc63712e90b2f4b11279e86b044c113532636b1895d0595 +0x64e2af83e1424b04bf95bbdb6e47552ab667fadb7bdd6bb60b21406ca02b3368 +0x0dfec5e7b7a72972e5d62661e67877c738894a3b046bd2561fceda280b15b0fa +0x628967c745955d25b75e9b91c8fd89b51cd22515f6e475e56de002d7a3146f55 +0x3348b2f6f0d0b453e68d5e8f6e7679040251e0f7d8e7f5083484384c4babd2ba +0x8705f86b8abcb28e0b85e279f11176afa7751c180f0f4ed7cf1be811b26ebc7c +0xfe56a2dc3902028c0eab5fbd32e562481db896f2650997d59a871261fc98292a +0x554f775dc3b9901a407e32b776b02ef54fb3028496f6c7698d8e38a06124ee61 +0x6d967e62fd3114382428ad9809681950a1608cd10f784183b3f004489bb06dd2 +0xaf7ae3e6ff952a77338591eaf62037063a75f796eaad5b62d714d386e2e268c2 +0xa5dd6b7b37ee215d3c5fd5505a085b2c661c4a1a309589c415b814cb22907edc +0x5b6af67a4eb9f8e882ad8de8e0f7364b5d8bd175c468de70300d00623f418b15 +0xe2bfcecf6c61ad103559748426ac9966466605beda2b8f1c36025fef685b6875 +0x952ab5b851192f47dc7d7da07ba7bb4d701903eb5079d9fc5a702edfc73b1f38 +0xf4d6f6b78ae1cdb8cd7a745837e37cebafe4f370f772d5250dc8b3ac733a4114 +0x25afdcb124da19d89894254ac5cb4727eed2e09c0418d9ec2274046942b015b3 +0x973fd71441a0708999b162385d0fd1dba10067485257e5f246ea16d3f09e8730 +0x0419e14328e17c9ecb115351b2f5e7f00cf86b451a983f7cfea9e1ee0219e23d +0x185fea6749003e427f3b0015bcfe4f38194028d9678090aa35743b02814b9871 +0xa3fbff9e5930d93dc5d89f0b637b3c486f389a92deb912f3f388ee10577699f6 +0x406f9df8e911b635683e381b99eb639d6d2c7375c52ebb6e54d53f92f90ae04c +0xf6a5947b979a944c2c3da90d873b9ec12580e8300f4f3962bfdbec974430ec9d +0x75bdba3bb6f835bf784e3d6410da2208ae81021dc4a5b45e889615c816193f06 +0xd706012ee1ee22b68c3dc008442fd1d25cb723dc0d3a11e8ce74773c5e21c88b +0x132e0f57946ef447750ea4a8ae8e3fed7463037556abaa2c4b6bbf49729aee60 +0x13609a243c4fd553b64c08f6dfc2e9f60ab998b056492e6904f2226dd8377a3f +0xc29be4fed94ae664b3e069a456eeeeb0c9677b5b4a0962bdd1173f7913cf4a11 +0xf3a5df8c76064b45a9c3daceebc0dbd7d34a3df5420ae15283f6feea4f62e56a +0x997e8f56ab13b3e97991395521ee94d7c4c1290d641796cb96278f92f7963d86 +0xce097bfce5e207af8ea341cd9adbe9d7f26dfa432c70d6ccbf2c72622ac6fa37 +0x555902faa4d1694b88691aae36251482e8afd2dcfeda25a02ff130892592af18 +0x76f8814f2ffe8a0e072f94de05b8934ba9e43c6ac2d467b4850e5879c7c04048 +0xfd18925bfa20ba5166dbcbfa6e2eebf4e5663548cb163c6845e766b5c3005502 +0x7ec24af2394f3b9644710c9f2a8d40cd51666cb5eb8ddf39297948ed966d86ac +0xf25553cb7771a242434ad926a7b72685235c4eea644479a77401f6ccf918c70e +0x6ecb4bd75e4693dc9f4e2cd8da41671db9ba61900fe5e602db1e15ba0ef38d92 +0x269662862b25e2502bd02054d571398f958123922f187e3ae33cffdc09636894 +0xe0e3e4ccd4159563d67d2746ef09b553f960a892e3f2af22b0a3c736dc54a175 +0x5db747fadfe96638611a918f5d947a7be089345221711c9cfad58ba9bb3c49fc +0x75683eb5c7e0cf9636b9c609a4ff9c6a3fa8f1d626bbf0288985b64905739122 +0xa992fc8bed9048a24fd7a5e12418877506040ee6974901eb6bd00c19bb3d0d64 +0xc15089064caa8ba7596ce0c77279550221c5967fde579355205801ebb39ba0c2 +0xe990c3da6fbd8c2d0cdb0cc31d60a67526f68369d0e820828e7d4ee98a993896 +0x94f165a6281ee5b3bf6bb7271e6a39f8acc4a1e66081f41a68e5d20974c19b29 +0xe8355f7f21bade31888994128db06257b7150bbfbc7d5eed226e9a065a1c109a +0xe43d5f4df62fc2230bb941c04d8e407cb64d4bfbed184c403732ae61b9cfcd95 +0x6f115963ee6c5b144be461e96ee9fb2a4581c617787c67555f2d192ee97b5d55 +0xfc085a2764c1a5043dcabafead2762ccd65aa03aa55c6ff33e254e143230ad30 +0x5edf7d3b70176f60709061f1364849f27bac2f4fc3cd97905c0d1d31499f93c6 +0x070f1f523a1129a590eb879403885bc35da478f37616c19457070298e5de927d +0x7b0e45016ca50cb25964ee47ea2bee4ca61f837940d4762b5e610c67406037cc +0x5fb20cecd40558915d1c2c50e776fc0bf32eb0f915b54fa0ba1fc65e150766fc +0x07de9672b503f23c4226cb2dc61b12907da153df0dc3fd137cc1f2ee0af65b20 +0x174112ab59a4601ee830e9e069de2982e7f3d38dbbd25c4f0d0668459d290b06 +0x27372cdff1a6e0b7c5d0d9026ba0e3f19379cff6e8f8aede9825f043658fa6cf +0xe6e474c4e71cdb54d554ac26819581485b94aed8f1f56e8a93b219eba1f8d9db +0x2196087b6f939b6e2fb248e196cb5cf68856d8608683cef215256617dbf8b0a1 +0xe1fb826b5bfb3b57143365c256d036f0d6bdfb8d4fe9e35ece79ebbed52ef950 +0x35dd2d6409b9c780c89f28d6c47f5debac55a916d93ee80fb36c4684e1490333 +0xea689c132c69be014a756c24c735b98f02a73f44a1d57ddbf75f6870d6e74e95 +0xe5a679902c927d82061c7a6839f899f60bfd723772d8d37685245d6e4a1fc86e +0x1b9f33524ccfcc02b81443353aa9a22508ee415bb6537eb9ae10d37b6a642763 +0x27c8407d66e7ff6c2b7382c5350bf1c09286d422cbedb51257ddb2894a19fb99 +0x1b6d2d6b91cabba1e68029de61faa163e3bf4fb9244e32d4042c4ac67ddeba6a +0x3af0b5367770d2b3e13564c329575e73d856d6dfd525d02adc018ee55ceeb8d6 +0x3f734655326817d942f44bb15c9cacb8200861914b8b2c160bdebe3f85ecd4a4 +0x566eb7e23deffff323e81db53353a9fed99995f98ab8b8c62c2b6b76492615d6 +0x8ac215772073f50e6da756c984df53f68ee9c4dc678ed53aeedb600756606d89 +0xde57ecde9c52ab689ad5bc3878959e9161982fef4b133e3795a03f7faa2e4b86 +0x9a85d3e2ed4261c3139f0bf7d4b1084955918e2d3767293004062b5faf67a280 +0x33193d0da4db77de525c62a3153f5c1ab60e6af01af3c55c5b60c00c4ad5e526 +0xc13566c6c8bf0ba9c431ab8ee03604241afcf04b61417cb27c129cd0a97e0f8e +0x477d2d8d0214bcf28bcd1b94b722a948227ed3f235980a3f3dfa3abb150fab60 +0x65253420476ddce88c0be7aa9e2daddd4af3ac8371b0f0279fda97d9f6173730 +0xb9eca4e5dba2f330f7db71edbf2f78e4411a9fe2dea3da3d996032481f1416ff +0x5fa8bb337e8d574d15580bc8725b8329eca4f784c2e617e331e30c7b50acb104 +0x6f62a6cb2e6b43d3b809216ec639725c13a340285dc878e831d7b0796f5784d2 +0x450b46bf771be1b39a00d51dac7f7afc92e569714ba25bde13e660c70a7bc45b +0x4afea3a600c13f4065cb32bfcdfcaba3d535bec4c4429aba733e51d8a06fb326 +0x1019fe4ea45c231140254c2cb9bcfc242cfffcc06d48c641004fb1eb6b9cad92 +0xba8f5f61d22e74ec369bd543fc791501d8a05c90110635d05dc8e2efaf6cfd77 +0x144fe5fc8f42f42208d7e357bb8947f4013c47999b506b7fad8c2109bc9df42a +0xa66fd1ab6952a10bafbf9cbeaa7ab0f7bc7477d6b97831d3c085069993c0e629 +0xe42b7626a568385909c2eb2ce97fd291d1914a1338e78dce5f0541e1498a2e1b +0xfc1fd71c88fb260af2d5030d8b4814bd8899f2aaeab02ef682f38709ffc33202 +0x63d0c6a28c0fbacefaa3c302a5a8dba7d2b45031fa444a06c8dd8cb98de0eaa8 +0x317cf803e0bd5f3584374c50c41584dfc58dbdfe96d75a523e70f1efc325ba8a +0xe7f7e592349519a09284ae6a16d7bb7ea72d2981b28d6b479b92c7cd0467b72a +0x49567425baa8524a3ff04be7a1f0dfd6804568f720a19550547cf1042c30e11a +0x595cfd403175b414dbc3f437484d8e4c253f131c15f8c589c4023d876627787c +0x487446c7b0514a0e642259f26a100573083d3db327c17a302a25e7b62fe0cf2a +0x4c006f52f78a48816981734251d7359908fcd5dc4cb66db909da2d34fae5bc46 +0x6f2afb22466a172ae420313f03c688b020319bdf0a5e602700aa235b5314c7c7 +0x9e8abe7ab0530a529819d6cc3acd3c8d6f632d01c1456308f80d460deb83dd7f +0xad8e3b0137ab8de1e6ab1eedfee93f818a439ba5ae110847d239210b33494498 +0x82106828bb3e985c94b0be9efd957e7265a712dbf837db9ca877e16560dd7b83 +0x37aafcdcc056bb65207c9adf44e5a12a5842f4a29299b47cf3292f24885d279e +0xbafe0ed0fec37d4422c16c752c53b9887646faff8ea4ef4bf8f355f26da77ba9 +0xdb454491f4779b0a9a838cd0f605b930ebd92af450b01e37caa96803be2b026a +0x0d8378576af8253b3802dda627e6c12ff635db5b8cb4fb64d6c88b93877b1fa1 +0x6ff5737e4f413410782996cc383153ea127b1fd893cb87e4e3224822c618eba0 +0x796cefc46623020dcc219fea5c7b7d3a1cd0e4a9ea1a0d8f04d1c9509bb31ed5 +0x71007d87379f47a33f57f3a86fc31f092ab7425959fa99df00e1db9810a52e08 +0x06611e378d7a31f32450af63fd5af51bf0f8ce7ad61f8078da397fcccea4f3ea +0xde1fcffcedb47d6a17b5d26bab088037d3ab94cafa53ef62a4e7af179b53994d +0xc39649172e7ac72f2ee449c51698354d6f81fe40345574fd38e1b6592b1a22df +0xd4cbd6f361ebc1e4e2e414ed4685fedd7d1de852d147150fdd060b088a3239f2 +0x8d06e54aaffcc5e0f6630d904d0f88b9572e5656f717a352cc1e22224c3ffbb3 +0xc7460b42e7d732149fd6ac644dec3b28f41d640a4905c1f1a689f85c79928f25 +0x8ee93860a439e439604247bc2a23731ac15ceb0065d80df23987604efb480962 +0x46b58b106a1723cab1e1fb2cf5f8b922ddfad966ee77774bce31027cfabf779c +0xd02548fb812edaa494aa79b72c93ab41d0c512c05e2ff66bdf80b93f33290ff0 +0xfd121acb85c9c6cef554f3c6ec4a62c1a582a1cda13354ac967657963de09922 +0x8ee4de84c5ad526d89f03cbdaa48e809e25f294c13a254966c0f683d086d0049 +0xa593650a277b5ff8e8488cefac349b760456612578ea7f5bf57177d564116134 +0x478e65dbd5f37dd2cef701d778551543134861360be7fe284b0401e70a2b82e4 +0xedef0b7570a0ce138ef2f16bd3c86eaf5ac58f8a5b2e9aa1e1bed48cea5425ff +0x5d5ed53ca875fdcea4f3e3326e759c82baae26f0039891a3c5f1c39de2989d19 +0x4ef7bd31f920bc7781d535f2bc917df63098c140e35b9c3000ddf7e629560ddb +0x3543740efb56dbdfd78c4261fde4446d72c97c96e81213996f261ba2e474677b +0xa9de749b3d2396e8c7f0629b83224c7f376b7f3e0df4b5602a1d252772d154b2 +0xaaf02bc080254da6f1bbed3e3f9a8ddc57b53b6700621cfbe9618cd5a7fa5f51 +0x938bc9061f1812664fd41a6031e74c66884eb0b97834d2b860495a9361e33a88 +0xd0ebb521c7330eb5af745a52bd12e502b2d7967ab9e27f8457e72a0dc07d10fc +0xb2908a7002e23565e6171c540be1479225be96048df081b2a3cd8eab22b37261 +0x200d62ca4d750858350d858bf8c530b8d50802402cca443bf42a7c08ceaa1aae +0x6dead54bb98b5747348c2bac400b4d7756bc9cb5eda954be16b77c624d316239 +0xb1d7a79ca809de90a97a22947433087d4d6da2a300e780dff0c04b327d33f477 +0x72c0614354ce382cb3d0a456ee6084828964d9fdc0d5b620dccc140a4640b205 +0xdf9486abb68d6ed9f116c1817225d13bd554ad0ee6fb49b17c949635942b7b47 +0x2966f7568e95bba0b707015e2588f6f03d52a69dce6d9b53a267b89ff91499cf +0x34fdbe14ac687098f84513a7f5961f2d6daacb7c086a8662405d3d0533970c95 +0xeb6d386ec996e7adb365113629952f1d0f3532b1569aed9185eab973398ba82d +0x56fa3efaee5084a34f4bc11a7d57a8af764753d795fc1854ba14eb24f122f3de +0x0dd8e1e91a7431398372dae76a797f5fccb85c286249859c986281dce8d30a8c +0xc502aab6a8b66e70fa0da2b895fa0296a51d0c9ba860800dd0c1754538ebaa42 +0xb4d83fcd98d553a3d7608f470e33a02637c7af5d6f56df0f76c7f8e45785ebe9 +0x47a03c658ee6bab17adc0ce9d68bad47e211dea0161fa0d059de095a53b2e38a +0xdad6abc9f9f6b7f6fc781b4c6349bc1cbfe2232caadd21b4096edcfb6d4b256f +0xc1a584ba471e6f23399014ced81557c33411b7948263cc27cc5d2ccc42bf8917 +0x505e50c5bb1cfbfacb16e21792ab6d499aad0fb4af23376a12f8402258ecb172 +0x3d6f2f468c54834640764a769a72b1c51bd93aa8386073264efa50507c78eb29 +0xe632a900d14bf8d18ee6bb6b061795152a13974779f9cab9cf77bf442644ce0d +0x2cbc10ca4675b7b7338ee03f3f91ba3d0ae3c7e5810be75ef6b7c9df9b914f13 +0xfa4bf9a21ddd6b1ae96e97c76fbd990cdb3d2d50b2b38f2581b1021ecfc3db3d +0x4d4d36c6042e175f7f766a098daf440083175376146d042c57c86e8eca938fe5 +0x936a6b1049d60a421b20fdc47afa110377af34f375be8c87267db22e63b6048c +0x7d9870e0c56afef8d70dc18a8dd5910b5c1ba165bdda0ca9ad31b75c587852f3 +0x5a5819ee08e43fc67bd3c36a0325558234ccfde0c769b0c492db47059958ffce +0x67c3ebaee8b2ad9ef69cab6889a0b2d7f1f004a757629c1d1b047c0a2391f14d +0x8deea068753ef0387e82fcfa6b48d433ad23598e86657c0c4600652881733d25 +0xeac4158fde97778b0c73c359f6b0eb6ed48b196f8034221bf14b03ca04363238 +0x227f9f96ff0570ddb5460f33171933b484eda4548abadbde67fbc6c69a12ab46 +0xebf214950a81da648d7391e0ba2cceffa3769a749721392bf6ac8ad8f9ce1a13 +0x15b685c1d361fe6a400e19e597e1f12914166c619ee488e0f66c56099ca4793e +0xd12c30f004fb3bab85c28d7dc625a3e8db9afdc42a720bbf60323defb5978ae9 +0x87e89f5303c0de6b5a70f5fab13cf29b6b81edd68d2cf04dbbfa15a17958c8d2 +0x8ff363efa96881503b32c4f4208cadcac480fcbbc0ef468a72e6a3c3ada0e574 +0xcac4a5ae565339b1c7aa604c7ba1aff3d8a9f33bf43bb39d428e8c36e6048ace +0x5c8d546dee07dd24226c6362bdae25d9c4a38e2e513608c7ae26a97a3d6e1237 +0x4f24466cefbc103c1d98ca69a5a67edb17dc9b210aed52322e8da1ef87ef0818 +0xe54492c75c65e46d496fe2268d9c347f4c6e5d7340dedd1b0f6e2954c611f6a3 +0xa13339b6229c6820d774a3bdbbfc93ee4d116de5afeea37cc3fcee5ab02cd05f +0xb6e85918b2086f50f9e2a7eb6a89ba6d13c61f625592b66ec7577ea90db3885a +0xfe9a73af2eb42ba9dfc8883d8660d579e73db6c05623ee5378b18a46e4d06df9 +0x683978d9f9fb5092693f7a9a6265193d624c2711b04e4e6439e902763c4a3d3c +0xc6953e7676d7b3876513f53b4971c73242f11df2ba840c2651e7cd0e2a46df7c +0x02061fa868be5afd24b9a2beecc23762cf7ee2964b83617575e138495f43c67e +0xd96b1f1147b6b5399fc15d550a67a18398ca8503f71e4c27c1940a9af8ba2953 +0x0e55711dc75ad8ea0c25c62d3b5046fcb2ad5fc922c1a6b238d63a0d18843990 +0x9ae906f0665bc9aec79469cf0b728bfe93f0d5d0ad8789777de7ee671fb49b57 +0xb48d686a48d74101202e918d1918f0e8e2db30dd7426ebe95d1fab078a7f3e55 +0xa90e790189ddafa53a86ffccdaefb38227af98c40bfb2584b9e1bb68d560c83d +0x3941e7abf2cdc8451c4f88296f903f66fb93d9aa30ab90b69096a91be867ba36 +0x81cabde62b59d752600411797d1dee114d604cf92d8b935049c0158b81eb07ec +0xeb9bf624d1ebb94c75dfa698d24340203e0162a0780512d217d66fb68ab6d0c3 +0x489f159f146aaceff4edf533b55a3651b66c47b06f702d5ac54fdb44fb9b9395 +0xd70fa1c8684caf699b6b0b2cab8e29ae8f7eb2bb77717e4d2186b4d6aa0c7a6b +0x6bf7cc0ea30eb17ed1042397d4571ff6c1b6ea37cf101c341c3c65cf3f75a4df +0xd2c9d6e43d3f27c6767e1c4b516efa5d31bf387c9fda4e0871ffb10bc86b6705 +0x492e12d7629ff45450158622f7c008cc0a8f02f7c8fcd2b831a8d71f38d690ed +0x64dbc05c8c4087a296d763c54ac51f2ba16f9b22757e42227e849f5b6ee09cd7 +0x38e9f191066718f404c93c67d9f95fe67d0ef6e0d6a0aa95f7576843594a656e +0xa9cbca7615ca73d0f45c1b8e120900c404bbd7dbeb2b24e789b289dae602767a +0xc939e6ee62ab901c38719b41d826b3eba1e2153b74f50f4951cf8e3519da10f4 +0xfb5b85ebdeb236a87d26c751968f435e76fca40d07d50f3cb9f84cd51c14c02e +0x4921f317b20c47066985435b003424bbb9000f39e77e7bd09081b394c916fae3 +0x4975754fe83c477a7eee309f830fbd18a711f07847c8b99b2226a5e1b8c89d1b +0x7378f104378093328b67cc92301da866e3f971bf362c752fd7ff37a08b113717 +0xfd94ed7dda744aa69b85a9cd628c1f1c10330d588455cebe2579cc3aec890928 +0xaed7f0c467e210b384f1aad2065ebd8fedb46d6777fb8190c82bad7ad2ac9ce2 +0x88ee359df4b803394d4db6508cc1ba68f65d61b84afd2acbf032eda5cd133e49 +0x13c6105e8dab1fa775c90404e47a3df21a6ba7d42faa354d4807319c66b3b52d +0x6af4c7b8d31c76d89ca38ec511b32251368786dd07d2db900d0ec00594e9023a +0x9f8fa9783d5e816c4d5795c3dadf3feda05f747a78cade07bd4f724060d16f13 +0x0755bc511f87ffac03ba36e7feee07a17128897b83bcb2c32f32e8e2ee22ee3e +0x5fae94df33f6836871013f6263ea855deb1600018fc80df73ba4a0bea893c6af +0xd5a3e2241252da2a9d4bbec690f26b4638f6fd46feb5970e2ce726e8446abb97 +0xbb8912a28971a5982b2a1f4b264c37aa260811f0b0eebdd562d51ce450dd4996 +0x2cf04d7e01f5cf0d9073ec040bfbf3b94f9f48ecb1d27f757f2199933380be34 +0x7fb8052f4f54eb23691c4f4c0bdc8315980f32482116964819fd9a03a8589e2c +0xfc1c6d6fbe48246193ff2debf4c1e93a36329d0c73d60a2325f9be7d05256da4 +0x1b3d4c15b9598264c1070777852b446f0b3c76289690e6d2b9aebeb3b80e29d9 +0x49045e25ca948d5b62fac0f3408f4d6e58117a163ba168c15be831d4f1890394 +0x1420490727c750ba3d4f12d714f0f604eb78a1f129bc8721a8e1e487f356d1d6 +0xda2064b65165368c5d524f919655cc769351e713451872819242bf9fb155f452 +0xca279a11be7cefc6eb19dba007ba1f37936d86cd44e8c3c5f53016d47a9b6a66 +0x41c4447baee7384e0b8931cbcdb939b7c6199fffb650205c1e23acb4fa11d888 +0x2dc34a04f3dd2d881ee9503fb3ebed05f426b7e233997b07a8f1ca6fb553bff6 +0x5f2b5624c76740b6b13fe5f92ad8aeed281896dde68258fd476769a59ed995b3 +0xa66fb25ec3b05e9bbdb55c5c5016e106ee51b6787d46679ac40e42f7d0c4c20e +0x6be76613ff96002215b936d69c5289f22f80fda60e63c955a2ec2bbcc2c41378 +0xe1a0f34901527c67bc9e0ea9fd32862ba7df5cf0393f3f317d7c5e715a34dd05 +0xd56a2ee9d2ad76724542a5f739a512a7f43bbd1dbb497f2fa4842265c3738920 +0x76c25892c20c41997ee640ac98bd2902e60ea20bb915a9a7e0e49402eb96ae95 +0xf3e7f76315c88b968ba8d11c7741287757573296e1a7620a3a2d7b52af3f77cb +0xe9f0a02d0e03d3a99ccaa83dcbc5cdeae9563c13cc3e7fc51aea9d4ab9b255d0 +0xe462b92c47043163d6feaac5266bc2c37f6c9bf66a07ba13926f5acb95a0e0a4 +0x78e9de8e656330e9e5c947a9022da3f9c355cb4ed54b56aa7165ce07461f669a +0x03bd8f89b25738c30030590acf99fb2822ab8a88295e2ec55c5996c9b3f7687e +0x9b32f129a0a505251ec84ea841e856dbb370e05e5d969618c79bb663ae9247c4 +0x3ee4e74f983c7b20eca0abb3040336cbdab735e8c79f94571d5830cbcd8dfe55 +0x5e2d4b6cb10cd628d299fc23b1ff5ac980edcda7d85ecd904219583cd7a11455 +0xa64a82f82eedfd9f5497d37f7164672083a3e1f036188031906043c2dab9b602 +0xab3145d4ceb2e5c9ffe17688c534b83db1aad3115aa308d89fdc03536e18dd99 +0x3634ab52a684dbb391de6ab343146903112f509ce78a49c3f81ba632c202d38a +0xd0085d6ee92b0fe7c1eb38ec48dae16844ec85529c29b94422a70e1e3147934c +0x144a388a6a0c89e1ec8e84aad8a71fc7cc61de14f975fc289f9c3ace3813d886 +0xd26635f2584dc481c0e040e518882828aca6c17decd9abc0a59da4b7f34bfb82 +0x183ec7f6d22d1017b34d1216486292dd1016542c31c8e06a08d1d5d0fb3769a0 +0xb0aa84025d89281bf8ff55fd0542d666e98e5bf99fd1ef210855c7aec6c0f6f8 +0xc13abbefa7777a23b373c58a44ef628e08044e5b50bfb75d4e01354b872ff6e8 +0x0b8ce93401eece9ba6ed401aa13ee870dc2f7d97a83e46a110fdbad7d5c6937f +0x9b46ff33974f20fc2b2987b315cedd0c91430965cc28491ee8b97da7d647b4e1 +0x9857ebf84b5e9599ae5294066f112dc7bcfab48c4f9611a136397ed6a1780ef7 +0x17d939f69e8f78a61bf5422e9b279e98d434d1d9f195e2ab6f13de5c41f48c87 +0x61f6f2604148e15889f50db654e00db4222faa9124e41c1652cc13b1fb43ba38 +0x6464b8135d722053321ca711302c6f3715436d804e08bbf7c5200a77180fc5c3 +0xe64f168a6f767e4c3e54aae24f1c7cd597c63824ff09ca70a31903f00af12172 +0x594c4da31c5f57367f2801ee717e42ae890a38d8276b75e7143dcc4c70d85511 +0xc84459ae1a0b194e62d7e09595c0c533e079e9fef08346d6f094f6251b1d89ad +0xcc9c055339adb7490a86c26f89bb1f3b5ed983656ad17797ed26e2f423749f51 +0x72185c93bc8ce54c6c35256c1d477077109f6910be2327667a4b62f2a3bedf8f +0x3ee0450a5b802888afdf795e7b809fb5f72d0593d134bb42c180641be09d8b00 +0x1a1a2bcbbb3f95e471f3a6c8a85796b78679a1078ec91640780e430cd6f53bc5 +0x1d6d0826c39aefe67beb859222881ec8b1de0228fb1a1787cd49f02260178772 +0x9d98f1466c14d71af46ab615c4b3ea0134463b089ceed005286923861b388c2b +0x3463c0395cd08a6e68aa5548b632df0f0378e5409c32135ca7b7dda618341a87 +0x04bd5dbcee94f404e247dbacf2735eaf833e254ddb3f0cbc59989ff228acfe46 +0xb6308764acd4c9df40e34806eff33fdc058337199a27ca36fdb08a01e420ffdc +0x3ae4a5120d79a13e96b9aeeff78b62d1e09aa4714a9b2e0e7c533d75dbf91e17 +0x0b318ef9533a583d4a53c96eadc4c3dd4ca9df075b9686b2e941d2d3376e494a +0x7e4b1ef0e9d7c3e8481622ceb20b8dfe72e5ef2332f72b1267fbfbf7efe00335 +0x3cf261a71619d8ab88d110b9fcb14974e2aeb4b62294d746e883b85804a61f82 +0x3c9c8c314d1c85c01536f9aab5e7da5232fb5464e81f0f53e240fbad1dc30ab3 +0x33f153c27386ae8aef96dd332e409d038b6c83df607bd43c4977c6ec3bdb6be8 +0xe7e583f8863a9193b2e9975ad31b2e85c245e18743b47f412eabb4aca42792ad +0x7b748a9113f70e394c179989e3b7fa2f2f9c649a973442560935f53ac3120c66 +0x7d62abb6cb826732c8e3952f389312d04cfe14be31f543123712f86f5760345e +0x665209a652d3422b3bb5bd3fbde8e66df0a3447132435739ca723dc3492fbf62 +0x30d69104b194ae6c6af512d5f75e7aafb8849f3816e18c46b2d4f0bca2b7c1e4 +0xfc47fc71ed72d78fe06e308fc491902de652b8f1cf36e523320aeabf55477c35 +0x20b26c25fd394ff62ba3ecd85b9c2731b759bdb535ec55b6009bc0b8e466a3fa +0x00a21f21d51126699e379c91358ee50078cff2366c203fef9bd009d3157f0e1b +0xc2aa1df52ae2bbf59a8392782c09718b82ff736646750278c419a2552e4c7ce6 +0x627a832f8a3eca12af7c32d3a8172e5cfe330df0e1d9e2d5ed104f4991ab4ae1 +0x64c725d7807f55daf3b169a43aa5f939e9ab732d48be6b5abefe41dd6971d7ca +0x9c99b75b77225c316bced1e4fd163be3221833779cb5e3842f97b4190d1076a7 +0x25ee3fdf30586e88ec43828982db019b3d54735233e2b2e00c031b93cdcc183e +0xcfd8756a09665c7e67d134274fdf3b83fb5f92acffa3949bb63c2d573644f1f8 +0x4a6541974617acbd47a70c15bb74238a9f5b602dc55d4d3fca10f79de9014793 +0xd722c2052b3689725398423f6a2aedd1b86b8dc0eaf982d1b40ef881707bffb2 +0x244e8fd78b74306468dae64ed30844a576afcff7b04dd6a19423e63be0c725ab +0xf73f991f48a9b802045ebe948e94f13c66e1703d4c3a93a20b9774d5c2c3c252 +0x2ee804bb09ed8a84fdff5d73ab358e9f08cda4bae16a6c65d3c5300afd14b3b3 +0xba9cef9015879d7f8ddc264f19e0fb6e6789cf4bd2f5856e28183073f0b927ec +0x42f403b453c2f5b9767b86d77a14779ca13e058b3b068c33ec1406a3b67ae0c6 +0x0fa214a1cefa335525188163a820fcae4c654728e161529b38e1226d2134bf50 +0x7257cb6701ac4548e2054f6cbee5c4bb94ca2c713cedccac07239efeb1aed944 +0xc0b3c372ac8a72bd641f3f0427f7ffecc1f7c09e1bda4852293b4731eb655224 +0x698b96ab175461168f261d7e850fb3224ff5c4172ce38d10ea8dea4e7d259f1a +0x465c2109d25a3b70a5363c1fb6e968c1c2af2c9d6485b4032b2c12e5cf42e88a +0x1c69e697b8e06118e4802499e6f31749d3aa4d34aa89c5ca4aeb2081402c9371 +0x52691d3e5bd1c95adcc4d68b0aa7935c4e8c91fed5cb3e8f314c2a6b3e72cb42 +0xf3f77533b4d8a8a18877a69073ed333dd9a6c31172af87f7aa5180acfead945f +0x058a9153e61f3c7e3f348cbe37d7a703324cd429a301720656f21d10d7d0d21e +0xa9a2cac1dad0019cfe207b29db1bc859b8c03b1b656a8c377ee7d1718ff7dd4b +0x316920150a5fba594a53ab36a820c72a512696f08d137f362514ae2a1888981a +0x995e637df714ee0694c3bc52efcecaf06c1232167315c8476172639c5e307170 +0xd57d6e5e5012d819de1527a25d6882d9cedaa1bef626b9f0096c50793d6c4c35 +0x2e414d27e28466c1712d0f22f9440dfd89c1a26ca9671e30ccd4d70b6ebae2d9 +0x82cd4d655ab5b22f0b91387e93c631a10a5c1fb80c8be4655e4f18a1e0c770fb +0xe3ce3ebf87554f1da693c5db5c9d3ad979c46eb20f00a3d7fd6922da4309a785 +0x2d909ba44ee5ecca997726dadc420ac17c1432d6214d2454bbec21f5db41a40d +0xc2edf064b420039a46ae40549c96947ac759c35e249cb7d0a9731349bdbe05d9 +0x2119773c6c9d7726f8e819781d137a1e5387a88198df67aa3ca5d1835cd8c29c +0x8fec9593ccd0199f97aa2c47e201c0d5d4a2b368d6163a48e98d3693f4bbc42d +0x7e866f9e2034210d38668381a9d6401fdf9f655b579c2518485d8400d23cb7f5 +0x2eb3bc4ea1e0934e5409760469afeb50bb542cfb1b0c2208c4e1851c493ced5f +0x95e1d8fcac2aa4068cccd1fa56ad482038ad0f7a9bf53405d9aed9c660e68e80 +0x7ce20ea9b6e68b1665b50c6044139d8da7c8d668d633f7c4c1102de326bab294 +0x1eb5399463e7b2c0d12a4b289ce93a66837dfbad5444d0702b83b881b3947a72 +0x44aac3fa16484e8818a707f9be4c5facda6db008c54e596947290beb7553bc82 +0x13b1300f68aaf009d58b75749d26c55eb4783c74027a5e388f2e4b3ff7b07ecf +0x86e9fee9e5a59711c0aeff09562d65c89524f531f699cb74db996e2af092f50b +0x5712dd5e1c3628c5974317ebcff5ead86912d105957a1e46ed3db20dec387a48 +0x49673ed5f71163b0b4287265ad32f9f5218129bd76c155bc23ae1d7a566796f8 +0x1a2ab07a5c2122590d1aa8519c1351539de9412f8bb113a6a85dae912b2c6dfe +0x6f278ed8cdb390667864fbc327ef518225cf52e4b034eba6bf55f3f0cc012b11 +0x2db2a63f6def39599e5731d5d4d4166c00482ec796f51784d8d441a19152accf +0x7e49f8f58d1edae213f58fa07a8974d75b30800124f40a8d91774e28cfc1a2d4 +0x6b5666b01d872b70fc406805ddba7bedc09a7766c9241761a0209f2234d41dc7 +0xdd54e8f4129452178667d6ee83f6046c7745448e21255414f33917cfc01b71a9 +0x50e6e932a867e105631bd6803cf3f06b06eac976749f297bae46ac811d8c4c5d +0x4c9bf220174eb3e9a15536ff4ff1985826e0bcef256020686cf8841f56a1119a +0x412f4abf7e1b4160ce5952480699153432c23bc2dbcd36c4a0dc75e2d1fe5a49 +0x4e67616d87690e2cdea4068f654dff120a25819739e26a5849b8ffdd0873498c +0x2b197221fd7fa1189590a4f1f0b289aa06c96a12f7e83b1c1ea8db4a8bdbe527 +0xcc088bbb902d61be29d35319a10b3b05cf2b05b5a4aefbe0ff9684e962f282be +0x12f9092c1dde4af8141c817fee2969c4f1ea9f54aa46568903ede3d6cb7cf24a +0xd92ded2cdf60527bdb3d5d936292025f08a4358081396ed1f5acde04cfb44e17 +0xdc580ef112a02c84fc1ce01455cfb66b733261068b23a43951a23d9715225751 +0x6ab514aceb5e5011961ee45e62bbe1f7df9c2dd21d37634c07a4fffcd4efc29b +0xd643e8eeb2142c024841667116724a0175331bed89539d22ae7c9e0f2051099d +0x2f191f558ae8777b999768422974d523f94906c535aa70fc78c360ef43f684fb +0x40a7a46b5060e8318a0c86df41df7c41d0a207356c020eaea9acb4e7b2ea255d +0x3b0f1646f432c68a29f8188e6c5871a118244c597e5516570dc05a245d342dd0 +0x34b34f1f02f3322b2120f5d9c8be1f58b0b35b912d818842286622ec061d99c5 +0x408f4c56e0a624e889bfda3977c91cb0c1e3033db07c405819bdaa4a2e0e1ed9 +0xa8b175049ceb979270b9a370bad5f1ff55186c4c5449cb99742b594fbee14642 +0x3586405fd9a80e4958d115413498dfb7326ecf1fc87742af3695976170e71b04 +0xd85688953147c6753a09a73434d3d10e79f4fe82fe0a68224e450b484bfd983b +0xd83d25eb605bbad5e415162562af8305bbb00fced46abb68cb83fb25e3a72352 +0x35631b987799cf55f9634a4b9bf40fa483feb6de91c24f2ca6a40a8803922846 +0x55f014bc6c83e84d79f7f9e5bcd4ad978644665943ca0effd32da9061043fb61 +0xc4d388113c8f09a9728cc065b711d534898a8b0e810f3f80aa3ff90192663837 +0x77ed962a41ab64520740846585b5393dee17c462ff7f9effb1bb983464be3164 +0xde77d316787ad7475e34c9c37f61a1f665f0f09af190bd330e4a18ab9f8ad550 +0x79c327b6de8aa00dd5cfe7220ea1e2eb8931174c49f3e04357cf3d36e5ae717e +0xe9f07cc067ac7ba972cdcf006d7ced8858a270504f7bf2bc1134b908d9f3ac45 +0xfc7ba1ceb758d3055e565f56fd9a528adeb3a5181a2dff3a738136fe752a1daa +0xe8cab1e3059005ca39e0434ac36c4384d129ba6850d3351d721f38645a0897ff +0xefa4072884c46efcc64d36fb9150dac19c7d986e885be362280cca515d005f9f +0xa97d3e05d6d618093929b5c70b39de8d46cd4e6ed6713378aef6637dd1018565 +0x87c2c386a7c6e937067e17eb2beccddf695391c678213709ab7ea3986beeccee +0x6a4b9970c7bc61477470dfd9480ce527f15b5e25e1608288bd4c652a479e48be +0xc087d894ccff1bc2e9d66de54f2b3d783d3cc3358e299236738abbb8430695f2 +0x481ca3d863d8fd0c3f94bb3550f174f7568fc1556aeae00c00b16cfc105e5a90 +0xdf1a47dc09b2dd80a84e0ff53ebed7b75afe5a1679200dc7b67b1e74f8170465 +0x0aa6576c7e517786fee9d2313896196235e660606c94cfb345e21eaf2852a093 +0xdd80342e3ca766f3758bf06a514b26decf3e6dbd6498b235468b9673acb3458c +0xd701ef529d2f0bf3013b933e3e8d315b021dd97dbe93efb418e354678fff56c4 +0x630be646a9359a8002b48f51131f10f0fbbbb183a883fd88a8e13b2acd396c42 +0x653fac5dd8c0247569c53d17a8882b800cae2da261d20d46d709f50f390a13f6 +0xd83272a33ed5928b2ea90d8d84887d6d39bbc8ac0685046089b1fe4fcbbb97b7 +0x06d5747568ef5800326a3b54b18746bc5df8ec8c22dfe530cf6eac066a74ffc3 +0x20c370a9781caaa02414c8934e90bdf43342bb08aadaca92b9cf9f3bd55391f1 +0x144d580a24102c4d9a40405bfdcdbabdfe0cf5d2128c8b2b473abaf9523f1411 +0xac7235e01933022ad427bdceb6ada9ab21c44a64bff01c8f4a38e7682f81aedc +0x99986cd8909b4f91e92490656ef8408b5e11d8d919d8434f18dceb0d5e184376 +0x9009c0975f350b549eae833b36be26d4cc13eeffd5aef44497d90e5f305bf073 +0x3d14d1a508ec53532663e8a26d44b3d25fd3e7f8af575cda5d297f24e14e86f6 +0x6bef53c33375515ec1e2cfc5e810b39ef90e1fe3913e228b942a99baa29d5471 +0xad68a16943dd038f37ada34067ee85e9970d98a483aca30b511dee5a7b8085e3 +0x091bc816e6efec4963f432291eadb8d8746ae7c84e3c21a6ba39a0a7f341f6c6 +0x433a9d79c7579003a775fbdd7ffef700256a1e8182715d22843ef8283eb4231f +0x175745df9597eb775a371da27eb2e042692c0175c91a530f34d50fea4a87982f +0x8fd480b043780d81a45013eb37a24bfbd9d7fa761c85e2ee743a116d4a093608 +0x4031e296037a981ccede8523597d381871916be2eae3db58bf21e40b2209e8cd +0xcb7af06bbf1df41f216229a3056f94a4d5004fa054cdb579d9ef8a0c0b8c6719 +0xdff79854268ce1265f527268cc46f0ae28db853d03d351c08de12b41cfd128f0 +0x3f50e8fdb9a977d1057e2179f8fdcd3317e340b4f734d118d90839f2ebf21992 +0x576d795a975ea5684b97202bd8f9f62b24c525de3582d2d29f4edf42a462cd1e +0x9b9ff9bfde50343832d9b2717d56fb3920ecff30defd39fa563fa35be2f86fb6 +0xac59d42a52f7ba002815a63390bbd596f9b115a31a295f18d985e0f65f639175 +0xb911205e46a05eb9c14f530baf5bc5eadac3a32154c5555a8c3fb62cde650a2c +0xbb4c790812bc61f802129c6ce9556cd65e890d084105c420cb136a8b19b9e405 +0xcba3ba6b3cf8f4952028199edbc7608743200ad82d04f5aaa239eff43bc29517 +0xb0f566467e71458750e29e15628b3f284f67f33be56d0f6d9f596820604bc98c +0x4bcef0f0949cc3eb933c31735cbf3746085cdb9e0689f128b0ebc3153e160953 +0x40ce97cc619676eac43a75dce90eff9cb551c0acee00623e6ee70900ea97f605 +0xc90537ad5dca70ca8cb19126d4481ca9daaea53d108818df15b90e7d78988c5d +0xb849f19b1d188476a21f8b0f0cc7d8988a224a84defb7624c99309131ccfc3e7 +0x68accf82dc81067961ee26141e6c87151fedbf88952f1340c867baabf6949d9d +0x690aad214c90bfdf21e0c5840187bffd764b03492fc37e6356d145c7c84524eb +0xd4c07670eb4eb80736c7021282a4a8741df9778e464719885c9ca31b3e5098a2 +0x75e1dbeebc8a2d6e7dcf64d234c521997103f2974f30d1a1472ff70f20d800d2 +0xe6e42df40bd571cae4b08a005655bd028bf71f31929595fe526082148726a349 +0x09d6d49a1b773ad8a7774ca8c6642f52620f41539d517853fe8104cd16c72003 +0xf0aa8279fa9f7e29abed230f40bed56998a1e781cc08c96faac5c91d5b24133d +0xbdff88fadafac02fba4ccad8dba4b027feb10c956f8b8e12e5597d4760e7f01c +0x1415b4b4471d0a9f496f0800db497117c688c847b559b801302b550a0011515c +0x4da6f7d9f1df30d0a7ce5434f0be5cbc4cc34d8ebb1f1ff3d6e18bfe9a5dc39e +0xd5a6df8caf621828872530201ac04c9e46fd59970699c74cb4778ee900a40bd6 +0xa8833c9d33a6aa9e98459d87d7a8c57bd421489988cd7d705fc88ed43bdf6e5f +0x65c53170b5c1294646c0d41e55d6b732bffac1640c49768d7ec52bb1fd901716 +0x3930095080e7a34c1df31ed6d05358b0c8bfa9ec79827a417605818bcc5795c9 +0x40745f7451c8f83209aa5c6e08cf463838c4161770d24af330eca2b98034f6c1 +0xd9749458d6db88e04cfaeca2403f7f1a80454e8b732b542a133bb37004a6fb74 +0xe88846853593344867347b17062dc08cd214bd5a150cebc1da75cff745068972 +0x6e377d03a4d54ffecc379d3a76d4d8aa1be61dcc42e22d928370f742a97366e4 +0x4537ab8988e429c3787571a2cccf623caec231039e586897634fc39065c3f9d0 +0xeb017dab2bfdc0973b46911ad46e74812b9954f8db6e2695729c601695300944 +0xb42a892fe5ecdaa06170a7a8b9c2027e9e889731c2cb810142ef6c42a7f114d7 +0x40b2a55616e00732c3e5a97a738627212f71b2ae4baf9cd5fd29050e2edb25df +0x684eb6827e4dafee6d1a43ffe55e406cebcc46c51edd92b6a967a43fd07deda2 +0x34527b0a504ff2a411b55b24a9ebd4b0d3776c7d533c889a003ae899029f7aa6 +0xba1903afbfbb53a467fc7b83cbd44a5eb9a80fe4acde3bc24efe165fb7e22d2d +0xf5958d1cc2956da64083cc39426eecadff4f352e95e5a8b50676b48c9bb6e028 +0x1fb28e1bcad9ed6ce5127d2d91ab2c511c4c87c680958413bf88e696c4298a21 +0x6905d3553766740d39bd62340afc5440b7646770e3d020e37e4424e9eac45225 +0x951459ee7e3a0ee98cf719070ab5701cfdece88ff17693196ae9ac39e62d1e13 +0x8e6bd56710af3792248e78d9ee3671e45aa20ad40be084b7fde37ac77702d3a5 +0xc7f9f3b5c5a35632e8a8720e84b39d3987bfb01dbfd305bf359d9bb891ec5596 +0x0ca50eb9b6fedf3440e4c10d9ec14c03de541cc07559e6a4e5fa00c91fda1d47 +0xd34d116bf95c373099f9cdf103fac3198e7f9089c4b81586e80a98c93253cde5 +0x87bdc222d875bad638139208a5d7b31365e672235bd915bc030f0e12eb55c98c +0xf72951948e851f3b15c34c9c8b766b1ba594cd50db66d8302d80d42cb3116324 +0x8724924bbe3382584beec9c72541ab7548a9fb89a9b18a3bd40ca377650f5b49 +0x3aabb204df676d338ec6044687a689ced416c4642b8ee6de5375ab746b6a2f6f +0x64e2e8c64e173d7b8abb6974a6e91e92065c69c7652bbdfed8b65ea91d33974a +0x2664e03b11790303c13ad11572cf005a449569c530df057cff21390d8d054f33 +0xc1aa9d29226b7c1162e61615147750ee896051974b8f103ef3fde723f5fa69b2 +0xc80b49f87b800260f64973d852bc2971e7153bc74f656109f8f0df180302acc6 +0xc26a9ed86ee1e88d0d64089d138bc0d6cd9846f32f0a69a69ca648af2fc326a9 +0x100c241db27b6668b9a7751a2cfea9388c751ed3e87a6696bfa3748b7b82907f +0x65c5833aa123c6aadcbacca34d0421c1c5f0e6f90906809bbb45648ebb8d9289 +0x246d19a6d212f35e8b3c32c0b49267931c577555eec0a98098b860306bd06652 +0x0eee24f8dc81373cb347a59f69dc0f6e46d590d992e966139f1af0030c9e67d7 +0x7a7e530e8dd71816f5553bf5d8410fe497d0f7d371a231e3b4ad7a31b60096af +0xed9dd8affad2c7e662efea79a5a6d9c34e218dbeefb6251bbecf80de7f613a36 +0x3b729318cf625c23ca9bf89517c1bcecc392bb009c048b23dc868f742a113a64 +0xd7ba1364be49b07c0c241fa8e3488ce6285da795de07c2eaa717a22e271d7c2c +0xabae08d370d9969cba0e1753635bc13c391dc65635436796a98e61659c63980e +0x30cdc673fb93a798625b130265552947cb076f1a1667d361f146ff3dfc824ae4 +0x66853a50fe38ccd1b1514e61d44329397c65b9516893587e64ed277fbcf8b091 +0xd5912d9bc9a78c18962fa6a8578662ebebe78b7d762dcf32d7f63153fe8d29e8 +0xed6d15e76bcb018c1fd9b7a78a245bac703ec91a4414aa58260cd87cde470b56 +0x0c4ed9dd84065c493508167a53312ce64516a13bfc46bec19f40d063ea2f2bc0 +0x3d7dfa14f2abd687bd4c8989c113fff98e033fac2747acf9f55eac031fc12145 +0x0c887100f638ed7a54c63528023bab62a81f7755a9cfc1b80a5cadf3b6840b31 +0xb01889afeb90db026bee58746b1ad72be8683500d8841ff95c43f6d272d07065 +0xf0f592ee13a223cf20bfd7aaec2aec9ddf4731dd00f7657915ddc5801e7abdaf +0xf58f15d65d300d6049fa118b8c3a579ebb95b7050faca5757a988f60ce1133f3 +0x8cad10f3e09c30a7b7f08fd7a8b9f284aac44bac67318bdc0143b48b8455de17 +0xc1da1c6b5f2d9644e4a0f206263a5bda9ce0c3c27790e89a7f03b70382a9eb30 +0x02e2a245d48a7b27c6877fa7900db2b8bffc3a37f230b8bd5af8c4864d2279d7 +0x3016c620eebf4276e50414e2c02b5a94f4c577066d0685786f24609f18be24a7 +0xff37227ea8e477e4b8aa89c4994b3b3c67c9b72c5b3d7db78ef4f58847c463b8 +0xac246f01b66bc8fc8d822a524c81fafb3d93d4398b13042fd0714961d304cf39 +0x4a1d8e11429b3b3cd817c9439800540901370f17161dae7e2da93101ee5bf2a0 +0x401c5c7ea07634a8c009a4b189b0ad4805bf81fc6f7696e59db42e67333ca0df +0x37b3227d3b016fdccc3b92ad381e3c23131e968df5de15b4ef67ea56ebc73f14 +0xe8b1697928eef5959f7103e38765fa4e57f198f1264113a9ee9c2cc883c27418 +0x121b6ab5aa8c52c424550b695b97a1b3f81d7eb7725f6d8baaf93c18c348b64a +0x19144e43735d31335f81198168b95b83429e5ad8c2c1683e107550ad5465ab8a +0x4b0bb079396ee7dd0d82547e180e53176ae8a611b067a4e03e721e51a52f5603 +0x16b6dba21cb03671210034f218459f6dcb129ba4ca4a0c1198ad5d9ecd94ad19 +0xc520a0738c3b64a9738efebc62f919a3d4131620f1034ffcde9c3e8b6fb65898 +0x3ba24430d83b0279fe268e3a415564e5145695b48d3ee84e6322407a38f6dfc5 +0xb6cb40e13a1187b3041f3872d9e43ef5f78a1c1db885275c7993607a628353ef +0xc4fc5ecc2d1351b0098960d85dd7c58c6e4a8821ce93a1868866235a1c8f1fda +0x9d3040a2da135c55713d8a0ddb38c3c801043cb81c9d0001c4370877386c32f7 +0xe207807b2d6e1e2f836d7b1877d5decf563ba99a9ff355278182fd795278b802 +0xc0737164cd052ec1e2f023f971d2a99d842393c492183685134b0cdb981e1573 +0xb63c10b3b0fd86c5cfcf40d93f24807b4226151620e3ac49371a178137f0f827 +0x2a37673c5c1e2b5bb58e08de94be465350e436efa93c2d578cc445cd201b5a77 +0x65ea899f1d91c21d89a7187075dd93d73d41055268ee22ed808acd93d257d85c +0x5f66c6c16f2183a027dece02608c68417033decdef93d570e5f3586f0e681ad0 +0x88a62ea17633391b268886a203fd54cf5bdf2e07546380c519f06903bdc707ef +0xc763e50b6503832adc8f12ed6dd4a5d9da39bb0205db0a6e8e2882eb16c4c60b +0x738136e13795a7aee75e5d21509cddf863d688c1c74a875e97f9a58defb7d747 +0x60dc00d27b742a84f4ad5c60a5f9421dfd68ca8d2eecfbd0301e628f484aa447 +0x466b3fddeb7709a12284073c164195c62dad195fde67f439060266d9ae72ade8 +0x57ca55ba7e91ac0abddadc640dc40751f2dfe9fdd5051cfd4ca4f147395ccb7e +0x17eb2213fec93a72be2aba2a6d70f15a475d38d7ea3f3041917d81816a9c02d3 +0x03746097bb9a14ca69959ba078cabfe218725c90f4c141763370f52808b22dc5 +0x5c752cdedf777a49a2275c8ac67e9e8f9a937f4791b462d32184e20c55428c5c +0x31391a5b7d7a0c3acad466992077508e3480ab315545f1fe0990abaa4febb1cc +0xc40b89430d68786cce6362afcadc7b1c43a1f48a52d0a47f1152e424ed9c9e86 +0x308bf819978fecc84186c2f7a34f630abdb43745ccf5580f97dc66a65ad86619 +0x253bb652eb61e46f4d5b91a622df359b5f8f97d0131c05d09cf62d781391573b +0x64d4d8a7af6a1274028020229b1fc2a255eceef34f1ee75039110db2a6586143 +0x4674c3f8b242281678b1adc635074bdc4cea614d6c1ca4977a178ee79e8ef5b1 +0x5c3818f20b8e68a3cc7e54f5b7e5e16392652111cfabddc3bdf843d946e1183d +0xf43ffcfd1f0f2224fb69d0d383edd5c5eccb5a79209c8353f754719e6095618b +0xc7a801cb167da020b83bd1843027876df8c47a496184f51612748e756dbe1402 +0xad0bd49ec77cab8404ff4fdfa0c3f2778d0b72e93173a1b97653bbd244add6a4 +0x28c1aaa9a1b80006bf16df8076e8ab346949b391de8d97cf2d3704308e854726 +0x378fae20770be38fb260ba2ad280fc7b6ca820979a76a792edb2258e78220411 +0xf1dad13c7b339dbed0cc95965d649fb9e2c4135ca7ed10e2a2381b111325febc +0xd96592dd241f7698d2de069c87041968cf45afc981ada060d83baae08bf593a2 +0x314e9f3c3689c45e4891c4b13b436ff6819a63b49d413500029c6abd8d4c71e6 +0x49faad5278324451f9e5a02e3ba403f3d3c2e59407554592cd4225d08b0de6f9 +0x48a54c0f60887da5849560a9693e2d9b30a4ce0935dc15893e9f701c7f247087 +0x54cc20cc4ed5132d01085dbbad71f8681202569ca0f2925dd844bb1a0d991764 +0x3fa2f1ef044530173e1619a7c2c2f3d3e9f913bae04a8c42fa654c832f38cba5 +0x7233cede837817de2b5ef10e9754687d48f60cf393ea3dd7150fe822569a524e +0x3778b1346805e558079a55e3589fe67cd355930cd1c777df9a712c947b64e51c +0xe4736d7fbff433df96d925e1b4a63d94388b6ebd3fa90f900bb1844dc16d1a6d +0x4025fdbce6cdfe54e511d475429efcb6d0c01a6e08ed8db18da33f4a5c73e918 +0xdc3040655c8fa78c80797375059c7e49551f95ebdd201e8d1833a6033fbe8c9c +0x3a5f423d1ae9fd5c37a180b1b00c945eb523cc761841c1142efbb35f2a39a6bf +0x03470516de422d687d1092e46a8ec009f3ade1223691fc011d8781f17024229f +0x578b6fa3b0fdb974f23466eef8eb61a908a970b5052cbdf681ea656cc4762510 +0xf66a72d931936973a39e515981390cf37c9141ca35e1db6455feb86aaa82d078 +0x90affd24ff4c88a57a1fe573bef727986bb1ce29b5ef14267457933ae021eae0 +0x969dc76baf6d870a00f5ca5128e29c831a9ec0664f6eceedf9c20bacbf1109a3 +0x8a9df6fbd129b27237893d6c70870db1c4512dbaf4ccba924a40c545083e5bbf +0x5a674c9dfd596eec19a026dfcae3d572fb73fb4b5089a771362183bf185c7fff +0x173b6f525e5a5d9580b10559ff78994b35e4e700e93c2d16377abec7d11110e0 +0x9da260934a4982466f68cb0379545cad3551c471660be13e5e91f7d540c2d1a1 +0x63bbaaa8293dd1d8f94f3aa8883efc52485a43d766295ff803efac4356f7b8b2 +0xeee79e55e5abb5da6d910738bfd77a0ae486b62cb718ca414459bde3c243e7aa +0x213a7a477e4b0e082aeee41080efdc52ebfba50148a3a8b87a26304123b28628 +0x104cd1efb64d4b9d870db708b902112b56b045d6aac8ec4e3cb2a7cbcd19efa6 +0xf45ed259fc162433c3ecab1556981a6899a4535b4cea84579c009145cf8596bf +0x431bbd8183a2a1f6190877e1875dc41eeed35cdc46ccf0f9ed3f92c387027a10 +0x974799eb37b31940aa38f00ec4969350f92be393cb6426a5dac16290b16f71e0 +0x49ea943c6c93f1763a79710f12edc57232d175ee3ac3e30781433f2d5a62e3d7 +0x0ffd0649159d3aad0e0371777a5735617d4859fa45a6f75dd467d18c1f948378 +0x7bbf2abefcb2067af695b9961293e3b328c4055428b7fa7a201a278fca3d259e +0xfad2dad975d0bd6127ca9fcb989b4ef2393c8899780486afa4e1384f895999c5 +0x444460a863b71ddb2fd954779ed17e493baa214cc98cf6d954624a56b7a02ea1 +0x52d27b1f9eda7ffbdc3d13c8fe0360cca91d3a75f67cfa78b24f60bc1e1cb238 +0xfdaf01f6934e76064cf08e0f014ec2b76ec6acdeabe695c1fca9da9f5694b4f5 +0x7f9e65cdc8bd1eca10cb8d8966cd65105272e6d0f61448f3b0ef3218e63902d8 +0xbd6ff3c39e460ef9b3528f2a4d174ee498c0d3d373880f9edbb462b459dc3cb2 +0x205dce2a235862a2e016e468f61790f3bc16568fbadf7aa91a34683a2d09a1e4 +0x2ec5a0c948863241c577e3b3e8fab75649f60baf869f5b74aaed2ec4f621d430 +0x72d38ef6c25b058c3587503ef0588fbc8d32f83f7cf3b136cc43d4fc94ff6fa1 +0x4bc876f0b8b8a4ecf2659aefb697f5d18a211e29ad055ce9b4fa54a58794c638 +0x0633cdfc731efa16e0298fe4a27c42f19c4c7c9fc1ee28b85e744725621b8804 +0xd46276059a8f9a58fc08d0686d1426acff6f9151d33cd1943007895253d71074 +0x07c95ffc162c4c6951f6345e056eca20ad55641bb90b5e327daac2db9e7e6e1a +0x0095c28b6dd8037509b95e4a010bf45dd8aaa9beec341b8a41b030702bf3ee6d +0x22b92aaf5c05a5e4598280583fdd329c8ee3e24773c92b37f600d3a9ef8c816d +0x785e7f6377ccfd63d5296c3316d735bda2984df48ad74e33f17b0cf4e6e2f52d +0x002333d8d1c989943b83b15037d79b7a4666426ae088ad31fa70e87844e1963a +0x60d0f6375adc62d023cec1e81da41359e247aff7968c8847d311356f3606e0ad +0x0e20d6123843461423da33a20b7d1c50bf9f1f5cf55b63a4a5cf5d96dfe1efb2 +0xcca5d6afa60d194434d4b3bac3726bc7f95cf691f816e6dbcf3653fd037316d8 +0xbe67cdeb53cf8d6ce0e1f793eeb15e1001b0c00acd2185ae0bf5de383e2267f3 +0x747ab90c811d91d9790419c3821385cc0bbdbc9c62589bec90e1020d6b8b1240 +0x6d60f74bdf0e356b38f8dff6eb099e7faf0503cfcfbbbb2008786fe59866e582 +0x22b7ab5ed6372066e785821bedcf773e46fa87472e691b56e0c5c7e34869e499 +0xb5e9f0ee59524358017470aa1040200150e5c91d8c326c26a468d693d1a98515 +0xc1c6fc735362b779280b89c243c20054f049d44a136490b650143bd67f7c30d2 +0xef89ff59be998a4684e8cbd9a605e3a6a361d9ab4721ca1250abf59a1502dc2c +0x52fe53a1e08518581e84d97baa55fb1f0ab585698335c22e861e2fa1c8ea382f +0x78559823e5f0b429d2d44de9e2bba2b8525e9c1b12935e14a9862f41b9eefb78 +0xca2586bae61695b81c09523f4cf102a3669074f4de0922fa428412d475b37852 +0x1d34fc4e9836ba99ff5980ac7eb30bfafc1cf46218db6069484a130dfc0183b6 +0x08fb99b5b67f6220292557010771e7acb3551ca03b4dbb99fa213ffd262adfbb +0xb8bae0e5231f3f432f72f8f45e58eb90ff1554653eceecbe61bcd7bd85141eee +0x702200df69f56f0ecf7581e8c9a7bd053f85033e0f81f0b4b6a5f158c6094daa +0xcb0524148b0b930ad63addefde4ebe4ecfeca0592bf0fb1ba9dc3efe820fb1ab +0x40cfd4a2879dc6c4e8db5ade3295374bfc5acd510dfe6d520df326cdf7c1b671 +0x24a68488f5f2684b40917e10965998cc4a64c90de04b0e3717497f165457033a +0xbb310da0a279f4ea4e45105ae293ea460e6b906dd276cae957b857900149c311 +0x37c7527fc33dcf0cea844b10d20f75f97371f7245b0b2e3d42b43e6701ca919d +0xa9b512d20c5b4a032af4cfc7dd8de520b446be1693ff9faf8e371649ccfddeb9 +0xd46fd8e3e88072cc6ea393f875109e75d5e7fd38510ef0f90a96e20bc034a676 +0x54f6592d0d21cba0554aeb31c0b0a41a10e5380751edc974c3229bf594d79c80 +0xb78e9b79cac0bbcd478bcc752abbfac325b2c2bd4af695f231861b5d0fe91aa7 +0x8b436849f8ef60c8d26f8700440a2cccbaa327f30df3a85a02c540e256fa6d16 +0x3d145c11d9847c8ac74510e7b875defcd8b0e3ee0b3606379b7959176b39ca8a +0xd699a9e101f01eea037969c417dcb0b734e8a41f4d4b9d609cebfbb6c4ab3ef7 +0x9f1093163b4bc4756a83a0ba6c54027aabbcbb53c4bda5f6d714d9ebc1eb98af +0x371c0e7d94a8b4e469796b1e6ffd594c348e1e59dc7c4a6c3c5038d0960dfc79 +0xc8cbcdeb7b1d1e4fd0a8f6e905f8962a940bc211382c1a76c25976605a2a6540 +0x187ec7e9bdff8a08fd8dc4860f255e28e1bf5a64a5ea10342e21604bca9b5e21 +0xfc5df2438f6e5491ecc52f9611a32fce109638baa11cc7ac534b44ed0b78a759 +0x9546a7dafedf7b1f88ed9d356dd08838d492856cfb79ab0b22a2451ea9c0b26a +0x61484cc02fe38d61be49222875f0eb5c2ab5f79444bf5a892e423e0224594acc +0xca84df734c6d085b91bdfb2227cc91e58be454b9eb5ff14d38eaf449b05391d5 +0x8c473195a520ecaf388eaff0d189858de1d8ec0a0aded45e3dc93870d7db2cc4 +0xa7aff7a1de7d192c0258bb8fbe3af05d42b8859ad59500ab14abf5b344ecb7ec +0x452cb58dd4b4c4e57fb3322137622dbb8cc8eae9ec84020175e6ddc644a8b217 +0xabdfb3a769ee012ce2b3735b0e2545fb893cddab2215c0578a841d26e26cfa89 +0xdddd6d9ae08081126a97619df7c6effadb4a1d8e7a47af526b2c88878307ba1a +0x9b032a6c0f42829f4abed611c855f93b7c72bd1bf9e97fff68e8de04c76f1925 +0xfad6b33d32fb0c7be815c5d51557193e55eb767992512a27af7c510772e66f70 +0x442dae3790ebc62abbce1c599cd265727b8cc59b40987fdb07eade95f710550b +0x00d6aad33e7afff1713a4cc99413a2f0e0d672e4c59f5d725372d4eb4fec2706 +0xc7c624495797ae7002452f9b1b66f9a39ab211502cd8902244beabbc687f8693 +0x166ae5b65338afee03e12f9d0708e00bf07b7e3ba8142d4e6a3b3f292403a512 +0x3cd465ed1988d6799eeae31a374a78db02d82acfafd930d8e7feb5b8b6fba6af +0xf246c5904c236b22a1f2871c5909b8888a7518c2f4f4748f250487a8fdd6f636 +0xb5439b2074a0363d90f0a4f94b5c1e5ae9fe94b30535d9648ffa33f12e202ab0 +0xabff37918c9f4dd57145b5781545a72eb02c198b45491cde9e74e2360dead310 +0xd0b1cb0775021008b98f973c549d45195067bc125d63988adfc13a1468fbdb9b +0x4118d18c7be22587962e3aa884e9a34c1d1a3a805ad39fa9be0c8f3f81507e79 +0x451e2c6b9c909da10f6e0b6a9905e86d16e933d25556ead3441f908489dd116d +0x2f017f6ed48c4bbfaf698093e1dd01c7a4f510fb6234b762c41aebe260f35899 +0x780c8c285bd25d554b31c10c30f7fd9a87af362c75882a9b8cf798f9a71e07de +0xc406443f8158bfa0eb66a9041291dde0758bc340968ee40a11d24c3d8b16575a +0xe68dbc8131b232101ed2869a51207cea073bd21d61dbfd21063b2fe18eac8ed7 +0x5889bbf78ddb2ab506391e6c18adf6df0befa1b2acd41648fcc7580455a3efe2 +0xec7a737dd7d988a353ffa4d58ab537ac1d0644ddbee972f614f0e26a3e6e2eed +0xc56bba3c30f568aab55680a464010f3abab4c3759ac355619bb1562a022e76f1 +0xca638ba4a8fcb6aad40bf4dc3a3ba31f43e6810feb612e7c27cbd9f815187a34 +0x9c7484ca2d68e86b0f35f25f01e27a110d84a05b72e59e5cc905e544248a9a5b +0x73850f94ba39eb093203beaeeccf429ff305e418c1cbdb7be9c2babab8e5f1e0 +0x497eaf68545a0a32851e579b1920ad21a455706f8e4f3ad140b2239751fc8e6f +0x67fd316a14ebddb05dd5aca2840b37eca1ff37c24749bd77a99a8b1556ca1d60 +0x410cc741b738e32eda6445cb182fec84de7debb49546e241ca906b61509d8dd8 +0xa83c96b2d4b956052f04e245e4c921cd2436fa2c7a268b9bc98228d8ce85c961 +0xebf877790d893a0ec86135b454179412fb8475d45a8917beabe72aacc8303e63 +0x6f7cfc4547321a6eeb64f14adefd48a4fbf15520880512b7781ca29ea4e1a966 +0x591b936bc159ca45718fd8f1b3465973f1dde9647b5c92171c0cd6fd0e6143bc +0x9c7c695fddf01be004a259c615469dcdf35dd8683408f9ce92793603e3efa79b +0x57a58f04646a1f2ae476ea1af6f30e8191a5abaf8405b629c3239b8e47e6fcbf +0x99e563f03d454214a0837290619d91e3bf2ed961be45bfa217bfc5071c0b60dd +0x1f332ca2a7d88e18df86dd66008fd683344d3bcde3ac14686d7241c903c2c49d +0xc966d4b41ceebdc787364d07038d82c3fc4bc9cb69cb239b80455c2218bc41b4 +0x846dbf7eb007ffa3726e6cb0019e9bf845e4459691b1b40a913851e6c6c7d73a +0xb822d3bd45c4f316625e1a33a57f738b8ca4abc12b09b532d772bfa88a902a74 +0x1dd8855c21eea61e01422c428120131eb441aa1a8776a783706d262f90bb8f55 +0x400d76da3f91662f280f7cd1568adb738dba029c0ac46f92e68fd394c74daa73 +0xbb52a15910bce064c7085ce5bc7a2862c02dec340e6765336d8405b142de9cf1 +0x2f7191a6ccbecbc17949b52665f7a7925530277efc2186b96e9a5ab476e1e944 +0x79afae63efaad85c7a2fd8e104177a35d32d8f8c98f94b52c2d0b6fbc9dad0e4 +0x037a3a9a3fbd81e0f73c101ca796782fb96f1ff7379ae25bfae540fd73d16052 +0xac2b59473761cf49659d4bf28df9b3768ea80cf0d40e1f4b1bd6d980d78942ce +0xbf4e8433ab5bfed1b975ffdaa56e78a2f49f44adc08d659ebb987a5cfd110aff +0x9fe6ff7584ff77c256ae70e8f01c3d251e073783a9c94ca9e085fdf7c7fbb8fa +0xbac43f149c85445eb75d8196e5bf60c06b41d9e8bea728f180d6669f26229ef7 +0x11c8118cd3c08b99fe7f6f690ee178accfd6f1f1b1c297f0961c8d82872eebdf +0x2dbd373c6ec2eff544199430ef7856c0001ffbdf6567e7068ec0afbe2d356c41 +0xacc31c57ed96b24c1af041dfc4a9a43136ebd06fac37451efaa176ba041c4195 +0xe0b4844ee710accf87f9348f6552359af05bc451fd6a3a34019f2ffbd7a6a795 +0xa8d370ec6535e38b8f071eecf466ec95f9f116f0f7d501062f79d324e7d7b920 +0xe3cd83c4d5f615d649517fac5e4fced06ffeb12ef407e60292111c082993df14 +0x6f589ff3f26e986c0513a03f87ab19b1a5572a0e3b490693072ae61c7fd063e0 +0xf627d06cf1c16f186b0d0da50533b49f4c844761c98d15f9c10c72b303ec1111 +0x38593c76497bef9a61ca643118f2910b6cdad35db7e5a128549021e2e94f4281 +0x9538c9af66421f868fca5a5297996d05d12f243274e1958a4b1ae4fefe4f7ae4 +0xaa0efeca200030e0679cdfd4c64c095d7e6c8250bac45f763047045777d6e611 +0xc4c8e3ff3e17be019345e7e4f4482bcefed0d026df52efbfeb664e6b224192c8 +0x847d54644ece8237ee3ac372545014e4af2a77379e4eff2b7481c67871ecea59 +0x1859ea259172ba8852c2f83a0b6134337101d472bf5c3a0c8bc77105d56525da +0xbb75ccb107f27417d729778877ac6527c1903878112f44ba8755c56ad8d8e0a5 +0x8e819580fb4a531571e7a447e65f402bec3a5bccff195ffb0e82f38a46ccc3e1 +0x6f28ef61be5b9f85840c6027d61f0714fb0ffc680719200e58632a06513843d2 +0xeb8f4f91113134ecc703dbae900516aea2fae48502a6c146d81cfeb54911be7e +0x84f5ba62a5a85bd19c19e71f7634d6278b87b43c52fb0b68d9e8cd56b1fa6be1 +0xeb5c71151a6f6389a5ea17baf184a8ece5ef26ac5f52fdfcb74a9e33e4aa98cd +0x1c8fe240deca951b6a129275300fe7c49d9ab4bf87262fdd9631187cead7f758 +0xb8f0be8a03a372b86847f3d3eaf2f6e082995362faa7ae1bfb8d12a0c1b56417 +0x747648cd92444f1e15ff151436dff660c10cade22d4c555ac33f5a97c82dc0c4 +0x77a95400150ddbe256299ae18e0beca60a2def41e85cfefb42c2cff895a5b3a5 +0x50d88c5c75745e7ad6478fe5701b596876e29fdb28f3a123c75af568f5d0722e +0x23ce0eab2c018405c977dc5546ff4a02a0b434a4a52933a61f37b2d0dd440d70 +0x2a6dc8376a185772410a43d49d8586ecc18ea1bfbc17c39d09702f8cbcbcb2b0 +0xb7a5c11d67a6b1488950e2cfc2070878378d431e9d3e11ac15858045ffbc12f7 +0x3242f031e64a2180f0906aedd901a7b5b7570d0b71ae9d63f1cd18e23f7ef1fb +0x05011f384ef81ae2d8fa8827fec05d29ce16647499a0aaad5b4dab53043ba8d3 +0x2447c654378b05cbc24ca8f0a174c594552b892e27ba97c6c3f9a086e4954d0f +0x517d1ed44901138f5cc75545d497d61f21eca20c60bff1ff49259cd49cceb5d0 +0x5e85cf5a37a59d612e6c77f1533dd8f733596bebacdbd3a87e8b7b5220f7c0db +0xc7acc2a82d7d3281049e71c9c717570b2a7e0a96197b8d6b05c1dcda8b9aefda +0xa610f0c7485c673c425d53888379025a33089ffec830911772409b7e2f844b57 +0x8c156c5e978e7a5816435a25f25d66a148a25c1425d084a7fd6abd2c1ee66be9 +0xc1556f57fe41b17371e14c9bd524ec09608e815ed6c353ae1b2798b985f4b03f +0xdb86890f246366800616fb52948944f57a9dd7e4b48be5d143b1319658d074f5 +0xa38c31bd93f7cc2a53fff974b09fcd595b7e2359f4089d0f7d56fcf218577711 +0x02fab92e943a38815b176584e057901e13063b5bf57437ecb8fbf26dbb5ef503 +0x946371813025564edabda94dfd702b4c82a2269fe35db8995659e19a9e4465ef +0x13a88f5dccda6193b9cd87ffa6cde06b224ee61c785d0e1134e9ab1a1da46aad +0xb301e8f00ee5c75db6b2d353af673fdb0e357d69893501f95199d031a1313940 +0xff84a3223551ce951f99d2392822e8b3661ff536605d1bc7eae263b42040952a +0xce741d2d45737530907cb0ae79534ec156d81463ecdde0afeabdf48327a0c90f +0x064275f7c098319b1f69f15f0afa46624fd145b5c68836194573c1a0cb4479a4 +0xedf64d5d8c82fada887bf7d99891d7ed92f18c4b0ba1eb945344f7e6c873b115 +0xdb65ad75890af636c36038042f8045c43c7400bb134cfe56a05b06a660a193a7 +0xa62286ea1cb58b38d04bdd733be404e3533c55ec6e710ed2d3e8691047e25714 +0x104771771b352d253b75e25e2f937421bfa34aa2f15adecbe050bf0dabe939f1 +0xd669a4fffe41a2a690678eb1e71394a03cb64e1aaa2e9ad375af187ab17ebc2e +0xb759dc9b4cbdf382d03ab3038529cefbc37fa4ec0c0e24f3230d759acce900ce +0x2a34e42a07420f1ce3ca9dc9f1e648f0c905fc425211edfd0e1a3029c105a890 +0x9613c8f9a4537a6a111714baa7af6b4a3535388f6ce3e12be1fc1b729579dd7d +0x802f0b116c9200d217a047e9a8be45d74a00ef967dd6ea9f557f21bac74e7e1d +0x4fd7941d0812926884913b55704cdf612597aed35c68e0ed11a6a7ffc730ee1c +0x62bc722726ee9eb062ab222c1cafc1cfc3bd9fc53d153c28ab076fb97c9c1eae +0xc50a48260b37976bfb781e5b0a9ae90b64e19156730f3ad87d3bdf91fc24c4f3 +0xbb4b5b79f913e169c9273bf91bf4efd0bab432b371812d6d867ec171512413c1 +0xc4ceb55ca0e001ef4bf8d317eb3c0c008becc336a36ebe82eadf97f7d5b20a1c +0x2ad4c712aaf8036824677f6f637d6d6a2ed3a757596b574e617b332cda595418 +0x053f69be45be91b2cd074cce7d00f7e8675b829dd09bae8d59f2a65487e71ebb +0x833eee727d51a402e8c72b57cf36496d43927945fb97dad093c37fa287049e9d +0xe28578163882af70c067bb47d9c4dec3e21a52257046d814d4ca2b9f125182fe +0x14eb525a7e6e616b02084c2c8fef9d88c9a4fdcb01c609d8454e21b1ab9a7978 +0x460dfbb0a20939f551b0700e7fb2d2745c20c0107144c0c77e128a2e509eaf22 +0x76802db2fb05b4188bcf596d6310713d6f9bf931f86c523a6a0a09ed9a5c655b +0xa1b1162fd2089f79e7063d2743678c0fa95c60ff13578ae13510675e2f32252b +0xd670267632a169fbd932bdead4e726cd0906226eb157886f064a6e492eedfbc5 +0xfb1e17af7147fa70a11b3c64c86dbc280a434af58ba57484f339e44cd60b204f +0x6c6a3b4bba87ca7892457c10906276c77a5341e7d8190c49672d4f889b8bcea9 +0x299c64cd90babac9e9a1c86b8b9c5116f3f176906a2f004b146b2b44d5a27c25 +0xa10132c32e759b01c378c872a4379d4b0b4683fe45912ebc74112ead05e03888 +0x0ef600784dd0354226e51d68f59e5128c088bceeb00177f4f274863c651b1e62 +0xe79f662aefa60962ff69928d8db8cc7485f037ccd515568176eb1540d40deb7f +0xf5ba4558cef012a1438ea98bec32e70a18452b2ddf40788398f43109b8922460 +0xcaa5bfc6383d8f00ca4be8eacfa3dfe0793e83643be0efd61e6325392d11acac +0x33f999a0758cc1ec253513a57c798f9b5085ae661faaf1e4dc50fdc5e48d6939 +0xf6e32d4d52eb703c451109d0a2ed79a48e75ff5ab3c5ad1b62a5bec8016a40e5 +0x353dc589b2e0a3c0eccf97c7d453ac16fe8c8b4db169fe95f7551897680edb2a +0x45bd0569a332958f0c111b742c7ef0da3179bcacd1203ae747680935f91b1717 +0xc82511421ac022e33e43b77894438f31959cc1cf67451d5517fb64f072e6e469 +0x3477183f37f4a8f9502643eb0ac1e1cbbf62d1bd48321d0adc4090ee89109362 +0x962e371112c7342dce2b46675445523e8958f6eff8e29de5942c24a22c36be1e +0x5d5fa4b508fcf9086dd52ae855ab3dcb68794dbc27a1e6ef415edc04bf90d766 +0xd83d1edb8bc35c349bd752ec6f4df098e2c4c0839bdfa90925ffcdb2ad4f37cc +0xa7918fb4fa4d3cd59f9c7d678e551168eb37b202ee30515e71e306ee80382e3b +0x768a6018ed8ff2a09cc68017757d0d3c70aa93adc8eae2c45edce301e39787d6 +0xa0ff82fdfa3ce1a047ad0d38b7357ad7ced590b63a3c59c0a33c2e9e9b842d9a +0x7c3121c583fe8b3651ab2c963b68ccbc08cc0e59d3cd48d9cf7fbae028ca0d52 +0x5c7a4748cf5cfadde9885cfa17b024a799435079de4ede2dcd02534f6f638fe1 +0xb13294421e529d23b33861d48040e9c799e38fec1774ff8822bf95bd2cb05b5d +0xcd8ea2d651433353ece89c66f20d712e47ed0ab0cb85d66f456406fc127c78c9 +0x8e0c4a1bb45c11074b58a43dd4a577b326906f18bec7abf311534428359743e8 +0x766d17449fdf90ff6258604430424e6f0a7ca5b3fd21eb4c663e69ec7da011d8 +0x0cdd6d7ea317a5cb89ecf9897506189ded9535798563027431ce1efa92e8b854 +0xfad1c8f089f0d126b12adef001df5af47c33e19764182dfb919da11bef551f3f +0xd95b57b9a7ca0c8b93dc0c4a949d81153252765748d6a15eadfc579b8c4d8a43 +0x3f6371374da56c3c612b24f975d3f5701de9e3d42b577fa116a79d2705c6ada9 +0x2f9e0defa445ee3792eb9dfaee3d673a57f7451570a06512aa099c4f8598ffae +0x43df9adf92b6fe023d1dad6188358fc17f0f486405c0129e6b6968e6d09bce04 +0xa5edc26b06bbc55afa02fb2bf567f201c2c76a78c46e1b9bbfbcc09d0f52b488 +0x86fc90749d59d0341fe0c2699e92d5531812749aedd1880b52a45c83f7700866 +0x30b656cdcfc3d0e8d9e296cdf0d4d21a8b70144524d94526832ef2c31bdeaf61 +0xa2524c76df441e54ee24edde2c53dbd28f18a48f28b232a1c5d63837c2900792 +0x191a53569ac2b548a2c4d636c0e86bcf6ae5d6b89c2a04247e897796da405460 +0xb523e1719edd7dc2a3011ca03741a6b2d87d8706631274ece91d301032beef10 +0x3ac0cf7095d888f550dcb76ba3f1f5cbbcb73dc63d7bf0f2c404657b57de98a2 +0xe6f9627f431ad45a5af861fe6b59507656ea4315e6c2447f995ff5dd4d97d0f3 +0xf8f9b162ea02b8154a804d232d7ff2b6fd3bdddd196f7957a1b6dfd1f2d0a36b +0x7dd24768134c1cbfbd9e135ec76619d6a77049424a82209f10d67fe1fc352e48 +0x0fb0b0f3b4c1aaff03ffdc43f4cc19debab6ccd16dfaaceacd52db50478168d9 +0xdcea34a7320bd3441b87b03ae6ede7e186a3d249894919be3dc5867fd03f3674 +0xf1ef611ed9d17299b9c5469c30e17fb847223c2060c9b79c483a29d0b994d82b +0xfe790c7d8536cadca78168b8972fee0206ccbd0d5302ff1777a48d73d5118c04 +0xfc5d2a59ef1099a80c47c1548d36fca0b53208be60391a21ced92e9ce3037491 +0x7b8142547d3b390bca64cb74cd1567434b7f21b847245aecc39919a56d5bb7e7 +0x86b48ef55a1faa8699057f3832e41d174ba1c953fb7f34bc2cc5d8240776eadb +0x3f385e537cb4033755500279beaa3d32c7b70d28fd944d91c8b9b1d09479c39d +0xd09438adbdd6882108d7a96bed9291dd3f73f807dc9b6757d966b6a985fb6833 +0x06a80db03e748267cfb275e9315c2fe39936a76080c162b0fc192c881afc6a80 +0xce5f7bbfe9d2db6ee4db6143c51bdd945515e74c2a1c0569f643c2ce46da214f +0xa678f270cacd13aa02a5ee49c4e055e7a8ed0ef95ee950f4ad9970c29437bb63 +0x49a6d09c8dda497fcd4ce0690a7b8be3ddff675e508d44181538c631a739c9f6 +0xb604d7dcbb30d794f85ff8f2ebed475b60cdfa57713ffc57058720ca8d78f2ee +0x09458e34a2f5bb33d112ccd91f4cc0bfd077c73a6ae4a881e7170b262de6bb05 +0x78834256df25d93d613bb141859ca15c7a95bbc30730d0ae27bcc207812341b7 +0xa462bf2ec1bf2bf3136b3b3c87996d5de2bc59fc3f19122eb051e5728c3021b2 +0xc8c6f890d9602cd94b2c58ca0238ab7ffae99f10a0c325e770196de24ffa701a +0x722a03a6f43d47d82388253670691d0ecaf85e2c6f4291230e403b087c065c86 +0x7c586323a5ff647bc931fd7ed418552fc9ecc5db8c476bde6a6cd2a6b05a922d +0x0b57f92e606cb6bbd37a95d5b11a686b7ecc9e36d79018e28074c046a5822319 +0x28925242d28d86a53c23c8b743421a42200fdc45a21ce722aafb9a3c081c648c +0x849e07e0617cd284d11ee1da5a4df7d871dcb42d1a8e18184f3234083dc43820 +0xd6e6eae812ad058c5f8d2a989e033867d659538d04640928f4d50ee102d98d4b +0x44b8f35afabfe96f15169bfbfd51c078d1d0efbf85958486b04d4745c4136cf3 +0x04bfc663a32a5e7afe7e799479445efce4143d2111bea93af87acc7ebf9a0471 +0xa1c865196125408fa8a2a62ee3ef8078a580c93cc34626ea16ac01a9e8ff6d1b +0x37299cfcfb19a06bf042622c30a86e43831c65f489b9ac096e7c8f4097954b25 +0x3fedeb5d739ec6d2cd8b7ee1bbbf6f90d58c7bf6b812ca3850f17df812acba92 +0x815dc23a576a30ed50a0605d42541754905fff6abac9a5aa80a82eae34d94fd6 +0xe236749002f896d40441168790ee0820b8444e9d606b12808f4796b9c19a8a9f +0xdf39a60d3facc34e740fcf8cb7620b898a87ea54057c345d3941216cd1301ee2 +0xa8eebe6ab55441810d86dc90221f3e5ee19b6ce2e97348e22a0b98fa393154fc +0x372cc52a29576a288b798a463e1965acae9f12da750c1427464533934dae4604 +0xb86c7e5431debe42b1adb5070fcd8cc2a75199096af38073351350338b716e7d +0x7d80f1e82d16a2d6ffb5b5cdc13c14210014a14fac9b8c49b5d81e4421a85904 +0xa1fe05a7956ab496400a4f1c97257c2da6781f07f1a22192ed984e25702798ec +0x9e00a5747ec6de65fc71adad4d8202c64f840059eb7eb0d04e71b60e89806490 +0x9f63d15c876a091a95cd4462af8aeacb73b61fdfe7a2fb2395dd1f87a1cc078c +0x93dcf834bf5db6ed8827ec7cda223a4dfd98a7e6b633b3546f3dd9d36061b2d4 +0xab6ad2c9750c50583111241ea9ae12577e2b2c51d9c81186df30a0a7daba2ea2 +0x71bfaa631b010e4f68cc45312bc91921aa745a1202a94613e5d5f2841cebd05c +0x1e27398126c3cc7490a04d535f8dd3437631838de589de287612c3dc8c6a4aff +0x132187f7a763834f62c15419af12ad355b2896eadba345362207a2de55eb3258 +0x878a65e9155924ebf570795d949c04a6f4ca591996e4b855b2664658c58e1684 +0x776dfdb0e2a0f21a3b3834ad20c19e01fe5157f097ff02b7752f7e7d694fc473 +0x1b05eba5278aa4b1c32bfbde537a59f7d4c21ff479c022accdc70f245fcf31a3 +0xdbf338a78081d2b2006dda591db6ff364de7ee86c7aa80e3068801f8e9a2ead9 +0x842fcc501bcbb007f4529721d4add29b249209299723da7c76ee0414cd42fac0 +0x2b5dedfa935d253d7f7d3b70ae50e18caf9e8a8c36e16f0353c3a7ee277d0471 +0x4ba9d20cc0d34c168ae17b7a6f2b17512f2fa990eda3d92738343ee0b39aa7f7 +0x5fd15e05cd09e90eff0782342d4fde24052bb2eb946c1758153b6822128d644c +0x2c551b74d19250c522ad38b5ccdc2a64263f4785a459e26c9ac54a677beddf66 +0xa0cec722a74a7dc7d2cf239a61dfc05a08f8705e11661d4a383a0f504687ab8c +0xc66de0de6defcd6cd54198cd35b99caa83a4288632303b33f8e2ed690f691170 +0x1fd79eb70bbc1db557796c8d57ba5d1b62bcf430d037f3cde8560eed4dde6b07 +0x028e5a653753b1565f4b99e9fc8cb1093f900ac2a0e932697bc75dbaae2f3395 +0x47dbdb1c3dcfd1b97b2c31ca1ced15c09f259559e04f5551882879d68d5c97e8 +0x5aa3af0f7915c00bf2c7e161ba5dfd19b8f949ba5cf100b8ffd73774cbdd0e64 +0xab09cb18c30e84596b16bbcf63455e7134030f32fc2c11f4450e9aa985276444 +0xc6a59ee09892f9307df68ecbe47942e12986006cb5f629585c78cbebdf2da4eb +0x30639a297d6b7a057504f9c3e8356282bdd024171892bb3c17c51ea2e0f980d3 +0xca384f923bd13a7403ed391998dbfd33af0625e5e44d13e4e7bf0b8962a96895 +0x69eb55435d15c0f871272391e92f552f18dde0066472ad8ab679967706813e35 +0x4ad83004e40002ece0e9d9d86e71a6485e2351f30f93b5356a689c9ce282bdb0 +0x96ac4fd93eb1d981bca44c08bb17a6b75c586ad63dbe43bcbaa808d542138b45 +0x887e713d8ed873786a30190cc59b16ebc8f0ba117e3835b13de342576d66ae18 +0x560ac5d033f3d07033e014acc2098b3166d7016be11b01f51e34ce18a06c0976 +0x65943ea60946325a91ef4b779143ac6a3832322175c32c31708fca833c553ec0 +0xa774dd88d86a4661f26ec2febf08bcd1b483ae623f183b59cad0c1ae06410262 +0xea8b024d431ba7a44412cb2a26368270aa0a52b465ab3f13d30fc5bf78537c36 +0x764af755de11c37e5b53b72ecfddda5af4ff37b13834b2067536a78a960ec81a +0x2dee61b0bfe2b60bb4df6895018484bd84cf2e45c7348f6d31d5e90c5965b8a7 +0xe7e67913392f4c7050cd359b24fade1a7b99479e09186f3f9097a400df86f257 +0x83c98ded86207c341f8e87ea9457eb00c679be54785bfd3bcc7ed37ee2fc444e +0xe7eb6bf3d620f891225f10f1b3ce84f651c6563a5303e6359300ebe315768199 +0x6117666fde2cc8b09ad8cfa204be02e20f8179c5ab66a01273241e96b2b49bda +0x5ffe5241ded38aceb04237ef5af01eeec2c8734a23807ff024da1853680167fd +0xb1dec4f0ab5d2889112e0d8096b0f2eeaae99ed4beddde2ead385d55c05885f1 +0x1d9784a1e8f39bdc062236f1179f8850cb10c4b6163f46cfbca3c7a506e60812 +0x05a8a7575d736178211c2661cb380f2116688fc54a3c99cb84ecbd1a0c8048bc +0x97c8bbe4eef2e6deb1316d5dcda9018cf7e4432336f152f9bd0397fac6f728e9 +0xb6d0107d4a3a07daad81aad173dc06c14186af4020d3caeff7d4fc2472286567 +0x86e3e372692b7cf3d2b758b9c71a645e01d74f6bcbd3cf23a036602223290bb8 +0xba650246ea53516b9976e6b1e1d86ac13090b338aeda5caa55e108af4e7aa159 +0x0e3ffdcd6f308f910af1cd8320acb331603142514d4dc4e3b1b2c03e05ff013d +0x6f1831511bc3010f40788a8903520f240baad7715af68fe93c05f72021a0fd4b +0xe1220b292390b61c6848532eb4d6db4dcc6ea0e7b5520b98cc7adf316f6396c6 +0x0e2665385108f93f52e3446ce8e2b99b895fcd591e3c92d0f61084e30d3a19e3 +0x0aeffb7c60e0726687ace10e68b5a62b337bc9283387f345a947de7e76be2a51 +0x66596ce263fa146392f0155003038c95f598cf4401de8a3fba444f496ebfa855 +0x0f9ae3715c87bbdbc7269b5084464bbbd39ca446c5602a63b50d6de8b9a7d89b +0x60cf2d7c82535ade3a733061f88110da665215671762d1a9006d5c7e9b3f6f55 +0xf5e2755a13dfcfe1c51b24b5a4f122805f4fb356f7ffebe26ef1be51a702540e +0xb5c60c24d039a3d50471f1eb21bc1ada3f8e0c55ef3969aed303c1f1bb92cc43 +0xb3e38babd2cd24c834536da383d691acc80e3746ac71676988c6bf0d794e1eb7 +0x9b783f12ae19f1a4df173d42e32f3eddf53da84fcaf9be8ee0cce5a2b6688cae +0x7890b603fff5e7e97f36ce28cbd362c518e2b8eb3c749ae5c7d01b3e75aa2e75 +0xf919994b289c654c1d3933f0eb133afa661cd048ea20f838cbd9863fee27bd7d +0xf121a96b5f03bc673b35d848ce3b7ac243617d839a461fd4dcff0503ef6f186c +0xc724636feaa9cc8ed2ba5eaa40ca7da26703f44a9075cb1757a970a52e75fc53 +0xae4919c91887d6ebec5d708479e860d139f9c1480d96bbbdb169260c8838a794 +0x68264c9ef4c0377fb9f7cbae4b97b2052d4276090e6706df46d63da28d3902fa +0xd2e536e5c26419159ab4941ccb3253add4aad866ef7c7ff00c670026b831dbf9 +0x1fdca21a0c329867331ff6b46a0cbde17ffa0827c4743a38fc694fbf6821d047 +0xec874e34e61831322e08fb0c23308b66beaaa0b2f32f144db9ae82379db6f7ae +0xb9c918722b717d01753dee68e65d7a7999f9abed9470691f081b47cf8c741f8d +0xbffe887377cba23504ee0f61daa91e897d1c0efcbb19d37e39f3842f2c0b8a35 +0x16e7f1c2f4269f47f9f782fa523e0660c02f438e0c62211f1a0cf44f94100502 +0x8504dc08a20a8b52e3acd3e77450242d78f7a5189882249c40a1b2c32fd935b5 +0x2c7f091cc6debb30e42c7d70771286ebb19c39d599555be7b11c13f97b68c89c +0x1baa5848760d4184639ce3f8786b6d064222768818c0e237fc3f870bf20b8a16 +0xdcc20563e31d8e7a1eca203597055d8fd3a351b4c0e283585795610e68faa167 +0x4ce8d027de6259400c58a42526a2beee4cac9e40aa1552c6b25bf9d12740eff9 +0xe22661f93b0fd0b546f39ada936997868fb34c7162716905109f2f286630c024 +0x598d7a7cf1b5dc5321184c0b01877479c3f016b144dc10ec1e414316e77cb303 +0x60a14e06e1f0788bc96f0cd33b16fb2a42a5153a2f36771680168e05239c245b +0x5edc500754dee80c23565acca34ebbc79b03a482c4d353a16a8667bfd1cbec3f +0x019c4d4976724f9eb0ac4b9fdaab6c814f28549cad026256a630ea302a4b0bc7 +0x36da2de74b9722254285a19e4893370baeef4de5489a114cc78a96090533ce0a +0xec7fa875b59acaaaf609ce968edf2c487140413458fe94e8eb91ef5993981f6f +0xbbac5060d5e14cb1decab3b297b1b8acb6d6ece3ec18606ad253ca06101ba5c4 +0x677a159acb4f7d7b4c0665179d677bf42fc0c6b0bd22c0998180e9f82c4001fc +0x2d672397e2e0be0a88a2094ae60ea67ba6a645506095678aae2f95439d775504 +0xed07f6fc603dcb62ac302e847f762e13534a0de90d4c9b9fe969745267033767 +0x30c15f900e592153796d7529379c1f3f4543c50117278706dfeb2a9fa6365e2c +0x86beba150f0ec4f5b086ba83218fe394026e163f46a0b072b883874891375055 +0xdb5b734b019097eb8a1714f2302c5feb8689eeb0d7a1b759e559a15898cf232d +0x6534547f444959f54e318c1ca83c5c90ba16ef74d608e2b267d25c780f13ae63 +0x627f02c7263de8153c620c8f63805cf6636f280545789aea755b2c20585b197f +0x066ab2e135df430cd741c30952e1f81692a133fae86e85239cc7e23294ab54d3 +0x40c2403df9e891588c3b3edba66ce2af7dce98b0d7e711efc9277bbb952ce10f +0x59f677efc364e7577457f09777ae1db1b12b07c796dad1a63c45fca5d1f2aa57 +0xd2698e6f2c3711cf886ce5e63a028b026e755f5429e1a0e135dbdbfb391aa98e +0xb47e9b3d4f2d56ebec7f679720e93c6952ce98bf0c397ae5ae5314c80617c69d +0xa98ecf546b3ec57c02835d0acf78326b1168d586b90003874534b5c91a1e1133 +0xe07d5610c2ead43f818e29e18b9b271903b7e2ab7815653917def4d5e7ee2d75 +0x8e193ba79d9c89b9011cade49f2ff128b519c2d7a67ba7fbf454bb7670110568 +0xe13db091e0b83bf07814ead7e39e6dfa3a65a536569860c131cd8669626ffc12 +0xbefd76f9be1f0de6e9cfb21339abf04d6d6753c1cc535fd5d099c069d0f53ca1 +0x2b652ab7af05a829ac784aa1c4163d22a94edbad6146f323236fbd6b9419e87b +0x60a676f1ae2ea0f91a227e04e5ee86be094091c2ec87b28e98f8992bc4a7f67c +0xf4360ebbb283798f5aa0e97af5d6526571d34096664cd3cd9be8fb2253dc8cfd +0x22642b7fa363b4ef6aa81af0edd0f79a6b0f6b796919243248edf486ec9cdbaa +0xc4f6132d1e1cc49b345205ca7a44222e97e271750662dde6afff7cc76c81fcb7 +0x4e787314bb74fba485c0b6f113f5e9ddef354c33e53d9ad88c59f7d744e8e8cb +0xd36072a76b0c3793147589b5b8c4533724d90fa6c2a603dba7187fb5deaff94d +0x9b0467eb6cd732058430f208b2cf6ee74447626fc17d40203315283747afbd86 +0x4b85301fa90266fb7636257e0200945fdf4857e1bb201b1efd91c29669e3fc79 +0x0434225c861ae6093728c857815243e945d45a1fc22b5796555181301fbad2d6 +0xdbc3306d535d02882ddb15795e8dc06de424121188769bca82c6ae4b5b6963cc +0xa062c8ee71cfacf42512bb7f623610d6359c9a4f3a3e2ea7689d9048d475c558 +0x6a8e438ef12b6d7eed35aeaea50121ce258f11ed1ccdfd0a966a3474639aaa2d +0x9418f07a2ce25333d4ae86972e177af530c40650d1b62dd16076e2dcf9744d10 +0xa77d9c2a8dcb533b39ce14d495db69b60572fde3e8e92d7abbbfdc0e3dde9760 +0xbc59e032d3cc6eb120d9c62ef0a6f7d5cc5023b9643f549a937e84d905b8cdd3 +0xbaa8b0fcc61b22c5df65095390f77d56c27f46a0bc2d7f10a5b987ef3a70b740 +0xd19c1be003a0590a4914780b9a0f27ba2e36b2d675f4e988b190791f803c0f89 +0x95670ee270433f70927b5f1029e49103c96eb9ec70ceb2fdaddaf2b0cf5396fa +0xb5ae62c54c5628ed06ebc1bdfb78bcad3d4d481c06782b100066f1dc4068bf3a +0x9a27960812b127e9bfb66cbfa0b5d830a94d53ed599f5cea8da07fdaa3a51fe7 +0x5b80a269909efc74bb69141aa767542a3f35ed46769c980a902e65e02c5f60bb +0x8a1680dd26b04ece24d319b50a75bba91423dad6d55afc7a306ffcf23587621e +0x2f0a8df4cf5346e75c89a3e2659b2a094fcabe6d255ca3473f450f81e68cc64b +0x6345817a288217e42d83755ef4a1b56016be99a034d6a462319f5b3125d6c5cd +0x1a2039ff072df8d8f95664fab18d230fcf93cb54f0c464a2b8497144174db660 +0xe201209a40898d422cf63d3293b1cbce914d7860e3cba7d9e309bc5ac06a69ab +0xda10508cc6a1478471ab9f6dd5612488132a08b34fc03ffbfc447ddbc18aa640 +0xa08e524e3622bf98b4e75611b9ee023d9e8b2b80e270b2c470cad430baf25dcf +0x083b7193d4a61a55d08f074e70d3d26532c2438f8dfb160fc4c188c977fa6909 +0x407d8c3d50b33d8b9d7127ffbc5d346b1fb2d02eb90cf76d5a684c8b645bffce +0x12ae5748e26d884bf2bf0b8d8c6e564bdc81456d9bd2ea93b1179e8773f1c851 +0x3e19c01bc73f06c51564083db0b129a9474791a0da98a2e961d10937c2f22068 +0x24d65180c7cadab021537419e193eae96c6f806774e5927ff709f0ee5ca8d4b5 +0x2806fbcc16015b56a10ab6fccb9c99b15a7414b2494b3e1317913a86ac897b91 +0x85c33b3da3273a2d3810525d496f8f888436a1ae973d02963a00fb577862ae38 +0xc096f06d03f951a23c2206b46bc43904ddd33cfa6d98fba5289bd7d541ef5330 +0x2bd79ae6ad9e735e2b1563a589bdbaaae2d91d1670bc1eec3727bcff6763ead2 +0x16fdc57cac971b070b72c4d0750c8037eae560d4d95dc473b633118afb5b5c0e +0xb23b12b37038aba31e14ff17e1cc6d7cef879b43c1d3f1552734cb0e20b96a18 +0x7ffd1933bf9c084448b5bb89fd49e5ccc6b9163012f9d96aea249fd3166993cc +0xbccef14fe6fc5ad018224cfecf0903c550814b86b5946e3e5595c7fbdc0a7187 +0x4467c3dbd4727fd80fb82a97c00f514ef494dfe0e67d7ca537e9692083e2401f +0xed450ed85475979715a92d4eb696b7c2fdd68faf9607ba6c2e33178f3b45ee21 +0x18520468d4cdbe8220cbb228cfb59b684d8078dd21623cce77da08138d469c54 +0x2f2c3a9950a1fd99d3351f7316e0760fdbc9fb22d742870782cf29976797d41d +0xcfa1c687be731a8657aec16e96841ddcb64f3ce3972643b7dd1955cac2c4f906 +0x9a2d1f266c8093f21c943f10e0bc698b5b9bb6f0f3e7da0475e0a4808242a416 +0xf9e3b9b7adb9fbedbb1d08851ba17a52dab5084c83b175f68da8e73345741208 +0xf167175ea0a3654460b62119f518d3a8c2959333d87225790345bf11b1c9c120 +0x69c3d239e188c1d77b4ac8dfbe6b48d224732fea2dfbce4998d7e26b3992952f +0x4148d76e2ee18b18c36effecf86be68509c402e80fd1ff784814d174e1a34155 +0x20e90d87e2901eed454132299fcf94db27edb2d639d6a857bf8916727835ea82 +0x291260729a150260394b126cd15e27347f2ea267e5175a2e040c06b64f58b388 +0x1eda5465157deff9b9818b9709ecd032593a67b529ef4e024f6109706bc13ea4 +0xdfe5e53ff34753302730c9ad8414961afbb8d66d38bc37aa1590864ad9cd5298 +0xde29e95514d143a027eb48470dfb91329d2a37e7c91ee2478a329dfdfff89c9c +0x87a009d166bd6e32e8e4a4dae0f1fea9e76d97f140f53a3c5709428abf3a4664 +0x684c5f1ba2780f26d5c591a1549489a2d94ddfa707ad12cf491ba976536e9724 +0xed4dcdb597011dc8a0557ac7ead02527bbdd167d215fb295ec704cc7263005ad +0x7e3f44caa7259d04ff753ff5f8f9143c5c5aab4a332ec1910065b89cb947e22c +0xfe343d4ece9fec749a65abb1242e790558c4012b9da31203d03b363a8c6c5a56 +0x7997082223e490b595520fec2f92c6bd7ae4fe9f8082d5364a6232fbf0c80447 +0x0333e909ef478955204b9745a2f3f7c4b2dff8eae8b78d526024b502a31ff1f2 +0x9cecd178a6aae706b18e43986305c9218058d146c67e195e0fb0ae258ba656e7 +0xdcbc03f3910e73cef3755f8fe0df43f6356c3f58e0b42a053b1d0a04f45c4302 +0xf284b040a2540f78cc1f0ec9d292dc9bd4103c482620c8ef379d147a645d6cf5 +0x19a47e1c4ba1aafef24702d720a4845078d3a31128f038e269746fd988b6c56d +0xa33d0f0c13626541565cb57d116d12f15b5f3b8baa596db694a0e84342d5e168 +0xb0b88279700f9b069625efd43ba1f8a52a0c2ee3de44edcb7798d2fbcd0de4b1 +0x4c6c03596f113a0922fed16c7bd01c3f165eda3637850c3156323a8565e917d1 +0x8338c9e7ed9ba239ea146c988ba951d0329a9378344ca32e67c46d2971c216e6 +0xedf97a7e9b18f6cb4566de8a56c59bbe2794226092a390ece36daa98f845d213 +0xab837c8dc05e0f210b05e7a19e6c3ea04f6d1f5e607a3f9e34726d091fc73d63 +0xa6bdcc858cdee857fdef2b1f1ce6f01df9ff415e10837b52ae443ddea5a234c7 +0x4fd9651536b21a295d3356f64f404d325b367d1064ec07ecf113964b438a32b4 +0xa250e42e85a01447110b1193be9dc16fc473a30d595e30e1949d1b2c33299d3a +0x90c9ded95ba779fe9be9b2331f6d5901ca83ca8c9a2b819e4897a26ef672fbf6 +0xa989b599521ff35daf342612778b9148877911de47d0560e261a6b7f0f7af057 +0x1423cb6ffd7486ac225a77092f52dfc763d584dd1ae0aab64afa13335ab9c2c5 +0xe7f9186577ca3d9c386dd78ae2cb89f5a0d5c063f39a5d078e1e2251e8622184 +0xd3a6a27ed06a789ddd7e1d391ad1e79d5b7b56ff234b4e09d1e9aa00025ed121 +0x9b10355caec144a68fbe4822f524092d2965c56435672e16450ed8471618dafe +0xc4bd5f3ea953c996332e50ef4e52222282b4263ca5d0dd8ce29cbacffbdb5b06 +0x5a3f9921e5a6a9b02ddb69c68ee49c386e0cf3b6dd34c522b84a05998c2a9154 +0xaf04a8378139b186ad72e73b2258d63bf686e043d5660a6158dca3c6035c4c8e +0x729fa5f3d29b72c03a58a32219c88c6f88c1497d7a29749c31268a6cb950aa97 +0x37554acf77e21a2817bcf97de38219f4cf7bb8f70d287526e7b30c034c344f37 +0xdf677c15b051d8360e76cce29c2b8261f9f18a46791c3f0e96a73bf8d488f736 +0x3b8a870021c2ed353d3c74d6785c60dd99462f8510f6b85e7cf0332f6856e2d0 +0xe222577aade28ba2a38f9a29acf865890ce22a89ceb102383d52630ebdb98bf3 +0x01f00723a041f3d8f474322ce22fdd97770c80025096d3415af8f66dd2948e6b +0xc2632d6e6e0f1d46204310c8270e4a073b99ef53200f035ca758476fbe260284 +0x51f801968d1d34f4355a3b9325987e3fd27d39f12937aa9cacf17ed22ed541e6 +0xaf64e96290b48d7e6b06316982404b6bd78b31c924866e4dcc30e1fed133e395 +0xe39455e978089e3e88cd374c3d5dd2b38d3d27db065b9c682ecd35dd0dfd9937 +0x2401bd772798f743e915fc364b2ed97dd97d3e972fe1804950456bd77810bf56 +0xfe0cf8391294cd5528637dcc9d469762ce4c5d46ec6976c595b18ef2783246ad +0xa898f61a703539a1ebbb8aad79c8b9f147df55aa94a1c2e97d5f5a5d104b1a78 +0x03642480685f639016fd81aed5d84272c22e40f434756fa699043bde4d9c8146 +0xb3d1b730238b0260b9aa8fe520a477967fd3557fd6d410490d8ba859f66a27e8 +0x1c7f74a703af851117361b1949d18e33dded07fd12a66b159c1bce1a6c160d9b +0x6109ed194cfc5392584a0471f1592d8289fcae87e3045cdba1c40c7a2b60d279 +0x3b01b150507a332ccbbe2505ee410a76d42785c2755a936ae78937b67222977b +0x83c131bbecfa1ef0405f65c1f7ca198a25f9b3d5ac0768228880b7a8cea91753 +0x907e6038fef7dbb35f6abeaf681e83653a883281ab65259bcc4bbecf767c63df +0x39ceb7e153accb5eda4a7b76db3aa94f16e631d768aca183e2bb485e43841818 +0xea7a79a414e64c547b46a9c0ac35e14f6251d7882c30e0dfb76cd31defa7e3b0 +0xc34a747f126c35232327ce342031b9c874f218ae7d33d1f72af6ddcf2dfdbcff +0x8d52e384f3f73e824e6d76eba03f528a89f3c320b69e03fc09507cf424d3ea58 +0xddea939d00da6639123122f4ff6f04f29b6617d2c0cc8221b427b1b4e559db47 +0x15ef04285d7e47f3ac0d374416ec25e35b7c20caa2ef4536ee6dfcda213d38ec +0xbfc1d40b8f0880137741b0f195efdea4081bee1991214483fc428e04e7a6ae72 +0xa8c542a161dd8f02336bd8237d701e5359cc2a041a3588e6300880159054c155 +0x73411bf947bd2d51835cdf7472f4e4e098e667e6caacbda1ed2cab8b9c5cfd82 +0x0f16b90a7821a2af23b24ab55fa91bee1131c1f85afd1371bc2025ebeddde9e5 +0xfb604acbc324342d1fa68924005dc77cfad3142cf477255ad2fd42842cf8375c +0x778bf5c6c74f38993cee44055577094a83b39c944a7916d6d11238db7a210973 +0xc9fb49daf14f84fde831bdcd20a0306579e0686cc05f248b7e106ccbc8cbde85 +0x749d9b4a58739b7451d1eb909857c44986b27d5e08fb04b555957d0e3a1a3029 +0x4cf2089bf5b831d249cb6c7d012ab3bda4d7f9283f255c6b4124e980b8c2ba0c +0x8947f36ea24ca66566e7930454e9e954e55ab481a2c119c75752426dd8b0eb8c +0x7e3019a2d92fe9607685247e97b50d4cdc236e4912ead4067430d57b5915cfd0 +0x236b1f73e2f32201e31f90aa4570c4074d52762781db6ff995688c91b49c80d1 +0x73ac8dd08bee6dd5e5708fdfd3098172e5bc6ea5467d724db44b2bae4b7cb905 +0x1d69443c03d775b423f400ab97586061b55f85f52bbad6aae8f13286bb835bb5 +0x15c1cf3894e914daf1d92e9b46d8f7eb3918c7c90a85ebe783dfcdb680e747f5 +0x97d9406b1b18b72e4fc4f04ff500061777fac06c110323cdb0647ae08000c152 +0xa1c5b808cb3f6aecbb5e3856971060bf2780e034448e13bf7118e2d61e428f00 +0x6559363b2c71fe157c04a9dcdb705d8fb45784b58f93a3304f3f0e14bfeb77fe +0x86059829c261c8d4225fec6b9be6c57fd8c683afffe24e0adaf4e2389ae8ec02 +0x3cd75043677b04b6e0203e909319303bddf84bec9cd4131b55a26a72410c726e +0x4d1d8ad3ad3c757eb774ca57d5c00fc691480b21e5a88d9ef43cfecdfabf5883 +0x7578bf61f1953dc57d4d52b3a66af2280d0341e1d7eebd0ca766ef8b90346e5e +0x554f428612d9dd36e0b444999685dfe14ba62f980caa6d190f600e20b32487d2 +0xb5e131741c5c887e597054abf635dac0a63c2f6d01948a2e3eab47e96357f91f +0x5b5db8574a1e69b12c201ffac54d7f89a92221d3e282239a8c0533539493a2b1 +0x7da341e868ca7f27715f9bea2074ab70d7710df8cec0196be743fbdea4072c1c +0xe52ff0b7f6ba9092770f4f46ba94a74be64b56cfc1d81af6862d58d6fcb53608 +0x84b18ea5ea7c36f44c30969e56c65cba6184b31606b65ef6c2c1ff803f7ae57e +0x55d2c8b557b56ccc6b83f07922498e5f2315fa41d33a6cdffc357b7d0a710275 +0x25460c85ab2d54ccedda91dea94b69e83308744572bb20788a093975606ef555 +0x1c944c2c2a7c8083092c3d8b2709e1856f7e363b67230f2e7104fe958f259c32 +0x18bf14a251453bd03c540b148a63d90ede5b7d0a68e163a554b183da64c2c5f2 +0x88497f31816130f8ede15769adba95264c6793d875c394254ed9871ca12705ee +0x909bb1c5baa8c3ac35c62e4532de2f93e1af80e49ad46ed43577de3629bdff5a +0xdbf5d306ecdefbbc1eedf513177f75699dafe7aabb727d28598ce1ee9210aac7 +0xa3e5e10fb7f04ef041bca12cf7b47e3bf57ad556e3b83f3c50b30690f1c0367e +0xdcff80c86d1dedba490717ba16a63da845e52f954d4ab48ed40c194ec98c296e +0xc14c3d523d40d72b612a118b7a734cbe6144c1be331c4acf8f06c78d8a555cc2 +0x3b61e00878a67c26a1a2d8273650f1245184fb3bc184c9ee202f1789619b36c3 +0x0cc11e84db23cb9b97210a1a2e031db3258aeea3da0b1ef0a886254a55db1621 +0x87fdad16e33d71d154cde6bbcdc0673ad82d87639b657ea0783c57e8d9b97dd7 +0xd8f1538bb16780254526d3d6d024f7a86d088889c36d775597a78f173d2c7cda +0x7d6fc741d35e1f57411d45335caa8eca3a94d6802de19ce414ebb25434cbf318 +0x48dd92154cc6172e3afe697ac9a16ab3c0d0bd77b56d292045492d270fcf8e6a +0x020a7d5375bd6b1a6d54790943efc1cc3bb656ebbd5fdc4d28670167b29e0ba7 +0x0150bd75f58b7104b0947d8fae0ce99c4b2f7179354f3dddb835eda3d4ba87df +0xbed70ca187eeb8254e735162fab53b00c9d2f419e391e3ef27c58fe1e19d185f +0xb212e957202acd520f17717e5cb5b762e04c764b7008b03cc461ddd0faddf0a7 +0xb3c5a6890cee94c01aa18fc53cb06704e70563010947865855d162708a6b1236 +0x8ea3d1e8316cf70fd3309d9a00fc9d013e12a0d377245c25ff5dc561b0d0175e +0xa47ead8457c2b06fc5f0a59f6ff7411f03c5ab0da5fb6a690c0e0535cf829a87 +0xc57459384a4130abcf4ffef650349f108c47dd894e6e653e86683de40751b8c0 +0x08a8458ab786b4f348014061f131a36af378d5e6e418db84310ae21b76088bac +0xd89cab44f2aee9b7a074bd60b0ce8b1e597e98cd267910b36962f2a5edfc8ce0 +0x9f60da18adbaa447cc0262d3a0d851e27d6ef9062e5b74cbc704586cb09a983b +0x468fb5ba7c667c5a7ae47a807fa30a3a0a922cb11496b37c880742bb8be9c846 +0x0b2abf717644dd6958bf7064499dde4f46ec0058921fc5b4e9a597120d8ca7dd +0x99af3aedeeb08a3fbf7a2faa5cffcae4218afd0d42bff1776a838800a23e2b89 +0x8cec7e4745cc32031a5071e3dafe45b76e5cc056f81bb56ac9034f3ecc3120b6 +0x06d16207665de6107d34905076aaaa0a79d5bc76aa9e908b452bc02d0a473f91 +0x49799ff1b7f1b76400fa2596c924c6288175dac3bb5827e9e5f8362e193fdb28 +0x16109e71fe2977c210c21c53126153fc7f819e4473cd3ac1b0f6c072d38852fe +0x2ea35e6c51d1460c6aaea36c81919981bdf325bb338c5c284eefb29705961801 +0x8bfb50ef4d37c0dbdca6f243c4dc4280ab1b83ac7aa2be4c642ff0d68e1f63c5 +0x4a0ad7fce185a8c3602ed0fa3b5b05b54f1f2994f3c2a36f8be6c07cb84719a3 +0x3e04dd9a4cdcd006d5c52c5debb910efa5965d0e5005829330f964d823af48b0 +0x5f665f353ef62016f8509e8df4c2789e7881e2dfe727fe0a737f49f84c7254f9 +0xdfc91c303c164628aaaf45523205a5f02ea26362117112f16781544f47debb66 +0xff478d15227bec17843ae498e2d909c86161ae1e0ad813263d0d7ad853d7718f +0xd469a26a749ac24e2326dd2ff801a3a0fd59a4c9f1aa92456b314dbe7ef67e34 +0x898e0b714c82546715b742b5d0dc7e19fd14416d97c32a421fcad439115c5b6a +0x560193916614bcc7dca2a45f81f1ad270525438a66b38d55bb293c904d0cd954 +0xeefa11304066a54356ca86949616e4e3b8b60ef9ef049c2403fa144b2359876c +0x84f3dc4489ea279edb95dc580862c418bca84ea124dfedc4e3259bb3cc677f02 +0x8fb8e18db6cc68110836fd006ee4645a3fbe3cada61639be523f4febcaab3090 +0x43da1961b3e78ce1a50c327b4a904a349f6fd3e0b5e7d32e148c118399d86daf +0x4fcbe6c045fc82103441304a03a98e7bdf9ce9a1a811d5ed1c7b8643f696f373 +0xb1e619c5267838d9ca752d958ec20146768993df17651b83ed3912edace99c4b +0xeabeb58fc9fdfec8c289821d0923b39b46cadadb9fe3514d157b59d1c399fcfb +0x527afd929dedb1806de6a6c5bd0f7396450430675f909a5996480390645f9547 +0x58936eea96c7c69cda98ecfed6437f3e23f8c29a48633d8d9f646d316f8395ea +0x66a9e4201a350b73a68db867394438d6186c0727e4644312bdf5f0e206c8e21b +0xb02070e88cfbd0c23802edc23eac0e7f8756174ffcc41ddd5f8c8d3936ced518 +0xe01c60964e1688c9d7c3d0537b18be9c42ba3c024436332911b7273272bd7e15 +0x585964e3741aa75f91b317b004531ba35e7c12969c6869803ff024381c957434 +0x42fd55ecbf0b3cf892c20ac54b6644a0e16c95843d99316059760a773f0dfe41 +0x71fe29505e98030556cb121514cbcbc76c779971412b1b2c6dd20d2301872ba3 +0x47fc2f0203b041efa255af417e0c27b488c5bfd1103cdedb077a137690c5fafe +0xfdeb7c4c9a1c2055ce1b58a4df97ef858cd7ac0bf0f62109df2e4498973b3105 +0x6f50e8e3e13be9a980d832d775debaa9a3cd7f281aa16dad69cd27849479a708 +0xda42313617dbebf9386c4ba0b42d07b41ba2c670fd5495a5d5dd305f5ddae18f +0xb95be804fcb8c9d5ce8980a651dbe6b9dcf962374852e999d75e77ffde4eb924 +0x44405e84968f5649d87bdcca6841ddab66b42b0db31e32d89fed44267992d444 +0x6ca60ef585d3b03deb5884ad51c4ba0954adf2074ec245e12118b3734e492e2d +0x2faf56d535eb7e34252ff0b09533dfdca52700c25b6fdfa2f5ffda6b119a8837 +0x2da725cab338d6e480b3215b592d6dbbd6da3a7c7deb783ac1486a703c9c179e +0xe2a252705ca0c604cb685e00a8f67b8d373abcb36f858ed444a5c74b2f13463e +0xbc9cab4969cda794aec0cb7c77fdbabe98832f1b1cee0a49139c1716ea77a918 +0x79f0478febdaa936a2f677d3efdba12e21e4651ab833344370b8f7f45600e5ff +0x65a2d158a4259d1e8a40d964190f65ff20133002e336c677495eb3c21e56c5de +0xd96e7faee3e6c3b0d824c94898ae0f6392fb60dcca177ad959927e9436ba3929 +0xd22a8479fa0eed50c00c2055d77adb4b2b158818886da839f60fda6f3bd75051 +0x4ecfae92b805eadccbfb379e6cf12001374bd572a66d85e56f1ecb70c198acb9 +0xb48801c1ebe16e43c1aa2b71e7da3a459ec45270deec840da9cc752f0b6817f4 +0x0af87a8d6b96394b0940db036872fd7f9293b14d236260d331e359c920da6c39 +0x07d27ec58ed18063e966fe445ee347a2b9ba7e0bbe6e7f2fafb08ed4bb8eb8b8 +0xff1ffaed04e3ed71e2d3ad7292b4b6f04f04198ea2a18204c20b79de6ab18186 +0x873f27e0e1d75b3917116fe8b864ac2b6ffa16183d675edca3556ad8e010c2bd +0x0e3416883dfd248ffd68011a303c88470e6b42022d7947c91b5d32ed01d40e4c +0x7cf7f6d9b6bfe95790c6959a77f9e30cff3555073123e3dbd208b69b49b60764 +0x2f80138510ce9eba220cf90608767c2dcf7880e008dc5b4ca91118c57ab5d07d +0xb204fdbfecac030bf77a2416cabc5c893a99f80beedb9629e07fadbe70572e43 +0xf92f42363df4dee9d5176767703ca3a4fae139d97fee6232cfa1326cdb18fb15 +0x02da6bb49e37357150888d7815b203ba3ecc276c7ac31f4202722c6bedfbaab8 +0x49ce7e3dfb6749e0c519cace2e71c3f897fd9dcfec7c597cd65ff4fbdda166ec +0x1258ba723d31ffdd373a18fe31e414aca3efc60d29c4476097c3b165ccaa42fc +0xfc40df00651da509dc1775d3bd127f7c7b21abba28ae3ca380657814acb0a778 +0xd7599458c81e17846e5d6ec55fa1ee693bf0b0f029cbb0dc6d9b97e632a231d2 +0x06370960ccaed0d000312a9b38ecce5e74dc0d4552f70a97cdddde8eeba69615 +0x2f24eef74c357f6e4d903fdb94707e86b8a0b706759666b6c970ae35731d6307 +0xcac680a1b007fd36f95aacd78e1caef67f6f5abf0f1141171e4c85fadbccd423 +0x5af2c27f7b589f188696a7e6875311ceb743f735ae4fad7a0c57248b84a71011 +0x37bef72174dfc83d51008bf849e1a902b58136ec3d1b5892854a22616e98e6ed +0x6e88b325e1f29db63e6d4794db03cafa508b59c12e05ef8347baf076cd8eed38 +0xa96aa463487cf32e963eafe9ff7b289415f960ffc9e6d837b2a24cebef9e2a22 +0x480a8c2e20ed1f52570b334b554a731c773e3d28863d8cf0d0e3ffc6a36a939a +0xa66f591e029c9e4f1daed449910cc02b020e046c39e9110d6126d94ab2b52abe +0x89517b196a93d4d94455cfcbf2e0ad70bcf5c7b9e2de8d5caf30b37cf6689dde +0x608df463f7f34229e0c9dae1b8cb513a8966cdc14fa0a73ee011668e018bc622 +0x6fcbe123f74f938c1036d843b0faf550f5ad6411d24bfd5c72a150ea10ec1f7b +0x8b585e080666f0c7786fa005fa2335dde27e6cdac7a1a8078483b076c9324162 +0xf70061047d1a429696149d87b2b53f1da15a6293555ac69bffc03170b6d82a0a +0x399460807ad77b9121c166f21edb7a47bf59ce57f29cd3120a3e314d38ff23e8 +0x805790b8329f51873ab42d6aaa22f7785619a04ef4b432f22dc8bd26c1256038 +0x32e99ca1514dfc12f8ef2dbda21da82ca694765e7bfccf2b000e9718e88fdb30 +0x7ddde62e45ed5c6c75650026d5df47de1567055d2a8b46a3b9706701d2a4d150 +0x32b3d7f9b45b123000ecba55bb9c4843eb385b26ecec9395e97f0c20ea2881d7 +0xba024ce4c081e3c040d23dbce56229caf0c08ed639480c6f6a263055fe87bf75 +0x09725834ce114d7c8a660687f67abe74e6e72f8a620c9c3bd41f70d7a0d788d8 +0xad04ca97882673bd9570dd67b1f26b0ab298f4b5034fdea94ed42dffb6579486 +0xb224d1bc882a7cae9b8dc13c27db0c4f5f39aaf6efbc0eb26e273cf795afd1cd +0x8de3d2bac8bcb23b114db6182c4dc18ecd4d7072b15f50a0706ec1dc8e77acc1 +0x8d23c211c025cfb06c93395c70ce9d76d270c62d31d7c60b4f37c52f4b7a40ef +0x8a0f9743b88f2295a02566892335e786844a5f193f954ddd4385275dc08592a8 +0x31c10371e7c5b8ea19f1344d768c634f259c80156aed0454bd32ca987febd692 +0x4319759eaf53c2ff190ced08500a24beddec9a7d99196eb58f288bad347b78d1 +0xff00f78192766a27fa43a4fefc498efef4ad86c71c4c87fe5dcda06cffca4e71 +0xc0effc3cd8e4614e483cecc97474bc59674e38b0e19474c6adbab27eba4267a9 +0x3e3857dc9f23c1f5cd9ed2cc8dfdf33b905f88b184f191d0dcb23e36baef5cc6 +0x88325f6b91c08e496590556ba9a5a44aa2d621c7c9c7814abcbd2efa633a6b96 +0x510653c04b01f31a6096c32156567b294539ba9abab12d25e1c803aaa87fb24c +0xee7db0017cde67947101e65854659415e1e394cbff07d5806243cacd2d3587b8 +0x5e3918ef96becae9608096cc53b580a57c87f35daa9bc694277bcb754b907cdd +0x75256d56b7a5b2d9a5aa8f77797f6726ec50f69942a23185f6db1c5467988b19 +0x76e3318dab67dc7c0d5f93d5764fd1b54f25a543da77e8976f82c93daa26b2cb +0x180138ea1a86ae4686bde16deccd619b734af23940845c1d6e3d95786f92d1ef +0x3cb3bd3b74d84ea1e3d2739c461d1df3947bed394194b16e53d8032e9c4f6e9d +0x604e5e9a539368d8fc0cbd07823cbd0ad42f4154646b650bcb34edb74d0a47fe +0x41432404706738db971b8f00280ba63bb8532aad688175bf3e2f3f71edeb9836 +0x17661b25ce3fff7d67efb42ea6f19ac7d186edc584708bad6349312ac22288f8 +0x68e03aa7ed74cd5da0bdd6f93727346821d1a0008001acf61e21ac2b37a835bd +0x72244a4064ca82ce2639b0f7cce364a799e58d7b0690cf40861dc581a233603a +0xe06daf79b0396f028284f910d53451e442fe359424b001284ce96f94a6d377cf +0x16f78f0019adc47a03bc48edbdf78acae446492e5a76e99df7d8968290eb1135 +0xde9c7ff8e9dfbbcf8516c50dc359482958506719608bebad82e87fcc330c6571 +0xfddc3772cbe2e9827f4d741a32752739acf6f33776b8b13612fe0a51c6654502 +0x1f9962d9deaa51314b68b8a8e945bb83daeacf85aaf2ee15a15c0382ae9d303a +0xc13bd13b6cb6ecc0877409d103a87d7a1b66d09a90736fc6e47c1f7ed90dc778 +0x4266fab9816ea263afe1a5e4d69d55d77cc8d05704e05e4fb7059a483ce469d6 +0x78351209a77ce122a7d9caae2b8617b1938b3604176207569d50d2a705451176 +0xbac4e5803d00ca57c78fc52aeb8025a1de19904f2fe2e8719cfea56622323315 +0xae81024e2bf28ca614cc3b84add92ca72e8403dcad3f444ab6337ee846906338 +0x0aec48560602ad1fb187da060c0c879ac6c6b95fae04f7f5bda878a579083c7b +0x9f1530a55e1af046b4a006a4d8c4665806e5c21dc5f77314f91a222595cd7a53 +0x5daeaf1d0c4b5b1d6f945d071908dcc755c6bcf07db50dd31cc0140425019e5d +0x807eca3a316afe6ce96e59c6192209717a8a46a4d723d55bc7e8245817b97566 +0x392c5d2374f913272efffbf9888114ac233694cae4351c9600a2f83a59a8610b +0x70158132943bed58a5eb538e2cb23740ea14ced8880810d931eb48b56ff495ec +0x012d532011e68b58332f5b676976e1bfb83fc89f27d28e57d04392b61d055ce2 +0x8ede605300d48165a8dd708c01a4fbb6bfa8cebe23825c3e2c2c392cd95f96fc +0x2a9c292cf203d51ea4dcb532c083de350b851b94d995611c8af01ca201696001 +0x00b807b893d306b162989d3bb8d023663046174fef08eb00eff618bda1cfb6ef +0xbfa8995a3e966d38914bd560394fcc24244d6b98869d4d72133f687f644bcc3f +0x17778895ea9d337558b59f6552169b51682640f3bdfa0f7c72f3cd2a41fc342d +0x5b82578e991d45fdaf1b12ad5549369815e1b173a4fbd93603cceaf1e971ff38 +0x893e190085441b76c11115b5a11c58412c8f9d108122ca0fc0c3af9b544ef097 +0x5dd48520a0858054c001509a08242f7156abb7ab8039b0be8df51c165543ffa3 +0xc5a1122984ba8f295ed781e0c9a092b523b74663f0f2d709f8ca694977c6c5c6 +0x92200c25553dd7513a2822049484d81ba1403c55fba88cc48ef5c232b57d30ce +0x21235b2a7c28b26a16673bfacfa899f34ba3e5e61be750eafb8dbcac4ca7346d +0x9e5b3ef494bb2730ea3d705b4262018c8792c5a9354e121745188ccf5540bd2d +0x4b899d3050c4cc4207423141da694dfb689ae29463614c5dbaa972ab16bf1583 +0x7e9390e6e888ccf676bb05deadfaaccfa7a7a656fc04c027452a8624028e4669 +0xa6fa381f8652139f029ffe86c5c075c126bbbd6ef29494778150fac5eef6114c +0xfbe814be8ccebf984b850f2fe785f4b4e1f6399bceb2008c9f6f8941a7c97237 +0x66dc9937e4ed1e3913b8f14729c8730c26a53866c26868225bb79b989d571aa9 +0xde5f76e5d92d3b29f035d0fd88dd1ff2897b26c01d565cf156056580b3eb9cb4 +0xef8412717852d53c880ee5ade12969f3ff34b88af1ab916ab5a5910e07c6229d +0xb4f494bf5c86016e78c8553034caaebac82a25d366f01cbf9abc8972d8979dae +0x8eaec2642be5b1a25e13055d9717070a10dc7077471cbca6ec25decfe1f32008 +0x3549eea83c4750c321540df47ff7ca79d09d29a18df3dc5c2faf594db766e10c +0x3ae17a41b78373863b8b020e2b9e5352fcf34b2228d7f34840a1de71d6c61ae4 +0x304082960937af85695a5b0baf8d66b84e58361e0a42992ce809ed2286e5926e +0x9d5be4c77d8ffbae5b651509dd29dca0fede0ee806df3273b73aa5cd395df03d +0x4779d9f99f97afd6bc4d04796d492dc46798e935c5cf91b11d6d7c2e7f15fb42 +0xe74f3107f2a73bf3729a6dad055166289d96a89d0a225b166a89a589dcf734b3 +0xa90795d17d53af78df45d65d243d2dbc7f74f90916166e6526323cfea9f17f7a +0xf9ccdb5425cb24f0b85e3609076dc5c477846eb0359137fdb8156d247d7702a7 +0x124bf5185ada102d1d3a2fa30481515dcfed0fa9f36498de3a1a56b4e8966994 +0x9a6461d451f42c3bc63475201006312d19311f635f322b2b5b2c9dd871b6d854 +0x60be29a11cf03a90c540df34eec5214de5e6a4a5e3856daa3d24d3c621b0d6f8 +0xf4c2537fd7b8f81952a5285d781cae5608b5aef2f9013936bddcf4d50dd02037 +0xc4167481d59afa2c98cae8de250dedfc918a90bfdea28e563f04048fe1ed146e +0x70c1af7c208fc3109259a3bc03b01ee115148ff2a6da6b66885e5b14dbf4c69e +0x7c3824e103c7777e3baa450392ca4fa603df7856c547925d7d93504d92b2795e +0x384ba3de457f1a498dd40b7490c3c20f3112d01bf720b99d9a005e8c3634e90d +0xce0aa189fb07b78c4ae5745ec97acb76b420d9ca44552e467da216d8ee6c3a38 +0x347aa6f1073b0e0316f81553043aaba655b030f9200d2c4cde2a9d4f2131ffbb +0x11009500ce13b57a8d660796922bccb859c0851b39b53e3a540fad0250e40a35 +0xebd4885052d7ec5448eac4bd7e5ba159d3439e6dc6e6d9d117e85b2e6a0f82cc +0x7e419cc96a08ba0b36e43fb9bf6dffc7b57c191cfcd7acf2d7fbef2d2228d3ad +0xe388350f04d5a77de4472abb9984b6a8440a2e3c76d23d1f2b9172cd5a48da71 +0x28bd4ec4e200ecfc544772d097c84a533278ace220aa510d62788415ac3af4a6 +0x2939c321fe2081a541075e2e28b623c1076b253545c6aa1e65a824310ecaa014 +0x2b31d88e5caa83ece839cc1a5e08cba9bed1b9a03f274eb462916a1fb67ad48d +0xb9c481a264816b6710712b53d96a7c6b96f1efe9fd38273dbdd194390896bf60 +0x223d04ed779d405525532ae67e15665ae66d3c94415cdaa6df49d086d078042f +0x185647aea6f0d0b078a6f41a404ef74def3e087ea125faebf3ff5451ca6c381e +0x4d73b819a49a2324eb8f8fc9ef3e9d499398cafddede93a6db428a3bd7b53b2d +0x8094f1fbb9c427e51a5f4ed4d276563ac64086763ebc3d095d6e9a278371122f +0xe42b20b28be1cb148315b0616027bbfba220b4c1dea0ebf1300a5e833f0a61c6 +0xd5f3d44775d5d6791aa4573094c00a2c624b3888054e4dc38dcad8d2a0105774 +0x93a7288210da084970435d1570e9e35d0f41e09e565f31d2fc3429e0a654fe06 +0x62801f613e54b10bf21ae91a2e3741dc9a264c6a1b6d4a87b3baceee0c081817 +0x2b48b7f17fedc2ce4bd66d0fe4c5d09bae8048e24eff621c256a7532e245f034 +0x57e5686642ff6ae40cd2861cbe39476748eb5ce2f25c441970dc2ad3bf2d4059 +0x587a785d5e61d5a88d68342517a6709c80bc419630c01dc6169d3221edd071c1 +0x2a37bb759fda8f361bd05c3d742af7b7d21ab8930b32a0a226522ec15b52f60d +0xfbac998a65240c1239501741dd37e0d9e1a46bf10fad4c33d34e90fd3d1c5cb3 +0x45f8b3684c82b328ade09ab3026b014ec00be3f456386d53021a6f3a020e76b1 +0xb6cbe9270da71c418e2c7b81e1819147b8e6b7199360339c72828a108fdb6b4b +0x0e9207c7d930b129f1ffc9960271d2ce552c640d7065a5c35756817c4cc3f69e +0xed08b83e8d4057eda7931073ee34c47713f6a031f81e47025ccff1e25057dd48 +0xdb4f6539d06eaa212e640f69a7d1b7688d2c05de24c537a98051e7f8d4641498 +0xf20e45bb721a03c832d07e97c4fa24bde7adc70438ae2d28b51fc5dbdb66ff20 +0x602f978f5e0a1c0668320ddc119cffdace986ffecd384b39f727f7d1dc617b0d +0xdf25f85dbfa95c870a349884a69c67c43892f10c90320127a7e815bb1ae5fb78 +0x45af921982076e5ca149f2dd873e85f616380ade6a730c75f0dfe54e4b22bdc8 +0x6af130fc8ab2c37dbbb1fd746a3c6f20c7e41bae8594c825f306ff8639ecc783 +0x4a78fa7a6e17f2d43f692ff5b8549ecf988af9636caef6dcace5efa1746f14a0 +0xe9821693a18157253a269f8ec3c3789f17c1caa21c4d893e51caff28e6ebc215 +0x6550c56ee9987a29ba04b436170958fa31baa3bd68d7b1897d6d3c06f0089366 +0x7d8576adf359726aeab5c4e884bc85c3a310a2ab6bb6d6bad299d5ba28ee0d62 +0x1e7a4679e4359766ec92b727f643a4c94c6ab9a2d1b0169e7cb4b8b122116895 +0x1df14f0560c8b05b1b6a6ff89a10b56df8d418df9d6d5a4039b84a6a98cd6f17 +0xcf8500c8a045aec419823d449498019b118b8d8cd374ac4c03301c64bede2f1d +0x90743cf8e971a87ea6918d4c2f946bfee90857d8f0134006d0a59a0faba69ab5 +0x639e4e6c8e3db867a9ea8a8ea0bcf79fa323960709345b7379da42e5330a5324 +0xfc965d8a5618e394e237da221231dccdb0ff6345bd333cbc7a07de647e5012b6 +0xebbb9d80b6c3beb886aef553ba9b11f8726003d4c5e87e655bad45ba94071108 +0xabcfad5f1ade819d29ee60346423dbe69712997aba1a734d94d1ef33f4f57d43 +0xa8276df5997ffb5b44049660a1db39dbc5830cbe7384af654252ebf7f98b5073 +0x84572d2a9841ae1e3ff579a58e23c6cd75c995ab7be1fc36a198cde9a70a1027 +0xc24ecc7736294aa5c29ad50bd3d1cd8ecbceb878e7f4f526560bac97eb1b4dc3 +0x4e88718e988362a726fb834255c24bb2992ebd2a4736c92607cc508c1ffbcf48 +0x34008f1d06f3a3dc3256461ab401edac49a1b72bf132cbd0a85e620844401e99 +0xb0978f0d84e5f48e1e141b6f7c2110e3c20bbd2d78eb27e94e3cfc3e40d11b55 +0x4ce54ef43ded78b85a2cf4593995da08e332219bafa870e5a8e8cba622a35b07 +0x1c539b034f4c0df7563e0ada27142c853a43d87cad1c40e8c647baa0533512e8 +0x6bebef3190c4d7e5e8a55eb71e84e85ec936773ee04711a0c50cab975000fe23 +0x9d0f589eb62415794dc2843198f4b098337929e1dd74ca72fe56fe999372f469 +0x873773cf24c9b190be5152b5a8cf31343627febf70f53e025a262492f62b547c +0xa808f041e5b7ec01de9f29e23a0c27e152afe3e358ae7e63d885f101b45230ee +0xc7efa983e9c6b335fa667acd1f29b23974dd2340f3dd7d34f2457c8df6f723dd +0xf19013415cbdbedfc7e3466508a078e7d508b3b3dfe7058528ecf7959617b9de +0x0d5e4ce6e34fd3e809c2cf68789230a3b6dff53d3a3e8d43e40409f0192a787a +0xc3fcc4a5cafd2fea45c9d8eb791a0160e1e13d8d175d8d92c89adcd9aa323576 +0x160cc7d4a458024a5a6cf90a0a8de321288fec487002f039f6f7cb5319aac9b7 +0xdc0c8f884a5b7d0fb32049d0c1da12c81012da1f87ff722554b43306293b68bc +0xc0b86773f57f5464204bff7dfce2e48bc2c90f76883f1f672e9954d2873d324e +0x9e9581dd641fa00ea4aed7b1080794357329edeb1e43648fed42628c301a71ab +0xb9a78114b7422d9b8109f73765eb3353fe4c51618cf8c406d15145f02fe63cb3 +0x2f1f85662af0848ea9d46aa04f1549f59a3c4408aa22a127a694a0e30ffb9b8a +0x4602dc114c7dd2463e4d0532b652e9c11544f4f6e1531b20bec6031f5b87dbe6 +0x5ea12122aa551611e5c0cfdaccd40d52dbc26b2aa48de5fac4d6835ac6413573 +0xa11d31468f1c7570c44275e88426721f80cadc9185d2620c02a2086048864911 +0xfede01c2c19e9816385eb2f2ee671ec365b508ab7f04536b828a2396878f8bcc +0x3cad8e3ed055aaf6450ae83b05e8b4ece2a2e5bd25bf8b9ccb6c924ec7ac2f3b +0x91c454df1d2b93581b6c952958507e8a1b16aae4ee508db1e07bb36c465e36be +0xf680bdd876c8c0de2586c64dc05f5c5b1795c8bff082390314d74a5ac2e7e60c +0x5028019529068c6aca9804ffc1f9138cdd53ed583e539b86d4437666b7bf9a96 +0xfb1e0484a17d9cf40c68b47b9860a08c3f00acb26595e57f4c8820d203c049ff +0x02594c3d67d168fb9be66eb585b9f6dfdd6bc6d69141d5a17fd5df447bf69377 +0x675ad456e2eef59553c49fad43be09861d3caff170f798818fb5e4f42ea7e9d6 +0xe7ad461b7d1bb0ef4c8ca4c032e93cc5ae718057536a11624f376d7864d75a2f +0xaf873ec8ceab5d82d111cd283ee3674ee677abc06b2c8588fc700126e754765f +0x5c03196a1452b289d1f21d4d4153bf5103d78967393d23974a4021555a1216de +0x5dba3f143d406caf617dafd7c160408c4c967de019605ff3f5a5b184e5423098 +0xf810d03508f804e07fdaacb29f246eb9ea0f3a1ff1e35aee90fdeb1bb09c4701 +0x3f8e649b09d9ecd613bf9675ab740d8bef487e8847b42ddf450a112a15dee6ce +0xcfe0f9042d6bfdbd6898895037897c5e635d80b3c6eb20e7bf1ca9ef70502623 +0x7837ccbedad064e94bc6245923a16d2e581d47445bb7779e717b0a88424a5e72 +0x3a49954f0e5afc4fbf19bd5b1896400d0c7551fd049a7149460351c3bb69cbdf +0x344305866aebe9cf41826424214dad0b3c3bf7423b59f5cf25fda627f21b026a +0xf9ae9a0cacba9e6f36f3be099288508a33bd3515719a50a9541700996e27a8f7 +0x31b4aa614d033b49b7a20ddd9514e832e0b889faab334d11d4db3488ad24630e +0x109f40ff236b51eacd63f145710c2a7b21eb6172de74b51ddeb7d935dda85733 +0xe25ef99e9ad166c7e7c98637cab81e54b664229df7b9d1a6163d5856e2a082a8 +0x2b33e5120ea76e1fab4ff0bb174fa774ac0d27a0135fccdd93108fcd165f7407 +0xa2a48566ed88015b846cc8da1593cfd6cf3426a7bf68bdb036290f79753ff008 +0xe2ee1dbd18bf2983d7be8a2d60c244302c0705eac732521254dad50b7135efee +0xb613244fd76f708d5cd8db0e4879bfce011d2bcbc384bffc31d8a6cf865ab7be +0x36f1bcb2eb3cb0768a79f7f267cd6b89052f3d5df3bf3587c9d117dfea97caab +0xfe4213b9b8d9d86ccad64e376d44f37bab67d133d1a76f25e9b3f99dad268fa4 +0x6410cf00028abe2e5d4a0f4346093e7133b0d57fd7a360aa4c7bef15b8015919 +0x8ab448b1d58978cf4685eee5edc77c025aad54a185ef536e639a1c04d43e4b15 +0xb6220b7dff90ae9ce6d833aa9c881a86bf59014cef6a425cfc9d415f92e40172 +0x1b75e5d845985c02aed9e9bc57d895be6481db9538dad5c826de6b532d5d628f +0x9ece7166023ebb75849e299687c5aae9862f31a79268fe10804421ea8739ed2a +0x1b9c69fc0155857be7d82137eedb991c796937c3a01a13645fadc9e501c016f9 +0xae2cb5a8a85beb501fdf30120231e5bbc59effd800123f9c70c13c073b24642a +0x78b8dac1bc7dc3620adffa3abe8c41e2368c8cd77f80919e6a25b212a967b567 +0xc01362fbec4384a90802c33a2f31b925e7d22b6e36c657fc317c7139ff19e097 \ No newline at end of file diff --git a/batcher/aligned-task-sender/wallets/holesky-stage b/batcher/aligned-task-sender/wallets/holesky-stage new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/test_files/gnark_groth16_bn254_infinite_script/cmd/main.go b/scripts/test_files/gnark_groth16_bn254_infinite_script/cmd/main.go index d57423a8bd..74c5cb0fed 100644 --- a/scripts/test_files/gnark_groth16_bn254_infinite_script/cmd/main.go +++ b/scripts/test_files/gnark_groth16_bn254_infinite_script/cmd/main.go @@ -1,16 +1,22 @@ package main import ( - "github.com/yetanotherco/aligned_layer/scripts/test_files/gnark_groth16_bn254_infinite_script/pkg" "os" "strconv" + + "github.com/yetanotherco/aligned_layer/scripts/test_files/gnark_groth16_bn254_infinite_script/pkg" ) func main() { x, err := strconv.Atoi(os.Args[1]) + outputDir := "../../scripts/test_files/gnark_groth16_bn254_infinite_script/infinite_proofs/" + + if len(os.Args) > 2 { + outputDir = os.Args[2] + } if err != nil { panic("error parsing input") } - pkg.GenerateIneqProof(x) + pkg.GenerateIneqProof(x, outputDir) } diff --git a/scripts/test_files/gnark_groth16_bn254_infinite_script/pkg/generate_proof.go b/scripts/test_files/gnark_groth16_bn254_infinite_script/pkg/generate_proof.go index cad8d9c2da..8ae0d6bb5d 100644 --- a/scripts/test_files/gnark_groth16_bn254_infinite_script/pkg/generate_proof.go +++ b/scripts/test_files/gnark_groth16_bn254_infinite_script/pkg/generate_proof.go @@ -1,7 +1,6 @@ package pkg import ( - "fmt" "log" "os" "strconv" @@ -25,9 +24,7 @@ func (circuit *InequalityCircuit) Define(api frontend.API) error { return nil } -func GenerateIneqProof(x int) { - outputDir := "scripts/test_files/gnark_groth16_bn254_infinite_script/infinite_proofs/" - +func GenerateIneqProof(x int, outputDir string) { var circuit InequalityCircuit ccs, err := frontend.Compile(ecc.BN254.ScalarField(), r1cs.NewBuilder, &circuit) if err != nil { @@ -86,8 +83,4 @@ func GenerateIneqProof(x int) { if err != nil { panic("could not serialize proof into file") } - - fmt.Printf("Proof written into ineq_%d_groth16.proof\n", x) - fmt.Printf("Verification key written into ineq_%d_groth16.vk\n", x) - fmt.Printf("Public witness written into ineq_%d_groth16.pub\n", x) }