UNPKG

@realitio/realitio-contracts

Version:

Collection of smart contracts for the Realitio fact verification platform

1,155 lines 2.75 MB
{ "contractName": "Realitio_v2_1", "abi": [ { "constant": false, "inputs": [], "name": "withdraw", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "uint256" } ], "name": "template_hashes", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "bytes32" } ], "name": "question_claims", "outputs": [ { "name": "payee", "type": "address" }, { "name": "last_bond", "type": "uint256" }, { "name": "queued_funds", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "address" } ], "name": "arbitrator_question_fees", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "bytes32" } ], "name": "commitments", "outputs": [ { "name": "reveal_ts", "type": "uint32" }, { "name": "is_revealed", "type": "bool" }, { "name": "revealed_answer", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "bytes32" } ], "name": "questions", "outputs": [ { "name": "content_hash", "type": "bytes32" }, { "name": "arbitrator", "type": "address" }, { "name": "opening_ts", "type": "uint32" }, { "name": "timeout", "type": "uint32" }, { "name": "finalize_ts", "type": "uint32" }, { "name": "is_pending_arbitration", "type": "bool" }, { "name": "bounty", "type": "uint256" }, { "name": "best_answer", "type": "bytes32" }, { "name": "history_hash", "type": "bytes32" }, { "name": "bond", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "uint256" } ], "name": "templates", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "arbitrator", "type": "address" }, { "indexed": false, "name": "amount", "type": "uint256" } ], "name": "LogSetQuestionFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "template_id", "type": "uint256" }, { "indexed": true, "name": "user", "type": "address" }, { "indexed": false, "name": "question_text", "type": "string" } ], "name": "LogNewTemplate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "question_id", "type": "bytes32" }, { "indexed": true, "name": "user", "type": "address" }, { "indexed": false, "name": "template_id", "type": "uint256" }, { "indexed": false, "name": "question", "type": "string" }, { "indexed": true, "name": "content_hash", "type": "bytes32" }, { "indexed": false, "name": "arbitrator", "type": "address" }, { "indexed": false, "name": "timeout", "type": "uint32" }, { "indexed": false, "name": "opening_ts", "type": "uint32" }, { "indexed": false, "name": "nonce", "type": "uint256" }, { "indexed": false, "name": "created", "type": "uint256" } ], "name": "LogNewQuestion", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "question_id", "type": "bytes32" }, { "indexed": false, "name": "bounty_added", "type": "uint256" }, { "indexed": false, "name": "bounty", "type": "uint256" }, { "indexed": true, "name": "user", "type": "address" } ], "name": "LogFundAnswerBounty", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "answer", "type": "bytes32" }, { "indexed": true, "name": "question_id", "type": "bytes32" }, { "indexed": false, "name": "history_hash", "type": "bytes32" }, { "indexed": true, "name": "user", "type": "address" }, { "indexed": false, "name": "bond", "type": "uint256" }, { "indexed": false, "name": "ts", "type": "uint256" }, { "indexed": false, "name": "is_commitment", "type": "bool" } ], "name": "LogNewAnswer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "question_id", "type": "bytes32" }, { "indexed": true, "name": "user", "type": "address" }, { "indexed": true, "name": "answer_hash", "type": "bytes32" }, { "indexed": false, "name": "answer", "type": "bytes32" }, { "indexed": false, "name": "nonce", "type": "uint256" }, { "indexed": false, "name": "bond", "type": "uint256" } ], "name": "LogAnswerReveal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "question_id", "type": "bytes32" }, { "indexed": true, "name": "user", "type": "address" } ], "name": "LogNotifyOfArbitrationRequest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "question_id", "type": "bytes32" } ], "name": "LogCancelArbitration", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "question_id", "type": "bytes32" }, { "indexed": true, "name": "answer", "type": "bytes32" } ], "name": "LogFinalize", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "question_id", "type": "bytes32" }, { "indexed": true, "name": "user", "type": "address" }, { "indexed": false, "name": "amount", "type": "uint256" } ], "name": "LogClaim", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "user", "type": "address" }, { "indexed": false, "name": "amount", "type": "uint256" } ], "name": "LogWithdraw", "type": "event" }, { "constant": false, "inputs": [ { "name": "fee", "type": "uint256" } ], "name": "setQuestionFee", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "content", "type": "string" } ], "name": "createTemplate", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "content", "type": "string" }, { "name": "question", "type": "string" }, { "name": "arbitrator", "type": "address" }, { "name": "timeout", "type": "uint32" }, { "name": "opening_ts", "type": "uint32" }, { "name": "nonce", "type": "uint256" } ], "name": "createTemplateAndAskQuestion", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "name": "template_id", "type": "uint256" }, { "name": "question", "type": "string" }, { "name": "arbitrator", "type": "address" }, { "name": "timeout", "type": "uint32" }, { "name": "opening_ts", "type": "uint32" }, { "name": "nonce", "type": "uint256" } ], "name": "askQuestion", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "fundAnswerBounty", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_id", "type": "bytes32" }, { "name": "answer", "type": "bytes32" }, { "name": "max_previous", "type": "uint256" } ], "name": "submitAnswer", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_id", "type": "bytes32" }, { "name": "answer", "type": "bytes32" }, { "name": "max_previous", "type": "uint256" }, { "name": "answerer", "type": "address" } ], "name": "submitAnswerFor", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_id", "type": "bytes32" }, { "name": "answer_hash", "type": "bytes32" }, { "name": "max_previous", "type": "uint256" }, { "name": "_answerer", "type": "address" } ], "name": "submitAnswerCommitment", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_id", "type": "bytes32" }, { "name": "answer", "type": "bytes32" }, { "name": "nonce", "type": "uint256" }, { "name": "bond", "type": "uint256" } ], "name": "submitAnswerReveal", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_id", "type": "bytes32" }, { "name": "requester", "type": "address" }, { "name": "max_previous", "type": "uint256" } ], "name": "notifyOfArbitrationRequest", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "cancelArbitration", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_id", "type": "bytes32" }, { "name": "answer", "type": "bytes32" }, { "name": "answerer", "type": "address" } ], "name": "submitAnswerByArbitrator", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_id", "type": "bytes32" }, { "name": "answer", "type": "bytes32" }, { "name": "payee_if_wrong", "type": "address" }, { "name": "last_history_hash", "type": "bytes32" }, { "name": "last_answer_or_commitment_id", "type": "bytes32" }, { "name": "last_answerer", "type": "address" } ], "name": "assignWinnerAndSubmitAnswerByArbitrator", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "isFinalized", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "getFinalAnswer", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "resultFor", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" }, { "name": "content_hash", "type": "bytes32" }, { "name": "arbitrator", "type": "address" }, { "name": "min_timeout", "type": "uint32" }, { "name": "min_bond", "type": "uint256" } ], "name": "getFinalAnswerIfMatches", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_id", "type": "bytes32" }, { "name": "history_hashes", "type": "bytes32[]" }, { "name": "addrs", "type": "address[]" }, { "name": "bonds", "type": "uint256[]" }, { "name": "answers", "type": "bytes32[]" } ], "name": "claimWinnings", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "question_ids", "type": "bytes32[]" }, { "name": "lengths", "type": "uint256[]" }, { "name": "hist_hashes", "type": "bytes32[]" }, { "name": "addrs", "type": "address[]" }, { "name": "bonds", "type": "uint256[]" }, { "name": "answers", "type": "bytes32[]" } ], "name": "claimMultipleAndWithdrawBalance", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "getContentHash", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "getArbitrator", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "getOpeningTS", "outputs": [ { "name": "", "type": "uint32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "getTimeout", "outputs": [ { "name": "", "type": "uint32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "getFinalizeTS", "outputs": [ { "name": "", "type": "uint32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "isPendingArbitration", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "getBounty", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "getBestAnswer", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "getHistoryHash", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "question_id", "type": "bytes32" } ], "name": "getBond", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" } ], "bytecode": "0x608060405260006001553480156200001657600080fd5b506200008d606060405190810160405280603f81526020017f7b227469746c65223a20222573222c202274797065223a2022626f6f6c222c2081526020017f2263617465676f7279223a20222573222c20226c616e67223a20222573227d0081525062000308640100000000026401000000009004565b506200012a608060405190810160405280604f81526020017f7b227469746c65223a20222573222c202274797065223a202275696e74222c2081526020017f22646563696d616c73223a2031382c202263617465676f7279223a202225732281526020017f2c20226c616e67223a20222573227d000000000000000000000000000000000081525062000308640100000000026401000000009004565b50620001c7608060405190810160405280605a81526020017f7b227469746c65223a20222573222c202274797065223a202273696e676c652d81526020017f73656c656374222c20226f7574636f6d6573223a205b25735d2c20226361746581526020017f676f7279223a20222573222c20226c616e67223a20222573227d00000000000081525062000308640100000000026401000000009004565b5062000264608060405190810160405280605c81526020017f7b227469746c65223a20222573222c202274797065223a20226d756c7469706c81526020017f652d73656c656374222c20226f7574636f6d6573223a205b25735d2c2022636181526020017f7465676f7279223a20222573222c20226c616e67223a20222573227d0000000081525062000308640100000000026401000000009004565b5062000301608060405190810160405280604381526020017f7b227469746c65223a20222573222c202274797065223a20226461746574696d81526020017f65222c202263617465676f7279223a20222573222c20226c616e67223a20222581526020017f73227d000000000000000000000000000000000000000000000000000000000081525062000308640100000000026401000000009004565b506200051f565b6000806001549050436002600083815260200190815260200160002081905550826040516020018082805190602001908083835b6020831015156200036357805182526020820191506020810190506020830392506200033c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515620003ce5780518252602082019150602081019050602083039250620003a7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206003600083815260200190815260200160002081600019169055503373ffffffffffffffffffffffffffffffffffffffff16817fb87fb721c0a557bb8dff89a86796466931d82ba530a66a239263eb8735ade2e4856040518080602001828103825283818151815260200191508051906020019080838360005b838110156200049257808201518184015260208101905062000475565b50505050905090810190601f168015620004c05780820380516001836020036101000a031916815260200191505b509250505060405180910390a3620004f16001826200050064010000000002620056ca179091906401000000009004565b60018190555080915050919050565b60008082840190508381101515156200051557fe5b8091505092915050565b616429806200052f6000396000f3006080604052600436106101cd576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631101a0fd146101d2578063111ec1381461030f57806312a203c31461036b5780632417395c146104005780632518904c1461044557806326d6c97b146104b657806328828b1e146104fb5780633ccfd60b146106b05780634dc266b4146106c75780634df6ca2a1461071a5780634e60f8831461074757806351577ea914610790578063590158a7146107dd57806359245ff31461085c5780636fa427421461088057806370a08231146108d7578063762c38fd1461092e57806377f325df146109fa5780637f8d429e14610a3657806382ffa9f714610a7f578063839df94514610acc57806383bf460914610b375780638d552d4614610bb4578063924532fb14610c0157806395addb9014610c4a5780639e63fa6a14610d3a5780639f1025c614610d8b578063a1130d0414610ddc578063a462fb7b14610ee4578063acae8f4e14610f31578063bc52565214610f82578063d09cc57e14610fc3578063d44e293c14611010578063d7cff986146110ab578063ebbdd2b014611107578063f6a94ecb14611138578063fe92049d14611193575b600080fd5b3480156101de57600080fd5b5061030d6004803603810190808035600019169060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506111f2565b005b6103696004803603810190808035600019169060200190929190803560001916906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611700565b005b34801561037757600080fd5b506103e260048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff16906020019092919080359060200190929190505050611d10565b60405180826000191660001916815260200191505060405180910390f35b34801561040c57600080fd5b5061042f6004803603810190808035600019169060200190929190505050612081565b6040518082815260200191505060405180910390f35b34801561045157600080fd5b5061047460048036038101908080356000191690602001909291905050506120a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c257600080fd5b506104e560048036038101908080356000191690602001909291905050506120f1565b6040518082815260200191505060405180910390f35b34801561050757600080fd5b506106ae600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612119565b005b3480156106bc57600080fd5b506106c5612397565b005b3480156106d357600080fd5b506107186004803603810190808035600019169060200190929190803560001916906020019092919080359060200190929190803590602001909291905050506124b6565b005b34801561072657600080fd5b5061074560048036038101908080359060200190929190505050612b2f565b005b34801561075357600080fd5b5061077260048036038101908080359060200190929190505050612be1565b60405180826000191660001916815260200191505060405180910390f35b34801561079c57600080fd5b506107bf6004803603810190808035600019169060200190929190505050612bf9565b60405180826000191660001916815260200191505060405180910390f35b3480156107e957600080fd5b5061080c6004803603810190808035600019169060200190929190505050612c21565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b61087e6004803603810190808035600019169060200190929190505050612c6b565b005b34801561088c57600080fd5b506108c1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061306b565b6040518082815260200191505060405180910390f35b3480156108e357600080fd5b50610918600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613083565b6040518082815260200191505060405180910390f35b6109dc60048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190803563ffffffff1690602001909291908035906020019092919050505061309b565b60405180826000191660001916815260200191505060405180910390f35b610a3460048036038101908080356000191690602001909291908035600019169060200190929190803590602001909291905050506134d0565b005b348015610a4257600080fd5b50610a656004803603810190808035600019169060200190929190505050613a3a565b604051808215151515815260200191505060405180910390f35b348015610a8b57600080fd5b50610aae6004803603810190808035600019169060200190929190505050613ad3565b60405180826000191660001916815260200191505060405180910390f35b348015610ad857600080fd5b50610afb6004803603810190808035600019169060200190929190505050613afb565b604051808463ffffffff1663ffffffff168152602001831515151581526020018260001916600019168152602001935050505060405180910390f35b348015610b4357600080fd5b50610b9e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b42565b6040518082815260200191505060405180910390f35b348015610bc057600080fd5b50610be36004803603810190808035600019169060200190929190505050613d23565b60405180826000191660001916815260200191505060405180910390f35b348015610c0d57600080fd5b50610c306004803603810190808035600019169060200190929190505050613d4b565b604051808215151515815260200191505060405180910390f35b348015610c5657600080fd5b50610c796004803603810190808035600019169060200190929190505050613d80565b604051808b600019166000191681526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018963ffffffff1663ffffffff1681526020018863ffffffff1663ffffffff1681526020018763ffffffff1663ffffffff16815260200186151515158152602001858152602001846000191660001916815260200183600019166000191681526020018281526020019a505050505050505050505060405180910390f35b348015610d4657600080fd5b50610d696004803603810190808035600019169060200190929190505050613e31565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b348015610d9757600080fd5b50610dba6004803603810190808035600019169060200190929190505050613e69565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b610ec6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190803563ffffffff16906020019092919080359060200190929190505050613ea1565b60405180826000191660001916815260200191505060405180910390f35b348015610ef057600080fd5b50610f136004803603810190808035600019169060200190929190505050613eca565b60405180826000191660001916815260200191505060405180910390f35b348015610f3d57600080fd5b50610f606004803603810190808035600019169060200190929190505050613f71565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b348015610f8e57600080fd5b50610fad60048036038101908080359060200190929190505050613fa9565b6040518082815260200191505060405180910390f35b348015610fcf57600080fd5b50610ff26004803603810190808035600019169060200190929190505050613fc1565b60405180826000191660001916815260200191505060405180910390f35b34801561101c57600080fd5b506110a960048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614068565b005b6111056004803603810190808035600019169060200190929190803560001916906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061421d565b005b34801561111357600080fd5b506111366004803603810190808035600019169060200190929190505050614840565b005b34801561114457600080fd5b506111916004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614ad9565b005b34801561119f57600080fd5b506111f060048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506150f7565b005b60008060008060008060008b61120781613a3a565b151561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7175657374696f6e206d7573742062652066696e616c697a656400000000000081525060200191505060405180910390fd5b60008c5111151561131a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f6174206c65617374206f6e6520686973746f7279206861736820656e7472792081526020017f6d7573742062652070726f76696465640000000000000000000000000000000081525060400191505060405180910390fd5b600560008e6000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169750600560008e60001916600019168152602001908152602001600020600101549650600560008e60001916600019168152602001908152602001600020600201549550600460008e60001916600019168152602001908152602001600020600501549450600460008e60001916600019168152602001908152602001600020600401549350600092505b8b5183101561155457611456858d858151811015156113ff57fe5b906020019060200201518b8681518110151561141757fe5b906020019060200201518d8781518110151561142f57fe5b906020019060200201518f8881518110151561144757fe5b906020019060200201516153d3565b915061146b87876156ca90919063ffffffff16565b95506114c28d85888b8f8881518110151561148257fe5b906020019060200201518f8981518110151561149a57fe5b906020019060200201518f8a8151811015156114b257fe5b90602001906020020151896156e8565b809950819750505089838151811015156114d857fe5b906020019060200201519650600460008e60001916600019168152602001908152602001600020600601548714151561152d5761152a60288881151561151a57fe5b048861591f90919063ffffffff16565b96505b8b8381518110151561153b57fe5b90602001906020020151945082806001019350506113e4565b600060010260001916856000191614151561165757600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156115af576115aa8d8988615938565b600095505b87600560008f6000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600560008f600019166000191681526020019081526020016000206001018190555085600560008f60001916600019168152602001908152602001600020600201819055506116ca565b6116748d8961166f8a8a6156ca90919063ffffffff16565b615938565b600560008e60001916600019168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000905550505b84600460008f60001916600019168152602001908152602001600020600501816000191690555050505050505050505050505050565b83600080600060046000856000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff1663ffffffff161115156117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7175657374696f6e206d7573742065786973740000000000000000000000000081525060200191505060405180910390fd5b60046000846000191660001916815260200190815260200160002060020160009054906101000a900460ff16151515611877576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f7175657374696f6e206d757374206e6f742062652070656e64696e672061726281526020017f6974726174696f6e00000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600460008460001916600019168152602001908152602001600020600101601c9054906101000a900463ffffffff169150600063ffffffff168263ffffffff1614806118ce57504263ffffffff168263ffffffff16115b1515611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f66696e616c697a6174696f6e20646561646c696e65206d757374206e6f74206881526020017f617665207061737365640000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60046000846000191660001916815260200190815260200160002060010160149054906101000a900463ffffffff16905060008163ffffffff1614806119ba57504263ffffffff168163ffffffff1611155b1515611a2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f70656e696e672064617465206d75737420686176652070617373656400000081525060200191505060405180910390fd5b86600034111515611aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f626f6e64206d75737420626520706f736974697665000000000000000000000081525060200191505060405180910390fd5b611ad9600260046000846000191660001916815260200190815260200160002060060154615a2390919063ffffffff16565b3410151515611b76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f626f6e64206d75737420626520646f75626c65206174206c656173742070726581526020017f76696f757320626f6e640000000000000000000000000000000000000000000081525060400191505060405180910390fd5b87866000811115611c1857806004600084600019166000191681526020019081526020016000206006015411151515611c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f626f6e64206d75737420657863656564206d61785f70726576696f757300000081525060200191505060405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614151515611cbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f616e737765726572206d757374206265206e6f6e2d7a65726f0000000000000081525060200191505060405180910390fd5b611ccb8a8a89346000615a5e565b611d048a8a600460008e6000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff16615c76565b50505050505050505050565b600085611d1c81613a3a565b1515611d90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7175657374696f6e206d7573742062652066696e616c697a656400000000000081525060200191505060405180910390fd5b60046000886000191660001916815260200190815260200160002060000154600019168660001916141515611e2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f636f6e74656e742068617368206d757374206d6174636800000000000000000081525060200191505060405180910390fd5b60046000886000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515611f0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f61726269747261746f72206d757374206d61746368000000000000000000000081525060200191505060405180910390fd5b60046000886000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff1663ffffffff168463ffffffff1611151515611fc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f74696d656f7574206d757374206265206c6f6e6720656e6f756768000000000081525060200191505060405180910390fd5b600460008860001916600019168152602001908152602001600020600601548311151515612056576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f626f6e64206d757374206265206869676820656e6f756768000000000000000081525060200191505060405180910390fd5b6004600088600019166000191681526020019081526020016000206004015491505095945050505050565b6000600460008360001916600019168152602001908152602001600020600301549050919050565b600060046000836000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600460008360001916600019168152602001908152602001600020600601549050919050565b60008060008060608060608060008098505b8e5189101561237e578e8981518110151561214257fe5b9060200190602002015196508d8981518110151561215c57fe5b906020019060200201519550856040519080825280602002602001820160405280156121975781602001602082028038833980820191505090505b509450856040519080825280602002602001820160405280156121c95781602001602082028038833980820191505090505b509350856040519080825280602002602001820160405280156121fb5781602001602082028038833980820191505090505b5092508560405190808252806020026020018201604052801561222d5781602001602082028038833980820191505090505b509150600090505b85811015612364578c8881518110151561224b57fe5b90602001906020020151858281518110151561226357fe5b9060200190602002019060001916908160001916815250508b8881518110151561228957fe5b9060200190602002015184828151811015156122a157fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508a888151811015156122eb57fe5b90602001906020020151838281518110151561230357fe5b9060200190602002018181525050898881518110151561231f57fe5b90602001906020020151828281518110151561233757fe5b90602001906020020190600019169081600019168152505087806001019850508080600101915050612235565b61237187868686866111f2565b888060010199505061212b565b612386612397565b505050505050505050505050505050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612464573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f4ce7033d118120e254016dccf195288400b28fc8936425acd5f17ce2df3ab708826040518082815260200191505060405180910390a250565b60008085600080600060046000856000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff1663ffffffff16111515612569576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7175657374696f6e206d7573742065786973740000000000000000000000000081525060200191505060405180910390fd5b600460008460001916600019168152602001908152602001600020600101601c9054906101000a900463ffffffff169150600063ffffffff168263ffffffff1614806125c057504263ffffffff168263ffffffff16115b151561265a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f66696e616c697a6174696f6e206465616c696e65206d757374206e6f7420686181526020017f766520706173736564000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60046000846000191660001916815260200190815260200160002060010160149054906101000a900463ffffffff16905060008163ffffffff1614806126ac57504263ffffffff168163ffffffff1611155b1515612720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f70656e696e672064617465206d75737420686176652070617373656400000081525060200191505060405180910390fd5b8787604051602001808360001916600019168152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156127855780518252602082019150602081019050602083039250612760565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209450888587604051602001808460001916600019168152602001836000191660001916815260200182815260200193505050506040516020818303038152906040526040518082805190602001908083835b6020831015156128295780518252602082019150602081019050602083039250612804565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020935060066000856000191660001916815260200190815260200160002060000160049054906101000a900460ff1615151561291f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f636f6d6d69746d656e74206d757374206e6f742068617665206265656e20726581526020017f7665616c6564207965740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b4263ffffffff1660066000866000191660001916815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115156129f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f72657665616c20646561646c696e65206d757374206e6f74206861766520706181526020017f737365640000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b876006600086600019166000191681526020019081526020016000206001018160001916905550600160066000866000191660001916815260200190815260200160002060000160046101000a81548160ff021916908315150217905550600460008a6000191660001916815260200190815260200160002060060154861415612ab457612ab38989600460008d6000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff16615c76565b5b84600019163373ffffffffffffffffffffffffffffffffffffffff168a600019167fa7b2d313bc7a062e30b2c3b811aa4c9faf09755a6b4ea3bf42deff920944332f8b8b8b604051808460001916600019168152602001838152602001828152602001935050505060405180910390a4505050505050505050565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdca703d022171824d3d639b33c1525fd2338120b4cfb89507c0b59596893acda3382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b60036020528060005260406000206000915090505481565b6000600460008360001916600019168152602001908152602001600020600001549050919050565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b80600080600060046000856000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff1663ffffffff16111515612d1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7175657374696f6e206d7573742065786973740000000000000000000000000081525060200191505060405180910390fd5b60046000846000191660001916815260200190815260200160002060020160009054906101000a900460ff16151515612de2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f7175657374696f6e206d757374206e6f742062652070656e64696e672061726281526020017f6974726174696f6e00000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600460008460001916600019168152602001908152602001600020600101601c9054906101000a900463ffffffff169150600063ffffffff168263ffffffff161480612e3957504263ffffffff168263ffffffff16115b1515612ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f66696e616c697a6174696f6e20646561646c696e65206d757374206e6f74206881526020017f617665207061737365640000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60046000846000191660001916815260200190815260200160002060010160149054906101000a900463ffffffff16905060008163ffffffff161480612f2557504263ffffffff168163ffffffff1611155b1515612f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f70656e696e672064617465206d75737420686176652070617373656400000081525060200191505060405180910390fd5b612fca34600460008760001916600019168152602001908152602001600020600301546156ca90919063ffffffff16565b600460008660001916600019168152602001908152602001600020600301819055503373ffffffffffffffffffffffffffffffffffffffff1684600019167f54d68405b79f2aa4fd4e8db7b67844ad254cf8f208aac476c2894134a9deab66346