UNPKG

@gooddollar/goodcontracts

Version:
527 lines 965 kB
{ "contractName": "AbsoluteVote", "abi": [ { "constant": true, "inputs": [ { "name": "", "type": "bytes32" } ], "name": "parameters", "outputs": [ { "name": "precReq", "type": "uint256" }, { "name": "voteOnBehalf", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "proposalsCnt", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "bytes32" } ], "name": "proposals", "outputs": [ { "name": "organizationId", "type": "bytes32" }, { "name": "open", "type": "bool" }, { "name": "callbacks", "type": "address" }, { "name": "numOfChoices", "type": "uint256" }, { "name": "paramsHash", "type": "bytes32" }, { "name": "totalVotes", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_NUM_OF_CHOICES", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "bytes32" } ], "name": "organizations", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "_proposalId", "type": "bytes32" }, { "indexed": false, "name": "_isProxyVote", "type": "bool" } ], "name": "AVVoteProposal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "_proposalId", "type": "bytes32" }, { "indexed": true, "name": "_organization", "type": "address" }, { "indexed": false, "name": "_numOfChoices", "type": "uint256" }, { "indexed": false, "name": "_proposer", "type": "address" }, { "indexed": false, "name": "_paramsHash", "type": "bytes32" } ], "name": "NewProposal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "_proposalId", "type": "bytes32" }, { "indexed": true, "name": "_organization", "type": "address" }, { "indexed": false, "name": "_decision", "type": "uint256" }, { "indexed": false, "name": "_totalReputation", "type": "uint256" } ], "name": "ExecuteProposal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "_proposalId", "type": "bytes32" }, { "indexed": true, "name": "_organization", "type": "address" }, { "indexed": true, "name": "_voter", "type": "address" }, { "indexed": false, "name": "_vote", "type": "uint256" }, { "indexed": false, "name": "_reputation", "type": "uint256" } ], "name": "VoteProposal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "_proposalId", "type": "bytes32" }, { "indexed": true, "name": "_organization", "type": "address" } ], "name": "CancelProposal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "_proposalId", "type": "bytes32" }, { "indexed": true, "name": "_organization", "type": "address" }, { "indexed": true, "name": "_voter", "type": "address" } ], "name": "CancelVoting", "type": "event" }, { "constant": false, "inputs": [ { "name": "_numOfChoices", "type": "uint256" }, { "name": "_paramsHash", "type": "bytes32" }, { "name": "", "type": "address" }, { "name": "_organization", "type": "address" } ], "name": "propose", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_proposalId", "type": "bytes32" }, { "name": "_vote", "type": "uint256" }, { "name": "_amount", "type": "uint256" }, { "name": "_voter", "type": "address" } ], "name": "vote", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_proposalId", "type": "bytes32" } ], "name": "cancelVote", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_proposalId", "type": "bytes32" } ], "name": "execute", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "_proposalId", "type": "bytes32" } ], "name": "getNumberOfChoices", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_proposalId", "type": "bytes32" }, { "name": "_voter", "type": "address" } ], "name": "voteInfo", "outputs": [ { "name": "", "type": "uint256" }, { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_proposalId", "type": "bytes32" }, { "name": "_choice", "type": "uint256" } ], "name": "voteStatus", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_proposalId", "type": "bytes32" } ], "name": "isVotable", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "isAbstainAllow", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [], "name": "getAllowedRangeOfChoices", "outputs": [ { "name": "min", "type": "uint256" }, { "name": "max", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": false, "inputs": [ { "name": "_precReq", "type": "uint256" }, { "name": "_voteOnBehalf", "type": "address" } ], "name": "setParameters", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "_precReq", "type": "uint256" }, { "name": "_voteOnBehalf", "type": "address" } ], "name": "getParametersHash", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "pure", "type": "function" } ], "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"parameters\",\"outputs\":[{\"name\":\"precReq\",\"type\":\"uint256\"},{\"name\":\"voteOnBehalf\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"voteInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalsCnt\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_precReq\",\"type\":\"uint256\"},{\"name\":\"_voteOnBehalf\",\"type\":\"address\"}],\"name\":\"setParameters\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_precReq\",\"type\":\"uint256\"},{\"name\":\"_voteOnBehalf\",\"type\":\"address\"}],\"name\":\"getParametersHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"proposals\",\"outputs\":[{\"name\":\"organizationId\",\"type\":\"bytes32\"},{\"name\":\"open\",\"type\":\"bool\"},{\"name\":\"callbacks\",\"type\":\"address\"},{\"name\":\"numOfChoices\",\"type\":\"uint256\"},{\"name\":\"paramsHash\",\"type\":\"bytes32\"},{\"name\":\"totalVotes\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_vote\",\"type\":\"uint256\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAllowedRangeOfChoices\",\"outputs\":[{\"name\":\"min\",\"type\":\"uint256\"},{\"name\":\"max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isAbstainAllow\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_numOfChoices\",\"type\":\"uint256\"},{\"name\":\"_paramsHash\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"_organization\",\"type\":\"address\"}],\"name\":\"propose\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_NUM_OF_CHOICES\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"cancelVote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"getNumberOfChoices\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"voteStatus\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"organizations\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"isVotable\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"execute\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"_isProxyVote\",\"type\":\"bool\"}],\"name\":\"AVVoteProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_numOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_proposer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_paramsHash\",\"type\":\"bytes32\"}],\"name\":\"NewProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_decision\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_totalReputation\",\"type\":\"uint256\"}],\"name\":\"ExecuteProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_vote\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_reputation\",\"type\":\"uint256\"}],\"name\":\"VoteProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"}],\"name\":\"CancelProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"CancelVoting\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"cancelVote(bytes32)\":{\"details\":\"Cancel the vote of the msg.sender: subtract the reputation amount from the votes and delete the voter from the proposal struct\",\"params\":{\"_proposalId\":\"id of the proposal\"}},\"execute(bytes32)\":{\"details\":\"execute check if the proposal has been decided, and if so, execute the proposal\",\"params\":{\"_proposalId\":\"the id of the proposal\"},\"return\":\"bool true - the proposal has been executed false - otherwise.\"},\"getAllowedRangeOfChoices()\":{\"details\":\"getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.\",\"return\":\"min - minimum number of choices max - maximum number of choices\"},\"getNumberOfChoices(bytes32)\":{\"details\":\"getNumberOfChoices returns the number of choices possible in this proposal excluding the abstain vote (0)\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"uint256 that contains number of choices\"},\"getParametersHash(uint256,address)\":{\"details\":\"hashParameters returns a hash of the given parameters\"},\"isAbstainAllow()\":{\"details\":\"isAbstainAllow returns if the voting machine allow abstain (0)\",\"return\":\"bool true or false\"},\"isVotable(bytes32)\":{\"details\":\"isVotable check if the proposal is votable\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"bool true or false\"},\"propose(uint256,bytes32,address,address)\":{\"details\":\"register a new proposal with the given parameters. Every proposal has a unique ID which is being generated by calculating keccak256 of a incremented counter.\",\"params\":{\"_numOfChoices\":\"number of voting choices\",\"_organization\":\"address\",\"_paramsHash\":\"defined the parameters of the voting machine used for this proposal\"},\"return\":\"proposal's id.\"},\"setParameters(uint256,address)\":{\"details\":\"hash the parameters, save them if necessary, and return the hash value\"},\"vote(bytes32,uint256,uint256,address)\":{\"details\":\"voting function\",\"params\":{\"_amount\":\"the reputation amount to vote with . if _amount == 0 it will use all voter reputation.\",\"_proposalId\":\"id of the proposal\",\"_vote\":\"a value between 0 to and the proposal number of choices.\",\"_voter\":\"voter address\"},\"return\":\"bool true - the proposal has been executed false - otherwise.\"},\"voteInfo(bytes32,address)\":{\"details\":\"voteInfo returns the vote and the amount of reputation of the user committed to this proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\",\"_voter\":\"the address of the voter\"},\"return\":\"uint256 vote - the voters vote uint256 reputation - amount of reputation committed by _voter to _proposalId\"},\"voteStatus(bytes32,uint256)\":{\"details\":\"voteStatus returns the reputation voted for a proposal for a specific voting choice.\",\"params\":{\"_choice\":\"the index in the\",\"_proposalId\":\"the ID of the proposal\"},\"return\":\"voted reputation for the given choice\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@daostack/infra/contracts/votingMachines/AbsoluteVote.sol\":\"AbsoluteVote\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzzr://7f219e1874d4f1aea860cc665b75015797f55f149e9bf490abab5d7ad2adfeb9\"]},\"@daostack/infra/contracts/votingMachines/AbsoluteVote.sol\":{\"keccak256\":\"0x5e6a9d2d70bd86115d82abc3b294672cddc7f49f0dbad93af28c5e0133a3586e\",\"urls\":[\"bzzr://18390bb9edc33902d8c3e9116796d8ace27bd42f1bbec6404d67ffe34a9f9b1f\"]},\"@daostack/infra/contracts/votingMachines/IntVoteInterface.sol\":{\"keccak256\":\"0x877991da94b1fe9c2accf69367b32fff474c4e4f7897e9cf5a61fa5d1378908f\",\"urls\":[\"bzzr://a7bb7b3a39a1553cb39378801976c8b192b801f9627098385eca24e62440826b\"]},\"@daostack/infra/contracts/votingMachines/ProposalExecuteInterface.sol\":{\"keccak256\":\"0xb80a153793e1723b35e70ba1c3800975fbc1fae63c989cfb8134a4e58085e181\",\"urls\":[\"bzzr://e5ff7e9f77e596fff366bb31326a7d2ca82d0fdeed1d612c09589eb9fb69d9bf\"]},\"@daostack/infra/contracts/votingMachines/VotingMachineCallbacksInterface.sol\":{\"keccak256\":\"0xec215d305f0aa5a5193b6f0302a1aa6bb84e85460167f80b261faf9d30564563\",\"urls\":[\"bzzr://baae21ef9ee3e315191aece7767d3a9ab62810aff5063ad144cb2120eebdabf0\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzzr://08894efa2a557982070beda6a81a032407e70532d24bdafe80d39660c74904d9\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b506110ae806100206000396000f3fe608060405234801561001057600080fd5b5060043610610128576000357c01000000000000000000000000000000000000000000000000000000009004806351d997b2116100bf578063a003651d1161008e578063a003651d14610337578063b451291314610354578063ba51b14e14610377578063c0835106146103b0578063e751f271146103cd57610128565b806351d997b2146102ce57806388737b5e146102d65780638d22651e146103105780639525c0cc1461031857610128565b8063289647e4116100fb578063289647e4146101f657806332ed5b1214610222578063359afa491461027a5780635142bc1e146102c657610128565b8063025068041461012d578063119ce91b1461016b57806321b4b3dc146101b057806323d840f5146101ca575b600080fd5b61014a6004803603602081101561014357600080fd5b50356103ea565b60408051928352600160a060020a0390911660208301528051918290030190f35b6101976004803603604081101561018157600080fd5b5080359060200135600160a060020a031661040c565b6040805192835260208301919091528051918290030190f35b6101b861045d565b60408051918252519081900360200190f35b6101b8600480360360408110156101e057600080fd5b5080359060200135600160a060020a0316610463565b6101b86004803603604081101561020c57600080fd5b5080359060200135600160a060020a03166104ee565b61023f6004803603602081101561023857600080fd5b5035610533565b604080519687529415156020870152600160a060020a03909316858501526060850191909152608084015260a0830152519081900360c00190f35b6102b26004803603608081101561029057600080fd5b5080359060208101359060408101359060600135600160a060020a0316610573565b604080519115158252519081900360200190f35b610197610622565b6102b261062a565b6101b8600480360360808110156102ec57600080fd5b50803590602081013590600160a060020a036040820135811691606001351661062f565b6101b8610891565b6103356004803603602081101561032e57600080fd5b5035610896565b005b6101b86004803603602081101561034d57600080fd5b50356108c7565b6101b86004803603604081101561036a57600080fd5b50803590602001356108dc565b6103946004803603602081101561038d57600080fd5b50356108fd565b60408051600160a060020a039092168252519081900360200190f35b6102b2600480360360208110156103c657600080fd5b5035610918565b6102b2600480360360208110156103e357600080fd5b5035610931565b60006020819052908152604090208054600190910154600160a060020a031682565b600080610417611036565b5050506000828152600160208181526040808420600160a060020a0386168552600601825292839020835180850190945280548085529201549201829052909250929050565b60035481565b6000606483111580156104765750600083115b151561048157600080fd5b600061048d84846104ee565b604080518082018252958652600160a060020a0394851660208088019182526000848152908190529190912095518655516001909501805473ffffffffffffffffffffffffffffffffffffffff191695909416949094179092555090919050565b60408051602080820194909452600160a060020a03929092166c0100000000000000000000000002828201528051808303603401815260549092019052805191012090565b60016020819052600091825260409091208054918101546002820154600383015460049093015460ff831693610100909304600160a060020a0316929086565b600084815260016020819052604082200154859060ff16151561059557600080fd5b60008681526001602052604090206105ab611036565b50600381015460009081526020818152604080832081518083019092528054825260010154600160a060020a0316918101829052919015610606576020820151600160a060020a031633146105ff57600080fd5b5084610609565b50335b61061589828a8a610965565b9998505050505050505050565b6000600a9091565b600190565b600083815260208190526040812054811061064957600080fd5b60008511801561065a5750600a8511155b151561066557600080fd5b600354604080516c01000000000000000000000000300260208083019190915260348083018590528351808403909101815260549092019092528051910120906106b690600163ffffffff610c0816565b6003556106c161104d565b606081018781526080820187815233604080850182815281516c01000000000000000000000000938402602082810191909152600160a060020a038b8116909502603483015283516028818403018152604890920184528151918101919091208752600181880181815260008a81528284528581208a5180825592519381018054965189166101000274ffffffffffffffffffffffffffffffffffffffff001995151560ff1990981697909717949094169590951790925596516002808501919091559551600384015560a0880151600490930192909255948152929093529190205416151561082457600160a060020a03841615156107ed5780516000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff191633179055610824565b80516000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790555b80516000908152600260209081526040918290205482518a815233928101929092528183018990529151600160a060020a039092169184917f75b4ff136cc5de5957574c797de3334eb1c141271922b825eb071e0487ba2c5c919081900360600190a35095945050505050565b600a81565b60008181526001602081905260409091200154819060ff1615156108b957600080fd5b6108c38233610c21565b5050565b60009081526001602052604090206002015490565b60009182526001602090815260408084209284526005909201905290205490565b600260205260009081526040902054600160a060020a031681565b6000908152600160208190526040909120015460ff1690565b600081815260016020819052604082200154829060ff16151561095357600080fd5b61095c83610d26565b91505b50919050565b6000848152600160205260408120600281015484111561098457600080fd5b6001810154604080517f9588378e000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152602482018a90529151600093610100900490921691639588378e91604480820192602092909190829003018186803b1580156109fb57600080fd5b505afa158015610a0f573d6000803e3d6000fd5b505050506040513d6020811015610a2557600080fd5b5051905060008111610a9857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5f766f746572206d75737420686176652072657075746174696f6e0000000000604482015290519081900360640190fd5b83811015610aa557600080fd5b83801515610ab05750805b600160a060020a038716600090815260068401602052604090206001015415610add57610add8888610c21565b6000868152600584016020526040902054610aff90829063ffffffff610c0816565b60008781526005850160205260409020556004830154610b2690829063ffffffff610c0816565b60048401556040805180820182528781526020808201848152600160a060020a03808c16600081815260068a0185528681209551865592516001909501949094558754825260028352908490205484518b8152928301869052845193949116928c927f066c061a3792cb3eb64a441a928655fcbafb4a54b49725fe9cd2951df5e7189e92908290030190a460408051600160a060020a0389163314158152905189917fe715e19c865cb724f3c292cc2fffc24d9cdd398e179fb366f008cc73028e1c52919081900360200190a2610bfc88610d26565b98975050505050505050565b600082820183811015610c1a57600080fd5b9392505050565b6000828152600160205260409020610c37611036565b50600160a060020a03821660009081526006820160209081526040808320815180830183528154808252600190920154818501819052918552600586019093529220549091610c8c919063ffffffff610fa516565b815160009081526005840160209081526040909120919091558101516004830154610cbc9163ffffffff610fa516565b6004830155600160a060020a03808416600081815260068501602090815260408083208381556001018390558654835260029091528082205490519293169187917f0ecab23267930de581498fac1af19a95c888ec6583921ee9c47473e16245d3c891a450505050565b600081815260016020819052604082200154829060ff161515610d4857600080fd5b60008381526001602081815260408084209283015481517fb551c373000000000000000000000000000000000000000000000000000000008152600481018990529151939493610100909104600160a060020a03169263b551c3739260248082019391829003018186803b158015610dbf57600080fd5b505afa158015610dd3573d6000803e3d6000fd5b505050506040513d6020811015610de957600080fd5b505160038301546000908152602081905260408120549192505b60028401548111610f985760008181526005850160205260409020546064840483021015610f9057610e3361104d565b506040805160c08101825285548152600186015460ff8116151560208301526101009004600160a060020a0316918101919091526002850154606082015260038501546080820152600485015460a0820152610e8e88610fba565b80516000908152600260209081526040918290205482518581529182018790528251600160a060020a03909116928b927f37471b9c9d295ffb1309ad070b8964700bfb7b555e8e8292d0b6cbc7dba35d10929081900390910190a38060400151600160a060020a0316639d4c162d89846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050602060405180830381600087803b158015610f5757600080fd5b505af1158015610f6b573d6000803e3d6000fd5b505050506040513d6020811015610f8157600080fd5b5051965061095f945050505050565b600101610e03565b5060009695505050505050565b600082821115610fb457600080fd5b50900390565b6000818152600160205260408120905b60028201548111610fee576000818152600583016020526040812055600101610fca565b505060009081526001602081905260408220828155908101805474ffffffffffffffffffffffffffffffffffffffffff19169055600281018290556003810182905560040155565b604080518082019091526000808252602082015290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529056fea165627a7a72305820ff1c11a11cf3590584d367a53dd17ef3cd7f6895bf5bac1795fcfe740f3889ed0029", "deployedBytecode": "0x608060405234801561001057600080fd5b5060043610610128576000357c01000000000000000000000000000000000000000000000000000000009004806351d997b2116100bf578063a003651d1161008e578063a003651d14610337578063b451291314610354578063ba51b14e14610377578063c0835106146103b0578063e751f271146103cd57610128565b806351d997b2146102ce57806388737b5e146102d65780638d22651e146103105780639525c0cc1461031857610128565b8063289647e4116100fb578063289647e4146101f657806332ed5b1214610222578063359afa491461027a5780635142bc1e146102c657610128565b8063025068041461012d578063119ce91b1461016b57806321b4b3dc146101b057806323d840f5146101ca575b600080fd5b61014a6004803603602081101561014357600080fd5b50356103ea565b60408051928352600160a060020a0390911660208301528051918290030190f35b6101976004803603604081101561018157600080fd5b5080359060200135600160a060020a031661040c565b6040805192835260208301919091528051918290030190f35b6101b861045d565b60408051918252519081900360200190f35b6101b8600480360360408110156101e057600080fd5b5080359060200135600160a060020a0316610463565b6101b86004803603604081101561020c57600080fd5b5080359060200135600160a060020a03166104ee565b61023f6004803603602081101561023857600080fd5b5035610533565b604080519687529415156020870152600160a060020a03909316858501526060850191909152608084015260a0830152519081900360c00190f35b6102b26004803603608081101561029057600080fd5b5080359060208101359060408101359060600135600160a060020a0316610573565b604080519115158252519081900360200190f35b610197610622565b6102b261062a565b6101b8600480360360808110156102ec57600080fd5b50803590602081013590600160a060020a036040820135811691606001351661062f565b6101b8610891565b6103356004803603602081101561032e57600080fd5b5035610896565b005b6101b86004803603602081101561034d57600080fd5b50356108c7565b6101b86004803603604081101561036a57600080fd5b50803590602001356108dc565b6103946004803603602081101561038d57600080fd5b50356108fd565b60408051600160a060020a039092168252519081900360200190f35b6102b2600480360360208110156103c657600080fd5b5035610918565b6102b2600480360360208110156103e357600080fd5b5035610931565b60006020819052908152604090208054600190910154600160a060020a031682565b600080610417611036565b5050506000828152600160208181526040808420600160a060020a0386168552600601825292839020835180850190945280548085529201549201829052909250929050565b60035481565b6000606483111580156104765750600083115b151561048157600080fd5b600061048d84846104ee565b604080518082018252958652600160a060020a0394851660208088019182526000848152908190529190912095518655516001909501805473ffffffffffffffffffffffffffffffffffffffff191695909416949094179092555090919050565b60408051602080820194909452600160a060020a03929092166c0100000000000000000000000002828201528051808303603401815260549092019052805191012090565b60016020819052600091825260409091208054918101546002820154600383015460049093015460ff831693610100909304600160a060020a0316929086565b600084815260016020819052604082200154859060ff16151561059557600080fd5b60008681526001602052604090206105ab611036565b50600381015460009081526020818152604080832081518083019092528054825260010154600160a060020a0316918101829052919015610606576020820151600160a060020a031633146105ff57600080fd5b5084610609565b50335b61061589828a8a610965565b9998505050505050505050565b6000600a9091565b600190565b600083815260208190526040812054811061064957600080fd5b60008511801561065a5750600a8511155b151561066557600080fd5b600354604080516c01000000000000000000000000300260208083019190915260348083018590528351808403909101815260549092019092528051910120906106b690600163ffffffff610c0816565b6003556106c161104d565b606081018781526080820187815233604080850182815281516c01000000000000000000000000938402602082810191909152600160a060020a038b8116909502603483015283516028818403018152604890920184528151918101919091208752600181880181815260008a81528284528581208a5180825592519381018054965189166101000274ffffffffffffffffffffffffffffffffffffffff001995151560ff1990981697909717949094169590951790925596516002808501919091559551600384015560a0880151600490930192909255948152929093529190205416151561082457600160a060020a03841615156107ed5780516000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff191633179055610824565b80516000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790555b80516000908152600260209081526040918290205482518a815233928101929092528183018990529151600160a060020a039092169184917f75b4ff136cc5de5957574c797de3334eb1c141271922b825eb071e0487ba2c5c919081900360600190a35095945050505050565b600a81565b60008181526001602081905260409091200154819060ff1615156108b957600080fd5b6108c38233610c21565b5050565b60009081526001602052604090206002015490565b60009182526001602090815260408084209284526005909201905290205490565b600260205260009081526040902054600160a060020a031681565b6000908152600160208190526040909120015460ff1690565b600081815260016020819052604082200154829060ff16151561095357600080fd5b61095c83610d26565b91505b50919050565b6000848152600160205260408120600281015484111561098457600080fd5b6001810154604080517f9588378e000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152602482018a90529151600093610100900490921691639588378e91604480820192602092909190829003018186803b1580156109fb57600080fd5b505afa158015610a0f573d6000803e3d6000fd5b505050506040513d6020811015610a2557600080fd5b5051905060008111610a9857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5f766f746572206d75737420686176652072657075746174696f6e0000000000604482015290519081900360640190fd5b83811015610aa557600080fd5b83801515610ab05750805b600160a060020a038716600090815260068401602052604090206001015415610add57610add8888610c21565b6000868152600584016020526040902054610aff90829063ffffffff610c0816565b60008781526005850160205260409020556004830154610b2690829063ffffffff610c0816565b60048401556040805180820182528781526020808201848152600160a060020a03808c16600081815260068a0185528681209551865592516001909501949094558754825260028352908490205484518b8152928301869052845193949116928c927f066c061a3792cb3eb64a441a928655fcbafb4a54b49725fe9cd2951df5e7189e92908290030190a460408051600160a060020a0389163314158152905189917fe715e19c865cb724f3c292cc2fffc24d9cdd398e179fb366f008cc73028e1c52919081900360200190a2610bfc88610d26565b98975050505050505050565b600082820183811015610c1a57600080fd5b9392505050565b6000828152600160205260409020610c37611036565b50600160a060020a03821660009081526006820160209081526040808320815180830183528154808252600190920154818501819052918552600586019093529220549091610c8c919063ffffffff610fa516565b815160009081526005840160209081526040909120919091558101516004830154610cbc9163ffffffff610fa516565b6004830155600160a060020a03808416600081815260068501602090815260408083208381556001018390558654835260029091528082205490519293169187917f0ecab23267930de581498fac1af19a95c888ec6583921ee9c47473e16245d3c891a450505050565b600081815260016020819052604082200154829060ff161515610d4857600080fd5b60008381526001602081815260408084209283015481517fb551c373000000000000000000000000000000000000000000000000000000008152600481018990529151939493610100909104600160a060020a03169263b551c3739260248082019391829003018186803b158015610dbf57600080fd5b505afa158015610dd3573d6000803e3d6000fd5b505050506040513d6020811015610de957600080fd5b505160038301546000908152602081905260408120549192505b60028401548111610f985760008181526005850160205260409020546064840483021015610f9057610e3361104d565b506040805160c08101825285548152600186015460ff8116151560208301526101009004600160a060020a0316918101919091526002850154606082015260038501546080820152600485015460a0820152610e8e88610fba565b80516000908152600260209081526040918290205482518581529182018790528251600160a060020a03909116928b927f37471b9c9d295ffb1309ad070b8964700bfb7b555e8e8292d0b6cbc7dba35d10929081900390910190a38060400151600160a060020a0316639d4c162d89846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050602060405180830381600087803b158015610f5757600080fd5b505af1158015610f6b573d6000803e3d6000fd5b505050506040513d6020811015610f8157600080fd5b5051965061095f945050505050565b600101610e03565b5060009695505050505050565b600082821115610fb457600080fd5b50900390565b6000818152600160205260408120905b60028201548111610fee576000818152600583016020526040812055600101610fca565b505060009081526001602081905260408220828155908101805474ffffffffffffffffffffffffffffffffffffffffff19169055600281018290556003810182905560040155565b604080518082019091526000808252602082015290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529056fea165627a7a72305820ff1c11a11cf3590584d367a53dd17ef3cd7f6895bf5bac1795fcfe740f3889ed0029", "sourceMap": "237:11657:55:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;237:11657:55;;;;;;;", "deployedSourceMap": "237:11657:55:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;237:11657:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1146:46;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1146:46:55;;:::i;:::-;;;;;;;-1:-1:-1;;;;;1146:46:55;;;;;;;;;;;;;;;;5870:211;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5870:211:55;;;;;;-1:-1:-1;;;;;5870:211:55;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1456:27;;;:::i;:::-;;;;;;;;;;;;;;;;7433:392;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7433:392:55;;;;;;-1:-1:-1;;;;;7433:392:55;;:::i;7913:173::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7913:173:55;;;;;;-1:-1:-1;;;;;7913:173:55;;:::i;1238:43::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1238:43:55;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;1238:43:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3813:608;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;3813:608:55;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3813:608:55;;:::i;:::-;;;;;;;;;;;;;;;;;;7198:131;;;:::i;6904:82::-;;;:::i;2118:1282::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;2118:1282:55;;;;;;;;-1:-1:-1;;;;;2118:1282:55;;;;;;;;;;;;:::i;1403:47::-;;;:::i;4624:131::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4624:131:55;;:::i;:::-;;5385:139;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5385:139:55;;:::i;6341:150::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6341:150:55;;;;;;;:::i;1350:46::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1350:46:55;;:::i;:::-;;;;-1:-1:-1;;;;;1350:46:55;;;;;;;;;;;;;;6653:120;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6653:120:55;;:::i;5019:127::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5019:127:55;;:::i;1146:46::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1146:46:55;;:::o;5870:211::-;5947:4;5953;5969:18;;:::i;:::-;-1:-1:-1;;;5990:22:55;;;;:9;:22;;;;;;;;-1:-1:-1;;;;;5990:37:55;;;;:29;;:37;;;;;;5969:58;;;;;;;;;;;;;;;;;;;;;;5870:211;;;;;:::o;1456:27::-;;;;:::o;7433:392::-;7512:7;7551:3;7539:8;:15;;:31;;;;;7569:1;7558:8;:12;7539:31;7531:40;;;;;;;;7581:24;7608:42;7626:8;7636:13;7608:17;:42::i;:::-;7691:94;;;;;;;;;;;-1:-1:-1;;;;;7691:94:55;;;;;;;;;;-1:-1:-1;7660:28:55;;;;;;;;;;;:125;;;;;;;;;;;-1:-1:-1;;7660:125:55;;;;;;;;;;;;-1:-1:-1;7660:28:55;;7433:392;-1:-1:-1;7433:392:55:o;7913:173::-;8037:41;;;;;;;;;;;-1:-1:-1;;;;;8037:41:55;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;8037:41:55;;;;;;8027:52;;;;;;7913:173::o;1238:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1238:43:55;;;;:::o;3813:608::-;3991:4;1660:22;;;:9;:22;;;;;;;:27;;3962:11;;1660:27;;1652:36;;;;;;;;4016:25;4044:22;;;:9;:22;;;;;4076:24;;:::i;:::-;-1:-1:-1;4114:19:55;;;;4103:10;:31;;;;;;;;;;;4076:58;;;;;;;;;;;;;;;-1:-1:-1;;;;;4076:58:55;;;;;;;;4103:10;4171:33;4167:183;;4242:19;;;;-1:-1:-1;;;;;4228:33:55;:10;:33;4220:42;;;;;;-1:-1:-1;4284:6:55;4167:183;;;-1:-1:-1;4329:10:55;4167:183;4366:48;4379:11;4392:5;4399;4406:7;4366:12;:48::i;:::-;4359:55;3813:608;-1:-1:-1;;;;;;;;;3813:608:55:o;7198:131::-;7256:11;1448:2;7198:131;;:::o;6904:82::-;6975:4;6904:82;:::o;2118:1282::-;2244:7;2328:23;;;;;;;;;;:31;:35;-1:-1:-1;2320:44:55;;;;;;2398:1;2382:13;:17;:56;;;;;1448:2;2403:13;:35;;2382:56;2374:65;;;;;;;;2536:12;;2513:36;;;;2530:4;2513:36;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2513:36:55;;;;;;;2503:47;;;;;;2575:19;;2592:1;2575:19;:16;:19;:::i;:::-;2560:12;:34;2630:24;;:::i;:::-;2664:21;;;:37;;;2711:19;;;:33;;;2775:10;2754:18;;;;:31;;;2831:43;;;;;;-1:-1:-1;2831:43:55;;;;;;;-1:-1:-1;;;;;2831:43:55;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;2831:43:55;;;;;;2821:54;;;;;;;;;2795:80;;2901:4;2885:13;;;:20;;;-1:-1:-1;2915:21:55;;;;;;;;;:32;;;;;;;;;;;;;;;;;;-1:-1:-1;;2915:32:55;;;-1:-1:-1;;2915:32:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2961:38;;;;;;;;;;;;:52;2957:292;;;-1:-1:-1;;;;;3033:27:55;;;3029:210;;;3094:23;;3080:38;;;;:13;:38;;;;;:51;;-1:-1:-1;;3080:51:55;3121:10;3080:51;;;3029:210;;;3184:23;;3170:38;;;;:13;:38;;;;;:54;;-1:-1:-1;;3170:54:55;-1:-1:-1;;;;;3170:54:55;;;;;3029:210;3301:23;;3287:38;;;;:13;:38;;;;;;;;;;3263:103;;;;;3342:10;3263:103;;;;;;;;;;;;;;;-1:-1:-1;;;;;3287:38:55;;;;3275:10;;3263:103;;;;;;;;;;-1:-1:-1;3383:10:55;2118:1282;-1:-1:-1;;;;;2118:1282:55:o;1403:47::-;1448:2;1403:47;:::o;4624:131::-;1660:22;;;;:9;:22;;;;;;;;:27;;4682:11;;1660:27;;1652:36;;;;;;;;4705:43;4724:11;4737:10;4705:18;:43::i;:::-;4624:131;;:::o;5385:139::-;5456:7;5482:22;;;:9;:22;;;;;:35;;;;5385:139::o;6341:150::-;6421:7;6447:22;;;:9;:22;;;;;;;;:37;;;:28;;;;:37;;;;;;6341:150::o;1350:46::-;;;;;;;;;;;;-1:-1:-1;;;;;1350:46:55;;:::o;6653:120::-;6715:4;6739:22;;;:9;:22;;;;;;;;:27;;;;;6653:120::o;5019:127::-;5095:4;1660:22;;;:9;:22;;;;;;;:27;;5074:11;;1660:27;;1652:36;;;;;;;;5118:21;5127:11;5118:8;:21::i;:::-;5111:28;;1698:1;5019:127;;;;:::o;10554:1338::-;10659:4;10703:22;;;:9;:22;;;;;10781:21;;;;10772:30;;;10764:39;;;;;;10912:18;;;;10880:85;;;;;;-1:-1:-1;;;;;10880:85:55;;;;;;;;;;;;;;;-1:-1:-1;;10912:18:55;;;;;;;10880:64;;:85;;;;;;;;;;;;;;;10912:18;10880:85;;;5:2:-1;;;;30:1;27;20:12;5:2;10880:85:55;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10880:85:55;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10880:85:55;;-1:-1:-1;10996:1:55;10983:14;;10975:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11047:18;;;;11039:27;;;;;;11090:4;11108:8;;11104:55;;;-1:-1:-1;11138:10:55;11104:55;-1:-1:-1;;;;;11239:23:55;;;;;;:15;;;:23;;;;;:34;;;:39;11235:109;;11294:39;11313:11;11326:6;11294:18;:39::i;:::-;11415:21;;;;:14;;;:21;;;;;;11407:30;;:3;;:30;:7;:30;:::i;:::-;11383:21;;;;:14;;;:21;;;;;:54;11477:19;;;;11469:28;;:3;;:28;:7;:28;:::i;:::-;11447:19;;;:50;11533:71;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11507:23:55;;;-1:-1:-1;11507:23:55;;;:15;;;:23;;;;;:97;;;;;;;;;;;;;;11677:23;;11663:38;;:13;:38;;;;;;;11637:85;;;;;;;;;;;;;11507:23;;11663:38;;;11650:11;;11637:85;;;;;;;;;11737:51;;;-1:-1:-1;;;;;11766:20:55;;11776:10;11766:20;;11737:51;;;;11752:11;;11737:51;;;;;;;;;;11864:21;11873:11;11864:8;:21::i;:::-;11857:28;10554:1338;-1:-1:-1;;;;;;;;10554:1338:55:o;1431:145:67:-;1489:7;1520:5;;;1543:6;;;;1535:15;;;;;;1568:1;1431:145;-1:-1:-1;;;1431:145:67:o;8092:487:55:-;8176:25;8204:22;;;:9;:22;;;;;8236:18;;:::i;:::-;-1:-1:-1;;;;;;8257:23:55;;;;;;:15;;;:23;;;;;;;;8236:44;;;;;;;;;;;;;;;;;;;;;;;8320:26;;;:14;;;:26;;;;;;8236:44;;8319:50;;8320:26;8319:50;:32;:50;:::i;:::-;8305:10;;8290:26;;;;:14;;;:26;;;;;;;;:79;;;;8427:16;;;8402:19;;;;8401:43;;;:25;:43;:::i;:::-;8379:19;;;:65;-1:-1:-1;;;;;8461:23:55;;;;;;;:15;;;:23;;;;;;;;8454:30;;;;;;;;8539:23;;8525:38;;:13;:38;;;;;;;8499:73;;8461:23;;8525:38;;8512:11;;8499:73;;;8092:487;;;;:::o;9128:909::-;9205:4;1660:22;;;:9;:22;;;;;;;:27;;9184:11;;1660:27;;1652:36;;;;;;;;9221:25;9249:22;;;:9;:22;;;;;;;;9347:18;;;;9315:89;;;;;;;;;;;;;9249:22;;9221:25;9347:18;;;;-1:-1:-1;;;;;9347:18:55;;9315:76;;:89;;;;;;;;;;;9347:18;9315:89;;;5:2:-1;;;;30:1;27;20:12;5:2;9315:89:55;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9315:89:55;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9315:89:55;9443:19;;;;9414:15;9432:31;;;9315:89;9432:31;;;;;;:39;9315:89;;-1:-1:-1;9526:483:55;9555:21;;;;9548:28;;9526:483;;9603:19;;;;:14;;;:19;;;;;;9642:3;9626:19;;9625:29;;-1:-1:-1;9599:400:55;;;9674:27;;:::i;:::-;-1:-1:-1;9674:38:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9674:38:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9730:27;9745:11;9730:14;:27::i;:::-;9823:26;;9809:41;;;;:13;:41;;;;;;;;;;9780:93;;;;;;;;;;;;;-1:-1:-1;;;;;9809:41:55;;;;9796:11;;9780:93;;;;;;;;;;;9923:11;:21;;;-1:-1:-1;;;;;9898:63:55;;9962:11;9979:3;9898:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9898:86:55;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9898:86:55;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9898:86:55;;-1:-1:-1;9891:93:55;;-1:-1:-1;;;;;9891:93:55;9599:400;9578:5;;9526:483;;;-1:-1:-1;10025:5:55;;9128:909;-1:-1:-1;;;;;;9128:909:55:o;1205:145:67:-;1263:7;1290:6;;;;1282:15;;;;;;-1:-1:-1;1319:5:67;;;1205:145::o;8585:279:55:-;8649:25;8677:22;;;:9;:22;;;;;;8709:110;8738:21;;;;8731:28;;8709:110;;8789:19;;;;:14;;;:19;;;;;8782:26;8761:5;;8709:110;;;-1:-1:-1;;8835:22:55;;;;:9;:22;;;;;;;8828:29;;;;;;;;-1:-1:-1;;8828:29:55;;;;;;;;;;;;;;;;;;8585:279::o;237:11657::-;;;;;;;;;;-1:-1:-1;237:11657:55;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;237:11657:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o", "source": "pragma solidity ^0.5.4;\n\nimport \"../Reputation.sol\";\nimport \"./IntVoteInterface.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"./VotingMachineCallbacksInterface.sol\";\nimport \"./ProposalExecuteInterface.sol\";\n\n\ncontract AbsoluteVote is IntVoteInterface {\n using SafeMath for uint;\n\n struct Parameters {\n uint256 precReq; // how many percentages required for the proposal to be passed\n address voteOnBehalf; //if this address is set so only this address is allowed\n // to vote of behalf of someone else.\n }\n\n struct Voter {\n uint256 vote; // 0 - 'abstain'\n uint256 reputation; // amount of voter's reputation\n }\n\n struct Proposal {\n bytes32 organizationId; // the organization Id\n bool open; // voting open flag\n address callbacks;\n uint256 numOfChoices;\n bytes32 paramsHash; // the hash of the parameters of the proposal\n uint256 totalVotes;\n mapping(uint=>uint) votes;\n mapping(address=>Voter) voters;\n }\n\n event AVVoteProposal(bytes32 indexed _proposalId, bool _isProxyVote);\n\n mapping(bytes32=>Parameters) public parameters; // A mapping from hashes to parameters\n mapping(bytes32=>Proposal) public proposals; // Mapping from the ID of the proposal to the proposal itself.\n mapping(bytes32=>address) public organizations;\n\n uint256 public constant MAX_NUM_OF_CHOICES = 10;\n uint256 public proposalsCnt; // Total amount of proposals\n\n /**\n * @dev Check that the proposal is votable (open and not executed yet)\n */\n modifier votable(bytes32 _proposalId) {\n require(proposals[_proposalId].open);\n _;\n }\n\n /**\n * @dev register a new proposal with the given parameters. Every proposal has a unique ID which is being\n * generated by calculating keccak256 of a incremented counter.\n * @param _numOfChoices number of voting choices\n * @param _paramsHash defined the parameters of the voting machine used for this proposal\n * @param _organization address\n * @return proposal's id.\n */\n function propose(uint256 _numOfChoices, bytes32 _paramsHash, address, address _organization)\n external\n returns(bytes32)\n {\n // Check valid params and number of choices:\n require(parameters[_paramsHash].precReq > 0);\n require(_numOfChoices > 0 && _numOfChoices <= MAX_NUM_OF_CHOICES);\n // Generate a unique ID:\n bytes32 proposalId = keccak256(abi.encodePacked(this, proposalsCnt));\n proposalsCnt = proposalsCnt.add(1);\n // Open proposal:\n Proposal memory proposal;\n