ERC-20
Staking
Overview
Max Total Supply
92,435,226.238141218273351583 xALD
Holders
707 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000000001 xALDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
XALD
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-23 */ // Sources flattened with hardhat v2.6.8 https://hardhat.org // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/math/[email protected] pragma solidity ^0.7.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.7.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/interfaces/IXALD.sol pragma solidity ^0.7.6; interface IXALD is IERC20 { function stake(address _recipient, uint256 _aldAmount) external; function unstake(address _account, uint256 _xALDAmount) external; function rebase(uint256 epoch, uint256 profit) external; function getSharesByALD(uint256 _aldAmount) external view returns (uint256); function getALDByShares(uint256 _sharesAmount) external view returns (uint256); } // File contracts/token/XALD.sol pragma solidity ^0.7.6; contract XALD is IXALD { using SafeMath for uint256; event MintShare(address recipient, uint256 share); event BurnShare(address account, uint256 share); event Rebase(uint256 epoch, uint256 profit); /** * @dev xALD balances are dynamic and are calculated based on the accounts' shares * and the total amount of staked ALD Token. Account shares aren't normalized, so * the contract also stores the sum of all shares to calculate each account's token * balance which equals to: * * _shares[account] * _totalSupply / _totalShares */ mapping(address => uint256) private _shares; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; uint256 private _totalShares; address public staking; address private _initializer; modifier onlyStaking() { require(msg.sender == staking, "XALD: only staking contract"); _; } constructor() { _initializer = msg.sender; } function initialize(address _staking) external { require(_initializer == msg.sender, "XALD: only initializer"); require(_staking != address(0), "XALD: not zero address"); staking = _staking; _initializer = address(0); } /** * @dev Returns the name of the token. */ function name() public pure returns (string memory) { return "staked ALD Token"; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public pure returns (string memory) { return "xALD"; } /** * @dev Returns the number of decimals used to get its user representation. */ function decimals() public pure returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev Returns the total shares of sALD. */ function totalShares() public view returns (uint256) { return _totalShares; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address _account) public view override returns (uint256) { return getALDByShares(_shares[_account]); } /** * @return the amount of shares owned by `_account`. */ function sharesOf(address _account) public view returns (uint256) { return _shares[_account]; } /** * @dev See {IERC20-transfer}. */ function transfer(address _recipient, uint256 _amount) public override returns (bool) { _transfer(msg.sender, _recipient, _amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address _owner, address _spender) public view override returns (uint256) { return _allowances[_owner][_spender]; } /** * @dev See {IERC20-approve}. */ function approve(address _spender, uint256 _amount) public override returns (bool) { _approve(msg.sender, _spender, _amount); return true; } /** * @dev See {IERC20-transferFrom}. */ function transferFrom( address _sender, address _recipient, uint256 _amount ) public override returns (bool) { uint256 currentAllowance = _allowances[_sender][msg.sender]; require(currentAllowance >= _amount, "XALD: transfer amount exceeds allowance"); _transfer(_sender, _recipient, _amount); _approve(_sender, msg.sender, currentAllowance.sub(_amount)); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. */ function increaseAllowance(address _spender, uint256 _addedValue) public returns (bool) { _approve(msg.sender, _spender, _allowances[msg.sender][_spender].add(_addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. */ function decreaseAllowance(address _spender, uint256 _subtractedValue) public returns (bool) { uint256 currentAllowance = _allowances[msg.sender][_spender]; require(currentAllowance >= _subtractedValue, "XALD: decreased allowance below zero"); _approve(msg.sender, _spender, currentAllowance.sub(_subtractedValue)); return true; } function stake(address _recipient, uint256 _aldAmount) external override onlyStaking { uint256 _sharesAmount = getSharesByALD(_aldAmount); _totalSupply = _totalSupply.add(_aldAmount); _mintShares(_recipient, _sharesAmount); } function unstake(address _account, uint256 _xALDAmount) external override onlyStaking { uint256 _sharesAmount = getSharesByALD(_xALDAmount); _totalSupply = _totalSupply.sub(_xALDAmount); _burnShares(_account, _sharesAmount); } function rebase(uint256 epoch, uint256 profit) external override onlyStaking { _totalSupply = _totalSupply.add(profit); emit Rebase(epoch, profit); } function getSharesByALD(uint256 _aldAmount) public view override returns (uint256) { uint256 totalPooledALD = _totalSupply; if (totalPooledALD == 0) { return _aldAmount; } else { return _aldAmount.mul(_totalShares).div(totalPooledALD); } } function getALDByShares(uint256 _sharesAmount) public view override returns (uint256) { uint256 totalShares_ = _totalShares; if (totalShares_ == 0) { return 0; } else { return _sharesAmount.mul(_totalSupply).div(totalShares_); } } /** * @dev Moves `_amount` tokens from `_sender` to `_recipient`. */ function _transfer( address _sender, address _recipient, uint256 _amount ) internal { uint256 _sharesToTransfer = getSharesByALD(_amount); _transferShares(_sender, _recipient, _sharesToTransfer); emit Transfer(_sender, _recipient, _amount); } /** * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens. */ function _approve( address _owner, address _spender, uint256 _amount ) internal { require(_owner != address(0), "XALD: approve from the zero address"); require(_spender != address(0), "XALD: approve to the zero address"); _allowances[_owner][_spender] = _amount; emit Approval(_owner, _spender, _amount); } /** * @dev Moves `_sharesAmount` shares from `_sender` to `_recipient`. */ function _transferShares( address _sender, address _recipient, uint256 _sharesAmount ) internal { require(_sender != address(0), "XALD: transfer from the zero address"); require(_recipient != address(0), "XALD: transfer to the zero address"); uint256 currentSenderShares = _shares[_sender]; require(_sharesAmount <= currentSenderShares, "XALD: transfer amount exceeds balance"); _shares[_sender] = currentSenderShares.sub(_sharesAmount); _shares[_recipient] = _shares[_recipient].add(_sharesAmount); } /** * @dev Creates `_sharesAmount` shares and assigns them to `_recipient`, increasing the total amount of shares. * * This doesn't increase the token total supply. */ function _mintShares(address _recipient, uint256 _sharesAmount) internal { require(_recipient != address(0), "XALD: mint to the zero address"); _totalShares = _totalShares.add(_sharesAmount); _shares[_recipient] = _shares[_recipient].add(_sharesAmount); emit MintShare(_recipient, _sharesAmount); } /** * @dev Destroys `_sharesAmount` shares from `_account`'s holdings, decreasing the total amount of shares. * * This doesn't decrease the token total supply. */ function _burnShares(address _account, uint256 _sharesAmount) internal { require(_account != address(0), "XALD: burn from the zero address"); uint256 accountShares = _shares[_account]; require(_sharesAmount <= accountShares, "XALD: burn amount exceeds balance"); _totalShares = _totalShares.sub(_sharesAmount); _shares[_account] = accountShares.sub(_sharesAmount); emit BurnShare(_account, _sharesAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"share","type":"uint256"}],"name":"BurnShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"share","type":"uint256"}],"name":"MintShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"profit","type":"uint256"}],"name":"Rebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sharesAmount","type":"uint256"}],"name":"getALDByShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_aldAmount","type":"uint256"}],"name":"getSharesByALD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"profit","type":"uint256"}],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"sharesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_aldAmount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_xALDAmount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600580546001600160a01b031916331790556111c3806100326000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806375b9a54e116100cd578063c2a672e011610081578063dd62ed3e11610066578063dd62ed3e1461043a578063e920e0e414610468578063f5eb42dc146104855761016c565b8063c2a672e0146103e8578063c4d66de8146104145761016c565b8063a457c2d7116100b2578063a457c2d714610364578063a9059cbb14610390578063adc9772e146103bc5761016c565b806375b9a54e1461033f57806395d89b411461035c5761016c565b8063313ce567116101245780633a98ef39116101095780633a98ef39146102ed5780634cf088d9146102f557806370a08231146103195761016c565b8063313ce567146102a357806339509351146102c15761016c565b8063095ea7b311610155578063095ea7b31461021357806318160ddd1461025357806323b872dd1461026d5761016c565b8063058ecdb41461017157806306fdde0314610196575b600080fd5b6101946004803603604081101561018757600080fd5b50803590602001356104ab565b005b61019e610559565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d85781810151838201526020016101c0565b50505050905090810190601f1680156102055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023f6004803603604081101561022957600080fd5b506001600160a01b038135169060200135610590565b604080519115158252519081900360200190f35b61025b6105a7565b60408051918252519081900360200190f35b61023f6004803603606081101561028357600080fd5b506001600160a01b038135811691602081013590911690604001356105ad565b6102ab61063a565b6040805160ff9092168252519081900360200190f35b61023f600480360360408110156102d757600080fd5b506001600160a01b03813516906020013561063f565b61025b610675565b6102fd61067b565b604080516001600160a01b039092168252519081900360200190f35b61025b6004803603602081101561032f57600080fd5b50356001600160a01b031661068a565b61025b6004803603602081101561035557600080fd5b50356106b4565b61019e6106ef565b61023f6004803603604081101561037a57600080fd5b506001600160a01b038135169060200135610726565b61023f600480360360408110156103a657600080fd5b506001600160a01b0381351690602001356107a2565b610194600480360360408110156103d257600080fd5b506001600160a01b0381351690602001356107af565b610194600480360360408110156103fe57600080fd5b506001600160a01b03813516906020013561083b565b6101946004803603602081101561042a57600080fd5b50356001600160a01b03166108c2565b61025b6004803603604081101561045057600080fd5b506001600160a01b03813581169160200135166109bd565b61025b6004803603602081101561047e57600080fd5b50356109e8565b61025b6004803603602081101561049b57600080fd5b50356001600160a01b0316610a16565b6004546001600160a01b0316331461050a576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b6002546105179082610a31565b600255604080518381526020810183905281517f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511929181900390910190a15050565b60408051808201909152601081527f7374616b656420414c4420546f6b656e00000000000000000000000000000000602082015290565b600061059d338484610a92565b5060015b92915050565b60025490565b6001600160a01b0383166000908152600160209081526040808320338452909152812054828110156106105760405162461bcd60e51b81526004018080602001828103825260278152602001806110b86027913960400191505060405180910390fd5b61061b858585610b7e565b61062f853361062a8487610be7565b610a92565b506001949350505050565b601290565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161059d91859061062a9086610a31565b60035490565b6004546001600160a01b031681565b6001600160a01b0381166000908152602081905260408120546106ac906109e8565b90505b919050565b600254600090806106c857829150506106af565b6106e7816106e160035486610c4490919063ffffffff16565b90610c9d565b9150506106af565b60408051808201909152600481527f78414c4400000000000000000000000000000000000000000000000000000000602082015290565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156107895760405162461bcd60e51b815260040180806020018281038252602481526020018061116a6024913960400191505060405180910390fd5b610798338561062a8487610be7565b5060019392505050565b600061059d338484610b7e565b6004546001600160a01b0316331461080e576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b6000610819826106b4565b6002549091506108299083610a31565b6002556108368382610d04565b505050565b6004546001600160a01b0316331461089a576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b60006108a5826106b4565b6002549091506108b59083610be7565b6002556108368382610dec565b6005546001600160a01b03163314610921576040805162461bcd60e51b815260206004820152601660248201527f58414c443a206f6e6c7920696e697469616c697a657200000000000000000000604482015290519081900360640190fd5b6001600160a01b03811661097c576040805162461bcd60e51b815260206004820152601660248201527f58414c443a206e6f74207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b600480546001600160a01b039092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600580549091169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600354600090806109fd5760009150506106af565b6106e7816106e160025486610c4490919063ffffffff16565b6001600160a01b031660009081526020819052604090205490565b600082820183811015610a8b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038316610ad75760405162461bcd60e51b81526004018080602001828103825260238152602001806110526023913960400191505060405180910390fd5b6001600160a01b038216610b1c5760405162461bcd60e51b81526004018080602001828103825260218152602001806110df6021913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610b89826106b4565b9050610b96848483610f14565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b600082821115610c3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082610c53575060006105a1565b82820282848281610c6057fe5b0414610a8b5760405162461bcd60e51b81526004018080602001828103825260218152602001806110756021913960400191505060405180910390fd5b6000808211610cf3576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610cfc57fe5b049392505050565b6001600160a01b038216610d5f576040805162461bcd60e51b815260206004820152601e60248201527f58414c443a206d696e7420746f20746865207a65726f20616464726573730000604482015290519081900360640190fd5b600354610d6c9082610a31565b6003556001600160a01b038216600090815260208190526040902054610d929082610a31565b6001600160a01b0383166000818152602081815260409182902093909355805191825291810183905281517fa336a0cb19174a9c3ff5851ad3dd274df5c9323dbbc6e2177031c7f7c0319d77929181900390910190a15050565b6001600160a01b038216610e47576040805162461bcd60e51b815260206004820181905260248201527f58414c443a206275726e2066726f6d20746865207a65726f2061646472657373604482015290519081900360640190fd5b6001600160a01b03821660009081526020819052604090205480821115610e9f5760405162461bcd60e51b81526004018080602001828103825260218152602001806111246021913960400191505060405180910390fd5b600354610eac9083610be7565b600355610eb98183610be7565b6001600160a01b0384166000818152602081815260409182902093909355805191825291810184905281517ffaddfec5b2541216c9e8d42ec31574199eae6b232c24690ab7f661eb95f5859f929181900390910190a1505050565b6001600160a01b038316610f595760405162461bcd60e51b81526004018080602001828103825260248152602001806111006024913960400191505060405180910390fd5b6001600160a01b038216610f9e5760405162461bcd60e51b81526004018080602001828103825260228152602001806110966022913960400191505060405180910390fd5b6001600160a01b03831660009081526020819052604090205480821115610ff65760405162461bcd60e51b81526004018080602001828103825260258152602001806111456025913960400191505060405180910390fd5b6110008183610be7565b6001600160a01b03808616600090815260208190526040808220939093559085168152205461102f9083610a31565b6001600160a01b0390931660009081526020819052604090209290925550505056fe58414c443a20617070726f76652066726f6d20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7758414c443a207472616e7366657220746f20746865207a65726f206164647265737358414c443a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636558414c443a20617070726f766520746f20746865207a65726f206164647265737358414c443a207472616e736665722066726f6d20746865207a65726f206164647265737358414c443a206275726e20616d6f756e7420657863656564732062616c616e636558414c443a207472616e7366657220616d6f756e7420657863656564732062616c616e636558414c443a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220df7f6fb3e02bfcfe49bd1a824071bd48939193a44d45fd47b82b4ba7ff6df9e864736f6c63430007060033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061016c5760003560e01c806375b9a54e116100cd578063c2a672e011610081578063dd62ed3e11610066578063dd62ed3e1461043a578063e920e0e414610468578063f5eb42dc146104855761016c565b8063c2a672e0146103e8578063c4d66de8146104145761016c565b8063a457c2d7116100b2578063a457c2d714610364578063a9059cbb14610390578063adc9772e146103bc5761016c565b806375b9a54e1461033f57806395d89b411461035c5761016c565b8063313ce567116101245780633a98ef39116101095780633a98ef39146102ed5780634cf088d9146102f557806370a08231146103195761016c565b8063313ce567146102a357806339509351146102c15761016c565b8063095ea7b311610155578063095ea7b31461021357806318160ddd1461025357806323b872dd1461026d5761016c565b8063058ecdb41461017157806306fdde0314610196575b600080fd5b6101946004803603604081101561018757600080fd5b50803590602001356104ab565b005b61019e610559565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d85781810151838201526020016101c0565b50505050905090810190601f1680156102055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023f6004803603604081101561022957600080fd5b506001600160a01b038135169060200135610590565b604080519115158252519081900360200190f35b61025b6105a7565b60408051918252519081900360200190f35b61023f6004803603606081101561028357600080fd5b506001600160a01b038135811691602081013590911690604001356105ad565b6102ab61063a565b6040805160ff9092168252519081900360200190f35b61023f600480360360408110156102d757600080fd5b506001600160a01b03813516906020013561063f565b61025b610675565b6102fd61067b565b604080516001600160a01b039092168252519081900360200190f35b61025b6004803603602081101561032f57600080fd5b50356001600160a01b031661068a565b61025b6004803603602081101561035557600080fd5b50356106b4565b61019e6106ef565b61023f6004803603604081101561037a57600080fd5b506001600160a01b038135169060200135610726565b61023f600480360360408110156103a657600080fd5b506001600160a01b0381351690602001356107a2565b610194600480360360408110156103d257600080fd5b506001600160a01b0381351690602001356107af565b610194600480360360408110156103fe57600080fd5b506001600160a01b03813516906020013561083b565b6101946004803603602081101561042a57600080fd5b50356001600160a01b03166108c2565b61025b6004803603604081101561045057600080fd5b506001600160a01b03813581169160200135166109bd565b61025b6004803603602081101561047e57600080fd5b50356109e8565b61025b6004803603602081101561049b57600080fd5b50356001600160a01b0316610a16565b6004546001600160a01b0316331461050a576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b6002546105179082610a31565b600255604080518381526020810183905281517f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511929181900390910190a15050565b60408051808201909152601081527f7374616b656420414c4420546f6b656e00000000000000000000000000000000602082015290565b600061059d338484610a92565b5060015b92915050565b60025490565b6001600160a01b0383166000908152600160209081526040808320338452909152812054828110156106105760405162461bcd60e51b81526004018080602001828103825260278152602001806110b86027913960400191505060405180910390fd5b61061b858585610b7e565b61062f853361062a8487610be7565b610a92565b506001949350505050565b601290565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161059d91859061062a9086610a31565b60035490565b6004546001600160a01b031681565b6001600160a01b0381166000908152602081905260408120546106ac906109e8565b90505b919050565b600254600090806106c857829150506106af565b6106e7816106e160035486610c4490919063ffffffff16565b90610c9d565b9150506106af565b60408051808201909152600481527f78414c4400000000000000000000000000000000000000000000000000000000602082015290565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156107895760405162461bcd60e51b815260040180806020018281038252602481526020018061116a6024913960400191505060405180910390fd5b610798338561062a8487610be7565b5060019392505050565b600061059d338484610b7e565b6004546001600160a01b0316331461080e576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b6000610819826106b4565b6002549091506108299083610a31565b6002556108368382610d04565b505050565b6004546001600160a01b0316331461089a576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b60006108a5826106b4565b6002549091506108b59083610be7565b6002556108368382610dec565b6005546001600160a01b03163314610921576040805162461bcd60e51b815260206004820152601660248201527f58414c443a206f6e6c7920696e697469616c697a657200000000000000000000604482015290519081900360640190fd5b6001600160a01b03811661097c576040805162461bcd60e51b815260206004820152601660248201527f58414c443a206e6f74207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b600480546001600160a01b039092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600580549091169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600354600090806109fd5760009150506106af565b6106e7816106e160025486610c4490919063ffffffff16565b6001600160a01b031660009081526020819052604090205490565b600082820183811015610a8b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038316610ad75760405162461bcd60e51b81526004018080602001828103825260238152602001806110526023913960400191505060405180910390fd5b6001600160a01b038216610b1c5760405162461bcd60e51b81526004018080602001828103825260218152602001806110df6021913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610b89826106b4565b9050610b96848483610f14565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b600082821115610c3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082610c53575060006105a1565b82820282848281610c6057fe5b0414610a8b5760405162461bcd60e51b81526004018080602001828103825260218152602001806110756021913960400191505060405180910390fd5b6000808211610cf3576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610cfc57fe5b049392505050565b6001600160a01b038216610d5f576040805162461bcd60e51b815260206004820152601e60248201527f58414c443a206d696e7420746f20746865207a65726f20616464726573730000604482015290519081900360640190fd5b600354610d6c9082610a31565b6003556001600160a01b038216600090815260208190526040902054610d929082610a31565b6001600160a01b0383166000818152602081815260409182902093909355805191825291810183905281517fa336a0cb19174a9c3ff5851ad3dd274df5c9323dbbc6e2177031c7f7c0319d77929181900390910190a15050565b6001600160a01b038216610e47576040805162461bcd60e51b815260206004820181905260248201527f58414c443a206275726e2066726f6d20746865207a65726f2061646472657373604482015290519081900360640190fd5b6001600160a01b03821660009081526020819052604090205480821115610e9f5760405162461bcd60e51b81526004018080602001828103825260218152602001806111246021913960400191505060405180910390fd5b600354610eac9083610be7565b600355610eb98183610be7565b6001600160a01b0384166000818152602081815260409182902093909355805191825291810184905281517ffaddfec5b2541216c9e8d42ec31574199eae6b232c24690ab7f661eb95f5859f929181900390910190a1505050565b6001600160a01b038316610f595760405162461bcd60e51b81526004018080602001828103825260248152602001806111006024913960400191505060405180910390fd5b6001600160a01b038216610f9e5760405162461bcd60e51b81526004018080602001828103825260228152602001806110966022913960400191505060405180910390fd5b6001600160a01b03831660009081526020819052604090205480821115610ff65760405162461bcd60e51b81526004018080602001828103825260258152602001806111456025913960400191505060405180910390fd5b6110008183610be7565b6001600160a01b03808616600090815260208190526040808220939093559085168152205461102f9083610a31565b6001600160a01b0390931660009081526020819052604090209290925550505056fe58414c443a20617070726f76652066726f6d20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7758414c443a207472616e7366657220746f20746865207a65726f206164647265737358414c443a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636558414c443a20617070726f766520746f20746865207a65726f206164647265737358414c443a207472616e736665722066726f6d20746865207a65726f206164647265737358414c443a206275726e20616d6f756e7420657863656564732062616c616e636558414c443a207472616e7366657220616d6f756e7420657863656564732062616c616e636558414c443a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220df7f6fb3e02bfcfe49bd1a824071bd48939193a44d45fd47b82b4ba7ff6df9e864736f6c63430007060033
Deployed Bytecode Sourcemap
10924:8122:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15702:164;;;;;;;;;;;;;;;;-1:-1:-1;15702:164:0;;;;;;;:::i;:::-;;12234:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13808:153;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13808:153:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12739:94;;;:::i;:::-;;;;;;;;;;;;;;;;14019:418;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14019:418:0;;;;;;;;;;;;;;;;;:::i;12612:70::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14539:201;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14539:201:0;;;;;;;;:::i;12898:85::-;;;:::i;11695:22::-;;;:::i;:::-;;;;-1:-1:-1;;;;;11695:22:0;;;;;;;;;;;;;;13038:129;;;;;;;;;;;;;;;;-1:-1:-1;13038:129:0;-1:-1:-1;;;;;13038:129:0;;:::i;15872:276::-;;;;;;;;;;;;;;;;-1:-1:-1;15872:276:0;;:::i;12433:80::-;;;:::i;14842:355::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14842:355:0;;;;;;;;:::i;13400:159::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13400:159:0;;;;;;;;:::i;15203:243::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15203:243:0;;;;;;;;:::i;15452:244::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15452:244:0;;;;;;;;:::i;11928:::-;;;;;;;;;;;;;;;;-1:-1:-1;11928:244:0;-1:-1:-1;;;;;11928:244:0;;:::i;13614:141::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13614:141:0;;;;;;;;;;:::i;16154:267::-;;;;;;;;;;;;;;;;-1:-1:-1;16154:267:0;;:::i;13243:103::-;;;;;;;;;;;;;;;;-1:-1:-1;13243:103:0;-1:-1:-1;;;;;13243:103:0;;:::i;15702:164::-;11811:7;;-1:-1:-1;;;;;11811:7:0;11797:10;:21;11789:61;;;;;-1:-1:-1;;;11789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15801:12:::1;::::0;:24:::1;::::0;15818:6;15801:16:::1;:24::i;:::-;15786:12;:39:::0;15839:21:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;15702:164:::0;;:::o;12234:90::-;12293:25;;;;;;;;;;;;;;;;;12234:90;:::o;13808:153::-;13885:4;13898:39;13907:10;13919:8;13929:7;13898:8;:39::i;:::-;-1:-1:-1;13951:4:0;13808:153;;;;;:::o;12739:94::-;12815:12;;12739:94;:::o;14019:418::-;-1:-1:-1;;;;;14180:20:0;;14140:4;14180:20;;;:11;:20;;;;;;;;14201:10;14180:32;;;;;;;;14227:27;;;;14219:79;;;;-1:-1:-1;;;14219:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14307:39;14317:7;14326:10;14338:7;14307:9;:39::i;:::-;14353:60;14362:7;14371:10;14383:29;:16;14404:7;14383:20;:29::i;:::-;14353:8;:60::i;:::-;-1:-1:-1;14427:4:0;;14019:418;-1:-1:-1;;;;14019:418:0:o;12612:70::-;12674:2;12612:70;:::o;14539:201::-;14643:10;14621:4;14665:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;14665:33:0;;;;;;;;;;14621:4;;14634:82;;14655:8;;14665:50;;14703:11;14665:37;:50::i;12898:85::-;12965:12;;12898:85;:::o;11695:22::-;;;-1:-1:-1;;;;;11695:22:0;;:::o;13038:129::-;-1:-1:-1;;;;;13143:17:0;;13105:7;13143:17;;;;;;;;;;;13128:33;;:14;:33::i;:::-;13121:40;;13038:129;;;;:::o;15872:276::-;15987:12;;15946:7;;16010:19;16006:137;;16047:10;16040:17;;;;;16006:137;16087:48;16120:14;16087:28;16102:12;;16087:10;:14;;:28;;;;:::i;:::-;:32;;:48::i;:::-;16080:55;;;;;12433:80;12494:13;;;;;;;;;;;;;;;;;12433:80;:::o;14842:355::-;14981:10;14929:4;14969:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;14969:33:0;;;;;;;;;;15017:36;;;;15009:85;;;;-1:-1:-1;;;15009:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15103:70;15112:10;15124:8;15134:38;:16;15155;15134:20;:38::i;15103:70::-;-1:-1:-1;15187:4:0;;14842:355;-1:-1:-1;;;14842:355:0:o;13400:159::-;13480:4;13493:42;13503:10;13515;13527:7;13493:9;:42::i;15203:243::-;11811:7;;-1:-1:-1;;;;;11811:7:0;11797:10;:21;11789:61;;;;;-1:-1:-1;;;11789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15295:21:::1;15319:26;15334:10;15319:14;:26::i;:::-;15367:12;::::0;15295:50;;-1:-1:-1;15367:28:0::1;::::0;15384:10;15367:16:::1;:28::i;:::-;15352:12;:43:::0;15402:38:::1;15414:10:::0;15426:13;15402:11:::1;:38::i;:::-;11857:1;15203:243:::0;;:::o;15452:244::-;11811:7;;-1:-1:-1;;;;;11811:7:0;11797:10;:21;11789:61;;;;;-1:-1:-1;;;11789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15545:21:::1;15569:27;15584:11;15569:14;:27::i;:::-;15618:12;::::0;15545:51;;-1:-1:-1;15618:29:0::1;::::0;15635:11;15618:16:::1;:29::i;:::-;15603:12;:44:::0;15654:36:::1;15666:8:::0;15676:13;15654:11:::1;:36::i;11928:244::-:0;11990:12;;-1:-1:-1;;;;;11990:12:0;12006:10;11990:26;11982:61;;;;;-1:-1:-1;;;11982:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12058:22:0;;12050:57;;;;;-1:-1:-1;;;12050:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12116:7;:18;;-1:-1:-1;;;;;12116:18:0;;;;;;;;;;12141:12;:25;;;;;;;11928:244::o;13614:141::-;-1:-1:-1;;;;;13720:19:0;;;13697:7;13720:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;13614:141::o;16154:267::-;16270:12;;16231:7;;16293:17;16289:127;;16328:1;16321:8;;;;;16289:127;16359:49;16395:12;16359:31;16377:12;;16359:13;:17;;:31;;;;:::i;13243:103::-;-1:-1:-1;;;;;13323:17:0;13300:7;13323:17;;;;;;;;;;;;13243:103::o;2901:179::-;2959:7;2991:5;;;3015:6;;;;3007:46;;;;;-1:-1:-1;;;3007:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3071:1;2901:179;-1:-1:-1;;;2901:179:0:o;16890:349::-;-1:-1:-1;;;;;17003:20:0;;16995:68;;;;-1:-1:-1;;;16995:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17078:22:0;;17070:68;;;;-1:-1:-1;;;17070:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17147:19:0;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:39;;;17198:35;;;;;;;;;;;;;;;;;16890:349;;;:::o;16507:278::-;16616:25;16644:23;16659:7;16644:14;:23::i;:::-;16616:51;;16674:55;16690:7;16699:10;16711:17;16674:15;:55::i;:::-;16759:10;-1:-1:-1;;;;;16741:38:0;16750:7;-1:-1:-1;;;;;16741:38:0;;16771:7;16741:38;;;;;;;;;;;;;;;;;;16507:278;;;;:::o;3363:158::-;3421:7;3454:1;3449;:6;;3441:49;;;;;-1:-1:-1;;;3441:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3508:5:0;;;3363:158::o;3780:220::-;3838:7;3862:6;3858:20;;-1:-1:-1;3877:1:0;3870:8;;3858:20;3901:5;;;3905:1;3901;:5;:1;3925:5;;;;;:10;3917:56;;;;-1:-1:-1;;;3917:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4478:153;4536:7;4568:1;4564;:5;4556:44;;;;;-1:-1:-1;;;4556:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4622:1;4618;:5;;;;;;;4478:153;-1:-1:-1;;;4478:153:0:o;18080:327::-;-1:-1:-1;;;;;18168:24:0;;18160:67;;;;;-1:-1:-1;;;18160:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18251:12;;:31;;18268:13;18251:16;:31::i;:::-;18236:12;:46;-1:-1:-1;;;;;18313:19:0;;:7;:19;;;;;;;;;;;:38;;18337:13;18313:23;:38::i;:::-;-1:-1:-1;;;;;18291:19:0;;:7;:19;;;;;;;;;;;;:60;;;;18365:36;;;;;;;;;;;;;;;;;;;;;;;;18080:327;;:::o;18595:448::-;-1:-1:-1;;;;;18681:22:0;;18673:67;;;;;-1:-1:-1;;;18673:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18773:17:0;;18749:21;18773:17;;;;;;;;;;;18805:30;;;;18797:76;;;;-1:-1:-1;;;18797:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18897:12;;:31;;18914:13;18897:16;:31::i;:::-;18882:12;:46;18957:32;:13;18975;18957:17;:32::i;:::-;-1:-1:-1;;;;;18937:17:0;;:7;:17;;;;;;;;;;;;:52;;;;19003:34;;;;;;;;;;;;;;;;;;;;;;;;18595:448;;;:::o;17331:556::-;-1:-1:-1;;;;;17460:21:0;;17452:70;;;;-1:-1:-1;;;17452:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17537:24:0;;17529:71;;;;-1:-1:-1;;;17529:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17639:16:0;;17609:27;17639:16;;;;;;;;;;;17670:36;;;;17662:86;;;;-1:-1:-1;;;17662:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17776:38;:19;17800:13;17776:23;:38::i;:::-;-1:-1:-1;;;;;17757:16:0;;;:7;:16;;;;;;;;;;;:57;;;;17843:19;;;;;;;:38;;17867:13;17843:23;:38::i;:::-;-1:-1:-1;;;;;17821:19:0;;;:7;:19;;;;;;;;;;:60;;;;-1:-1:-1;;;17331:556:0:o
Swarm Source
ipfs://df7f6fb3e02bfcfe49bd1a824071bd48939193a44d45fd47b82b4ba7ff6df9e8
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.