{
  "contractName": "TokenTrade",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "_decision",
          "type": "int256"
        }
      ],
      "name": "ProposalExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IERC20",
          "name": "_sendToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_sendTokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "contract IERC20",
          "name": "_receiveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_receiveTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "TokenTradeProposalExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_descriptionHash",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IERC20",
          "name": "_sendToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_sendTokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "contract IERC20",
          "name": "_receiveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_receiveTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "TokenTradeProposed",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "internalType": "contract Avatar",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_stakingToken",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "balanceOfStakingToken",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "burnReputation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "execute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "internalType": "int256",
          "name": "_decision",
          "type": "int256"
        }
      ],
      "name": "executeProposal",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "getTotalReputationSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        },
        {
          "internalType": "contract IntVoteInterface",
          "name": "_votingMachine",
          "type": "address"
        },
        {
          "internalType": "uint256[11]",
          "name": "_votingParams",
          "type": "uint256[11]"
        },
        {
          "internalType": "address",
          "name": "_voteOnBehalf",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_voteParamsHash",
          "type": "bytes32"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "mintReputation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "proposals",
      "outputs": [
        {
          "internalType": "address",
          "name": "beneficiary",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "sendToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "sendTokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "receiveToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "receiveTokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "passed",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "decided",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "proposalsBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_sendToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_sendTokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_receiveToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_receiveTokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "_descriptionHash",
          "type": "string"
        }
      ],
      "name": "proposeTokenTrade",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "proposalId",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "reputationOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_stakingToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "stakingTokenTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "voteParamsHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "votingMachine",
      "outputs": [
        {
          "internalType": "contract IntVoteInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611d79806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639588378e11610097578063bea75f2811610066578063bea75f2814610384578063d29b5d2f146103c0578063e751f271146103f2578063f81f8bf61461040f576100f5565b80639588378e146102385780639d4c162d14610264578063b4055b8c1461029b578063b551c37314610367576100f5565b8063540fbeb3116100d3578063540fbeb31461019f5780635aef7de6146101e75780636b8eb403146101ef5780637a5cb92c1461021b576100f5565b806332ed5b12146100fa5780633edf7ca1146101615780634ea2c7ec14610185575b600080fd5b6101176004803603602081101561011057600080fd5b5035610441565b604080516001600160a01b039889168152968816602088015286810195909552929095166060850152608084015292151560a083015291151560c082015290519081900360e00190f35b610169610491565b604080516001600160a01b039092168252519081900360200190f35b61018d6104a0565b60408051918252519081900360200190f35b6101e560048036036101e08110156101b657600080fd5b506001600160a01b038135811691602081013582169160408201916101a0810135909116906101c001356104a6565b005b6101696104e4565b61018d6004803603604081101561020557600080fd5b506001600160a01b0381351690602001356104f3565b61018d6004803603602081101561023157600080fd5b50356105cd565b61018d6004803603604081101561024e57600080fd5b506001600160a01b0381351690602001356105df565b6102876004803603604081101561027a57600080fd5b5080359060200135610710565b604080519115158252519081900360200190f35b61018d600480360360a08110156102b157600080fd5b6001600160a01b0382358116926020810135926040820135909216916060820135919081019060a0810160808201356401000000008111156102f257600080fd5b82018360208201111561030457600080fd5b8035906020019184600183028401116401000000008311171561032657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061087c945050505050565b61018d6004803603602081101561037d57600080fd5b5035610c67565b6102876004803603608081101561039a57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610dc4565b610287600480360360608110156103d657600080fd5b508035906001600160a01b036020820135169060400135610f28565b6101e56004803603602081101561040857600080fd5b5035611083565b6102876004803603606081101561042557600080fd5b508035906001600160a01b036020820135169060400135611501565b6037602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b0394851695938516949293919092169160ff8082169161010090041687565b6034546001600160a01b031681565b60355481565b6104dd85858386600b806020026040519081016040528092919082600b602002808284376000920191909152508891506116279050565b5050505050565b6033546001600160a01b031681565b60345460009082906001600160a01b0316331461054c576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603354604080516370a0823160e01b81526001600160a01b0392831660048201529051918616916370a0823191602480820192602092909190829003018186803b15801561059957600080fd5b505afa1580156105ad573d6000803e3d6000fd5b505050506040513d60208110156105c357600080fd5b5051949350505050565b60366020526000908152604090205481565b60345460009082906001600160a01b03163314610638576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b03166389ae1c906040518163ffffffff1660e01b815260040160206040518083038186803b15801561068657600080fd5b505afa15801561069a573d6000803e3d6000fd5b505050506040513d60208110156106b057600080fd5b505160008481526036602090815260409182902054825163277166bf60e11b81526001600160a01b03898116600483015260248201929092529251931692634ee2cd7e926044808201939291829003018186803b15801561059957600080fd5b60345460009083906001600160a01b03163314610769576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b610771611c66565b50600084815260376020908152604091829020825160e08101845281546001600160a01b03908116825260018084015482169483019490945260028301549482019490945260038201549093166060840152600481015460808401526005015460ff808216151560a085015261010090910416151560c083015284141561080f576000858152603760205260409020600501805460ff191660011790555b600085815260376020908152604091829020600501805461ff0019166101001790556033548251878152925188936001600160a01b03909216927fd2632e80f5364f02aded1c64e8a04637b7c8bb9c2db2bedf4b6ac47c013acbc0928290030190a3506001949350505050565b60006001600160a01b0386161580159061089e57506001600160a01b03841615155b6108ef576040805162461bcd60e51b815260206004820152601e60248201527f546f6b656e2061646472657373206d757374206e6f74206265206e756c6c0000604482015290519081900360640190fd5b6000851180156108ff5750600083115b61093a5760405162461bcd60e51b8152600401808060200182810382526023815260200180611ca36023913960400191505060405180910390fd5b6109556001600160a01b03871633308863ffffffff6118a216565b60345460355460335460408051634439bdaf60e11b81526002600482015260248101939093523360448401526001600160a01b039182166064840152519216916388737b5e916084808201926020929091908290030181600087803b1580156109bd57600080fd5b505af11580156109d1573d6000803e3d6000fd5b505050506040513d60208110156109e757600080fd5b810190808051906020019092919050505090506040518060e00160405280336001600160a01b03168152602001876001600160a01b03168152602001868152602001856001600160a01b03168152602001848152602001600015158152602001600015158152506037600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff021916908315150217905550905050436036600083815260200190815260200160002081905550336001600160a01b031681603360009054906101000a90046001600160a01b03166001600160a01b03167fa8b65a34d8d48dd5c751760a4c3e0a58076df37c4a930ddf02be57f059535acd858a8a8a8a6040518080602001866001600160a01b03166001600160a01b03168152602001858152602001846001600160a01b03166001600160a01b03168152602001838152602001828103825287818151815260200191508051906020019080838360005b83811015610c20578181015183820152602001610c08565b50505050905090810190601f168015610c4d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a495945050505050565b60345460009082906001600160a01b03163314610cc0576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b03166389ae1c906040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0e57600080fd5b505afa158015610d22573d6000803e3d6000fd5b505050506040513d6020811015610d3857600080fd5b5051600084815260366020908152604091829020548251630981b24d60e41b8152600481019190915291516001600160a01b039093169263981b24d0926024808201939291829003018186803b158015610d9157600080fd5b505afa158015610da5573d6000803e3d6000fd5b505050506040513d6020811015610dbb57600080fd5b50519392505050565b60345460009082906001600160a01b03163314610e1d576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6b57600080fd5b505afa158015610e7f573d6000803e3d6000fd5b505050506040513d6020811015610e9557600080fd5b50516040805163dab0efff60e01b81526001600160a01b0389811660048301528881166024830152604482018890529151919092169163dab0efff9160648083019260209291908290030181600087803b158015610ef257600080fd5b505af1158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b50519695505050505050565b60345460009082906001600160a01b03163314610f81576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcf57600080fd5b505afa158015610fe3573d6000803e3d6000fd5b505050506040513d6020811015610ff957600080fd5b50516040805163dea9e24d60e01b8152600481018890526001600160a01b0387811660248301529151919092169163dea9e24d9160448083019260209291908290030181600087803b15801561104e57600080fd5b505af1158015611062573d6000803e3d6000fd5b505050506040513d602081101561107857600080fd5b505195945050505050565b60008181526037602052604090206005810154610100900460ff166110ef576040805162461bcd60e51b815260206004820152601a60248201527f6d757374206265206120646563696465642070726f706f73616c000000000000604482015290519081900360640190fd5b600581015460ff16156113365760335460028201546001830154611127926001600160a01b039182169291169063ffffffff61190216565b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561117557600080fd5b505afa158015611189573d6000803e3d6000fd5b505050506040513d602081101561119f57600080fd5b5051600382015482546004808501546040805163dab0efff60e01b81526001600160a01b0395861693810193909352928416602483015260448201529051919092169163dab0efff9160648083019260209291908290030181600087803b15801561120957600080fd5b505af115801561121d573d6000803e3d6000fd5b505050506040513d602081101561123357600080fd5b50516112705760405162461bcd60e51b8152600401808060200182810382526026815260200180611d1e6026913960400191505060405180910390fd5b80546033546001830154600284015460038501546004860154604080516001600160a01b039586168152602081019490945291841683830152606083015251938216938693909216917f04d310ea86a87276bab720887c4d37967fddfd69b62a952dc35a0bd8314764729181900360800190a4600082815260376020526040812080546001600160a01b03199081168255600182018054821690556002820183905560038201805490911690556004810191909155600501805461ffff191690556114fd565b61133e611c66565b603760008481526020019081526020016000206040518060e00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600282015481526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600482015481526020016005820160009054906101000a900460ff161515151581526020016005820160019054906101000a900460ff161515151581525050905060376000848152602001908152602001600020600080820160006101000a8154906001600160a01b0302191690556001820160006101000a8154906001600160a01b03021916905560028201600090556003820160006101000a8154906001600160a01b03021916905560048201600090556005820160006101000a81549060ff02191690556005820160016101000a81549060ff021916905550506114fb8160000151826040015183602001516001600160a01b03166119029092919063ffffffff16565b505b5050565b60345460009082906001600160a01b0316331461155a576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115a857600080fd5b505afa1580156115bc573d6000803e3d6000fd5b505050506040513d60208110156115d257600080fd5b50516040805163ddbfcc6b60e01b8152600481018890526001600160a01b0387811660248301529151919092169163ddbfcc6b9160448083019260209291908290030181600087803b15801561104e57600080fd5b6001600160a01b038416611682576040805162461bcd60e51b815260206004820152601c60248201527f766f74696e674d616368696e652063616e6e6f74206265207a65726f00000000604482015290519081900360640190fd5b61168b85611954565b603480546001600160a01b0319166001600160a01b03861617905582611899576040516307b4e1e360e01b815284906001600160a01b038216906307b4e1e39085908590600401808361016080838360005b838110156116f55781810151838201526020016116dd565b50505050905001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b15801561173057600080fd5b505afa158015611744573d6000803e3d6000fd5b505050506040513d602081101561175a57600080fd5b505160358190556040805162941a0160e21b81526004810192909252516000916001600160a01b038416916302506804916024808201926101a092909190829003018186803b1580156117ac57600080fd5b505afa1580156117c0573d6000803e3d6000fd5b505050506040513d6101a08110156117d757600080fd5b505190508061189257604051638894c41b60e01b81526001600160a01b03831690638894c41b9086908690600401808361016080838360005b83811015611828578181015183820152602001611810565b50505050905001826001600160a01b03166001600160a01b0316815260200192505050602060405180830381600087803b15801561186557600080fd5b505af1158015611879573d6000803e3d6000fd5b505050506040513d602081101561188f57600080fd5b50505b50506104dd565b50506035555050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526118fc908590611a6c565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114fb908490611a6c565b600054610100900460ff168061196d575061196d611c24565b8061197b575060005460ff16155b6119b65760405162461bcd60e51b815260040180806020018281038252602e815260200180611cc6602e913960400191505060405180910390fd5b600054610100900460ff161580156119e1576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216611a3c576040805162461bcd60e51b815260206004820152601760248201527f536368656d65206d757374206861766520617661746172000000000000000000604482015290519081900360640190fd5b603380546001600160a01b0319166001600160a01b03841617905580156114fd576000805461ff00191690555050565b611a7e826001600160a01b0316611c2a565b611acf576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611b0d5780518252601f199092019160209182019101611aee565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b6f576040519150601f19603f3d011682016040523d82523d6000602084013e611b74565b606091505b509150915081611bcb576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156118fc57808060200190516020811015611be757600080fd5b50516118fc5760405162461bcd60e51b815260040180806020018281038252602a815260200180611cf4602a913960400191505060405180910390fd5b303b1590565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611c5e57508115155b949350505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091529056fe546f6b656e20616d6f756e74206d7573742062652067726561746572207468616e2030436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565646661696c656420746f207472616e7366657220746f6b656e732066726f6d207468652044414fa2646970667358221220c9fdda668780c85bffc12fa5a2f2628e77f5fbfb13871e2aa72dfa021dea7e4264736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80639588378e11610097578063bea75f2811610066578063bea75f2814610384578063d29b5d2f146103c0578063e751f271146103f2578063f81f8bf61461040f576100f5565b80639588378e146102385780639d4c162d14610264578063b4055b8c1461029b578063b551c37314610367576100f5565b8063540fbeb3116100d3578063540fbeb31461019f5780635aef7de6146101e75780636b8eb403146101ef5780637a5cb92c1461021b576100f5565b806332ed5b12146100fa5780633edf7ca1146101615780634ea2c7ec14610185575b600080fd5b6101176004803603602081101561011057600080fd5b5035610441565b604080516001600160a01b039889168152968816602088015286810195909552929095166060850152608084015292151560a083015291151560c082015290519081900360e00190f35b610169610491565b604080516001600160a01b039092168252519081900360200190f35b61018d6104a0565b60408051918252519081900360200190f35b6101e560048036036101e08110156101b657600080fd5b506001600160a01b038135811691602081013582169160408201916101a0810135909116906101c001356104a6565b005b6101696104e4565b61018d6004803603604081101561020557600080fd5b506001600160a01b0381351690602001356104f3565b61018d6004803603602081101561023157600080fd5b50356105cd565b61018d6004803603604081101561024e57600080fd5b506001600160a01b0381351690602001356105df565b6102876004803603604081101561027a57600080fd5b5080359060200135610710565b604080519115158252519081900360200190f35b61018d600480360360a08110156102b157600080fd5b6001600160a01b0382358116926020810135926040820135909216916060820135919081019060a0810160808201356401000000008111156102f257600080fd5b82018360208201111561030457600080fd5b8035906020019184600183028401116401000000008311171561032657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061087c945050505050565b61018d6004803603602081101561037d57600080fd5b5035610c67565b6102876004803603608081101561039a57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610dc4565b610287600480360360608110156103d657600080fd5b508035906001600160a01b036020820135169060400135610f28565b6101e56004803603602081101561040857600080fd5b5035611083565b6102876004803603606081101561042557600080fd5b508035906001600160a01b036020820135169060400135611501565b6037602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b0394851695938516949293919092169160ff8082169161010090041687565b6034546001600160a01b031681565b60355481565b6104dd85858386600b806020026040519081016040528092919082600b602002808284376000920191909152508891506116279050565b5050505050565b6033546001600160a01b031681565b60345460009082906001600160a01b0316331461054c576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603354604080516370a0823160e01b81526001600160a01b0392831660048201529051918616916370a0823191602480820192602092909190829003018186803b15801561059957600080fd5b505afa1580156105ad573d6000803e3d6000fd5b505050506040513d60208110156105c357600080fd5b5051949350505050565b60366020526000908152604090205481565b60345460009082906001600160a01b03163314610638576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b03166389ae1c906040518163ffffffff1660e01b815260040160206040518083038186803b15801561068657600080fd5b505afa15801561069a573d6000803e3d6000fd5b505050506040513d60208110156106b057600080fd5b505160008481526036602090815260409182902054825163277166bf60e11b81526001600160a01b03898116600483015260248201929092529251931692634ee2cd7e926044808201939291829003018186803b15801561059957600080fd5b60345460009083906001600160a01b03163314610769576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b610771611c66565b50600084815260376020908152604091829020825160e08101845281546001600160a01b03908116825260018084015482169483019490945260028301549482019490945260038201549093166060840152600481015460808401526005015460ff808216151560a085015261010090910416151560c083015284141561080f576000858152603760205260409020600501805460ff191660011790555b600085815260376020908152604091829020600501805461ff0019166101001790556033548251878152925188936001600160a01b03909216927fd2632e80f5364f02aded1c64e8a04637b7c8bb9c2db2bedf4b6ac47c013acbc0928290030190a3506001949350505050565b60006001600160a01b0386161580159061089e57506001600160a01b03841615155b6108ef576040805162461bcd60e51b815260206004820152601e60248201527f546f6b656e2061646472657373206d757374206e6f74206265206e756c6c0000604482015290519081900360640190fd5b6000851180156108ff5750600083115b61093a5760405162461bcd60e51b8152600401808060200182810382526023815260200180611ca36023913960400191505060405180910390fd5b6109556001600160a01b03871633308863ffffffff6118a216565b60345460355460335460408051634439bdaf60e11b81526002600482015260248101939093523360448401526001600160a01b039182166064840152519216916388737b5e916084808201926020929091908290030181600087803b1580156109bd57600080fd5b505af11580156109d1573d6000803e3d6000fd5b505050506040513d60208110156109e757600080fd5b810190808051906020019092919050505090506040518060e00160405280336001600160a01b03168152602001876001600160a01b03168152602001868152602001856001600160a01b03168152602001848152602001600015158152602001600015158152506037600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff021916908315150217905550905050436036600083815260200190815260200160002081905550336001600160a01b031681603360009054906101000a90046001600160a01b03166001600160a01b03167fa8b65a34d8d48dd5c751760a4c3e0a58076df37c4a930ddf02be57f059535acd858a8a8a8a6040518080602001866001600160a01b03166001600160a01b03168152602001858152602001846001600160a01b03166001600160a01b03168152602001838152602001828103825287818151815260200191508051906020019080838360005b83811015610c20578181015183820152602001610c08565b50505050905090810190601f168015610c4d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a495945050505050565b60345460009082906001600160a01b03163314610cc0576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b03166389ae1c906040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0e57600080fd5b505afa158015610d22573d6000803e3d6000fd5b505050506040513d6020811015610d3857600080fd5b5051600084815260366020908152604091829020548251630981b24d60e41b8152600481019190915291516001600160a01b039093169263981b24d0926024808201939291829003018186803b158015610d9157600080fd5b505afa158015610da5573d6000803e3d6000fd5b505050506040513d6020811015610dbb57600080fd5b50519392505050565b60345460009082906001600160a01b03163314610e1d576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6b57600080fd5b505afa158015610e7f573d6000803e3d6000fd5b505050506040513d6020811015610e9557600080fd5b50516040805163dab0efff60e01b81526001600160a01b0389811660048301528881166024830152604482018890529151919092169163dab0efff9160648083019260209291908290030181600087803b158015610ef257600080fd5b505af1158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b50519695505050505050565b60345460009082906001600160a01b03163314610f81576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcf57600080fd5b505afa158015610fe3573d6000803e3d6000fd5b505050506040513d6020811015610ff957600080fd5b50516040805163dea9e24d60e01b8152600481018890526001600160a01b0387811660248301529151919092169163dea9e24d9160448083019260209291908290030181600087803b15801561104e57600080fd5b505af1158015611062573d6000803e3d6000fd5b505050506040513d602081101561107857600080fd5b505195945050505050565b60008181526037602052604090206005810154610100900460ff166110ef576040805162461bcd60e51b815260206004820152601a60248201527f6d757374206265206120646563696465642070726f706f73616c000000000000604482015290519081900360640190fd5b600581015460ff16156113365760335460028201546001830154611127926001600160a01b039182169291169063ffffffff61190216565b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561117557600080fd5b505afa158015611189573d6000803e3d6000fd5b505050506040513d602081101561119f57600080fd5b5051600382015482546004808501546040805163dab0efff60e01b81526001600160a01b0395861693810193909352928416602483015260448201529051919092169163dab0efff9160648083019260209291908290030181600087803b15801561120957600080fd5b505af115801561121d573d6000803e3d6000fd5b505050506040513d602081101561123357600080fd5b50516112705760405162461bcd60e51b8152600401808060200182810382526026815260200180611d1e6026913960400191505060405180910390fd5b80546033546001830154600284015460038501546004860154604080516001600160a01b039586168152602081019490945291841683830152606083015251938216938693909216917f04d310ea86a87276bab720887c4d37967fddfd69b62a952dc35a0bd8314764729181900360800190a4600082815260376020526040812080546001600160a01b03199081168255600182018054821690556002820183905560038201805490911690556004810191909155600501805461ffff191690556114fd565b61133e611c66565b603760008481526020019081526020016000206040518060e00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600282015481526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600482015481526020016005820160009054906101000a900460ff161515151581526020016005820160019054906101000a900460ff161515151581525050905060376000848152602001908152602001600020600080820160006101000a8154906001600160a01b0302191690556001820160006101000a8154906001600160a01b03021916905560028201600090556003820160006101000a8154906001600160a01b03021916905560048201600090556005820160006101000a81549060ff02191690556005820160016101000a81549060ff021916905550506114fb8160000151826040015183602001516001600160a01b03166119029092919063ffffffff16565b505b5050565b60345460009082906001600160a01b0316331461155a576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115a857600080fd5b505afa1580156115bc573d6000803e3d6000fd5b505050506040513d60208110156115d257600080fd5b50516040805163ddbfcc6b60e01b8152600481018890526001600160a01b0387811660248301529151919092169163ddbfcc6b9160448083019260209291908290030181600087803b15801561104e57600080fd5b6001600160a01b038416611682576040805162461bcd60e51b815260206004820152601c60248201527f766f74696e674d616368696e652063616e6e6f74206265207a65726f00000000604482015290519081900360640190fd5b61168b85611954565b603480546001600160a01b0319166001600160a01b03861617905582611899576040516307b4e1e360e01b815284906001600160a01b038216906307b4e1e39085908590600401808361016080838360005b838110156116f55781810151838201526020016116dd565b50505050905001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b15801561173057600080fd5b505afa158015611744573d6000803e3d6000fd5b505050506040513d602081101561175a57600080fd5b505160358190556040805162941a0160e21b81526004810192909252516000916001600160a01b038416916302506804916024808201926101a092909190829003018186803b1580156117ac57600080fd5b505afa1580156117c0573d6000803e3d6000fd5b505050506040513d6101a08110156117d757600080fd5b505190508061189257604051638894c41b60e01b81526001600160a01b03831690638894c41b9086908690600401808361016080838360005b83811015611828578181015183820152602001611810565b50505050905001826001600160a01b03166001600160a01b0316815260200192505050602060405180830381600087803b15801561186557600080fd5b505af1158015611879573d6000803e3d6000fd5b505050506040513d602081101561188f57600080fd5b50505b50506104dd565b50506035555050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526118fc908590611a6c565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114fb908490611a6c565b600054610100900460ff168061196d575061196d611c24565b8061197b575060005460ff16155b6119b65760405162461bcd60e51b815260040180806020018281038252602e815260200180611cc6602e913960400191505060405180910390fd5b600054610100900460ff161580156119e1576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216611a3c576040805162461bcd60e51b815260206004820152601760248201527f536368656d65206d757374206861766520617661746172000000000000000000604482015290519081900360640190fd5b603380546001600160a01b0319166001600160a01b03841617905580156114fd576000805461ff00191690555050565b611a7e826001600160a01b0316611c2a565b611acf576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611b0d5780518252601f199092019160209182019101611aee565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b6f576040519150601f19603f3d011682016040523d82523d6000602084013e611b74565b606091505b509150915081611bcb576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156118fc57808060200190516020811015611be757600080fd5b50516118fc5760405162461bcd60e51b815260040180806020018281038252602a815260200180611cf4602a913960400191505060405180910390fd5b303b1590565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611c5e57508115155b949350505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091529056fe546f6b656e20616d6f756e74206d7573742062652067726561746572207468616e2030436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565646661696c656420746f207472616e7366657220746f6b656e732066726f6d207468652044414fa2646970667358221220c9fdda668780c85bffc12fa5a2f2628e77f5fbfb13871e2aa72dfa021dea7e4264736f6c634300060a0033"
}