ERC-20
Exchange
Overview
Max Total Supply
200,000,000 BCNX
Holders
2,154 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
7.737025323984 BCNXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BcnxToken
Compiler Version
v0.5.2+commit.1df8f40c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-08-17 */ pragma solidity ^0.5.2; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } /** * @title Contract that will work with ERC223 tokens. */ contract ERC223ReceivingContract { /** * @dev Standard ERC223 function that will handle incoming token transfers. * * @param _from Token sender address. * @param _value Amount of tokens. * @param _data Transaction metadata. */ function tokenFallback(address _from, uint _value, bytes memory _data) public; } contract IERC223 { /* IERC20 */ function approve(address spender, uint256 value) public returns (bool); function transferFrom(address from, address to, uint256 value) public returns (bool); function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function allowance(address owner, address spender) public view returns (uint256); event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed _from, address indexed _to, uint256 _value); /* IERC223 */ function transfer(address to, uint256 value) public returns (bool); function transfer(address to, uint256 value, bytes memory data) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value, bytes data); } /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an account access to this role */ function add(Role storage role, address account) internal { require(account != address(0)); require(!has(role, account)); role.bearer[account] = true; } /** * @dev remove an account's access to this role */ function remove(Role storage role, address account) internal { require(account != address(0)); require(has(role, account)); role.bearer[account] = false; } /** * @dev check if an account has this role * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0)); return role.bearer[account]; } } contract BurnerRole { using Roles for Roles.Role; event BurnerAdded(address indexed account); event BurnerRemoved(address indexed account); Roles.Role private _burners; constructor () internal { _addBurner(msg.sender); } modifier onlyBurner() { require(isBurner(msg.sender)); _; } function isBurner(address account) public view returns (bool) { return _burners.has(account); } function addBurner(address account) public onlyBurner { _addBurner(account); } function renounceBurner() public { _removeBurner(msg.sender); } function _addBurner(address account) internal { _burners.add(account); emit BurnerAdded(account); } function _removeBurner(address account) internal { _burners.remove(account); emit BurnerRemoved(account); } } /** * @dev Collection of functions related to the address type, */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } /** * @title SafeERC223 * @dev Wrappers around ERC223 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC223 for ERC223;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC223 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC223 token, address to, uint256 value) internal { // callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); require(token.transfer(to, value)); } function safeTransfer(IERC223 token, address to, uint256 value, bytes memory data) internal { // callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value, data)); require(token.transfer(to, value, data)); } function safeTransferFrom(IERC223 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC223 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC223: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC223 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(IERC223 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC223 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC223: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC223: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC223: ERC223 operation did not succeed"); } } } /** * @dev A token holder contract that will allow a beneficiary to extract the * tokens after a given release time. */ contract TokenTimelock is ERC223ReceivingContract { using SafeERC223 for IERC223; // ERC20 basic token contract being held IERC223 private _token; // beneficiary of tokens after they are released address private _beneficiary; // timestamp when token release is enabled uint256 private _releaseTime; constructor (IERC223 token, address beneficiary, uint256 releaseTime) public { // solhint-disable-next-line not-rely-on-time require(releaseTime > block.timestamp, "TokenTimelock: release time is before current time"); _token = token; _beneficiary = beneficiary; _releaseTime = releaseTime; } /** * @return the token being held. */ function token() public view returns (IERC223) { return _token; } /** * @return the beneficiary of the tokens. */ function beneficiary() public view returns (address) { return _beneficiary; } /** * @return the time when the tokens are released. */ function releaseTime() public view returns (uint256) { return _releaseTime; } /** * @notice Transfers tokens held by timelock to beneficiary. */ function release() public { // solhint-disable-next-line not-rely-on-time require(block.timestamp >= _releaseTime, "TokenTimelock: current time is before release time"); uint256 amount = _token.balanceOf(address(this)); require(amount > 0, "TokenTimelock: no tokens to release"); _token.safeTransfer(_beneficiary, amount); } /** * Empty implementation */ function tokenFallback(address /*_from*/, uint /*_value*/, bytes memory /*_data*/) public { return; } } /** * @title Reference implementation of the ERC223 standard token. */ contract ERC223 is IERC223 { using SafeMath for uint; using SafeMath for uint256; using Address for address; string private _name; string private _symbol; uint8 private _decimals; uint256 private _totalSupply; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowed; constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } /** * @return the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @return the symbol of the token. */ function symbol() public view returns (string memory) { return _symbol; } /** * @return the number of decimals of the token. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return A uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view returns (uint256) { return _balances[owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowed[owner][spender]; } /** * @dev Transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { bytes memory empty; _transfer(msg.sender, _to, _value, empty); return true; } /** * @dev Transfer the specified amount of tokens to the specified address. * Standard function transfer similar to ERC20 transfer with no _data . * Added due to backwards compatibility reasons . * * @param _to Receiver address. * @param _value Amount of tokens that will be transferred. * @param _data Transaction metadata. */ function transfer(address _to, uint256 _value, bytes memory _data) public returns (bool) { _transfer(msg.sender, _to, _value, _data); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public returns (bool) { _approve(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another. * Note that while this function emits an Approval event, this is not required as per the specification, * and other compliant implementations may not emit the event. * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred */ function transferFrom(address from, address to, uint256 value) public returns (bool) { bytes memory empty; _transfer(from, to, value, empty); _approve(from, msg.sender, _allowed[from][msg.sender].sub(value)); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when _allowed[msg.sender][spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(msg.sender, spender, _allowed[msg.sender][spender].add(addedValue)); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when _allowed[msg.sender][spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(msg.sender, spender, _allowed[msg.sender][spender].sub(subtractedValue)); return true; } /** * @dev Transfer the specified amount of tokens to the specified address. * Invokes the `tokenFallback` function if the recipient is a contract. * The token transfer fails if the recipient is a contract * but does not implement the `tokenFallback` function * or the fallback function to receive funds. * * @param _to Receiver address. * @param _value Amount of tokens that will be transferred. * @param _data Transaction metadata. */ function _transfer(address _from, address _to, uint256 _value, bytes memory _data) internal { _balances[_from] = _balances[_from].sub(_value); _balances[_to] = _balances[_to].add(_value); if (_to.isContract()) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.tokenFallback(_from, _value, _data); } emit Transfer(_from, _to, _value, _data); emit Transfer(_from, _to, _value); } /** * @dev Internal function that mints an amount of the token and assigns it to * an account. This encapsulates the modification of balances such that the * proper events are emitted. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.add(value); _balances[account] = _balances[account].add(value); bytes memory empty; if (account.isContract()) { ERC223ReceivingContract receiver = ERC223ReceivingContract(account); receiver.tokenFallback(address(0), value, empty); } emit Transfer(address(0), account, value, empty); emit Transfer(address(0), account, value); } /** * @dev Internal function that burns an amount of the token of a given * account. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burn(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); bytes memory empty; emit Transfer(account, address(0), value, empty); emit Transfer(account, address(0), value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * Emits an Approval event (reflecting the reduced allowance). * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burnFrom(address account, uint256 value) internal { _burn(account, value); _approve(account, msg.sender, _allowed[account][msg.sender].sub(value)); } /** * @dev Approve an address to spend another addresses' tokens. * @param owner The address that owns the tokens. * @param spender The address that will spend the tokens. * @param value The number of tokens that can be spent. */ function _approve(address owner, address spender, uint256 value) internal { require(spender != address(0)); require(owner != address(0)); _allowed[owner][spender] = value; emit Approval(owner, spender, value); } } contract BcnxToken is ERC223, BurnerRole { string private constant NAME = "Bcnex Token"; string private constant SYMBOL = "BCNX"; uint8 private constant DECIMALS = 18; uint256 private constant TOTAL_SUPPLY = 200 * (10 ** 6) * (10 ** uint256(DECIMALS)); constructor() ERC223(NAME, SYMBOL, DECIMALS) public { _mint(msg.sender, TOTAL_SUPPLY); } /** * @dev Burns a specific amount of tokens. * @param value The amount of token to be burned. */ function burn(uint256 value) public onlyBurner { _burn(msg.sender, value); } /** * @dev Burns a specific amount of tokens from the target address and decrements allowance * @param from address The address which you want to send tokens from * @param value uint256 The amount of token to be burned */ function burnFrom(address from, uint256 value) public onlyBurner { _burnFrom(from, value); } } contract BcnxDistribution { using SafeMath for uint256; event NewTimeLock(address addr, BcnxToken _token, address _beneficiary, uint256 _releaseTime); BcnxToken public token; uint256 private constant TEAM_TOKENS = 76 * (10 ** 6) * (10 ** uint256(18)); uint256 [] public LOCK_END = [ 1577750400, // Tue, 31 Dec 2019 00:00:00 GMT 1609372800, // Thu, 31 Dec 2020 00:00:00 GMT 1640908800, // Fri, 31 Dec 2021 00:00:00 GMT 1672444800 // Sat, 31 Dec 2022 00:00:00 GMT ]; constructor () public { // create the Bcnx Token contract token = new BcnxToken(); // create timelocks for tokens uint256 AMOUNT_PER_RELEASE = TEAM_TOKENS.div(LOCK_END.length); for (uint i = 0; i < LOCK_END.length; i++) { uint256 releaseTime = LOCK_END[i]; TokenTimelock timelock = new TokenTimelock(token, msg.sender, releaseTime); token.transfer(address(timelock), AMOUNT_PER_RELEASE); emit NewTimeLock(address(timelock), token, msg.sender, releaseTime); } // send all remaining tokens to wallet uint256 remainingBalance = token.balanceOf(address(this)); token.transfer(msg.sender, remainingBalance); // add the contract owner as a Burner token.addBurner(msg.sender); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isBurner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceBurner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addBurner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"BurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"BurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"Transfer","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040805190810160405280600b81526020017f42636e657820546f6b656e0000000000000000000000000000000000000000008152506040805190810160405280600481526020017f42434e58000000000000000000000000000000000000000000000000000000008152506012826000908051906020019062000098929190620006cf565b508160019080519060200190620000b1929190620006cf565b5080600260006101000a81548160ff021916908360ff160217905550505050620000ea3362000118640100000000026401000000009004565b6200011233601260ff16600a0a630bebc2000262000182640100000000026401000000009004565b6200077e565b6200013c8160066200054264010000000002620016cd179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b9456060405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620001bf57600080fd5b620001e4816003546200060564010000000002620011cf179091906401000000009004565b6003819055506200024c81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200060564010000000002620011cf179091906401000000009004565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506060620002c68373ffffffffffffffffffffffffffffffffffffffff1662000627640100000000026200160b176401000000009004565b15620004015760008390508073ffffffffffffffffffffffffffffffffffffffff1663c0ee0b8a600085856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200039657808201518184015260208101905062000379565b50505050905090810190601f168015620003c45780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015620003e657600080fd5b505af1158015620003fb573d6000803e3d6000fd5b50505050505b8273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1684846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200049b5780820151818401526020810190506200047e565b50505050905090810190601f168015620004c95780820380516001836020036101000a031916815260200191505b50935050505060405180910390a38273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200057f57600080fd5b6200059a82826200063a640100000000026401000000009004565b151515620005a757600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008082840190508381101515156200061d57600080fd5b8091505092915050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200067857600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200071257805160ff191683800117855562000743565b8280016001018555821562000743579182015b828111156200074257825182559160200191906001019062000725565b5b50905062000752919062000756565b5090565b6200077b91905b80821115620007775760008160009055506001016200075d565b5090565b90565b6117a9806200078e6000396000f3fe608060405234801561001057600080fd5b5060043610610128576000357c01000000000000000000000000000000000000000000000000000000009004806370a08231116100bf578063a9059cbb1161008e578063a9059cbb1461055d578063be45fd62146105c3578063dd62ed3e146106c0578063e9ec9e8b14610738578063f44637ba1461074257610128565b806370a08231146103ce57806379cc67901461042657806395d89b4114610474578063a457c2d7146104f757610128565b8063313ce567116100fb578063313ce567146102ba57806339509351146102de57806342966c68146103445780634334614a1461037257610128565b806306fdde031461012d578063095ea7b3146101b057806318160ddd1461021657806323b872dd14610234575b600080fd5b610135610786565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561017557808201518184015260208101905061015a565b50505050905090810190601f1680156101a25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101fc600480360360408110156101c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610828565b604051808215151515815260200191505060405180910390f35b61021e61083f565b6040518082815260200191505060405180910390f35b6102a06004803603606081101561024a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610849565b604051808215151515815260200191505060405180910390f35b6102c26108fe565b604051808260ff1660ff16815260200191505060405180910390f35b61032a600480360360408110156102f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610915565b604051808215151515815260200191505060405180910390f35b6103706004803603602081101561035a57600080fd5b81019080803590602001909291905050506109ba565b005b6103b46004803603602081101561038857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109db565b604051808215151515815260200191505060405180910390f35b610410600480360360208110156103e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109f8565b6040518082815260200191505060405180910390f35b6104726004803603604081101561043c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a41565b005b61047c610a63565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104bc5780820151818401526020810190506104a1565b50505050905090810190601f1680156104e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105436004803603604081101561050d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b05565b604051808215151515815260200191505060405180910390f35b6105a96004803603604081101561057357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610baa565b604051808215151515815260200191505060405180910390f35b6106a6600480360360608110156105d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561062057600080fd5b82018360208201111561063257600080fd5b8035906020019184600183028401116401000000008311171561065457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610bc5565b604051808215151515815260200191505060405180910390f35b610722600480360360408110156106d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bde565b6040518082815260200191505060405180910390f35b610740610c65565b005b6107846004803603602081101561075857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c70565b005b606060008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b5050505050905090565b6000610835338484610c90565b6001905092915050565b6000600354905090565b6000606061085985858584610df3565b6108f285336108ed86600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ad90919063ffffffff16565b610c90565b60019150509392505050565b6000600260009054906101000a900460ff16905090565b60006109b033846109ab85600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111cf90919063ffffffff16565b610c90565b6001905092915050565b6109c3336109db565b15156109ce57600080fd5b6109d833826111f0565b50565b60006109f182600661141c90919063ffffffff16565b9050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4a336109db565b1515610a5557600080fd5b610a5f82826114b0565b5050565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610afb5780601f10610ad057610100808354040283529160200191610afb565b820191906000526020600020905b815481529060010190602001808311610ade57829003601f168201915b5050505050905090565b6000610ba03384610b9b85600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ad90919063ffffffff16565b610c90565b6001905092915050565b60006060610bba33858584610df3565b600191505092915050565b6000610bd333858585610df3565b600190509392505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c6e33611557565b565b610c79336109db565b1515610c8457600080fd5b610c8d816115b1565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610ccc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d0857600080fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b610e4582600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ad90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610eda82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111cf90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f3c8373ffffffffffffffffffffffffffffffffffffffff1661160b565b156110705760008390508073ffffffffffffffffffffffffffffffffffffffff1663c0ee0b8a8685856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611008578082015181840152602081019050610fed565b50505050905090810190601f1680156110355780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b50505050505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1684846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111075780820151818401526020810190506110ec565b50505050905090810190601f1680156111345780820380516001836020036101000a031916815260200191505b50935050505060405180910390a38273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b60008282111515156111be57600080fd5b600082840390508091505092915050565b60008082840190508381101515156111e657600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561122c57600080fd5b611241816003546111ad90919063ffffffff16565b60038190555061129981600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ad90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506060600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1684846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561137657808201518184015260208101905061135b565b50505050905090810190601f1680156113a35780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561145957600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114ba82826111f0565b611553823361154e84600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ad90919063ffffffff16565b610c90565b5050565b61156b81600661161e90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e60405160405180910390a250565b6115c58160066116cd90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b9456060405160405180910390a250565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561165a57600080fd5b611664828261141c565b151561166f57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561170957600080fd5b611713828261141c565b15151561171f57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505056fea165627a7a723058208ed71443f476549aa59a2add2a45cae382edc53e080c8b06387c5cd03ba81a850029
Deployed Bytecode
0x608060405234801561001057600080fd5b5060043610610128576000357c01000000000000000000000000000000000000000000000000000000009004806370a08231116100bf578063a9059cbb1161008e578063a9059cbb1461055d578063be45fd62146105c3578063dd62ed3e146106c0578063e9ec9e8b14610738578063f44637ba1461074257610128565b806370a08231146103ce57806379cc67901461042657806395d89b4114610474578063a457c2d7146104f757610128565b8063313ce567116100fb578063313ce567146102ba57806339509351146102de57806342966c68146103445780634334614a1461037257610128565b806306fdde031461012d578063095ea7b3146101b057806318160ddd1461021657806323b872dd14610234575b600080fd5b610135610786565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561017557808201518184015260208101905061015a565b50505050905090810190601f1680156101a25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101fc600480360360408110156101c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610828565b604051808215151515815260200191505060405180910390f35b61021e61083f565b6040518082815260200191505060405180910390f35b6102a06004803603606081101561024a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610849565b604051808215151515815260200191505060405180910390f35b6102c26108fe565b604051808260ff1660ff16815260200191505060405180910390f35b61032a600480360360408110156102f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610915565b604051808215151515815260200191505060405180910390f35b6103706004803603602081101561035a57600080fd5b81019080803590602001909291905050506109ba565b005b6103b46004803603602081101561038857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109db565b604051808215151515815260200191505060405180910390f35b610410600480360360208110156103e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109f8565b6040518082815260200191505060405180910390f35b6104726004803603604081101561043c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a41565b005b61047c610a63565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104bc5780820151818401526020810190506104a1565b50505050905090810190601f1680156104e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105436004803603604081101561050d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b05565b604051808215151515815260200191505060405180910390f35b6105a96004803603604081101561057357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610baa565b604051808215151515815260200191505060405180910390f35b6106a6600480360360608110156105d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561062057600080fd5b82018360208201111561063257600080fd5b8035906020019184600183028401116401000000008311171561065457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610bc5565b604051808215151515815260200191505060405180910390f35b610722600480360360408110156106d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bde565b6040518082815260200191505060405180910390f35b610740610c65565b005b6107846004803603602081101561075857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c70565b005b606060008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b5050505050905090565b6000610835338484610c90565b6001905092915050565b6000600354905090565b6000606061085985858584610df3565b6108f285336108ed86600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ad90919063ffffffff16565b610c90565b60019150509392505050565b6000600260009054906101000a900460ff16905090565b60006109b033846109ab85600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111cf90919063ffffffff16565b610c90565b6001905092915050565b6109c3336109db565b15156109ce57600080fd5b6109d833826111f0565b50565b60006109f182600661141c90919063ffffffff16565b9050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4a336109db565b1515610a5557600080fd5b610a5f82826114b0565b5050565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610afb5780601f10610ad057610100808354040283529160200191610afb565b820191906000526020600020905b815481529060010190602001808311610ade57829003601f168201915b5050505050905090565b6000610ba03384610b9b85600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ad90919063ffffffff16565b610c90565b6001905092915050565b60006060610bba33858584610df3565b600191505092915050565b6000610bd333858585610df3565b600190509392505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c6e33611557565b565b610c79336109db565b1515610c8457600080fd5b610c8d816115b1565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610ccc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d0857600080fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b610e4582600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ad90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610eda82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111cf90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f3c8373ffffffffffffffffffffffffffffffffffffffff1661160b565b156110705760008390508073ffffffffffffffffffffffffffffffffffffffff1663c0ee0b8a8685856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611008578082015181840152602081019050610fed565b50505050905090810190601f1680156110355780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b50505050505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1684846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111075780820151818401526020810190506110ec565b50505050905090810190601f1680156111345780820380516001836020036101000a031916815260200191505b50935050505060405180910390a38273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b60008282111515156111be57600080fd5b600082840390508091505092915050565b60008082840190508381101515156111e657600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561122c57600080fd5b611241816003546111ad90919063ffffffff16565b60038190555061129981600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ad90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506060600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1684846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561137657808201518184015260208101905061135b565b50505050905090810190601f1680156113a35780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561145957600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114ba82826111f0565b611553823361154e84600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ad90919063ffffffff16565b610c90565b5050565b61156b81600661161e90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e60405160405180910390a250565b6115c58160066116cd90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b9456060405160405180910390a250565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561165a57600080fd5b611664828261141c565b151561166f57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561170957600080fd5b611713828261141c565b15151561171f57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505056fea165627a7a723058208ed71443f476549aa59a2add2a45cae382edc53e080c8b06387c5cd03ba81a850029
Deployed Bytecode Sourcemap
21715:987:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21715:987:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12780:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12780:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15707:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15707:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13254:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16328:264;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16328:264:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13096:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17118:203;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17118:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22244:90;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22244:90:0;;;;;;;;;;;;;;;;;:::i;:::-;;4562:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4562:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13564:106;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13564:106:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22593;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22593:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12930:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12930:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17852:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17852:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14313:180;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14313:180:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14889:171;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14889:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;14889:171:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14889:171:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14889:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;14889:171:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14009:131;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14009:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4779:77;;;:::i;:::-;;4679:92;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4679:92:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;12780:83;12817:13;12850:5;12843:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12780:83;:::o;15707:148::-;15772:4;15789:36;15798:10;15810:7;15819:5;15789:8;:36::i;:::-;15843:4;15836:11;;15707:148;;;;:::o;13254:91::-;13298:7;13325:12;;13318:19;;13254:91;:::o;16328:264::-;16407:4;16424:18;16453:33;16463:4;16469:2;16473:5;16480;16453:9;:33::i;:::-;16497:65;16506:4;16512:10;16524:37;16555:5;16524:8;:14;16533:4;16524:14;;;;;;;;;;;;;;;:26;16539:10;16524:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;16497:8;:65::i;:::-;16580:4;16573:11;;;16328:264;;;;;:::o;13096:83::-;13137:5;13162:9;;;;;;;;;;;13155:16;;13096:83;:::o;17118:203::-;17198:4;17215:76;17224:10;17236:7;17245:45;17279:10;17245:8;:20;17254:10;17245:20;;;;;;;;;;;;;;;:29;17266:7;17245:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;17215:8;:76::i;:::-;17309:4;17302:11;;17118:203;;;;:::o;22244:90::-;4513:20;4522:10;4513:8;:20::i;:::-;4505:29;;;;;;;;22302:24;22308:10;22320:5;22302;:24::i;:::-;22244:90;:::o;4562:109::-;4618:4;4642:21;4655:7;4642:8;:12;;:21;;;;:::i;:::-;4635:28;;4562:109;;;:::o;13564:106::-;13619:7;13646:9;:16;13656:5;13646:16;;;;;;;;;;;;;;;;13639:23;;13564:106;;;:::o;22593:::-;4513:20;4522:10;4513:8;:20::i;:::-;4505:29;;;;;;;;22669:22;22679:4;22685:5;22669:9;:22::i;:::-;22593:106;;:::o;12930:87::-;12969:13;13002:7;12995:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12930:87;:::o;17852:213::-;17937:4;17954:81;17963:10;17975:7;17984:50;18018:15;17984:8;:20;17993:10;17984:20;;;;;;;;;;;;;;;:29;18005:7;17984:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;17954:8;:81::i;:::-;18053:4;18046:11;;17852:213;;;;:::o;14313:180::-;14376:4;14393:18;14422:41;14432:10;14444:3;14449:6;14457:5;14422:9;:41::i;:::-;14481:4;14474:11;;;14313:180;;;;:::o;14889:171::-;14972:4;14989:41;14999:10;15011:3;15016:6;15024:5;14989:9;:41::i;:::-;15048:4;15041:11;;14889:171;;;;;:::o;14009:131::-;14081:7;14108:8;:15;14117:5;14108:15;;;;;;;;;;;;;;;:24;14124:7;14108:24;;;;;;;;;;;;;;;;14101:31;;14009:131;;;;:::o;4779:77::-;4823:25;4837:10;4823:13;:25::i;:::-;4779:77::o;4679:92::-;4513:20;4522:10;4513:8;:20::i;:::-;4505:29;;;;;;;;4744:19;4755:7;4744:10;:19::i;:::-;4679:92;:::o;21448:254::-;21560:1;21541:21;;:7;:21;;;;21533:30;;;;;;;;21599:1;21582:19;;:5;:19;;;;21574:28;;;;;;;;21642:5;21615:8;:15;21624:5;21615:15;;;;;;;;;;;;;;;:24;21631:7;21615:24;;;;;;;;;;;;;;;:32;;;;21679:7;21663:31;;21672:5;21663:31;;;21688:5;21663:31;;;;;;;;;;;;;;;;;;21448:254;;;:::o;18601:492::-;18723:28;18744:6;18723:9;:16;18733:5;18723:16;;;;;;;;;;;;;;;;:20;;:28;;;;:::i;:::-;18704:9;:16;18714:5;18704:16;;;;;;;;;;;;;;;:47;;;;18779:26;18798:6;18779:9;:14;18789:3;18779:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;18762:9;:14;18772:3;18762:14;;;;;;;;;;;;;;;:43;;;;18822:16;:3;:14;;;:16::i;:::-;18818:171;;;18855:32;18914:3;18855:63;;18933:8;:22;;;18956:5;18963:6;18971:5;18933:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;18933:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18933:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18933:44:0;;;;18818:171;;19022:3;19006:35;;19015:5;19006:35;;;19027:6;19035:5;19006:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19006:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19073:3;19057:28;;19066:5;19057:28;;;19078:6;19057:28;;;;;;;;;;;;;;;;;;18601:492;;;;:::o;1250:150::-;1308:7;1341:1;1336;:6;;1328:15;;;;;;;;1354:9;1370:1;1366;:5;1354:17;;1391:1;1384:8;;;1250:150;;;;:::o;1488:::-;1546:7;1566:9;1582:1;1578;:5;1566:17;;1607:1;1602;:6;;1594:15;;;;;;;;1629:1;1622:8;;;1488:150;;;;:::o;20235:359::-;20329:1;20310:21;;:7;:21;;;;20302:30;;;;;;;;20360:23;20377:5;20360:12;;:16;;:23;;;;:::i;:::-;20345:12;:38;;;;20415:29;20438:5;20415:9;:18;20425:7;20415:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;20394:9;:18;20404:7;20394:18;;;;;;;;;;;;;;;:50;;;;20457:18;20517:1;20491:43;;20500:7;20491:43;;;20521:5;20528;20491:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20491:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20576:1;20550:36;;20559:7;20550:36;;;20580:5;20550:36;;;;;;;;;;;;;;;;;;20235:359;;;:::o;4021:165::-;4093:4;4137:1;4118:21;;:7;:21;;;;4110:30;;;;;;;;4158:4;:11;;:20;4170:7;4158:20;;;;;;;;;;;;;;;;;;;;;;;;;4151:27;;4021:165;;;;:::o;20993:182::-;21064:21;21070:7;21079:5;21064;:21::i;:::-;21096:71;21105:7;21114:10;21126:40;21160:5;21126:8;:17;21135:7;21126:17;;;;;;;;;;;;;;;:29;21144:10;21126:29;;;;;;;;;;;;;;;;:33;;:40;;;;:::i;:::-;21096:8;:71::i;:::-;20993:182;;:::o;4994:130::-;5054:24;5070:7;5054:8;:15;;:24;;;;:::i;:::-;5108:7;5094:22;;;;;;;;;;;;4994:130;:::o;4864:122::-;4921:21;4934:7;4921:8;:12;;:21;;;;:::i;:::-;4970:7;4958:20;;;;;;;;;;;;4864:122;:::o;5680:422::-;5740:4;5948:12;6059:7;6047:20;6039:28;;6093:1;6086:4;:8;6079:15;;;5680:422;;;:::o;3738:189::-;3837:1;3818:21;;:7;:21;;;;3810:30;;;;;;;;3859:18;3863:4;3869:7;3859:3;:18::i;:::-;3851:27;;;;;;;;3914:5;3891:4;:11;;:20;3903:7;3891:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;3738:189;;:::o;3473:186::-;3569:1;3550:21;;:7;:21;;;;3542:30;;;;;;;;3592:18;3596:4;3602:7;3592:3;:18::i;:::-;3591:19;3583:28;;;;;;;;3647:4;3624;:11;;:20;3636:7;3624:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;3473:186;;:::o
Swarm Source
bzzr://8ed71443f476549aa59a2add2a45cae382edc53e080c8b06387c5cd03ba81a85
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.