Contract 0xc26850686ce755ffb8690ea156e5a6cf03dcbde1 3

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcd0c47dbcb7e24922a7772b6f760e2d7e17f371e39b170016760903a58bbd338Redeem78754482021-12-06 8:44:2145 secs ago0x070bc5d7a1adafb47400e25be2862964ec5a6062 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0072641430
0xd5e36d1b3866955e4ad91162b55fe4fd096434abeffe443911417c92293115efRedeem78754132021-12-06 8:43:171 min ago0x060fedb3baafda7b77c0ae6ca2f8a6d319b1e7c2 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.007264530
0xf2a01e70da55d1971c8e22f849672eb04259203f195f8677f67e78eb2b9b7280Redeem78753762021-12-06 8:42:033 mins ago0xf48748adcab5ef1ee2df8d7553ef9f7171629b6d IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0021616530
0x23abf30423fae37e850a0eb119fe27acc767ada7cf14fc35137110b5f48700eaRedeem78753322021-12-06 8:40:314 mins ago0x63665ee63946085a65921def3355429100848bbe IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0021612930
0x9c285493560f99c7bb3fc8a77bfc3221bb2596ffd49d8728b4260fc63f2e0df1Redeem78752782021-12-06 8:38:536 mins ago0xfcc6e14a8cdd59c61be03847ea0503c43545bd89 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0073121130
0x3739c0b9f1ce98bd48179b43f62b47b2b080b4ae1867440b8c064cce4ea778fdRedeem78751382021-12-06 8:34:1710 mins ago0x4842da9e2c5a2c9ef24f3050bc9081175495fa69 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0016486530
0x86477bb258d78a8c8f31e7ee9c6b9b5c3283799e823915c10a7d93f3a134ccb7Redeem78751082021-12-06 8:33:2811 mins ago0x3c52433d98ca1e022112a94450c46e851fbec47c IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0022092630
0xff9b021121377b49fffd1d859ea162dbc608dfbeb2fd79c7fb4443af6c514ac6Redeem78750682021-12-06 8:32:0413 mins ago0xd7117e12ebc5b68d8f13b3d916033b6625f91065 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.00137387525
0x7af7dab38630177fc1cf79de4d91a4b39ffc8a1e56145fc7d83d75b14e0431d9Redeem78749882021-12-06 8:29:2315 mins ago0x6c099a3149c5a3866be908621e2dca86608ee18a IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.007264530
0xeffa7bed15022d45d3aa012c151312c41cb588068cfbfc8a1181233d483ff23bRedeem78749292021-12-06 8:27:3217 mins ago0x11cba459bd31082f2e5998fc46d3cedccbf5062e IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.007264530
0x85fb6899e70f253a2cfc1a4f66354d673f64a1275bffd3dc4d34605ed7b24618Redeem78749272021-12-06 8:27:2517 mins ago0x0cc8f1d61c33d0ffe11f35c62c099d0b98e57a44 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0016486530
0x6a39313ba174f8f5b6db861faa2cee36b9b7c4a097d7feb58082173ce15e828fDeposit78748902021-12-06 8:26:0619 mins ago0x816471679042575de140c634b67a6321691925b4 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0125692830
0x6dd6665f38663d9b6dbc858fe005d9e40728e0ec8ee240442b888dd3e5aa1e8cRedeem78748732021-12-06 8:25:3019 mins ago0xce4dbfa1bd967f86e82275091f8fc45b86664c6f IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0060537525
0x9743d88ff50e0df91ccf330c2fbfbd5ab16a54f6846b8d83e9a8af5231bd4ffdRedeem78748652021-12-06 8:25:1219 mins ago0xf15606a102e1ca38e65307ed8aa4764413cd856d IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.001801375 25
0x35d779587323ee1d02310ed3bfe07cc4948fe84a3c668c4df124a19082a4c498Redeem78748552021-12-06 8:24:5020 mins ago0xa6248883904903bb76a4d92510c4198f584f1421 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.00181944868 25.250831729
0x3ba65b70271d63a98f25d472d7051769d988ee65f5893931e7637228f3b1ff92Redeem78748492021-12-06 8:24:4220 mins ago0x5c8ed0b2235e8c00698c54a1434e1bc6714d931f IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.001801075 25
0xe5410c86a7e327b0f25c0a6e4ff4d4a853b2ff4d808cf9bbe816502360091962Redeem78747602021-12-06 8:21:4923 mins ago0x150e798b102e56f03708b0a7655ad920871b646d IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.007264530
0xfc5dd273850ecd58036aa8550da6d5ae94ebd1fa181f93295164c8f5e4c2102eRedeem78747562021-12-06 8:21:3923 mins ago0xe3e5d60d67ed4ab1e958808960da0029373d46e2 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0072641430
0x4022847568645bfa288052645446637a9b1feb988af5a6cc6bfc7941371f57ddRedeem78746602021-12-06 8:18:3026 mins ago0x88fff7955ca663dd4ef2dca31f99a28505bbc6d3 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.007264530
0x5de63880ce38d6823f68b0e4c8a692a9cb931adf26186c2f8cfe5c2e5c255e1eRedeem78746562021-12-06 8:18:2326 mins ago0xa2c863926cd56c4ab100350aa044f92c91188890 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0072641430
0xc1a87f1356bc71466bf53e2f763d2d5c2f5f92f1c45d369674c4573c6218a3e7Redeem78746022021-12-06 8:16:3528 mins ago0xfe8c48bb5c81a128d2195ec93f0a49fc0f74a88c IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0073121130
0x29dbea5090bda47ae654f024b786d036adee4fa8e9e5d785f693613f579fba21Redeem78745692021-12-06 8:15:2929 mins ago0x6eb542dac7033601f94345c00c4511e924c2f53d IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.007264530
0x98901c8811edc508da834a8623eecc2f9bf8189fe8013f246e6ce8764e4a19ceRedeem78745612021-12-06 8:15:1229 mins ago0x89c95672a217b33de774bae13e3c0f8302d465b0 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.007264530
0x4535050c643a187c64c2a150f5fd13d0f1282be0ff395f56a9c4a5459fda2ad8Redeem78745272021-12-06 8:14:0431 mins ago0x0964971d90ca1986cf29af1702c0cfdb3fa77ae5 IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.007264530
0x171cd5affe600035c11bb131fe2e0dc0fa16b8c52e450351505c00a7e1e97299Deposit78744962021-12-06 8:13:0332 mins ago0x944b3428a76d7e8aea95d158d0cd304c3359ee7b IN  0xc26850686ce755ffb8690ea156e5a6cf03dcbde10 AVAX0.0125692830
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TimeBondDepository

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-09
*/

// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

interface IOwnable {
  function policy() external view returns (address);

  function renounceManagement() external;
  
  function pushManagement( address newOwner_ ) external;
  
  function pullManagement() external;
}

contract Ownable is IOwnable {

    address internal _owner;
    address internal _newOwner;

    event OwnershipPushed(address indexed previousOwner, address indexed newOwner);
    event OwnershipPulled(address indexed previousOwner, address indexed newOwner);

    constructor () {
        _owner = msg.sender;
        emit OwnershipPushed( address(0), _owner );
    }

    function policy() public view override returns (address) {
        return _owner;
    }

    modifier onlyPolicy() {
        require( _owner == msg.sender, "Ownable: caller is not the owner" );
        _;
    }

    function renounceManagement() public virtual override onlyPolicy() {
        emit OwnershipPushed( _owner, address(0) );
        _owner = address(0);
    }

    function pushManagement( address newOwner_ ) public virtual override onlyPolicy() {
        require( newOwner_ != address(0), "Ownable: new owner is the zero address");
        emit OwnershipPushed( _owner, newOwner_ );
        _newOwner = newOwner_;
    }
    
    function pullManagement() public virtual override {
        require( msg.sender == _newOwner, "Ownable: must be new owner to pull");
        emit OwnershipPulled( _owner, _newOwner );
        _owner = _newOwner;
    }
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function sub32(uint32 a, uint32 b) internal pure returns (uint32) {
        return sub32(a, b, "SafeMath: subtraction overflow");
    }

    function sub32(uint32 a, uint32 b, string memory errorMessage) internal pure returns (uint32) {
        require(b <= a, errorMessage);
        uint32 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function sqrrt(uint256 a) internal pure returns (uint c) {
        if (a > 3) {
            c = a;
            uint b = add( div( a, 2), 1 );
            while (b < c) {
                c = b;
                b = div( add( div( a, b ), b), 2 );
            }
        } else if (a != 0) {
            c = 1;
        }
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target, 
        bytes memory data, 
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target, 
        bytes memory data, 
        uint256 value, 
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _functionCallWithValue(
        address target, 
        bytes memory data, 
        uint256 weiValue, 
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target, 
        bytes memory data, 
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target, 
        bytes memory data, 
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success, 
        bytes memory returndata, 
        string memory errorMessage
    ) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

    function addressToString(address _address) internal pure returns(string memory) {
        bytes32 _bytes = bytes32(uint256(_address));
        bytes memory HEX = "0123456789abcdef";
        bytes memory _addr = new bytes(42);

        _addr[0] = '0';
        _addr[1] = 'x';

        for(uint256 i = 0; i < 20; i++) {
            _addr[2+i*2] = HEX[uint8(_bytes[i + 12] >> 4)];
            _addr[3+i*2] = HEX[uint8(_bytes[i + 12] & 0x0f)];
        }

        return string(_addr);

    }
}

interface IERC20 {
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract ERC20 is IERC20 {

    using SafeMath for uint256;

    // TODO comment actual hash value.
    bytes32 constant private ERC20TOKEN_ERC1820_INTERFACE_ID = keccak256( "ERC20Token" );
    
    mapping (address => uint256) internal _balances;

    mapping (address => mapping (address => uint256)) internal _allowances;

    uint256 internal _totalSupply;

    string internal _name;
    
    string internal _symbol;
    
    uint8 internal _decimals;

    constructor (string memory name_, string memory symbol_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view override returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender]
            .sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender]
            .sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account_, uint256 ammount_) internal virtual {
        require(account_ != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address( this ), account_, ammount_);
        _totalSupply = _totalSupply.add(ammount_);
        _balances[account_] = _balances[account_].add(ammount_);
        emit Transfer(address( this ), account_, ammount_);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

  function _beforeTokenTransfer( address from_, address to_, uint256 amount_ ) internal virtual { }
}

interface IERC2612Permit {

    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);
}

library Counters {
    using SafeMath for uint256;

    struct Counter {

        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        counter._value += 1;
    }

    function decrement(Counter storage counter) internal {
        counter._value = counter._value.sub(1);
    }
}

abstract contract ERC20Permit is ERC20, IERC2612Permit {
    using Counters for Counters.Counter;

    mapping(address => Counters.Counter) private _nonces;

    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

    bytes32 public DOMAIN_SEPARATOR;

    constructor() {
        uint256 chainID;
        assembly {
            chainID := chainid()
        }

        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name())),
                keccak256(bytes("1")), // Version
                chainID,
                address(this)
            )
        );
    }

    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual override {
        require(block.timestamp <= deadline, "Permit: expired deadline");

        bytes32 hashStruct =
            keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner].current(), deadline));

        bytes32 _hash = keccak256(abi.encodePacked(uint16(0x1901), DOMAIN_SEPARATOR, hashStruct));

        address signer = ecrecover(_hash, v, r, s);
        require(signer != address(0) && signer == owner, "ZeroSwapPermit: Invalid signature");

        _nonces[owner].increment();
        _approve(owner, spender, amount);
    }

    function nonces(address owner) public view override returns (uint256) {
        return _nonces[owner].current();
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {

        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender)
            .sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

library FullMath {
    function fullMul(uint256 x, uint256 y) private pure returns (uint256 l, uint256 h) {
        uint256 mm = mulmod(x, y, uint256(-1));
        l = x * y;
        h = mm - l;
        if (mm < l) h -= 1;
    }

    function fullDiv(
        uint256 l,
        uint256 h,
        uint256 d
    ) private pure returns (uint256) {
        uint256 pow2 = d & -d;
        d /= pow2;
        l /= pow2;
        l += h * ((-pow2) / pow2 + 1);
        uint256 r = 1;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        return l * r;
    }

    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 d
    ) internal pure returns (uint256) {
        (uint256 l, uint256 h) = fullMul(x, y);
        uint256 mm = mulmod(x, y, d);
        if (mm > l) h -= 1;
        l -= mm;
        require(h < d, 'FullMath::mulDiv: overflow');
        return fullDiv(l, h, d);
    }
}

library FixedPoint {

    struct uq112x112 {
        uint224 _x;
    }

    struct uq144x112 {
        uint256 _x;
    }

    uint8 private constant RESOLUTION = 112;
    uint256 private constant Q112 = 0x10000000000000000000000000000;
    uint256 private constant Q224 = 0x100000000000000000000000000000000000000000000000000000000;
    uint256 private constant LOWER_MASK = 0xffffffffffffffffffffffffffff; // decimal of UQ*x112 (lower 112 bits)

    function decode(uq112x112 memory self) internal pure returns (uint112) {
        return uint112(self._x >> RESOLUTION);
    }

    function decode112with18(uq112x112 memory self) internal pure returns (uint) {

        return uint(self._x) / 5192296858534827;
    }

    function fraction(uint256 numerator, uint256 denominator) internal pure returns (uq112x112 memory) {
        require(denominator > 0, 'FixedPoint::fraction: division by zero');
        if (numerator == 0) return FixedPoint.uq112x112(0);

        if (numerator <= uint144(-1)) {
            uint256 result = (numerator << RESOLUTION) / denominator;
            require(result <= uint224(-1), 'FixedPoint::fraction: overflow');
            return uq112x112(uint224(result));
        } else {
            uint256 result = FullMath.mulDiv(numerator, Q112, denominator);
            require(result <= uint224(-1), 'FixedPoint::fraction: overflow');
            return uq112x112(uint224(result));
        }
    }
}

interface ITreasury {
    function deposit( uint _amount, address _token, uint _profit ) external returns ( bool );
    function valueOf( address _token, uint _amount ) external view returns ( uint value_ );
}

interface IBondCalculator {
    function valuation( address _LP, uint _amount ) external view returns ( uint );
    function markdown( address _LP ) external view returns ( uint );
}

interface IStaking {
    function stake( uint _amount, address _recipient ) external returns ( bool );
}

interface IStakingHelper {
    function stake( uint _amount, address _recipient ) external;
}

contract TimeBondDepository is Ownable {

    using FixedPoint for *;
    using SafeERC20 for IERC20;
    using SafeMath for uint;
    using SafeMath for uint32;




    /* ======== EVENTS ======== */

    event BondCreated( uint deposit, uint indexed payout, uint indexed expires, uint indexed priceInUSD );
    event BondRedeemed( address indexed recipient, uint payout, uint remaining );
    event BondPriceChanged( uint indexed priceInUSD, uint indexed internalPrice, uint indexed debtRatio );
    event ControlVariableAdjustment( uint initialBCV, uint newBCV, uint adjustment, bool addition );




    /* ======== STATE VARIABLES ======== */

    address public immutable Time; // token given as payment for bond
    address public immutable principle; // token used to create bond
    address public immutable treasury; // mints OHM when receives principle
    address public immutable DAO; // receives profit share from bond

    bool public immutable isLiquidityBond; // LP and Reserve bonds are treated slightly different
    address public immutable bondCalculator; // calculates value of LP tokens

    address public staking; // to auto-stake payout
    address public stakingHelper; // to stake and claim if no staking warmup
    bool public useHelper;

    Terms public terms; // stores terms for new bonds
    Adjust public adjustment; // stores adjustment to BCV data

    mapping( address => Bond ) public bondInfo; // stores bond information for depositors

    uint public totalDebt; // total value of outstanding bonds; used for pricing
    uint32 public lastDecay; // reference time for debt decay




    /* ======== STRUCTS ======== */

    // Info for creating new bonds
    struct Terms {
        uint controlVariable; // scaling variable for price
        uint minimumPrice; // vs principle value
        uint maxPayout; // in thousandths of a %. i.e. 500 = 0.5%
        uint fee; // as % of bond payout, in hundreths. ( 500 = 5% = 0.05 for every 1 paid)
        uint maxDebt; // 9 decimal debt ratio, max % total supply created as debt
        uint32 vestingTerm; // in seconds
    }

    // Info for bond holder
    struct Bond {
        uint payout; // OHM remaining to be paid
        uint pricePaid; // In DAI, for front end viewing
        uint32 lastTime; // Last interaction
        uint32 vesting; // Seconds left to vest
    }

    // Info for incremental adjustments to control variable 
    struct Adjust {
        bool add; // addition or subtraction
        uint rate; // increment
        uint target; // BCV when adjustment finished
        uint32 buffer; // minimum length (in seconds) between adjustments
        uint32 lastTime; // time when last adjustment made
    }




    /* ======== INITIALIZATION ======== */

    constructor ( 
        address _Time,
        address _principle,
        address _treasury, 
        address _DAO, 
        address _bondCalculator
    ) {
        require( _Time != address(0) );
        Time = _Time;
        require( _principle != address(0) );
        principle = _principle;
        require( _treasury != address(0) );
        treasury = _treasury;
        require( _DAO != address(0) );
        DAO = _DAO;
        // bondCalculator should be address(0) if not LP bond
        bondCalculator = _bondCalculator;
        isLiquidityBond = ( _bondCalculator != address(0) );
    }

    /**
     *  @notice initializes bond parameters
     *  @param _controlVariable uint
     *  @param _vestingTerm uint32
     *  @param _minimumPrice uint
     *  @param _maxPayout uint
     *  @param _fee uint
     *  @param _maxDebt uint
     *  @param _initialDebt uint
     */
    function initializeBondTerms( 
        uint _controlVariable, 
        uint _minimumPrice,
        uint _maxPayout,
        uint _fee,
        uint _maxDebt,
        uint _initialDebt,
        uint32 _vestingTerm
    ) external onlyPolicy() {
        require( terms.controlVariable == 0, "Bonds must be initialized from 0" );
        terms = Terms ({
            controlVariable: _controlVariable,
            minimumPrice: _minimumPrice,
            maxPayout: _maxPayout,
            fee: _fee,
            maxDebt: _maxDebt,
            vestingTerm: _vestingTerm
        });
        totalDebt = _initialDebt;
        lastDecay = uint32(block.timestamp);
    }



    
    /* ======== POLICY FUNCTIONS ======== */

    enum PARAMETER { VESTING, PAYOUT, FEE, DEBT, MINPRICE }
    /**
     *  @notice set parameters for new bonds
     *  @param _parameter PARAMETER
     *  @param _input uint
     */
    function setBondTerms ( PARAMETER _parameter, uint _input ) external onlyPolicy() {
        if ( _parameter == PARAMETER.VESTING ) { // 0
            require( _input >= 129600, "Vesting must be longer than 36 hours" );
            terms.vestingTerm = uint32(_input);
        } else if ( _parameter == PARAMETER.PAYOUT ) { // 1
            require( _input <= 1000, "Payout cannot be above 1 percent" );
            terms.maxPayout = _input;
        } else if ( _parameter == PARAMETER.FEE ) { // 2
            require( _input <= 10000, "DAO fee cannot exceed payout" );
            terms.fee = _input;
        } else if ( _parameter == PARAMETER.DEBT ) { // 3
            terms.maxDebt = _input;
        } else if ( _parameter == PARAMETER.MINPRICE ) { // 4
            terms.minimumPrice = _input;
        }
    }

    /**
     *  @notice set control variable adjustment
     *  @param _addition bool
     *  @param _increment uint
     *  @param _target uint
     *  @param _buffer uint
     */
    function setAdjustment ( 
        bool _addition,
        uint _increment, 
        uint _target,
        uint32 _buffer 
    ) external onlyPolicy() {
        require( _increment <= terms.controlVariable.mul( 25 ).div( 1000 ), "Increment too large" );

        adjustment = Adjust({
            add: _addition,
            rate: _increment,
            target: _target,
            buffer: _buffer,
            lastTime: uint32(block.timestamp)
        });
    }

    /**
     *  @notice set contract for auto stake
     *  @param _staking address
     *  @param _helper bool
     */
    function setStaking( address _staking, bool _helper ) external onlyPolicy() {
        require( _staking != address(0) );
        if ( _helper ) {
            useHelper = true;
            stakingHelper = _staking;
        } else {
            useHelper = false;
            staking = _staking;
        }
    }


    

    /* ======== USER FUNCTIONS ======== */

    /**
     *  @notice deposit bond
     *  @param _amount uint
     *  @param _maxPrice uint
     *  @param _depositor address
     *  @return uint
     */
    function deposit( 
        uint _amount, 
        uint _maxPrice,
        address _depositor
    ) external returns ( uint ) {
        require( _depositor != address(0), "Invalid address" );

        decayDebt();
        require( totalDebt <= terms.maxDebt, "Max capacity reached" );
        
        uint priceInUSD = bondPriceInUSD(); // Stored in bond info
        uint nativePrice = _bondPrice();

        require( _maxPrice >= nativePrice, "Slippage limit: more than max price" ); // slippage protection

        uint value = ITreasury( treasury ).valueOf( principle, _amount );
        uint payout = payoutFor( value ); // payout to bonder is computed

        require( payout >= 10000000, "Bond too small" ); // must be > 0.01 OHM ( underflow protection )
        require( payout <= maxPayout(), "Bond too large"); // size protection because there is no slippage

        // profits are calculated
        uint fee = payout.mul( terms.fee ).div( 10000 );
        uint profit = value.sub( payout ).sub( fee );

        /**
            principle is transferred in
            approved and
            deposited into the treasury, returning (_amount - profit) OHM
         */
        IERC20( principle ).safeTransferFrom( msg.sender, address(this), _amount );
        IERC20( principle ).approve( address( treasury ), _amount );
        ITreasury( treasury ).deposit( _amount, principle, profit );
        
        if ( fee != 0 ) { // fee is transferred to dao 
            IERC20( Time ).safeTransfer( DAO, fee ); 
        }
        
        // total debt is increased
        totalDebt = totalDebt.add( value ); 
                
        // depositor info is stored
        bondInfo[ _depositor ] = Bond({ 
            payout: bondInfo[ _depositor ].payout.add( payout ),
            vesting: terms.vestingTerm,
            lastTime: uint32(block.timestamp),
            pricePaid: priceInUSD
        });

        // indexed events are emitted
        emit BondCreated( _amount, payout, block.timestamp.add( terms.vestingTerm ), priceInUSD );
        emit BondPriceChanged( bondPriceInUSD(), _bondPrice(), debtRatio() );

        adjust(); // control variable is adjusted
        return payout; 
    }

    /** 
     *  @notice redeem bond for user
     *  @param _recipient address
     *  @param _stake bool
     *  @return uint
     */ 
    function redeem( address _recipient, bool _stake ) external returns ( uint ) {        
        Bond memory info = bondInfo[ _recipient ];
        // (seconds since last interaction / vesting term remaining)
        uint percentVested = percentVestedFor( _recipient );

        if ( percentVested >= 10000 ) { // if fully vested
            delete bondInfo[ _recipient ]; // delete user info
            emit BondRedeemed( _recipient, info.payout, 0 ); // emit bond data
            return stakeOrSend( _recipient, _stake, info.payout ); // pay user everything due

        } else { // if unfinished
            // calculate payout vested
            uint payout = info.payout.mul( percentVested ).div( 10000 );
            // store updated deposit info
            bondInfo[ _recipient ] = Bond({
                payout: info.payout.sub( payout ),
                vesting: info.vesting.sub32( uint32( block.timestamp ).sub32( info.lastTime ) ),
                lastTime: uint32(block.timestamp),
                pricePaid: info.pricePaid
            });

            emit BondRedeemed( _recipient, payout, bondInfo[ _recipient ].payout );
            return stakeOrSend( _recipient, _stake, payout );
        }
    }



    
    /* ======== INTERNAL HELPER FUNCTIONS ======== */

    /**
     *  @notice allow user to stake payout automatically
     *  @param _stake bool
     *  @param _amount uint
     *  @return uint
     */
    function stakeOrSend( address _recipient, bool _stake, uint _amount ) internal returns ( uint ) {
        if ( !_stake ) { // if user does not want to stake
            IERC20( Time ).transfer( _recipient, _amount ); // send payout
        } else { // if user wants to stake
            if ( useHelper ) { // use if staking warmup is 0
                IERC20( Time ).approve( stakingHelper, _amount );
                IStakingHelper( stakingHelper ).stake( _amount, _recipient );
            } else {
                IERC20( Time ).approve( staking, _amount );
                IStaking( staking ).stake( _amount, _recipient );
            }
        }
        return _amount;
    }

    /**
     *  @notice makes incremental adjustment to control variable
     */
    function adjust() internal {
        uint timeCanAdjust = adjustment.lastTime.add( adjustment.buffer );
        if( adjustment.rate != 0 && block.timestamp >= timeCanAdjust ) {
            uint initial = terms.controlVariable;
            if ( adjustment.add ) {
                terms.controlVariable = terms.controlVariable.add( adjustment.rate );
                if ( terms.controlVariable >= adjustment.target ) {
                    adjustment.rate = 0;
                }
            } else {
                terms.controlVariable = terms.controlVariable.sub( adjustment.rate );
                if ( terms.controlVariable <= adjustment.target ) {
                    adjustment.rate = 0;
                }
            }
            adjustment.lastTime = uint32(block.timestamp);
            emit ControlVariableAdjustment( initial, terms.controlVariable, adjustment.rate, adjustment.add );
        }
    }

    /**
     *  @notice reduce total debt
     */
    function decayDebt() internal {
        totalDebt = totalDebt.sub( debtDecay() );
        lastDecay = uint32(block.timestamp);
    }




    /* ======== VIEW FUNCTIONS ======== */

    /**
     *  @notice determine maximum bond size
     *  @return uint
     */
    function maxPayout() public view returns ( uint ) {
        return IERC20( Time ).totalSupply().mul( terms.maxPayout ).div( 100000 );
    }

    /**
     *  @notice calculate interest due for new bond
     *  @param _value uint
     *  @return uint
     */
    function payoutFor( uint _value ) public view returns ( uint ) {
        return FixedPoint.fraction( _value, bondPrice() ).decode112with18().div( 1e16 );
    }


    /**
     *  @notice calculate current bond premium
     *  @return price_ uint
     */
    function bondPrice() public view returns ( uint price_ ) {        
        price_ = terms.controlVariable.mul( debtRatio() ).add( 1000000000 ).div( 1e7 );
        if ( price_ < terms.minimumPrice ) {
            price_ = terms.minimumPrice;
        }
    }

    /**
     *  @notice calculate current bond price and remove floor if above
     *  @return price_ uint
     */
    function _bondPrice() internal returns ( uint price_ ) {
        price_ = terms.controlVariable.mul( debtRatio() ).add( 1000000000 ).div( 1e7 );
        if ( price_ < terms.minimumPrice ) {
            price_ = terms.minimumPrice;        
        } else if ( terms.minimumPrice != 0 ) {
            terms.minimumPrice = 0;
        }
    }

    /**
     *  @notice converts bond price to DAI value
     *  @return price_ uint
     */
    function bondPriceInUSD() public view returns ( uint price_ ) {
        if( isLiquidityBond ) {
            price_ = bondPrice().mul( IBondCalculator( bondCalculator ).markdown( principle ) ).div( 100 );
        } else {
            price_ = bondPrice().mul( 10 ** IERC20( principle ).decimals() ).div( 100 );
        }
    }


    /**
     *  @notice calculate current ratio of debt to OHM supply
     *  @return debtRatio_ uint
     */
    function debtRatio() public view returns ( uint debtRatio_ ) {   
        uint supply = IERC20( Time ).totalSupply();
        debtRatio_ = FixedPoint.fraction( 
            currentDebt().mul( 1e9 ), 
            supply
        ).decode112with18().div( 1e18 );
    }

    /**
     *  @notice debt ratio in same terms for reserve or liquidity bonds
     *  @return uint
     */
    function standardizedDebtRatio() external view returns ( uint ) {
        if ( isLiquidityBond ) {
            return debtRatio().mul( IBondCalculator( bondCalculator ).markdown( principle ) ).div( 1e9 );
        } else {
            return debtRatio();
        }
    }

    /**
     *  @notice calculate debt factoring in decay
     *  @return uint
     */
    function currentDebt() public view returns ( uint ) {
        return totalDebt.sub( debtDecay() );
    }

    /**
     *  @notice amount to decay total debt by
     *  @return decay_ uint
     */
    function debtDecay() public view returns ( uint decay_ ) {
        uint32 timeSinceLast = uint32(block.timestamp).sub32( lastDecay );
        decay_ = totalDebt.mul( timeSinceLast ).div( terms.vestingTerm );
        if ( decay_ > totalDebt ) {
            decay_ = totalDebt;
        }
    }


    /**
     *  @notice calculate how far into vesting a depositor is
     *  @param _depositor address
     *  @return percentVested_ uint
     */
    function percentVestedFor( address _depositor ) public view returns ( uint percentVested_ ) {
        Bond memory bond = bondInfo[ _depositor ];
        uint secondsSinceLast = uint32(block.timestamp).sub( bond.lastTime );
        uint vesting = bond.vesting;

        if ( vesting > 0 ) {
            percentVested_ = secondsSinceLast.mul( 10000 ).div( vesting );
        } else {
            percentVested_ = 0;
        }
    }

    /**
     *  @notice calculate amount of OHM available for claim by depositor
     *  @param _depositor address
     *  @return pendingPayout_ uint
     */
    function pendingPayoutFor( address _depositor ) external view returns ( uint pendingPayout_ ) {
        uint percentVested = percentVestedFor( _depositor );
        uint payout = bondInfo[ _depositor ].payout;

        if ( percentVested >= 10000 ) {
            pendingPayout_ = payout;
        } else {
            pendingPayout_ = payout.mul( percentVested ).div( 10000 );
        }
    }




    /* ======= AUXILLIARY ======= */

    /**
     *  @notice allow anyone to send lost tokens (excluding principle or OHM) to the DAO
     *  @return bool
     */
    function recoverLostToken( address _token ) external returns ( bool ) {
        require( _token != Time );
        require( _token != principle );
        IERC20( _token ).safeTransfer( DAO, IERC20( _token ).balanceOf( address(this) ) );
        return true;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_Time","type":"address"},{"internalType":"address","name":"_principle","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_DAO","type":"address"},{"internalType":"address","name":"_bondCalculator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"deposit","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"payout","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"expires","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"priceInUSD","type":"uint256"}],"name":"BondCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"priceInUSD","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"internalPrice","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"debtRatio","type":"uint256"}],"name":"BondPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remaining","type":"uint256"}],"name":"BondRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"initialBCV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBCV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"adjustment","type":"uint256"},{"indexed":false,"internalType":"bool","name":"addition","type":"bool"}],"name":"ControlVariableAdjustment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"inputs":[],"name":"DAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Time","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adjustment","outputs":[{"internalType":"bool","name":"add","type":"bool"},{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint32","name":"buffer","type":"uint32"},{"internalType":"uint32","name":"lastTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondInfo","outputs":[{"internalType":"uint256","name":"payout","type":"uint256"},{"internalType":"uint256","name":"pricePaid","type":"uint256"},{"internalType":"uint32","name":"lastTime","type":"uint32"},{"internalType":"uint32","name":"vesting","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondPrice","outputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondPriceInUSD","outputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"debtDecay","outputs":[{"internalType":"uint256","name":"decay_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"debtRatio","outputs":[{"internalType":"uint256","name":"debtRatio_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_maxPrice","type":"uint256"},{"internalType":"address","name":"_depositor","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_controlVariable","type":"uint256"},{"internalType":"uint256","name":"_minimumPrice","type":"uint256"},{"internalType":"uint256","name":"_maxPayout","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_maxDebt","type":"uint256"},{"internalType":"uint256","name":"_initialDebt","type":"uint256"},{"internalType":"uint32","name":"_vestingTerm","type":"uint32"}],"name":"initializeBondTerms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLiquidityBond","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDecay","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPayout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"payoutFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"pendingPayoutFor","outputs":[{"internalType":"uint256","name":"pendingPayout_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"percentVestedFor","outputs":[{"internalType":"uint256","name":"percentVested_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"policy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"principle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverLostToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bool","name":"_stake","type":"bool"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_addition","type":"bool"},{"internalType":"uint256","name":"_increment","type":"uint256"},{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint32","name":"_buffer","type":"uint32"}],"name":"setAdjustment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum TimeBondDepository.PARAMETER","name":"_parameter","type":"uint8"},{"internalType":"uint256","name":"_input","type":"uint256"}],"name":"setBondTerms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"},{"internalType":"bool","name":"_helper","type":"bool"}],"name":"setStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingHelper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"standardizedDebtRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"terms","outputs":[{"internalType":"uint256","name":"controlVariable","type":"uint256"},{"internalType":"uint256","name":"minimumPrice","type":"uint256"},{"internalType":"uint256","name":"maxPayout","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"maxDebt","type":"uint256"},{"internalType":"uint32","name":"vestingTerm","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"useHelper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

6101406040523480156200001257600080fd5b5060405162002ec238038062002ec2833981810160405260a08110156200003857600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b031916331780825593519596949592949391926001600160a01b0392909216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b038516620000b557600080fd5b6001600160601b0319606086901b166080526001600160a01b038416620000db57600080fd5b6001600160601b0319606085901b1660a0526001600160a01b0383166200010157600080fd5b6001600160601b0319606084901b1660c0526001600160a01b0382166200012757600080fd5b6001600160601b0319606092831b811660e0529181901b909116610120526001600160a01b0316151560f81b6101005250505060805160601c60a05160601c60c05160601c60e05160601c6101005160f81c6101205160601c612c946200022e60003980610e54528061160f5280611956525080610e2652806115de5280611c5c52508061144f52806116d852806118a3525080610db052806110bd52806112c152806113a35250806105d55280610e835280610f2a52806110ec528061126852806112925280611372528061163e528061186152508061142d528061182252806119af5280611cd15280611dc15280611e945280611f79528061208e5250612c946000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80638dbdbe6d11610125578063d4d863ce116100ad578063e0176de81161007c578063e0176de814610592578063e392a2621461059a578063f5c2ab5b146105a2578063f8e157ea146105c3578063fc7b9c18146105cb57610211565b8063d4d863ce14610513578063d502562514610541578063d796906014610582578063d7ccfb0b1461058a57610211565b8063b4abccba116100f4578063b4abccba14610444578063c5332b7c1461046a578063cd1234b314610472578063cea55f57146104c4578063cf37a891146104cc57610211565b80638dbdbe6d146103cb578063904b3ece146103fd57806398fabd3a14610405578063ae9832cf1461040d57610211565b806346f68ee9116101a857806361d027b31161017757806361d027b31461038e578063759076e51461039657806377b818951461039e5780637927ebf8146103a6578063844b5c7c146103c357610211565b806346f68ee9146103325780634cf088d914610358578063507930ec146103605780635a96ac0a1461038657610211565b80631e321a0f116101e45780631e321a0f146102845780631feed31f146102aa5780632f3f470a146102d8578063451ee4a1146102f457610211565b8063016a42841461021657806301b88ee81461023a5780630505c8c914610272578063089208d81461027a575b600080fd5b61021e6105d3565b604080516001600160a01b039092168252519081900360200190f35b6102606004803603602081101561025057600080fd5b50356001600160a01b03166105f7565b60408051918252519081900360200190f35b61021e610650565b610282610660565b005b6102826004803603604081101561029a57600080fd5b5060ff81351690602001356106f7565b610260600480360360408110156102c057600080fd5b506001600160a01b03813516906020013515156108da565b6102e0610b2a565b604080519115158252519081900360200190f35b6102fc610b3a565b60408051951515865260208601949094528484019290925263ffffffff9081166060850152166080830152519081900360a00190f35b6102826004803603602081101561034857600080fd5b50356001600160a01b0316610b60565b61021e610c4d565b6102606004803603602081101561037657600080fd5b50356001600160a01b0316610c5c565b610282610d04565b61021e610dae565b610260610dd2565b61021e610ded565b610260600480360360208110156103bc57600080fd5b5035610dfc565b610260610e22565b610260600480360360608110156103e157600080fd5b50803590602081013590604001356001600160a01b0316610fbb565b6102606115da565b61021e6116d6565b6102826004803603608081101561042357600080fd5b5080351515906020810135906040810135906060013563ffffffff166116fa565b6102e06004803603602081101561045a57600080fd5b50356001600160a01b031661181e565b61021e611954565b6104986004803603602081101561048857600080fd5b50356001600160a01b0316611978565b60408051948552602085019390935263ffffffff91821684840152166060830152519081900360800190f35b6102606119aa565b610282600480360360e08110156104e257600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c0013563ffffffff16611a62565b6102826004803603604081101561052957600080fd5b506001600160a01b0381351690602001351515611b7c565b610549611c3f565b604080519687526020870195909552858501939093526060850191909152608084015263ffffffff1660a0830152519081900360c00190f35b6102e0611c5a565b610260611c7e565b610260611cbd565b610260611d5a565b6105aa611db3565b6040805163ffffffff9092168252519081900360200190f35b61021e611dbf565b610260611de3565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008061060383610c5c565b6001600160a01b0384166000908152600e6020526040902054909150612710821061063057809250610649565b6106466127106106408385611de9565b90611e49565b92505b5050919050565b6000546001600160a01b03165b90565b6000546001600160a01b031633146106ad576040805162461bcd60e51b81526020600482018190526024820152600080516020612bce833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610744576040805162461bcd60e51b81526020600482018190526024820152600080516020612bce833981519152604482015290519081900360640190fd5b600082600481111561075257fe5b14156107b4576201fa4081101561079a5760405162461bcd60e51b8152600401808060200182810382526024815260200180612c116024913960400191505060405180910390fd5b6009805463ffffffff191663ffffffff83161790556108d6565b60018260048111156107c257fe5b1415610829576103e881111561081f576040805162461bcd60e51b815260206004820181905260248201527f5061796f75742063616e6e6f742062652061626f766520312070657263656e74604482015290519081900360640190fd5b60068190556108d6565b600282600481111561083757fe5b141561089e57612710811115610894576040805162461bcd60e51b815260206004820152601c60248201527f44414f206665652063616e6e6f7420657863656564207061796f757400000000604482015290519081900360640190fd5b60078190556108d6565b60038260048111156108ac57fe5b14156108bc5760088190556108d6565b60048260048111156108ca57fe5b14156108d65760058190555b5050565b60006108e4612af8565b506001600160a01b0383166000908152600e602090815260408083208151608081018352815481526001820154938101939093526002015463ffffffff80821692840192909252600160201b90041660608201529061094285610c5c565b905061271081106109d7576001600160a01b0385166000818152600e6020908152604080832083815560018101849055600201805467ffffffffffffffff19169055855181519081529182019290925281517f51c99f515c87b0d95ba97f616edd182e8f161c4932eac17c6fefe9dab58b77b1929181900390910190a26109ce85858460000151611e8b565b92505050610b24565b81516000906109ee90612710906106409085611de9565b90506040518060800160405280610a1283866000015161218f90919063ffffffff16565b8152602001846020015181526020014263ffffffff168152602001610a66610a4d86604001514263ffffffff166121d190919063ffffffff16565b866060015163ffffffff166121d190919063ffffffff16565b63ffffffff9081169091526001600160a01b0388166000818152600e6020908152604091829020855180825586830151600183015586840151600290920180546060909801518716600160201b0267ffffffff00000000199390971663ffffffff19909816979097179190911694909417909455805185815293840192909252815190927f51c99f515c87b0d95ba97f616edd182e8f161c4932eac17c6fefe9dab58b77b192908290030190a2610b1e868683611e8b565b93505050505b92915050565b600354600160a01b900460ff1681565b600a54600b54600c54600d5460ff9093169263ffffffff80821691600160201b90041685565b6000546001600160a01b03163314610bad576040805162461bcd60e51b81526020600482018190526024820152600080516020612bce833981519152604482015290519081900360640190fd5b6001600160a01b038116610bf25760405162461bcd60e51b8152600401808060200182810382526026815260200180612b3f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b6000610c66612af8565b506001600160a01b0382166000908152600e602090815260408083208151608081018352815481526001820154938101939093526002015463ffffffff808216928401839052600160201b90910481166060840152919291610ccc914282169161218f16565b606083015190915063ffffffff168015610cf757610cf08161064084612710611de9565b9350610cfc565b600093505b505050919050565b6001546001600160a01b03163314610d4d5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b656022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610de8610ddf611d5a565b600f549061218f565b905090565b6003546001600160a01b031681565b6000610b24662386f26fc10000610640610e1d85610e18611c7e565b612213565b61238a565b60007f000000000000000000000000000000000000000000000000000000000000000015610f2057610f1960646106407f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332da80a37f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610edf57600080fd5b505afa158015610ef3573d6000803e3d6000fd5b505050506040513d6020811015610f0957600080fd5b5051610f13611c7e565b90611de9565b905061065d565b610de860646106407f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610f8157600080fd5b505afa158015610f95573d6000803e3d6000fd5b505050506040513d6020811015610fab57600080fd5b505160ff16600a0a610f13611c7e565b60006001600160a01b03821661100a576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6110126123a2565b600854600f541115611062576040805162461bcd60e51b815260206004820152601460248201527313585e0818d85c1858da5d1e481c995858da195960621b604482015290519081900360640190fd5b600061106c610e22565b905060006110786123c7565b9050808510156110b95760405162461bcd60e51b8152600401808060200182810382526023815260200180612bee6023913960400191505060405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631eec5a9a7f0000000000000000000000000000000000000000000000000000000000000000896040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561115057600080fd5b505afa158015611164573d6000803e3d6000fd5b505050506040513d602081101561117a57600080fd5b50519050600061118982610dfc565b9050629896808110156111d4576040805162461bcd60e51b815260206004820152600e60248201526d109bdb99081d1bdbc81cdb585b1b60921b604482015290519081900360640190fd5b6111dc611cbd565b811115611221576040805162461bcd60e51b815260206004820152600e60248201526d426f6e6420746f6f206c6172676560901b604482015290519081900360640190fd5b600061124161271061064060046003015485611de990919063ffffffff16565b9050600061125982611253868661218f565b9061218f565b90506112906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308d612409565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008c6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561132757600080fd5b505af115801561133b573d6000803e3d6000fd5b505050506040513d602081101561135157600080fd5b50506040805163bc157ac160e01b8152600481018c90526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905291517f00000000000000000000000000000000000000000000000000000000000000009092169163bc157ac1916064808201926020929091908290030181600087803b1580156113ee57600080fd5b505af1158015611402573d6000803e3d6000fd5b505050506040513d602081101561141857600080fd5b50508115611474576114746001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000084612469565b600f5461148190856124c0565b600f55604080516080810182526001600160a01b038a166000908152600e602052919091205481906114b390866124c0565b8152602080820189905263ffffffff428181166040808601919091526009805484166060968701526001600160a01b038f166000908152600e865282902087518155948701516001860155908601516002909401805496909501518316600160201b0267ffffffff000000001994841663ffffffff1990971696909617939093169490941790925554889261154d9290918116906124c016565b604080518d8152905186917f1fec6dc81f140574bf43f6b1e420ae1dd47928b9d57db8cbd7b8611063b85ae5919081900360200190a461158b6119aa565b6115936123c7565b61159b610e22565b6040517f375b221f40939bfd8f49723a17cf7bc6d576ebf72efe2cc3e991826f5b3f390a90600090a46115cc61251a565b509098975050505050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000156116ce57610f19633b9aca006106407f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332da80a37f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b5051610f136119aa565b610f196119aa565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314611747576040805162461bcd60e51b81526020600482018190526024820152600080516020612bce833981519152604482015290519081900360640190fd5b60045461175d906103e890610640906019611de9565b8311156117a7576040805162461bcd60e51b8152602060048201526013602482015272496e6372656d656e7420746f6f206c6172676560681b604482015290519081900360640190fd5b6040805160a0810182529415158086526020860185905290850183905263ffffffff91821660608601819052429092166080909501859052600a805460ff19169091179055600b92909255600c55600d805463ffffffff191690911767ffffffff000000001916600160201b909202919091179055565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561185f57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561189e57600080fd5b61194c7f0000000000000000000000000000000000000000000000000000000000000000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561190f57600080fd5b505afa158015611923573d6000803e3d6000fd5b505050506040513d602081101561193957600080fd5b50516001600160a01b0385169190612469565b506001919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e6020526000908152604090208054600182015460029092015490919063ffffffff80821691600160201b90041684565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a0657600080fd5b505afa158015611a1a573d6000803e3d6000fd5b505050506040513d6020811015611a3057600080fd5b50519050611a5c670de0b6b3a7640000610640610e1d611a56633b9aca00610f13610dd2565b85612213565b91505090565b6000546001600160a01b03163314611aaf576040805162461bcd60e51b81526020600482018190526024820152600080516020612bce833981519152604482015290519081900360640190fd5b60045415611b04576040805162461bcd60e51b815260206004820181905260248201527f426f6e6473206d75737420626520696e697469616c697a65642066726f6d2030604482015290519081900360640190fd5b6040805160c08101825288815260208101889052908101869052606081018590526080810184905263ffffffff91821660a09091018190526004979097556005959095556006939093556007919091556008556009805463ffffffff199081169094179055600f556010805490921642909116179055565b6000546001600160a01b03163314611bc9576040805162461bcd60e51b81526020600482018190526024820152600080516020612bce833981519152604482015290519081900360640190fd5b6001600160a01b038216611bdc57600080fd5b8015611c115760038054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b0384161790556108d6565b6003805460ff60a01b19169055600280546001600160a01b0384166001600160a01b03199091161790555050565b60045460055460065460075460085460095463ffffffff1686565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611ca962989680610640633b9aca00611ca3611c9a6119aa565b60045490611de9565b906124c0565b60055490915081101561065d575060055490565b6000610de8620186a06106406004600201547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2857600080fd5b505afa158015611d3c573d6000803e3d6000fd5b505050506040513d6020811015611d5257600080fd5b505190611de9565b6010546000908190611d789063ffffffff428116918116906121d116565b600954600f54919250611d9d9163ffffffff91821691610640919080861690611de916565b9150600f54821115611daf57600f5491505b5090565b60105463ffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f5481565b600082611df857506000610b24565b82820282848281611e0557fe5b0414611e425760405162461bcd60e51b8152600401808060200182810382526021815260200180612bad6021913960400191505060405180910390fd5b9392505050565b6000611e4283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612625565b600082611f3b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb85846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611f0957600080fd5b505af1158015611f1d573d6000803e3d6000fd5b505050506040513d6020811015611f3357600080fd5b506121889050565b600354600160a01b900460ff1615612062576003546040805163095ea7b360e01b81526001600160a01b0392831660048201526024810185905290517f00000000000000000000000000000000000000000000000000000000000000009092169163095ea7b3916044808201926020929091908290030181600087803b158015611fc457600080fd5b505af1158015611fd8573d6000803e3d6000fd5b505050506040513d6020811015611fee57600080fd5b505060035460408051637acb775760e01b8152600481018590526001600160a01b03878116602483015291519190921691637acb775791604480830192600092919082900301818387803b15801561204557600080fd5b505af1158015612059573d6000803e3d6000fd5b50505050612188565b6002546040805163095ea7b360e01b81526001600160a01b0392831660048201526024810185905290517f00000000000000000000000000000000000000000000000000000000000000009092169163095ea7b3916044808201926020929091908290030181600087803b1580156120d957600080fd5b505af11580156120ed573d6000803e3d6000fd5b505050506040513d602081101561210357600080fd5b505060025460408051637acb775760e01b8152600481018590526001600160a01b03878116602483015291519190921691637acb77579160448083019260209291908290030181600087803b15801561215b57600080fd5b505af115801561216f573d6000803e3d6000fd5b505050506040513d602081101561218557600080fd5b50505b5092915050565b6000611e4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126c7565b6000611e4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612721565b61221b612b2c565b6000821161225a5760405162461bcd60e51b8152600401808060200182810382526026815260200180612b876026913960400191505060405180910390fd5b826122745750604080516020810190915260008152610b24565b71ffffffffffffffffffffffffffffffffffff831161231b57600082607085901b8161229c57fe5b0490506001600160e01b038111156122fb576040805162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f770000604482015290519081900360640190fd5b6040518060200160405280826001600160e01b0316815250915050610b24565b600061232c84600160701b85612780565b90506001600160e01b038111156122fb576040805162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f770000604482015290519081900360640190fd5b516612725dd1d243ab6001600160e01b039091160490565b6123ad610ddf611d5a565b600f556010805463ffffffff19164263ffffffff16179055565b60006123e362989680610640633b9aca00611ca3611c9a6119aa565b6005549091508110156123f9575060055461065d565b6005541561065d57600060055590565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612463908590612820565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526124bb908490612820565b505050565b600082820183811015611e42576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600d5460009061253c9063ffffffff600160201b82048116918116906124c016565b600b54909150158015906125505750804210155b1561262257600454600a5460ff161561258a57600b54600454612572916124c0565b6004819055600c5411612585576000600b555b6125ac565b600b546004546125999161218f565b6004819055600c54106125ac576000600b555b600d805467ffffffff000000001916600160201b4263ffffffff1602179055600454600b54600a546040805185815260208101949094528381019290925260ff1615156060830152517fb923e581a0f83128e9e1d8297aa52b18d6744310476e0b54509c054cd7a93b2a916080908290030190a1505b50565b600081836126b15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561267657818101518382015260200161265e565b50505050905090810190601f1680156126a35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816126bd57fe5b0495945050505050565b600081848411156127195760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561267657818101518382015260200161265e565b505050900390565b60008363ffffffff168363ffffffff16111582906127195760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561267657818101518382015260200161265e565b600080600061278f86866128d1565b915091506000848061279d57fe5b8688099050828111156127b1576001820391505b808303925084821061280a576040805162461bcd60e51b815260206004820152601a60248201527f46756c6c4d6174683a3a6d756c4469763a206f766572666c6f77000000000000604482015290519081900360640190fd5b6128158383876128fe565b979650505050505050565b6060612875826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661296e9092919063ffffffff16565b8051909150156124bb5780806020019051602081101561289457600080fd5b50516124bb5760405162461bcd60e51b815260040180806020018281038252602a815260200180612c35602a913960400191505060405180910390fd5b60008080600019848609905083850292508281039150828110156128f6576001820391505b509250929050565b6000818103821680838161290e57fe5b04925080858161291a57fe5b04945080816000038161292957fe5b60028581038087028203028087028203028087028203028087028203028087028203028087028203029586029003909402930460010193909302939093010292915050565b606061297d8484600085612985565b949350505050565b606061299085612af2565b6129e1576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612a205780518252601f199092019160209182019101612a01565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612a82576040519150601f19603f3d011682016040523d82523d6000602084013e612a87565b606091505b50915091508115612a9b57915061297d9050565b805115612aab5780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561267657818101518382015260200161265e565b3b151590565b60405180608001604052806000815260200160008152602001600063ffffffff168152602001600063ffffffff1681525090565b6040805160208101909152600081529056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c4669786564506f696e743a3a6672616374696f6e3a206469766973696f6e206279207a65726f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572536c697070616765206c696d69743a206d6f7265207468616e206d617820707269636556657374696e67206d757374206265206c6f6e676572207468616e20333620686f7572735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212208feb059ef57d7c1360862daf0e7c0e96229c779e7a10f205e6b5a1143c9d2f4064736f6c63430007050033000000000000000000000000b54f16fb19478766a268f172c9480f8da1a7c9c3000000000000000000000000f64e1c5b6e17031f5504481ac8145f4c3eab49170000000000000000000000001c46450211cb2646cc1da3c5242422967ed9e04c00000000000000000000000078a9e536ebda08b5b9edbe5785c9d1d50fa3278c000000000000000000000000819323613abc79016f9d2443a65e9811545382a5

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000b54f16fb19478766a268f172c9480f8da1a7c9c3000000000000000000000000f64e1c5b6e17031f5504481ac8145f4c3eab49170000000000000000000000001c46450211cb2646cc1da3c5242422967ed9e04c00000000000000000000000078a9e536ebda08b5b9edbe5785c9d1d50fa3278c000000000000000000000000819323613abc79016f9d2443a65e9811545382a5

-----Decoded View---------------
Arg [0] : _Time (address): 0xb54f16fb19478766a268f172c9480f8da1a7c9c3
Arg [1] : _principle (address): 0xf64e1c5b6e17031f5504481ac8145f4c3eab4917
Arg [2] : _treasury (address): 0x1c46450211cb2646cc1da3c5242422967ed9e04c
Arg [3] : _DAO (address): 0x78a9e536ebda08b5b9edbe5785c9d1d50fa3278c
Arg [4] : _bondCalculator (address): 0x819323613abc79016f9d2443a65e9811545382a5

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000b54f16fb19478766a268f172c9480f8da1a7c9c3
Arg [1] : 000000000000000000000000f64e1c5b6e17031f5504481ac8145f4c3eab4917
Arg [2] : 0000000000000000000000001c46450211cb2646cc1da3c5242422967ed9e04c
Arg [3] : 00000000000000000000000078a9e536ebda08b5b9edbe5785c9d1d50fa3278c
Arg [4] : 000000000000000000000000819323613abc79016f9d2443a65e9811545382a5


Deployed ByteCode Sourcemap

21917:17551:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22662:34;;;:::i;:::-;;;;-1:-1:-1;;;;;22662:34:0;;;;;;;;;;;;;;38612:400;;;;;;;;;;;;;;;;-1:-1:-1;38612:400:0;-1:-1:-1;;;;;38612:400:0;;:::i;:::-;;;;;;;;;;;;;;;;693:89;;;:::i;918:158::-;;;:::i;:::-;;26619:828;;;;;;;;;;;;;;;;-1:-1:-1;26619:828:0;;;;;;;;;:::i;31215:1240::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31215:1240:0;;;;;;;;;;:::i;23192:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;23277:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1084:260;;;;;;;;;;;;;;;;-1:-1:-1;1084:260:0;-1:-1:-1;;;;;1084:260:0;;:::i;23061:22::-;;;:::i;38001:439::-;;;;;;;;;;;;;;;;-1:-1:-1;38001:439:0;-1:-1:-1;;;;;38001:439:0;;:::i;1356:221::-;;;:::i;22732:33::-;;;:::i;37333:106::-;;;:::i;23114:28::-;;;:::i;35008:161::-;;;;;;;;;;;;;;;;-1:-1:-1;35008:161:0;;:::i;36112:331::-;;;:::i;28801:2263::-;;;;;;;;;;;;;;;;-1:-1:-1;28801:2263:0;;;;;;;;;;;-1:-1:-1;;;;;28801:2263:0;;:::i;36959:275::-;;;:::i;22809:28::-;;;:::i;27643:478::-;;;;;;;;;;;;;;;;-1:-1:-1;27643:478:0;;;;;;;;;;;;;;;;;;;;;:::i;39196:269::-;;;;;;;;;;;;;;;;-1:-1:-1;39196:269:0;-1:-1:-1;;;;;39196:269:0;;:::i;22980:39::-;;;:::i;23343:42::-;;;;;;;;;;;;;;;;-1:-1:-1;23343:42:0;-1:-1:-1;;;;;23343:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36567:271;;;:::i;25681:682::-;;;;;;;;;;;;;;;;-1:-1:-1;25681:682:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28254:318::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28254:318:0;;;;;;;;;;:::i;23222:18::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22881:37;;;:::i;35274:261::-;;;:::i;34738:141::-;;;:::i;37541:297::-;;;:::i;23518:23::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22591:29;;;:::i;23436:21::-;;;:::i;22662:34::-;;;:::o;38612:400::-;38684:19;38717:18;38738:30;38756:10;38738:16;:30::i;:::-;-1:-1:-1;;;;;38793:22:0;;38779:11;38793:22;;;:8;:22;;;;;:29;38717:51;;-1:-1:-1;38857:5:0;38840:22;;38835:170;;38897:6;38880:23;;38835:170;;;38953:40;38986:5;38953:27;:6;38965:13;38953:10;:27::i;:::-;:31;;:40::i;:::-;38936:57;;38835:170;38612:400;;;;;:::o;693:89::-;741:7;768:6;-1:-1:-1;;;;;768:6:0;693:89;;:::o;918:158::-;832:6;;-1:-1:-1;;;;;832:6:0;842:10;832:20;823:67;;;;;-1:-1:-1;;;823:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;823:67:0;;;;;;;;;;;;;;;1034:1:::1;1018:6:::0;;1001:37:::1;::::0;-1:-1:-1;;;;;1018:6:0;;::::1;::::0;1001:37:::1;::::0;1034:1;;1001:37:::1;1066:1;1049:19:::0;;-1:-1:-1;;;;;;1049:19:0::1;::::0;;918:158::o;26619:828::-;832:6;;-1:-1:-1;;;;;832:6:0;842:10;832:20;823:67;;;;;-1:-1:-1;;;823:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;823:67:0;;;;;;;;;;;;;;;26731:17:::1;26717:10;:31;;;;;;;;;26712:728;;;26790:6;26780;:16;;26771:67;;;;-1:-1:-1::0;;;26771:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26853:17:::0;:34;;-1:-1:-1;;26853:34:0::1;;::::0;::::1;;::::0;;26712:728:::1;;;26924:16;26910:10;:30;;;;;;;;;26905:535;;;26982:4;26972:6;:14;;26963:61;;;::::0;;-1:-1:-1;;;26963:61:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27039:15:::0;:24;;;26905:535:::1;;;27100:13;27086:10;:27;;;;;;;;;27081:359;;;27155:5;27145:6;:15;;27136:58;;;::::0;;-1:-1:-1;;;27136:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27209:9:::0;:18;;;27081:359:::1;;;27264:14;27250:10;:28;;;;;;;;;27245:195;;;27301:13:::0;:22;;;27245:195:::1;;;27360:18;27346:10;:32;;;;;;;;;27341:99;;;27401:18:::0;:27;;;27341:99:::1;26619:828:::0;;:::o;31215:1240::-;31285:4;31311:16;;:::i;:::-;-1:-1:-1;;;;;;31330:22:0;;;;;;:8;:22;;;;;;;;31311:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31311:41:0;;;;;;;;31454:30;31340:10;31454:16;:30::i;:::-;31433:51;;31519:5;31502:13;:22;31497:951;;-1:-1:-1;;;;;31568:22:0;;;;;;:8;:22;;;;;;;;31561:29;;;;;;;;;;;;;-1:-1:-1;;31561:29:0;;;31656:11;;31630:42;;;;;;;;;;;;;;;;;;;;;;;;;31712:46;31725:10;31737:6;31745:4;:11;;;31712;:46::i;:::-;31705:53;;;;;;31497:951;31891:11;;31877;;31891:45;;31929:5;;31891:32;;31908:13;31891:15;:32::i;:45::-;31877:59;;32019:267;;;;;;;;32051:25;32068:6;32051:4;:11;;;:15;;:25;;;;:::i;:::-;32019:267;;;;32256:4;:14;;;32019:267;;;;32210:15;32019:267;;;;;;32104:70;32124:48;32157:4;:13;;;32132:15;32124:31;;;;:48;;;;:::i;:::-;32104:4;:12;;;:18;;;;:70;;;;:::i;:::-;32019:267;;;;;;;-1:-1:-1;;;;;31994:22:0;;;;;;:8;:22;;;;;;;;;:292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31994:292:0;-1:-1:-1;;31994:292:0;;;;-1:-1:-1;;31994:292:0;;;;;;;;;;;;;;;;;;32308:65;;;;;;;;;;;;;;31994:22;;32308:65;;;;;;;;;32395:41;32408:10;32420:6;32428;32395:11;:41::i;:::-;32388:48;;;;;31215:1240;;;;;:::o;23192:21::-;;;-1:-1:-1;;;23192:21:0;;;;;:::o;23277:24::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23277:24:0;;;;:::o;1084:260::-;832:6;;-1:-1:-1;;;;;832:6:0;842:10;832:20;823:67;;;;;-1:-1:-1;;;823:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;823:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;1186:23:0;::::1;1177:75;;;;-1:-1:-1::0;;;1177:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1285:6;::::0;;1268:36:::1;::::0;-1:-1:-1;;;;;1268:36:0;;::::1;::::0;1285:6;::::1;::::0;1268:36:::1;::::0;::::1;1315:9;:21:::0;;-1:-1:-1;;;;;;1315:21:0::1;-1:-1:-1::0;;;;;1315:21:0;;;::::1;::::0;;;::::1;::::0;;1084:260::o;23061:22::-;;;-1:-1:-1;;;;;23061:22:0;;:::o;38001:439::-;38071:19;38104:16;;:::i;:::-;-1:-1:-1;;;;;;38123:22:0;;;;;;:8;:22;;;;;;;;38104:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38104:41:0;;;;;;;;;;;38123:22;38180:44;;38187:15;38180:27;;;;:44;:::i;:::-;38250:12;;;;38156:68;;-1:-1:-1;38235:27:0;;38280:11;;38275:158;;38326:44;38361:7;38326:29;:16;38348:5;38326:20;:29::i;:44::-;38309:61;;38275:158;;;38420:1;38403:18;;38275:158;38001:439;;;;;;:::o;1356:221::-;1440:9;;-1:-1:-1;;;;;1440:9:0;1426:10;:23;1417:71;;;;-1:-1:-1;;;1417:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1529:9;;;1521:6;;1504:36;;-1:-1:-1;;;;;1529:9:0;;;;1521:6;;;;1504:36;;;1560:9;;;1551:18;;-1:-1:-1;;;;;;1551:18:0;-1:-1:-1;;;;;1560:9:0;;;1551:18;;;;;;1356:221::o;22732:33::-;;;:::o;37333:106::-;37378:4;37403:28;37418:11;:9;:11::i;:::-;37403:9;;;:13;:28::i;:::-;37396:35;;37333:106;:::o;23114:28::-;;;-1:-1:-1;;;;;23114:28:0;;:::o;35008:161::-;35064:4;35089:72;35155:4;35089:60;:42;35110:6;35118:11;:9;:11::i;:::-;35089:19;:42::i;:::-;:58;:60::i;36112:331::-;36160:11;36189:15;36185:251;;;36231:85;36311:3;36231:74;36265:14;-1:-1:-1;;;;;36248:42:0;;36292:9;36248:55;;;;;;;;;;;;;-1:-1:-1;;;;;36248:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36248:55:0;36231:11;:9;:11::i;:::-;:15;;:74::i;:85::-;36222:94;;36185:251;;;36358:66;36419:3;36358:55;36389:9;-1:-1:-1;;;;;36381:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36381:30:0;36375:36;;:2;:36;36358:11;:9;:11::i;28801:2263::-;28923:4;-1:-1:-1;;;;;28950:24:0;;28941:54;;;;;-1:-1:-1;;;28941:54:0;;;;;;;;;;;;-1:-1:-1;;;28941:54:0;;;;;;;;;;;;;;;29008:11;:9;:11::i;:::-;29052:13;;29039:9;;:26;;29030:61;;;;;-1:-1:-1;;;29030:61:0;;;;;;;;;;;;-1:-1:-1;;;29030:61:0;;;;;;;;;;;;;;;29112:15;29130:16;:14;:16::i;:::-;29112:34;;29180:16;29199:12;:10;:12::i;:::-;29180:31;;29246:11;29233:9;:24;;29224:74;;;;-1:-1:-1;;;29224:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29334:10;29358:8;-1:-1:-1;;;;;29347:29:0;;29378:9;29389:7;29347:51;;;;;;;;;;;;;-1:-1:-1;;;;;29347:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29347:51:0;;-1:-1:-1;29409:11:0;29423:18;29347:51;29423:9;:18::i;:::-;29409:32;;29505:8;29495:6;:18;;29486:47;;;;;-1:-1:-1;;;29486:47:0;;;;;;;;;;;;-1:-1:-1;;;29486:47:0;;;;;;;;;;;;;;;29610:11;:9;:11::i;:::-;29600:6;:21;;29591:49;;;;;-1:-1:-1;;;29591:49:0;;;;;;;;;;;;-1:-1:-1;;;29591:49:0;;;;;;;;;;;;;;;29736:8;29747:36;29776:5;29747:23;29759:5;:9;;;29747:6;:10;;:23;;;;:::i;:36::-;29736:47;-1:-1:-1;29794:11:0;29808:30;29736:47;29808:19;:5;29819:6;29808:9;:19::i;:::-;:23;;:30::i;:::-;29794:44;-1:-1:-1;30019:74:0;-1:-1:-1;;;;;30027:9:0;30019:36;30057:10;30077:4;30084:7;30019:36;:74::i;:::-;30112:9;-1:-1:-1;;;;;30104:27:0;;30142:8;30154:7;30104:59;;;;;;;;;;;;;-1:-1:-1;;;;;30104:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30174:59:0;;;-1:-1:-1;;;30174:59:0;;;;;;;;-1:-1:-1;;;;;30214:9:0;30174:59;;;;;;;;;;;;;;30185:8;30174:29;;;;;;:59;;;;;30104;;30174;;;;;;;;-1:-1:-1;30174:29:0;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30259:8:0;;30254:113;;30315:39;-1:-1:-1;;;;;30323:4:0;30315:27;30344:3;30349;30315:27;:39::i;:::-;30435:9;;:22;;30450:5;30435:13;:22::i;:::-;30423:9;:34;30549:209;;;;;;;;-1:-1:-1;;;;;30578:22:0;;-1:-1:-1;30578:22:0;;;:8;:22;;;;;;:29;30549:209;;30578:43;;30613:6;30578:33;:43::i;:::-;30549:209;;;;;;;;;;30694:15;30549:209;;;;;;;;;;;30645:17;;;;;30549:209;;;;;-1:-1:-1;;;;;30524:22:0;;-1:-1:-1;30524:22:0;;;:8;:22;;;;;:234;;;;;;;;30645:17;30524:234;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30524:234:0;-1:-1:-1;;30524:234:0;;;-1:-1:-1;;30524:234:0;;;;;;;;;;;;;;;;;;30866:17;30736:10;;30845:40;;30694:15;;30866:17;;;30845:19;:40;:::i;:::-;30815:84;;;;;;;;30837:6;;30815:84;;;;;;;;;;30965:11;:9;:11::i;:::-;30951:12;:10;:12::i;:::-;30933:16;:14;:16::i;:::-;30915:63;;;;;;;30991:8;:6;:8::i;:::-;-1:-1:-1;31049:6:0;;28801:2263;-1:-1:-1;;;;;;;;28801:2263:0:o;36959:275::-;37016:4;37039:15;37034:193;;;37079:85;37159:3;37079:74;37113:14;-1:-1:-1;;;;;37096:42:0;;37140:9;37096:55;;;;;;;;;;;;;-1:-1:-1;;;;;37096:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37096:55:0;37079:11;:9;:11::i;37034:193::-;37204:11;:9;:11::i;22809:28::-;;;:::o;27643:478::-;832:6;;-1:-1:-1;;;;;832:6:0;842:10;832:20;823:67;;;;;-1:-1:-1;;;823:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;823:67:0;;;;;;;;;;;;;;;27832:5:::1;:21:::0;:43:::1;::::0;27869:4:::1;::::0;27832:31:::1;::::0;27859:2:::1;27832:25;:31::i;:43::-;27818:10;:57;;27809:91;;;::::0;;-1:-1:-1;;;27809:91:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27809:91:0;;;;;;;;;;;;;::::1;;27926:187;::::0;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;28085:15:::1;27926:187:::0;;::::1;::::0;;;;;;;27913:10:::1;:200:::0;;-1:-1:-1;;27913:200:0::1;::::0;;::::1;::::0;;;;;;;;;;;;-1:-1:-1;;27913:200:0::1;::::0;;::::1;-1:-1:-1::0;;27913:200:0::1;-1:-1:-1::0;;;27913:200:0;;::::1;::::0;;;::::1;::::0;;27643:478::o;39196:269::-;39259:4;39296;-1:-1:-1;;;;;39286:14:0;:6;-1:-1:-1;;;;;39286:14:0;;;39277:25;;;;;;39332:9;-1:-1:-1;;;;;39322:19:0;:6;-1:-1:-1;;;;;39322:19:0;;;39313:30;;;;;;39354:81;39385:3;39398:6;-1:-1:-1;;;;;39390:26:0;;39426:4;39390:43;;;;;;;;;;;;;-1:-1:-1;;;;;39390:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39390:43:0;-1:-1:-1;;;;;39354:29:0;;;:81;:29;:81::i;:::-;-1:-1:-1;39453:4:0;39196:269;;;:::o;22980:39::-;;;:::o;23343:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23343:42:0;;;;:::o;36567:271::-;36610:15;36642:11;36664:4;-1:-1:-1;;;;;36656:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36656:28:0;;-1:-1:-1;36708:122:0;36824:4;36708:110;:92;36743:24;36762:3;36743:13;:11;:13::i;:24::-;36783:6;36708:19;:92::i;:122::-;36695:135;;36567:271;;:::o;25681:682::-;832:6;;-1:-1:-1;;;;;832:6:0;842:10;832:20;823:67;;;;;-1:-1:-1;;;823:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;823:67:0;;;;;;;;;;;;;;;25950:5:::1;:21:::0;:26;25941:73:::1;;;::::0;;-1:-1:-1;;;25941:73:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26033:241;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;;26025:5:::1;:249:::0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26025:249:0;;::::1;::::0;;::::1;::::0;;26285:9:::1;:24:::0;26320:9:::1;:35:::0;;;;::::1;26339:15;26320:35:::0;;::::1;;::::0;;25681:682::o;28254:318::-;832:6;;-1:-1:-1;;;;;832:6:0;842:10;832:20;823:67;;;;;-1:-1:-1;;;823:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;823:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28350:22:0;::::1;28341:33;;;::::0;::::1;;28390:7;28385:180;;;28415:9;:16:::0;;-1:-1:-1;;;;;;;28415:16:0;;::::1;;-1:-1:-1::0;;;;;;28446:24:0::1;-1:-1:-1::0;;;;;28446:24:0;::::1;;::::0;;28385:180:::1;;;28503:9;:17:::0;;-1:-1:-1;;;;28503:17:0::1;::::0;;28535:7:::1;:18:::0;;-1:-1:-1;;;;;28535:18:0;::::1;-1:-1:-1::0;;;;;;28535:18:0;;::::1;;::::0;;28254:318;;:::o;23222:18::-;;;;;;;;;;;;;;;;:::o;22881:37::-;;;:::o;35274:261::-;35317:11;35359:69;35423:3;35359:58;35405:10;35359:40;35386:11;:9;:11::i;:::-;35359:5;:21;;:25;:40::i;:::-;:44;;:58::i;:69::-;35453:18;;35350:78;;-1:-1:-1;35444:27:0;;35439:89;;;-1:-1:-1;35498:18:0;;35274:261;:::o;34738:141::-;34781:4;34806:65;34863:6;34806:51;34840:5;:15;;;34814:4;-1:-1:-1;;;;;34806:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34806:28:0;;:32;:51::i;37541:297::-;37663:9;;37584:11;;;;37632:42;;37663:9;37639:15;37632:29;;;37663:9;;;37632:29;:42;:::i;:::-;37730:17;;37694:9;;37609:65;;-1:-1:-1;37694:55:0;;37730:17;;;;;37694:30;;:9;:30;;;;:13;:30;:::i;:55::-;37685:64;;37774:9;;37765:6;:18;37760:71;;;37810:9;;37801:18;;37760:71;37541:297;;:::o;23518:23::-;;;;;;:::o;22591:29::-;;;:::o;23436:21::-;;;;:::o;2486:250::-;2544:7;2568:6;2564:47;;-1:-1:-1;2598:1:0;2591:8;;2564:47;2635:5;;;2639:1;2635;:5;:1;2659:5;;;;;:10;2651:56;;;;-1:-1:-1;;;2651:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2727:1;2486:250;-1:-1:-1;;;2486:250:0:o;2744:132::-;2802:7;2829:39;2833:1;2836;2829:39;;;;;;;;;;;;;;;;;:3;:39::i;32685:693::-;32774:4;32798:6;32792:554;;32864:4;-1:-1:-1;;;;;32856:23:0;;32881:10;32893:7;32856:46;;;;;;;;;;;;;-1:-1:-1;;;;;32856:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32792:554:0;;-1:-1:-1;32792:554:0;;32981:9;;-1:-1:-1;;;32981:9:0;;;;32976:359;;;33066:13;;33042:48;;;-1:-1:-1;;;33042:48:0;;-1:-1:-1;;;;;33066:13:0;;;33042:48;;;;;;;;;;;;33050:4;33042:22;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;33042:22:0;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33125:13:0;;33109:60;;;-1:-1:-1;;;33109:60:0;;;;;;;;-1:-1:-1;;;;;33109:60:0;;;;;;;;;33125:13;;;;;33109:37;;:60;;;;;33125:13;;33109:60;;;;;;;33125:13;;33109:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32976:359;;;33234:7;;33210:42;;;-1:-1:-1;;;33210:42:0;;-1:-1:-1;;;;;33234:7:0;;;33210:42;;;;;;;;;;;;33218:4;33210:22;;;;;;:42;;;;;;;;;;;;;;;-1:-1:-1;33210:22:0;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33281:7:0;;33271:48;;;-1:-1:-1;;;33271:48:0;;;;;;;;-1:-1:-1;;;;;33271:48:0;;;;;;;;;33281:7;;;;;33271:25;;:48;;;;;33210:42;;33271:48;;;;;;;33281:7;;33271:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32976:359:0;-1:-1:-1;33363:7:0;32685:693;-1:-1:-1;;32685:693:0:o;1799:136::-;1857:7;1884:43;1888:1;1891;1884:43;;;;;;;;;;;;;;;;;:3;:43::i;2143:137::-;2201:6;2227:45;2233:1;2236;2227:45;;;;;;;;;;;;;;;;;:5;:45::i;20577:719::-;20658:16;;:::i;:::-;20709:1;20695:11;:15;20687:66;;;;-1:-1:-1;;;20687:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20768:14;20764:50;;-1:-1:-1;20791:23:0;;;;;;;;;-1:-1:-1;20791:23:0;;20784:30;;20764:50;20831:24;;;20827:462;;20872:14;20917:11;20003:3;20890:23;;;20917:11;20889:39;;;;;;-1:-1:-1;;;;;;20951:21:0;;;20943:64;;;;;-1:-1:-1;;;20943:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21029:26;;;;;;;;21047:6;-1:-1:-1;;;;;21029:26:0;;;;21022:33;;;;;20827:462;21088:14;21105:45;21121:9;-1:-1:-1;;;21138:11:0;21105:15;:45::i;:::-;21088:62;-1:-1:-1;;;;;;21173:21:0;;;21165:64;;;;;-1:-1:-1;;;21165:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20432:137;20534:7;20545:16;-1:-1:-1;;;;;20529:13:0;;;:32;;20432:137::o;34458:135::-;34511:28;34526:11;:9;:11::i;34511:28::-;34499:9;:40;34550:9;:35;;-1:-1:-1;;34550:35:0;34569:15;34550:35;;;;;34458:135::o;35662:345::-;35703:11;35737:69;35801:3;35737:58;35783:10;35737:40;35764:11;:9;:11::i;35737:69::-;35831:18;;35728:78;;-1:-1:-1;35822:27:0;;35817:183;;;-1:-1:-1;35876:18:0;;35817:183;;;35925:18;;:23;35920:80;;35987:1;35966:18;:22;35662:345;:::o;17100:205::-;17228:68;;;-1:-1:-1;;;;;17228:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17228:68:0;-1:-1:-1;;;17228:68:0;;;17201:96;;17221:5;;17201:19;:96::i;:::-;17100:205;;;;:::o;16915:177::-;17025:58;;;-1:-1:-1;;;;;17025:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17025:58:0;-1:-1:-1;;;17025:58:0;;;16998:86;;17018:5;;16998:19;:86::i;:::-;16915:177;;;:::o;1610:181::-;1668:7;1700:5;;;1724:6;;;;1716:46;;;;;-1:-1:-1;;;1716:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;33470:927;33554:17;;33508:18;;33529:44;;33554:17;-1:-1:-1;;;33529:19:0;;;;;33554:17;;;33529:23;:44;:::i;:::-;33588:15;;33508:65;;-1:-1:-1;33588:20:0;;;;:56;;;33631:13;33612:15;:32;;33588:56;33584:806;;;33677:5;:21;33718:10;:14;;;33713:494;;;33805:15;;33778:5;:21;:44;;:25;:44::i;:::-;33754:5;:68;;;33871:17;;-1:-1:-1;33841:112:0;;33932:1;33914:15;:19;33841:112;33713:494;;;34044:15;;34017:5;:21;:44;;:25;:44::i;:::-;33993:5;:68;;;34110:17;;-1:-1:-1;34080:112:0;;34171:1;34153:15;:19;34080:112;34221:19;:45;;-1:-1:-1;;34221:45:0;-1:-1:-1;;;34250:15:0;34221:45;;;;;;:19;34322:21;34345:15;;34221:10;34362:14;34286:92;;;;;;;;;;;;;;;;;;;;34362:14;;34286:92;;;;;;;;;;;;;;;;;33584:806;;33470:927;:::o;2884:189::-;2970:7;3005:12;2998:5;2990:28;;;;-1:-1:-1;;;2990:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3029:9;3045:1;3041;:5;;;;;;;2884:189;-1:-1:-1;;;;;2884:189:0:o;1943:192::-;2029:7;2065:12;2057:6;;;;2049:29;;;;-1:-1:-1;;;2049:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2101:5:0;;;1943:192::o;2288:190::-;2374:6;2406:1;2401:6;;:1;:6;;;;2409:12;2393:29;;;;;-1:-1:-1;;;2393:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19477:347;19583:7;19604:9;19615;19628:13;19636:1;19639;19628:7;:13::i;:::-;19603:38;;;;19652:10;19678:1;19665:15;;;;;19675:1;19672;19665:15;19652:28;;19700:1;19695:2;:6;19691:18;;;19708:1;19703:6;;;;19691:18;19725:2;19720:7;;;;19750:1;19746;:5;19738:44;;;;;-1:-1:-1;;;19738:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19800:16;19808:1;19811;19814;19800:7;:16::i;:::-;19793:23;19477:347;-1:-1:-1;;;;;;;19477:347:0:o;18318:420::-;18401:23;18427:69;18455:4;18427:69;;;;;;;;;;;;;;;;;18435:5;-1:-1:-1;;;;;18427:27:0;;;:69;;;;;:::i;:::-;18511:17;;18401:95;;-1:-1:-1;18511:21:0;18507:224;;18653:10;18642:30;;;;;;;;;;;;;;;-1:-1:-1;18642:30:0;18634:85;;;;-1:-1:-1;;;18634:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18769:210;18830:9;;;-1:-1:-1;;18886:1:0;18883;18876:25;18863:38;;18920:1;18916;:5;18912:9;;18941:1;18936:2;:6;18932:10;;18962:1;18957:2;:6;18953:18;;;18970:1;18965:6;;;;18953:18;18769:210;;;;;;:::o;18987:482::-;19093:7;19132:2;;;19128:6;;;19133:1;19128:6;19145:9;;;;;;;19170:4;19165:9;;;;;;;;;19205:4;19197;19196:5;;19195:14;;;;;19254:1;:9;;;19283:5;;;19279:9;;19274:14;19308:5;;;19304:9;;19299:14;19333:5;;;19329:9;;19324:14;19358:5;;;19354:9;;19349:14;19383:5;;;19379:9;;19374:14;19408:5;;;19404:9;;19399:14;19433:5;;;19429:9;;19424:14;;;19195;;19212:1;19195:18;19190:24;;;;19185:29;;;;19456:5;;18987:482;-1:-1:-1;;18987:482:0:o;4585:232::-;4724:12;4756:53;4779:6;4787:4;4793:1;4796:12;4756:22;:53::i;:::-;4749:60;4585:232;-1:-1:-1;;;;4585:232:0:o;5643:1025::-;5819:12;5852:18;5863:6;5852:10;:18::i;:::-;5844:60;;;;;-1:-1:-1;;;5844:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5978:12;5992:23;6019:6;-1:-1:-1;;;;;6019:11:0;6039:8;6050:4;6019:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6019:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5977:78;;;;6070:7;6066:595;;;6101:10;-1:-1:-1;6094:17:0;;-1:-1:-1;6094:17:0;6066:595;6215:17;;:21;6211:439;;6478:10;6472:17;6539:15;6526:10;6522:2;6518:19;6511:44;6426:148;6614:20;;-1:-1:-1;;;6614:20:0;;;;;;;;;;;;;;;;;6621:12;;6614:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3758:233;3936:20;3975:8;;;3758:233::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://8feb059ef57d7c1360862daf0e7c0e96229c779e7a10f205e6b5a1143c9d2f40
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.