Token Mysterium

VPN  
 

Overview [ERC-20]

Price
$0.27 @ 0.000168 Eth (-2.34%)
Fully Diluted Market Cap
Max Total Supply:
22,769,669.56274675 MYST

Holders:
3,077 ( 0.033%)

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Mysterium is building a decentralised P2P VPN and other tools that allow users to browse the internet freely and earn by sharing their internet connection.

Market

Volume (24H):$5,070.65
Market Capitalization:$8,738,625.00
Circulating Supply:32,433,365.00 MYST
Market Data Source: Coinmarketcap

ICO Information

ICO Start Date : May 30, 2017  
ICO End Date : May 30, 2017
Raised : $13,325,693
ICO Price  : $1.03
Country : USA

# Exchange Pair Price  24H Volume % Volume
1
MEXC Global
MYST-USDT$0.2759
0.0001698 Eth
$320,942.00
1,163,119.290 MYST
97.8295%
2
Quickswap
0X1379E8886A944D2D9D440B3D88DF536AEA08D9F3-0X2791BCA1F2DE4661ED88A30C99A7A9449AA84174$0.2735
0.0001683 Eth
$5,081.93
18,701.375 0X1379E8886A944D2D9D440B3D88DF536AEA08D9F3
1.5730%
3
Uniswap (v3)
0X4CF89CA06AD997BC732DC876ED2A7F26A9E7F361-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.2801
0.0001782 Eth
$1,262.62
4,507.100 0X4CF89CA06AD997BC732DC876ED2A7F26A9E7F361
0.3791%
4
Uniswap (v3)
0X4CF89CA06AD997BC732DC876ED2A7F26A9E7F361-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.2769
0.0001761 Eth
$671.89
2,426.900 0X4CF89CA06AD997BC732DC876ED2A7F26A9E7F361
0.2041%
5
PancakeSwap (v2)
0X2FF0B946A6782190C4FE5D4971CFE79F0B6E4DF2-0X8AC76A51CC950D9822D68B83FE1AD97B32CD580D$0.2774
0.0001762 Eth
$28.26
101.879 0X2FF0B946A6782190C4FE5D4971CFE79F0B6E4DF2
0.0086%
6
Bittrex
MYST-BTC$0.2815
0.0001732 Eth
$8.87
31.527 MYST
0.0027%
7
Uniswap (v2)
0X4CF89CA06AD997BC732DC876ED2A7F26A9E7F361-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.2736
0.0001732 Eth
$7.84
28.755 0X4CF89CA06AD997BC732DC876ED2A7F26A9E7F361
0.0024%
8
Bittrex
MYST-USDT$0.2815
0.0001732 Eth
$1.89
6.714 MYST
0.0006%
9
HitBTC
MYST-BTC$0.2879
0.0001773 Eth
$0.2879
1.000 MYST
0.0001%
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MystToken

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-17
*/

// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.6.11;

/**
 * @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);
}

/**
 * Upgrade agent interface inspired by Lunyr.
 *
 * Upgrade agent transfers tokens to a new contract.
 * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting.
 */
abstract contract IUpgradeAgent {
    function isUpgradeAgent() external virtual pure returns (bool);
    function upgradeFrom(address _from, uint256 _value) public virtual;
    function originalSupply() public virtual view returns (uint256);
    function originalToken() public virtual view returns (address);
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * 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);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract MystToken is Context, IERC20, IUpgradeAgent {
    using SafeMath for uint256;
    using Address for address;

    address immutable _originalToken;                        // Address of MYSTv1 token
    uint256 immutable _originalSupply;                       // Token supply of MYSTv1 token

    // The original MYST token and the new MYST token have a decimal difference of 10.
    // As such, minted values as well as the total supply comparisons need to offset all values
    // by 10 zeros to properly compare them.
    uint256 constant private DECIMAL_OFFSET = 1e10;

    bool constant public override isUpgradeAgent = true;     // Upgradeability interface marker
    address private _upgradeMaster;                          // He can enable future token migration
    IUpgradeAgent private _upgradeAgent;                     // The next contract where the tokens will be migrated
    uint256 private _totalUpgraded;                          // How many tokens we have upgraded by now

    mapping(address => uint256) private _balances;
    uint256 private _totalSupply;

    string constant public name = "Mysterium";
    string constant public symbol = "MYST";
    uint8 constant public decimals = 18;

    // EIP712
    bytes32 public immutable DOMAIN_SEPARATOR;

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

    // The nonces mapping is given for replay protection in permit function.
    mapping(address => uint) public nonces;

    // ERC20-allowances
    mapping (address => mapping (address => uint256)) private _allowances;

    event Minted(address indexed to, uint256 amount);
    event Burned(address indexed from, uint256 amount);

    // State of token upgrade
    enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading, Completed}

    // Token upgrade events
    event Upgrade(address indexed from, address agent, uint256 _value);
    event UpgradeAgentSet(address agent);
    event UpgradeMasterSet(address master);

    constructor(address originalToken) public {
        // upgradability settings
        _originalToken  = originalToken;
        _originalSupply = IERC20(originalToken).totalSupply();

        // set upgrade master
        _upgradeMaster = _msgSender();

        // construct EIP712 domain separator
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes(name)),
                keccak256(bytes('1')),
                _chainID(),
                address(this)
            )
        );
    }

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

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _move(_msgSender(), recipient, amount);
        return true;
    }

    function burn(uint256 amount) public {
        _burn(_msgSender(), amount);
    }

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

    function approve(address spender, uint256 value) public override returns (bool) {
        _approve(_msgSender(), spender, value);
        return true;
    }

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

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

    /**
     * ERC2612 `permit`: 712-signed token approvals
     */
    function permit(address holder, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(deadline >= block.timestamp, 'MYST: Permit expired');
        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(PERMIT_TYPEHASH, holder, spender, value, nonces[holder]++, deadline))
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress != address(0) && recoveredAddress == holder, 'MYST: invalid signature');
        _approve(holder, spender, value);
    }

    /**
    * Note that we're not decreasing allowance of uint(-1). This makes it simple to ERC777 operator.
    */
    function transferFrom(address holder, address recipient, uint256 amount) public override returns (bool) {
        // require(recipient != address(0), "MYST: transfer to the zero address");
        require(holder != address(0), "MYST: transfer from the zero address");
        address spender = _msgSender();

        // Allowance for uint256(-1) means "always allowed" and is analog for erc777 operators but in erc20 semantics.
        if (holder != spender && _allowances[holder][spender] != uint256(-1)) {
            _approve(holder, spender, _allowances[holder][spender].sub(amount, "MYST: transfer amount exceeds allowance"));
        }

        _move(holder, recipient, amount);
        return true;
    }

    /**
     * Creates `amount` tokens and assigns them to `holder`, increasing
     * the total supply.
     */
    function _mint(address holder, uint256 amount) internal {
        require(holder != address(0), "MYST: mint to the zero address");

        // Update state variables
        _totalSupply = _totalSupply.add(amount);
        _balances[holder] = _balances[holder].add(amount);

        emit Minted(holder, amount);
        emit Transfer(address(0), holder, amount);
    }

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

        // Update state variables
        _balances[from] = _balances[from].sub(amount, "MYST: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);

        emit Transfer(from, address(0), amount);
        emit Burned(from, amount);
    }

    function _move(address from, address to, uint256 amount) private {
        // Sending to zero address is equal burning
        if (to == address(0)) {
            _burn(from, amount);
            return;
        }

        _balances[from] = _balances[from].sub(amount, "MYST: transfer amount exceeds balance");
        _balances[to] = _balances[to].add(amount);

        emit Transfer(from, to, amount);
    }

    function _approve(address holder, address spender, uint256 value) internal {
        require(holder != address(0), "MYST: approve from the zero address");
        require(spender != address(0), "MYST: approve to the zero address");

        _allowances[holder][spender] = value;
        emit Approval(holder, spender, value);
    }

    // -------------- UPGRADE FROM v1 TOKEN --------------

    function originalToken() public view override returns (address) {
        return _originalToken;
    }

    function originalSupply() public view override returns (uint256) {
        return _originalSupply;
    }

    function upgradeFrom(address _account, uint256 _value) public override {
        require(msg.sender == originalToken(), "only original token can call upgradeFrom");

        // Value is multiplied by 0e10 as old token had decimals = 8?
        _mint(_account, _value.mul(DECIMAL_OFFSET));

        require(totalSupply() <= originalSupply().mul(DECIMAL_OFFSET), "can not mint more tokens than in original contract");
    }


    // -------------- PREPARE FOR FUTURE UPGRADABILITY --------------

    function upgradeMaster() public view returns (address) {
        return _upgradeMaster;
    }

    function upgradeAgent() public view returns (address) {
        return address(_upgradeAgent);
    }

    function totalUpgraded() public view returns (uint256) {
        return _totalUpgraded;
    }

    /**
     * Tokens can be upgraded by calling this function.
     */
    function upgrade(uint256 amount) public {
        UpgradeState state = getUpgradeState();
        require(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading, "MYST: token is not in upgrading state");

        require(amount != 0, "MYST: upgradable amount should be more than 0");

        address holder = _msgSender();

        // Burn tokens to be upgraded
        _burn(holder, amount);

        // Remember how many tokens we have upgraded
        _totalUpgraded = _totalUpgraded.add(amount);

        // Upgrade agent upgrades/reissues tokens
        _upgradeAgent.upgradeFrom(holder, amount);
        emit Upgrade(holder, upgradeAgent(), amount);
    }

    function setUpgradeMaster(address newUpgradeMaster) external {
        require(newUpgradeMaster != address(0x0), "MYST: upgrade master can't be zero address");
        require(_msgSender() == _upgradeMaster, "MYST: only upgrade master can set new one");
        _upgradeMaster = newUpgradeMaster;

        emit UpgradeMasterSet(upgradeMaster());
    }

    function setUpgradeAgent(address agent) external {
        require(_msgSender()== _upgradeMaster, "MYST: only a master can designate the next agent");
        require(agent != address(0x0), "MYST: upgrade agent can't be zero address");
        require(getUpgradeState() != UpgradeState.Upgrading, "MYST: upgrade has already begun");

        _upgradeAgent = IUpgradeAgent(agent);
        require(_upgradeAgent.isUpgradeAgent(), "MYST: agent should implement IUpgradeAgent interface");

        // Make sure that token supplies match in source and target
        require(_upgradeAgent.originalSupply() == totalSupply(), "MYST: upgrade agent should know token's total supply");

        emit UpgradeAgentSet(upgradeAgent());
    }

    function getUpgradeState() public view returns(UpgradeState) {
        if(address(_upgradeAgent) == address(0x00)) return UpgradeState.WaitingForAgent;
        else if(_totalUpgraded == 0) return UpgradeState.ReadyToUpgrade;
        else if(totalSupply() == 0) return UpgradeState.Completed;
        else return UpgradeState.Upgrading;
    }

    // -------------- FUNDS RECOVERY --------------

    address internal _fundsDestination;
    event FundsRecoveryDestinationChanged(address indexed previousDestination, address indexed newDestination);

    /**
     * Setting new destination of funds recovery.
     */
    function setFundsDestination(address newDestination) public {
        require(_msgSender()== _upgradeMaster, "MYST: only a master can set funds destination");
        require(newDestination != address(0), "MYST: funds destination can't be zero addreess");

        _fundsDestination = newDestination;
        emit FundsRecoveryDestinationChanged(_fundsDestination, newDestination);
    }
    /**
     * Getting funds destination address.
     */
    function getFundsDestination() public view returns (address) {
        return _fundsDestination;
    }

    /**
       Transfers selected tokens into `_fundsDestination` address.
    */
    function claimTokens(address token) public {
        require(_fundsDestination != address(0), "MYST: funds destination can't be zero addreess");
        uint256 amount = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(_fundsDestination, amount);
    }

    // -------------- HELPERS --------------

    function _chainID() private pure returns (uint256) {
        uint256 chainID;
        assembly {
            chainID := chainid()
        }
        return chainID;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"originalToken","type":"address"}],"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":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousDestination","type":"address"},{"indexed":true,"internalType":"address","name":"newDestination","type":"address"}],"name":"FundsRecoveryDestinationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minted","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"agent","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Upgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"agent","type":"address"}],"name":"UpgradeAgentSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"master","type":"address"}],"name":"UpgradeMasterSet","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenHolder","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"getFundsDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUpgradeState","outputs":[{"internalType":"enum MystToken.UpgradeState","name":"","type":"uint8"}],"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":[],"name":"isUpgradeAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDestination","type":"address"}],"name":"setFundsDestination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"agent","type":"address"}],"name":"setUpgradeAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newUpgradeMaster","type":"address"}],"name":"setUpgradeMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUpgraded","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":"holder","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":"uint256","name":"amount","type":"uint256"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradeAgent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"upgradeFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradeMaster","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60e06040523480156200001157600080fd5b506040516200342c3803806200342c833981810160405260208110156200003757600080fd5b81019080805190602001909291905050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015620000c657600080fd5b505afa158015620000db573d6000803e3d6000fd5b505050506040513d6020811015620000f257600080fd5b810190808051906020019092919050505060a081815250506200011a6200027a60201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518080620033da60529139605201905060405180910390206040518060400160405280600981526020017f4d797374657269756d0000000000000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525080519060200120620001fd6200028260201b60201c565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001955050505050506040516020818303038152906040528051906020012060c08181525050506200028f565b600033905090565b6000804690508091505090565b60805160601c60a05160c051613116620002c460003980610f92528061173e5250806112f5525080610b0952506131166000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806361d3d7a611610104578063a9059cbb116100a2578063dd62ed3e11610071578063dd62ed3e14610964578063df8de3e7146109dc578063f58c5b6e14610a20578063ffeb7d7514610a6a576101da565b8063a9059cbb14610803578063c752ff6214610869578063d505accf14610887578063d7e7088a14610920576101da565b80637ecebe00116100de5780637ecebe00146106965780638444b391146106ee57806395d89b411461071a578063a457c2d71461079d576101da565b806361d3d7a6146105ce57806370a08231146105f0578063753e88e514610648576101da565b8063313ce5671161017c57806345977d031161014b57806345977d03146104ee5780634b2ba0dd1461051c5780635de4ccb01461053a578063600440cb14610584576101da565b8063313ce567146104185780633644e5151461043c578063395093511461045a57806342966c68146104c0576101da565b806318160ddd116101b857806318160ddd14610312578063238e130a1461033057806323b872dd1461037457806330adf81f146103fa576101da565b806306fdde03146101df578063095ea7b3146102625780630e7c1cb5146102c8575b600080fd5b6101e7610aae565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ae6004803603604081101561027857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ae7565b604051808215151515815260200191505060405180910390f35b6102d0610b05565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031a610b2d565b6040518082815260200191505060405180910390f35b6103726004803603602081101561034657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b37565b005b6103e06004803603606081101561038a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d29565b604051808215151515815260200191505060405180910390f35b610402610f64565b6040518082815260200191505060405180910390f35b610420610f8b565b604051808260ff1660ff16815260200191505060405180910390f35b610444610f90565b6040518082815260200191505060405180910390f35b6104a66004803603604081101561047057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fb4565b604051808215151515815260200191505060405180910390f35b6104ec600480360360208110156104d657600080fd5b8101908080359060200190929190505050611067565b005b61051a6004803603602081101561050457600080fd5b810190808035906020019092919050505061107b565b005b6105246112f1565b6040518082815260200191505060405180910390f35b610542611319565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61058c611343565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d661136c565b604051808215151515815260200191505060405180910390f35b6106326004803603602081101561060657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611371565b6040518082815260200191505060405180910390f35b6106946004803603604081101561065e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113ba565b005b6106d8600480360360208110156106ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114e8565b6040518082815260200191505060405180910390f35b6106f6611500565b6040518082600581111561070657fe5b60ff16815260200191505060405180910390f35b610722611596565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610762578082015181840152602081019050610747565b50505050905090810190601f16801561078f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107e9600480360360408110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115cf565b604051808215151515815260200191505060405180910390f35b61084f6004803603604081101561081957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061169c565b604051808215151515815260200191505060405180910390f35b6108716116ba565b6040518082815260200191505060405180910390f35b61091e600480360360e081101561089d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506116c4565b005b6109626004803603602081101561093657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a26565b005b6109c66004803603604081101561097a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e93565b6040518082815260200191505060405180910390f35b610a1e600480360360208110156109f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f1a565b005b610a28612167565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610aac60048036036020811015610a8057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612191565b005b6040518060400160405280600981526020017f4d797374657269756d000000000000000000000000000000000000000000000081525081565b6000610afb610af4612370565b8484612378565b6001905092915050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6000600454905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b77612370565b73ffffffffffffffffffffffffffffffffffffffff1614610be3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180612f1d602d913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612f99602e913960400191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f2e1db88922daae16be4e3c1a1f4bfab0cf6741938844967bd985ac8b2a12c80460405160405180910390a350565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612e7d6024913960400191505060405180910390fd5b6000610dba612370565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610e9457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610f4d57610f4c8582610f4786604051806060016040528060278152602001612ea160279139600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256f9092919063ffffffff16565b612378565b5b610f5885858561262f565b60019150509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b601281565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061105d610fc1612370565b846110588560066000610fd2612370565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282290919063ffffffff16565b612378565b6001905092915050565b611078611072612370565b826128aa565b50565b6000611085611500565b90506003600581111561109457fe5b8160058111156110a057fe5b14806110c25750600460058111156110b457fe5b8160058111156110c057fe5b145b611117576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612f746025913960400191505060405180910390fd5b6000821415611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613066602d913960400191505060405180910390fd5b600061117b612370565b905061118781846128aa565b61119c8360025461282290919063ffffffff16565b600281905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663753e88e582856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561124b57600080fd5b505af115801561125f573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac6112a3611319565b85604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a2505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600181565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c2610b05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611445576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612e346028913960400191505060405180910390fd5b611466826114616402540be40084612acf90919063ffffffff16565b612b55565b6114856402540be4006114776112f1565b612acf90919063ffffffff16565b61148d610b2d565b11156114e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612fc76032913960400191505060405180910390fd5b5050565b60056020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115615760029050611593565b600060025414156115755760039050611593565b600061157f610b2d565b141561158e5760059050611593565b600490505b90565b6040518060400160405280600481526020017f4d5953540000000000000000000000000000000000000000000000000000000081525081565b60006116926115dc612370565b8461168d856040518060600160405280602581526020016130936025913960066000611606612370565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256f9092919063ffffffff16565b612378565b6001905092915050565b60006116b06116a9612370565b848461262f565b6001905092915050565b6000600254905090565b4284101561173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d5953543a205065726d6974206578706972656400000000000000000000000081525060200191505060405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b898989600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561192a573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561199e57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d5953543a20696e76616c6964207369676e617475726500000000000000000081525060200191505060405180910390fd5b611a1b898989612378565b505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a66612370565b73ffffffffffffffffffffffffffffffffffffffff1614611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612e046030913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061303d6029913960400191505060405180910390fd5b60046005811115611b6557fe5b611b6d611500565b6005811115611b7857fe5b1415611bec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d5953543a20757067726164652068617320616c726561647920626567756e0081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d3d7a66040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9557600080fd5b505afa158015611ca9573d6000803e3d6000fd5b505050506040513d6020811015611cbf57600080fd5b8101908080519060200190929190505050611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180612ee96034913960400191505060405180910390fd5b611d2d610b2d565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634b2ba0dd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9557600080fd5b505afa158015611da9573d6000803e3d6000fd5b505050506040513d6020811015611dbf57600080fd5b810190808051906020019092919050505014611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180612dd06034913960400191505060405180910390fd5b7f7845d5aa74cc410e35571258d954f23b82276e160fe8c188fa80566580f279cc611e4f611319565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612f99602e913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561204157600080fd5b505afa158015612055573d6000803e3d6000fd5b505050506040513d602081101561206b57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561212757600080fd5b505af115801561213b573d6000803e3d6000fd5b505050506040513d602081101561215157600080fd5b8101908080519060200190929190505050505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612f4a602a913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612257612370565b73ffffffffffffffffffffffffffffffffffffffff16146122c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806130b86029913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0bae748e6d38d2b1532af619519837d91d74845ad693f6f229677b4ac20b2d5061232c611343565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061301a6023913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612484576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e5c6021913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600083831115829061261c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125e15780820151818401526020810190506125c6565b50505050905090810190601f16801561260e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126735761266e83826128aa565b61281d565b6126df81604051806060016040528060258152602001612dab60259139600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256f9092919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061277481600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282290919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b505050565b6000808284019050838110156128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561294d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d5953543a206275726e2066726f6d20746865207a65726f206164647265737381525060200191505060405180910390fd5b6129b981604051806060016040528060218152602001612ff960219139600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256f9092919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a1181600454612d6090919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38173ffffffffffffffffffffffffffffffffffffffff167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7826040518082815260200191505060405180910390a25050565b600080831415612ae25760009050612b4f565b6000828402905082848281612af357fe5b0414612b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612ec86021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4d5953543a206d696e7420746f20746865207a65726f2061646472657373000081525060200191505060405180910390fd5b612c0d8160045461282290919063ffffffff16565b600481905550612c6581600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282290919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe826040518082815260200191505060405180910390a28173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000612da283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061256f565b90509291505056fe4d5953543a207472616e7366657220616d6f756e7420657863656564732062616c616e63654d5953543a2075706772616465206167656e742073686f756c64206b6e6f7720746f6b656e277320746f74616c20737570706c794d5953543a206f6e6c792061206d61737465722063616e2064657369676e61746520746865206e657874206167656e746f6e6c79206f726967696e616c20746f6b656e2063616e2063616c6c207570677261646546726f6d4d5953543a20617070726f766520746f20746865207a65726f20616464726573734d5953543a207472616e736665722066726f6d20746865207a65726f20616464726573734d5953543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d5953543a206167656e742073686f756c6420696d706c656d656e742049557067726164654167656e7420696e746572666163654d5953543a206f6e6c792061206d61737465722063616e207365742066756e64732064657374696e6174696f6e4d5953543a2075706772616465206d61737465722063616e2774206265207a65726f20616464726573734d5953543a20746f6b656e206973206e6f7420696e20757067726164696e672073746174654d5953543a2066756e64732064657374696e6174696f6e2063616e2774206265207a65726f20616464726565737363616e206e6f74206d696e74206d6f726520746f6b656e73207468616e20696e206f726967696e616c20636f6e74726163744d5953543a206275726e20616d6f756e7420657863656564732062616c616e63654d5953543a20617070726f76652066726f6d20746865207a65726f20616464726573734d5953543a2075706772616465206167656e742063616e2774206265207a65726f20616464726573734d5953543a2075706772616461626c6520616d6f756e742073686f756c64206265206d6f7265207468616e203045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4d5953543a206f6e6c792075706772616465206d61737465722063616e20736574206e6577206f6e65a2646970667358221220e393b4a13817dcc90ba046c1b73b9a8491bfa27bf58bffe6f45686907c1e2a5964736f6c634300060b0033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429000000000000000000000000a645264c5603e96c3b0b078cdab68733794b0a71

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

000000000000000000000000a645264c5603e96c3b0b078cdab68733794b0a71

-----Decoded View---------------
Arg [0] : originalToken (address): 0xa645264C5603E96c3b0B078cdab68733794B0A71

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a645264c5603e96c3b0b078cdab68733794b0a71


Deployed ByteCode Sourcemap

15166:12319:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16276:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18707:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22737:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18033:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26316:393;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20257:723;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16583:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16369:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16428:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18874:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18463:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23865:696;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22849:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23577:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23474:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15764:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18149:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22963:428;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16778:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25682:346;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16324:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19100:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18292:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23687:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19448:682;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24934:740;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18554:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26973:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26776:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24569:357;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16276:41;;;;;;;;;;;;;;;;;;;:::o;18707:159::-;18781:4;18798:38;18807:12;:10;:12::i;:::-;18821:7;18830:5;18798:8;:38::i;:::-;18854:4;18847:11;;18707:159;;;;:::o;22737:104::-;22792:7;22819:14;22812:21;;22737:104;:::o;18033:108::-;18094:7;18121:12;;18114:19;;18033:108;:::o;26316:393::-;26410:14;;;;;;;;;;;26395:29;;:12;:10;:12::i;:::-;:29;;;26387:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:1;26493:28;;:14;:28;;;;26485:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26605:14;26585:17;;:34;;;;;;;;;;;;;;;;;;26686:14;26635:66;;26667:17;;;;;;;;;;;26635:66;;;;;;;;;;;;26316:393;:::o;20257:723::-;20355:4;20482:1;20464:20;;:6;:20;;;;20456:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20536:15;20554:12;:10;:12::i;:::-;20536:30;;20713:7;20703:17;;:6;:17;;;;:64;;;;;20764:2;20724:11;:19;20736:6;20724:19;;;;;;;;;;;;;;;:28;20744:7;20724:28;;;;;;;;;;;;;;;;:43;;20703:64;20699:207;;;20784:110;20793:6;20801:7;20810:83;20843:6;20810:83;;;;;;;;;;;;;;;;;:11;:19;20822:6;20810:19;;;;;;;;;;;;;;;:28;20830:7;20810:28;;;;;;;;;;;;;;;;:32;;:83;;;;;:::i;:::-;20784:8;:110::i;:::-;20699:207;20918:32;20924:6;20932:9;20943:6;20918:5;:32::i;:::-;20968:4;20961:11;;;20257:723;;;;;:::o;16583:108::-;16625:66;16583:108;;;:::o;16369:35::-;16402:2;16369:35;:::o;16428:41::-;;;:::o;18874:218::-;18962:4;18979:83;18988:12;:10;:12::i;:::-;19002:7;19011:50;19050:10;19011:11;:25;19023:12;:10;:12::i;:::-;19011:25;;;;;;;;;;;;;;;:34;19037:7;19011:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18979:8;:83::i;:::-;19080:4;19073:11;;18874:218;;;;:::o;18463:83::-;18511:27;18517:12;:10;:12::i;:::-;18531:6;18511:5;:27::i;:::-;18463:83;:::o;23865:696::-;23916:18;23937:17;:15;:17::i;:::-;23916:38;;23982:27;23973:36;;;;;;;;:5;:36;;;;;;;;;:71;;;;24022:22;24013:31;;;;;;;;:5;:31;;;;;;;;;23973:71;23965:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24117:1;24107:6;:11;;24099:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24181:14;24198:12;:10;:12::i;:::-;24181:29;;24262:21;24268:6;24276;24262:5;:21::i;:::-;24367:26;24386:6;24367:14;;:18;;:26;;;;:::i;:::-;24350:14;:43;;;;24457:13;;;;;;;;;;;:25;;;24483:6;24491;24457:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24522:6;24514:39;;;24530:14;:12;:14::i;:::-;24546:6;24514:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;23865:696;;;:::o;22849:106::-;22905:7;22932:15;22925:22;;22849:106;:::o;23577:102::-;23622:7;23657:13;;;;;;;;;;;23642:29;;23577:102;:::o;23474:95::-;23520:7;23547:14;;;;;;;;;;;23540:21;;23474:95;:::o;15764:51::-;15811:4;15764:51;:::o;18149:135::-;18227:7;18254:9;:22;18264:11;18254:22;;;;;;;;;;;;;;;;18247:29;;18149:135;;;:::o;22963:428::-;23067:15;:13;:15::i;:::-;23053:29;;:10;:29;;;23045:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23211:43;23217:8;23227:26;15751:4;23227:6;:10;;:26;;;;:::i;:::-;23211:5;:43::i;:::-;23292:36;15751:4;23292:16;:14;:16::i;:::-;:20;;:36;;;;:::i;:::-;23275:13;:11;:13::i;:::-;:53;;23267:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22963:428;;:::o;16778:38::-;;;;;;;;;;;;;;;;;:::o;25682:346::-;25729:12;25791:4;25757:39;;25765:13;;;;;;;;;;;25757:39;;;25754:266;;;25805:28;25798:35;;;;25754:266;25870:1;25852:14;;:19;25849:171;;;25880:27;25873:34;;;;25849:171;25943:1;25926:13;:11;:13::i;:::-;:18;25923:97;;;25953:22;25946:29;;;;25923:97;25998:22;25991:29;;25682:346;;:::o;16324:38::-;;;;;;;;;;;;;;;;;;;:::o;19100:269::-;19193:4;19210:129;19219:12;:10;:12::i;:::-;19233:7;19242:96;19281:15;19242:96;;;;;;;;;;;;;;;;;:11;:25;19254:12;:10;:12::i;:::-;19242:25;;;;;;;;;;;;;;;:34;19268:7;19242:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19210:8;:129::i;:::-;19357:4;19350:11;;19100:269;;;;:::o;18292:163::-;18370:4;18387:38;18393:12;:10;:12::i;:::-;18407:9;18418:6;18387:5;:38::i;:::-;18443:4;18436:11;;18292:163;;;;:::o;23687:95::-;23733:7;23760:14;;23753:21;;23687:95;:::o;19448:682::-;19601:15;19589:8;:27;;19581:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19652:14;19757:16;16625:66;19813:15;;19830:6;19838:7;19847:5;19854:6;:14;19861:6;19854:14;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;19872:8;19802:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19792:90;;;;;;19693:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19669:239;;;;;;19652:256;;19919:24;19946:26;19956:6;19964:1;19967;19970;19946:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19919:53;;20019:1;19991:30;;:16;:30;;;;:60;;;;;20045:6;20025:26;;:16;:26;;;19991:60;19983:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20090:32;20099:6;20107:7;20116:5;20090:8;:32::i;:::-;19448:682;;;;;;;;;:::o;24934:740::-;25017:14;;;;;;;;;;;25002:29;;:12;:10;:12::i;:::-;:29;;;24994:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25120:3;25103:21;;:5;:21;;;;25095:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25210:22;25189:43;;;;;;;;:17;:15;:17::i;:::-;:43;;;;;;;;;;25181:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25311:5;25281:13;;:36;;;;;;;;;;;;;;;;;;25336:13;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25328:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25547:13;:11;:13::i;:::-;25513;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:47;25505:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25635:31;25651:14;:12;:14::i;:::-;25635:31;;;;;;;;;;;;;;;;;;;;;;24934:740;:::o;18554:145::-;18636:7;18663:11;:19;18675:6;18663:19;;;;;;;;;;;;;;;:28;18683:7;18663:28;;;;;;;;;;;;;;;;18656:35;;18554:145;;;;:::o;26973:278::-;27064:1;27035:31;;:17;;;;;;;;;;;:31;;;;27027:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27128:14;27152:5;27145:23;;;27177:4;27145:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27128:55;;27201:5;27194:22;;;27217:17;;;;;;;;;;;27236:6;27194:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26973:278;;:::o;26776:104::-;26828:7;26855:17;;;;;;;;;;;26848:24;;26776:104;:::o;24569:357::-;24677:3;24649:32;;:16;:32;;;;24641:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24763:14;;;;;;;;;;;24747:30;;:12;:10;:12::i;:::-;:30;;;24739:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24851:16;24834:14;;:33;;;;;;;;;;;;;;;;;;24885;24902:15;:13;:15::i;:::-;24885:33;;;;;;;;;;;;;;;;;;;;;;24569:357;:::o;14812:106::-;14865:15;14900:10;14893:17;;14812:106;:::o;22330:337::-;22442:1;22424:20;;:6;:20;;;;22416:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22522:1;22503:21;;:7;:21;;;;22495:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22606:5;22575:11;:19;22587:6;22575:19;;;;;;;;;;;;;;;:28;22595:7;22575:28;;;;;;;;;;;;;;;:36;;;;22644:7;22627:32;;22636:6;22627:32;;;22653:5;22627:32;;;;;;;;;;;;;;;;;;22330:337;;;:::o;5063:192::-;5149:7;5182:1;5177;:6;;5185:12;5169:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5209:9;5225:1;5221;:5;5209:17;;5246:1;5239:8;;;5063:192;;;;;:::o;21902:420::-;22049:1;22035:16;;:2;:16;;;22031:89;;;22068:19;22074:4;22080:6;22068:5;:19::i;:::-;22102:7;;22031:89;22150:68;22170:6;22150:68;;;;;;;;;;;;;;;;;:9;:15;22160:4;22150:15;;;;;;;;;;;;;;;;:19;;:68;;;;;:::i;:::-;22132:9;:15;22142:4;22132:15;;;;;;;;;;;;;;;:86;;;;22245:25;22263:6;22245:9;:13;22255:2;22245:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;22229:9;:13;22239:2;22229:13;;;;;;;;;;;;;;;:41;;;;22303:2;22288:26;;22297:4;22288:26;;;22307:6;22288:26;;;;;;;;;;;;;;;;;;21902:420;;;;:::o;4160:181::-;4218:7;4238:9;4254:1;4250;:5;4238:17;;4279:1;4274;:6;;4266:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4332:1;4325:8;;;4160:181;;;;:::o;21490:404::-;21579:1;21563:18;;:4;:18;;;;21555:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21684:64;21704:6;21684:64;;;;;;;;;;;;;;;;;:9;:15;21694:4;21684:15;;;;;;;;;;;;;;;;:19;;:64;;;;;:::i;:::-;21666:9;:15;21676:4;21666:15;;;;;;;;;;;;;;;:82;;;;21774:24;21791:6;21774:12;;:16;;:24;;;;:::i;:::-;21759:12;:39;;;;21839:1;21816:34;;21825:4;21816:34;;;21843:6;21816:34;;;;;;;;;;;;;;;;;;21873:4;21866:20;;;21879:6;21866:20;;;;;;;;;;;;;;;;;;21490:404;;:::o;5514:471::-;5572:7;5822:1;5817;:6;5813:47;;;5847:1;5840:8;;;;5813:47;5872:9;5888:1;5884;:5;5872:17;;5917:1;5912;5908;:5;;;;;;:10;5900:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5976:1;5969:8;;;5514:471;;;;;:::o;21105:377::-;21198:1;21180:20;;:6;:20;;;;21172:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21298:24;21315:6;21298:12;;:16;;:24;;;;:::i;:::-;21283:12;:39;;;;21353:29;21375:6;21353:9;:17;21363:6;21353:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;21333:9;:17;21343:6;21333:17;;;;;;;;;;;;;;;:49;;;;21407:6;21400:22;;;21415:6;21400:22;;;;;;;;;;;;;;;;;;21459:6;21438:36;;21455:1;21438:36;;;21467:6;21438:36;;;;;;;;;;;;;;;;;;21105:377;;:::o;4624:136::-;4682:7;4709:43;4713:1;4716;4709:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4702:50;;4624:136;;;;:::o

Swarm Source

ipfs://e393b4a13817dcc90ba046c1b73b9a8491bfa27bf58bffe6f45686907c1e2a59

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.