ETH Price: $2,009.90 (+2.77%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Vested Tok...107960432020-09-04 16:49:572005 days ago1599238197IN
0x8bbB6c4B...44Ee8ea02
0 ETH0.0298097204
Add Token Grant107918012020-09-04 1:22:422006 days ago1599182562IN
0x8bbB6c4B...44Ee8ea02
0 ETH0.0328308200

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vesting

Compiler Version
v0.5.8+commit.23d335f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2020-09-03
*/

// https://github.com/dapphub/dappsys-monolithic/blob/de9114c5fa1b881bf16b1414e7ed90cd3cb2e361/auth.sol

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

pragma solidity >=0.4.23;

contract DSAuthority {
    function canCall(
        address src, address dst, bytes4 sig
    ) public view returns (bool);
}

contract DSAuthEvents {
    event LogSetAuthority (address indexed authority);
    event LogSetOwner     (address indexed owner);
}

contract DSAuth is DSAuthEvents {
    DSAuthority  public  authority;
    address      public  owner;

    constructor() public {
        owner = msg.sender;
        emit LogSetOwner(msg.sender);
    }

    function setOwner(address owner_)
        public
        auth
    {
        owner = owner_;
        emit LogSetOwner(owner);
    }

    function setAuthority(DSAuthority authority_)
        public
        auth
    {
        authority = authority_;
        emit LogSetAuthority(address(authority));
    }

    modifier auth {
        require(isAuthorized(msg.sender, msg.sig), "ds-auth-unauthorized");
        _;
    }

    function isAuthorized(address src, bytes4 sig) internal view returns (bool) {
        if (src == address(this)) {
            return true;
        } else if (src == owner) {
            return true;
        } else if (authority == DSAuthority(0)) {
            return false;
        } else {
            return authority.canCall(src, address(this), sig);
        }
    }
}


// https://github.com/dapphub/dappsys-monolithic/blob/de9114c5fa1b881bf16b1414e7ed90cd3cb2e361/erc20.sol

// erc20.sol -- API for the ERC20 token standard

// See <https://github.com/ethereum/EIPs/issues/20>.

// This file likely does not meet the threshold of originality
// required for copyright to apply.  As a result, this is free and
// unencumbered software belonging to the public domain.

pragma solidity >0.4.20;

contract ERC20Events {
    event Approval(address indexed src, address indexed guy, uint wad);
    event Transfer(address indexed src, address indexed dst, uint wad);
}

contract ERC20 is ERC20Events {
    function totalSupply() public view returns (uint);
    function balanceOf(address guy) public view returns (uint);
    function allowance(address src, address guy) public view returns (uint);

    function approve(address guy, uint wad) public returns (bool);
    function transfer(address dst, uint wad) public returns (bool);
    function transferFrom(
        address src, address dst, uint wad
    ) public returns (bool);
}


// https://github.com/dapphub/dappsys-monolithic/blob/de9114c5fa1b881bf16b1414e7ed90cd3cb2e361/math.sol

/// math.sol -- mixin for inline numerical wizardry

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

pragma solidity >0.4.13;

contract DSMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, "ds-math-add-overflow");
    }
    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, "ds-math-sub-underflow");
    }
    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow");
    }

    function min(uint x, uint y) internal pure returns (uint z) {
        return x <= y ? x : y;
    }
    function max(uint x, uint y) internal pure returns (uint z) {
        return x >= y ? x : y;
    }
    function imin(int x, int y) internal pure returns (int z) {
        return x <= y ? x : y;
    }
    function imax(int x, int y) internal pure returns (int z) {
        return x >= y ? x : y;
    }

    uint constant WAD = 10 ** 18;
    uint constant RAY = 10 ** 27;

    function wmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), WAD / 2) / WAD;
    }
    function rmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), RAY / 2) / RAY;
    }
    function wdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, WAD), y / 2) / y;
    }
    function rdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, RAY), y / 2) / y;
    }

    // This famous algorithm is called "exponentiation by squaring"
    // and calculates x^n with x as fixed-point and n as regular unsigned.
    //
    // It's O(log n), instead of O(n) for naive repeated multiplication.
    //
    // These facts are why it works:
    //
    //  If n is even, then x^n = (x^2)^(n/2).
    //  If n is odd,  then x^n = x * x^(n-1),
    //   and applying the equation for even x gives
    //    x^n = x * (x^2)^((n-1) / 2).
    //
    //  Also, EVM division is flooring and
    //    floor[(n-1) / 2] = floor[n / 2].
    //
    function rpow(uint x, uint n) internal pure returns (uint z) {
        z = n % 2 != 0 ? x : RAY;

        for (n /= 2; n != 0; n /= 2) {
            x = rmul(x, x);

            if (n % 2 != 0) {
                z = rmul(z, x);
            }
        }
    }
}


// https://github.com/JoinColony/colonyToken/blob/master/contracts/ERC20Extended.sol

/*
  This file is part of The Colony Network.

  The Colony Network is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  The Colony Network is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with The Colony Network. If not, see <http://www.gnu.org/licenses/>.
*/

pragma solidity 0.5.8;


contract ERC20Extended is ERC20 {
  event Mint(address indexed guy, uint wad);
  event Burn(address indexed guy, uint wad);

  function mint(uint wad) public;
  function mint(address guy, uint wad) public;
  function burn(uint wad) public;
  function burn(address guy, uint wad) public;
}

// https://github.com/dapphub/dappsys-monolithic/blob/de9114c5fa1b881bf16b1414e7ed90cd3cb2e361/base.sol

/// base.sol -- basic ERC20 implementation

// Copyright (C) 2015, 2016, 2017  DappHub, LLC

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

pragma solidity >=0.4.23;

contract DSTokenBase is ERC20, DSMath {
    uint256                                            _supply;
    mapping (address => uint256)                       _balances;
    mapping (address => mapping (address => uint256))  _approvals;

    constructor(uint supply) public {
        _balances[msg.sender] = supply;
        _supply = supply;
    }

    function totalSupply() public view returns (uint) {
        return _supply;
    }
    function balanceOf(address src) public view returns (uint) {
        return _balances[src];
    }
    function allowance(address src, address guy) public view returns (uint) {
        return _approvals[src][guy];
    }

    function transfer(address dst, uint wad) public returns (bool) {
        return transferFrom(msg.sender, dst, wad);
    }

    function transferFrom(address src, address dst, uint wad)
        public
        returns (bool)
    {
        if (src != msg.sender) {
            require(_approvals[src][msg.sender] >= wad, "ds-token-insufficient-approval");
            _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad);
        }

        require(_balances[src] >= wad, "ds-token-insufficient-balance");
        _balances[src] = sub(_balances[src], wad);
        _balances[dst] = add(_balances[dst], wad);

        emit Transfer(src, dst, wad);

        return true;
    }

    function approve(address guy, uint wad) public returns (bool) {
        _approvals[msg.sender][guy] = wad;

        emit Approval(msg.sender, guy, wad);

        return true;
    }
}

// https://github.com/JoinColony/colonyToken/blob/master/contracts/Token.sol

/*
  This file is part of The Colony Network.

  The Colony Network is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  The Colony Network is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with The Colony Network. If not, see <http://www.gnu.org/licenses/>.
*/

pragma solidity 0.5.8;

contract Token is DSTokenBase(0), DSAuth, ERC20Extended {
  uint8 public decimals;
  string public symbol;
  string public name;

  bool public locked;

  modifier unlocked {
    if (locked) {
      require(isAuthorized(msg.sender, msg.sig), "colony-token-unauthorised");
    }
    _;
  }

  constructor(string memory _name, string memory _symbol, uint8 _decimals) public {
    name = _name;
    symbol = _symbol;
    decimals = _decimals;
    locked = true;
  }

  function transferFrom(address src, address dst, uint wad) public 
  unlocked
  returns (bool)
  {
    return super.transferFrom(src, dst, wad);
  }

  function mint(uint wad) public auth {
    mint(msg.sender, wad);
  }

  function burn(uint wad) public {
    burn(msg.sender, wad);
  }

  function mint(address guy, uint wad) public auth {
    _balances[guy] = add(_balances[guy], wad);
    _supply = add(_supply, wad);
    emit Mint(guy, wad);
    emit Transfer(address(0x0), guy, wad);
  }

  function burn(address guy, uint wad) public {
    if (guy != msg.sender) {
      require(_approvals[guy][msg.sender] >= wad, "ds-token-insufficient-approval");
      _approvals[guy][msg.sender] = sub(_approvals[guy][msg.sender], wad);
    }

    require(_balances[guy] >= wad, "ds-token-insufficient-balance");
    _balances[guy] = sub(_balances[guy], wad);
    _supply = sub(_supply, wad);
    emit Burn(guy, wad);
  }

  function unlock() public
  auth
  {
    locked = false;
  }
}

pragma solidity 0.5.8;

/**
 * @title Vesting
 * Version of The Colony Network Vesting contract modified to include a
 * deployer defined refund recipient.
 * @author Val Mack - <val@quantfive.org>
 * https://github.com/JoinColony/colonyToken/blob/master/contracts/Vesting.sol
 *
 * @notice See original GNU GPL license from The Colony Network below:
 *
 * > This file is part of The Colony Network.
 *
 * > The Colony Network is free software: you can redistribute it and/or modify
 * > it under the terms of the GNU General Public License as published by
 * > the Free Software Foundation, either version 3 of the License, or
 * > (at your option) any later version.
 *
 * > The Colony Network is distributed in the hope that it will be useful,
 * > but WITHOUT ANY WARRANTY; without even the implied warranty of
 * > MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * > GNU General Public License for more details.
 *
 * > You should have received a copy of the GNU General Public License
 * > along with The Colony Network. If not, see <http://www.gnu.org/licenses/>.
 *
 */
contract Vesting is DSMath {
  Token public token;
  address public colonyMultiSig;
  address public refundRecipient;

  uint constant internal SECONDS_PER_MONTH = 2628000;

  event GrantAdded(address recipient, uint256 startTime, uint128 amount, uint16 vestingDuration, uint16 vestingCliff);
  event GrantRemoved(address recipient, uint128 amountVested, uint128 amountNotVested);
  event GrantTokensClaimed(address recipient, uint128 amountClaimed);

  struct Grant {
    uint startTime;
    uint128 amount;
    uint16 vestingDuration;
    uint16 vestingCliff;
    uint16 monthsClaimed;
    uint128 totalClaimed;
  }
  mapping (address => Grant) public tokenGrants;

  modifier onlyColonyMultiSig {
    require(msg.sender == colonyMultiSig, "colony-vesting-unauthorized");
    _;
  }

  modifier onlyRefundRecipient {
    require(msg.sender == refundRecipient, "colony-vesting-unauthorized");
    _;
  }

  modifier nonZeroAddress(address x) {
    require(x != address(0), "colony-token-zero-address");
    _;
  }

  modifier noGrantExistsForUser(address _user) {
    require(tokenGrants[_user].startTime == 0, "colony-token-user-grant-exists");
    _;
  }

  constructor(address _token, address _colonyMultiSig, address _refundRecipient) public
  nonZeroAddress(_token)
  nonZeroAddress(_colonyMultiSig)
  {
    token = Token(_token);
    colonyMultiSig = _colonyMultiSig;
    refundRecipient = _refundRecipient;
  }

  /// @notice Add a new token grant for user `_recipient`. Only one grant per user is allowed
  /// The amount of CLNY tokens here need to be preapproved for transfer by this `Vesting` contract before this call
  /// Secured to the Colony MultiSig only
  /// @param _recipient Address of the token grant recipient entitled to claim the grant funds
  /// @param _startTime Grant start time as seconds since unix epoch
  /// Allows backdating grants by passing time in the past. If `0` is passed here current blocktime is used. 
  /// @param _amount Total number of tokens in grant
  /// @param _vestingDuration Number of months of the grant's duration
  /// @param _vestingCliff Number of months of the grant's vesting cliff
  function addTokenGrant(address _recipient, uint256 _startTime, uint128 _amount, uint16 _vestingDuration, uint16 _vestingCliff) public 
  onlyColonyMultiSig
  noGrantExistsForUser(_recipient)
  {
    require(_vestingCliff > 0, "coony-token-zero-vesting-cliff");
    require(_vestingDuration > _vestingCliff, "colony-token-cliff-longer-than-duration");
    uint amountVestedPerMonth = _amount / _vestingDuration;
    require(amountVestedPerMonth > 0, "colony-token-zero-amount-vested-per-month");

    // Transfer the grant tokens under the control of the vesting contract
    token.transferFrom(colonyMultiSig, address(this), _amount);

    Grant memory grant = Grant({
      startTime: _startTime == 0 ? now : _startTime,
      amount: _amount,
      vestingDuration: _vestingDuration,
      vestingCliff: _vestingCliff,
      monthsClaimed: 0,
      totalClaimed: 0
    });

    tokenGrants[_recipient] = grant;
    emit GrantAdded(_recipient, grant.startTime, _amount, _vestingDuration, _vestingCliff);
  }

  /// @notice Terminate token grant transferring all vested tokens to the `_recipient`
  /// and returning all non-vested tokens to the Colony MultiSig
  /// Secured to the Colony MultiSig only
  /// @param _recipient Address of the token grant recipient
  function removeTokenGrant(address _recipient) public 
  onlyRefundRecipient
  {
    Grant storage tokenGrant = tokenGrants[_recipient];
    uint16 monthsVested;
    uint128 amountVested;
    (monthsVested, amountVested) = calculateGrantClaim(_recipient);
    uint128 amountNotVested = uint128(sub(sub(tokenGrant.amount, tokenGrant.totalClaimed), amountVested));

    require(token.transfer(_recipient, amountVested), "colony-token-recipient-transfer-failed");
    require(token.transfer(refundRecipient, amountNotVested), "colony-token-refund-recipient-transfer-failed");

    tokenGrant.startTime = 0;
    tokenGrant.amount = 0;
    tokenGrant.vestingDuration = 0;
    tokenGrant.vestingCliff = 0;
    tokenGrant.monthsClaimed = 0;
    tokenGrant.totalClaimed = 0;

    emit GrantRemoved(_recipient, amountVested, amountNotVested);
  }

  /// @notice Allows a grant recipient to claim their vested tokens. Errors if no tokens have vested
  /// It is advised recipients check they are entitled to claim via `calculateGrantClaim` before calling this
  function claimVestedTokens() public {
    uint16 monthsVested;
    uint128 amountVested;
    (monthsVested, amountVested) = calculateGrantClaim(msg.sender);
    require(amountVested > 0, "colony-token-zero-amount-vested");

    Grant storage tokenGrant = tokenGrants[msg.sender];
    tokenGrant.monthsClaimed = uint16(add(tokenGrant.monthsClaimed, monthsVested));
    tokenGrant.totalClaimed = uint128(add(tokenGrant.totalClaimed, amountVested));
    
    require(token.transfer(msg.sender, amountVested), "colony-token-sender-transfer-failed");
    emit GrantTokensClaimed(msg.sender, amountVested);
  }

  /// @notice Calculate the vested and unclaimed months and tokens available for `_recepient` to claim
  /// Due to rounding errors once grant duration is reached, returns the entire left grant amount
  /// Returns (0, 0) if cliff has not been reached
  function calculateGrantClaim(address _recipient) public view returns (uint16, uint128) {
    Grant storage tokenGrant = tokenGrants[_recipient];

    // For grants created with a future start date, that hasn't been reached, return 0, 0
    if (now < tokenGrant.startTime) {
      return (0, 0);
    }

    // Check cliff was reached
    uint elapsedTime = sub(now, tokenGrant.startTime);
    uint elapsedMonths = elapsedTime / SECONDS_PER_MONTH;
    
    if (elapsedMonths < tokenGrant.vestingCliff) {
      return (0, 0);
    }

    // If over vesting duration, all tokens vested
    if (elapsedMonths >= tokenGrant.vestingDuration) {
      uint128 remainingGrant = tokenGrant.amount - tokenGrant.totalClaimed;
      return (tokenGrant.vestingDuration, remainingGrant);
    } else {
      uint16 monthsVested = uint16(sub(elapsedMonths, tokenGrant.monthsClaimed));
      uint amountVestedPerMonth = tokenGrant.amount / tokenGrant.vestingDuration;
      uint128 amountVested = uint128(mul(monthsVested, amountVestedPerMonth));
      return (monthsVested, amountVested);
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"refundRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"colonyMultiSig","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"removeTokenGrant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenGrants","outputs":[{"name":"startTime","type":"uint256"},{"name":"amount","type":"uint128"},{"name":"vestingDuration","type":"uint16"},{"name":"vestingCliff","type":"uint16"},{"name":"monthsClaimed","type":"uint16"},{"name":"totalClaimed","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_startTime","type":"uint256"},{"name":"_amount","type":"uint128"},{"name":"_vestingDuration","type":"uint16"},{"name":"_vestingCliff","type":"uint16"}],"name":"addTokenGrant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimVestedTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_recipient","type":"address"}],"name":"calculateGrantClaim","outputs":[{"name":"","type":"uint16"},{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_colonyMultiSig","type":"address"},{"name":"_refundRecipient","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"startTime","type":"uint256"},{"indexed":false,"name":"amount","type":"uint128"},{"indexed":false,"name":"vestingDuration","type":"uint16"},{"indexed":false,"name":"vestingCliff","type":"uint16"}],"name":"GrantAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amountVested","type":"uint128"},{"indexed":false,"name":"amountNotVested","type":"uint128"}],"name":"GrantRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amountClaimed","type":"uint128"}],"name":"GrantTokensClaimed","type":"event"}]

608060405234801561001057600080fd5b50604051606080611c348339810180604052606081101561003057600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f636f6c6f6e792d746f6b656e2d7a65726f2d616464726573730000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561019d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f636f6c6f6e792d746f6b656e2d7a65726f2d616464726573730000000000000081525060200191505060405180910390fd5b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050506119c1806102736000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063da09118e1161005b578063da09118e14610240578063e74f3fbb146102c6578063fc0c546a146102d0578063fd75b8d41461031a57610088565b806301f5ad5a1461008d57806308ec6164146100d75780633023641d14610121578063b81a4d8f14610165575b600080fd5b6100956103a5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100df6103cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101636004803603602081101561013757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103f1565b005b6101a76004803603602081101561017b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109f2565b60405180878152602001866fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020018561ffff1661ffff1681526020018461ffff1661ffff1681526020018361ffff1661ffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390f35b6102c4600480360360a081101561025657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080356fffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803561ffff169060200190929190505050610a90565b005b6102ce611132565b005b6102d86114b9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61035c6004803603602081101561033057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114de565b604051808361ffff1661ffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f636f6c6f6e792d76657374696e672d756e617574686f72697a6564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080610503846114de565b8092508193505050600061059661057e8560010160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168660020160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166116ce565b836fffffffffffffffffffffffffffffffff166116ce565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561065257600080fd5b505af1158015610666573d6000803e3d6000fd5b505050506040513d602081101561067c57600080fd5b81019080805190602001909291905050506106e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806119246026913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156107be57600080fd5b505af11580156107d2573d6000803e3d6000fd5b505050506040513d60208110156107e857600080fd5b810190808051906020019092919050505061084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806118d0602d913960400191505060405180910390fd5b6000846000018190555060008460010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060008460010160106101000a81548161ffff021916908361ffff16021790555060008460010160126101000a81548161ffff021916908361ffff16021790555060008460010160146101000a81548161ffff021916908361ffff16021790555060008460020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f340f6477ea48f04683f1f869a730e23ed8123e47f682b448d93174501e7aefdb858383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001935050505060405180910390a15050505050565b60036020528060005260406000206000915090508060000154908060010160009054906101000a90046fffffffffffffffffffffffffffffffff16908060010160109054906101000a900461ffff16908060010160129054906101000a900461ffff16908060010160149054906101000a900461ffff16908060020160009054906101000a90046fffffffffffffffffffffffffffffffff16905086565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f636f6c6f6e792d76657374696e672d756e617574686f72697a6564000000000081525060200191505060405180910390fd5b846000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414610c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f636f6c6f6e792d746f6b656e2d757365722d6772616e742d657869737473000081525060200191505060405180910390fd5b60008261ffff1611610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f636f6f6e792d746f6b656e2d7a65726f2d76657374696e672d636c696666000081525060200191505060405180910390fd5b8161ffff168361ffff1611610ce6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806118fd6027913960400191505060405180910390fd5b60008361ffff16856fffffffffffffffffffffffffffffffff1681610d0757fe5b046fffffffffffffffffffffffffffffffff16905060008111610d75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061194a6029913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630886040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015610e8557600080fd5b505af1158015610e99573d6000803e3d6000fd5b505050506040513d6020811015610eaf57600080fd5b810190808051906020019092919050505050610ec9611869565b6040518060c0016040528060008914610ee25788610ee4565b425b8152602001876fffffffffffffffffffffffffffffffff1681526020018661ffff1681526020018561ffff168152602001600061ffff16815260200160006fffffffffffffffffffffffffffffffff16815250905080600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060408201518160010160106101000a81548161ffff021916908361ffff16021790555060608201518160010160126101000a81548161ffff021916908361ffff16021790555060808201518160010160146101000a81548161ffff021916908361ffff16021790555060a08201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507f4995f92ede8051f62ebd282d2097795d0569de63589fb49da0064f43cb47c8af888260000151888888604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff1681526020019550505050505060405180910390a15050505050505050565b60008061113e336114de565b80925081935050506000816fffffffffffffffffffffffffffffffff16116111ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f636f6c6f6e792d746f6b656e2d7a65726f2d616d6f756e742d7665737465640081525060200191505060405180910390fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506112358160010160149054906101000a900461ffff1661ffff168461ffff16611751565b8160010160146101000a81548161ffff021916908361ffff1602179055506112a18160020160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16611751565b8160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561139557600080fd5b505af11580156113a9573d6000803e3d6000fd5b505050506040513d60208110156113bf57600080fd5b8101908080519060200190929190505050611425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806119736023913960400191505060405180910390fd5b7f2962855c62781b7b45ee6a244c72c6b1eaa1b883b9bbbe60fcff273aa480c8d23383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001544210156115435760008081915080905092509250506116c9565b60006115534283600001546116ce565b90506000622819a0828161156357fe5b0490508260010160129054906101000a900461ffff1661ffff1681101561159957600080819150809050945094505050506116c9565b8260010160109054906101000a900461ffff1661ffff16811061161e5760008360020160009054906101000a90046fffffffffffffffffffffffffffffffff168460010160009054906101000a90046fffffffffffffffffffffffffffffffff160390508360010160109054906101000a900461ffff168195509550505050506116c9565b6000611640828560010160149054906101000a900461ffff1661ffff166116ce565b905060008460010160109054906101000a900461ffff1661ffff168560010160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168161169557fe5b046fffffffffffffffffffffffffffffffff16905060006116ba8361ffff16836117d4565b90508281975097505050505050505b915091565b600082828403915081111561174b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b60008282840191508110156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6000808214806117f157508282838502925082816117ee57fe5b04145b611863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6040518060c001604052806000815260200160006fffffffffffffffffffffffffffffffff168152602001600061ffff168152602001600061ffff168152602001600061ffff16815260200160006fffffffffffffffffffffffffffffffff168152509056fe636f6c6f6e792d746f6b656e2d726566756e642d726563697069656e742d7472616e736665722d6661696c6564636f6c6f6e792d746f6b656e2d636c6966662d6c6f6e6765722d7468616e2d6475726174696f6e636f6c6f6e792d746f6b656e2d726563697069656e742d7472616e736665722d6661696c6564636f6c6f6e792d746f6b656e2d7a65726f2d616d6f756e742d7665737465642d7065722d6d6f6e7468636f6c6f6e792d746f6b656e2d73656e6465722d7472616e736665722d6661696c6564a165627a7a72305820ccf406410a12201c40f6b207dcb50505abb97b7f5709fac03c31ec48e08fb5cd0029000000000000000000000000d101dcc414f310268c37eeb4cd376ccfa507f5710000000000000000000000001288d4d08c3e79b81c2db1ce459ae374fc978d34000000000000000000000000e3648e99b6e68a09e28428790d12b357f081dbe0

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063da09118e1161005b578063da09118e14610240578063e74f3fbb146102c6578063fc0c546a146102d0578063fd75b8d41461031a57610088565b806301f5ad5a1461008d57806308ec6164146100d75780633023641d14610121578063b81a4d8f14610165575b600080fd5b6100956103a5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100df6103cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101636004803603602081101561013757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103f1565b005b6101a76004803603602081101561017b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109f2565b60405180878152602001866fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020018561ffff1661ffff1681526020018461ffff1661ffff1681526020018361ffff1661ffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390f35b6102c4600480360360a081101561025657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080356fffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803561ffff169060200190929190505050610a90565b005b6102ce611132565b005b6102d86114b9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61035c6004803603602081101561033057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114de565b604051808361ffff1661ffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f636f6c6f6e792d76657374696e672d756e617574686f72697a6564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080610503846114de565b8092508193505050600061059661057e8560010160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168660020160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166116ce565b836fffffffffffffffffffffffffffffffff166116ce565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561065257600080fd5b505af1158015610666573d6000803e3d6000fd5b505050506040513d602081101561067c57600080fd5b81019080805190602001909291905050506106e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806119246026913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156107be57600080fd5b505af11580156107d2573d6000803e3d6000fd5b505050506040513d60208110156107e857600080fd5b810190808051906020019092919050505061084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806118d0602d913960400191505060405180910390fd5b6000846000018190555060008460010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060008460010160106101000a81548161ffff021916908361ffff16021790555060008460010160126101000a81548161ffff021916908361ffff16021790555060008460010160146101000a81548161ffff021916908361ffff16021790555060008460020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f340f6477ea48f04683f1f869a730e23ed8123e47f682b448d93174501e7aefdb858383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001935050505060405180910390a15050505050565b60036020528060005260406000206000915090508060000154908060010160009054906101000a90046fffffffffffffffffffffffffffffffff16908060010160109054906101000a900461ffff16908060010160129054906101000a900461ffff16908060010160149054906101000a900461ffff16908060020160009054906101000a90046fffffffffffffffffffffffffffffffff16905086565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f636f6c6f6e792d76657374696e672d756e617574686f72697a6564000000000081525060200191505060405180910390fd5b846000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414610c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f636f6c6f6e792d746f6b656e2d757365722d6772616e742d657869737473000081525060200191505060405180910390fd5b60008261ffff1611610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f636f6f6e792d746f6b656e2d7a65726f2d76657374696e672d636c696666000081525060200191505060405180910390fd5b8161ffff168361ffff1611610ce6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806118fd6027913960400191505060405180910390fd5b60008361ffff16856fffffffffffffffffffffffffffffffff1681610d0757fe5b046fffffffffffffffffffffffffffffffff16905060008111610d75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061194a6029913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630886040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015610e8557600080fd5b505af1158015610e99573d6000803e3d6000fd5b505050506040513d6020811015610eaf57600080fd5b810190808051906020019092919050505050610ec9611869565b6040518060c0016040528060008914610ee25788610ee4565b425b8152602001876fffffffffffffffffffffffffffffffff1681526020018661ffff1681526020018561ffff168152602001600061ffff16815260200160006fffffffffffffffffffffffffffffffff16815250905080600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060408201518160010160106101000a81548161ffff021916908361ffff16021790555060608201518160010160126101000a81548161ffff021916908361ffff16021790555060808201518160010160146101000a81548161ffff021916908361ffff16021790555060a08201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507f4995f92ede8051f62ebd282d2097795d0569de63589fb49da0064f43cb47c8af888260000151888888604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff1681526020019550505050505060405180910390a15050505050505050565b60008061113e336114de565b80925081935050506000816fffffffffffffffffffffffffffffffff16116111ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f636f6c6f6e792d746f6b656e2d7a65726f2d616d6f756e742d7665737465640081525060200191505060405180910390fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506112358160010160149054906101000a900461ffff1661ffff168461ffff16611751565b8160010160146101000a81548161ffff021916908361ffff1602179055506112a18160020160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16611751565b8160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561139557600080fd5b505af11580156113a9573d6000803e3d6000fd5b505050506040513d60208110156113bf57600080fd5b8101908080519060200190929190505050611425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806119736023913960400191505060405180910390fd5b7f2962855c62781b7b45ee6a244c72c6b1eaa1b883b9bbbe60fcff273aa480c8d23383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001544210156115435760008081915080905092509250506116c9565b60006115534283600001546116ce565b90506000622819a0828161156357fe5b0490508260010160129054906101000a900461ffff1661ffff1681101561159957600080819150809050945094505050506116c9565b8260010160109054906101000a900461ffff1661ffff16811061161e5760008360020160009054906101000a90046fffffffffffffffffffffffffffffffff168460010160009054906101000a90046fffffffffffffffffffffffffffffffff160390508360010160109054906101000a900461ffff168195509550505050506116c9565b6000611640828560010160149054906101000a900461ffff1661ffff166116ce565b905060008460010160109054906101000a900461ffff1661ffff168560010160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168161169557fe5b046fffffffffffffffffffffffffffffffff16905060006116ba8361ffff16836117d4565b90508281975097505050505050505b915091565b600082828403915081111561174b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b60008282840191508110156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6000808214806117f157508282838502925082816117ee57fe5b04145b611863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6040518060c001604052806000815260200160006fffffffffffffffffffffffffffffffff168152602001600061ffff168152602001600061ffff168152602001600061ffff16815260200160006fffffffffffffffffffffffffffffffff168152509056fe636f6c6f6e792d746f6b656e2d726566756e642d726563697069656e742d7472616e736665722d6661696c6564636f6c6f6e792d746f6b656e2d636c6966662d6c6f6e6765722d7468616e2d6475726174696f6e636f6c6f6e792d746f6b656e2d726563697069656e742d7472616e736665722d6661696c6564636f6c6f6e792d746f6b656e2d7a65726f2d616d6f756e742d7665737465642d7065722d6d6f6e7468636f6c6f6e792d746f6b656e2d73656e6465722d7472616e736665722d6661696c6564a165627a7a72305820ccf406410a12201c40f6b207dcb50505abb97b7f5709fac03c31ec48e08fb5cd0029

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

000000000000000000000000d101dcc414f310268c37eeb4cd376ccfa507f5710000000000000000000000001288d4d08c3e79b81c2db1ce459ae374fc978d34000000000000000000000000e3648e99b6e68a09e28428790d12b357f081dbe0

-----Decoded View---------------
Arg [0] : _token (address): 0xD101dCC414F310268c37eEb4cD376CcFA507F571
Arg [1] : _colonyMultiSig (address): 0x1288d4d08C3e79b81C2DB1CE459AE374fC978D34
Arg [2] : _refundRecipient (address): 0xE3648e99B6E68A09e28428790D12B357f081dBe0

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000d101dcc414f310268c37eeb4cd376ccfa507f571
Arg [1] : 0000000000000000000000001288d4d08c3e79b81c2db1ce459ae374fc978d34
Arg [2] : 000000000000000000000000e3648e99b6e68a09e28428790d12b357f081dbe0


Deployed Bytecode Sourcemap

13372:6561:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13372:6561:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13461:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13427:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16873:856;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16873:856:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;14011:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14011:45:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15577:1031;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;15577:1031:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17948:616;;;:::i;:::-;;13404:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18825:1105;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18825:1105:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13461:30;;;;;;;;;;;;;:::o;13427:29::-;;;;;;;;;;;;;:::o;16873:856::-;14244:15;;;;;;;;;;;14230:29;;:10;:29;;;14222:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16960:24;16987:11;:23;16999:10;16987:23;;;;;;;;;;;;;;;16960:50;;17017:19;17043:20;17101:31;17121:10;17101:19;:31::i;:::-;17070:62;;;;;;;;17139:23;17173:66;17177:47;17181:10;:17;;;;;;;;;;;;17177:47;;17200:10;:23;;;;;;;;;;;;17177:47;;:3;:47::i;:::-;17226:12;17173:66;;:3;:66::i;:::-;17139:101;;17257:5;;;;;;;;;;;:14;;;17272:10;17284:12;17257:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17257:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17257:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17257:40:0;;;;;;;;;;;;;;;;17249:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17355:5;;;;;;;;;;;:14;;;17370:15;;;;;;;;;;;17387;17355:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17355:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17355:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17355:48:0;;;;;;;;;;;;;;;;17347:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17485:1;17462:10;:20;;:24;;;;17513:1;17493:10;:17;;;:21;;;;;;;;;;;;;;;;;;17550:1;17521:10;:26;;;:30;;;;;;;;;;;;;;;;;;17584:1;17558:10;:23;;;:27;;;;;;;;;;;;;;;;;;17619:1;17592:10;:24;;;:28;;;;;;;;;;;;;;;;;;17653:1;17627:10;:23;;;:27;;;;;;;;;;;;;;;;;;17668:55;17681:10;17693:12;17707:15;17668:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14298:1;;;;16873:856;:::o;14011:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15577:1031::-;14120:14;;;;;;;;;;;14106:28;;:10;:28;;;14098:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15758:10;14518:1;14486:11;:18;14498:5;14486:18;;;;;;;;;;;;;;;:28;;;:33;14478:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15804:1;15788:13;:17;;;15780:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15874:13;15855:32;;:16;:32;;;15847:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15938:25;15976:16;15966:26;;:7;:26;;;;;;;;15938:54;;;;16030:1;16007:20;:24;15999:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16162:5;;;;;;;;;;;:18;;;16181:14;;;;;;;;;;;16205:4;16212:7;16162:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16162:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16162:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16162:58:0;;;;;;;;;;;;;;;;;16229:18;;:::i;:::-;16250:219;;;;;;;;16290:1;16276:10;:15;:34;;16300:10;16276:34;;;16294:3;16276:34;16250:219;;;;16327:7;16250:219;;;;;;16360:16;16250:219;;;;;;16399:13;16250:219;;;;;;16436:1;16250:219;;;;;;16460:1;16250:219;;;;;16229:240;;16504:5;16478:11;:23;16490:10;16478:23;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16521:81;16532:10;16544:5;:15;;;16561:7;16570:16;16588:13;16521:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14561:1;;14173;15577:1031;;;;;:::o;17948:616::-;17991:19;18017:20;18075:31;18095:10;18075:19;:31::i;:::-;18044:62;;;;;;;;18136:1;18121:12;:16;;;18113:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18182:24;18209:11;:23;18221:10;18209:23;;;;;;;;;;;;;;;18182:50;;18273:43;18277:10;:24;;;;;;;;;;;;18273:43;;18303:12;18273:43;;:3;:43::i;:::-;18239:10;:24;;;:78;;;;;;;;;;;;;;;;;;18358:42;18362:10;:23;;;;;;;;;;;;18358:42;;18387:12;18358:42;;:3;:42::i;:::-;18324:10;:23;;;:77;;;;;;;;;;;;;;;;;;18422:5;;;;;;;;;;;:14;;;18437:10;18449:12;18422:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18422:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18422:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18422:40:0;;;;;;;;;;;;;;;;18414:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:44;18533:10;18545:12;18514:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17948:616;;;:::o;13404:18::-;;;;;;;;;;;;;:::o;18825:1105::-;18895:6;18903:7;18919:24;18946:11;:23;18958:10;18946:23;;;;;;;;;;;;;;;18919:50;;19079:10;:20;;;19073:3;:26;19069:62;;;19118:1;19121;19110:13;;;;;;;;;;;;;19069:62;19171:16;19190:30;19194:3;19199:10;:20;;;19190:3;:30::i;:::-;19171:49;;19227:18;13541:7;19248:11;:31;;;;;;19227:52;;19312:10;:23;;;;;;;;;;;;19296:39;;:13;:39;19292:75;;;19354:1;19357;19346:13;;;;;;;;;;;;;;;19292:75;19448:10;:26;;;;;;;;;;;;19431:43;;:13;:43;19427:498;;19485:22;19530:10;:23;;;;;;;;;;;;19510:10;:17;;;;;;;;;;;;:43;19485:68;;19570:10;:26;;;;;;;;;;;;19598:14;19562:51;;;;;;;;;;19427:498;19636:19;19665:44;19669:13;19684:10;:24;;;;;;;;;;;;19665:44;;:3;:44::i;:::-;19636:74;;19719:25;19767:10;:26;;;;;;;;;;;;19747:46;;:10;:17;;;;;;;;;;;;:46;;;;;;;;19719:74;;;;19802:20;19833:39;19837:12;19833:39;;19851:20;19833:3;:39::i;:::-;19802:71;;19890:12;19904;19882:35;;;;;;;;;;18825:1105;;;;:::o;4206:129::-;4258:6;4300:1;4294;4290;:5;4286:9;;;4285:16;;4277:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4206:129;;;;:::o;4072:128::-;4124:6;4166:1;4160;4156;:5;4152:9;;;4151:16;;4143:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4072:128;;;;:::o;4341:142::-;4393:6;4425:1;4420;:6;:30;;;;4449:1;4444;4439;4435;:5;4431:9;;;4430:15;;;;;;:20;4420:30;4412:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4341:142;;;;:::o;13372:6561::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://ccf406410a12201c40f6b207dcb50505abb97b7f5709fac03c31ec48e08fb5cd

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.