More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 52 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Reward | 10688232 | 1650 days ago | IN | 0 ETH | 0.01164589 | ||||
Reward | 10642716 | 1657 days ago | IN | 0 ETH | 0.01773114 | ||||
Reward | 10597330 | 1664 days ago | IN | 0 ETH | 0.00440655 | ||||
Reward | 10551991 | 1671 days ago | IN | 0 ETH | 0.00555938 | ||||
Reward | 10506694 | 1678 days ago | IN | 0 ETH | 0.00556065 | ||||
Get DAI Points T... | 10504521 | 1678 days ago | IN | 0 ETH | 0.0209963 | ||||
Reward | 10461589 | 1685 days ago | IN | 0 ETH | 0.00304262 | ||||
Reward | 10416302 | 1692 days ago | IN | 0 ETH | 0.00283278 | ||||
Get DAI Points T... | 10413162 | 1692 days ago | IN | 0 ETH | 0.02082248 | ||||
Reward | 10371008 | 1699 days ago | IN | 0 ETH | 0.0040918 | ||||
Reward | 10325815 | 1706 days ago | IN | 0 ETH | 0.00398688 | ||||
Get DAI Points T... | 10283147 | 1712 days ago | IN | 0 ETH | 0.0170252 | ||||
Reward | 10280572 | 1713 days ago | IN | 0 ETH | 0.00304262 | ||||
Reward | 10280525 | 1713 days ago | IN | 0 ETH | 0.00293736 | ||||
Get DAI Points | 10225396 | 1721 days ago | IN | 0 ETH | 0.00997689 | ||||
Reward | 10224808 | 1721 days ago | IN | 0 ETH | 0.00472131 | ||||
Reward | 10179655 | 1728 days ago | IN | 0 ETH | 0.00325245 | ||||
Get DAI Points T... | 10153045 | 1732 days ago | IN | 0 ETH | 0.0112949 | ||||
Get DAI Points T... | 10140110 | 1734 days ago | IN | 0 ETH | 0.01360343 | ||||
Reward | 10134565 | 1735 days ago | IN | 0 ETH | 0.00430163 | ||||
Get DAI Points T... | 10090182 | 1742 days ago | IN | 0 ETH | 0.01146337 | ||||
Reward | 10089553 | 1742 days ago | IN | 0 ETH | 0.00398688 | ||||
Get DAI Points T... | 10089396 | 1742 days ago | IN | 0 ETH | 0.00102288 | ||||
Get DAI Points T... | 10089395 | 1742 days ago | IN | 0 ETH | 0.00102288 | ||||
Get DAI Points T... | 10089393 | 1742 days ago | IN | 0 ETH | 0.00102288 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
DAIPointsToken
Compiler Version
v0.5.2+commit.1df8f40c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-02-10 */ // File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see `ERC20Detailed`. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through `transferFrom`. This is * zero by default. * * This value changes when `approve` or `transferFrom` are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * > Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an `Approval` event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to `approve`. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol pragma solidity ^0.5.0; /** * @dev Implementation of the `IERC20` interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using `_mint`. * For a generic mechanism see `ERC20Mintable`. * * *For a detailed writeup see our guide [How to implement supply * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).* * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an `Approval` event is emitted on calls to `transferFrom`. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard `decreaseAllowance` and `increaseAllowance` * functions have been added to mitigate the well-known issues around setting * allowances. See `IERC20.approve`. */ contract ERC20 is IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; /** * @dev See `IERC20.totalSupply`. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev See `IERC20.balanceOf`. */ function balanceOf(address account) public view returns (uint256) { return _balances[account]; } /** * @dev See `IERC20.transfer`. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public returns (bool) { _transfer(msg.sender, recipient, amount); return true; } /** * @dev See `IERC20.allowance`. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See `IERC20.approve`. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public returns (bool) { _approve(msg.sender, spender, value); return true; } /** * @dev See `IERC20.transferFrom`. * * Emits an `Approval` event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of `ERC20`; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `value`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount)); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to `approve` that can be used as a mitigation for * problems described in `IERC20.approve`. * * Emits an `Approval` event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to `approve` that can be used as a mitigation for * problems described in `IERC20.approve`. * * Emits an `Approval` event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue)); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to `transfer`, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a `Transfer` event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a `Transfer` event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destoys `amount` tokens from `account`, reducing the * total supply. * * Emits a `Transfer` event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 value) internal { require(account != address(0), "ERC20: burn from the zero address"); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an `Approval` event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 value) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = value; emit Approval(owner, spender, value); } /** * @dev Destoys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See `_burn` and `_approve`. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount)); } } // File: openzeppelin-solidity/contracts/utils/Address.sol pragma solidity ^0.5.0; /** * @dev Collection of functions related to the address type, */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // File: contracts/ERC677.sol pragma solidity 0.5.2; contract ERC677 is ERC20 { event ContractFallback(bool success, bytes data); event Transfer(address indexed from, address indexed to, uint value, bytes data); function transferAndCall(address _to, uint _value, bytes calldata _data) external returns (bool) { require(_to != address(this)); _transfer(msg.sender, _to, _value); emit Transfer(msg.sender, _to, _value, _data); if (Address.isContract(_to)) { require(contractFallback(_to, _value, _data)); } return true; } function contractFallback(address _to, uint _value, bytes memory _data) private returns(bool) { (bool success, bytes memory data) = _to.call(abi.encodeWithSignature("onTokenTransfer(address,uint256,bytes)", msg.sender, _value, _data)); emit ContractFallback(success, data); return success; } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol pragma solidity ^0.5.0; /** * @dev Optional functions from the ERC20 standard. */ contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of * these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. * * > Note that this information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * `IERC20.balanceOf` and `IERC20.transfer`. */ function decimals() public view returns (uint8) { return _decimals; } } // File: openzeppelin-solidity/contracts/access/Roles.sol pragma solidity ^0.5.0; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } // File: openzeppelin-solidity/contracts/access/roles/MinterRole.sol pragma solidity ^0.5.0; contract MinterRole { using Roles for Roles.Role; event MinterAdded(address indexed account); event MinterRemoved(address indexed account); Roles.Role private _minters; constructor () internal { _addMinter(msg.sender); } modifier onlyMinter() { require(isMinter(msg.sender), "MinterRole: caller does not have the Minter role"); _; } function isMinter(address account) public view returns (bool) { return _minters.has(account); } function addMinter(address account) public onlyMinter { _addMinter(account); } function renounceMinter() public { _removeMinter(msg.sender); } function _addMinter(address account) internal { _minters.add(account); emit MinterAdded(account); } function _removeMinter(address account) internal { _minters.remove(account); emit MinterRemoved(account); } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol pragma solidity ^0.5.0; /** * @dev Extension of `ERC20` that adds a set of accounts with the `MinterRole`, * which have permission to mint (create) new tokens as they see fit. * * At construction, the deployer of the contract is the only minter. */ contract ERC20Mintable is ERC20, MinterRole { /** * @dev See `ERC20._mint`. * * Requirements: * * - the caller must have the `MinterRole`. */ function mint(address account, uint256 amount) public onlyMinter returns (bool) { _mint(account, amount); return true; } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol pragma solidity ^0.5.0; /** * @dev Extension of `ERC20` that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ contract ERC20Burnable is ERC20 { /** * @dev Destoys `amount` tokens from the caller. * * See `ERC20._burn`. */ function burn(uint256 amount) public { _burn(msg.sender, amount); } /** * @dev See `ERC20._burnFrom`. */ function burnFrom(address account, uint256 amount) public { _burnFrom(account, amount); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol pragma solidity ^0.5.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be aplied to your functions to restrict their use to * the owner. */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * > Note: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/compound/ICErc20.sol /** Copyright 2019 PoolTogether LLC This file is part of PoolTogether. PoolTogether is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation under version 3 of the License. PoolTogether is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PoolTogether. If not, see <https://www.gnu.org/licenses/>. */ pragma solidity 0.5.2; contract ICErc20 { address public underlying; function mint(uint256 mintAmount) external returns (uint); function balanceOfUnderlying(address owner) external view returns (uint); function redeemUnderlying(uint256 redeemAmount) external returns (uint); function getAccountSnapshot(address account) external view returns (uint, uint, uint, uint); } // File: contracts/DAIPointsToken.sol pragma solidity 0.5.2; /** * @title DAIPoints token contract * @author LiorRabin */ contract DAIPointsToken is ERC677, ERC20Detailed, ERC20Mintable, ERC20Burnable, Ownable { using SafeMath for uint256; uint256 public constant DECIMALS = 10 ** 18; IERC20 public dai; ICErc20 public compound; uint256 public daiToDaipConversionRate = 100; address public bridge; uint256 public fee; constructor (address _dai, address _compound) public ERC20Detailed('DAIPoints', 'DAIp', 18) { setDAI(_dai); setCompound(_compound); } /** * @dev Function to be called by owner only to set the DAI token address * @param _address DAI token address */ function setDAI(address _address) public onlyOwner { require(_address != address(0) && Address.isContract(_address)); dai = IERC20(_address); } /** * @dev Function to be called by owner only to set the Compound address * @param _address Compound address */ function setCompound(address _address) public onlyOwner { require(_address != address(0) && Address.isContract(_address)); compound = ICErc20(_address); } /** * @dev Function to be called by owner only to set the fee * @param _fee Fee amount */ function setFee(uint256 _fee) public onlyOwner { require(fee <= DECIMALS); fee = _fee; } /** * @dev Function to be called by owner only to set the bridge address * @param _address bridge address */ function setBridge(address _address) public onlyOwner { require(_address != address(0) && Address.isContract(_address)); bridge = _address; } /** * @dev Function to be called by owner only to set the DAI to DAIPoints conversion rate * @param _rate amount of DAIPoints equal to 1 DAI */ function setConversionRate(uint256 _rate) public onlyOwner { require(_rate > 0); daiToDaipConversionRate = _rate; } /** * @dev Get DAIPoints (minted) in exchange for DAI, according to the conversion rate * @param _amount amount (in wei) of DAI to be transferred from msg.sender balance to this contract's balance */ function getDAIPoints(uint256 _amount) public bridgeExists returns(bool) { getDAIPointsToAddress(_amount, msg.sender); } /** * @dev Get DAIPoints (minted) in exchange for DAI and send to specific address, according to the conversion rate * @param _amount amount (in wei) of DAI to be transferred from msg.sender balance to this contract's balance * @param _recipient address address to receive the _amount */ function getDAIPointsToAddress(uint256 _amount, address _recipient) public bridgeExists returns(bool) { // Transfer DAI into this contract require(dai.transferFrom(msg.sender, address(this), _amount), "DAI/transferFrom"); // Mint DAIPoints uint256 daipAmount = _amount.mul(daiToDaipConversionRate); _mint(address(this), daipAmount); // Transfer DAIPoints (on other side) to _recipient using the bridge require(ERC677(address(this)).transferAndCall(bridge, daipAmount, abi.encodePacked(_recipient)), "DAIPoints/transferAndCall"); // Deposit into Compound require(dai.approve(address(compound), _amount), "DAI/approve"); require(compound.mint(_amount) == 0, "Compound/mint"); return true; } /** * @dev Override ERC20 transfer function * @param _recipient address to receive the _amount exchanged into DAI * @param _amount amount (in wei) of DAIPoints to be exchanged into DAI and transferred to _recipient */ function transfer(address _recipient, uint256 _amount) public returns (bool) { uint256 daiAmount = _amount.div(daiToDaipConversionRate); // Withdraw from Compound and transfer require(compound.redeemUnderlying(daiAmount) == 0, "Compound/redeemUnderlying"); // Burn DAIPoints _burn(msg.sender, _amount); // Transfer DAI to the recipient require(dai.approve(address(this), daiAmount), "DAI/approve"); require(dai.transferFrom(address(this), _recipient, daiAmount), "DAI/transferFrom"); return true; } /** * @dev Function to be called by owner only to reward DAIPoints (per DAI interest in Compound) * @param _winner address to receive reward */ function reward(address _winner) public onlyOwner bridgeExists { // Calculate the gross winnings, fee and reward amount (in DAI) uint256 grossWinningsAmount = _grossWinnings(); uint256 rewardAmount = grossWinningsAmount.mul(DECIMALS.sub(fee)).div(DECIMALS); uint256 feeAmount = grossWinningsAmount.sub(rewardAmount); // Mint DAIPoints uint256 daipRewardAmount = rewardAmount.mul(daiToDaipConversionRate); _mint(address(this), daipRewardAmount); // Transfer reward (on other side) to the winner using the bridge require(ERC677(address(this)).transferAndCall(bridge, daipRewardAmount, abi.encodePacked(_winner)), "DAIPoints/transferAndCall"); // Transfer fee (in DAI) to the owner if (feeAmount > 0) { // Withdraw from Compound and transfer require(compound.redeemUnderlying(feeAmount) == 0, "Compound/redeemUnderlying"); // Transfer DAI to the recipient require(dai.approve(address(this), feeAmount), "DAI/approve"); require(dai.transferFrom(address(this), owner(), feeAmount), "DAI/transferFrom"); } } function _grossWinnings() private view returns(uint256) { (uint256 error, uint256 compoundBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = compound.getAccountSnapshot(address(this)); require(error == 0); uint256 compoundValue = compoundBalance.mul(exchangeRateMantissa).div(1e18); uint256 totalSupply = ERC20(address(this)).totalSupply().div(daiToDaipConversionRate); return compoundValue.sub(totalSupply); } /** * @dev This modifier verifies that the change initiated has not been finalized yet */ modifier bridgeExists() { require(bridge != address(0)); _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"daiToDaipConversionRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"DECIMALS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"amount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_recipient","type":"address"}],"name":"getDAIPointsToAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_winner","type":"address"}],"name":"reward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setBridge","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"getDAIPoints","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setDAI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_rate","type":"uint256"}],"name":"setConversionRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bridge","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dai","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_dai","type":"address"},{"name":"_compound","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"success","type":"bool"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ContractFallback","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
60806040526064600a553480156200001657600080fd5b5060405160408062003005833981018060405260408110156200003857600080fd5b508051602091820151604080518082018252600981527f444149506f696e747300000000000000000000000000000000000000000000008186019081528251808401909352600483527f4441497000000000000000000000000000000000000000000000000000000000958301959095528051939492939092601291620000c291600391620004ae565b508151620000d8906004906020850190620004ae565b506005805460ff191660ff92909216919091179055506200010490503364010000000062000180810204565b60078054600160a060020a031916331790819055604051600160a060020a0391909116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36200016482640100000000620001d2810204565b62000178816401000000006200029d810204565b505062000550565b6200019b600682640100000000620027be6200036882021704565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b620001e56401000000006200040f810204565b15156200024257604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201819052602482015260008051602062002fc3833981519152604482015290519081900360640190fd5b600160a060020a038116158015906200026f57506200026f8164010000000062001eff6200042182021704565b15156200027b57600080fd5b60088054600160a060020a031916600160a060020a0392909216919091179055565b620002b06401000000006200040f810204565b15156200030d57604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201819052602482015260008051602062002fc3833981519152604482015290519081900360640190fd5b600160a060020a038116158015906200033a57506200033a8164010000000062001eff6200042182021704565b15156200034657600080fd5b60098054600160a060020a031916600160a060020a0392909216919091179055565b6200037d828264010000000062000429810204565b15620003ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600754600160a060020a031633145b90565b6000903b1190565b6000600160a060020a03821615156200048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062002fe36022913960400191505060405180910390fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004f157805160ff191683800117855562000521565b8280016001018555821562000521579182015b828111156200052157825182559160200191906001019062000504565b506200052f92915062000533565b5090565b6200041e91905b808211156200052f57600081556001016200053a565b612a6380620005606000396000f3fe608060405234801561001057600080fd5b50600436106102205760003560e060020a900480638da5cb5b11610129578063aa271e1a116100b1578063ddca3f4311610080578063ddca3f43146106df578063e78cea92146106e7578063f2fde38b146106ef578063f4b9fa7514610715578063f69e20461461071d57610220565b8063aa271e1a14610648578063b97dbf591461066e578063d2e8049414610694578063dd62ed3e146106b157610220565b806397c3c52d116100f857806397c3c52d146105a5578063983b2d56146105c257806398650275146105e8578063a457c2d7146105f0578063a9059cbb1461061c57610220565b80638da5cb5b1461054b5780638dd148021461056f5780638f32d59b1461059557806395d89b411461059d57610220565b80634000aea0116101ac5780636353586b1161017b5780636353586b146104ae57806369fe0e2d146104d457806370a08231146104f1578063715018a61461051757806379cc67901461051f57610220565b80634000aea0146103b457806340c10f191461043957806342966c681461046557806344ecf9d11461048257610220565b8063265cd8bd116101f3578063265cd8bd146103325780632be682d41461033a5780632e0f262514610362578063313ce5671461036a578063395093511461038857610220565b806306fdde0314610225578063095ea7b3146102a257806318160ddd146102e257806323b872dd146102fc575b600080fd5b61022d610725565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ce600480360360408110156102b857600080fd5b50600160a060020a0381351690602001356107bb565b604080519115158252519081900360200190f35b6102ea6107d2565b60408051918252519081900360200190f35b6102ce6004803603606081101561031257600080fd5b50600160a060020a038135811691602081013590911690604001356107d8565b6102ea61082f565b6103606004803603602081101561035057600080fd5b5035600160a060020a0316610835565b005b6102ea6108d7565b6103726108e3565b6040805160ff9092168252519081900360200190f35b6102ce6004803603604081101561039e57600080fd5b50600160a060020a0381351690602001356108ec565b6102ce600480360360608110156103ca57600080fd5b600160a060020a03823516916020810135918101906060810160408201356401000000008111156103fa57600080fd5b82018360208201111561040c57600080fd5b8035906020019184600183028401116401000000008311171561042e57600080fd5b509092509050610928565b6102ce6004803603604081101561044f57600080fd5b50600160a060020a038135169060200135610a2c565b6103606004803603602081101561047b57600080fd5b5035610a81565b6102ce6004803603604081101561049857600080fd5b5080359060200135600160a060020a0316610a8e565b610360600480360360208110156104c457600080fd5b5035600160a060020a0316610f24565b610360600480360360208110156104ea57600080fd5b503561148a565b6102ea6004803603602081101561050757600080fd5b5035600160a060020a03166114f2565b61036061150d565b6103606004803603604081101561053557600080fd5b50600160a060020a0381351690602001356115b0565b6105536115be565b60408051600160a060020a039092168252519081900360200190f35b6103606004803603602081101561058557600080fd5b5035600160a060020a03166115cd565b6102ce61166f565b61022d611680565b6102ce600480360360208110156105bb57600080fd5b50356116e1565b610360600480360360208110156105d857600080fd5b5035600160a060020a031661170b565b61036061175d565b6102ce6004803603604081101561060657600080fd5b50600160a060020a038135169060200135611768565b6102ce6004803603604081101561063257600080fd5b50600160a060020a0381351690602001356117a4565b6102ce6004803603602081101561065e57600080fd5b5035600160a060020a0316611a97565b6103606004803603602081101561068457600080fd5b5035600160a060020a0316611aaa565b610360600480360360208110156106aa57600080fd5b5035611b4c565b6102ea600480360360408110156106c757600080fd5b50600160a060020a0381358116916020013516611baa565b6102ea611bd5565b610553611bdb565b6103606004803603602081101561070557600080fd5b5035600160a060020a0316611bea565b610553611c3f565b610553611c4e565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107b15780601f10610786576101008083540402835291602001916107b1565b820191906000526020600020905b81548152906001019060200180831161079457829003601f168201915b5050505050905090565b60006107c8338484611c5d565b5060015b92915050565b60025490565b60006107e5848484611d53565b600160a060020a038416600090815260016020908152604080832033808552925290912054610825918691610820908663ffffffff611e9f16565b611c5d565b5060019392505050565b600a5481565b61083d61166f565b1515610881576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600160a060020a0381161580159061089d575061089d81611eff565b15156108a857600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b670de0b6b3a764000081565b60055460ff1690565b336000818152600160209081526040808320600160a060020a038716845290915281205490916107c8918590610820908663ffffffff611f0716565b6000600160a060020a03851630141561094057600080fd5b61094b338686611d53565b84600160a060020a031633600160a060020a03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1686868660405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a36109d085611eff565b15610a2157610a16858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f6b92505050565b1515610a2157600080fd5b506001949350505050565b6000610a3733611a97565b1515610a775760405160e560020a62461bcd02815260040180806020018281038252603081526020018061291a6030913960400191505060405180910390fd5b6107c883836121ae565b610a8b33826122a3565b50565b600b54600090600160a060020a03161515610aa857600080fd5b600854604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b158015610b1b57600080fd5b505af1158015610b2f573d6000803e3d6000fd5b505050506040513d6020811015610b4557600080fd5b50511515610b9d576040805160e560020a62461bcd02815260206004820152601060248201527f4441492f7472616e7366657246726f6d00000000000000000000000000000000604482015290519081900360640190fd5b6000610bb4600a548561238190919063ffffffff16565b9050610bc030826121ae565b600b5460408051600160a060020a038681166c01000000000000000000000000026020808401919091528351601481850301815260348401948590527f4000aea000000000000000000000000000000000000000000000000000000000909452931660388201818152605883018690526060607884019081528451609885015284513096634000aea0969495899594939260b89091019185019080838360005b83811015610c78578181015183820152602001610c60565b50505050905090810190601f168015610ca55780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610cc657600080fd5b505af1158015610cda573d6000803e3d6000fd5b505050506040513d6020811015610cf057600080fd5b50511515610d48576040805160e560020a62461bcd02815260206004820152601960248201527f444149506f696e74732f7472616e73666572416e6443616c6c00000000000000604482015290519081900360640190fd5b600854600954604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018890529051919092169163095ea7b39160448083019260209291908290030181600087803b158015610dba57600080fd5b505af1158015610dce573d6000803e3d6000fd5b505050506040513d6020811015610de457600080fd5b50511515610e3c576040805160e560020a62461bcd02815260206004820152600b60248201527f4441492f617070726f7665000000000000000000000000000000000000000000604482015290519081900360640190fd5b600954604080517fa0712d68000000000000000000000000000000000000000000000000000000008152600481018790529051600160a060020a039092169163a0712d68916024808201926020929091908290030181600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b505050506040513d6020811015610ecd57600080fd5b505115610825576040805160e560020a62461bcd02815260206004820152600d60248201527f436f6d706f756e642f6d696e7400000000000000000000000000000000000000604482015290519081900360640190fd5b610f2c61166f565b1515610f70576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600b54600160a060020a03161515610f8757600080fd5b6000610f916123e1565b90506000610fda670de0b6b3a7640000610fce610fc1600c54670de0b6b3a7640000611e9f90919063ffffffff16565b859063ffffffff61238116565b9063ffffffff61255b16565b90506000610fee838363ffffffff611e9f16565b90506000611007600a548461238190919063ffffffff16565b905061101330826121ae565b600b5460408051600160a060020a038881166c01000000000000000000000000026020808401919091528351601481850301815260348401948590527f4000aea000000000000000000000000000000000000000000000000000000000909452931660388201818152605883018690526060607884019081528451609885015284513096634000aea0969495899594939260b89091019185019080838360005b838110156110cb5781810151838201526020016110b3565b50505050905090810190601f1680156110f85780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561111957600080fd5b505af115801561112d573d6000803e3d6000fd5b505050506040513d602081101561114357600080fd5b5051151561119b576040805160e560020a62461bcd02815260206004820152601960248201527f444149506f696e74732f7472616e73666572416e6443616c6c00000000000000604482015290519081900360640190fd5b600082111561148357600954604080517f852a12e3000000000000000000000000000000000000000000000000000000008152600481018590529051600160a060020a039092169163852a12e3916024808201926020929091908290030181600087803b15801561120b57600080fd5b505af115801561121f573d6000803e3d6000fd5b505050506040513d602081101561123557600080fd5b50511561128c576040805160e560020a62461bcd02815260206004820152601960248201527f436f6d706f756e642f72656465656d556e6465726c79696e6700000000000000604482015290519081900360640190fd5b600854604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152306004820152602481018590529051600160a060020a039092169163095ea7b3916044808201926020929091908290030181600087803b1580156112f957600080fd5b505af115801561130d573d6000803e3d6000fd5b505050506040513d602081101561132357600080fd5b5051151561137b576040805160e560020a62461bcd02815260206004820152600b60248201527f4441492f617070726f7665000000000000000000000000000000000000000000604482015290519081900360640190fd5b600854600160a060020a03166323b872dd306113956115be565b856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b15801561140157600080fd5b505af1158015611415573d6000803e3d6000fd5b505050506040513d602081101561142b57600080fd5b50511515611483576040805160e560020a62461bcd02815260206004820152601060248201527f4441492f7472616e7366657246726f6d00000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b61149261166f565b15156114d6576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600c54670de0b6b3a764000010156114ed57600080fd5b600c55565b600160a060020a031660009081526020819052604090205490565b61151561166f565b1515611559576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600754604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36007805473ffffffffffffffffffffffffffffffffffffffff19169055565b6115ba82826125ca565b5050565b600754600160a060020a031690565b6115d561166f565b1515611619576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600160a060020a03811615801590611635575061163581611eff565b151561164057600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754600160a060020a0316331490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107b15780601f10610786576101008083540402835291602001916107b1565b600b54600090600160a060020a031615156116fb57600080fd5b6117058233610a8e565b50919050565b61171433611a97565b15156117545760405160e560020a62461bcd02815260040180806020018281038252603081526020018061291a6030913960400191505060405180910390fd5b610a8b8161260f565b61176633612657565b565b336000818152600160209081526040808320600160a060020a038716845290915281205490916107c8918590610820908663ffffffff611e9f16565b6000806117bc600a548461255b90919063ffffffff16565b600954604080517f852a12e3000000000000000000000000000000000000000000000000000000008152600481018490529051929350600160a060020a039091169163852a12e3916024808201926020929091908290030181600087803b15801561182657600080fd5b505af115801561183a573d6000803e3d6000fd5b505050506040513d602081101561185057600080fd5b5051156118a7576040805160e560020a62461bcd02815260206004820152601960248201527f436f6d706f756e642f72656465656d556e6465726c79696e6700000000000000604482015290519081900360640190fd5b6118b133846122a3565b600854604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152306004820152602481018490529051600160a060020a039092169163095ea7b3916044808201926020929091908290030181600087803b15801561191e57600080fd5b505af1158015611932573d6000803e3d6000fd5b505050506040513d602081101561194857600080fd5b505115156119a0576040805160e560020a62461bcd02815260206004820152600b60248201527f4441492f617070726f7665000000000000000000000000000000000000000000604482015290519081900360640190fd5b600854604080517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a03878116602483015260448201859052915191909216916323b872dd9160648083019260209291908290030181600087803b158015611a1557600080fd5b505af1158015611a29573d6000803e3d6000fd5b505050506040513d6020811015611a3f57600080fd5b50511515610825576040805160e560020a62461bcd02815260206004820152601060248201527f4441492f7472616e7366657246726f6d00000000000000000000000000000000604482015290519081900360640190fd5b60006107cc60068363ffffffff61269f16565b611ab261166f565b1515611af6576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600160a060020a03811615801590611b125750611b1281611eff565b1515611b1d57600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b611b5461166f565b1515611b98576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b60008111611ba557600080fd5b600a55565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b600c5481565b600b54600160a060020a031681565b611bf261166f565b1515611c36576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b610a8b8161270b565b600854600160a060020a031681565b600954600160a060020a031681565b600160a060020a0383161515611ca75760405160e560020a62461bcd028152600401808060200182810382526024815260200180612a146024913960400191505060405180910390fd5b600160a060020a0382161515611cf15760405160e560020a62461bcd0281526004018080602001828103825260228152602001806128f86022913960400191505060405180910390fd5b600160a060020a03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600160a060020a0383161515611d9d5760405160e560020a62461bcd0281526004018080602001828103825260258152602001806129ef6025913960400191505060405180910390fd5b600160a060020a0382161515611de75760405160e560020a62461bcd0281526004018080602001828103825260238152602001806128af6023913960400191505060405180910390fd5b600160a060020a038316600090815260208190526040902054611e10908263ffffffff611e9f16565b600160a060020a038085166000908152602081905260408082209390935590841681522054611e45908263ffffffff611f0716565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115611ef9576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000903b1190565b600082820183811015611f64576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600080606085600160a060020a03163386866040516024018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611fdb578181015183820152602001611fc3565b50505050905090810190601f1680156120085780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa4c0ed3600000000000000000000000000000000000000000000000000000000178152905182519297509550859450925090508083835b602083106120945780518252601f199092019160209182019101612075565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146120f6576040519150601f19603f3d011682016040523d82523d6000602084013e6120fb565b606091505b50915091507fbc7dd6e97375ba88a74610778de6f20902e0b989cce946e96fa3d23d2afb5da68282604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561216a578181015183820152602001612152565b50505050905090810190601f1680156121975780820380516001836020036101000a031916815260200191505b50935050505060405180910390a150949350505050565b600160a060020a038216151561220e576040805160e560020a62461bcd02815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254612221908263ffffffff611f0716565b600255600160a060020a03821660009081526020819052604090205461224d908263ffffffff611f0716565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600160a060020a03821615156122ed5760405160e560020a62461bcd0281526004018080602001828103825260218152602001806129ce6021913960400191505060405180910390fd5b600254612300908263ffffffff611e9f16565b600255600160a060020a03821660009081526020819052604090205461232c908263ffffffff611e9f16565b600160a060020a038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b6000821515612392575060006107cc565b8282028284828115156123a157fe5b0414611f645760405160e560020a62461bcd02815260040180806020018281038252602181526020018061296b6021913960400191505060405180910390fd5b600954604080517fc37f68e200000000000000000000000000000000000000000000000000000000815230600482015290516000928392839283928392600160a060020a039091169163c37f68e291602480820192608092909190829003018186803b15801561245057600080fd5b505afa158015612464573d6000803e3d6000fd5b505050506040513d608081101561247a57600080fd5b508051602082015160408301516060909301519196509450909250905083156124a257600080fd5b60006124c0670de0b6b3a7640000610fce868563ffffffff61238116565b9050600061253e600a5430600160a060020a03166318160ddd6040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561250657600080fd5b505afa15801561251a573d6000803e3d6000fd5b505050506040513d602081101561253057600080fd5b50519063ffffffff61255b16565b9050612550828263ffffffff611e9f16565b965050505050505090565b60008082116125b4576040805160e560020a62461bcd02815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848115156125c157fe5b04949350505050565b6125d482826122a3565b600160a060020a0382166000908152600160209081526040808320338085529252909120546115ba918491610820908563ffffffff611e9f16565b61262060068263ffffffff6127be16565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61266860068263ffffffff61284216565b604051600160a060020a038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b6000600160a060020a03821615156126eb5760405160e560020a62461bcd0281526004018080602001828103825260228152602001806129ac6022913960400191505060405180910390fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b600160a060020a03811615156127555760405160e560020a62461bcd0281526004018080602001828103825260268152602001806128d26026913960400191505060405180910390fd5b600754604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6127c8828261269f565b1561281d576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b61284c828261269f565b151561288c5760405160e560020a62461bcd02815260040180806020018281038252602181526020018061294a6021913960400191505060405180910390fd5b600160a060020a0316600090815260209190915260409020805460ff1916905556fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a165627a7a723058201a41cd0aa4165319df104da88d53287215c77d5b51f7f574fa31242a72a3569200294f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f20616464726573730000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102205760003560e060020a900480638da5cb5b11610129578063aa271e1a116100b1578063ddca3f4311610080578063ddca3f43146106df578063e78cea92146106e7578063f2fde38b146106ef578063f4b9fa7514610715578063f69e20461461071d57610220565b8063aa271e1a14610648578063b97dbf591461066e578063d2e8049414610694578063dd62ed3e146106b157610220565b806397c3c52d116100f857806397c3c52d146105a5578063983b2d56146105c257806398650275146105e8578063a457c2d7146105f0578063a9059cbb1461061c57610220565b80638da5cb5b1461054b5780638dd148021461056f5780638f32d59b1461059557806395d89b411461059d57610220565b80634000aea0116101ac5780636353586b1161017b5780636353586b146104ae57806369fe0e2d146104d457806370a08231146104f1578063715018a61461051757806379cc67901461051f57610220565b80634000aea0146103b457806340c10f191461043957806342966c681461046557806344ecf9d11461048257610220565b8063265cd8bd116101f3578063265cd8bd146103325780632be682d41461033a5780632e0f262514610362578063313ce5671461036a578063395093511461038857610220565b806306fdde0314610225578063095ea7b3146102a257806318160ddd146102e257806323b872dd146102fc575b600080fd5b61022d610725565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ce600480360360408110156102b857600080fd5b50600160a060020a0381351690602001356107bb565b604080519115158252519081900360200190f35b6102ea6107d2565b60408051918252519081900360200190f35b6102ce6004803603606081101561031257600080fd5b50600160a060020a038135811691602081013590911690604001356107d8565b6102ea61082f565b6103606004803603602081101561035057600080fd5b5035600160a060020a0316610835565b005b6102ea6108d7565b6103726108e3565b6040805160ff9092168252519081900360200190f35b6102ce6004803603604081101561039e57600080fd5b50600160a060020a0381351690602001356108ec565b6102ce600480360360608110156103ca57600080fd5b600160a060020a03823516916020810135918101906060810160408201356401000000008111156103fa57600080fd5b82018360208201111561040c57600080fd5b8035906020019184600183028401116401000000008311171561042e57600080fd5b509092509050610928565b6102ce6004803603604081101561044f57600080fd5b50600160a060020a038135169060200135610a2c565b6103606004803603602081101561047b57600080fd5b5035610a81565b6102ce6004803603604081101561049857600080fd5b5080359060200135600160a060020a0316610a8e565b610360600480360360208110156104c457600080fd5b5035600160a060020a0316610f24565b610360600480360360208110156104ea57600080fd5b503561148a565b6102ea6004803603602081101561050757600080fd5b5035600160a060020a03166114f2565b61036061150d565b6103606004803603604081101561053557600080fd5b50600160a060020a0381351690602001356115b0565b6105536115be565b60408051600160a060020a039092168252519081900360200190f35b6103606004803603602081101561058557600080fd5b5035600160a060020a03166115cd565b6102ce61166f565b61022d611680565b6102ce600480360360208110156105bb57600080fd5b50356116e1565b610360600480360360208110156105d857600080fd5b5035600160a060020a031661170b565b61036061175d565b6102ce6004803603604081101561060657600080fd5b50600160a060020a038135169060200135611768565b6102ce6004803603604081101561063257600080fd5b50600160a060020a0381351690602001356117a4565b6102ce6004803603602081101561065e57600080fd5b5035600160a060020a0316611a97565b6103606004803603602081101561068457600080fd5b5035600160a060020a0316611aaa565b610360600480360360208110156106aa57600080fd5b5035611b4c565b6102ea600480360360408110156106c757600080fd5b50600160a060020a0381358116916020013516611baa565b6102ea611bd5565b610553611bdb565b6103606004803603602081101561070557600080fd5b5035600160a060020a0316611bea565b610553611c3f565b610553611c4e565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107b15780601f10610786576101008083540402835291602001916107b1565b820191906000526020600020905b81548152906001019060200180831161079457829003601f168201915b5050505050905090565b60006107c8338484611c5d565b5060015b92915050565b60025490565b60006107e5848484611d53565b600160a060020a038416600090815260016020908152604080832033808552925290912054610825918691610820908663ffffffff611e9f16565b611c5d565b5060019392505050565b600a5481565b61083d61166f565b1515610881576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600160a060020a0381161580159061089d575061089d81611eff565b15156108a857600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b670de0b6b3a764000081565b60055460ff1690565b336000818152600160209081526040808320600160a060020a038716845290915281205490916107c8918590610820908663ffffffff611f0716565b6000600160a060020a03851630141561094057600080fd5b61094b338686611d53565b84600160a060020a031633600160a060020a03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1686868660405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a36109d085611eff565b15610a2157610a16858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f6b92505050565b1515610a2157600080fd5b506001949350505050565b6000610a3733611a97565b1515610a775760405160e560020a62461bcd02815260040180806020018281038252603081526020018061291a6030913960400191505060405180910390fd5b6107c883836121ae565b610a8b33826122a3565b50565b600b54600090600160a060020a03161515610aa857600080fd5b600854604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b158015610b1b57600080fd5b505af1158015610b2f573d6000803e3d6000fd5b505050506040513d6020811015610b4557600080fd5b50511515610b9d576040805160e560020a62461bcd02815260206004820152601060248201527f4441492f7472616e7366657246726f6d00000000000000000000000000000000604482015290519081900360640190fd5b6000610bb4600a548561238190919063ffffffff16565b9050610bc030826121ae565b600b5460408051600160a060020a038681166c01000000000000000000000000026020808401919091528351601481850301815260348401948590527f4000aea000000000000000000000000000000000000000000000000000000000909452931660388201818152605883018690526060607884019081528451609885015284513096634000aea0969495899594939260b89091019185019080838360005b83811015610c78578181015183820152602001610c60565b50505050905090810190601f168015610ca55780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610cc657600080fd5b505af1158015610cda573d6000803e3d6000fd5b505050506040513d6020811015610cf057600080fd5b50511515610d48576040805160e560020a62461bcd02815260206004820152601960248201527f444149506f696e74732f7472616e73666572416e6443616c6c00000000000000604482015290519081900360640190fd5b600854600954604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018890529051919092169163095ea7b39160448083019260209291908290030181600087803b158015610dba57600080fd5b505af1158015610dce573d6000803e3d6000fd5b505050506040513d6020811015610de457600080fd5b50511515610e3c576040805160e560020a62461bcd02815260206004820152600b60248201527f4441492f617070726f7665000000000000000000000000000000000000000000604482015290519081900360640190fd5b600954604080517fa0712d68000000000000000000000000000000000000000000000000000000008152600481018790529051600160a060020a039092169163a0712d68916024808201926020929091908290030181600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b505050506040513d6020811015610ecd57600080fd5b505115610825576040805160e560020a62461bcd02815260206004820152600d60248201527f436f6d706f756e642f6d696e7400000000000000000000000000000000000000604482015290519081900360640190fd5b610f2c61166f565b1515610f70576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600b54600160a060020a03161515610f8757600080fd5b6000610f916123e1565b90506000610fda670de0b6b3a7640000610fce610fc1600c54670de0b6b3a7640000611e9f90919063ffffffff16565b859063ffffffff61238116565b9063ffffffff61255b16565b90506000610fee838363ffffffff611e9f16565b90506000611007600a548461238190919063ffffffff16565b905061101330826121ae565b600b5460408051600160a060020a038881166c01000000000000000000000000026020808401919091528351601481850301815260348401948590527f4000aea000000000000000000000000000000000000000000000000000000000909452931660388201818152605883018690526060607884019081528451609885015284513096634000aea0969495899594939260b89091019185019080838360005b838110156110cb5781810151838201526020016110b3565b50505050905090810190601f1680156110f85780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561111957600080fd5b505af115801561112d573d6000803e3d6000fd5b505050506040513d602081101561114357600080fd5b5051151561119b576040805160e560020a62461bcd02815260206004820152601960248201527f444149506f696e74732f7472616e73666572416e6443616c6c00000000000000604482015290519081900360640190fd5b600082111561148357600954604080517f852a12e3000000000000000000000000000000000000000000000000000000008152600481018590529051600160a060020a039092169163852a12e3916024808201926020929091908290030181600087803b15801561120b57600080fd5b505af115801561121f573d6000803e3d6000fd5b505050506040513d602081101561123557600080fd5b50511561128c576040805160e560020a62461bcd02815260206004820152601960248201527f436f6d706f756e642f72656465656d556e6465726c79696e6700000000000000604482015290519081900360640190fd5b600854604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152306004820152602481018590529051600160a060020a039092169163095ea7b3916044808201926020929091908290030181600087803b1580156112f957600080fd5b505af115801561130d573d6000803e3d6000fd5b505050506040513d602081101561132357600080fd5b5051151561137b576040805160e560020a62461bcd02815260206004820152600b60248201527f4441492f617070726f7665000000000000000000000000000000000000000000604482015290519081900360640190fd5b600854600160a060020a03166323b872dd306113956115be565b856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b15801561140157600080fd5b505af1158015611415573d6000803e3d6000fd5b505050506040513d602081101561142b57600080fd5b50511515611483576040805160e560020a62461bcd02815260206004820152601060248201527f4441492f7472616e7366657246726f6d00000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b61149261166f565b15156114d6576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600c54670de0b6b3a764000010156114ed57600080fd5b600c55565b600160a060020a031660009081526020819052604090205490565b61151561166f565b1515611559576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600754604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36007805473ffffffffffffffffffffffffffffffffffffffff19169055565b6115ba82826125ca565b5050565b600754600160a060020a031690565b6115d561166f565b1515611619576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600160a060020a03811615801590611635575061163581611eff565b151561164057600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754600160a060020a0316331490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107b15780601f10610786576101008083540402835291602001916107b1565b600b54600090600160a060020a031615156116fb57600080fd5b6117058233610a8e565b50919050565b61171433611a97565b15156117545760405160e560020a62461bcd02815260040180806020018281038252603081526020018061291a6030913960400191505060405180910390fd5b610a8b8161260f565b61176633612657565b565b336000818152600160209081526040808320600160a060020a038716845290915281205490916107c8918590610820908663ffffffff611e9f16565b6000806117bc600a548461255b90919063ffffffff16565b600954604080517f852a12e3000000000000000000000000000000000000000000000000000000008152600481018490529051929350600160a060020a039091169163852a12e3916024808201926020929091908290030181600087803b15801561182657600080fd5b505af115801561183a573d6000803e3d6000fd5b505050506040513d602081101561185057600080fd5b5051156118a7576040805160e560020a62461bcd02815260206004820152601960248201527f436f6d706f756e642f72656465656d556e6465726c79696e6700000000000000604482015290519081900360640190fd5b6118b133846122a3565b600854604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152306004820152602481018490529051600160a060020a039092169163095ea7b3916044808201926020929091908290030181600087803b15801561191e57600080fd5b505af1158015611932573d6000803e3d6000fd5b505050506040513d602081101561194857600080fd5b505115156119a0576040805160e560020a62461bcd02815260206004820152600b60248201527f4441492f617070726f7665000000000000000000000000000000000000000000604482015290519081900360640190fd5b600854604080517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a03878116602483015260448201859052915191909216916323b872dd9160648083019260209291908290030181600087803b158015611a1557600080fd5b505af1158015611a29573d6000803e3d6000fd5b505050506040513d6020811015611a3f57600080fd5b50511515610825576040805160e560020a62461bcd02815260206004820152601060248201527f4441492f7472616e7366657246726f6d00000000000000000000000000000000604482015290519081900360640190fd5b60006107cc60068363ffffffff61269f16565b611ab261166f565b1515611af6576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b600160a060020a03811615801590611b125750611b1281611eff565b1515611b1d57600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b611b5461166f565b1515611b98576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b60008111611ba557600080fd5b600a55565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b600c5481565b600b54600160a060020a031681565b611bf261166f565b1515611c36576040805160e560020a62461bcd028152602060048201819052602482015260008051602061298c833981519152604482015290519081900360640190fd5b610a8b8161270b565b600854600160a060020a031681565b600954600160a060020a031681565b600160a060020a0383161515611ca75760405160e560020a62461bcd028152600401808060200182810382526024815260200180612a146024913960400191505060405180910390fd5b600160a060020a0382161515611cf15760405160e560020a62461bcd0281526004018080602001828103825260228152602001806128f86022913960400191505060405180910390fd5b600160a060020a03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600160a060020a0383161515611d9d5760405160e560020a62461bcd0281526004018080602001828103825260258152602001806129ef6025913960400191505060405180910390fd5b600160a060020a0382161515611de75760405160e560020a62461bcd0281526004018080602001828103825260238152602001806128af6023913960400191505060405180910390fd5b600160a060020a038316600090815260208190526040902054611e10908263ffffffff611e9f16565b600160a060020a038085166000908152602081905260408082209390935590841681522054611e45908263ffffffff611f0716565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115611ef9576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000903b1190565b600082820183811015611f64576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600080606085600160a060020a03163386866040516024018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611fdb578181015183820152602001611fc3565b50505050905090810190601f1680156120085780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa4c0ed3600000000000000000000000000000000000000000000000000000000178152905182519297509550859450925090508083835b602083106120945780518252601f199092019160209182019101612075565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146120f6576040519150601f19603f3d011682016040523d82523d6000602084013e6120fb565b606091505b50915091507fbc7dd6e97375ba88a74610778de6f20902e0b989cce946e96fa3d23d2afb5da68282604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561216a578181015183820152602001612152565b50505050905090810190601f1680156121975780820380516001836020036101000a031916815260200191505b50935050505060405180910390a150949350505050565b600160a060020a038216151561220e576040805160e560020a62461bcd02815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254612221908263ffffffff611f0716565b600255600160a060020a03821660009081526020819052604090205461224d908263ffffffff611f0716565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600160a060020a03821615156122ed5760405160e560020a62461bcd0281526004018080602001828103825260218152602001806129ce6021913960400191505060405180910390fd5b600254612300908263ffffffff611e9f16565b600255600160a060020a03821660009081526020819052604090205461232c908263ffffffff611e9f16565b600160a060020a038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b6000821515612392575060006107cc565b8282028284828115156123a157fe5b0414611f645760405160e560020a62461bcd02815260040180806020018281038252602181526020018061296b6021913960400191505060405180910390fd5b600954604080517fc37f68e200000000000000000000000000000000000000000000000000000000815230600482015290516000928392839283928392600160a060020a039091169163c37f68e291602480820192608092909190829003018186803b15801561245057600080fd5b505afa158015612464573d6000803e3d6000fd5b505050506040513d608081101561247a57600080fd5b508051602082015160408301516060909301519196509450909250905083156124a257600080fd5b60006124c0670de0b6b3a7640000610fce868563ffffffff61238116565b9050600061253e600a5430600160a060020a03166318160ddd6040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561250657600080fd5b505afa15801561251a573d6000803e3d6000fd5b505050506040513d602081101561253057600080fd5b50519063ffffffff61255b16565b9050612550828263ffffffff611e9f16565b965050505050505090565b60008082116125b4576040805160e560020a62461bcd02815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848115156125c157fe5b04949350505050565b6125d482826122a3565b600160a060020a0382166000908152600160209081526040808320338085529252909120546115ba918491610820908563ffffffff611e9f16565b61262060068263ffffffff6127be16565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61266860068263ffffffff61284216565b604051600160a060020a038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b6000600160a060020a03821615156126eb5760405160e560020a62461bcd0281526004018080602001828103825260228152602001806129ac6022913960400191505060405180910390fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b600160a060020a03811615156127555760405160e560020a62461bcd0281526004018080602001828103825260268152602001806128d26026913960400191505060405180910390fd5b600754604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6127c8828261269f565b1561281d576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b61284c828261269f565b151561288c5760405160e560020a62461bcd02815260040180806020018281038252602181526020018061294a6021913960400191505060405180910390fd5b600160a060020a0316600090815260209190915260409020805460ff1916905556fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a165627a7a723058201a41cd0aa4165319df104da88d53287215c77d5b51f7f574fa31242a72a356920029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
-----Decoded View---------------
Arg [0] : _dai (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [1] : _compound (address): 0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [1] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Deployed Bytecode Sourcemap
25572:5964:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25572:5964:0;;;;;;;;-1:-1:-1;;;25572:5964:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17337:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17337:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9118:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9118:148:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8141:91;;;:::i;:::-;;;;;;;;;;;;;;;;9737:256;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9737:256:0;;;;;;;;;;;;;;;;;:::i;25798:44::-;;;:::i;26475:167::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26475:167:0;-1:-1:-1;;;;;26475:167:0;;:::i;:::-;;25698:43;;;:::i;18195:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10402:206;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10402:206:0;;;;;;;;:::i;15916:369::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;15916:369:0;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;15916:369:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15916:369:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;15916:369:0;;-1:-1:-1;15916:369:0;-1:-1:-1;15916:369:0;:::i;20980:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20980:143:0;;;;;;;;:::i;21593:81::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21593:81:0;;:::i;28077:754::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28077:754:0;;;;;;-1:-1:-1;;;;;28077:754:0;;:::i;29786:1107::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29786:1107:0;-1:-1:-1;;;;;29786:1107:0;;:::i;26750:101::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:101:0;;:::i;8295:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8295:110:0;-1:-1:-1;;;;;8295:110:0;;:::i;23564:140::-;;;:::i;21736:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21736:103:0;;;;;;;;:::i;22753:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;22753:79:0;;;;;;;;;;;;;;26978:154;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26978:154:0;-1:-1:-1;;;;;26978:154:0;;:::i;23119:92::-;;;:::i;17539:87::-;;;:::i;27640:128::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27640:128:0;;:::i;19999:92::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19999:92:0;-1:-1:-1;;;;;19999:92:0;;:::i;20099:77::-;;;:::i;11111:216::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11111:216:0;;;;;;;;:::i;29070:554::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;29070:554:0;;;;;;;;:::i;19882:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19882:109:0;-1:-1:-1;;;;;19882:109:0;;:::i;26188:156::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26188:156:0;-1:-1:-1;;;;;26188:156:0;;:::i;27294:128::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27294:128:0;;:::i;8837:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8837:134:0;;;;;;;;;;:::i;25873:18::-;;;:::i;25847:21::-;;;:::i;23859:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23859:109:0;-1:-1:-1;;;;;23859:109:0;;:::i;25748:17::-;;;:::i;25770:23::-;;;:::i;17337:83::-;17407:5;17400:12;;;;;;;;-1:-1:-1;;17400:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17374:13;;17400:12;;17407:5;;17400:12;;17407:5;17400:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17337:83;:::o;9118:148::-;9183:4;9200:36;9209:10;9221:7;9230:5;9200:8;:36::i;:::-;-1:-1:-1;9254:4:0;9118:148;;;;;:::o;8141:91::-;8212:12;;8141:91;:::o;9737:256::-;9826:4;9843:36;9853:6;9861:9;9872:6;9843:9;:36::i;:::-;-1:-1:-1;;;;;9919:19:0;;;;;;:11;:19;;;;;;;;9907:10;9919:31;;;;;;;;;9890:73;;9899:6;;9919:43;;9955:6;9919:43;:35;:43;:::i;:::-;9890:8;:73::i;:::-;-1:-1:-1;9981:4:0;9737:256;;;;;:::o;25798:44::-;;;;:::o;26475:167::-;22965:9;:7;:9::i;:::-;22957:54;;;;;;;-1:-1:-1;;;;;22957:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22957:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26546:22:0;;;;;;:54;;;26572:28;26591:8;26572:18;:28::i;:::-;26538:63;;;;;;;;26608:8;:28;;-1:-1:-1;;26608:28:0;-1:-1:-1;;;;;26608:28:0;;;;;;;;;;26475:167::o;25698:43::-;25733:8;25698:43;:::o;18195:83::-;18261:9;;;;18195:83;:::o;10402:206::-;10508:10;10482:4;10529:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;10529:32:0;;;;;;;;;;10482:4;;10499:79;;10520:7;;10529:48;;10566:10;10529:48;:36;:48;:::i;15916:369::-;16007:4;-1:-1:-1;;;;;16030:20:0;;16045:4;16030:20;;16022:29;;;;;;16062:34;16072:10;16084:3;16089:6;16062:9;:34::i;:::-;16133:3;-1:-1:-1;;;;;16112:40:0;16121:10;-1:-1:-1;;;;;16112:40:0;;16138:6;16146:5;;16112:40;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;16112:40:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;16112:40:0;;;;-1:-1:-1;16112:40:0;;-1:-1:-1;;;;;16112:40:0;16167:23;16186:3;16167:18;:23::i;:::-;16163:95;;;16211:36;16228:3;16233:6;16241:5;;16211:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16211:16:0;;-1:-1:-1;;;16211:36:0:i;:::-;16203:45;;;;;;;;-1:-1:-1;16273:4:0;15916:369;;;;;;:::o;20980:143::-;21054:4;19781:20;19790:10;19781:8;:20::i;:::-;19773:81;;;;;;-1:-1:-1;;;;;19773:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21071:22;21077:7;21086:6;21071:5;:22::i;21593:81::-;21641:25;21647:10;21659:6;21641:5;:25::i;:::-;21593:81;:::o;28077:754::-;31498:6;;28173:4;;-1:-1:-1;;;;;31498:6:0;:20;;31490:29;;;;;;28234:3;;:52;;;;;;28251:10;28234:52;;;;28271:4;28234:52;;;;;;;;;;;;-1:-1:-1;;;;;28234:3:0;;;;:16;;:52;;;;;;;;;;;;;;;:3;;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;28234:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28234:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28234:52:0;28226:81;;;;;;;-1:-1:-1;;;;;28226:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28339:18;28360:36;28372:23;;28360:7;:11;;:36;;;;:::i;:::-;28339:57;;28403:32;28417:4;28424:10;28403:5;:32::i;:::-;28564:6;;28584:28;;;-1:-1:-1;;;;;28584:28:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;6:49;;28584:28:0;;;;;;;28526:87;;;;28564:6;;28526:87;;;;;;;;;;;;;;;;;;;;;;;;;;;28541:4;;28526:37;;28564:6;;28526:87;;28584:28;28526:87;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28526:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28526:87:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28526:87:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28526:87:0;28518:125;;;;;;;-1:-1:-1;;;;;28518:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28690:3;;28710:8;;28690:39;;;;;;-1:-1:-1;;;;;28710:8:0;;;28690:39;;;;;;;;;;;;:3;;;;;:11;;:39;;;;;;;;;;;;;;:3;;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;28690:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28690:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28690:39:0;28682:63;;;;;;;-1:-1:-1;;;;;28682:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28760:8;;:22;;;;;;;;;;;;;;-1:-1:-1;;;;;28760:8:0;;;;:13;;:22;;;;;;;;;;;;;;;:8;;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;28760:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28760:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28760:22:0;:27;28752:53;;;;;-1:-1:-1;;;;;28752:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;29786:1107;22965:9;:7;:9::i;:::-;22957:54;;;;;;;-1:-1:-1;;;;;22957:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22957:54:0;;;;;;;;;;;;;;;31498:6;;-1:-1:-1;;;;;31498:6:0;:20;;31490:29;;;;;;29925:27;29955:16;:14;:16::i;:::-;29925:46;;29978:20;30001:56;25733:8;30001:42;30025:17;30038:3;;25733:8;30025:12;;:17;;;;:::i;:::-;30001:19;;:42;:23;:42;:::i;:::-;:46;:56;:46;:56;:::i;:::-;29978:79;-1:-1:-1;30064:17:0;30084:37;:19;29978:79;30084:37;:23;:37;:::i;:::-;30064:57;;30153:24;30180:41;30197:23;;30180:12;:16;;:41;;;;:::i;:::-;30153:68;;30228:38;30242:4;30249:16;30228:5;:38::i;:::-;30392:6;;30418:25;;;-1:-1:-1;;;;;30418:25:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;6:49;;30418:25:0;;;;;;;30354:90;;;;30392:6;;30354:90;;;;;;;;;;;;;;;;;;;;;;;;;;;30369:4;;30354:37;;30392:6;;30354:90;;30418:25;30354:90;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30354:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30354:90:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30354:90:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30354:90:0;30346:128;;;;;;;-1:-1:-1;;;;;30346:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30542:1;30530:9;:13;30526:362;;;30608:8;;:36;;;;;;;;;;;;;;-1:-1:-1;;;;;30608:8:0;;;;:25;;:36;;;;;;;;;;;;;;;:8;;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;30608:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30608:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30608:36:0;:41;30600:79;;;;;-1:-1:-1;;;;;30600:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30738:3;;:37;;;;;;30758:4;30738:37;;;;;;;;;;;;-1:-1:-1;;;;;30738:3:0;;;;:11;;:37;;;;;;;;;;;;;;;:3;;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;30738:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30738:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30738:37:0;30730:61;;;;;;;-1:-1:-1;;;;;30730:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30808:3;;-1:-1:-1;;;;;30808:3:0;:16;30833:4;30840:7;:5;:7::i;:::-;30849:9;30808:51;;;;;-1:-1:-1;;;30808:51:0;;;;;;;-1:-1:-1;;;;;30808:51:0;-1:-1:-1;;;;;30808:51:0;;;;;;-1:-1:-1;;;;;30808:51:0;-1:-1:-1;;;;;30808:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30808:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30808:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30808:51:0;30800:80;;;;;;;-1:-1:-1;;;;;30800:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31526:1;;;;29786:1107;:::o;26750:101::-;22965:9;:7;:9::i;:::-;22957:54;;;;;;;-1:-1:-1;;;;;22957:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22957:54:0;;;;;;;;;;;;;;;26812:3;;25733:8;-1:-1:-1;26812:15:0;26804:24;;;;;;26835:3;:10;26750:101::o;8295:110::-;-1:-1:-1;;;;;8379:18:0;8352:7;8379:18;;;;;;;;;;;;8295:110::o;23564:140::-;22965:9;:7;:9::i;:::-;22957:54;;;;;;;-1:-1:-1;;;;;22957:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22957:54:0;;;;;;;;;;;;;;;23647:6;;23626:40;;23663:1;;-1:-1:-1;;;;;23647:6:0;;23626:40;;23663:1;;23626:40;23677:6;:19;;-1:-1:-1;;23677:19:0;;;23564:140::o;21736:103::-;21805:26;21815:7;21824:6;21805:9;:26::i;:::-;21736:103;;:::o;22753:79::-;22818:6;;-1:-1:-1;;;;;22818:6:0;22753:79;:::o;26978:154::-;22965:9;:7;:9::i;:::-;22957:54;;;;;;;-1:-1:-1;;;;;22957:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22957:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27047:22:0;;;;;;:54;;;27073:28;27092:8;27073:18;:28::i;:::-;27039:63;;;;;;;;27109:6;:17;;-1:-1:-1;;27109:17:0;-1:-1:-1;;;;;27109:17:0;;;;;;;;;;26978:154::o;23119:92::-;23197:6;;-1:-1:-1;;;;;23197:6:0;23183:10;:20;;23119:92::o;17539:87::-;17611:7;17604:14;;;;;;;;-1:-1:-1;;17604:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17578:13;;17604:14;;17611:7;;17604:14;;17611:7;17604:14;;;;;;;;;;;;;;;;;;;;;;;;27640:128;31498:6;;27707:4;;-1:-1:-1;;;;;31498:6:0;:20;;31490:29;;;;;;27720:42;27742:7;27751:10;27720:21;:42::i;:::-;;27640:128;;;:::o;19999:92::-;19781:20;19790:10;19781:8;:20::i;:::-;19773:81;;;;;;-1:-1:-1;;;;;19773:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20064:19;20075:7;20064:10;:19::i;20099:77::-;20143:25;20157:10;20143:13;:25::i;:::-;20099:77::o;11111:216::-;11222:10;11196:4;11243:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;11243:32:0;;;;;;;;;;11196:4;;11213:84;;11234:7;;11243:53;;11280:15;11243:53;:36;:53;:::i;29070:554::-;29141:4;29154:17;29174:36;29186:23;;29174:7;:11;;:36;;;;:::i;:::-;29271:8;;:36;;;;;;;;;;;;;;29154:56;;-1:-1:-1;;;;;;29271:8:0;;;;:25;;:36;;;;;;;;;;;;;;;:8;;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;29271:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29271:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29271:36:0;:41;29263:79;;;;;-1:-1:-1;;;;;29263:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29374:26;29380:10;29392:7;29374:5;:26::i;:::-;29455:3;;:37;;;;;;29475:4;29455:37;;;;;;;;;;;;-1:-1:-1;;;;;29455:3:0;;;;:11;;:37;;;;;;;;;;;;;;;:3;;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;29455:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29455:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29455:37:0;29447:61;;;;;;;-1:-1:-1;;;;;29447:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29523:3;;:54;;;;;;29548:4;29523:54;;;;-1:-1:-1;;;;;29523:54:0;;;;;;;;;;;;;;;:3;;;;;:16;;:54;;;;;;;;;;;;;;:3;;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;29523:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29523:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29523:54:0;29515:83;;;;;;;-1:-1:-1;;;;;29515:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;19882:109;19938:4;19962:21;:8;19975:7;19962:21;:12;:21;:::i;26188:156::-;22965:9;:7;:9::i;:::-;22957:54;;;;;;;-1:-1:-1;;;;;22957:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22957:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26254:22:0;;;;;;:54;;;26280:28;26299:8;26280:18;:28::i;:::-;26246:63;;;;;;;;26316:3;:22;;-1:-1:-1;;26316:22:0;-1:-1:-1;;;;;26316:22:0;;;;;;;;;;26188:156::o;27294:128::-;22965:9;:7;:9::i;:::-;22957:54;;;;;;;-1:-1:-1;;;;;22957:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22957:54:0;;;;;;;;;;;;;;;27376:1;27368:9;;27360:18;;;;;;27385:23;:31;27294:128::o;8837:134::-;-1:-1:-1;;;;;8936:18:0;;;8909:7;8936:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8837:134::o;25873:18::-;;;;:::o;25847:21::-;;;-1:-1:-1;;;;;25847:21:0;;:::o;23859:109::-;22965:9;:7;:9::i;:::-;22957:54;;;;;;;-1:-1:-1;;;;;22957:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22957:54:0;;;;;;;;;;;;;;;23932:28;23951:8;23932:18;:28::i;25748:17::-;;;-1:-1:-1;;;;;25748:17:0;;:::o;25770:23::-;;;-1:-1:-1;;;;;25770:23:0;;:::o;13913:335::-;-1:-1:-1;;;;;14006:19:0;;;;13998:68;;;;-1:-1:-1;;;;;13998:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14085:21:0;;;;14077:68;;;;-1:-1:-1;;;;;14077:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14158:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;14209:31;;;;;;;;;;;;;;;;;13913:335;;;:::o;11817:429::-;-1:-1:-1;;;;;11915:20:0;;;;11907:70;;;;-1:-1:-1;;;;;11907:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11996:23:0;;;;11988:71;;;;-1:-1:-1;;;;;11988:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12092:17:0;;:9;:17;;;;;;;;;;;:29;;12114:6;12092:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;12072:17:0;;;:9;:17;;;;;;;;;;;:49;;;;12155:20;;;;;;;:32;;12180:6;12155:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;12132:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;12203:35;;;;;;;12132:20;;12203:35;;;;;;;;;;;;;11817:429;;;:::o;4256:184::-;4314:7;4342:6;;;;4334:49;;;;;-1:-1:-1;;;;;4334:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4406:5:0;;;4256:184::o;15248:422::-;15308:4;15615:20;;15654:8;;15248:422::o;3800:181::-;3858:7;3890:5;;;3914:6;;;;3906:46;;;;;-1:-1:-1;;;;;3906:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3972:1;3800:181;-1:-1:-1;;;3800:181:0:o;16293:317::-;16381:4;16397:12;16411:17;16432:3;-1:-1:-1;;;;;16432:8:0;16507:10;16519:6;16527:5;16441:92;;;;;;-1:-1:-1;;;;;16441:92:0;-1:-1:-1;;;;;16441:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16441:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16441:92:0;;;-1:-1:-1;;26:21;;;22:32;6:49;;16441:92:0;;;49:4:-1;25:18;;61:17;;16441:92:0;182:15:-1;16441:92:0;179:29:-1;160:49;;16432:102:0;;;;16441:92;;-1:-1:-1;16432:102:0;-1:-1:-1;16432:102:0;;-1:-1:-1;25:18;-1:-1;16432:102:0;-1:-1:-1;16432:102:0;;25:18:-1;36:153;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16432:102:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;16396:138:0;;;;16548:31;16565:7;16574:4;16548:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16548:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16595:7:0;16293:317;-1:-1:-1;;;;16293:317:0:o;12527:308::-;-1:-1:-1;;;;;12603:21:0;;;;12595:65;;;;;-1:-1:-1;;;;;12595:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12688:12;;:24;;12705:6;12688:24;:16;:24;:::i;:::-;12673:12;:39;-1:-1:-1;;;;;12744:18:0;;:9;:18;;;;;;;;;;;:30;;12767:6;12744:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;12723:18:0;;:9;:18;;;;;;;;;;;:51;;;;12790:37;;;;;;;12723:18;;:9;;12790:37;;;;;;;;;;12527:308;;:::o;13167:306::-;-1:-1:-1;;;;;13242:21:0;;;;13234:67;;;;-1:-1:-1;;;;;13234:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13329:12;;:23;;13346:5;13329:23;:16;:23;:::i;:::-;13314:12;:38;-1:-1:-1;;;;;13384:18:0;;:9;:18;;;;;;;;;;;:29;;13407:5;13384:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;13363:18:0;;:9;:18;;;;;;;;;;;:50;;;;13429:36;;;;;;;13363:9;;13429:36;;;;;;;;;;;13167:306;;:::o;4691:470::-;4749:7;4993:6;;4989:47;;;-1:-1:-1;5023:1:0;5016:8;;4989:47;5060:5;;;5064:1;5060;:5;5084;;;;;;;;:10;5076:56;;;;-1:-1:-1;;;;;5076:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30899:455;31058:8;;:42;;;;;;31094:4;31058:42;;;;;;30946:7;;;;;;;;;;-1:-1:-1;;;;;31058:8:0;;;;:27;;:42;;;;;;;;;;;;;;;:8;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;31058:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31058:42:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;31058:42:0;;;;;;;;;;;;;;;;;-1:-1:-1;31058:42:0;-1:-1:-1;31058:42:0;;-1:-1:-1;31058:42:0;-1:-1:-1;31115:10:0;;31107:19;;;;;;31133:21;31157:51;31203:4;31157:41;:15;31177:20;31157:41;:19;:41;:::i;:51::-;31133:75;;31217:19;31239:63;31278:23;;31253:4;-1:-1:-1;;;;;31239:32:0;;:34;;;;;-1:-1:-1;;;31239:34:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31239:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31239:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31239:34:0;;:63;:38;:63;:::i;:::-;31217:85;-1:-1:-1;31318:30:0;:13;31217:85;31318:30;:17;:30;:::i;:::-;31311:37;;;;;;;;30899:455;:::o;5629:333::-;5687:7;5782:5;;;5774:44;;;;;-1:-1:-1;;;;;5774:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5829:9;5845:1;5841;:5;;;;;;;;;5629:333;-1:-1:-1;;;;5629:333:0:o;14433:188::-;14505:22;14511:7;14520:6;14505:5;:22::i;:::-;-1:-1:-1;;;;;14568:20:0;;;;;;:11;:20;;;;;;;;14556:10;14568:32;;;;;;;;;14538:75;;14547:7;;14568:44;;14605:6;14568:44;:36;:44;:::i;20184:122::-;20241:21;:8;20254:7;20241:21;:12;:21;:::i;:::-;20278:20;;-1:-1:-1;;;;;20278:20:0;;;;;;;;20184:122;:::o;20314:130::-;20374:24;:8;20390:7;20374:24;:15;:24;:::i;:::-;20414:22;;-1:-1:-1;;;;;20414:22:0;;;;;;;;20314:130;:::o;19156:203::-;19228:4;-1:-1:-1;;;;;19253:21:0;;;;19245:68;;;;-1:-1:-1;;;;;19245:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19331:20:0;:11;:20;;;;;;;;;;;;;;;19156:203::o;24074:229::-;-1:-1:-1;;;;;24148:22:0;;;;24140:73;;;;-1:-1:-1;;;;;24140:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24250:6;;24229:38;;-1:-1:-1;;;;;24229:38:0;;;;24250:6;;24229:38;;24250:6;;24229:38;24278:6;:17;;-1:-1:-1;;24278:17:0;-1:-1:-1;;;;;24278:17:0;;;;;;;;;;24074:229::o;18620:178::-;18698:18;18702:4;18708:7;18698:3;:18::i;:::-;18697:19;18689:63;;;;;-1:-1:-1;;;;;18689:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18763:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;18763:27:0;18786:4;18763:27;;;18620:178::o;18878:183::-;18958:18;18962:4;18968:7;18958:3;:18::i;:::-;18950:64;;;;;;-1:-1:-1;;;;;18950:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19025:20:0;19048:5;19025:20;;;;;;;;;;;:28;;-1:-1:-1;;19025:28:0;;;18878:183::o
Swarm Source
bzzr://1a41cd0aa4165319df104da88d53287215c77d5b51f7f574fa31242a72a35692
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.