UNPKG

@daostack/arc-experimental

Version:

A platform for building DAOs

508 lines 50 kB
{ "contractName": "Competition", "abi": [ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "_proposalId", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "_numberOfWinners", "type": "uint256" }, { "indexed": false, "internalType": "uint256[]", "name": "_rewardSplit", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256", "name": "_startTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_votingStartTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_suggestionsEndTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_endTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_maxNumberOfVotesPerVoter", "type": "uint256" }, { "indexed": false, "internalType": "address payable", "name": "_contributionRewardExt", "type": "address" }, { "indexed": false, "internalType": "address", "name": "_admin", "type": "address" } ], "name": "NewCompetitionProposal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "_proposalId", "type": "bytes32" }, { "indexed": true, "internalType": "uint256", "name": "_suggestionId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "_descriptionHash", "type": "string" }, { "indexed": true, "internalType": "address payable", "name": "_beneficiary", "type": "address" } ], "name": "NewSuggestion", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "_proposalId", "type": "bytes32" }, { "indexed": true, "internalType": "uint256", "name": "_suggestionId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "_voter", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_reputation", "type": "uint256" } ], "name": "NewVote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "_proposalId", "type": "bytes32" }, { "indexed": true, "internalType": "uint256", "name": "_suggestionId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_rewardPercentage", "type": "uint256" } ], "name": "Redeem", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "_proposalId", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "_snapshotBlock", "type": "uint256" } ], "name": "SnapshotBlock", "type": "event" }, { "inputs": [], "name": "MAX_NUMBER_OF_WINNERS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REDEMPTION_PERIOD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contributionRewardExt", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_suggestionId", "type": "uint256" } ], "name": "getOrderedIndexOfSuggestion", "outputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "_contributionRewardExt", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "proposals", "outputs": [ { "internalType": "uint256", "name": "numberOfWinners", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "votingStartTime", "type": "uint256" }, { "internalType": "uint256", "name": "suggestionsEndTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "maxNumberOfVotesPerVoter", "type": "uint256" }, { "internalType": "address payable", "name": "contributionRewardExt", "type": "address" }, { "internalType": "uint256", "name": "snapshotBlock", "type": "uint256" }, { "internalType": "uint256", "name": "reputationReward", "type": "uint256" }, { "internalType": "uint256", "name": "ethReward", "type": "uint256" }, { "internalType": "uint256", "name": "nativeTokenReward", "type": "uint256" }, { "internalType": "uint256", "name": "externalTokenReward", "type": "uint256" }, { "internalType": "address", "name": "admin", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_descriptionHash", "type": "string" }, { "internalType": "int256", "name": "_reputationChange", "type": "int256" }, { "internalType": "uint256[3]", "name": "_rewards", "type": "uint256[3]" }, { "internalType": "contract IERC20", "name": "_externalToken", "type": "address" }, { "internalType": "uint256[]", "name": "_rewardSplit", "type": "uint256[]" }, { "internalType": "uint256[5]", "name": "_competitionParams", "type": "uint256[5]" }, { "internalType": "bool", "name": "_proposerIsAdmin", "type": "bool" } ], "name": "proposeCompetition", "outputs": [ { "internalType": "bytes32", "name": "proposalId", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_suggestionId", "type": "uint256" } ], "name": "redeem", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_proposalId", "type": "bytes32" } ], "name": "sendLeftOverFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_proposalId", "type": "bytes32" } ], "name": "setSnapshotBlock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_proposalId", "type": "bytes32" }, { "internalType": "string", "name": "_descriptionHash", "type": "string" }, { "internalType": "address payable", "name": "_beneficiary", "type": "address" } ], "name": "suggest", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "suggestions", "outputs": [ { "internalType": "uint256", "name": "totalVotes", "type": "uint256" }, { "internalType": "bytes32", "name": "proposalId", "type": "bytes32" }, { "internalType": "address payable", "name": "beneficiary", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "suggestionsCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_suggestionId", "type": "uint256" } ], "name": "vote", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b506125ad806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063ae0a97391161008c578063cffc84ba11610066578063cffc84ba14610400578063d5c8cc5214610408578063db006a7514610410578063eba9e6331461042d576100ea565b8063ae0a97391461033b578063bd9317d91461035a578063c4d66de8146103da576100ea565b8063516b9d37116100c8578063516b9d37146101fd5780635d474a00146102f2578063a65cd35a146102fa578063ab4c981c1461031e576100ea565b80630121b93f146100ef578063302a2a461461012057806332ed5b1214610164575b600080fd5b61010c6004803603602081101561010557600080fd5b503561044a565b604080519115158252519081900360200190f35b61013d6004803603602081101561013657600080fd5b503561089e565b6040805193845260208401929092526001600160a01b031682820152519081900360600190f35b6101816004803603602081101561017a57600080fd5b50356108c8565b604051808e81526020018d81526020018c81526020018b81526020018a8152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001838152602001826001600160a01b031681526020019d505050505050505050505050505060405180910390f35b6102e060048036036101a081101561021457600080fd5b81019060208101813564010000000081111561022f57600080fd5b82018360208201111561024157600080fd5b8035906020019184600183028401116401000000008311171561026357600080fd5b9193909282359260208101926001600160a01b0360808301351692909160c081019060a0013564010000000081111561029b57600080fd5b8201836020820111156102ad57600080fd5b803590602001918460208302840111640100000000831117156102cf57600080fd5b919350915060a0810135151561093a565b60408051918252519081900360200190f35b6102e0610f09565b610302610f10565b604080516001600160a01b039092168252519081900360200190f35b6102e06004803603602081101561033457600080fd5b5035610f1f565b6103586004803603602081101561035157600080fd5b5035611044565b005b6102e06004803603606081101561037057600080fd5b8135919081019060408101602082013564010000000081111561039257600080fd5b8201836020820111156103a457600080fd5b803590602001918460018302840111640100000000831117156103c657600080fd5b9193509150356001600160a01b0316611452565b610358600480360360208110156103f057600080fd5b50356001600160a01b0316611670565b6102e0611773565b6102e0611779565b6103586004803603602081101561042657600080fd5b503561177e565b6103586004803603602081101561044357600080fd5b5035611dab565b600081815260346020526040812060010154806104aa576040805162461bcd60e51b81526020600482015260196024820152781cdd59d9d95cdd1a5bdb88191bd95cc81b9bdd08195e1a5cdd603a1b604482015290519081900360640190fd5b6104b381611dab565b60365460408051632d77bef360e11b815290516000926001600160a01b031691635aef7de6916004808301926020929190829003018186803b1580156104f857600080fd5b505afa15801561050c573d6000803e3d6000fd5b505050506040513d602081101561052257600080fd5b50516040805163089ae1c960e41b815290519192506000916001600160a01b038416916389ae1c90916004808301926020929190829003018186803b15801561056a57600080fd5b505afa15801561057e573d6000803e3d6000fd5b505050506040513d602081101561059457600080fd5b505160008481526033602090815260409182902060080154825163277166bf60e11b8152336004820152602481019190915291516001600160a01b0390931692634ee2cd7e926044808201939291829003018186803b1580156105f657600080fd5b505afa15801561060a573d6000803e3d6000fd5b505050506040513d602081101561062057600080fd5b50519050806106605760405162461bcd60e51b815260040180806020018281038252602f815260200180612359602f913960400191505060405180910390fd5b6000838152603360205260409020600581015442106106ba576040805162461bcd60e51b815260206004820152601160248201527018dbdb5c195d1a5d1a5bdb88195b991959607a1b604482015290519081900360640190fd5b600086815260346020908152604080832033845260038101909252909120541561072b576040805162461bcd60e51b815260206004820181905260248201527f616c726561647920766f746564206f6e20746869732073756767657374696f6e604482015290519081900360640190fd5b600682015433600090815260108401602052604090205410610794576040805162461bcd60e51b815260206004820152601e60248201527f657863656564206e756d626572206f6620766f74657320616c6c6f7765640000604482015290519081900360640190fd5b3360009081526010830160205260409020546107b1906001611ed4565b3360009081526010840160205260409020558054156107fc5780546000908152600f830160205260409020546107e8906001611f37565b81546000908152600f840160205260409020555b80546108089084611ed4565b8082556000908152600f83016020526040902054610827906001611ed4565b81546000908152600f84016020908152604080832093909355338252600384019052208390556108578588611f79565b6040805184815290513391899188917fd7d2b1fb5e87b2ff063bc53d745b1f45a5cdbb2f9b277888d590021844fd483e919081900360200190a45060019695505050505050565b6034602052600090815260409020805460018201546002909201549091906001600160a01b031683565b6033602052600090815260409020805460028201546003830154600484015460058501546006860154600787015460088801546009890154600a8a0154600b8b0154600c8c0154600e909c01549a9b999a98999798969795966001600160a01b0395861696949593949293919291168d565b6000838335806109475750425b428110156109865760405162461bcd60e51b815260040180806020018281038252602f8152602001806123e7602f913960400191505060405180910390fd5b60648211156109c65760405162461bcd60e51b815260040180806020018281038252602a81526020018061252b602a913960400191505060405180910390fd5b6040850135602086013510610a0c5760405162461bcd60e51b81526004018080602001828103825260278152602001806124726027913960400191505060405180910390fd5b6020850135811115610a4f5760405162461bcd60e51b81526004018080602001828103825260298152602001806124c76029913960400191505060405180910390fd5b6060850135610a8f5760405162461bcd60e51b81526004018080602001828103825260318152602001806123076031913960400191505060405180910390fd5b604085013560808601351115610ad65760405162461bcd60e51b815260040180806020018281038252603b8152602001806124f0603b913960400191505060405180910390fd5b60808501358110610b185760405162461bcd60e51b815260040180806020018281038252603b815260200180612416603b913960400191505060405180910390fd5b604089013515610b7d576001600160a01b038816610b7d576040805162461bcd60e51b815260206004820152601c60248201527f657874656e616c20746f6b656e2063616e6e6f74206265207a65726f00000000604482015290519081900360640190fd5b60008a1215610bbd5760405162461bcd60e51b815260040180806020018281038252603b815260200180612388603b913960400191505060405180910390fd5b6000805b83811015610bf857610bee898983818110610bd857fe5b9050602002013583611ed490919063ffffffff16565b9150600101610bc1565b5080606414610c4e576040805162461bcd60e51b815260206004820152601f60248201527f746f74616c20726577617264732073706c6974206973206e6f74203130302500604482015290519081900360640190fd5b6036546040516310ca123760e21b8152602481018d90526001600160a01b039091169063432848dc908f908f908f908f908f908790339060048101908190604401866060808284376000838201526001600160a01b03808916601f909201601f19169093019081528683166020820152918516604083015250828103606090810183528101899052608001898980828437600081840152601f19601f82011690508083019250505098505050505050505050602060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505050506040513d6020811015610d4457600080fd5b50516000818152603360205260409020848155909450610d689060010189896122a6565b5060008481526033602090815260408083206002810186905589830135600382015589820135600582015560608a0135600682015560808a01356004820155600981018f90558d35600b820155918d0135600a8301558c0135600c820155600801558415610df2576000848152603360205260409020600e0180546001600160a01b031916331790555b6000848152603360209081526040918290206003810154600482015460058301546006840154603654600e86015488518c81529889018b9052606089018690526080890185905260a0890184905260c089018390526001600160a01b0391821660e08a018190529116610100890181905261012097890188815260019097018054988a018990528d997fcf5b519fd1c8161005ac36adf44ad5e13159b7931b236d11507e30cb053c20f0998e9992988e98909790969095909490939092916101408301908b908015610ee357602002820191906000526020600020905b815481526020019060010190808311610ecf575b50509a505050505050505050505060405180910390a25050509998505050505050505050565b6276a70081565b6036546001600160a01b031681565b60008181526034602052604081206001015480610f7f576040805162461bcd60e51b81526020600482015260196024820152781cdd59d9d95cdd1a5bdb88191bd95cc81b9bdd08195e1a5cdd603a1b604482015290519081900360640190fd5b600081815260336020908152604091829020600d01805483518184028101840190945280845260609392830182828015610fd857602002820191906000526020600020905b815481526020019060010190808311610fc4575b5050505050905060005b815181101561103c576000858152603460208190526040822054845190929085908590811061100d57fe5b60200260200101518152602001908152602001600020600001541115611034576001909301925b600101610fe2565b505050919050565b6000818152603360205260409020600501544290611065906276a700611ed4565b106110b7576040805162461bcd60e51b815260206004820152601d60248201527f726564656d7074696f6e20706572696f64206973207374696c6c206f6e000000604482015290519081900360640190fd5b600081815260336020526040902060060154611114576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b8061115b576040805162461bcd60e51b815260206004820152601260248201527170726f706f73616c4964206973207a65726f60701b604482015290519081900360640190fd5b6036546040805163d8145e2d60e01b8152600481018490529051600092839283926001600160a01b039092169163d8145e2d9160248082019261016092909190829003018186803b1580156111af57600080fd5b505afa1580156111c3573d6000803e3d6000fd5b505050506040513d6101608110156111da57600080fd5b5060c08101516101008201516101209092015160365460408051632d77bef360e11b815290519397509395509093506000926001600160a01b0390911691635aef7de691600480820192602092909190829003018186803b15801561123e57600080fd5b505afa158015611252573d6000803e3d6000fd5b505050506040513d602081101561126857600080fd5b505160365460408051636f4d4abd60e11b8152600481018990526001600160a01b03808516602483015260448201879052915193945091169163de9a957a9160648082019260009290919082900301818387803b1580156112c857600080fd5b505af11580156112dc573d6000803e3d6000fd5b50505050603660009054906101000a90046001600160a01b03166001600160a01b0316632ac8c1b286836001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561133e57600080fd5b505afa158015611352573d6000803e3d6000fd5b505050506040513d602081101561136857600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820187905251606480830192600092919082900301818387803b1580156113bf57600080fd5b505af11580156113d3573d6000803e3d6000fd5b505060365460408051630dd14c3160e31b8152600481018a90526001600160a01b038681166024830152604482018a90529151919092169350636e8a61889250606480830192600092919082900301818387803b15801561143357600080fd5b505af1158015611447573d6000803e3d6000fd5b505050505050505050565b6000848152603360205260408120600e01546001600160a01b0316156114d9576000858152603360205260409020600e01546001600160a01b031633146114d9576040805162461bcd60e51b81526020600482015260166024820152751bdb9b1e4818591b5a5b8818d85b881cdd59d9d95cdd60521b604482015290519081900360640190fd5b60008581526033602052604090206002015442101561153f576040805162461bcd60e51b815260206004820152601b60248201527f636f6d7065746974696f6e206e6f742073746172746564207965740000000000604482015290519081900360640190fd5b600085815260336020526040902060040154421061158e5760405162461bcd60e51b81526004018080602001828103825260238152602001806125556023913960400191505060405180910390fd5b60355461159c906001611ed4565b603581905560009081526034602052604081206001018690556001600160a01b0383166115ca5750336115cd565b50815b6035805460009081526034602090815260409182902060020180546001600160a01b0319166001600160a01b038616908117909155925482518281529182018890529189917fd49d50e437830c78dfc56d998083bd2d5280b983038730ff7ca14c6a329dc549918a918a9181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a45050603554949350505050565b600054610100900460ff16806116895750611689612109565b80611697575060005460ff16155b6116d25760405162461bcd60e51b815260040180806020018281038252602e815260200180612499602e913960400191505060405180910390fd5b600054610100900460ff161580156116fd576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0382166117425760405162461bcd60e51b81526004018080602001828103825260248152602001806123c36024913960400191505060405180910390fd5b603680546001600160a01b0319166001600160a01b038416179055801561176f576000805461ff00191690555b5050565b60355481565b606481565b600081815260346020526040902060010154806117d7576040805162461bcd60e51b815260206004820152601260248201527170726f706f73616c4964206973207a65726f60701b604482015290519081900360640190fd5b60008181526033602052604090208261182e576040805162461bcd60e51b815260206004820152601460248201527373756767657374696f6e4964206973207a65726f60601b604482015290519081900360640190fd5b42816005015410611886576040805162461bcd60e51b815260206004820152601760248201527f636f6d7065746974696f6e206973207374696c6c206f6e000000000000000000604482015290519081900360640190fd5b6005810154429061189a906276a700611ed4565b116118ec576040805162461bcd60e51b815260206004820152601960248201527f726564656d7074696f6e20706572696f64206973206f76657200000000000000604482015290519081900360640190fd5b600081600601541161193f576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b6000838152603460205260409020600201546001600160a01b03166119ab576040805162461bcd60e51b815260206004820152601f60248201527f73756767657374696f6e2077617320616c72656164792072656465656d656400604482015290519081900360640190fd5b6000838152603460205260408120600201546001600160a01b0316906119d085610f1f565b600d8401549091508110611a155760405162461bcd60e51b81526004018080602001828103825260218152602001806123386021913960400191505060405180910390fd5b60008581526034602090815260408083206002810180546001600160a01b0319169055548352600f8601909152812054825b81840181108015611a585750855481105b15611a9357611a89866001018281548110611a6f57fe5b906000526020600020015484611ed490919063ffffffff16565b9250600101611a47565b611a9d838361210f565b8654600d8801549194506000911015611b1857600d87015491505b8654821015611afa57611aed876001018381548110611ad357fe5b906000526020600020015482611ed490919063ffffffff16565b6001909201919050611ab8565b600d870154611b1590611b0e90839061210f565b8590611ed4565b93505b6000611b3c6064611b36878b600c015461215190919063ffffffff16565b9061210f565b60365460408051636f4d4abd60e11b8152600481018d90526001600160a01b038b8116602483015260448201859052915193945091169163de9a957a9160648082019260009290919082900301818387803b158015611b9a57600080fd5b505af1158015611bae573d6000803e3d6000fd5b50505050611bce6064611b36878b6009015461215190919063ffffffff16565b6036546040805163c4a17ec960e01b8152600481018d90526001600160a01b038b8116602483015260448201859052915193945091169163c4a17ec99160648082019260009290919082900301818387803b158015611c2c57600080fd5b505af1158015611c40573d6000803e3d6000fd5b50505050611c606064611b36878b600a015461215190919063ffffffff16565b6036546040805163156460d960e11b8152600481018d90526001600160a01b038b81166024830152604482018590529151939450911691632ac8c1b29160648082019260009290919082900301818387803b158015611cbe57600080fd5b505af1158015611cd2573d6000803e3d6000fd5b50505050611cf26064611b36878b600b015461215190919063ffffffff16565b60365460408051630dd14c3160e31b8152600481018d90526001600160a01b038b81166024830152604482018590529151939450911691636e8a61889160648082019260009290919082900301818387803b158015611d5057600080fd5b505af1158015611d64573d6000803e3d6000fd5b50506040805188815290518d93508c92507febd129592de98831789a95ee9465fa6d4c6cf79d4788ac8d7effc6c8205768d69181900360200190a350505050505050505050565b6000818152603360205260409020600301544211611e10576040805162461bcd60e51b815260206004820152601d60248201527f766f74696e6720706572696f64206e6f74207374617274656420796574000000604482015290519081900360640190fd5b600081815260336020526040902060060154611e6d576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b600081815260336020526040902060080154611ed1576000818152603360209081526040918290204360089091018190558251908152915183927f4169469c5791d1acd84c8c616355c70799ea61c4b680d68e2587e7693259233992908290030190a25b50565b600082820183811015611f2e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000611f2e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121aa565b6000828152603360205260408120600d810180549154909290821015611fed575060005b81811015611fd35783838281548110611fb257fe5b90600052602060002001541415611fcb5750505061176f565b600101611f9d565b825460018101845560008481526020902001849055612102565b506000805b6000868152603360205260409020548210156120a1576034600085838154811061201857fe5b90600052602060002001548152602001908152602001600020600001546034600086858154811061204557fe5b9060005260206000200154815260200190815260200160002060000154101561206f575080612096565b8484838154811061207c57fe5b90600052602060002001541415612096575050505061176f565b600190910190611ff2565b600085815260346020819052604082205486549092908790859081106120c357fe5b9060005260206000200154815260200190815260200160002060000154101561210057848482815481106120f357fe5b6000918252602090912001555b505b5050505050565b303b1590565b6000611f2e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612241565b60008261216057506000611f31565b8282028284828161216d57fe5b0414611f2e5760405162461bcd60e51b81526004018080602001828103825260218152602001806124516021913960400191505060405180910390fd5b600081848411156122395760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121fe5781810151838201526020016121e6565b50505050905090810190601f16801561222b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836122905760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156121fe5781810151838201526020016121e6565b50600083858161229c57fe5b0495945050505050565b8280548282559060005260206000209081019282156122e1579160200282015b828111156122e15782358255916020019190600101906122c6565b506122ed9291506122f1565b5090565b5b808211156122ed57600081556001016122f256fe6d61784e756d6265724f66566f746573506572566f7465722073686f756c642062652067726561746572207468616e203073756767657374696f6e206973206e6f7420696e2077696e6e657273206c697374766f74657220686164206e6f2072657075746174696f6e207768656e20736e617073686f74207761732074616b656e6e656761746976652072657075746174696f6e206368616e6765206973206e6f7420616c6c6f77656420666f72206120636f6d7065746974696f6e636f6e747269627574696f6e5265776172644578742063616e6e6f74206265207a65726f737461727454696d652073686f756c642062652067726561746572207468616e2070726f706f73696e672074696d6573756767657374696f6e73456e6454696d652073686f756c64206265206c61746572207468616e2070726f706f73616c2073746172742074696d65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77766f74696e672073746172742074696d652067726561746572207468616e20656e642074696d65436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564766f74696e672073746172742074696d6520736d616c6c6572207468616e2073746172742074696d6573756767657374696f6e73456e6454696d652073686f756c64206265206561726c696572207468616e2070726f706f73616c20656e642074696d656e756d626572206f662077696e6e6572732067726561746572207468616e206d617820616c6c6f77656473756767657374696f6e73207375626d697373696f6e2074696d65206973206f766572a264697066735822122082593e41c04bba91e83e1153e0aa78435d7739f30b518fcc4204987eaf02d3da64736f6c634300060c0033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063ae0a97391161008c578063cffc84ba11610066578063cffc84ba14610400578063d5c8cc5214610408578063db006a7514610410578063eba9e6331461042d576100ea565b8063ae0a97391461033b578063bd9317d91461035a578063c4d66de8146103da576100ea565b8063516b9d37116100c8578063516b9d37146101fd5780635d474a00146102f2578063a65cd35a146102fa578063ab4c981c1461031e576100ea565b80630121b93f146100ef578063302a2a461461012057806332ed5b1214610164575b600080fd5b61010c6004803603602081101561010557600080fd5b503561044a565b604080519115158252519081900360200190f35b61013d6004803603602081101561013657600080fd5b503561089e565b6040805193845260208401929092526001600160a01b031682820152519081900360600190f35b6101816004803603602081101561017a57600080fd5b50356108c8565b604051808e81526020018d81526020018c81526020018b81526020018a8152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001838152602001826001600160a01b031681526020019d505050505050505050505050505060405180910390f35b6102e060048036036101a081101561021457600080fd5b81019060208101813564010000000081111561022f57600080fd5b82018360208201111561024157600080fd5b8035906020019184600183028401116401000000008311171561026357600080fd5b9193909282359260208101926001600160a01b0360808301351692909160c081019060a0013564010000000081111561029b57600080fd5b8201836020820111156102ad57600080fd5b803590602001918460208302840111640100000000831117156102cf57600080fd5b919350915060a0810135151561093a565b60408051918252519081900360200190f35b6102e0610f09565b610302610f10565b604080516001600160a01b039092168252519081900360200190f35b6102e06004803603602081101561033457600080fd5b5035610f1f565b6103586004803603602081101561035157600080fd5b5035611044565b005b6102e06004803603606081101561037057600080fd5b8135919081019060408101602082013564010000000081111561039257600080fd5b8201836020820111156103a457600080fd5b803590602001918460018302840111640100000000831117156103c657600080fd5b9193509150356001600160a01b0316611452565b610358600480360360208110156103f057600080fd5b50356001600160a01b0316611670565b6102e0611773565b6102e0611779565b6103586004803603602081101561042657600080fd5b503561177e565b6103586004803603602081101561044357600080fd5b5035611dab565b600081815260346020526040812060010154806104aa576040805162461bcd60e51b81526020600482015260196024820152781cdd59d9d95cdd1a5bdb88191bd95cc81b9bdd08195e1a5cdd603a1b604482015290519081900360640190fd5b6104b381611dab565b60365460408051632d77bef360e11b815290516000926001600160a01b031691635aef7de6916004808301926020929190829003018186803b1580156104f857600080fd5b505afa15801561050c573d6000803e3d6000fd5b505050506040513d602081101561052257600080fd5b50516040805163089ae1c960e41b815290519192506000916001600160a01b038416916389ae1c90916004808301926020929190829003018186803b15801561056a57600080fd5b505afa15801561057e573d6000803e3d6000fd5b505050506040513d602081101561059457600080fd5b505160008481526033602090815260409182902060080154825163277166bf60e11b8152336004820152602481019190915291516001600160a01b0390931692634ee2cd7e926044808201939291829003018186803b1580156105f657600080fd5b505afa15801561060a573d6000803e3d6000fd5b505050506040513d602081101561062057600080fd5b50519050806106605760405162461bcd60e51b815260040180806020018281038252602f815260200180612359602f913960400191505060405180910390fd5b6000838152603360205260409020600581015442106106ba576040805162461bcd60e51b815260206004820152601160248201527018dbdb5c195d1a5d1a5bdb88195b991959607a1b604482015290519081900360640190fd5b600086815260346020908152604080832033845260038101909252909120541561072b576040805162461bcd60e51b815260206004820181905260248201527f616c726561647920766f746564206f6e20746869732073756767657374696f6e604482015290519081900360640190fd5b600682015433600090815260108401602052604090205410610794576040805162461bcd60e51b815260206004820152601e60248201527f657863656564206e756d626572206f6620766f74657320616c6c6f7765640000604482015290519081900360640190fd5b3360009081526010830160205260409020546107b1906001611ed4565b3360009081526010840160205260409020558054156107fc5780546000908152600f830160205260409020546107e8906001611f37565b81546000908152600f840160205260409020555b80546108089084611ed4565b8082556000908152600f83016020526040902054610827906001611ed4565b81546000908152600f84016020908152604080832093909355338252600384019052208390556108578588611f79565b6040805184815290513391899188917fd7d2b1fb5e87b2ff063bc53d745b1f45a5cdbb2f9b277888d590021844fd483e919081900360200190a45060019695505050505050565b6034602052600090815260409020805460018201546002909201549091906001600160a01b031683565b6033602052600090815260409020805460028201546003830154600484015460058501546006860154600787015460088801546009890154600a8a0154600b8b0154600c8c0154600e909c01549a9b999a98999798969795966001600160a01b0395861696949593949293919291168d565b6000838335806109475750425b428110156109865760405162461bcd60e51b815260040180806020018281038252602f8152602001806123e7602f913960400191505060405180910390fd5b60648211156109c65760405162461bcd60e51b815260040180806020018281038252602a81526020018061252b602a913960400191505060405180910390fd5b6040850135602086013510610a0c5760405162461bcd60e51b81526004018080602001828103825260278152602001806124726027913960400191505060405180910390fd5b6020850135811115610a4f5760405162461bcd60e51b81526004018080602001828103825260298152602001806124c76029913960400191505060405180910390fd5b6060850135610a8f5760405162461bcd60e51b81526004018080602001828103825260318152602001806123076031913960400191505060405180910390fd5b604085013560808601351115610ad65760405162461bcd60e51b815260040180806020018281038252603b8152602001806124f0603b913960400191505060405180910390fd5b60808501358110610b185760405162461bcd60e51b815260040180806020018281038252603b815260200180612416603b913960400191505060405180910390fd5b604089013515610b7d576001600160a01b038816610b7d576040805162461bcd60e51b815260206004820152601c60248201527f657874656e616c20746f6b656e2063616e6e6f74206265207a65726f00000000604482015290519081900360640190fd5b60008a1215610bbd5760405162461bcd60e51b815260040180806020018281038252603b815260200180612388603b913960400191505060405180910390fd5b6000805b83811015610bf857610bee898983818110610bd857fe5b9050602002013583611ed490919063ffffffff16565b9150600101610bc1565b5080606414610c4e576040805162461bcd60e51b815260206004820152601f60248201527f746f74616c20726577617264732073706c6974206973206e6f74203130302500604482015290519081900360640190fd5b6036546040516310ca123760e21b8152602481018d90526001600160a01b039091169063432848dc908f908f908f908f908f908790339060048101908190604401866060808284376000838201526001600160a01b03808916601f909201601f19169093019081528683166020820152918516604083015250828103606090810183528101899052608001898980828437600081840152601f19601f82011690508083019250505098505050505050505050602060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505050506040513d6020811015610d4457600080fd5b50516000818152603360205260409020848155909450610d689060010189896122a6565b5060008481526033602090815260408083206002810186905589830135600382015589820135600582015560608a0135600682015560808a01356004820155600981018f90558d35600b820155918d0135600a8301558c0135600c820155600801558415610df2576000848152603360205260409020600e0180546001600160a01b031916331790555b6000848152603360209081526040918290206003810154600482015460058301546006840154603654600e86015488518c81529889018b9052606089018690526080890185905260a0890184905260c089018390526001600160a01b0391821660e08a018190529116610100890181905261012097890188815260019097018054988a018990528d997fcf5b519fd1c8161005ac36adf44ad5e13159b7931b236d11507e30cb053c20f0998e9992988e98909790969095909490939092916101408301908b908015610ee357602002820191906000526020600020905b815481526020019060010190808311610ecf575b50509a505050505050505050505060405180910390a25050509998505050505050505050565b6276a70081565b6036546001600160a01b031681565b60008181526034602052604081206001015480610f7f576040805162461bcd60e51b81526020600482015260196024820152781cdd59d9d95cdd1a5bdb88191bd95cc81b9bdd08195e1a5cdd603a1b604482015290519081900360640190fd5b600081815260336020908152604091829020600d01805483518184028101840190945280845260609392830182828015610fd857602002820191906000526020600020905b815481526020019060010190808311610fc4575b5050505050905060005b815181101561103c576000858152603460208190526040822054845190929085908590811061100d57fe5b60200260200101518152602001908152602001600020600001541115611034576001909301925b600101610fe2565b505050919050565b6000818152603360205260409020600501544290611065906276a700611ed4565b106110b7576040805162461bcd60e51b815260206004820152601d60248201527f726564656d7074696f6e20706572696f64206973207374696c6c206f6e000000604482015290519081900360640190fd5b600081815260336020526040902060060154611114576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b8061115b576040805162461bcd60e51b815260206004820152601260248201527170726f706f73616c4964206973207a65726f60701b604482015290519081900360640190fd5b6036546040805163d8145e2d60e01b8152600481018490529051600092839283926001600160a01b039092169163d8145e2d9160248082019261016092909190829003018186803b1580156111af57600080fd5b505afa1580156111c3573d6000803e3d6000fd5b505050506040513d6101608110156111da57600080fd5b5060c08101516101008201516101209092015160365460408051632d77bef360e11b815290519397509395509093506000926001600160a01b0390911691635aef7de691600480820192602092909190829003018186803b15801561123e57600080fd5b505afa158015611252573d6000803e3d6000fd5b505050506040513d602081101561126857600080fd5b505160365460408051636f4d4abd60e11b8152600481018990526001600160a01b03808516602483015260448201879052915193945091169163de9a957a9160648082019260009290919082900301818387803b1580156112c857600080fd5b505af11580156112dc573d6000803e3d6000fd5b50505050603660009054906101000a90046001600160a01b03166001600160a01b0316632ac8c1b286836001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561133e57600080fd5b505afa158015611352573d6000803e3d6000fd5b505050506040513d602081101561136857600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820187905251606480830192600092919082900301818387803b1580156113bf57600080fd5b505af11580156113d3573d6000803e3d6000fd5b505060365460408051630dd14c3160e31b8152600481018a90526001600160a01b038681166024830152604482018a90529151919092169350636e8a61889250606480830192600092919082900301818387803b15801561143357600080fd5b505af1158015611447573d6000803e3d6000fd5b505050505050505050565b6000848152603360205260408120600e01546001600160a01b0316156114d9576000858152603360205260409020600e01546001600160a01b031633146114d9576040805162461bcd60e51b81526020600482015260166024820152751bdb9b1e4818591b5a5b8818d85b881cdd59d9d95cdd60521b604482015290519081900360640190fd5b60008581526033602052604090206002015442101561153f576040805162461bcd60e51b815260206004820152601b60248201527f636f6d7065746974696f6e206e6f742073746172746564207965740000000000604482015290519081900360640190fd5b600085815260336020526040902060040154421061158e5760405162461bcd60e51b81526004018080602001828103825260238152602001806125556023913960400191505060405180910390fd5b60355461159c906001611ed4565b603581905560009081526034602052604081206001018690556001600160a01b0383166115ca5750336115cd565b50815b6035805460009081526034602090815260409182902060020180546001600160a01b0319166001600160a01b038616908117909155925482518281529182018890529189917fd49d50e437830c78dfc56d998083bd2d5280b983038730ff7ca14c6a329dc549918a918a9181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a45050603554949350505050565b600054610100900460ff16806116895750611689612109565b80611697575060005460ff16155b6116d25760405162461bcd60e51b815260040180806020018281038252602e815260200180612499602e913960400191505060405180910390fd5b600054610100900460ff161580156116fd576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0382166117425760405162461bcd60e51b81526004018080602001828103825260248152602001806123c36024913960400191505060405180910390fd5b603680546001600160a01b0319166001600160a01b038416179055801561176f576000805461ff00191690555b5050565b60355481565b606481565b600081815260346020526040902060010154806117d7576040805162461bcd60e51b815260206004820152601260248201527170726f706f73616c4964206973207a65726f60701b604482015290519081900360640190fd5b60008181526033602052604090208261182e576040805162461bcd60e51b815260206004820152601460248201527373756767657374696f6e4964206973207a65726f60601b604482015290519081900360640190fd5b42816005015410611886576040805162461bcd60e51b815260206004820152601760248201527f636f6d7065746974696f6e206973207374696c6c206f6e000000000000000000604482015290519081900360640190fd5b6005810154429061189a906276a700611ed4565b116118ec576040805162461bcd60e51b815260206004820152601960248201527f726564656d7074696f6e20706572696f64206973206f76657200000000000000604482015290519081900360640190fd5b600081600601541161193f576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b6000838152603460205260409020600201546001600160a01b03166119ab576040805162461bcd60e51b815260206004820152601f60248201527f73756767657374696f6e2077617320616c72656164792072656465656d656400604482015290519081900360640190fd5b6000838152603460205260408120600201546001600160a01b0316906119d085610f1f565b600d8401549091508110611a155760405162461bcd60e51b81526004018080602001828103825260218152602001806123386021913960400191505060405180910390fd5b60008581526034602090815260408083206002810180546001600160a01b0319169055548352600f8601909152812054825b81840181108015611a585750855481105b15611a9357611a89866001018281548110611a6f57fe5b906000526020600020015484611ed490919063ffffffff16565b9250600101611a47565b611a9d838361210f565b8654600d8801549194506000911015611b1857600d87015491505b8654821015611afa57611aed876001018381548110611ad357fe5b906000526020600020015482611ed490919063ffffffff16565b6001909201919050611ab8565b600d870154611b1590611b0e90839061210f565b8590611ed4565b93505b6000611b3c6064611b36878b600c015461215190919063ffffffff16565b9061210f565b60365460408051636f4d4abd60e11b8152600481018d90526001600160a01b038b8116602483015260448201859052915193945091169163de9a957a9160648082019260009290919082900301818387803b158015611b9a57600080fd5b505af1158015611bae573d6000803e3d6000fd5b50505050611bce6064611b36878b6009015461215190919063ffffffff16565b6036546040805163c4a17ec960e01b8152600481018d90526001600160a01b038b8116602483015260448201859052915193945091169163c4a17ec99160648082019260009290919082900301818387803b158015611c2c57600080fd5b505af1158015611c40573d6000803e3d6000fd5b50505050611c606064611b36878b600a015461215190919063ffffffff16565b6036546040805163156460d960e11b8152600481018d90526001600160a01b038b81166024830152604482018590529151939450911691632ac8c1b29160648082019260009290919082900301818387803b158015611cbe57600080fd5b505af1158015611cd2573d6000803e3d6000fd5b50505050611cf26064611b36878b600b015461215190919063ffffffff16565b60365460408051630dd14c3160e31b8152600481018d90526001600160a01b038b81166024830152604482018590529151939450911691636e8a61889160648082019260009290919082900301818387803b158015611d5057600080fd5b505af1158015611d64573d6000803e3d6000fd5b50506040805188815290518d93508c92507febd129592de98831789a95ee9465fa6d4c6cf79d4788ac8d7effc6c8205768d69181900360200190a350505050505050505050565b6000818152603360205260409020600301544211611e10576040805162461bcd60e51b815260206004820152601d60248201527f766f74696e6720706572696f64206e6f74207374617274656420796574000000604482015290519081900360640190fd5b600081815260336020526040902060060154611e6d576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b600081815260336020526040902060080154611ed1576000818152603360209081526040918290204360089091018190558251908152915183927f4169469c5791d1acd84c8c616355c70799ea61c4b680d68e2587e7693259233992908290030190a25b50565b600082820183811015611f2e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000611f2e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121aa565b6000828152603360205260408120600d810180549154909290821015611fed575060005b81811015611fd35783838281548110611fb257fe5b90600052602060002001541415611fcb5750505061176f565b600101611f9d565b825460018101845560008481526020902001849055612102565b506000805b6000868152603360205260409020548210156120a1576034600085838154811061201857fe5b90600052602060002001548152602001908152602001600020600001546034600086858154811061204557fe5b9060005260206000200154815260200190815260200160002060000154101561206f575080612096565b8484838154811061207c57fe5b90600052602060002001541415612096575050505061176f565b600190910190611ff2565b600085815260346020819052604082205486549092908790859081106120c357fe5b9060005260206000200154815260200190815260200160002060000154101561210057848482815481106120f357fe5b6000918252602090912001555b505b5050505050565b303b1590565b6000611f2e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612241565b60008261216057506000611f31565b8282028284828161216d57fe5b0414611f2e5760405162461bcd60e51b81526004018080602001828103825260218152602001806124516021913960400191505060405180910390fd5b600081848411156122395760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121fe5781810151838201526020016121e6565b50505050905090810190601f16801561222b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836122905760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156121fe5781810151838201526020016121e6565b50600083858161229c57fe5b0495945050505050565b8280548282559060005260206000209081019282156122e1579160200282015b828111156122e15782358255916020019190600101906122c6565b506122ed9291506122f1565b5090565b5b808211156122ed57600081556001016122f256fe6d61784e756d6265724f66566f746573506572566f7465722073686f756c642062652067726561746572207468616e203073756767657374696f6e206973206e6f7420696e2077696e6e657273206c697374766f74657220686164206e6f2072657075746174696f6e207768656e20736e617073686f74207761732074616b656e6e656761746976652072657075746174696f6e206368616e6765206973206e6f7420616c6c6f77656420666f72206120636f6d7065746974696f6e636f6e747269627574696f6e5265776172644578742063616e6e6f74206265207a65726f737461727454696d652073686f756c642062652067726561746572207468616e2070726f706f73696e672074696d6573756767657374696f6e73456e6454696d652073686f756c64206265206c61746572207468616e2070726f706f73616c2073746172742074696d65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77766f74696e672073746172742074696d652067726561746572207468616e20656e642074696d65436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564766f74696e672073746172742074696d6520736d616c6c6572207468616e2073746172742074696d6573756767657374696f6e73456e6454696d652073686f756c64206265206561726c696572207468616e2070726f706f73616c20656e642074696d656e756d626572206f662077696e6e6572732067726561746572207468616e206d617820616c6c6f77656473756767657374696f6e73207375626d697373696f6e2074696d65206973206f766572a264697066735822122082593e41c04bba91e83e1153e0aa78435d7739f30b518fcc4204987eaf02d3da64736f6c634300060c0033", "linkRe