diff --git a/node/miner/src/mine.rs b/node/miner/src/mine.rs index 397a143..4c192cc 100644 --- a/node/miner/src/mine.rs +++ b/node/miner/src/mine.rs @@ -1,4 +1,4 @@ -use contract_interface::zgs_flow::MineContext; +use contract_interface::pora_mine::MineContext; use ethereum_types::{H256, U256}; use rand::{self, Rng}; use std::time; @@ -35,16 +35,23 @@ pub struct PoraService { #[derive(Debug, Clone, PartialEq, Eq)] pub(super) struct PoraPuzzle { context: MineContext, - target_quality: U256, + pora_target: U256, max_shards: u64, + subtask_digest: H256, } impl PoraPuzzle { - pub fn new(context: MineContext, target_quality: U256, max_shards: u64) -> Self { + pub fn new( + context: MineContext, + pora_target: U256, + max_shards: u64, + subtask_digest: H256, + ) -> Self { Self { context, - target_quality, + pora_target, max_shards, + subtask_digest, } } @@ -255,7 +262,8 @@ impl PoraService { miner_id: &self.miner_id, mine_range_config: &self.mine_range, context: &puzzle.context, - target_quality: &puzzle.target_quality, + subtask_digest: &puzzle.subtask_digest, + pora_target: &puzzle.pora_target, loader: &*self.loader, }) } diff --git a/node/miner/src/pora.rs b/node/miner/src/pora.rs index 164d1b5..2cf34ad 100644 --- a/node/miner/src/pora.rs +++ b/node/miner/src/pora.rs @@ -2,7 +2,7 @@ use super::metrics::*; use crate::recall_range::RecallRange; use crate::{MineRangeConfig, PoraLoader}; use blake2::{Blake2b512, Digest}; -use contract_interface::zgs_flow::MineContext; +use contract_interface::pora_mine::MineContext; use ethereum_types::{H256, U256}; use lighthouse_metrics::inc_counter; use storage::log_store::MineLoadChunk; @@ -24,7 +24,8 @@ pub(crate) struct Miner<'a> { pub range: RecallRange, pub miner_id: &'a H256, pub context: &'a MineContext, - pub target_quality: &'a U256, + pub subtask_digest: &'a H256, + pub pora_target: &'a U256, pub loader: &'a dyn PoraLoader, pub mine_range_config: &'a MineRangeConfig, } @@ -106,11 +107,11 @@ impl<'a> Miner<'a> { .range .difficulty_scale_x64(self.context.flow_length.as_u64()); - if quality <= (self.target_quality / difficulty_scale_x64) << 64 { + if quality <= (self.pora_target / difficulty_scale_x64) << 64 { debug!( - "Find a PoRA valid answer, quality: {}, target_quality {}, scale {:.3}", + "Find a PoRA valid answer, quality: {}, pora_target {}, scale {:.3}", U256::MAX / quality, - U256::MAX / self.target_quality, + U256::MAX / self.pora_target, difficulty_scale_x64.as_u128() as f64 / u64::MAX as f64 ); inc_counter(&HIT_COUNT); @@ -138,7 +139,7 @@ impl<'a> Miner<'a> { let mut hasher = Blake2b512::new(); hasher.update(self.miner_id); hasher.update(nonce); - hasher.update(self.context.digest); + hasher.update(self.subtask_digest); hasher.update(self.range.digest()); hasher.finalize().into() }; diff --git a/node/miner/src/sealer.rs b/node/miner/src/sealer.rs index eb630d5..efad639 100644 --- a/node/miner/src/sealer.rs +++ b/node/miner/src/sealer.rs @@ -87,7 +87,7 @@ impl Sealer { async fn update_flow_length(&mut self) -> Result<()> { let recent_context = self.flow_contract.make_context_with_result().call().await?; - debug!(target: "seal", "Recent context is {:?}", recent_context); + debug!("Recent context is {:?}", recent_context); let recent_flow_length = recent_context.flow_length.as_u64(); if self.last_context_flow_length < recent_flow_length { diff --git a/node/miner/src/service.rs b/node/miner/src/service.rs index 145d222..e7c7f3b 100644 --- a/node/miner/src/service.rs +++ b/node/miner/src/service.rs @@ -46,6 +46,7 @@ impl MineService { msg_recv.resubscribe(), provider.clone(), &config, + miner_id, ); let mine_answer_receiver = PoraService::spawn( diff --git a/node/miner/src/watcher.rs b/node/miner/src/watcher.rs index dbfd66b..dcfded6 100644 --- a/node/miner/src/watcher.rs +++ b/node/miner/src/watcher.rs @@ -1,6 +1,6 @@ #![allow(unused)] -use contract_interface::{zgs_flow::MineContext, PoraMine, ZgsFlow}; +use contract_interface::{zgs_flow::MineContext, PoraMine, WorkerContext, ZgsFlow}; use ethereum_types::{Address, H256, U256}; use ethers::{ contract::Contract, @@ -36,6 +36,7 @@ pub struct MineContextWatcher { mine_context_sender: broadcast::Sender, last_report: MineContextMessage, query_interval: Duration, + miner_id: H256, msg_recv: broadcast::Receiver, } @@ -46,6 +47,7 @@ impl MineContextWatcher { msg_recv: broadcast::Receiver, provider: Arc>>, config: &MinerConfig, + miner_id: H256, ) -> broadcast::Receiver { let mine_contract = PoraMine::new(config.mine_address, provider.clone()); let flow_contract = ZgsFlow::new(config.flow_address, provider.clone()); @@ -60,6 +62,7 @@ impl MineContextWatcher { msg_recv, last_report: None, query_interval: config.context_query_interval, + miner_id, }; executor.spawn( async move { Box::pin(watcher.start()).await }, @@ -105,20 +108,26 @@ impl MineContextWatcher { } async fn query_recent_context(&mut self) -> Result<(), String> { - let context_call = self.flow_contract.make_context_with_result(); - let valid_call = self.mine_contract.can_submit(); - let quality_call = self.mine_contract.pora_target(); - let shards_call = self.mine_contract.max_shards(); + let miner_id = self.miner_id.0; + let WorkerContext { + context, + pora_target, + subtask_digest, + max_shards, + } = self + .mine_contract + .compute_worker_context(miner_id) + .call() + .await + .map_err(|e| format!("Failed to query mining context: {:?}", e))?; - let (context, can_submit, quality, max_shards) = try_join!( - context_call.call(), - valid_call.call(), - quality_call.call(), - shards_call.call() - ) - .map_err(|e| format!("Failed to query mining context: {:?}", e))?; - let report = if can_submit && context.digest != EMPTY_HASH.0 { - Some(PoraPuzzle::new(context, quality, max_shards)) + let report = if pora_target > U256::zero() && context.digest != EMPTY_HASH.0 { + Some(PoraPuzzle::new( + context, + pora_target, + max_shards, + H256(subtask_digest), + )) } else { None }; @@ -127,6 +136,8 @@ impl MineContextWatcher { return Ok(()); } + debug!("Update pora puzzle: {:?}", report); + self.mine_context_sender .send(report.clone()) .map_err(|e| format!("Failed to send out the most recent mine context: {:?}", e))?; diff --git a/storage-contracts-abis/0g-storage-contracts-rev b/storage-contracts-abis/0g-storage-contracts-rev index 664fe62..bb6c698 100644 --- a/storage-contracts-abis/0g-storage-contracts-rev +++ b/storage-contracts-abis/0g-storage-contracts-rev @@ -1 +1 @@ -30f0f921a80078e43d578c82b746677bcf06d786 +d4cd976a43b4d0da4285bd362c640d72e0645f72 diff --git a/storage-contracts-abis/PoraMine.json b/storage-contracts-abis/PoraMine.json index 7e59eea..c9e0f11 100644 --- a/storage-contracts-abis/PoraMine.json +++ b/storage-contracts-abis/PoraMine.json @@ -341,6 +341,79 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "computeWorkerContext", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "context", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "poraTarget", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "subtaskDigest", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "maxShards", + "type": "uint64" + } + ], + "internalType": "struct WorkerContext", + "name": "answer", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "currentSubmissions", @@ -468,6 +541,62 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "context", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "getSubtaskDigest", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -585,6 +714,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "nSubtasks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -660,6 +802,11 @@ "internalType": "struct MineLib.PoraAnswer", "name": "answer", "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "subtaskDigest", + "type": "bytes32" } ], "name": "pora", @@ -818,6 +965,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nSubtasks_", + "type": "uint256" + } + ], + "name": "setNumSubtasks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1003,8 +1163,8 @@ "type": "function" } ], - "bytecode": "0x60e06040523480156200001157600080fd5b50604051620035b6380380620035b6833981016040819052620000349162000052565b6001811615608052600281161560a052600416151560c0526200006c565b6000602082840312156200006557600080fd5b5051919050565b60805160a05160c0516134fe620000b8600039600081816103f50152818161118c01526115280152600081816104250152610ebe0152600081816104960152610e8101526134fe6000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80637eca56881161013b578063b0628ee0116100b8578063ca15c8731161007c578063ca15c8731461052b578063d547741f1461053e578063dddc61a814610551578063e282e27b1461055a578063ffbc9bd01461056157600080fd5b8063b0628ee0146104de578063b15d20da146104f1578063b4988fd014610506578063b4a9328314610519578063b776a5121461052257600080fd5b8063a8279182116100ff578063a827918214610475578063ad08fdfb1461047e578063adaa7a0f14610491578063ae722e82146104b8578063aed75224146104cb57600080fd5b80637eca56881461041757806382975fe7146104205780639010d07c1461044757806391d148541461045a578063a217fddf1461046d57600080fd5b806331223ba7116101c95780633baebb751161018d5780633baebb75146103ae57806348f61441146103c15780635bdca855146103ca578063704d3c96146103dd5780637bba7d61146103f057600080fd5b806331223ba71461034d578063331f3b9c14610356578063343aad821461035f57806336568abe1461037257806339cd53ee1461038557600080fd5b806316a4be6f1161021057806316a4be6f1461029f578063228cb733146102ca578063248a9ca3146102f55780632a02573b146103275780632f2ff15d1461033a57600080fd5b806301ffc9a714610242578063047c13f51461026a578063158ef93e1461027f5780631600c6241461028c575b600080fd5b610255610250366004612ceb565b610569565b60405190151581526020015b60405180910390f35b61027d610278366004612d43565b610594565b005b6000546102559060ff1681565b61027d61029a366004612d76565b6106b0565b600a546102b2906001600160401b031681565b6040516001600160401b039091168152602001610261565b6004546102dd906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b610319610303366004612d76565b6000908152600160208190526040909120015490565b604051908152602001610261565b61027d610335366004612d8f565b6106ce565b61027d610348366004612daa565b6107d4565b610319600b5481565b61031960065481565b6003546102dd906001600160a01b031681565b61027d610380366004612daa565b6107ff565b6102dd610393366004612d76565b600e602052600090815260409020546001600160a01b031681565b61027d6103bc36600461304a565b61087d565b610319600d5481565b61027d6103d8366004612d76565b610b14565b61027d6103eb366004612d76565b610b41565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b61031960085481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6102dd6104553660046130e2565b610baf565b610255610468366004612daa565b610bce565b610319600081565b610319600c5481565b61027d61048c366004612d76565b610bf9565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b61027d6104c6366004613104565b610c33565b6103196104d9366004613104565b6111c0565b61027d6104ec366004613140565b6113c3565b6103196000805160206134a983398151915281565b61027d61051436600461316a565b611483565b610319600f5481565b61031960075481565b610319610539366004612d76565b6115aa565b61027d61054c366004612daa565b6115c1565b61031960095481565b60006102b2565b6102556115e7565b60006001600160e01b03198216635a05180f60e01b148061058e575061058e82611682565b92915050565b60006105a16001436131bc565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156106565760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b6000805160206134a98339815191526106c8816116b7565b50600655565b6000805160206134a98339815191526106e6816116b7565b6000826001600160401b03161161073f5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f00604482015260640161064d565b61074a6001836131cf565b82166001600160401b03166000146107b05760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b606482015260840161064d565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b600082815260016020819052604090912001546107f0816116b7565b6107fa83836116c4565b505050565b6001600160a01b038116331461086f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161064d565b61087982826116e6565b5050565b815160a0820151146108d15760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e6720646967657374000000000000604482015260640161064d565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036109445760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e6500000000000000604482015260640161064d565b600754600c54106109975760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e7300000000604482015260640161064d565b60006101006109a8610400826131ef565b6109b29190613224565b6101006109c1610400826131ef565b6109cb9190613224565b83606001516109da9190613224565b6109e491906131ef565b60608401519091506109f69082611708565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a69919061324f565b90506000610100610a7d61040060046131ef565b610a879190613224565b8560800151610a9691906132a9565b90508082600001516001600160801b0316108015610ac157508082602001516001600160801b031610155b610b0d5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e7465787420646967657374000000604482015260640161064d565b5050505050565b6000805160206134a9833981519152610b2c816116b7565b6008829055600b546000036108795750600755565b6000805160206134a9833981519152610b59816116b7565b60008211610ba95760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f000000604482015260640161064d565b50600955565b6000828152600260205260408120610bc7908361194c565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000805160206134a9833981519152610c11816116b7565b600f8290556000610c20611958565b905080600d5411156107fa57600d555050565b6040810151610c7d5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b604482015260640161064d565b6040808201516000908152600e60205220546001600160a01b031680610ce55760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f7420726567697374657265640000000000604482015260640161064d565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5491906132bc565b9050600b5481600001511015610dba5760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b606482015260840161064d565b600b548151118015610dce57506000600b54115b15610df357600754600c541015610de757610de761197f565b6000600c556008546007555b610dfd838261087d565b600a5460608401516001600160401b0390911690610e1a90611991565b1115610e775760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b606482015260840161064d565b610e7f612c8f565b7f000000000000000000000000000000000000000000000000000000000000000015610eb557610eae846119db565b9050610ebc565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610f45576000610eee8583611a8a565b905082604001518114610f435760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f740000000000000000604482015260640161064d565b505b610f4d612c8f565b90506000610f5a856111c0565b90506000610f7984606001518760600151611cfd90919063ffffffff16565b9050604081600d54610f8b9190613224565b901b821115610fdc5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c6974790000000000604482015260640161064d565b60008281526005602052604090205460ff161561103b5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d697474656400000000000000604482015260640161064d565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c610100611074610400806131ef565b611080906104006131ef565b61108b9060086131ef565b6110959190613224565b88608001516110a49190613224565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b1580156110f657600080fd5b505af115801561110a573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c8054600191906000906111719084906132a9565b9091555050600754600c54101561118a57505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006111b8576111b884611e3d565b505050505050565b60408101516000906112145760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d7074790000000000000000604482015260640161064d565b6000604051806080016040528084604001518152602001846020015181526020018460000151815260200161124c8560600151611e76565b90529050600061125b82611ede565b9050600061126c61040060406131ef565b61127a6104006101006131ef565b6112849190613224565b61129161040060046131ef565b61129f6104006101006131ef565b6112a99190613224565b6112b39190613224565b8560a001516112c29190613335565b90506112cc612c8f565b6112d4612cae565b6112e38760e001518486611f56565b925090506101006112f761040060046131ef565b6113019190613224565b8760a0015161131091906131ef565b61134d826040516020016113249190613349565b6040516020818303038152906040528051906020012089606001516120d390919063ffffffff16565b61135791906132a9565b8760800151146113a95760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e00000000000000604482015260640161064d565b6113b88760a0015185846121d9565b979650505050505050565b6000818152600e60205260409020546001600160a01b031633146114295760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e657249640000000000604482015260640161064d565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156114e25760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b606482015260840161064d565b6000805460ff191660011781556114ff906114fa3390565b6116c4565b6115176000805160206134a9833981519152336116c4565b61152383600019613224565b600d557f00000000000000000000000000000000000000000000000000000000000000001561155357600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b600081815260026020526040812061058e9061234c565b600082815260016020819052604090912001546115dd816116b7565b6107fa83836116e6565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af115801561163f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166391906132bc565b9050600b548160000151118061167c5750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061058e57506301ffc9a760e01b6001600160e01b031983161461058e565b6116c18133612356565b50565b6116ce82826123af565b60008281526002602052604090206107fa908261241a565b6116f0828261242f565b60008281526002602052604090206107fa9082612496565b610100611717610400806131ef565b611723906104006131ef565b61172e9060086131ef565b6117389190613224565b82516117449190613335565b156117915760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e6564000000604482015260640161064d565b6020820151825182916117a3916132a9565b11156117e95760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b604482015260640161064d565b60006117f483611991565b610100611803610400806131ef565b61180f906104006131ef565b61181b906104006131ef565b6118269060086131ef565b6118309190613224565b61183a91906131ef565b905080836020015111156118885760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b604482015260640161064d565b600061189483836124ab565b905080846020015110156118e35760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b604482015260640161064d565b83606001518460400151166001600160401b03166000146119465760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f000000000000604482015260640161064d565b50505050565b6000610bc783836124c1565b6000600f5460000361196b575060001990565b600f5461197a90600019613224565b905090565b61198f6001600160f01b036124eb565b565b606081015160009019815b6001600160401b038216156119cc576119b66001836131cf565b90911690806119c48161337a565b91505061199c565b600160ff9091161b9392505050565b6119e3612c8f565b60408083015160c084015160808501519251611a1393906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209182012060e0840180515190911883525190600090611a4961040060046131ef565b611a539190613224565b905081836020600184030281015b80821015611a8057602080842093810180519094189201918252611a61565b5050505050919050565b6000805b6020611a9d61040060046131ef565b611aa79190613224565b811015611af5576101006020820284012080848360808110611acb57611acb613399565b602002018181525050506020610100611ae49190613224565b611aee90826132a9565b9050611a8e565b506000611b056020610100613224565b90505b6020611b1761040060046131ef565b611b219190613224565b811015611bf45760005b6020611b3a61040060046131ef565b611b449190613224565b811015611beb576000848260808110611b5f57611b5f613399565b60200201519050600085611b7385856132a9565b60808110611b8357611b83613399565b602002015190508181604051602001611ba6929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611bce57611bce613399565b602002015250611be49050600183901b826132a9565b9050611b2b565b5060011b611b08565b508151611bff612c8f565b92506000610100611c1361040060046131ef565b611c1d9190613224565b8560800151611c2c9190613224565b905060005b85610100015151811015611cf357600080611c4d600285613335565b600003611c7d578491508761010001518381518110611c6e57611c6e613399565b60200260200101519050611ca2565b8761010001518381518110611c9457611c94613399565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611cdb9190613224565b93505050600181611cec91906132a9565b9050611c31565b5090949350505050565b600080610100611d0f610400806131ef565b611d1b906104006131ef565b611d27906104006131ef565b611d329060086131ef565b611d3c9190613224565b8311611d485782611d84565b610100611d57610400806131ef565b611d63906104006131ef565b611d6f906104006131ef565b611d7a9060086131ef565b611d849190613224565b90506000611d9185611991565b611d9b9085613224565b90506000610100611dae610400806131ef565b611dba906104006131ef565b611dc6906104006131ef565b611dd19060086131ef565b611ddb9190613224565b8211611de75781611e23565b610100611df6610400806131ef565b611e02906104006131ef565b611e0e906104006131ef565b611e199060086131ef565b611e239190613224565b9050611e3381604085901b613224565b9695505050505050565b6000816020015143611e4f91906131bc565b905060006010600d54901c90506000611e6b82846006546125a7565b9050611946816124eb565b60008160000151826020015183604001518460600151604051602001611ec1949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611ee6612cae565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516040840151606085015161058e9385939092909160806001612656565b611f5e612cae565b611f66612c8f565b6000611f7184612715565b9050611f9f816040611f8661040060046131ef565b611f909190613224565b611f9a90886131ef565b612731565b60005b608081101561202c57611fb6826001612731565b868160808110611fc857611fc8613399565b6020020151825118838260808110611fe257611fe2613399565b6020020152866001820160808110611ffc57611ffc613399565b602002015182600160200201511883826001016080811061201f5761201f613399565b6020020152600201611fa2565b506120bf81604061204061040060046131ef565b61204a9190613224565b60018861205a61040060406131ef565b6120686104006101006131ef565b6120729190613224565b61207f61040060046131ef565b61208d6104006101006131ef565b6120979190613224565b6120a19190613224565b6120ab91906131bc565b6120b591906131bc565b611f9a91906131ef565b6120c881612715565b925050935093915050565b6000806101006120e5610400826131ef565b6120ef9190613224565b84602001516120fe9190613224565b6121089084613335565b6040850151606086015160208701519293508316179061010061212d610400826131ef565b6121379190613224565b61214a906001600160401b0384166131ef565b11156121985760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e6400000000604482015260640161064d565b6101006121a7610400826131ef565b6121b19190613224565b6121c4906001600160401b0383166131ef565b85516121d091906132a9565b95945050505050565b60006121e3612cae565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528451908501516122499183918891906000608081612656565b9050612253612ccc565b60806000602061226661040060046131ef565b6122709190613224565b61227b9060206131ef565b6122869060806132a9565b9050601c8301601f8401602085016060860160e0870160e1880160f089018c600c87538b51865260208c015160208701525b888a10156123205760808a01995060ff8a1684538960081c835380518552602081015160208601526040810151604086015260608101516060860152608081019050888a0361230657600182535b60408660d58a6009600019fa61231b57600080fd5b6122b8565b50505050505050508260016008811061233b5761233b613399565b602002015198975050505050505050565b600061058e825490565b6123608282610bce565b6108795761236d816127f7565b612378836020612809565b6040516020016123899291906133d3565b60408051601f198184030181529082905262461bcd60e51b825261064d91600401613448565b6123b98282610bce565b6108795760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610bc7836001600160a01b0384166129a4565b6124398282610bce565b156108795760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bc7836001600160a01b0384166129f3565b60008183106124ba5781610bc7565b5090919050565b60008260000182815481106124d8576124d8613399565b9060005260206000200154905092915050565b600d5460095460109190911c90600081846125076001836131bc565b61251190866131ef565b61251b91906132a9565b6125259190613224565b90506125328360026131ef565b811115612547576125448360026131ef565b90505b612552600284613224565b81101561256757612564600284613224565b90505b6001600160f01b0381111561258057506001600160f01b035b601081901b600d556000612592611958565b905080600d541115610b0d57600d5550505050565b60008080600019858709858702925082811083820303915050806000036125e1578382816125d7576125d761320e565b0492505050610bc7565b8084116125ed57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b61265e612cae565b600c600061266b85612aed565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61270757600080fd5b505050979650505050505050565b61271d612cae565b815181526020918201519181019190915290565b612739612ccc565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa56020808301919091527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6040830152835160608301908152908401516080830152601c820190600c601f840153604060e0840153600160f084015360005b848110156127dd5760408260d5856009600019fa6127d557600080fd5b6001016127b8565b505050606081015183526080015160209092019190915250565b606061058e6001600160a01b03831660145b606060006128188360026131ef565b6128239060026132a9565b6001600160401b0381111561283a5761283a612dcd565b6040519080825280601f01601f191660200182016040528015612864576020820181803683370190505b509050600360fc1b8160008151811061287f5761287f613399565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106128ae576128ae613399565b60200101906001600160f81b031916908160001a90535060006128d28460026131ef565b6128dd9060016132a9565b90505b6001811115612955576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061291157612911613399565b1a60f81b82828151811061292757612927613399565b60200101906001600160f81b031916908160001a90535060049490941c9361294e8161347b565b90506128e0565b508315610bc75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161064d565b60008181526001830160205260408120546129eb5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561058e565b50600061058e565b60008181526001830160205260408120548015612adc576000612a176001836131bc565b8554909150600090612a2b906001906131bc565b9050818114612a90576000866000018281548110612a4b57612a4b613399565b9060005260206000200154905080876000018481548110612a6e57612a6e613399565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612aa157612aa1613492565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061058e565b600091505061058e565b5092915050565b612af5612cae565b62010000821015612b3957600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612b7957600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612b21565b68010000000000000000821015612b9357612b2182612c29565b600160801b821015612be3576001600160401b038216604083901c612bb782612c29565b6001600160c01b0319168352612bcc81612c29565b6001600160c01b031916602084015250612c249050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b604482015260640161064d565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b600060208284031215612cfd57600080fd5b81356001600160e01b031981168114610bc757600080fd5b80356001600160a01b0381168114612c2457600080fd5b80356001600160401b0381168114612c2457600080fd5b60008060408385031215612d5657600080fd5b612d5f83612d15565b9150612d6d60208401612d2c565b90509250929050565b600060208284031215612d8857600080fd5b5035919050565b600060208284031215612da157600080fd5b610bc782612d2c565b60008060408385031215612dbd57600080fd5b82359150612d6d60208401612d15565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612e0657612e06612dcd565b60405290565b60405160c081016001600160401b0381118282101715612e0657612e06612dcd565b600060808284031215612e4057600080fd5b604051608081018181106001600160401b0382111715612e6257612e62612dcd565b80604052508091508235815260208301356020820152612e8460408401612d2c565b6040820152612e9560608401612d2c565b60608201525092915050565b600082601f830112612eb257600080fd5b6040516110008082018281106001600160401b0382111715612ed657612ed6612dcd565b60405283018185821115612ee957600080fd5b845b82811015612f03578035825260209182019101612eeb565b509195945050505050565b600082601f830112612f1f57600080fd5b813560206001600160401b0380831115612f3b57612f3b612dcd565b8260051b604051601f19603f83011681018181108482111715612f6057612f60612dcd565b604052938452858101830193838101925087851115612f7e57600080fd5b83870191505b848210156113b857813583529183019190830190612f84565b60006111608284031215612fb057600080fd5b612fb8612de3565b9050813581526020820135602082015260408201356040820152612fdf8360608401612e2e565b606082015260e082013560808201526101008083013560a083015261012083013560c0830152613013846101408501612ea1565b60e08301526111408301356001600160401b0381111561303257600080fd5b61303e85828601612f0e565b82840152505092915050565b60008082840360e081121561305e57600080fd5b83356001600160401b0381111561307457600080fd5b61308086828701612f9d565b93505060c0601f198201121561309557600080fd5b5061309e612e0c565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b600080604083850312156130f557600080fd5b50508035926020909101359150565b60006020828403121561311657600080fd5b81356001600160401b0381111561312c57600080fd5b61313884828501612f9d565b949350505050565b6000806040838503121561315357600080fd5b61315c83612d15565b946020939093013593505050565b60008060006060848603121561317f57600080fd5b8335925061318f60208501612d15565b915061319d60408501612d15565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561058e5761058e6131a6565b6001600160401b03828116828216039080821115612ae657612ae66131a6565b6000816000190483118215151615613209576132096131a6565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826132335761323361320e565b500490565b80516001600160801b0381168114612c2457600080fd5b60006040828403121561326157600080fd5b604051604081018181106001600160401b038211171561328357613283612dcd565b60405261328f83613238565b815261329d60208401613238565b60208201529392505050565b8082018082111561058e5761058e6131a6565b600060c082840312156132ce57600080fd5b60405160c081018181106001600160401b03821117156132f0576132f0612dcd565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000826133445761334461320e565b500690565b60408101818360005b6002811015613371578151835260209283019290910190600101613352565b50505092915050565b600060ff821660ff8103613390576133906131a6565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b60005b838110156133ca5781810151838201526020016133b2565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161340b8160178501602088016133af565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161343c8160288401602088016133af565b01602801949350505050565b60208152600082518060208401526134678160408501602087016133af565b601f01601f19169190910160400192915050565b60008161348a5761348a6131a6565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a26469706673582212201d793fa6bc48d42baac4f9683591440fc6bbbb452626f580002ed82ec672e91c64736f6c63430008100033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061023d5760003560e01c80637eca56881161013b578063b0628ee0116100b8578063ca15c8731161007c578063ca15c8731461052b578063d547741f1461053e578063dddc61a814610551578063e282e27b1461055a578063ffbc9bd01461056157600080fd5b8063b0628ee0146104de578063b15d20da146104f1578063b4988fd014610506578063b4a9328314610519578063b776a5121461052257600080fd5b8063a8279182116100ff578063a827918214610475578063ad08fdfb1461047e578063adaa7a0f14610491578063ae722e82146104b8578063aed75224146104cb57600080fd5b80637eca56881461041757806382975fe7146104205780639010d07c1461044757806391d148541461045a578063a217fddf1461046d57600080fd5b806331223ba7116101c95780633baebb751161018d5780633baebb75146103ae57806348f61441146103c15780635bdca855146103ca578063704d3c96146103dd5780637bba7d61146103f057600080fd5b806331223ba71461034d578063331f3b9c14610356578063343aad821461035f57806336568abe1461037257806339cd53ee1461038557600080fd5b806316a4be6f1161021057806316a4be6f1461029f578063228cb733146102ca578063248a9ca3146102f55780632a02573b146103275780632f2ff15d1461033a57600080fd5b806301ffc9a714610242578063047c13f51461026a578063158ef93e1461027f5780631600c6241461028c575b600080fd5b610255610250366004612ceb565b610569565b60405190151581526020015b60405180910390f35b61027d610278366004612d43565b610594565b005b6000546102559060ff1681565b61027d61029a366004612d76565b6106b0565b600a546102b2906001600160401b031681565b6040516001600160401b039091168152602001610261565b6004546102dd906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b610319610303366004612d76565b6000908152600160208190526040909120015490565b604051908152602001610261565b61027d610335366004612d8f565b6106ce565b61027d610348366004612daa565b6107d4565b610319600b5481565b61031960065481565b6003546102dd906001600160a01b031681565b61027d610380366004612daa565b6107ff565b6102dd610393366004612d76565b600e602052600090815260409020546001600160a01b031681565b61027d6103bc36600461304a565b61087d565b610319600d5481565b61027d6103d8366004612d76565b610b14565b61027d6103eb366004612d76565b610b41565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b61031960085481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6102dd6104553660046130e2565b610baf565b610255610468366004612daa565b610bce565b610319600081565b610319600c5481565b61027d61048c366004612d76565b610bf9565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b61027d6104c6366004613104565b610c33565b6103196104d9366004613104565b6111c0565b61027d6104ec366004613140565b6113c3565b6103196000805160206134a983398151915281565b61027d61051436600461316a565b611483565b610319600f5481565b61031960075481565b610319610539366004612d76565b6115aa565b61027d61054c366004612daa565b6115c1565b61031960095481565b60006102b2565b6102556115e7565b60006001600160e01b03198216635a05180f60e01b148061058e575061058e82611682565b92915050565b60006105a16001436131bc565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156106565760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b6000805160206134a98339815191526106c8816116b7565b50600655565b6000805160206134a98339815191526106e6816116b7565b6000826001600160401b03161161073f5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f00604482015260640161064d565b61074a6001836131cf565b82166001600160401b03166000146107b05760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b606482015260840161064d565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b600082815260016020819052604090912001546107f0816116b7565b6107fa83836116c4565b505050565b6001600160a01b038116331461086f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161064d565b61087982826116e6565b5050565b815160a0820151146108d15760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e6720646967657374000000000000604482015260640161064d565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036109445760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e6500000000000000604482015260640161064d565b600754600c54106109975760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e7300000000604482015260640161064d565b60006101006109a8610400826131ef565b6109b29190613224565b6101006109c1610400826131ef565b6109cb9190613224565b83606001516109da9190613224565b6109e491906131ef565b60608401519091506109f69082611708565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a69919061324f565b90506000610100610a7d61040060046131ef565b610a879190613224565b8560800151610a9691906132a9565b90508082600001516001600160801b0316108015610ac157508082602001516001600160801b031610155b610b0d5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e7465787420646967657374000000604482015260640161064d565b5050505050565b6000805160206134a9833981519152610b2c816116b7565b6008829055600b546000036108795750600755565b6000805160206134a9833981519152610b59816116b7565b60008211610ba95760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f000000604482015260640161064d565b50600955565b6000828152600260205260408120610bc7908361194c565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000805160206134a9833981519152610c11816116b7565b600f8290556000610c20611958565b905080600d5411156107fa57600d555050565b6040810151610c7d5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b604482015260640161064d565b6040808201516000908152600e60205220546001600160a01b031680610ce55760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f7420726567697374657265640000000000604482015260640161064d565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5491906132bc565b9050600b5481600001511015610dba5760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b606482015260840161064d565b600b548151118015610dce57506000600b54115b15610df357600754600c541015610de757610de761197f565b6000600c556008546007555b610dfd838261087d565b600a5460608401516001600160401b0390911690610e1a90611991565b1115610e775760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b606482015260840161064d565b610e7f612c8f565b7f000000000000000000000000000000000000000000000000000000000000000015610eb557610eae846119db565b9050610ebc565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610f45576000610eee8583611a8a565b905082604001518114610f435760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f740000000000000000604482015260640161064d565b505b610f4d612c8f565b90506000610f5a856111c0565b90506000610f7984606001518760600151611cfd90919063ffffffff16565b9050604081600d54610f8b9190613224565b901b821115610fdc5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c6974790000000000604482015260640161064d565b60008281526005602052604090205460ff161561103b5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d697474656400000000000000604482015260640161064d565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c610100611074610400806131ef565b611080906104006131ef565b61108b9060086131ef565b6110959190613224565b88608001516110a49190613224565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b1580156110f657600080fd5b505af115801561110a573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c8054600191906000906111719084906132a9565b9091555050600754600c54101561118a57505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006111b8576111b884611e3d565b505050505050565b60408101516000906112145760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d7074790000000000000000604482015260640161064d565b6000604051806080016040528084604001518152602001846020015181526020018460000151815260200161124c8560600151611e76565b90529050600061125b82611ede565b9050600061126c61040060406131ef565b61127a6104006101006131ef565b6112849190613224565b61129161040060046131ef565b61129f6104006101006131ef565b6112a99190613224565b6112b39190613224565b8560a001516112c29190613335565b90506112cc612c8f565b6112d4612cae565b6112e38760e001518486611f56565b925090506101006112f761040060046131ef565b6113019190613224565b8760a0015161131091906131ef565b61134d826040516020016113249190613349565b6040516020818303038152906040528051906020012089606001516120d390919063ffffffff16565b61135791906132a9565b8760800151146113a95760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e00000000000000604482015260640161064d565b6113b88760a0015185846121d9565b979650505050505050565b6000818152600e60205260409020546001600160a01b031633146114295760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e657249640000000000604482015260640161064d565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156114e25760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b606482015260840161064d565b6000805460ff191660011781556114ff906114fa3390565b6116c4565b6115176000805160206134a9833981519152336116c4565b61152383600019613224565b600d557f00000000000000000000000000000000000000000000000000000000000000001561155357600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b600081815260026020526040812061058e9061234c565b600082815260016020819052604090912001546115dd816116b7565b6107fa83836116e6565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af115801561163f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166391906132bc565b9050600b548160000151118061167c5750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061058e57506301ffc9a760e01b6001600160e01b031983161461058e565b6116c18133612356565b50565b6116ce82826123af565b60008281526002602052604090206107fa908261241a565b6116f0828261242f565b60008281526002602052604090206107fa9082612496565b610100611717610400806131ef565b611723906104006131ef565b61172e9060086131ef565b6117389190613224565b82516117449190613335565b156117915760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e6564000000604482015260640161064d565b6020820151825182916117a3916132a9565b11156117e95760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b604482015260640161064d565b60006117f483611991565b610100611803610400806131ef565b61180f906104006131ef565b61181b906104006131ef565b6118269060086131ef565b6118309190613224565b61183a91906131ef565b905080836020015111156118885760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b604482015260640161064d565b600061189483836124ab565b905080846020015110156118e35760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b604482015260640161064d565b83606001518460400151166001600160401b03166000146119465760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f000000000000604482015260640161064d565b50505050565b6000610bc783836124c1565b6000600f5460000361196b575060001990565b600f5461197a90600019613224565b905090565b61198f6001600160f01b036124eb565b565b606081015160009019815b6001600160401b038216156119cc576119b66001836131cf565b90911690806119c48161337a565b91505061199c565b600160ff9091161b9392505050565b6119e3612c8f565b60408083015160c084015160808501519251611a1393906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209182012060e0840180515190911883525190600090611a4961040060046131ef565b611a539190613224565b905081836020600184030281015b80821015611a8057602080842093810180519094189201918252611a61565b5050505050919050565b6000805b6020611a9d61040060046131ef565b611aa79190613224565b811015611af5576101006020820284012080848360808110611acb57611acb613399565b602002018181525050506020610100611ae49190613224565b611aee90826132a9565b9050611a8e565b506000611b056020610100613224565b90505b6020611b1761040060046131ef565b611b219190613224565b811015611bf45760005b6020611b3a61040060046131ef565b611b449190613224565b811015611beb576000848260808110611b5f57611b5f613399565b60200201519050600085611b7385856132a9565b60808110611b8357611b83613399565b602002015190508181604051602001611ba6929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611bce57611bce613399565b602002015250611be49050600183901b826132a9565b9050611b2b565b5060011b611b08565b508151611bff612c8f565b92506000610100611c1361040060046131ef565b611c1d9190613224565b8560800151611c2c9190613224565b905060005b85610100015151811015611cf357600080611c4d600285613335565b600003611c7d578491508761010001518381518110611c6e57611c6e613399565b60200260200101519050611ca2565b8761010001518381518110611c9457611c94613399565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611cdb9190613224565b93505050600181611cec91906132a9565b9050611c31565b5090949350505050565b600080610100611d0f610400806131ef565b611d1b906104006131ef565b611d27906104006131ef565b611d329060086131ef565b611d3c9190613224565b8311611d485782611d84565b610100611d57610400806131ef565b611d63906104006131ef565b611d6f906104006131ef565b611d7a9060086131ef565b611d849190613224565b90506000611d9185611991565b611d9b9085613224565b90506000610100611dae610400806131ef565b611dba906104006131ef565b611dc6906104006131ef565b611dd19060086131ef565b611ddb9190613224565b8211611de75781611e23565b610100611df6610400806131ef565b611e02906104006131ef565b611e0e906104006131ef565b611e199060086131ef565b611e239190613224565b9050611e3381604085901b613224565b9695505050505050565b6000816020015143611e4f91906131bc565b905060006010600d54901c90506000611e6b82846006546125a7565b9050611946816124eb565b60008160000151826020015183604001518460600151604051602001611ec1949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611ee6612cae565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516040840151606085015161058e9385939092909160806001612656565b611f5e612cae565b611f66612c8f565b6000611f7184612715565b9050611f9f816040611f8661040060046131ef565b611f909190613224565b611f9a90886131ef565b612731565b60005b608081101561202c57611fb6826001612731565b868160808110611fc857611fc8613399565b6020020151825118838260808110611fe257611fe2613399565b6020020152866001820160808110611ffc57611ffc613399565b602002015182600160200201511883826001016080811061201f5761201f613399565b6020020152600201611fa2565b506120bf81604061204061040060046131ef565b61204a9190613224565b60018861205a61040060406131ef565b6120686104006101006131ef565b6120729190613224565b61207f61040060046131ef565b61208d6104006101006131ef565b6120979190613224565b6120a19190613224565b6120ab91906131bc565b6120b591906131bc565b611f9a91906131ef565b6120c881612715565b925050935093915050565b6000806101006120e5610400826131ef565b6120ef9190613224565b84602001516120fe9190613224565b6121089084613335565b6040850151606086015160208701519293508316179061010061212d610400826131ef565b6121379190613224565b61214a906001600160401b0384166131ef565b11156121985760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e6400000000604482015260640161064d565b6101006121a7610400826131ef565b6121b19190613224565b6121c4906001600160401b0383166131ef565b85516121d091906132a9565b95945050505050565b60006121e3612cae565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528451908501516122499183918891906000608081612656565b9050612253612ccc565b60806000602061226661040060046131ef565b6122709190613224565b61227b9060206131ef565b6122869060806132a9565b9050601c8301601f8401602085016060860160e0870160e1880160f089018c600c87538b51865260208c015160208701525b888a10156123205760808a01995060ff8a1684538960081c835380518552602081015160208601526040810151604086015260608101516060860152608081019050888a0361230657600182535b60408660d58a6009600019fa61231b57600080fd5b6122b8565b50505050505050508260016008811061233b5761233b613399565b602002015198975050505050505050565b600061058e825490565b6123608282610bce565b6108795761236d816127f7565b612378836020612809565b6040516020016123899291906133d3565b60408051601f198184030181529082905262461bcd60e51b825261064d91600401613448565b6123b98282610bce565b6108795760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610bc7836001600160a01b0384166129a4565b6124398282610bce565b156108795760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bc7836001600160a01b0384166129f3565b60008183106124ba5781610bc7565b5090919050565b60008260000182815481106124d8576124d8613399565b9060005260206000200154905092915050565b600d5460095460109190911c90600081846125076001836131bc565b61251190866131ef565b61251b91906132a9565b6125259190613224565b90506125328360026131ef565b811115612547576125448360026131ef565b90505b612552600284613224565b81101561256757612564600284613224565b90505b6001600160f01b0381111561258057506001600160f01b035b601081901b600d556000612592611958565b905080600d541115610b0d57600d5550505050565b60008080600019858709858702925082811083820303915050806000036125e1578382816125d7576125d761320e565b0492505050610bc7565b8084116125ed57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b61265e612cae565b600c600061266b85612aed565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61270757600080fd5b505050979650505050505050565b61271d612cae565b815181526020918201519181019190915290565b612739612ccc565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa56020808301919091527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6040830152835160608301908152908401516080830152601c820190600c601f840153604060e0840153600160f084015360005b848110156127dd5760408260d5856009600019fa6127d557600080fd5b6001016127b8565b505050606081015183526080015160209092019190915250565b606061058e6001600160a01b03831660145b606060006128188360026131ef565b6128239060026132a9565b6001600160401b0381111561283a5761283a612dcd565b6040519080825280601f01601f191660200182016040528015612864576020820181803683370190505b509050600360fc1b8160008151811061287f5761287f613399565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106128ae576128ae613399565b60200101906001600160f81b031916908160001a90535060006128d28460026131ef565b6128dd9060016132a9565b90505b6001811115612955576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061291157612911613399565b1a60f81b82828151811061292757612927613399565b60200101906001600160f81b031916908160001a90535060049490941c9361294e8161347b565b90506128e0565b508315610bc75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161064d565b60008181526001830160205260408120546129eb5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561058e565b50600061058e565b60008181526001830160205260408120548015612adc576000612a176001836131bc565b8554909150600090612a2b906001906131bc565b9050818114612a90576000866000018281548110612a4b57612a4b613399565b9060005260206000200154905080876000018481548110612a6e57612a6e613399565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612aa157612aa1613492565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061058e565b600091505061058e565b5092915050565b612af5612cae565b62010000821015612b3957600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612b7957600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612b21565b68010000000000000000821015612b9357612b2182612c29565b600160801b821015612be3576001600160401b038216604083901c612bb782612c29565b6001600160c01b0319168352612bcc81612c29565b6001600160c01b031916602084015250612c249050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b604482015260640161064d565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b600060208284031215612cfd57600080fd5b81356001600160e01b031981168114610bc757600080fd5b80356001600160a01b0381168114612c2457600080fd5b80356001600160401b0381168114612c2457600080fd5b60008060408385031215612d5657600080fd5b612d5f83612d15565b9150612d6d60208401612d2c565b90509250929050565b600060208284031215612d8857600080fd5b5035919050565b600060208284031215612da157600080fd5b610bc782612d2c565b60008060408385031215612dbd57600080fd5b82359150612d6d60208401612d15565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612e0657612e06612dcd565b60405290565b60405160c081016001600160401b0381118282101715612e0657612e06612dcd565b600060808284031215612e4057600080fd5b604051608081018181106001600160401b0382111715612e6257612e62612dcd565b80604052508091508235815260208301356020820152612e8460408401612d2c565b6040820152612e9560608401612d2c565b60608201525092915050565b600082601f830112612eb257600080fd5b6040516110008082018281106001600160401b0382111715612ed657612ed6612dcd565b60405283018185821115612ee957600080fd5b845b82811015612f03578035825260209182019101612eeb565b509195945050505050565b600082601f830112612f1f57600080fd5b813560206001600160401b0380831115612f3b57612f3b612dcd565b8260051b604051601f19603f83011681018181108482111715612f6057612f60612dcd565b604052938452858101830193838101925087851115612f7e57600080fd5b83870191505b848210156113b857813583529183019190830190612f84565b60006111608284031215612fb057600080fd5b612fb8612de3565b9050813581526020820135602082015260408201356040820152612fdf8360608401612e2e565b606082015260e082013560808201526101008083013560a083015261012083013560c0830152613013846101408501612ea1565b60e08301526111408301356001600160401b0381111561303257600080fd5b61303e85828601612f0e565b82840152505092915050565b60008082840360e081121561305e57600080fd5b83356001600160401b0381111561307457600080fd5b61308086828701612f9d565b93505060c0601f198201121561309557600080fd5b5061309e612e0c565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b600080604083850312156130f557600080fd5b50508035926020909101359150565b60006020828403121561311657600080fd5b81356001600160401b0381111561312c57600080fd5b61313884828501612f9d565b949350505050565b6000806040838503121561315357600080fd5b61315c83612d15565b946020939093013593505050565b60008060006060848603121561317f57600080fd5b8335925061318f60208501612d15565b915061319d60408501612d15565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561058e5761058e6131a6565b6001600160401b03828116828216039080821115612ae657612ae66131a6565b6000816000190483118215151615613209576132096131a6565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826132335761323361320e565b500490565b80516001600160801b0381168114612c2457600080fd5b60006040828403121561326157600080fd5b604051604081018181106001600160401b038211171561328357613283612dcd565b60405261328f83613238565b815261329d60208401613238565b60208201529392505050565b8082018082111561058e5761058e6131a6565b600060c082840312156132ce57600080fd5b60405160c081018181106001600160401b03821117156132f0576132f0612dcd565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000826133445761334461320e565b500690565b60408101818360005b6002811015613371578151835260209283019290910190600101613352565b50505092915050565b600060ff821660ff8103613390576133906131a6565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b60005b838110156133ca5781810151838201526020016133b2565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161340b8160178501602088016133af565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161343c8160288401602088016133af565b01602801949350505050565b60208152600082518060208401526134678160408501602087016133af565b601f01601f19169190910160400192915050565b60008161348a5761348a6131a6565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a26469706673582212201d793fa6bc48d42baac4f9683591440fc6bbbb452626f580002ed82ec672e91c64736f6c63430008100033", + "bytecode": "0x60e06040523480156200001157600080fd5b5060405162003c9f38038062003c9f833981016040819052620000349162000052565b6001811615608052600281161560a052600416151560c0526200006c565b6000602082840312156200006557600080fd5b5051919050565b60805160a05160c051613be7620000b8600039600081816104c301528181611abc0152612f130152600081816104f3015261169501526000818161058001526116580152613be76000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80637bba7d6111610151578063ae722e82116100c3578063b776a51211610087578063b776a512146105f9578063ca15c87314610602578063d547741f14610615578063dddc61a814610628578063e282e27b14610631578063ffbc9bd01461063857600080fd5b8063ae722e82146105a2578063b0628ee0146105b5578063b15d20da146105c8578063b4988fd0146105dd578063b4a93283146105f057600080fd5b806391d148541161011557806391d148541461053b5780639dc787a21461054e578063a217fddf14610557578063a82791821461055f578063ad08fdfb14610568578063adaa7a0f1461057b57600080fd5b80637bba7d61146104be5780637eca5688146104e557806382975fe7146104ee5780638c0bca06146105155780639010d07c1461052857600080fd5b80632f2ff15d116101ea57806339cd53ee116101ae57806339cd53ee146104405780633baebb751461046957806348f614411461047c5780635bdca85514610485578063704d3c961461049857806378203ab6146104ab57600080fd5b80632f2ff15d146103f557806331223ba714610408578063331f3b9c14610411578063343aad821461041a57806336568abe1461042d57600080fd5b806316a4be6f1161023157806316a4be6f146102de578063228cb73314610309578063248a9ca314610334578063296beba7146103665780632a02573b146103e257600080fd5b806301ffc9a71461026e578063047c13f5146102965780630c655e1f146102ab578063158ef93e146102be5780631600c624146102cb575b600080fd5b61028161027c36600461333d565b610640565b60405190151581526020015b60405180910390f35b6102a96102a4366004613395565b61066b565b005b6102a96102b93660046133c8565b610787565b6000546102819060ff1681565b6102a96102d93660046133c8565b6108e2565b600a546102f1906001600160401b031681565b6040516001600160401b03909116815260200161028d565b60045461031c906001600160a01b031681565b6040516001600160a01b03909116815260200161028d565b6103586103423660046133c8565b6000908152600160208190526040909120015490565b60405190815260200161028d565b6103796103743660046133c8565b610952565b60408051825180518252602080820151818401528184015183850152606080830151818501526080808401519085015260a0928301519284019290925284015160c08301529183015160e08201529101516001600160401b03166101008201526101200161028d565b6102a96103f03660046133e1565b610bcf565b6102a96104033660046133fc565b610cd5565b610358600b5481565b61035860065481565b60035461031c906001600160a01b031681565b6102a961043b3660046133fc565b610d00565b61031c61044e3660046133c8565b600e602052600090815260409020546001600160a01b031681565b6102a96104773660046136fe565b610d7e565b610358600d5481565b6102a96104933660046133c8565b611020565b6102a96104a63660046133c8565b61104d565b6103586104b9366004613743565b6110bb565b6102817f000000000000000000000000000000000000000000000000000000000000000081565b61035860085481565b6102817f000000000000000000000000000000000000000000000000000000000000000081565b61035861052336600461376e565b611208565b61031c6105363660046137b2565b611408565b6102816105493660046133fc565b611427565b61035860105481565b610358600081565b610358600c5481565b6102a96105763660046133c8565b611452565b6102817f000000000000000000000000000000000000000000000000000000000000000081565b6102a96105b03660046137d4565b61148c565b6102a96105c3366004613810565b611957565b610358600080516020613b9283398151915281565b6102a96105eb36600461383a565b611a17565b610358600f5481565b61035860075481565b6103586106103660046133c8565b611b43565b6102a96106233660046133fc565b611b5a565b61035860095481565b60006102f1565b610281611b80565b60006001600160e01b03198216635a05180f60e01b1480610665575061066582611c26565b92915050565b600061067860014361388c565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b03161561072d5760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b600080516020613b9283398151915261079f81611c5b565b600082116107f95760405162461bcd60e51b815260206004820152602160248201527f4e756d626572206f66207375627461736b732063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610724565b600360009054906101000a90046001600160a01b03166001600160a01b031663f06820546040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610870919061389f565b82106108dc5760405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207375627461736b73206d757374206265206c657373206044820152740e8d0c2dc40c4d8dec6d6e640e0cae440cae0dec6d605b1b6064820152608401610724565b50601055565b600080516020613b928339815191526108fa81611c5b565b61010082111561094c5760405162461bcd60e51b815260206004820152601d60248201527f746172676574206d696e6520626c6f636b206d757374203c3d203235360000006044820152606401610724565b50600655565b604080516101408101825260006080820181815260a0830182905260c0830182905260e08301829052610100830182905261012083018290528252602082018190529181018290526060810191909152816109e85760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610724565b6000828152600e60205260409020546001600160a01b031680610a4d5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610724565b600a546001600160401b0316606083015260035460408051635a325a9f60e11b815290516001600160a01b039092169163b464b53e9160048082019260c09290919082900301816000875af1158015610aaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace91906138b8565b80835260105460a09091015160405160009291610af8918790602001918252602082015260400190565b6040516020818303038152906040528051906020012060001c610b1b9190613947565b9050600081846000015160200151610b33919061395b565b90508043111580610b4e5750600654610b4c824361388c565b115b15610b5b57505050919050565b835160a001516040805160208082019390935283408183015281518082038301815260609091018252805192019190912090850152600b548451511115610ba7578351610ba790611c68565b600754610bb590600261396e565b600c541015610bc757600d5460208501525b505050919050565b600080516020613b92833981519152610be781611c5b565b6000826001600160401b031611610c405760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f006044820152606401610724565b610c4b60018361398d565b82166001600160401b0316600014610cb15760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b6064820152608401610724565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b60008281526001602081905260409091200154610cf181611c5b565b610cfb8383611cf8565b505050565b6001600160a01b0381163314610d705760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610724565b610d7a8282611d1a565b5050565b815160a082015114610dd25760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e67206469676573740000000000006044820152606401610724565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a0015103610e455760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e65000000000000006044820152606401610724565b600754610e5390600261396e565b600c5410610ea35760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e73000000006044820152606401610724565b6000610100610eb46104008261396e565b610ebe91906139ad565b610100610ecd6104008261396e565b610ed791906139ad565b8360600151610ee691906139ad565b610ef0919061396e565b6060840151909150610f029082611d3c565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610f51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7591906139d8565b90506000610100610f89610400600461396e565b610f9391906139ad565b8560800151610fa2919061395b565b90508082600001516001600160801b0316108015610fcd57508082602001516001600160801b031610155b6110195760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e74657874206469676573740000006044820152606401610724565b5050505050565b600080516020613b9283398151915261103881611c5b565b6008829055600b54600003610d7a5750600755565b600080516020613b9283398151915261106581611c5b565b600082116110b55760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f0000006044820152606401610724565b50600955565b6000806010548460a00151846040516020016110e1929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c6111049190613947565b90506000818560200151611118919061395b565b905080431161117c5760405162461bcd60e51b815260206004820152602a60248201527f4561726c696572207468616e206578706563746564207375627461736b20737460448201526930b93a10313637b1b59760b11b6064820152608401610724565b600654611189824361388c565b11156111ce5760405162461bcd60e51b8152602060048201526014602482015273135a5b9948191958591b1a5b9948195e18d9595960621b6044820152606401610724565b60a0850151604080516020810192909252824090820152606001604051602081830303815290604052805190602001209250505092915050565b604082015160009061125c5760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d70747900000000000000006044820152606401610724565b6000604051806080016040528085604001518152602001856020015181526020018481526020016112908660600151611f80565b90529050600061129f82611fe8565b905060006112b0610400604061396e565b6112be61040061010061396e565b6112c891906139ad565b6112d5610400600461396e565b6112e361040061010061396e565b6112ed91906139ad565b6112f791906139ad565b8660a001516113069190613947565b90506113106132e1565b611318613300565b6113278860e001518486612060565b9250905061010061133b610400600461396e565b61134591906139ad565b8860a00151611354919061396e565b611391826040516020016113689190613a32565b604051602081830303815290604052805190602001208a606001516121dd90919063ffffffff16565b61139b919061395b565b8860800151146113ed5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e000000000000006044820152606401610724565b6113fc8860a0015185846122e3565b98975050505050505050565b60008281526002602052604081206114209083612456565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020613b9283398151915261146a81611c5b565b600f8290556000611479612462565b905080600d541115610cfb57600d555050565b60408101516114d65760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610724565b6040808201516000908152600e60205220546001600160a01b03168061153e5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610724565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015611589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ad91906138b8565b90506115b881611c68565b60006115c88285604001516110bb565b90506115d48483610d7e565b600a5460608501516001600160401b03909116906115f190612489565b111561164e5760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b6064820152608401610724565b6116566132e1565b7f00000000000000000000000000000000000000000000000000000000000000001561168c57611685856124d3565b9050611693565b5060e08401515b7f00000000000000000000000000000000000000000000000000000000000000001561171c5760006116c58683612582565b90508360400151811461171a5760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f7400000000000000006044820152606401610724565b505b6117246132e1565b905060006117328684611208565b90506000611751856060015188606001516127f590919063ffffffff16565b9050604081600d5461176391906139ad565b901b8211156117b45760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c69747900000000006044820152606401610724565b60008281526005602052604090205460ff16156118135760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d6974746564000000000000006044820152606401610724565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c61010061184c6104008061396e565b6118589061040061396e565b61186390600861396e565b61186d91906139ad565b896080015161187c91906139ad565b6040808b015190516001600160e01b031960e085901b16815260048101929092526001600160a01b038a1660248301526044820152606401600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b5050506040808901518751600c5460808c015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38451600b55600c80546001919060009061194990849061395b565b909155505050505050505050565b6000818152600e60205260409020546001600160a01b031633146119bd5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e6572496400000000006044820152606401610724565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff1615611a765760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608401610724565b6000805460ff19166001178155611a9390611a8e3390565b611cf8565b611aab600080516020613b9283398151915233611cf8565b611ab7836000196139ad565b600d557f000000000000000000000000000000000000000000000000000000000000000015611ae757600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff191660201790556001601055565b600081815260026020526040812061066590612935565b60008281526001602081905260409091200154611b7681611c5b565b610cfb8383611d1a565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af1158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc91906138b8565b9050600b5481600001511180611c205750600754611c1b90600261396e565b600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061066557506301ffc9a760e01b6001600160e01b0319831614610665565b611c65813361293f565b50565b600b5481511015611cc95760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b6064820152608401610724565b600b548151118015611cdd57506000600b54115b15611c6557611cea612998565b6000600c5560085460075550565b611d0282826129d8565b6000828152600260205260409020610cfb9082612a43565b611d248282612a58565b6000828152600260205260409020610cfb9082612abf565b610100611d4b6104008061396e565b611d579061040061396e565b611d6290600861396e565b611d6c91906139ad565b8251611d789190613947565b15611dc55760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e65640000006044820152606401610724565b602082015182518291611dd79161395b565b1115611e1d5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b6044820152606401610724565b6000611e2883612489565b610100611e376104008061396e565b611e439061040061396e565b611e4f9061040061396e565b611e5a90600861396e565b611e6491906139ad565b611e6e919061396e565b90508083602001511115611ebc5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b6044820152606401610724565b6000611ec88383612ad4565b90508084602001511015611f175760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b6044820152606401610724565b83606001518460400151166001600160401b0316600014611f7a5760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f0000000000006044820152606401610724565b50505050565b60008160000151826020015183604001518460600151604051602001611fcb949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611ff0613300565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516106659385939092909160806001612aea565b612068613300565b6120706132e1565b600061207b84612ba9565b90506120a9816040612090610400600461396e565b61209a91906139ad565b6120a4908861396e565b612bc5565b60005b6080811015612136576120c0826001612bc5565b8681608081106120d2576120d2613a63565b60200201518251188382608081106120ec576120ec613a63565b602002015286600182016080811061210657612106613a63565b602002015182600160200201511883826001016080811061212957612129613a63565b60200201526002016120ac565b506121c981604061214a610400600461396e565b61215491906139ad565b600188612164610400604061396e565b61217261040061010061396e565b61217c91906139ad565b612189610400600461396e565b61219761040061010061396e565b6121a191906139ad565b6121ab91906139ad565b6121b5919061388c565b6121bf919061388c565b6120a4919061396e565b6121d281612ba9565b925050935093915050565b6000806101006121ef6104008261396e565b6121f991906139ad565b846020015161220891906139ad565b6122129084613947565b604085015160608601516020870151929350831617906101006122376104008261396e565b61224191906139ad565b612254906001600160401b03841661396e565b11156122a25760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e64000000006044820152606401610724565b6101006122b16104008261396e565b6122bb91906139ad565b6122ce906001600160401b03831661396e565b85516122da919061395b565b95945050505050565b60006122ed613300565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528451908501516123539183918891906000608081612aea565b905061235d61331e565b608060006020612370610400600461396e565b61237a91906139ad565b61238590602061396e565b61239090608061395b565b9050601c8301601f8401602085016060860160e0870160e1880160f089018c600c87538b51865260208c015160208701525b888a101561242a5760808a01995060ff8a1684538960081c835380518552602081015160208601526040810151604086015260608101516060860152608081019050888a0361241057600182535b60408660d58a6009600019fa61242557600080fd5b6123c2565b50505050505050508260016008811061244557612445613a63565b602002015198975050505050505050565b60006114208383612c8b565b6000600f54600003612475575060001990565b600f54612484906000196139ad565b905090565b606081015160009019815b6001600160401b038216156124c4576124ae60018361398d565b90911690806124bc81613a79565b915050612494565b600160ff9091161b9392505050565b6124db6132e1565b60408083015160c08401516080850151925161250b93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209182012060e0840180515190911883525190600090612541610400600461396e565b61254b91906139ad565b905081836020600184030281015b8082101561257857602080842093810180519094189201918252612559565b5050505050919050565b6000805b6020612595610400600461396e565b61259f91906139ad565b8110156125ed5761010060208202840120808483608081106125c3576125c3613a63565b6020020181815250505060206101006125dc91906139ad565b6125e6908261395b565b9050612586565b5060006125fd60206101006139ad565b90505b602061260f610400600461396e565b61261991906139ad565b8110156126ec5760005b6020612632610400600461396e565b61263c91906139ad565b8110156126e357600084826080811061265757612657613a63565b6020020151905060008561266b858561395b565b6080811061267b5761267b613a63565b60200201519050818160405160200161269e929190918252602082015260400190565b604051602081830303815290604052805190602001208684608081106126c6576126c6613a63565b6020020152506126dc9050600183901b8261395b565b9050612623565b5060011b612600565b5081516126f76132e1565b9250600061010061270b610400600461396e565b61271591906139ad565b856080015161272491906139ad565b905060005b856101000151518110156127eb57600080612745600285613947565b60000361277557849150876101000151838151811061276657612766613a63565b6020026020010151905061279a565b876101000151838151811061278c5761278c613a63565b602002602001015191508490505b60408051602081018490529081018290526060016040516020818303038152906040528051906020012094506002846127d391906139ad565b935050506001816127e4919061395b565b9050612729565b5090949350505050565b6000806101006128076104008061396e565b6128139061040061396e565b61281f9061040061396e565b61282a90600861396e565b61283491906139ad565b8311612840578261287c565b61010061284f6104008061396e565b61285b9061040061396e565b6128679061040061396e565b61287290600861396e565b61287c91906139ad565b9050600061288985612489565b61289390856139ad565b905060006101006128a66104008061396e565b6128b29061040061396e565b6128be9061040061396e565b6128c990600861396e565b6128d391906139ad565b82116128df578161291b565b6101006128ee6104008061396e565b6128fa9061040061396e565b6129069061040061396e565b61291190600861396e565b61291b91906139ad565b905061292b81604085901b6139ad565b9695505050505050565b6000610665825490565b6129498282611427565b610d7a5761295681612cb5565b612961836020612cc7565b604051602001612972929190613abc565b60408051601f198184030181529082905262461bcd60e51b825261072491600401613b31565b600c54600090156129c55760006010600d54901c90506129bd81600654600c54612e62565b9150506129cf565b506001600160f01b035b611c6581612f11565b6129e28282611427565b610d7a5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611420836001600160a01b038416612ff6565b612a628282611427565b15610d7a5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611420836001600160a01b038416613045565b6000818310612ae35781611420565b5090919050565b612af2613300565b600c6000612aff8561313f565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa612b9b57600080fd5b505050979650505050505050565b612bb1613300565b815181526020918201519181019190915290565b612bcd61331e565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa56020808301919091527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6040830152835160608301908152908401516080830152601c820190600c601f840153604060e0840153600160f084015360005b84811015612c715760408260d5856009600019fa612c6957600080fd5b600101612c4c565b505050606081015183526080015160209092019190915250565b6000826000018281548110612ca257612ca2613a63565b9060005260206000200154905092915050565b60606106656001600160a01b03831660145b60606000612cd683600261396e565b612ce190600261395b565b6001600160401b03811115612cf857612cf861341f565b6040519080825280601f01601f191660200182016040528015612d22576020820181803683370190505b509050600360fc1b81600081518110612d3d57612d3d613a63565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d6c57612d6c613a63565b60200101906001600160f81b031916908160001a9053506000612d9084600261396e565b612d9b90600161395b565b90505b6001811115612e13576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dcf57612dcf613a63565b1a60f81b828281518110612de557612de5613a63565b60200101906001600160f81b031916908160001a90535060049490941c93612e0c81613b64565b9050612d9e565b5083156114205760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610724565b6000808060001985870985870292508281108382030391505080600003612e9c57838281612e9257612e92613931565b0492505050611420565b808411612ea857600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b7f000000000000000000000000000000000000000000000000000000000000000015612f3a5750565b600d5460095460109190911c9060008184612f5660018361388c565b612f60908661396e565b612f6a919061395b565b612f7491906139ad565b9050612f8183600261396e565b811115612f9657612f9383600261396e565b90505b612fa16002846139ad565b811015612fb657612fb36002846139ad565b90505b6001600160f01b03811115612fcf57506001600160f01b035b601081901b600d556000612fe1612462565b905080600d54111561101957600d5550505050565b600081815260018301602052604081205461303d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610665565b506000610665565b6000818152600183016020526040812054801561312e57600061306960018361388c565b855490915060009061307d9060019061388c565b90508181146130e257600086600001828154811061309d5761309d613a63565b90600052602060002001549050808760000184815481106130c0576130c0613a63565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806130f3576130f3613b7b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610665565b6000915050610665565b5092915050565b613147613300565b6201000082101561318b57600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b6401000000008210156131cb57600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916613173565b680100000000000000008210156131e5576131738261327b565b600160801b821015613235576001600160401b038216604083901c6132098261327b565b6001600160c01b031916835261321e8161327b565b6001600160c01b0319166020840152506132769050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b6044820152606401610724565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b60006020828403121561334f57600080fd5b81356001600160e01b03198116811461142057600080fd5b80356001600160a01b038116811461327657600080fd5b80356001600160401b038116811461327657600080fd5b600080604083850312156133a857600080fd5b6133b183613367565b91506133bf6020840161337e565b90509250929050565b6000602082840312156133da57600080fd5b5035919050565b6000602082840312156133f357600080fd5b6114208261337e565b6000806040838503121561340f57600080fd5b823591506133bf60208401613367565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156134585761345861341f565b60405290565b60006080828403121561347057600080fd5b604051608081018181106001600160401b03821117156134925761349261341f565b806040525080915082358152602083013560208201526134b46040840161337e565b60408201526134c56060840161337e565b60608201525092915050565b600082601f8301126134e257600080fd5b6040516110008082018281106001600160401b03821117156135065761350661341f565b6040528301818582111561351957600080fd5b845b8281101561353357803582526020918201910161351b565b509195945050505050565b600082601f83011261354f57600080fd5b813560206001600160401b038083111561356b5761356b61341f565b8260051b604051601f19603f830116810181811084821117156135905761359061341f565b6040529384528581018301938381019250878511156135ae57600080fd5b83870191505b848210156135cd578135835291830191908301906135b4565b979650505050505050565b600061116082840312156135eb57600080fd5b6135f3613435565b905081358152602082013560208201526040820135604082015261361a836060840161345e565b606082015260e082013560808201526101008083013560a083015261012083013560c083015261364e8461014085016134d1565b60e08301526111408301356001600160401b0381111561366d57600080fd5b6136798582860161353e565b82840152505092915050565b600060c0828403121561369757600080fd5b60405160c081018181106001600160401b03821117156136b9576136b961341f565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e0838503121561371157600080fd5b82356001600160401b0381111561372757600080fd5b613733858286016135d8565b9250506133bf8460208501613685565b60008060e0838503121561375657600080fd5b6137608484613685565b9460c0939093013593505050565b6000806040838503121561378157600080fd5b82356001600160401b0381111561379757600080fd5b6137a3858286016135d8565b95602094909401359450505050565b600080604083850312156137c557600080fd5b50508035926020909101359150565b6000602082840312156137e657600080fd5b81356001600160401b038111156137fc57600080fd5b613808848285016135d8565b949350505050565b6000806040838503121561382357600080fd5b61382c83613367565b946020939093013593505050565b60008060006060848603121561384f57600080fd5b8335925061385f60208501613367565b915061386d60408501613367565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561066557610665613876565b6000602082840312156138b157600080fd5b5051919050565b600060c082840312156138ca57600080fd5b60405160c081018181106001600160401b03821117156138ec576138ec61341f565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b634e487b7160e01b600052601260045260246000fd5b60008261395657613956613931565b500690565b8082018082111561066557610665613876565b600081600019048311821515161561398857613988613876565b500290565b6001600160401b0382811682821603908082111561313857613138613876565b6000826139bc576139bc613931565b500490565b80516001600160801b038116811461327657600080fd5b6000604082840312156139ea57600080fd5b604051604081018181106001600160401b0382111715613a0c57613a0c61341f565b604052613a18836139c1565b8152613a26602084016139c1565b60208201529392505050565b60408101818360005b6002811015613a5a578151835260209283019290910190600101613a3b565b50505092915050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103613a8f57613a8f613876565b60010192915050565b60005b83811015613ab3578181015183820152602001613a9b565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613af4816017850160208801613a98565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613b25816028840160208801613a98565b01602801949350505050565b6020815260008251806020840152613b50816040850160208701613a98565b601f01601f19169190910160400192915050565b600081613b7357613b73613876565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220ccc6c7f6d4a0b6f384a55faeb5900dbafda6125c47c15ba3c2f8b14f046e640a64736f6c63430008100033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102695760003560e01c80637bba7d6111610151578063ae722e82116100c3578063b776a51211610087578063b776a512146105f9578063ca15c87314610602578063d547741f14610615578063dddc61a814610628578063e282e27b14610631578063ffbc9bd01461063857600080fd5b8063ae722e82146105a2578063b0628ee0146105b5578063b15d20da146105c8578063b4988fd0146105dd578063b4a93283146105f057600080fd5b806391d148541161011557806391d148541461053b5780639dc787a21461054e578063a217fddf14610557578063a82791821461055f578063ad08fdfb14610568578063adaa7a0f1461057b57600080fd5b80637bba7d61146104be5780637eca5688146104e557806382975fe7146104ee5780638c0bca06146105155780639010d07c1461052857600080fd5b80632f2ff15d116101ea57806339cd53ee116101ae57806339cd53ee146104405780633baebb751461046957806348f614411461047c5780635bdca85514610485578063704d3c961461049857806378203ab6146104ab57600080fd5b80632f2ff15d146103f557806331223ba714610408578063331f3b9c14610411578063343aad821461041a57806336568abe1461042d57600080fd5b806316a4be6f1161023157806316a4be6f146102de578063228cb73314610309578063248a9ca314610334578063296beba7146103665780632a02573b146103e257600080fd5b806301ffc9a71461026e578063047c13f5146102965780630c655e1f146102ab578063158ef93e146102be5780631600c624146102cb575b600080fd5b61028161027c36600461333d565b610640565b60405190151581526020015b60405180910390f35b6102a96102a4366004613395565b61066b565b005b6102a96102b93660046133c8565b610787565b6000546102819060ff1681565b6102a96102d93660046133c8565b6108e2565b600a546102f1906001600160401b031681565b6040516001600160401b03909116815260200161028d565b60045461031c906001600160a01b031681565b6040516001600160a01b03909116815260200161028d565b6103586103423660046133c8565b6000908152600160208190526040909120015490565b60405190815260200161028d565b6103796103743660046133c8565b610952565b60408051825180518252602080820151818401528184015183850152606080830151818501526080808401519085015260a0928301519284019290925284015160c08301529183015160e08201529101516001600160401b03166101008201526101200161028d565b6102a96103f03660046133e1565b610bcf565b6102a96104033660046133fc565b610cd5565b610358600b5481565b61035860065481565b60035461031c906001600160a01b031681565b6102a961043b3660046133fc565b610d00565b61031c61044e3660046133c8565b600e602052600090815260409020546001600160a01b031681565b6102a96104773660046136fe565b610d7e565b610358600d5481565b6102a96104933660046133c8565b611020565b6102a96104a63660046133c8565b61104d565b6103586104b9366004613743565b6110bb565b6102817f000000000000000000000000000000000000000000000000000000000000000081565b61035860085481565b6102817f000000000000000000000000000000000000000000000000000000000000000081565b61035861052336600461376e565b611208565b61031c6105363660046137b2565b611408565b6102816105493660046133fc565b611427565b61035860105481565b610358600081565b610358600c5481565b6102a96105763660046133c8565b611452565b6102817f000000000000000000000000000000000000000000000000000000000000000081565b6102a96105b03660046137d4565b61148c565b6102a96105c3366004613810565b611957565b610358600080516020613b9283398151915281565b6102a96105eb36600461383a565b611a17565b610358600f5481565b61035860075481565b6103586106103660046133c8565b611b43565b6102a96106233660046133fc565b611b5a565b61035860095481565b60006102f1565b610281611b80565b60006001600160e01b03198216635a05180f60e01b1480610665575061066582611c26565b92915050565b600061067860014361388c565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b03161561072d5760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b600080516020613b9283398151915261079f81611c5b565b600082116107f95760405162461bcd60e51b815260206004820152602160248201527f4e756d626572206f66207375627461736b732063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610724565b600360009054906101000a90046001600160a01b03166001600160a01b031663f06820546040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610870919061389f565b82106108dc5760405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207375627461736b73206d757374206265206c657373206044820152740e8d0c2dc40c4d8dec6d6e640e0cae440cae0dec6d605b1b6064820152608401610724565b50601055565b600080516020613b928339815191526108fa81611c5b565b61010082111561094c5760405162461bcd60e51b815260206004820152601d60248201527f746172676574206d696e6520626c6f636b206d757374203c3d203235360000006044820152606401610724565b50600655565b604080516101408101825260006080820181815260a0830182905260c0830182905260e08301829052610100830182905261012083018290528252602082018190529181018290526060810191909152816109e85760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610724565b6000828152600e60205260409020546001600160a01b031680610a4d5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610724565b600a546001600160401b0316606083015260035460408051635a325a9f60e11b815290516001600160a01b039092169163b464b53e9160048082019260c09290919082900301816000875af1158015610aaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace91906138b8565b80835260105460a09091015160405160009291610af8918790602001918252602082015260400190565b6040516020818303038152906040528051906020012060001c610b1b9190613947565b9050600081846000015160200151610b33919061395b565b90508043111580610b4e5750600654610b4c824361388c565b115b15610b5b57505050919050565b835160a001516040805160208082019390935283408183015281518082038301815260609091018252805192019190912090850152600b548451511115610ba7578351610ba790611c68565b600754610bb590600261396e565b600c541015610bc757600d5460208501525b505050919050565b600080516020613b92833981519152610be781611c5b565b6000826001600160401b031611610c405760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f006044820152606401610724565b610c4b60018361398d565b82166001600160401b0316600014610cb15760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b6064820152608401610724565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b60008281526001602081905260409091200154610cf181611c5b565b610cfb8383611cf8565b505050565b6001600160a01b0381163314610d705760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610724565b610d7a8282611d1a565b5050565b815160a082015114610dd25760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e67206469676573740000000000006044820152606401610724565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a0015103610e455760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e65000000000000006044820152606401610724565b600754610e5390600261396e565b600c5410610ea35760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e73000000006044820152606401610724565b6000610100610eb46104008261396e565b610ebe91906139ad565b610100610ecd6104008261396e565b610ed791906139ad565b8360600151610ee691906139ad565b610ef0919061396e565b6060840151909150610f029082611d3c565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610f51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7591906139d8565b90506000610100610f89610400600461396e565b610f9391906139ad565b8560800151610fa2919061395b565b90508082600001516001600160801b0316108015610fcd57508082602001516001600160801b031610155b6110195760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e74657874206469676573740000006044820152606401610724565b5050505050565b600080516020613b9283398151915261103881611c5b565b6008829055600b54600003610d7a5750600755565b600080516020613b9283398151915261106581611c5b565b600082116110b55760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f0000006044820152606401610724565b50600955565b6000806010548460a00151846040516020016110e1929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c6111049190613947565b90506000818560200151611118919061395b565b905080431161117c5760405162461bcd60e51b815260206004820152602a60248201527f4561726c696572207468616e206578706563746564207375627461736b20737460448201526930b93a10313637b1b59760b11b6064820152608401610724565b600654611189824361388c565b11156111ce5760405162461bcd60e51b8152602060048201526014602482015273135a5b9948191958591b1a5b9948195e18d9595960621b6044820152606401610724565b60a0850151604080516020810192909252824090820152606001604051602081830303815290604052805190602001209250505092915050565b604082015160009061125c5760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d70747900000000000000006044820152606401610724565b6000604051806080016040528085604001518152602001856020015181526020018481526020016112908660600151611f80565b90529050600061129f82611fe8565b905060006112b0610400604061396e565b6112be61040061010061396e565b6112c891906139ad565b6112d5610400600461396e565b6112e361040061010061396e565b6112ed91906139ad565b6112f791906139ad565b8660a001516113069190613947565b90506113106132e1565b611318613300565b6113278860e001518486612060565b9250905061010061133b610400600461396e565b61134591906139ad565b8860a00151611354919061396e565b611391826040516020016113689190613a32565b604051602081830303815290604052805190602001208a606001516121dd90919063ffffffff16565b61139b919061395b565b8860800151146113ed5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e000000000000006044820152606401610724565b6113fc8860a0015185846122e3565b98975050505050505050565b60008281526002602052604081206114209083612456565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020613b9283398151915261146a81611c5b565b600f8290556000611479612462565b905080600d541115610cfb57600d555050565b60408101516114d65760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610724565b6040808201516000908152600e60205220546001600160a01b03168061153e5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610724565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015611589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ad91906138b8565b90506115b881611c68565b60006115c88285604001516110bb565b90506115d48483610d7e565b600a5460608501516001600160401b03909116906115f190612489565b111561164e5760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b6064820152608401610724565b6116566132e1565b7f00000000000000000000000000000000000000000000000000000000000000001561168c57611685856124d3565b9050611693565b5060e08401515b7f00000000000000000000000000000000000000000000000000000000000000001561171c5760006116c58683612582565b90508360400151811461171a5760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f7400000000000000006044820152606401610724565b505b6117246132e1565b905060006117328684611208565b90506000611751856060015188606001516127f590919063ffffffff16565b9050604081600d5461176391906139ad565b901b8211156117b45760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c69747900000000006044820152606401610724565b60008281526005602052604090205460ff16156118135760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d6974746564000000000000006044820152606401610724565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c61010061184c6104008061396e565b6118589061040061396e565b61186390600861396e565b61186d91906139ad565b896080015161187c91906139ad565b6040808b015190516001600160e01b031960e085901b16815260048101929092526001600160a01b038a1660248301526044820152606401600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b5050506040808901518751600c5460808c015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38451600b55600c80546001919060009061194990849061395b565b909155505050505050505050565b6000818152600e60205260409020546001600160a01b031633146119bd5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e6572496400000000006044820152606401610724565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff1615611a765760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608401610724565b6000805460ff19166001178155611a9390611a8e3390565b611cf8565b611aab600080516020613b9283398151915233611cf8565b611ab7836000196139ad565b600d557f000000000000000000000000000000000000000000000000000000000000000015611ae757600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff191660201790556001601055565b600081815260026020526040812061066590612935565b60008281526001602081905260409091200154611b7681611c5b565b610cfb8383611d1a565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af1158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc91906138b8565b9050600b5481600001511180611c205750600754611c1b90600261396e565b600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061066557506301ffc9a760e01b6001600160e01b0319831614610665565b611c65813361293f565b50565b600b5481511015611cc95760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b6064820152608401610724565b600b548151118015611cdd57506000600b54115b15611c6557611cea612998565b6000600c5560085460075550565b611d0282826129d8565b6000828152600260205260409020610cfb9082612a43565b611d248282612a58565b6000828152600260205260409020610cfb9082612abf565b610100611d4b6104008061396e565b611d579061040061396e565b611d6290600861396e565b611d6c91906139ad565b8251611d789190613947565b15611dc55760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e65640000006044820152606401610724565b602082015182518291611dd79161395b565b1115611e1d5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b6044820152606401610724565b6000611e2883612489565b610100611e376104008061396e565b611e439061040061396e565b611e4f9061040061396e565b611e5a90600861396e565b611e6491906139ad565b611e6e919061396e565b90508083602001511115611ebc5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b6044820152606401610724565b6000611ec88383612ad4565b90508084602001511015611f175760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b6044820152606401610724565b83606001518460400151166001600160401b0316600014611f7a5760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f0000000000006044820152606401610724565b50505050565b60008160000151826020015183604001518460600151604051602001611fcb949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611ff0613300565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516106659385939092909160806001612aea565b612068613300565b6120706132e1565b600061207b84612ba9565b90506120a9816040612090610400600461396e565b61209a91906139ad565b6120a4908861396e565b612bc5565b60005b6080811015612136576120c0826001612bc5565b8681608081106120d2576120d2613a63565b60200201518251188382608081106120ec576120ec613a63565b602002015286600182016080811061210657612106613a63565b602002015182600160200201511883826001016080811061212957612129613a63565b60200201526002016120ac565b506121c981604061214a610400600461396e565b61215491906139ad565b600188612164610400604061396e565b61217261040061010061396e565b61217c91906139ad565b612189610400600461396e565b61219761040061010061396e565b6121a191906139ad565b6121ab91906139ad565b6121b5919061388c565b6121bf919061388c565b6120a4919061396e565b6121d281612ba9565b925050935093915050565b6000806101006121ef6104008261396e565b6121f991906139ad565b846020015161220891906139ad565b6122129084613947565b604085015160608601516020870151929350831617906101006122376104008261396e565b61224191906139ad565b612254906001600160401b03841661396e565b11156122a25760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e64000000006044820152606401610724565b6101006122b16104008261396e565b6122bb91906139ad565b6122ce906001600160401b03831661396e565b85516122da919061395b565b95945050505050565b60006122ed613300565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528451908501516123539183918891906000608081612aea565b905061235d61331e565b608060006020612370610400600461396e565b61237a91906139ad565b61238590602061396e565b61239090608061395b565b9050601c8301601f8401602085016060860160e0870160e1880160f089018c600c87538b51865260208c015160208701525b888a101561242a5760808a01995060ff8a1684538960081c835380518552602081015160208601526040810151604086015260608101516060860152608081019050888a0361241057600182535b60408660d58a6009600019fa61242557600080fd5b6123c2565b50505050505050508260016008811061244557612445613a63565b602002015198975050505050505050565b60006114208383612c8b565b6000600f54600003612475575060001990565b600f54612484906000196139ad565b905090565b606081015160009019815b6001600160401b038216156124c4576124ae60018361398d565b90911690806124bc81613a79565b915050612494565b600160ff9091161b9392505050565b6124db6132e1565b60408083015160c08401516080850151925161250b93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209182012060e0840180515190911883525190600090612541610400600461396e565b61254b91906139ad565b905081836020600184030281015b8082101561257857602080842093810180519094189201918252612559565b5050505050919050565b6000805b6020612595610400600461396e565b61259f91906139ad565b8110156125ed5761010060208202840120808483608081106125c3576125c3613a63565b6020020181815250505060206101006125dc91906139ad565b6125e6908261395b565b9050612586565b5060006125fd60206101006139ad565b90505b602061260f610400600461396e565b61261991906139ad565b8110156126ec5760005b6020612632610400600461396e565b61263c91906139ad565b8110156126e357600084826080811061265757612657613a63565b6020020151905060008561266b858561395b565b6080811061267b5761267b613a63565b60200201519050818160405160200161269e929190918252602082015260400190565b604051602081830303815290604052805190602001208684608081106126c6576126c6613a63565b6020020152506126dc9050600183901b8261395b565b9050612623565b5060011b612600565b5081516126f76132e1565b9250600061010061270b610400600461396e565b61271591906139ad565b856080015161272491906139ad565b905060005b856101000151518110156127eb57600080612745600285613947565b60000361277557849150876101000151838151811061276657612766613a63565b6020026020010151905061279a565b876101000151838151811061278c5761278c613a63565b602002602001015191508490505b60408051602081018490529081018290526060016040516020818303038152906040528051906020012094506002846127d391906139ad565b935050506001816127e4919061395b565b9050612729565b5090949350505050565b6000806101006128076104008061396e565b6128139061040061396e565b61281f9061040061396e565b61282a90600861396e565b61283491906139ad565b8311612840578261287c565b61010061284f6104008061396e565b61285b9061040061396e565b6128679061040061396e565b61287290600861396e565b61287c91906139ad565b9050600061288985612489565b61289390856139ad565b905060006101006128a66104008061396e565b6128b29061040061396e565b6128be9061040061396e565b6128c990600861396e565b6128d391906139ad565b82116128df578161291b565b6101006128ee6104008061396e565b6128fa9061040061396e565b6129069061040061396e565b61291190600861396e565b61291b91906139ad565b905061292b81604085901b6139ad565b9695505050505050565b6000610665825490565b6129498282611427565b610d7a5761295681612cb5565b612961836020612cc7565b604051602001612972929190613abc565b60408051601f198184030181529082905262461bcd60e51b825261072491600401613b31565b600c54600090156129c55760006010600d54901c90506129bd81600654600c54612e62565b9150506129cf565b506001600160f01b035b611c6581612f11565b6129e28282611427565b610d7a5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611420836001600160a01b038416612ff6565b612a628282611427565b15610d7a5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611420836001600160a01b038416613045565b6000818310612ae35781611420565b5090919050565b612af2613300565b600c6000612aff8561313f565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa612b9b57600080fd5b505050979650505050505050565b612bb1613300565b815181526020918201519181019190915290565b612bcd61331e565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa56020808301919091527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6040830152835160608301908152908401516080830152601c820190600c601f840153604060e0840153600160f084015360005b84811015612c715760408260d5856009600019fa612c6957600080fd5b600101612c4c565b505050606081015183526080015160209092019190915250565b6000826000018281548110612ca257612ca2613a63565b9060005260206000200154905092915050565b60606106656001600160a01b03831660145b60606000612cd683600261396e565b612ce190600261395b565b6001600160401b03811115612cf857612cf861341f565b6040519080825280601f01601f191660200182016040528015612d22576020820181803683370190505b509050600360fc1b81600081518110612d3d57612d3d613a63565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d6c57612d6c613a63565b60200101906001600160f81b031916908160001a9053506000612d9084600261396e565b612d9b90600161395b565b90505b6001811115612e13576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dcf57612dcf613a63565b1a60f81b828281518110612de557612de5613a63565b60200101906001600160f81b031916908160001a90535060049490941c93612e0c81613b64565b9050612d9e565b5083156114205760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610724565b6000808060001985870985870292508281108382030391505080600003612e9c57838281612e9257612e92613931565b0492505050611420565b808411612ea857600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b7f000000000000000000000000000000000000000000000000000000000000000015612f3a5750565b600d5460095460109190911c9060008184612f5660018361388c565b612f60908661396e565b612f6a919061395b565b612f7491906139ad565b9050612f8183600261396e565b811115612f9657612f9383600261396e565b90505b612fa16002846139ad565b811015612fb657612fb36002846139ad565b90505b6001600160f01b03811115612fcf57506001600160f01b035b601081901b600d556000612fe1612462565b905080600d54111561101957600d5550505050565b600081815260018301602052604081205461303d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610665565b506000610665565b6000818152600183016020526040812054801561312e57600061306960018361388c565b855490915060009061307d9060019061388c565b90508181146130e257600086600001828154811061309d5761309d613a63565b90600052602060002001549050808760000184815481106130c0576130c0613a63565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806130f3576130f3613b7b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610665565b6000915050610665565b5092915050565b613147613300565b6201000082101561318b57600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b6401000000008210156131cb57600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916613173565b680100000000000000008210156131e5576131738261327b565b600160801b821015613235576001600160401b038216604083901c6132098261327b565b6001600160c01b031916835261321e8161327b565b6001600160c01b0319166020840152506132769050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b6044820152606401610724565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b60006020828403121561334f57600080fd5b81356001600160e01b03198116811461142057600080fd5b80356001600160a01b038116811461327657600080fd5b80356001600160401b038116811461327657600080fd5b600080604083850312156133a857600080fd5b6133b183613367565b91506133bf6020840161337e565b90509250929050565b6000602082840312156133da57600080fd5b5035919050565b6000602082840312156133f357600080fd5b6114208261337e565b6000806040838503121561340f57600080fd5b823591506133bf60208401613367565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156134585761345861341f565b60405290565b60006080828403121561347057600080fd5b604051608081018181106001600160401b03821117156134925761349261341f565b806040525080915082358152602083013560208201526134b46040840161337e565b60408201526134c56060840161337e565b60608201525092915050565b600082601f8301126134e257600080fd5b6040516110008082018281106001600160401b03821117156135065761350661341f565b6040528301818582111561351957600080fd5b845b8281101561353357803582526020918201910161351b565b509195945050505050565b600082601f83011261354f57600080fd5b813560206001600160401b038083111561356b5761356b61341f565b8260051b604051601f19603f830116810181811084821117156135905761359061341f565b6040529384528581018301938381019250878511156135ae57600080fd5b83870191505b848210156135cd578135835291830191908301906135b4565b979650505050505050565b600061116082840312156135eb57600080fd5b6135f3613435565b905081358152602082013560208201526040820135604082015261361a836060840161345e565b606082015260e082013560808201526101008083013560a083015261012083013560c083015261364e8461014085016134d1565b60e08301526111408301356001600160401b0381111561366d57600080fd5b6136798582860161353e565b82840152505092915050565b600060c0828403121561369757600080fd5b60405160c081018181106001600160401b03821117156136b9576136b961341f565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e0838503121561371157600080fd5b82356001600160401b0381111561372757600080fd5b613733858286016135d8565b9250506133bf8460208501613685565b60008060e0838503121561375657600080fd5b6137608484613685565b9460c0939093013593505050565b6000806040838503121561378157600080fd5b82356001600160401b0381111561379757600080fd5b6137a3858286016135d8565b95602094909401359450505050565b600080604083850312156137c557600080fd5b50508035926020909101359150565b6000602082840312156137e657600080fd5b81356001600160401b038111156137fc57600080fd5b613808848285016135d8565b949350505050565b6000806040838503121561382357600080fd5b61382c83613367565b946020939093013593505050565b60008060006060848603121561384f57600080fd5b8335925061385f60208501613367565b915061386d60408501613367565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561066557610665613876565b6000602082840312156138b157600080fd5b5051919050565b600060c082840312156138ca57600080fd5b60405160c081018181106001600160401b03821117156138ec576138ec61341f565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b634e487b7160e01b600052601260045260246000fd5b60008261395657613956613931565b500690565b8082018082111561066557610665613876565b600081600019048311821515161561398857613988613876565b500290565b6001600160401b0382811682821603908082111561313857613138613876565b6000826139bc576139bc613931565b500490565b80516001600160801b038116811461327657600080fd5b6000604082840312156139ea57600080fd5b604051604081018181106001600160401b0382111715613a0c57613a0c61341f565b604052613a18836139c1565b8152613a26602084016139c1565b60208201529392505050565b60408101818360005b6002811015613a5a578151835260209283019290910190600101613a3b565b50505092915050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103613a8f57613a8f613876565b60010192915050565b60005b83811015613ab3578181015183820152602001613a9b565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613af4816017850160208801613a98565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613b25816028840160208801613a98565b01602801949350505050565b6020815260008251806020840152613b50816040850160208701613a98565b601f01601f19169190910160400192915050565b600081613b7357613b73613876565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220ccc6c7f6d4a0b6f384a55faeb5900dbafda6125c47c15ba3c2f8b14f046e640a64736f6c63430008100033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/storage-contracts-abis/PoraMineTest.json b/storage-contracts-abis/PoraMineTest.json index 4d84591..6fe6534 100644 --- a/storage-contracts-abis/PoraMineTest.json +++ b/storage-contracts-abis/PoraMineTest.json @@ -341,6 +341,79 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "computeWorkerContext", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "context", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "poraTarget", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "subtaskDigest", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "maxShards", + "type": "uint64" + } + ], + "internalType": "struct WorkerContext", + "name": "answer", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "currentSubmissions", @@ -468,6 +541,62 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "context", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "getSubtaskDigest", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -585,6 +714,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "nSubtasks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -660,6 +802,11 @@ "internalType": "struct MineLib.PoraAnswer", "name": "answer", "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "subtaskDigest", + "type": "bytes32" } ], "name": "pora", @@ -924,6 +1071,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nSubtasks_", + "type": "uint256" + } + ], + "name": "setNumSubtasks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1178,6 +1338,11 @@ "internalType": "struct MineLib.PoraAnswer", "name": "answer", "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "subtaskDigest", + "type": "bytes32" } ], "name": "testAll", @@ -1292,8 +1457,8 @@ "type": "function" } ], - "bytecode": "0x60e06040523480156200001157600080fd5b506040516200372b3803806200372b833981016040819052620000349162000052565b60016004909117818116156080526002161560a05260c0526200006c565b6000602082840312156200006557600080fd5b5051919050565b60805160a05160c051613673620000b86000396000818161045f01528181611292015261162e01526000818161048f0152610fc40152600081816105130152610f8701526136736000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c806382975fe711610151578063b15d20da116100c3578063ca15c87311610087578063ca15c873146105d6578063d547741f146105e9578063dddc61a8146105fc578063e1498cf914610605578063e282e27b14610618578063ffbc9bd01461061f57600080fd5b8063b15d20da1461056e578063b4988fd014610583578063b4a9328314610596578063b51e03971461059f578063b776a512146105cd57600080fd5b8063a827918211610115578063a8279182146104f2578063ad08fdfb146104fb578063adaa7a0f1461050e578063ae722e8214610535578063aed7522414610548578063b0628ee01461055b57600080fd5b806382975fe71461048a5780639010d07c146104b157806391d14854146104c4578063967e3cdd146104d7578063a217fddf146104ea57600080fd5b8063343aad82116101ea57806359e7b5be116101ae57806359e7b5be146104015780635bdca855146104215780636e9bb60b14610434578063704d3c96146104475780637bba7d611461045a5780637eca56881461048157600080fd5b8063343aad821461039657806336568abe146103a957806339cd53ee146103bc5780633baebb75146103e557806348f61441146103f857600080fd5b8063228cb7331161023c578063228cb73314610301578063248a9ca31461032c5780632a02573b1461035e5780632f2ff15d1461037157806331223ba714610384578063331f3b9c1461038d57600080fd5b806301ffc9a714610279578063047c13f5146102a1578063158ef93e146102b65780631600c624146102c357806316a4be6f146102d6575b600080fd5b61028c610287366004612df1565b610627565b60405190151581526020015b60405180910390f35b6102b46102af366004612e49565b610652565b005b60005461028c9060ff1681565b6102b46102d1366004612e7c565b61076e565b600a546102e9906001600160401b031681565b6040516001600160401b039091168152602001610298565b600454610314906001600160a01b031681565b6040516001600160a01b039091168152602001610298565b61035061033a366004612e7c565b6000908152600160208190526040909120015490565b604051908152602001610298565b6102b461036c366004612e95565b61078c565b6102b461037f366004612eb0565b610892565b610350600b5481565b61035060065481565b600354610314906001600160a01b031681565b6102b46103b7366004612eb0565b6108bd565b6103146103ca366004612e7c565b600e602052600090815260409020546001600160a01b031681565b6102b46103f3366004613150565b61093b565b610350600d5481565b61041461040f3660046131e8565b610bd2565b6040516102989190613224565b6102b461042f366004612e7c565b610be3565b610350610442366004613256565b610c10565b6102b4610455366004612e7c565b610c23565b61028c7f000000000000000000000000000000000000000000000000000000000000000081565b61035060085481565b61028c7f000000000000000000000000000000000000000000000000000000000000000081565b6103146104bf36600461329c565b610c91565b61028c6104d2366004612eb0565b610ca9565b6102b46104e53660046131e8565b610cd4565b610350600081565b610350600c5481565b6102b4610509366004612e7c565b610cff565b61028c7f000000000000000000000000000000000000000000000000000000000000000081565b6102b46105433660046131e8565b610d39565b6103506105563660046131e8565b6112c6565b6102b46105693660046132be565b6114c9565b61035060008051602061361e83398151915281565b6102b46105913660046132e8565b611589565b610350600f5481565b6102b46105ad366004612e7c565b6000908152600e6020526040902080546001600160a01b03191633179055565b61035060075481565b6103506105e4366004612e7c565b6116b0565b6102b46105f7366004612eb0565b6116c7565b61035060095481565b6102b4610613366004612e7c565b600d55565b60006102e9565b61028c6116ed565b60006001600160e01b03198216635a05180f60e01b148061064c575061064c82611788565b92915050565b600061065f60014361333a565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156107145760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b60008051602061361e833981519152610786816117bd565b50600655565b60008051602061361e8339815191526107a4816117bd565b6000826001600160401b0316116107fd5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f00604482015260640161070b565b61080860018361334d565b82166001600160401b031660001461086e5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b606482015260840161070b565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b600082815260016020819052604090912001546108ae816117bd565b6108b883836117ca565b505050565b6001600160a01b038116331461092d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161070b565b61093782826117ec565b5050565b815160a08201511461098f5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e6720646967657374000000000000604482015260640161070b565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a0015103610a025760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e6500000000000000604482015260640161070b565b600754600c5410610a555760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e7300000000604482015260640161070b565b6000610100610a666104008261336d565b610a7091906133a2565b610100610a7f6104008261336d565b610a8991906133a2565b8360600151610a9891906133a2565b610aa2919061336d565b6060840151909150610ab4908261180e565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2791906133cd565b90506000610100610b3b610400600461336d565b610b4591906133a2565b8560800151610b549190613427565b90508082600001516001600160801b0316108015610b7f57508082602001516001600160801b031610155b610bcb5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e7465787420646967657374000000604482015260640161070b565b5050505050565b610bda612d95565b61064c82611a52565b60008051602061361e833981519152610bfb816117bd565b6008829055600b546000036109375750600755565b6000610c1c8383611b01565b9392505050565b60008051602061361e833981519152610c3b816117bd565b60008211610c8b5760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f000000604482015260640161070b565b50600955565b6000828152600260205260408120610c1c9083611d74565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610cdf82611a52565b9050610ceb8282611b01565b50610cf4612d95565b90506108b8826112c6565b60008051602061361e833981519152610d17816117bd565b600f8290556000610d26611d80565b905080600d5411156108b857600d555050565b6040810151610d835760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b604482015260640161070b565b6040808201516000908152600e60205220546001600160a01b031680610deb5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f7420726567697374657265640000000000604482015260640161070b565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a919061343a565b9050600b5481600001511015610ec05760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b606482015260840161070b565b600b548151118015610ed457506000600b54115b15610ef957600754600c541015610eed57610eed611da7565b6000600c556008546007555b610f03838261093b565b600a5460608401516001600160401b0390911690610f2090611db9565b1115610f7d5760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b606482015260840161070b565b610f85612d95565b7f000000000000000000000000000000000000000000000000000000000000000015610fbb57610fb484611a52565b9050610fc2565b5060e08301515b7f00000000000000000000000000000000000000000000000000000000000000001561104b576000610ff48583611b01565b9050826040015181146110495760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f740000000000000000604482015260640161070b565b505b611053612d95565b90506000611060856112c6565b9050600061107f84606001518760600151611e0390919063ffffffff16565b9050604081600d5461109191906133a2565b901b8211156110e25760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c6974790000000000604482015260640161070b565b60008281526005602052604090205460ff16156111415760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d697474656400000000000000604482015260640161070b565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c61010061117a6104008061336d565b6111869061040061336d565b61119190600861336d565b61119b91906133a2565b88608001516111aa91906133a2565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b1580156111fc57600080fd5b505af1158015611210573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c805460019190600090611277908490613427565b9091555050600754600c54101561129057505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006112be576112be84611f43565b505050505050565b604081015160009061131a5760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d7074790000000000000000604482015260640161070b565b600060405180608001604052808460400151815260200184602001518152602001846000015181526020016113528560600151611f7c565b90529050600061136182611fe4565b90506000611372610400604061336d565b61138061040061010061336d565b61138a91906133a2565b611397610400600461336d565b6113a561040061010061336d565b6113af91906133a2565b6113b991906133a2565b8560a001516113c891906134b3565b90506113d2612d95565b6113da612db4565b6113e98760e00151848661205c565b925090506101006113fd610400600461336d565b61140791906133a2565b8760a00151611416919061336d565b6114538260405160200161142a91906134c7565b6040516020818303038152906040528051906020012089606001516121d990919063ffffffff16565b61145d9190613427565b8760800151146114af5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e00000000000000604482015260640161070b565b6114be8760a0015185846122df565b979650505050505050565b6000818152600e60205260409020546001600160a01b0316331461152f5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e657249640000000000604482015260640161070b565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156115e85760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b606482015260840161070b565b6000805460ff19166001178155611605906116003390565b6117ca565b61161d60008051602061361e833981519152336117ca565b611629836000196133a2565b600d557f00000000000000000000000000000000000000000000000000000000000000001561165957600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b600081815260026020526040812061064c90612452565b600082815260016020819052604090912001546116e3816117bd565b6108b883836117ec565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af1158015611745573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611769919061343a565b9050600b54816000015111806117825750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061064c57506301ffc9a760e01b6001600160e01b031983161461064c565b6117c7813361245c565b50565b6117d482826124b5565b60008281526002602052604090206108b89082612520565b6117f68282612535565b60008281526002602052604090206108b8908261259c565b61010061181d6104008061336d565b6118299061040061336d565b61183490600861336d565b61183e91906133a2565b825161184a91906134b3565b156118975760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e6564000000604482015260640161070b565b6020820151825182916118a991613427565b11156118ef5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b604482015260640161070b565b60006118fa83611db9565b6101006119096104008061336d565b6119159061040061336d565b6119219061040061336d565b61192c90600861336d565b61193691906133a2565b611940919061336d565b9050808360200151111561198e5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b604482015260640161070b565b600061199a83836125b1565b905080846020015110156119e95760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b604482015260640161070b565b83606001518460400151166001600160401b0316600014611a4c5760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f000000000000604482015260640161070b565b50505050565b611a5a612d95565b60408083015160c084015160808501519251611a8a93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209182012060e0840180515190911883525190600090611ac0610400600461336d565b611aca91906133a2565b905081836020600184030281015b80821015611af757602080842093810180519094189201918252611ad8565b5050505050919050565b6000805b6020611b14610400600461336d565b611b1e91906133a2565b811015611b6c576101006020820284012080848360808110611b4257611b426134ef565b602002018181525050506020610100611b5b91906133a2565b611b659082613427565b9050611b05565b506000611b7c60206101006133a2565b90505b6020611b8e610400600461336d565b611b9891906133a2565b811015611c6b5760005b6020611bb1610400600461336d565b611bbb91906133a2565b811015611c62576000848260808110611bd657611bd66134ef565b60200201519050600085611bea8585613427565b60808110611bfa57611bfa6134ef565b602002015190508181604051602001611c1d929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611c4557611c456134ef565b602002015250611c5b9050600183901b82613427565b9050611ba2565b5060011b611b7f565b508151611c76612d95565b92506000610100611c8a610400600461336d565b611c9491906133a2565b8560800151611ca391906133a2565b905060005b85610100015151811015611d6a57600080611cc46002856134b3565b600003611cf4578491508761010001518381518110611ce557611ce56134ef565b60200260200101519050611d19565b8761010001518381518110611d0b57611d0b6134ef565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611d5291906133a2565b93505050600181611d639190613427565b9050611ca8565b5090949350505050565b6000610c1c83836125c7565b6000600f54600003611d93575060001990565b600f54611da2906000196133a2565b905090565b611db76001600160f01b036125f1565b565b606081015160009019815b6001600160401b03821615611df457611dde60018361334d565b9091169080611dec81613505565b915050611dc4565b600160ff9091161b9392505050565b600080610100611e156104008061336d565b611e219061040061336d565b611e2d9061040061336d565b611e3890600861336d565b611e4291906133a2565b8311611e4e5782611e8a565b610100611e5d6104008061336d565b611e699061040061336d565b611e759061040061336d565b611e8090600861336d565b611e8a91906133a2565b90506000611e9785611db9565b611ea190856133a2565b90506000610100611eb46104008061336d565b611ec09061040061336d565b611ecc9061040061336d565b611ed790600861336d565b611ee191906133a2565b8211611eed5781611f29565b610100611efc6104008061336d565b611f089061040061336d565b611f149061040061336d565b611f1f90600861336d565b611f2991906133a2565b9050611f3981604085901b6133a2565b9695505050505050565b6000816020015143611f55919061333a565b905060006010600d54901c90506000611f7182846006546126ad565b9050611a4c816125f1565b60008160000151826020015183604001518460600151604051602001611fc7949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611fec612db4565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516040840151606085015161064c938593909290916080600161275c565b612064612db4565b61206c612d95565b60006120778461281b565b90506120a581604061208c610400600461336d565b61209691906133a2565b6120a0908861336d565b612837565b60005b6080811015612132576120bc826001612837565b8681608081106120ce576120ce6134ef565b60200201518251188382608081106120e8576120e86134ef565b6020020152866001820160808110612102576121026134ef565b6020020151826001602002015118838260010160808110612125576121256134ef565b60200201526002016120a8565b506121c5816040612146610400600461336d565b61215091906133a2565b600188612160610400604061336d565b61216e61040061010061336d565b61217891906133a2565b612185610400600461336d565b61219361040061010061336d565b61219d91906133a2565b6121a791906133a2565b6121b1919061333a565b6121bb919061333a565b6120a0919061336d565b6121ce8161281b565b925050935093915050565b6000806101006121eb6104008261336d565b6121f591906133a2565b846020015161220491906133a2565b61220e90846134b3565b604085015160608601516020870151929350831617906101006122336104008261336d565b61223d91906133a2565b612250906001600160401b03841661336d565b111561229e5760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e6400000000604482015260640161070b565b6101006122ad6104008261336d565b6122b791906133a2565b6122ca906001600160401b03831661336d565b85516122d69190613427565b95945050505050565b60006122e9612db4565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915284519085015161234f918391889190600060808161275c565b9050612359612dd2565b60806000602061236c610400600461336d565b61237691906133a2565b61238190602061336d565b61238c906080613427565b9050601c8301601f8401602085016060860160e0870160e1880160f089018c600c87538b51865260208c015160208701525b888a10156124265760808a01995060ff8a1684538960081c835380518552602081015160208601526040810151604086015260608101516060860152608081019050888a0361240c57600182535b60408660d58a6009600019fa61242157600080fd5b6123be565b505050505050505082600160088110612441576124416134ef565b602002015198975050505050505050565b600061064c825490565b6124668282610ca9565b61093757612473816128fd565b61247e83602061290f565b60405160200161248f929190613548565b60408051601f198184030181529082905262461bcd60e51b825261070b916004016135bd565b6124bf8282610ca9565b6109375760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610c1c836001600160a01b038416612aaa565b61253f8282610ca9565b156109375760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610c1c836001600160a01b038416612af9565b60008183106125c05781610c1c565b5090919050565b60008260000182815481106125de576125de6134ef565b9060005260206000200154905092915050565b600d5460095460109190911c906000818461260d60018361333a565b612617908661336d565b6126219190613427565b61262b91906133a2565b905061263883600261336d565b81111561264d5761264a83600261336d565b90505b6126586002846133a2565b81101561266d5761266a6002846133a2565b90505b6001600160f01b0381111561268657506001600160f01b035b601081901b600d556000612698611d80565b905080600d541115610bcb57600d5550505050565b60008080600019858709858702925082811083820303915050806000036126e7578382816126dd576126dd61338c565b0492505050610c1c565b8084116126f357600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b612764612db4565b600c600061277185612bf3565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61280d57600080fd5b505050979650505050505050565b612823612db4565b815181526020918201519181019190915290565b61283f612dd2565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa56020808301919091527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6040830152835160608301908152908401516080830152601c820190600c601f840153604060e0840153600160f084015360005b848110156128e35760408260d5856009600019fa6128db57600080fd5b6001016128be565b505050606081015183526080015160209092019190915250565b606061064c6001600160a01b03831660145b6060600061291e83600261336d565b612929906002613427565b6001600160401b0381111561294057612940612ed3565b6040519080825280601f01601f19166020018201604052801561296a576020820181803683370190505b509050600360fc1b81600081518110612985576129856134ef565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106129b4576129b46134ef565b60200101906001600160f81b031916908160001a90535060006129d884600261336d565b6129e3906001613427565b90505b6001811115612a5b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612a1757612a176134ef565b1a60f81b828281518110612a2d57612a2d6134ef565b60200101906001600160f81b031916908160001a90535060049490941c93612a54816135f0565b90506129e6565b508315610c1c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161070b565b6000818152600183016020526040812054612af15750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561064c565b50600061064c565b60008181526001830160205260408120548015612be2576000612b1d60018361333a565b8554909150600090612b319060019061333a565b9050818114612b96576000866000018281548110612b5157612b516134ef565b9060005260206000200154905080876000018481548110612b7457612b746134ef565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ba757612ba7613607565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061064c565b600091505061064c565b5092915050565b612bfb612db4565b62010000821015612c3f57600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612c7f57600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612c27565b68010000000000000000821015612c9957612c2782612d2f565b600160801b821015612ce9576001600160401b038216604083901c612cbd82612d2f565b6001600160c01b0319168352612cd281612d2f565b6001600160c01b031916602084015250612d2a9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b604482015260640161070b565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b600060208284031215612e0357600080fd5b81356001600160e01b031981168114610c1c57600080fd5b80356001600160a01b0381168114612d2a57600080fd5b80356001600160401b0381168114612d2a57600080fd5b60008060408385031215612e5c57600080fd5b612e6583612e1b565b9150612e7360208401612e32565b90509250929050565b600060208284031215612e8e57600080fd5b5035919050565b600060208284031215612ea757600080fd5b610c1c82612e32565b60008060408385031215612ec357600080fd5b82359150612e7360208401612e1b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612f0c57612f0c612ed3565b60405290565b60405160c081016001600160401b0381118282101715612f0c57612f0c612ed3565b600060808284031215612f4657600080fd5b604051608081018181106001600160401b0382111715612f6857612f68612ed3565b80604052508091508235815260208301356020820152612f8a60408401612e32565b6040820152612f9b60608401612e32565b60608201525092915050565b600082601f830112612fb857600080fd5b6040516110008082018281106001600160401b0382111715612fdc57612fdc612ed3565b60405283018185821115612fef57600080fd5b845b82811015613009578035825260209182019101612ff1565b509195945050505050565b600082601f83011261302557600080fd5b813560206001600160401b038083111561304157613041612ed3565b8260051b604051601f19603f8301168101818110848211171561306657613066612ed3565b60405293845285810183019383810192508785111561308457600080fd5b83870191505b848210156114be5781358352918301919083019061308a565b600061116082840312156130b657600080fd5b6130be612ee9565b90508135815260208201356020820152604082013560408201526130e58360608401612f34565b606082015260e082013560808201526101008083013560a083015261012083013560c0830152613119846101408501612fa7565b60e08301526111408301356001600160401b0381111561313857600080fd5b61314485828601613014565b82840152505092915050565b60008082840360e081121561316457600080fd5b83356001600160401b0381111561317a57600080fd5b613186868287016130a3565b93505060c0601f198201121561319b57600080fd5b506131a4612f12565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b6000602082840312156131fa57600080fd5b81356001600160401b0381111561321057600080fd5b61321c848285016130a3565b949350505050565b6110008101818360005b608081101561324d57815183526020928301929091019060010161322e565b50505092915050565b600080611020838503121561326a57600080fd5b82356001600160401b0381111561328057600080fd5b61328c858286016130a3565b925050612e738460208501612fa7565b600080604083850312156132af57600080fd5b50508035926020909101359150565b600080604083850312156132d157600080fd5b6132da83612e1b565b946020939093013593505050565b6000806000606084860312156132fd57600080fd5b8335925061330d60208501612e1b565b915061331b60408501612e1b565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561064c5761064c613324565b6001600160401b03828116828216039080821115612bec57612bec613324565b600081600019048311821515161561338757613387613324565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826133b1576133b161338c565b500490565b80516001600160801b0381168114612d2a57600080fd5b6000604082840312156133df57600080fd5b604051604081018181106001600160401b038211171561340157613401612ed3565b60405261340d836133b6565b815261341b602084016133b6565b60208201529392505050565b8082018082111561064c5761064c613324565b600060c0828403121561344c57600080fd5b60405160c081018181106001600160401b038211171561346e5761346e612ed3565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000826134c2576134c261338c565b500690565b60408101818360005b600281101561324d5781518352602092830192909101906001016134d0565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361351b5761351b613324565b60010192915050565b60005b8381101561353f578181015183820152602001613527565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613580816017850160208801613524565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516135b1816028840160208801613524565b01602801949350505050565b60208152600082518060208401526135dc816040850160208701613524565b601f01601f19169190910160400192915050565b6000816135ff576135ff613324565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220021cc427c610aecb46d049b2bbcc9cafe9f75718fbab76c75a48833c027d06e664736f6c63430008100033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102745760003560e01c806382975fe711610151578063b15d20da116100c3578063ca15c87311610087578063ca15c873146105d6578063d547741f146105e9578063dddc61a8146105fc578063e1498cf914610605578063e282e27b14610618578063ffbc9bd01461061f57600080fd5b8063b15d20da1461056e578063b4988fd014610583578063b4a9328314610596578063b51e03971461059f578063b776a512146105cd57600080fd5b8063a827918211610115578063a8279182146104f2578063ad08fdfb146104fb578063adaa7a0f1461050e578063ae722e8214610535578063aed7522414610548578063b0628ee01461055b57600080fd5b806382975fe71461048a5780639010d07c146104b157806391d14854146104c4578063967e3cdd146104d7578063a217fddf146104ea57600080fd5b8063343aad82116101ea57806359e7b5be116101ae57806359e7b5be146104015780635bdca855146104215780636e9bb60b14610434578063704d3c96146104475780637bba7d611461045a5780637eca56881461048157600080fd5b8063343aad821461039657806336568abe146103a957806339cd53ee146103bc5780633baebb75146103e557806348f61441146103f857600080fd5b8063228cb7331161023c578063228cb73314610301578063248a9ca31461032c5780632a02573b1461035e5780632f2ff15d1461037157806331223ba714610384578063331f3b9c1461038d57600080fd5b806301ffc9a714610279578063047c13f5146102a1578063158ef93e146102b65780631600c624146102c357806316a4be6f146102d6575b600080fd5b61028c610287366004612df1565b610627565b60405190151581526020015b60405180910390f35b6102b46102af366004612e49565b610652565b005b60005461028c9060ff1681565b6102b46102d1366004612e7c565b61076e565b600a546102e9906001600160401b031681565b6040516001600160401b039091168152602001610298565b600454610314906001600160a01b031681565b6040516001600160a01b039091168152602001610298565b61035061033a366004612e7c565b6000908152600160208190526040909120015490565b604051908152602001610298565b6102b461036c366004612e95565b61078c565b6102b461037f366004612eb0565b610892565b610350600b5481565b61035060065481565b600354610314906001600160a01b031681565b6102b46103b7366004612eb0565b6108bd565b6103146103ca366004612e7c565b600e602052600090815260409020546001600160a01b031681565b6102b46103f3366004613150565b61093b565b610350600d5481565b61041461040f3660046131e8565b610bd2565b6040516102989190613224565b6102b461042f366004612e7c565b610be3565b610350610442366004613256565b610c10565b6102b4610455366004612e7c565b610c23565b61028c7f000000000000000000000000000000000000000000000000000000000000000081565b61035060085481565b61028c7f000000000000000000000000000000000000000000000000000000000000000081565b6103146104bf36600461329c565b610c91565b61028c6104d2366004612eb0565b610ca9565b6102b46104e53660046131e8565b610cd4565b610350600081565b610350600c5481565b6102b4610509366004612e7c565b610cff565b61028c7f000000000000000000000000000000000000000000000000000000000000000081565b6102b46105433660046131e8565b610d39565b6103506105563660046131e8565b6112c6565b6102b46105693660046132be565b6114c9565b61035060008051602061361e83398151915281565b6102b46105913660046132e8565b611589565b610350600f5481565b6102b46105ad366004612e7c565b6000908152600e6020526040902080546001600160a01b03191633179055565b61035060075481565b6103506105e4366004612e7c565b6116b0565b6102b46105f7366004612eb0565b6116c7565b61035060095481565b6102b4610613366004612e7c565b600d55565b60006102e9565b61028c6116ed565b60006001600160e01b03198216635a05180f60e01b148061064c575061064c82611788565b92915050565b600061065f60014361333a565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156107145760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b60008051602061361e833981519152610786816117bd565b50600655565b60008051602061361e8339815191526107a4816117bd565b6000826001600160401b0316116107fd5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f00604482015260640161070b565b61080860018361334d565b82166001600160401b031660001461086e5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b606482015260840161070b565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b600082815260016020819052604090912001546108ae816117bd565b6108b883836117ca565b505050565b6001600160a01b038116331461092d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161070b565b61093782826117ec565b5050565b815160a08201511461098f5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e6720646967657374000000000000604482015260640161070b565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a0015103610a025760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e6500000000000000604482015260640161070b565b600754600c5410610a555760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e7300000000604482015260640161070b565b6000610100610a666104008261336d565b610a7091906133a2565b610100610a7f6104008261336d565b610a8991906133a2565b8360600151610a9891906133a2565b610aa2919061336d565b6060840151909150610ab4908261180e565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2791906133cd565b90506000610100610b3b610400600461336d565b610b4591906133a2565b8560800151610b549190613427565b90508082600001516001600160801b0316108015610b7f57508082602001516001600160801b031610155b610bcb5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e7465787420646967657374000000604482015260640161070b565b5050505050565b610bda612d95565b61064c82611a52565b60008051602061361e833981519152610bfb816117bd565b6008829055600b546000036109375750600755565b6000610c1c8383611b01565b9392505050565b60008051602061361e833981519152610c3b816117bd565b60008211610c8b5760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f000000604482015260640161070b565b50600955565b6000828152600260205260408120610c1c9083611d74565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610cdf82611a52565b9050610ceb8282611b01565b50610cf4612d95565b90506108b8826112c6565b60008051602061361e833981519152610d17816117bd565b600f8290556000610d26611d80565b905080600d5411156108b857600d555050565b6040810151610d835760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b604482015260640161070b565b6040808201516000908152600e60205220546001600160a01b031680610deb5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f7420726567697374657265640000000000604482015260640161070b565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a919061343a565b9050600b5481600001511015610ec05760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b606482015260840161070b565b600b548151118015610ed457506000600b54115b15610ef957600754600c541015610eed57610eed611da7565b6000600c556008546007555b610f03838261093b565b600a5460608401516001600160401b0390911690610f2090611db9565b1115610f7d5760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b606482015260840161070b565b610f85612d95565b7f000000000000000000000000000000000000000000000000000000000000000015610fbb57610fb484611a52565b9050610fc2565b5060e08301515b7f00000000000000000000000000000000000000000000000000000000000000001561104b576000610ff48583611b01565b9050826040015181146110495760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f740000000000000000604482015260640161070b565b505b611053612d95565b90506000611060856112c6565b9050600061107f84606001518760600151611e0390919063ffffffff16565b9050604081600d5461109191906133a2565b901b8211156110e25760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c6974790000000000604482015260640161070b565b60008281526005602052604090205460ff16156111415760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d697474656400000000000000604482015260640161070b565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c61010061117a6104008061336d565b6111869061040061336d565b61119190600861336d565b61119b91906133a2565b88608001516111aa91906133a2565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b1580156111fc57600080fd5b505af1158015611210573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c805460019190600090611277908490613427565b9091555050600754600c54101561129057505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006112be576112be84611f43565b505050505050565b604081015160009061131a5760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d7074790000000000000000604482015260640161070b565b600060405180608001604052808460400151815260200184602001518152602001846000015181526020016113528560600151611f7c565b90529050600061136182611fe4565b90506000611372610400604061336d565b61138061040061010061336d565b61138a91906133a2565b611397610400600461336d565b6113a561040061010061336d565b6113af91906133a2565b6113b991906133a2565b8560a001516113c891906134b3565b90506113d2612d95565b6113da612db4565b6113e98760e00151848661205c565b925090506101006113fd610400600461336d565b61140791906133a2565b8760a00151611416919061336d565b6114538260405160200161142a91906134c7565b6040516020818303038152906040528051906020012089606001516121d990919063ffffffff16565b61145d9190613427565b8760800151146114af5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e00000000000000604482015260640161070b565b6114be8760a0015185846122df565b979650505050505050565b6000818152600e60205260409020546001600160a01b0316331461152f5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e657249640000000000604482015260640161070b565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156115e85760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b606482015260840161070b565b6000805460ff19166001178155611605906116003390565b6117ca565b61161d60008051602061361e833981519152336117ca565b611629836000196133a2565b600d557f00000000000000000000000000000000000000000000000000000000000000001561165957600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b600081815260026020526040812061064c90612452565b600082815260016020819052604090912001546116e3816117bd565b6108b883836117ec565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af1158015611745573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611769919061343a565b9050600b54816000015111806117825750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061064c57506301ffc9a760e01b6001600160e01b031983161461064c565b6117c7813361245c565b50565b6117d482826124b5565b60008281526002602052604090206108b89082612520565b6117f68282612535565b60008281526002602052604090206108b8908261259c565b61010061181d6104008061336d565b6118299061040061336d565b61183490600861336d565b61183e91906133a2565b825161184a91906134b3565b156118975760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e6564000000604482015260640161070b565b6020820151825182916118a991613427565b11156118ef5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b604482015260640161070b565b60006118fa83611db9565b6101006119096104008061336d565b6119159061040061336d565b6119219061040061336d565b61192c90600861336d565b61193691906133a2565b611940919061336d565b9050808360200151111561198e5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b604482015260640161070b565b600061199a83836125b1565b905080846020015110156119e95760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b604482015260640161070b565b83606001518460400151166001600160401b0316600014611a4c5760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f000000000000604482015260640161070b565b50505050565b611a5a612d95565b60408083015160c084015160808501519251611a8a93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209182012060e0840180515190911883525190600090611ac0610400600461336d565b611aca91906133a2565b905081836020600184030281015b80821015611af757602080842093810180519094189201918252611ad8565b5050505050919050565b6000805b6020611b14610400600461336d565b611b1e91906133a2565b811015611b6c576101006020820284012080848360808110611b4257611b426134ef565b602002018181525050506020610100611b5b91906133a2565b611b659082613427565b9050611b05565b506000611b7c60206101006133a2565b90505b6020611b8e610400600461336d565b611b9891906133a2565b811015611c6b5760005b6020611bb1610400600461336d565b611bbb91906133a2565b811015611c62576000848260808110611bd657611bd66134ef565b60200201519050600085611bea8585613427565b60808110611bfa57611bfa6134ef565b602002015190508181604051602001611c1d929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611c4557611c456134ef565b602002015250611c5b9050600183901b82613427565b9050611ba2565b5060011b611b7f565b508151611c76612d95565b92506000610100611c8a610400600461336d565b611c9491906133a2565b8560800151611ca391906133a2565b905060005b85610100015151811015611d6a57600080611cc46002856134b3565b600003611cf4578491508761010001518381518110611ce557611ce56134ef565b60200260200101519050611d19565b8761010001518381518110611d0b57611d0b6134ef565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611d5291906133a2565b93505050600181611d639190613427565b9050611ca8565b5090949350505050565b6000610c1c83836125c7565b6000600f54600003611d93575060001990565b600f54611da2906000196133a2565b905090565b611db76001600160f01b036125f1565b565b606081015160009019815b6001600160401b03821615611df457611dde60018361334d565b9091169080611dec81613505565b915050611dc4565b600160ff9091161b9392505050565b600080610100611e156104008061336d565b611e219061040061336d565b611e2d9061040061336d565b611e3890600861336d565b611e4291906133a2565b8311611e4e5782611e8a565b610100611e5d6104008061336d565b611e699061040061336d565b611e759061040061336d565b611e8090600861336d565b611e8a91906133a2565b90506000611e9785611db9565b611ea190856133a2565b90506000610100611eb46104008061336d565b611ec09061040061336d565b611ecc9061040061336d565b611ed790600861336d565b611ee191906133a2565b8211611eed5781611f29565b610100611efc6104008061336d565b611f089061040061336d565b611f149061040061336d565b611f1f90600861336d565b611f2991906133a2565b9050611f3981604085901b6133a2565b9695505050505050565b6000816020015143611f55919061333a565b905060006010600d54901c90506000611f7182846006546126ad565b9050611a4c816125f1565b60008160000151826020015183604001518460600151604051602001611fc7949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611fec612db4565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516040840151606085015161064c938593909290916080600161275c565b612064612db4565b61206c612d95565b60006120778461281b565b90506120a581604061208c610400600461336d565b61209691906133a2565b6120a0908861336d565b612837565b60005b6080811015612132576120bc826001612837565b8681608081106120ce576120ce6134ef565b60200201518251188382608081106120e8576120e86134ef565b6020020152866001820160808110612102576121026134ef565b6020020151826001602002015118838260010160808110612125576121256134ef565b60200201526002016120a8565b506121c5816040612146610400600461336d565b61215091906133a2565b600188612160610400604061336d565b61216e61040061010061336d565b61217891906133a2565b612185610400600461336d565b61219361040061010061336d565b61219d91906133a2565b6121a791906133a2565b6121b1919061333a565b6121bb919061333a565b6120a0919061336d565b6121ce8161281b565b925050935093915050565b6000806101006121eb6104008261336d565b6121f591906133a2565b846020015161220491906133a2565b61220e90846134b3565b604085015160608601516020870151929350831617906101006122336104008261336d565b61223d91906133a2565b612250906001600160401b03841661336d565b111561229e5760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e6400000000604482015260640161070b565b6101006122ad6104008261336d565b6122b791906133a2565b6122ca906001600160401b03831661336d565b85516122d69190613427565b95945050505050565b60006122e9612db4565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915284519085015161234f918391889190600060808161275c565b9050612359612dd2565b60806000602061236c610400600461336d565b61237691906133a2565b61238190602061336d565b61238c906080613427565b9050601c8301601f8401602085016060860160e0870160e1880160f089018c600c87538b51865260208c015160208701525b888a10156124265760808a01995060ff8a1684538960081c835380518552602081015160208601526040810151604086015260608101516060860152608081019050888a0361240c57600182535b60408660d58a6009600019fa61242157600080fd5b6123be565b505050505050505082600160088110612441576124416134ef565b602002015198975050505050505050565b600061064c825490565b6124668282610ca9565b61093757612473816128fd565b61247e83602061290f565b60405160200161248f929190613548565b60408051601f198184030181529082905262461bcd60e51b825261070b916004016135bd565b6124bf8282610ca9565b6109375760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610c1c836001600160a01b038416612aaa565b61253f8282610ca9565b156109375760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610c1c836001600160a01b038416612af9565b60008183106125c05781610c1c565b5090919050565b60008260000182815481106125de576125de6134ef565b9060005260206000200154905092915050565b600d5460095460109190911c906000818461260d60018361333a565b612617908661336d565b6126219190613427565b61262b91906133a2565b905061263883600261336d565b81111561264d5761264a83600261336d565b90505b6126586002846133a2565b81101561266d5761266a6002846133a2565b90505b6001600160f01b0381111561268657506001600160f01b035b601081901b600d556000612698611d80565b905080600d541115610bcb57600d5550505050565b60008080600019858709858702925082811083820303915050806000036126e7578382816126dd576126dd61338c565b0492505050610c1c565b8084116126f357600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b612764612db4565b600c600061277185612bf3565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61280d57600080fd5b505050979650505050505050565b612823612db4565b815181526020918201519181019190915290565b61283f612dd2565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa56020808301919091527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6040830152835160608301908152908401516080830152601c820190600c601f840153604060e0840153600160f084015360005b848110156128e35760408260d5856009600019fa6128db57600080fd5b6001016128be565b505050606081015183526080015160209092019190915250565b606061064c6001600160a01b03831660145b6060600061291e83600261336d565b612929906002613427565b6001600160401b0381111561294057612940612ed3565b6040519080825280601f01601f19166020018201604052801561296a576020820181803683370190505b509050600360fc1b81600081518110612985576129856134ef565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106129b4576129b46134ef565b60200101906001600160f81b031916908160001a90535060006129d884600261336d565b6129e3906001613427565b90505b6001811115612a5b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612a1757612a176134ef565b1a60f81b828281518110612a2d57612a2d6134ef565b60200101906001600160f81b031916908160001a90535060049490941c93612a54816135f0565b90506129e6565b508315610c1c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161070b565b6000818152600183016020526040812054612af15750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561064c565b50600061064c565b60008181526001830160205260408120548015612be2576000612b1d60018361333a565b8554909150600090612b319060019061333a565b9050818114612b96576000866000018281548110612b5157612b516134ef565b9060005260206000200154905080876000018481548110612b7457612b746134ef565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ba757612ba7613607565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061064c565b600091505061064c565b5092915050565b612bfb612db4565b62010000821015612c3f57600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612c7f57600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612c27565b68010000000000000000821015612c9957612c2782612d2f565b600160801b821015612ce9576001600160401b038216604083901c612cbd82612d2f565b6001600160c01b0319168352612cd281612d2f565b6001600160c01b031916602084015250612d2a9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b604482015260640161070b565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b600060208284031215612e0357600080fd5b81356001600160e01b031981168114610c1c57600080fd5b80356001600160a01b0381168114612d2a57600080fd5b80356001600160401b0381168114612d2a57600080fd5b60008060408385031215612e5c57600080fd5b612e6583612e1b565b9150612e7360208401612e32565b90509250929050565b600060208284031215612e8e57600080fd5b5035919050565b600060208284031215612ea757600080fd5b610c1c82612e32565b60008060408385031215612ec357600080fd5b82359150612e7360208401612e1b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612f0c57612f0c612ed3565b60405290565b60405160c081016001600160401b0381118282101715612f0c57612f0c612ed3565b600060808284031215612f4657600080fd5b604051608081018181106001600160401b0382111715612f6857612f68612ed3565b80604052508091508235815260208301356020820152612f8a60408401612e32565b6040820152612f9b60608401612e32565b60608201525092915050565b600082601f830112612fb857600080fd5b6040516110008082018281106001600160401b0382111715612fdc57612fdc612ed3565b60405283018185821115612fef57600080fd5b845b82811015613009578035825260209182019101612ff1565b509195945050505050565b600082601f83011261302557600080fd5b813560206001600160401b038083111561304157613041612ed3565b8260051b604051601f19603f8301168101818110848211171561306657613066612ed3565b60405293845285810183019383810192508785111561308457600080fd5b83870191505b848210156114be5781358352918301919083019061308a565b600061116082840312156130b657600080fd5b6130be612ee9565b90508135815260208201356020820152604082013560408201526130e58360608401612f34565b606082015260e082013560808201526101008083013560a083015261012083013560c0830152613119846101408501612fa7565b60e08301526111408301356001600160401b0381111561313857600080fd5b61314485828601613014565b82840152505092915050565b60008082840360e081121561316457600080fd5b83356001600160401b0381111561317a57600080fd5b613186868287016130a3565b93505060c0601f198201121561319b57600080fd5b506131a4612f12565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b6000602082840312156131fa57600080fd5b81356001600160401b0381111561321057600080fd5b61321c848285016130a3565b949350505050565b6110008101818360005b608081101561324d57815183526020928301929091019060010161322e565b50505092915050565b600080611020838503121561326a57600080fd5b82356001600160401b0381111561328057600080fd5b61328c858286016130a3565b925050612e738460208501612fa7565b600080604083850312156132af57600080fd5b50508035926020909101359150565b600080604083850312156132d157600080fd5b6132da83612e1b565b946020939093013593505050565b6000806000606084860312156132fd57600080fd5b8335925061330d60208501612e1b565b915061331b60408501612e1b565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561064c5761064c613324565b6001600160401b03828116828216039080821115612bec57612bec613324565b600081600019048311821515161561338757613387613324565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826133b1576133b161338c565b500490565b80516001600160801b0381168114612d2a57600080fd5b6000604082840312156133df57600080fd5b604051604081018181106001600160401b038211171561340157613401612ed3565b60405261340d836133b6565b815261341b602084016133b6565b60208201529392505050565b8082018082111561064c5761064c613324565b600060c0828403121561344c57600080fd5b60405160c081018181106001600160401b038211171561346e5761346e612ed3565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000826134c2576134c261338c565b500690565b60408101818360005b600281101561324d5781518352602092830192909101906001016134d0565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361351b5761351b613324565b60010192915050565b60005b8381101561353f578181015183820152602001613527565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613580816017850160208801613524565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516135b1816028840160208801613524565b01602801949350505050565b60208152600082518060208401526135dc816040850160208701613524565b601f01601f19169190910160400192915050565b6000816135ff576135ff613324565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220021cc427c610aecb46d049b2bbcc9cafe9f75718fbab76c75a48833c027d06e664736f6c63430008100033", + "bytecode": "0x60e06040523480156200001157600080fd5b5060405162003e1538038062003e15833981016040819052620000349162000052565b60016004909117818116156080526002161560a05260c0526200006c565b6000602082840312156200006557600080fd5b5051919050565b60805160a05160c051613d5d620000b86000396000818161052d01528181611bc9015261301a01526000818161055d01526117700152600081816105ea01526117330152613d5d6000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c80637eca568811610167578063b0628ee0116100ce578063ca15c87311610087578063ca15c873146106ad578063d547741f146106c0578063dddc61a8146106d3578063e1498cf9146106dc578063e282e27b146106ef578063ffbc9bd0146106f657600080fd5b8063b0628ee014610632578063b15d20da14610645578063b4988fd01461065a578063b4a932831461066d578063b51e039714610676578063b776a512146106a457600080fd5b8063a217fddf11610120578063a217fddf146105c1578063a8279182146105c9578063ad08fdfb146105d2578063adaa7a0f146105e5578063ae722e821461060c578063af31f9141461061f57600080fd5b80637eca56881461054f57806382975fe7146105585780638c0bca061461057f5780639010d07c1461059257806391d14854146105a55780639dc787a2146105b857600080fd5b8063331f3b9c1161020b57806359e7b5be116101c457806359e7b5be146104bc5780635bdca855146104dc5780636e9bb60b146104ef578063704d3c961461050257806378203ab6146105155780637bba7d611461052857600080fd5b8063331f3b9c14610448578063343aad821461045157806336568abe1461046457806339cd53ee146104775780633baebb75146104a057806348f61441146104b357600080fd5b8063228cb7331161025d578063228cb73314610340578063248a9ca31461036b578063296beba71461039d5780632a02573b146104195780632f2ff15d1461042c57806331223ba71461043f57600080fd5b806301ffc9a7146102a5578063047c13f5146102cd5780630c655e1f146102e2578063158ef93e146102f55780631600c6241461030257806316a4be6f14610315575b600080fd5b6102b86102b3366004613444565b6106fe565b60405190151581526020015b60405180910390f35b6102e06102db36600461349c565b610729565b005b6102e06102f03660046134cf565b610845565b6000546102b89060ff1681565b6102e06103103660046134cf565b6109a0565b600a54610328906001600160401b031681565b6040516001600160401b0390911681526020016102c4565b600454610353906001600160a01b031681565b6040516001600160a01b0390911681526020016102c4565b61038f6103793660046134cf565b6000908152600160208190526040909120015490565b6040519081526020016102c4565b6103b06103ab3660046134cf565b610a10565b60408051825180518252602080820151818401528184015183850152606080830151818501526080808401519085015260a0928301519284019290925284015160c08301529183015160e08201529101516001600160401b0316610100820152610120016102c4565b6102e06104273660046134e8565b610c8d565b6102e061043a366004613503565b610d93565b61038f600b5481565b61038f60065481565b600354610353906001600160a01b031681565b6102e0610472366004613503565b610dbe565b6103536104853660046134cf565b600e602052600090815260409020546001600160a01b031681565b6102e06104ae366004613805565b610e3c565b61038f600d5481565b6104cf6104ca36600461384a565b6110de565b6040516102c49190613886565b6102e06104ea3660046134cf565b6110ef565b61038f6104fd3660046138b8565b61111c565b6102e06105103660046134cf565b61112f565b61038f6105233660046138fe565b61119d565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b61038f60085481565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b61038f61058d366004613929565b6112ea565b6103536105a036600461396d565b6114ea565b6102b86105b3366004613503565b611502565b61038f60105481565b61038f600081565b61038f600c5481565b6102e06105e03660046134cf565b61152d565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b6102e061061a36600461384a565b611567565b6102e061062d366004613929565b611a32565b6102e061064036600461398f565b611a64565b61038f600080516020613d0883398151915281565b6102e06106683660046139b9565b611b24565b61038f600f5481565b6102e06106843660046134cf565b6000908152600e6020526040902080546001600160a01b03191633179055565b61038f60075481565b61038f6106bb3660046134cf565b611c50565b6102e06106ce366004613503565b611c67565b61038f60095481565b6102e06106ea3660046134cf565b600d55565b6000610328565b6102b8611c8d565b60006001600160e01b03198216635a05180f60e01b1480610723575061072382611d33565b92915050565b6000610736600143613a0b565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156107eb5760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b600080516020613d0883398151915261085d81611d68565b600082116108b75760405162461bcd60e51b815260206004820152602160248201527f4e756d626572206f66207375627461736b732063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107e2565b600360009054906101000a90046001600160a01b03166001600160a01b031663f06820546040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190613a1e565b821061099a5760405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207375627461736b73206d757374206265206c657373206044820152740e8d0c2dc40c4d8dec6d6e640e0cae440cae0dec6d605b1b60648201526084016107e2565b50601055565b600080516020613d088339815191526109b881611d68565b610100821115610a0a5760405162461bcd60e51b815260206004820152601d60248201527f746172676574206d696e6520626c6f636b206d757374203c3d2032353600000060448201526064016107e2565b50600655565b604080516101408101825260006080820181815260a0830182905260c0830182905260e0830182905261010083018290526101208301829052825260208201819052918101829052606081019190915281610aa65760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016107e2565b6000828152600e60205260409020546001600160a01b031680610b0b5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016107e2565b600a546001600160401b0316606083015260035460408051635a325a9f60e11b815290516001600160a01b039092169163b464b53e9160048082019260c09290919082900301816000875af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c9190613a37565b80835260105460a09091015160405160009291610bb6918790602001918252602082015260400190565b6040516020818303038152906040528051906020012060001c610bd99190613ac6565b9050600081846000015160200151610bf19190613ada565b90508043111580610c0c5750600654610c0a8243613a0b565b115b15610c1957505050919050565b835160a001516040805160208082019390935283408183015281518082038301815260609091018252805192019190912090850152600b548451511115610c65578351610c6590611d75565b600754610c73906002613aed565b600c541015610c8557600d5460208501525b505050919050565b600080516020613d08833981519152610ca581611d68565b6000826001600160401b031611610cfe5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f0060448201526064016107e2565b610d09600183613b0c565b82166001600160401b0316600014610d6f5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b60648201526084016107e2565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b60008281526001602081905260409091200154610daf81611d68565b610db98383611e05565b505050565b6001600160a01b0381163314610e2e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107e2565b610e388282611e27565b5050565b815160a082015114610e905760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e672064696765737400000000000060448201526064016107e2565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a0015103610f035760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e650000000000000060448201526064016107e2565b600754610f11906002613aed565b600c5410610f615760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e730000000060448201526064016107e2565b6000610100610f7261040082613aed565b610f7c9190613b2c565b610100610f8b61040082613aed565b610f959190613b2c565b8360600151610fa49190613b2c565b610fae9190613aed565b6060840151909150610fc09082611e49565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110339190613b57565b905060006101006110476104006004613aed565b6110519190613b2c565b85608001516110609190613ada565b90508082600001516001600160801b031610801561108b57508082602001516001600160801b031610155b6110d75760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e746578742064696765737400000060448201526064016107e2565b5050505050565b6110e66133e8565b61072382612087565b600080516020613d0883398151915261110781611d68565b6008829055600b54600003610e385750600755565b60006111288383612136565b9392505050565b600080516020613d0883398151915261114781611d68565b600082116111975760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f00000060448201526064016107e2565b50600955565b6000806010548460a00151846040516020016111c3929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c6111e69190613ac6565b905060008185602001516111fa9190613ada565b905080431161125e5760405162461bcd60e51b815260206004820152602a60248201527f4561726c696572207468616e206578706563746564207375627461736b20737460448201526930b93a10313637b1b59760b11b60648201526084016107e2565b60065461126b8243613a0b565b11156112b05760405162461bcd60e51b8152602060048201526014602482015273135a5b9948191958591b1a5b9948195e18d9595960621b60448201526064016107e2565b60a0850151604080516020810192909252824090820152606001604051602081830303815290604052805190602001209250505092915050565b604082015160009061133e5760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d707479000000000000000060448201526064016107e2565b60006040518060800160405280856040015181526020018560200151815260200184815260200161137286606001516123a9565b90529050600061138182612411565b905060006113926104006040613aed565b6113a0610400610100613aed565b6113aa9190613b2c565b6113b76104006004613aed565b6113c5610400610100613aed565b6113cf9190613b2c565b6113d99190613b2c565b8660a001516113e89190613ac6565b90506113f26133e8565b6113fa613407565b6114098860e001518486612489565b9250905061010061141d6104006004613aed565b6114279190613b2c565b8860a001516114369190613aed565b6114738260405160200161144a9190613bb1565b604051602081830303815290604052805190602001208a6060015161260690919063ffffffff16565b61147d9190613ada565b8860800151146114cf5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e0000000000000060448201526064016107e2565b6114de8860a00151858461270c565b98975050505050505050565b6000828152600260205260408120611128908361287f565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020613d0883398151915261154581611d68565b600f829055600061155461288b565b905080600d541115610db957600d555050565b60408101516115b15760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016107e2565b6040808201516000908152600e60205220546001600160a01b0316806116195760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016107e2565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015611664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116889190613a37565b905061169381611d75565b60006116a382856040015161119d565b90506116af8483610e3c565b600a5460608501516001600160401b03909116906116cc906128b2565b11156117295760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b60648201526084016107e2565b6117316133e8565b7f0000000000000000000000000000000000000000000000000000000000000000156117675761176085612087565b905061176e565b5060e08401515b7f0000000000000000000000000000000000000000000000000000000000000000156117f75760006117a08683612136565b9050836040015181146117f55760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f74000000000000000060448201526064016107e2565b505b6117ff6133e8565b9050600061180d86846112ea565b9050600061182c856060015188606001516128fc90919063ffffffff16565b9050604081600d5461183e9190613b2c565b901b82111561188f5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c697479000000000060448201526064016107e2565b60008281526005602052604090205460ff16156118ee5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d69747465640000000000000060448201526064016107e2565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c61010061192761040080613aed565b61193390610400613aed565b61193e906008613aed565b6119489190613b2c565b89608001516119579190613b2c565b6040808b015190516001600160e01b031960e085901b16815260048101929092526001600160a01b038a1660248301526044820152606401600060405180830381600087803b1580156119a957600080fd5b505af11580156119bd573d6000803e3d6000fd5b5050506040808901518751600c5460808c015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38451600b55600c805460019190600090611a24908490613ada565b909155505050505050505050565b6000611a3d83612087565b9050611a498382612136565b50611a526133e8565b9050611a5e83836112ea565b50505050565b6000818152600e60205260409020546001600160a01b03163314611aca5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e65724964000000000060448201526064016107e2565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff1615611b835760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016107e2565b6000805460ff19166001178155611ba090611b9b3390565b611e05565b611bb8600080516020613d0883398151915233611e05565b611bc483600019613b2c565b600d557f000000000000000000000000000000000000000000000000000000000000000015611bf457600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff191660201790556001601055565b600081815260026020526040812061072390612a3c565b60008281526001602081905260409091200154611c8381611d68565b610db98383611e27565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af1158015611ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d099190613a37565b9050600b5481600001511180611d2d5750600754611d28906002613aed565b600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061072357506301ffc9a760e01b6001600160e01b0319831614610723565b611d728133612a46565b50565b600b5481511015611dd65760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b60648201526084016107e2565b600b548151118015611dea57506000600b54115b15611d7257611df7612a9f565b6000600c5560085460075550565b611e0f8282612adf565b6000828152600260205260409020610db99082612b4a565b611e318282612b5f565b6000828152600260205260409020610db99082612bc6565b610100611e5861040080613aed565b611e6490610400613aed565b611e6f906008613aed565b611e799190613b2c565b8251611e859190613ac6565b15611ed25760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e656400000060448201526064016107e2565b602082015182518291611ee491613ada565b1115611f2a5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b60448201526064016107e2565b6000611f35836128b2565b610100611f4461040080613aed565b611f5090610400613aed565b611f5c90610400613aed565b611f67906008613aed565b611f719190613b2c565b611f7b9190613aed565b90508083602001511115611fc95760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b60448201526064016107e2565b6000611fd58383612bdb565b905080846020015110156120245760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b60448201526064016107e2565b83606001518460400151166001600160401b0316600014611a5e5760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f00000000000060448201526064016107e2565b61208f6133e8565b60408083015160c0840151608085015192516120bf93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209182012060e08401805151909118835251906000906120f56104006004613aed565b6120ff9190613b2c565b905081836020600184030281015b8082101561212c5760208084209381018051909418920191825261210d565b5050505050919050565b6000805b60206121496104006004613aed565b6121539190613b2c565b8110156121a157610100602082028401208084836080811061217757612177613bd9565b6020020181815250505060206101006121909190613b2c565b61219a9082613ada565b905061213a565b5060006121b16020610100613b2c565b90505b60206121c36104006004613aed565b6121cd9190613b2c565b8110156122a05760005b60206121e66104006004613aed565b6121f09190613b2c565b81101561229757600084826080811061220b5761220b613bd9565b6020020151905060008561221f8585613ada565b6080811061222f5761222f613bd9565b602002015190508181604051602001612252929190918252602082015260400190565b6040516020818303038152906040528051906020012086846080811061227a5761227a613bd9565b6020020152506122909050600183901b82613ada565b90506121d7565b5060011b6121b4565b5081516122ab6133e8565b925060006101006122bf6104006004613aed565b6122c99190613b2c565b85608001516122d89190613b2c565b905060005b8561010001515181101561239f576000806122f9600285613ac6565b60000361232957849150876101000151838151811061231a5761231a613bd9565b6020026020010151905061234e565b876101000151838151811061234057612340613bd9565b602002602001015191508490505b60408051602081018490529081018290526060016040516020818303038152906040528051906020012094506002846123879190613b2c565b935050506001816123989190613ada565b90506122dd565b5090949350505050565b600081600001518260200151836040015184606001516040516020016123f4949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b612419613407565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516107239385939092909160806001612bf1565b612491613407565b6124996133e8565b60006124a484612cb0565b90506124d28160406124b96104006004613aed565b6124c39190613b2c565b6124cd9088613aed565b612ccc565b60005b608081101561255f576124e9826001612ccc565b8681608081106124fb576124fb613bd9565b602002015182511883826080811061251557612515613bd9565b602002015286600182016080811061252f5761252f613bd9565b602002015182600160200201511883826001016080811061255257612552613bd9565b60200201526002016124d5565b506125f28160406125736104006004613aed565b61257d9190613b2c565b60018861258d6104006040613aed565b61259b610400610100613aed565b6125a59190613b2c565b6125b26104006004613aed565b6125c0610400610100613aed565b6125ca9190613b2c565b6125d49190613b2c565b6125de9190613a0b565b6125e89190613a0b565b6124cd9190613aed565b6125fb81612cb0565b925050935093915050565b60008061010061261861040082613aed565b6126229190613b2c565b84602001516126319190613b2c565b61263b9084613ac6565b6040850151606086015160208701519293508316179061010061266061040082613aed565b61266a9190613b2c565b61267d906001600160401b038416613aed565b11156126cb5760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e640000000060448201526064016107e2565b6101006126da61040082613aed565b6126e49190613b2c565b6126f7906001600160401b038316613aed565b85516127039190613ada565b95945050505050565b6000612716613407565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915284519085015161277c9183918891906000608081612bf1565b9050612786613425565b6080600060206127996104006004613aed565b6127a39190613b2c565b6127ae906020613aed565b6127b9906080613ada565b9050601c8301601f8401602085016060860160e0870160e1880160f089018c600c87538b51865260208c015160208701525b888a10156128535760808a01995060ff8a1684538960081c835380518552602081015160208601526040810151604086015260608101516060860152608081019050888a0361283957600182535b60408660d58a6009600019fa61284e57600080fd5b6127eb565b50505050505050508260016008811061286e5761286e613bd9565b602002015198975050505050505050565b60006111288383612d92565b6000600f5460000361289e575060001990565b600f546128ad90600019613b2c565b905090565b606081015160009019815b6001600160401b038216156128ed576128d7600183613b0c565b90911690806128e581613bef565b9150506128bd565b600160ff9091161b9392505050565b60008061010061290e61040080613aed565b61291a90610400613aed565b61292690610400613aed565b612931906008613aed565b61293b9190613b2c565b83116129475782612983565b61010061295661040080613aed565b61296290610400613aed565b61296e90610400613aed565b612979906008613aed565b6129839190613b2c565b90506000612990856128b2565b61299a9085613b2c565b905060006101006129ad61040080613aed565b6129b990610400613aed565b6129c590610400613aed565b6129d0906008613aed565b6129da9190613b2c565b82116129e65781612a22565b6101006129f561040080613aed565b612a0190610400613aed565b612a0d90610400613aed565b612a18906008613aed565b612a229190613b2c565b9050612a3281604085901b613b2c565b9695505050505050565b6000610723825490565b612a508282611502565b610e3857612a5d81612dbc565b612a68836020612dce565b604051602001612a79929190613c32565b60408051601f198184030181529082905262461bcd60e51b82526107e291600401613ca7565b600c5460009015612acc5760006010600d54901c9050612ac481600654600c54612f69565b915050612ad6565b506001600160f01b035b611d7281613018565b612ae98282611502565b610e385760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611128836001600160a01b0384166130fd565b612b698282611502565b15610e385760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611128836001600160a01b03841661314c565b6000818310612bea5781611128565b5090919050565b612bf9613407565b600c6000612c0685613246565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa612ca257600080fd5b505050979650505050505050565b612cb8613407565b815181526020918201519181019190915290565b612cd4613425565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa56020808301919091527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6040830152835160608301908152908401516080830152601c820190600c601f840153604060e0840153600160f084015360005b84811015612d785760408260d5856009600019fa612d7057600080fd5b600101612d53565b505050606081015183526080015160209092019190915250565b6000826000018281548110612da957612da9613bd9565b9060005260206000200154905092915050565b60606107236001600160a01b03831660145b60606000612ddd836002613aed565b612de8906002613ada565b6001600160401b03811115612dff57612dff613526565b6040519080825280601f01601f191660200182016040528015612e29576020820181803683370190505b509050600360fc1b81600081518110612e4457612e44613bd9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612e7357612e73613bd9565b60200101906001600160f81b031916908160001a9053506000612e97846002613aed565b612ea2906001613ada565b90505b6001811115612f1a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612ed657612ed6613bd9565b1a60f81b828281518110612eec57612eec613bd9565b60200101906001600160f81b031916908160001a90535060049490941c93612f1381613cda565b9050612ea5565b5083156111285760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e2565b6000808060001985870985870292508281108382030391505080600003612fa357838281612f9957612f99613ab0565b0492505050611128565b808411612faf57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b7f0000000000000000000000000000000000000000000000000000000000000000156130415750565b600d5460095460109190911c906000818461305d600183613a0b565b6130679086613aed565b6130719190613ada565b61307b9190613b2c565b9050613088836002613aed565b81111561309d5761309a836002613aed565b90505b6130a8600284613b2c565b8110156130bd576130ba600284613b2c565b90505b6001600160f01b038111156130d657506001600160f01b035b601081901b600d5560006130e861288b565b905080600d5411156110d757600d5550505050565b600081815260018301602052604081205461314457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610723565b506000610723565b60008181526001830160205260408120548015613235576000613170600183613a0b565b855490915060009061318490600190613a0b565b90508181146131e95760008660000182815481106131a4576131a4613bd9565b90600052602060002001549050808760000184815481106131c7576131c7613bd9565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806131fa576131fa613cf1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610723565b6000915050610723565b5092915050565b61324e613407565b6201000082101561329257600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b6401000000008210156132d257600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b03191661327a565b680100000000000000008210156132ec5761327a82613382565b600160801b82101561333c576001600160401b038216604083901c61331082613382565b6001600160c01b031916835261332581613382565b6001600160c01b03191660208401525061337d9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b60448201526064016107e2565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b60006020828403121561345657600080fd5b81356001600160e01b03198116811461112857600080fd5b80356001600160a01b038116811461337d57600080fd5b80356001600160401b038116811461337d57600080fd5b600080604083850312156134af57600080fd5b6134b88361346e565b91506134c660208401613485565b90509250929050565b6000602082840312156134e157600080fd5b5035919050565b6000602082840312156134fa57600080fd5b61112882613485565b6000806040838503121561351657600080fd5b823591506134c66020840161346e565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561355f5761355f613526565b60405290565b60006080828403121561357757600080fd5b604051608081018181106001600160401b038211171561359957613599613526565b806040525080915082358152602083013560208201526135bb60408401613485565b60408201526135cc60608401613485565b60608201525092915050565b600082601f8301126135e957600080fd5b6040516110008082018281106001600160401b038211171561360d5761360d613526565b6040528301818582111561362057600080fd5b845b8281101561363a578035825260209182019101613622565b509195945050505050565b600082601f83011261365657600080fd5b813560206001600160401b038083111561367257613672613526565b8260051b604051601f19603f8301168101818110848211171561369757613697613526565b6040529384528581018301938381019250878511156136b557600080fd5b83870191505b848210156136d4578135835291830191908301906136bb565b979650505050505050565b600061116082840312156136f257600080fd5b6136fa61353c565b90508135815260208201356020820152604082013560408201526137218360608401613565565b606082015260e082013560808201526101008083013560a083015261012083013560c08301526137558461014085016135d8565b60e08301526111408301356001600160401b0381111561377457600080fd5b61378085828601613645565b82840152505092915050565b600060c0828403121561379e57600080fd5b60405160c081018181106001600160401b03821117156137c0576137c0613526565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e0838503121561381857600080fd5b82356001600160401b0381111561382e57600080fd5b61383a858286016136df565b9250506134c6846020850161378c565b60006020828403121561385c57600080fd5b81356001600160401b0381111561387257600080fd5b61387e848285016136df565b949350505050565b6110008101818360005b60808110156138af578151835260209283019290910190600101613890565b50505092915050565b60008061102083850312156138cc57600080fd5b82356001600160401b038111156138e257600080fd5b6138ee858286016136df565b9250506134c684602085016135d8565b60008060e0838503121561391157600080fd5b61391b848461378c565b9460c0939093013593505050565b6000806040838503121561393c57600080fd5b82356001600160401b0381111561395257600080fd5b61395e858286016136df565b95602094909401359450505050565b6000806040838503121561398057600080fd5b50508035926020909101359150565b600080604083850312156139a257600080fd5b6139ab8361346e565b946020939093013593505050565b6000806000606084860312156139ce57600080fd5b833592506139de6020850161346e565b91506139ec6040850161346e565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b81810381811115610723576107236139f5565b600060208284031215613a3057600080fd5b5051919050565b600060c08284031215613a4957600080fd5b60405160c081018181106001600160401b0382111715613a6b57613a6b613526565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b634e487b7160e01b600052601260045260246000fd5b600082613ad557613ad5613ab0565b500690565b80820180821115610723576107236139f5565b6000816000190483118215151615613b0757613b076139f5565b500290565b6001600160401b0382811682821603908082111561323f5761323f6139f5565b600082613b3b57613b3b613ab0565b500490565b80516001600160801b038116811461337d57600080fd5b600060408284031215613b6957600080fd5b604051604081018181106001600160401b0382111715613b8b57613b8b613526565b604052613b9783613b40565b8152613ba560208401613b40565b60208201529392505050565b60408101818360005b60028110156138af578151835260209283019290910190600101613bba565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103613c0557613c056139f5565b60010192915050565b60005b83811015613c29578181015183820152602001613c11565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613c6a816017850160208801613c0e565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613c9b816028840160208801613c0e565b01602801949350505050565b6020815260008251806020840152613cc6816040850160208701613c0e565b601f01601f19169190910160400192915050565b600081613ce957613ce96139f5565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220ce17e5f0a8046f0225a4af7d7ea76e937433618fdb6e49c325b35f0cbf1ca06a64736f6c63430008100033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102a05760003560e01c80637eca568811610167578063b0628ee0116100ce578063ca15c87311610087578063ca15c873146106ad578063d547741f146106c0578063dddc61a8146106d3578063e1498cf9146106dc578063e282e27b146106ef578063ffbc9bd0146106f657600080fd5b8063b0628ee014610632578063b15d20da14610645578063b4988fd01461065a578063b4a932831461066d578063b51e039714610676578063b776a512146106a457600080fd5b8063a217fddf11610120578063a217fddf146105c1578063a8279182146105c9578063ad08fdfb146105d2578063adaa7a0f146105e5578063ae722e821461060c578063af31f9141461061f57600080fd5b80637eca56881461054f57806382975fe7146105585780638c0bca061461057f5780639010d07c1461059257806391d14854146105a55780639dc787a2146105b857600080fd5b8063331f3b9c1161020b57806359e7b5be116101c457806359e7b5be146104bc5780635bdca855146104dc5780636e9bb60b146104ef578063704d3c961461050257806378203ab6146105155780637bba7d611461052857600080fd5b8063331f3b9c14610448578063343aad821461045157806336568abe1461046457806339cd53ee146104775780633baebb75146104a057806348f61441146104b357600080fd5b8063228cb7331161025d578063228cb73314610340578063248a9ca31461036b578063296beba71461039d5780632a02573b146104195780632f2ff15d1461042c57806331223ba71461043f57600080fd5b806301ffc9a7146102a5578063047c13f5146102cd5780630c655e1f146102e2578063158ef93e146102f55780631600c6241461030257806316a4be6f14610315575b600080fd5b6102b86102b3366004613444565b6106fe565b60405190151581526020015b60405180910390f35b6102e06102db36600461349c565b610729565b005b6102e06102f03660046134cf565b610845565b6000546102b89060ff1681565b6102e06103103660046134cf565b6109a0565b600a54610328906001600160401b031681565b6040516001600160401b0390911681526020016102c4565b600454610353906001600160a01b031681565b6040516001600160a01b0390911681526020016102c4565b61038f6103793660046134cf565b6000908152600160208190526040909120015490565b6040519081526020016102c4565b6103b06103ab3660046134cf565b610a10565b60408051825180518252602080820151818401528184015183850152606080830151818501526080808401519085015260a0928301519284019290925284015160c08301529183015160e08201529101516001600160401b0316610100820152610120016102c4565b6102e06104273660046134e8565b610c8d565b6102e061043a366004613503565b610d93565b61038f600b5481565b61038f60065481565b600354610353906001600160a01b031681565b6102e0610472366004613503565b610dbe565b6103536104853660046134cf565b600e602052600090815260409020546001600160a01b031681565b6102e06104ae366004613805565b610e3c565b61038f600d5481565b6104cf6104ca36600461384a565b6110de565b6040516102c49190613886565b6102e06104ea3660046134cf565b6110ef565b61038f6104fd3660046138b8565b61111c565b6102e06105103660046134cf565b61112f565b61038f6105233660046138fe565b61119d565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b61038f60085481565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b61038f61058d366004613929565b6112ea565b6103536105a036600461396d565b6114ea565b6102b86105b3366004613503565b611502565b61038f60105481565b61038f600081565b61038f600c5481565b6102e06105e03660046134cf565b61152d565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b6102e061061a36600461384a565b611567565b6102e061062d366004613929565b611a32565b6102e061064036600461398f565b611a64565b61038f600080516020613d0883398151915281565b6102e06106683660046139b9565b611b24565b61038f600f5481565b6102e06106843660046134cf565b6000908152600e6020526040902080546001600160a01b03191633179055565b61038f60075481565b61038f6106bb3660046134cf565b611c50565b6102e06106ce366004613503565b611c67565b61038f60095481565b6102e06106ea3660046134cf565b600d55565b6000610328565b6102b8611c8d565b60006001600160e01b03198216635a05180f60e01b1480610723575061072382611d33565b92915050565b6000610736600143613a0b565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156107eb5760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b600080516020613d0883398151915261085d81611d68565b600082116108b75760405162461bcd60e51b815260206004820152602160248201527f4e756d626572206f66207375627461736b732063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107e2565b600360009054906101000a90046001600160a01b03166001600160a01b031663f06820546040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190613a1e565b821061099a5760405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207375627461736b73206d757374206265206c657373206044820152740e8d0c2dc40c4d8dec6d6e640e0cae440cae0dec6d605b1b60648201526084016107e2565b50601055565b600080516020613d088339815191526109b881611d68565b610100821115610a0a5760405162461bcd60e51b815260206004820152601d60248201527f746172676574206d696e6520626c6f636b206d757374203c3d2032353600000060448201526064016107e2565b50600655565b604080516101408101825260006080820181815260a0830182905260c0830182905260e0830182905261010083018290526101208301829052825260208201819052918101829052606081019190915281610aa65760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016107e2565b6000828152600e60205260409020546001600160a01b031680610b0b5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016107e2565b600a546001600160401b0316606083015260035460408051635a325a9f60e11b815290516001600160a01b039092169163b464b53e9160048082019260c09290919082900301816000875af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c9190613a37565b80835260105460a09091015160405160009291610bb6918790602001918252602082015260400190565b6040516020818303038152906040528051906020012060001c610bd99190613ac6565b9050600081846000015160200151610bf19190613ada565b90508043111580610c0c5750600654610c0a8243613a0b565b115b15610c1957505050919050565b835160a001516040805160208082019390935283408183015281518082038301815260609091018252805192019190912090850152600b548451511115610c65578351610c6590611d75565b600754610c73906002613aed565b600c541015610c8557600d5460208501525b505050919050565b600080516020613d08833981519152610ca581611d68565b6000826001600160401b031611610cfe5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f0060448201526064016107e2565b610d09600183613b0c565b82166001600160401b0316600014610d6f5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b60648201526084016107e2565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b60008281526001602081905260409091200154610daf81611d68565b610db98383611e05565b505050565b6001600160a01b0381163314610e2e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107e2565b610e388282611e27565b5050565b815160a082015114610e905760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e672064696765737400000000000060448201526064016107e2565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a0015103610f035760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e650000000000000060448201526064016107e2565b600754610f11906002613aed565b600c5410610f615760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e730000000060448201526064016107e2565b6000610100610f7261040082613aed565b610f7c9190613b2c565b610100610f8b61040082613aed565b610f959190613b2c565b8360600151610fa49190613b2c565b610fae9190613aed565b6060840151909150610fc09082611e49565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110339190613b57565b905060006101006110476104006004613aed565b6110519190613b2c565b85608001516110609190613ada565b90508082600001516001600160801b031610801561108b57508082602001516001600160801b031610155b6110d75760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e746578742064696765737400000060448201526064016107e2565b5050505050565b6110e66133e8565b61072382612087565b600080516020613d0883398151915261110781611d68565b6008829055600b54600003610e385750600755565b60006111288383612136565b9392505050565b600080516020613d0883398151915261114781611d68565b600082116111975760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f00000060448201526064016107e2565b50600955565b6000806010548460a00151846040516020016111c3929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c6111e69190613ac6565b905060008185602001516111fa9190613ada565b905080431161125e5760405162461bcd60e51b815260206004820152602a60248201527f4561726c696572207468616e206578706563746564207375627461736b20737460448201526930b93a10313637b1b59760b11b60648201526084016107e2565b60065461126b8243613a0b565b11156112b05760405162461bcd60e51b8152602060048201526014602482015273135a5b9948191958591b1a5b9948195e18d9595960621b60448201526064016107e2565b60a0850151604080516020810192909252824090820152606001604051602081830303815290604052805190602001209250505092915050565b604082015160009061133e5760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d707479000000000000000060448201526064016107e2565b60006040518060800160405280856040015181526020018560200151815260200184815260200161137286606001516123a9565b90529050600061138182612411565b905060006113926104006040613aed565b6113a0610400610100613aed565b6113aa9190613b2c565b6113b76104006004613aed565b6113c5610400610100613aed565b6113cf9190613b2c565b6113d99190613b2c565b8660a001516113e89190613ac6565b90506113f26133e8565b6113fa613407565b6114098860e001518486612489565b9250905061010061141d6104006004613aed565b6114279190613b2c565b8860a001516114369190613aed565b6114738260405160200161144a9190613bb1565b604051602081830303815290604052805190602001208a6060015161260690919063ffffffff16565b61147d9190613ada565b8860800151146114cf5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e0000000000000060448201526064016107e2565b6114de8860a00151858461270c565b98975050505050505050565b6000828152600260205260408120611128908361287f565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020613d0883398151915261154581611d68565b600f829055600061155461288b565b905080600d541115610db957600d555050565b60408101516115b15760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016107e2565b6040808201516000908152600e60205220546001600160a01b0316806116195760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016107e2565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015611664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116889190613a37565b905061169381611d75565b60006116a382856040015161119d565b90506116af8483610e3c565b600a5460608501516001600160401b03909116906116cc906128b2565b11156117295760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b60648201526084016107e2565b6117316133e8565b7f0000000000000000000000000000000000000000000000000000000000000000156117675761176085612087565b905061176e565b5060e08401515b7f0000000000000000000000000000000000000000000000000000000000000000156117f75760006117a08683612136565b9050836040015181146117f55760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f74000000000000000060448201526064016107e2565b505b6117ff6133e8565b9050600061180d86846112ea565b9050600061182c856060015188606001516128fc90919063ffffffff16565b9050604081600d5461183e9190613b2c565b901b82111561188f5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c697479000000000060448201526064016107e2565b60008281526005602052604090205460ff16156118ee5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d69747465640000000000000060448201526064016107e2565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c61010061192761040080613aed565b61193390610400613aed565b61193e906008613aed565b6119489190613b2c565b89608001516119579190613b2c565b6040808b015190516001600160e01b031960e085901b16815260048101929092526001600160a01b038a1660248301526044820152606401600060405180830381600087803b1580156119a957600080fd5b505af11580156119bd573d6000803e3d6000fd5b5050506040808901518751600c5460808c015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38451600b55600c805460019190600090611a24908490613ada565b909155505050505050505050565b6000611a3d83612087565b9050611a498382612136565b50611a526133e8565b9050611a5e83836112ea565b50505050565b6000818152600e60205260409020546001600160a01b03163314611aca5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e65724964000000000060448201526064016107e2565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff1615611b835760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016107e2565b6000805460ff19166001178155611ba090611b9b3390565b611e05565b611bb8600080516020613d0883398151915233611e05565b611bc483600019613b2c565b600d557f000000000000000000000000000000000000000000000000000000000000000015611bf457600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff191660201790556001601055565b600081815260026020526040812061072390612a3c565b60008281526001602081905260409091200154611c8381611d68565b610db98383611e27565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af1158015611ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d099190613a37565b9050600b5481600001511180611d2d5750600754611d28906002613aed565b600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061072357506301ffc9a760e01b6001600160e01b0319831614610723565b611d728133612a46565b50565b600b5481511015611dd65760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b60648201526084016107e2565b600b548151118015611dea57506000600b54115b15611d7257611df7612a9f565b6000600c5560085460075550565b611e0f8282612adf565b6000828152600260205260409020610db99082612b4a565b611e318282612b5f565b6000828152600260205260409020610db99082612bc6565b610100611e5861040080613aed565b611e6490610400613aed565b611e6f906008613aed565b611e799190613b2c565b8251611e859190613ac6565b15611ed25760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e656400000060448201526064016107e2565b602082015182518291611ee491613ada565b1115611f2a5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b60448201526064016107e2565b6000611f35836128b2565b610100611f4461040080613aed565b611f5090610400613aed565b611f5c90610400613aed565b611f67906008613aed565b611f719190613b2c565b611f7b9190613aed565b90508083602001511115611fc95760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b60448201526064016107e2565b6000611fd58383612bdb565b905080846020015110156120245760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b60448201526064016107e2565b83606001518460400151166001600160401b0316600014611a5e5760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f00000000000060448201526064016107e2565b61208f6133e8565b60408083015160c0840151608085015192516120bf93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209182012060e08401805151909118835251906000906120f56104006004613aed565b6120ff9190613b2c565b905081836020600184030281015b8082101561212c5760208084209381018051909418920191825261210d565b5050505050919050565b6000805b60206121496104006004613aed565b6121539190613b2c565b8110156121a157610100602082028401208084836080811061217757612177613bd9565b6020020181815250505060206101006121909190613b2c565b61219a9082613ada565b905061213a565b5060006121b16020610100613b2c565b90505b60206121c36104006004613aed565b6121cd9190613b2c565b8110156122a05760005b60206121e66104006004613aed565b6121f09190613b2c565b81101561229757600084826080811061220b5761220b613bd9565b6020020151905060008561221f8585613ada565b6080811061222f5761222f613bd9565b602002015190508181604051602001612252929190918252602082015260400190565b6040516020818303038152906040528051906020012086846080811061227a5761227a613bd9565b6020020152506122909050600183901b82613ada565b90506121d7565b5060011b6121b4565b5081516122ab6133e8565b925060006101006122bf6104006004613aed565b6122c99190613b2c565b85608001516122d89190613b2c565b905060005b8561010001515181101561239f576000806122f9600285613ac6565b60000361232957849150876101000151838151811061231a5761231a613bd9565b6020026020010151905061234e565b876101000151838151811061234057612340613bd9565b602002602001015191508490505b60408051602081018490529081018290526060016040516020818303038152906040528051906020012094506002846123879190613b2c565b935050506001816123989190613ada565b90506122dd565b5090949350505050565b600081600001518260200151836040015184606001516040516020016123f4949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b612419613407565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516107239385939092909160806001612bf1565b612491613407565b6124996133e8565b60006124a484612cb0565b90506124d28160406124b96104006004613aed565b6124c39190613b2c565b6124cd9088613aed565b612ccc565b60005b608081101561255f576124e9826001612ccc565b8681608081106124fb576124fb613bd9565b602002015182511883826080811061251557612515613bd9565b602002015286600182016080811061252f5761252f613bd9565b602002015182600160200201511883826001016080811061255257612552613bd9565b60200201526002016124d5565b506125f28160406125736104006004613aed565b61257d9190613b2c565b60018861258d6104006040613aed565b61259b610400610100613aed565b6125a59190613b2c565b6125b26104006004613aed565b6125c0610400610100613aed565b6125ca9190613b2c565b6125d49190613b2c565b6125de9190613a0b565b6125e89190613a0b565b6124cd9190613aed565b6125fb81612cb0565b925050935093915050565b60008061010061261861040082613aed565b6126229190613b2c565b84602001516126319190613b2c565b61263b9084613ac6565b6040850151606086015160208701519293508316179061010061266061040082613aed565b61266a9190613b2c565b61267d906001600160401b038416613aed565b11156126cb5760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e640000000060448201526064016107e2565b6101006126da61040082613aed565b6126e49190613b2c565b6126f7906001600160401b038316613aed565b85516127039190613ada565b95945050505050565b6000612716613407565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915284519085015161277c9183918891906000608081612bf1565b9050612786613425565b6080600060206127996104006004613aed565b6127a39190613b2c565b6127ae906020613aed565b6127b9906080613ada565b9050601c8301601f8401602085016060860160e0870160e1880160f089018c600c87538b51865260208c015160208701525b888a10156128535760808a01995060ff8a1684538960081c835380518552602081015160208601526040810151604086015260608101516060860152608081019050888a0361283957600182535b60408660d58a6009600019fa61284e57600080fd5b6127eb565b50505050505050508260016008811061286e5761286e613bd9565b602002015198975050505050505050565b60006111288383612d92565b6000600f5460000361289e575060001990565b600f546128ad90600019613b2c565b905090565b606081015160009019815b6001600160401b038216156128ed576128d7600183613b0c565b90911690806128e581613bef565b9150506128bd565b600160ff9091161b9392505050565b60008061010061290e61040080613aed565b61291a90610400613aed565b61292690610400613aed565b612931906008613aed565b61293b9190613b2c565b83116129475782612983565b61010061295661040080613aed565b61296290610400613aed565b61296e90610400613aed565b612979906008613aed565b6129839190613b2c565b90506000612990856128b2565b61299a9085613b2c565b905060006101006129ad61040080613aed565b6129b990610400613aed565b6129c590610400613aed565b6129d0906008613aed565b6129da9190613b2c565b82116129e65781612a22565b6101006129f561040080613aed565b612a0190610400613aed565b612a0d90610400613aed565b612a18906008613aed565b612a229190613b2c565b9050612a3281604085901b613b2c565b9695505050505050565b6000610723825490565b612a508282611502565b610e3857612a5d81612dbc565b612a68836020612dce565b604051602001612a79929190613c32565b60408051601f198184030181529082905262461bcd60e51b82526107e291600401613ca7565b600c5460009015612acc5760006010600d54901c9050612ac481600654600c54612f69565b915050612ad6565b506001600160f01b035b611d7281613018565b612ae98282611502565b610e385760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611128836001600160a01b0384166130fd565b612b698282611502565b15610e385760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611128836001600160a01b03841661314c565b6000818310612bea5781611128565b5090919050565b612bf9613407565b600c6000612c0685613246565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa612ca257600080fd5b505050979650505050505050565b612cb8613407565b815181526020918201519181019190915290565b612cd4613425565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa56020808301919091527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6040830152835160608301908152908401516080830152601c820190600c601f840153604060e0840153600160f084015360005b84811015612d785760408260d5856009600019fa612d7057600080fd5b600101612d53565b505050606081015183526080015160209092019190915250565b6000826000018281548110612da957612da9613bd9565b9060005260206000200154905092915050565b60606107236001600160a01b03831660145b60606000612ddd836002613aed565b612de8906002613ada565b6001600160401b03811115612dff57612dff613526565b6040519080825280601f01601f191660200182016040528015612e29576020820181803683370190505b509050600360fc1b81600081518110612e4457612e44613bd9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612e7357612e73613bd9565b60200101906001600160f81b031916908160001a9053506000612e97846002613aed565b612ea2906001613ada565b90505b6001811115612f1a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612ed657612ed6613bd9565b1a60f81b828281518110612eec57612eec613bd9565b60200101906001600160f81b031916908160001a90535060049490941c93612f1381613cda565b9050612ea5565b5083156111285760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e2565b6000808060001985870985870292508281108382030391505080600003612fa357838281612f9957612f99613ab0565b0492505050611128565b808411612faf57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b7f0000000000000000000000000000000000000000000000000000000000000000156130415750565b600d5460095460109190911c906000818461305d600183613a0b565b6130679086613aed565b6130719190613ada565b61307b9190613b2c565b9050613088836002613aed565b81111561309d5761309a836002613aed565b90505b6130a8600284613b2c565b8110156130bd576130ba600284613b2c565b90505b6001600160f01b038111156130d657506001600160f01b035b601081901b600d5560006130e861288b565b905080600d5411156110d757600d5550505050565b600081815260018301602052604081205461314457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610723565b506000610723565b60008181526001830160205260408120548015613235576000613170600183613a0b565b855490915060009061318490600190613a0b565b90508181146131e95760008660000182815481106131a4576131a4613bd9565b90600052602060002001549050808760000184815481106131c7576131c7613bd9565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806131fa576131fa613cf1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610723565b6000915050610723565b5092915050565b61324e613407565b6201000082101561329257600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b6401000000008210156132d257600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b03191661327a565b680100000000000000008210156132ec5761327a82613382565b600160801b82101561333c576001600160401b038216604083901c61331082613382565b6001600160c01b031916835261332581613382565b6001600160c01b03191660208401525061337d9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b60448201526064016107e2565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b60006020828403121561345657600080fd5b81356001600160e01b03198116811461112857600080fd5b80356001600160a01b038116811461337d57600080fd5b80356001600160401b038116811461337d57600080fd5b600080604083850312156134af57600080fd5b6134b88361346e565b91506134c660208401613485565b90509250929050565b6000602082840312156134e157600080fd5b5035919050565b6000602082840312156134fa57600080fd5b61112882613485565b6000806040838503121561351657600080fd5b823591506134c66020840161346e565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561355f5761355f613526565b60405290565b60006080828403121561357757600080fd5b604051608081018181106001600160401b038211171561359957613599613526565b806040525080915082358152602083013560208201526135bb60408401613485565b60408201526135cc60608401613485565b60608201525092915050565b600082601f8301126135e957600080fd5b6040516110008082018281106001600160401b038211171561360d5761360d613526565b6040528301818582111561362057600080fd5b845b8281101561363a578035825260209182019101613622565b509195945050505050565b600082601f83011261365657600080fd5b813560206001600160401b038083111561367257613672613526565b8260051b604051601f19603f8301168101818110848211171561369757613697613526565b6040529384528581018301938381019250878511156136b557600080fd5b83870191505b848210156136d4578135835291830191908301906136bb565b979650505050505050565b600061116082840312156136f257600080fd5b6136fa61353c565b90508135815260208201356020820152604082013560408201526137218360608401613565565b606082015260e082013560808201526101008083013560a083015261012083013560c08301526137558461014085016135d8565b60e08301526111408301356001600160401b0381111561377457600080fd5b61378085828601613645565b82840152505092915050565b600060c0828403121561379e57600080fd5b60405160c081018181106001600160401b03821117156137c0576137c0613526565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e0838503121561381857600080fd5b82356001600160401b0381111561382e57600080fd5b61383a858286016136df565b9250506134c6846020850161378c565b60006020828403121561385c57600080fd5b81356001600160401b0381111561387257600080fd5b61387e848285016136df565b949350505050565b6110008101818360005b60808110156138af578151835260209283019290910190600101613890565b50505092915050565b60008061102083850312156138cc57600080fd5b82356001600160401b038111156138e257600080fd5b6138ee858286016136df565b9250506134c684602085016135d8565b60008060e0838503121561391157600080fd5b61391b848461378c565b9460c0939093013593505050565b6000806040838503121561393c57600080fd5b82356001600160401b0381111561395257600080fd5b61395e858286016136df565b95602094909401359450505050565b6000806040838503121561398057600080fd5b50508035926020909101359150565b600080604083850312156139a257600080fd5b6139ab8361346e565b946020939093013593505050565b6000806000606084860312156139ce57600080fd5b833592506139de6020850161346e565b91506139ec6040850161346e565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b81810381811115610723576107236139f5565b600060208284031215613a3057600080fd5b5051919050565b600060c08284031215613a4957600080fd5b60405160c081018181106001600160401b0382111715613a6b57613a6b613526565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b634e487b7160e01b600052601260045260246000fd5b600082613ad557613ad5613ab0565b500690565b80820180821115610723576107236139f5565b6000816000190483118215151615613b0757613b076139f5565b500290565b6001600160401b0382811682821603908082111561323f5761323f6139f5565b600082613b3b57613b3b613ab0565b500490565b80516001600160801b038116811461337d57600080fd5b600060408284031215613b6957600080fd5b604051604081018181106001600160401b0382111715613b8b57613b8b613526565b604052613b9783613b40565b8152613ba560208401613b40565b60208201529392505050565b60408101818360005b60028110156138af578151835260209283019290910190600101613bba565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103613c0557613c056139f5565b60010192915050565b60005b83811015613c29578181015183820152602001613c11565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613c6a816017850160208801613c0e565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613c9b816028840160208801613c0e565b01602801949350505050565b6020815260008251806020840152613cc6816040850160208701613c0e565b601f01601f19169190910160400192915050565b600081613ce957613ce96139f5565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220ce17e5f0a8046f0225a4af7d7ea76e937433618fdb6e49c325b35f0cbf1ca06a64736f6c63430008100033", "linkReferences": {}, "deployedLinkReferences": {} }