ETH Price: $3,150.68 (+0.99%)
Gas: 2 Gwei

Token

Burn (ASH)
 

Overview

Max Total Supply

2,344.469001225784067822 ASH

Holders

84

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3.426937900939139078 ASH

Value
$0.00
0xb4d5c4f0567d4c91d24dbe1dcc95541c28e5672a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ASH

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-12
*/

// File: contracts\gsn\Context.sol

pragma solidity ^0.5.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {

    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

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

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

}

// File: contracts\access\Ownable.sol

pragma solidity ^0.5.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {

    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();

        _owner = msgSender;

        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));

        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");

        emit OwnershipTransferred(_owner, newOwner);

        _owner = newOwner;
    }

}

// File: contracts\libs\SafeMath.sol

pragma solidity ^0.5.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, 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) {
        // 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) {
        require(b > 0, "SafeMath: division by zero");

        return a / b;
    }

    /**
     * @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) {
        require(b > 0, "SafeMath: modulo by zero");

        return a % b;
    }

}

// File: contracts\token\erc20\IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
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\token\erc20\ERC20.sol

pragma solidity ^0.5.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20Mintable}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {

    using SafeMath for uint256;

    string private _name;

    string private _symbol;

    uint8 private _decimals;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    /**
     * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of
     * these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);

        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);

        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount);
        _totalSupply = _totalSupply.sub(amount);

        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount));
    }

}

// File: contracts\libs\RealMath.sol

pragma solidity ^0.5.0;

/**
 * Reference: https://github.com/balancer-labs/balancer-core/blob/master/contracts/BNum.sol
 */

library RealMath {

    uint256 private constant BONE           = 10 ** 18;
    uint256 private constant MIN_BPOW_BASE  = 1 wei;
    uint256 private constant MAX_BPOW_BASE  = (2 * BONE) - 1 wei;
    uint256 private constant BPOW_PRECISION = BONE / 10 ** 10;

    /**
     * @dev 
     */
    function rtoi(uint256 a)
        internal
        pure 
        returns (uint256)
    {
        return a / BONE;
    }

    /**
     * @dev 
     */
    function rfloor(uint256 a)
        internal
        pure
        returns (uint256)
    {
        return rtoi(a) * BONE;
    }

    /**
     * @dev 
     */
    function radd(uint256 a, uint256 b)
        internal
        pure
        returns (uint256)
    {
        uint256 c = a + b;

        require(c >= a, "ERR_ADD_OVERFLOW");
        
        return c;
    }

    /**
     * @dev 
     */
    function rsub(uint256 a, uint256 b)
        internal
        pure
        returns (uint256)
    {
        (uint256 c, bool flag) = rsubSign(a, b);

        require(!flag, "ERR_SUB_UNDERFLOW");

        return c;
    }

    /**
     * @dev 
     */
    function rsubSign(uint256 a, uint256 b)
        internal
        pure
        returns (uint256, bool)
    {
        if (a >= b) {
            return (a - b, false);

        } else {
            return (b - a, true);
        }
    }

    /**
     * @dev 
     */
    function rmul(uint256 a, uint256 b)
        internal
        pure
        returns (uint256)
    {
        uint256 c0 = a * b;

        require(a == 0 || c0 / a == b, "ERR_MUL_OVERFLOW");

        uint256 c1 = c0 + (BONE / 2);

        require(c1 >= c0, "ERR_MUL_OVERFLOW");

        return c1 / BONE;
    }

    /**
     * @dev 
     */
    function rdiv(uint256 a, uint256 b)
        internal
        pure
        returns (uint256)
    {
        require(b != 0, "ERR_DIV_ZERO");

        uint256 c0 = a * BONE;

        require(a == 0 || c0 / a == BONE, "ERR_DIV_INTERNAL");

        uint256 c1 = c0 + (b / 2);

        require(c1 >= c0, "ERR_DIV_INTERNAL");

        return c1 / b;
    }

    /**
     * @dev 
     */
    function rpowi(uint256 a, uint256 n)
        internal
        pure
        returns (uint256)
    {
        uint256 z = n % 2 != 0 ? a : BONE;

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

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

        return z;
    }

    /**
     * @dev Computes b^(e.w) by splitting it into (b^e)*(b^0.w).
     * Use `rpowi` for `b^e` and `rpowK` for k iterations of approximation of b^0.w
     */
    function rpow(uint256 base, uint256 exp)
        internal
        pure
        returns (uint256)
    {
        require(base >= MIN_BPOW_BASE, "ERR_BPOW_BASE_TOO_LOW");
        require(base <= MAX_BPOW_BASE, "ERR_BPOW_BASE_TOO_HIGH");

        uint256 whole = rfloor(exp);   
        uint256 remain = rsub(exp, whole);

        uint256 wholePow = rpowi(base, rtoi(whole));

        if (remain == 0) {
            return wholePow;
        }

        uint256 partialResult = rpowApprox(base, remain, BPOW_PRECISION);

        return rmul(wholePow, partialResult);
    }

    /**
     * @dev 
     */
    function rpowApprox(uint256 base, uint256 exp, uint256 precision)
        internal
        pure
        returns (uint256)
    {
        (uint256 x, bool xneg) = rsubSign(base, BONE);

        uint256 a = exp;
        uint256 term = BONE;
        uint256 sum = term;

        bool negative = false;

        // term(k) = numer / denom 
        //         = (product(a - i - 1, i = 1--> k) * x ^ k) / (k!)
        // Each iteration, multiply previous term by (a - (k - 1)) * x / k
        // continue until term is less than precision
        for (uint256 i = 1; term >= precision; i++) {
            uint256 bigK = i * BONE;

            (uint256 c, bool cneg) = rsubSign(a, rsub(bigK, BONE));

            term = rmul(term, rmul(c, x));
            term = rdiv(term, bigK);

            if (term == 0) break;

            if (xneg) negative = !negative;
            if (cneg) negative = !negative;

            if (negative) {
                sum = rsub(sum, term);

            } else {
                sum = radd(sum, term);
            }
        }

        return sum;
    }

}

// File: contracts\libs\Address.sol

pragma solidity ^0.5.0;

/**
 * @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 Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

}

// File: contracts\pak\ICollection.sol

pragma solidity ^0.5.0;

interface ICollection {

    // ERC721
    function transferFrom(address from, address to, uint256 tokenId) external;

    // ERC1155
    function safeTransferFrom(address from, address to, uint256 tokenId, uint256 amount, bytes calldata data) external;

}

// File: contracts\pak\ASH.sol

pragma solidity ^0.5.0;






contract ASH is Ownable, ERC20 {

    using RealMath for uint256;
    using Address for address;

    bytes4 private constant _ERC1155_RECEIVED = 0xf23a6e61;

    event CollectionWhitelist(address collection, bool status);
    event AssetWhitelist(address collection, uint256 assetId, bool status);

    event CollectionBlacklist(address collection, bool status);
    event AssetBlacklist(address collection, uint256 assetId, bool status);

    event Swapped(address collection, uint256 assetId, address account, uint256 amount, bool isWhitelist, bool isERC721);

    // Mapping "collection" whitelist
    mapping(address => bool) private _collectionWhitelist;

    // Mapping "asset" whitelist
    mapping(address => mapping(uint256 => bool)) private _assetWhitelist;

    // Mapping "collection" blacklist
    mapping(address => bool) private _collectionBlacklist;

    // Mapping "asset" blacklist
    mapping(address => mapping(uint256 => bool)) private _assetBlacklist;

    bool public isStarted = false;

    bool public isERC721Paused = false;
    bool public isERC1155Paused = true;

    /**
     * @dev Throws if NFT swapping does not start yet
     */
    modifier started() {
        require(isStarted, "ASH: NFT swapping does not start yet");
        _;
    }

    /**
     * @dev Throws if collection or asset is in blacklist
     */
    modifier notInBlacklist(address collection, uint256 assetId) {
        require(!_collectionBlacklist[collection] && !_assetBlacklist[collection][assetId], "ASH: collection or asset is in blacklist");
        _;
    }

    /**
     * @dev Initializes the contract settings
     */
    constructor(string memory name, string memory symbol)
        public
        ERC20(name, symbol, 18)
    {}

    /**
     * @dev Starts to allow NFT swapping
     */
    function start()
        public
        onlyOwner
    {
        isStarted = true;
    }

    /**
     * @dev Pauses NFT (everything) swapping
     */
    function pause(bool erc721)
        public
        onlyOwner
    {
        if (erc721) {
            isERC721Paused = true;

        } else {
            isERC1155Paused = true;
        }
    }

    /**
     * @dev Resumes NFT (everything) swapping
     */
    function resume(bool erc721)
        public
        onlyOwner
    {
        if (erc721) {
            isERC721Paused = false;

        } else {
            isERC1155Paused = false;
        }
    }

    /**
     * @dev Adds or removes collections in whitelist
     */
    function updateWhitelist(address[] memory collections, bool status)
        public
        onlyOwner
    {
        uint256 length = collections.length;

        for (uint256 i = 0; i < length; i++) {
            address collection = collections[i];

            if (_collectionWhitelist[collection] != status) {
                _collectionWhitelist[collection] = status;

                emit CollectionWhitelist(collection, status);
            }
        }
    }

    /**
     * @dev Adds or removes assets in whitelist
     */
    function updateWhitelist(address[] memory collections, uint256[] memory assetIds, bool status)
        public
        onlyOwner
    {
        uint256 length = collections.length;

        require(length == assetIds.length, "ASH: length of arrays is not equal");

        for (uint256 i = 0; i < length; i++) {
            address collection = collections[i];
            uint256 assetId = assetIds[i];

            if (_assetWhitelist[collection][assetId] != status) {
                _assetWhitelist[collection][assetId] = status;

                emit AssetWhitelist(collection, assetId, status);
            }
        }
    }

    /**
      * @dev Returns true if collection is in whitelist
      */
    function isWhitelist(address collection)
        public
        view
        returns (bool)
    {
        return _collectionWhitelist[collection];
    }

    /**
      * @dev Returns true if asset is in whitelist
      */
    function isWhitelist(address collection, uint256 assetId)
        public
        view
        returns (bool)
    {
        return _assetWhitelist[collection][assetId];
    }

    /**
     * @dev Adds or removes collections in blacklist
     */
    function updateBlacklist(address[] memory collections, bool status)
        public
        onlyOwner
    {
        uint256 length = collections.length;

        for (uint256 i = 0; i < length; i++) {
            address collection = collections[i];

            if (_collectionBlacklist[collection] != status) {
                _collectionBlacklist[collection] = status;

                emit CollectionBlacklist(collection, status);
            }
        }
    }

    /**
     * @dev Adds or removes assets in blacklist
     */
    function updateBlacklist(address[] memory collections, uint256[] memory assetIds, bool status)
        public
        onlyOwner
    {
        uint256 length = collections.length;

        require(length == assetIds.length, "ASH: length of arrays is not equal");

        for (uint256 i = 0; i < length; i++) {
            address collection = collections[i];
            uint256 assetId = assetIds[i];

            if (_assetBlacklist[collection][assetId] != status) {
                _assetBlacklist[collection][assetId] = status;

                emit AssetBlacklist(collection, assetId, status);
            }
        }
    }

    /**
      * @dev Returns true if collection is in blacklist
      */
    function isBlacklist(address collection)
        public
        view
        returns (bool)
    {
        return _collectionBlacklist[collection];
    }

    /**
      * @dev Returns true if asset is in blacklist
      */
    function isBlacklist(address collection, uint256 assetId)
        public
        view
        returns (bool)
    {
        return _assetBlacklist[collection][assetId];
    }

    /**
     * @dev Burns tokens with a specific `amount`
     */
    function burn(uint256 amount)
        public
    {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Calculates token amount that user will receive when burn
     */
    function calculateToken(address collection, uint256 assetId)
        public
        view
        returns (bool, uint256)
    {
        bool whitelist = false;

        // Checks if collection or asset in whitelist
        if (_collectionWhitelist[collection] || _assetWhitelist[collection][assetId]) {
            whitelist = true;
        }

        uint256 exp = totalSupply().rdiv(1000000 * (10 ** 18));

        uint256 multiplier = RealMath.rdiv(1, 2).rpow(exp);

        uint256 result;

        // Calculates token amount that will issue
        if (whitelist) {
            result = multiplier.rmul(1000 * (10 ** 18));

        } else {
            result = multiplier.rmul(multiplier).rmul(2 * (10 ** 18));
        }

        return (whitelist, result);
    }

    /**
     * @dev Issues ERC20 tokens
     */
    function _issueToken(address collection, uint256 assetId, address account, bool isERC721)
        private
    {
        (bool whitelist, uint256 amount) = calculateToken(collection, assetId);

        if (!whitelist) {
            if (isERC721) {
                require(!isERC721Paused, "ASH: ERC721 swapping paused");

            } else {
                require(!isERC1155Paused, "ASH: ERC1155 swapping paused");
            }
        }

        require(amount > 0, "ASH: amount is invalid");

        // Issues tokens
        _mint(account, amount);

        emit Swapped(collection, assetId, account, amount, whitelist, isERC721);
    }

    /**
     * @dev Swaps ERC721 to ERC20
     */
    function swapERC721(address collection, uint256 assetId)
        public
        started()
        notInBlacklist(collection, assetId)
    {
        address msgSender = _msgSender();

        require(!msgSender.isContract(), "ASH: caller is invalid");

        // Transfers ERC721 and lock in this smart contract
        ICollection(collection).transferFrom(msgSender, address(this), assetId);

        // Issues ERC20 tokens for caller
        _issueToken(collection, assetId, msgSender, true);
    }

    /**
     * @dev Swaps ERC1155 to ERC20
     */
    function swapERC1155(address collection, uint256 assetId)
        public
        started()
        notInBlacklist(collection, assetId)
    {
        address msgSender = _msgSender();

        require(!msgSender.isContract(), "ASH: caller is invalid");

        // Transfers ERC1155 and lock in this smart contract
        ICollection(collection).safeTransferFrom(msgSender, address(this), assetId, 1, "");

        // Issues ERC20 tokens for caller
        _issueToken(collection, assetId, msgSender, false);
    }

    function onERC1155Received(address operator, address from, uint256 id, uint256 value, bytes calldata data)
        external
        returns (bytes4)
    {
        return _ERC1155_RECEIVED;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"payable":false,"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":"collection","type":"address"},{"indexed":false,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"AssetBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"AssetWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"CollectionBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"CollectionWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isWhitelist","type":"bool"},{"indexed":false,"internalType":"bool","name":"isERC721","type":"bool"}],"name":"Swapped","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"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"calculateToken","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"isBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"isBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isERC1155Paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isERC721Paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"erc721","type":"bool"}],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"erc721","type":"bool"}],"name":"resume","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"start","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"swapERC1155","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"swapERC721","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"collections","type":"address[]"},{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateBlacklist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"collections","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateBlacklist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"collections","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"collections","type":"address[]"},{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052600b805462ffffff1916620100001790553480156200002257600080fd5b5060405162002aed38038062002aed833981810160405260408110156200004857600080fd5b81019080805160405193929190846401000000008211156200006957600080fd5b9083019060208201858111156200007f57600080fd5b82516401000000008111828201881017156200009a57600080fd5b82525081516020918201929091019080838360005b83811015620000c9578181015183820152602001620000af565b50505050905090810190601f168015620000f75780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011b57600080fd5b9083019060208201858111156200013157600080fd5b82516401000000008111828201881017156200014c57600080fd5b82525081516020918201929091019080838360005b838110156200017b57818101518382015260200162000161565b50505050905090810190601f168015620001a95780820380516001836020036101000a031916815260200191505b50604052505050818160126000620001c66200025b60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35082516200022590600190602086019062000260565b5081516200023b90600290602085019062000260565b506003805460ff191660ff92909216919091179055506200030292505050565b335b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002a357805160ff1916838001178555620002d3565b82800160010185558215620002d3579182015b82811115620002d3578251825591602001919060010190620002b6565b50620002e1929150620002e5565b5090565b6200025d91905b80821115620002e15760008155600101620002ec565b6127db80620003126000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638d77c9c61161011a578063bb0e69e8116100ad578063d9f9e9531161007c578063d9f9e95314610815578063dd62ed3e1461093a578063e15ef5d514610968578063f23a6e6114610987578063f2fde38b14610a37576101fb565b8063bb0e69e8146106fd578063be9a6555146107a0578063c683630d146107a8578063cb2cb645146107ce576101fb565b8063a56b60c6116100e9578063a56b60c6146105d6578063a9059cbb14610602578063aff177ca1461062e578063b36b0dd4146106d1576101fb565b80638d77c9c6146105765780638da5cb5b1461057e57806395d89b41146105a2578063a457c2d7146105aa576101fb565b8063313ce56711610192578063544736e611610161578063544736e614610514578063690e7dd81461051c57806370a0823114610548578063715018a61461056e576101fb565b8063313ce56714610487578063333e99db146104a557806339509351146104cb57806342966c68146104f7576101fb565b80630a40c99f116101ce5780630a40c99f146102e657806318160ddd1461031257806323b872dd1461032c57806329b37f9d14610362576101fb565b806302329a29146102005780630493e19f1461022157806306fdde031461023d578063095ea7b3146102ba575b600080fd5b61021f6004803603602081101561021657600080fd5b50351515610a5d565b005b610229610ae4565b604080519115158252519081900360200190f35b610245610af3565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027f578181015183820152602001610267565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610229600480360360408110156102d057600080fd5b506001600160a01b038135169060200135610b88565b610229600480360360408110156102fc57600080fd5b506001600160a01b038135169060200135610ba6565b61031a610bd1565b60408051918252519081900360200190f35b6102296004803603606081101561034257600080fd5b506001600160a01b03813581169160208101359091169060400135610bd7565b61021f6004803603606081101561037857600080fd5b810190602081018135600160201b81111561039257600080fd5b8201836020820111156103a457600080fd5b803590602001918460208302840111600160201b831117156103c557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561041457600080fd5b82018360208201111561042657600080fd5b803590602001918460208302840111600160201b8311171561044757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050503515159050610c4c565b61048f610dd4565b6040805160ff9092168252519081900360200190f35b610229600480360360208110156104bb57600080fd5b50356001600160a01b0316610ddd565b610229600480360360408110156104e157600080fd5b506001600160a01b038135169060200135610dfb565b61021f6004803603602081101561050d57600080fd5b5035610e4f565b610229610e60565b6102296004803603604081101561053257600080fd5b506001600160a01b038135169060200135610e69565b61031a6004803603602081101561055e57600080fd5b50356001600160a01b0316610e94565b61021f610eaf565b610229610f51565b610586610f5f565b604080516001600160a01b039092168252519081900360200190f35b610245610f6e565b610229600480360360408110156105c057600080fd5b506001600160a01b038135169060200135610fcc565b61021f600480360360408110156105ec57600080fd5b506001600160a01b038135169060200135611020565b6102296004803603604081101561061857600080fd5b506001600160a01b0381351690602001356111d3565b61021f6004803603604081101561064457600080fd5b810190602081018135600160201b81111561065e57600080fd5b82018360208201111561067057600080fd5b803590602001918460208302840111600160201b8311171561069157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505035151590506111e7565b61021f600480360360408110156106e757600080fd5b506001600160a01b038135169060200135611300565b61021f6004803603604081101561071357600080fd5b810190602081018135600160201b81111561072d57600080fd5b82018360208201111561073f57600080fd5b803590602001918460208302840111600160201b8311171561076057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505035151590506114c5565b61021f6115d8565b610229600480360360208110156107be57600080fd5b50356001600160a01b031661163f565b6107fa600480360360408110156107e457600080fd5b506001600160a01b03813516906020013561165d565b60408051921515835260208301919091528051918290030190f35b61021f6004803603606081101561082b57600080fd5b810190602081018135600160201b81111561084557600080fd5b82018360208201111561085757600080fd5b803590602001918460208302840111600160201b8311171561087857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108c757600080fd5b8201836020820111156108d957600080fd5b803590602001918460208302840111600160201b831117156108fa57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505050351515905061175d565b61031a6004803603604081101561095057600080fd5b506001600160a01b03813581169160200135166118df565b61021f6004803603602081101561097e57600080fd5b5035151561190a565b610a1a600480360360a081101561099d57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b8111156109dc57600080fd5b8201836020820111156109ee57600080fd5b803590602001918460018302840111600160201b83111715610a0f57600080fd5b509092509050611987565b604080516001600160e01b03199092168252519081900360200190f35b61021f60048036036020811015610a4d57600080fd5b50356001600160a01b0316611999565b610a65611a91565b6000546001600160a01b03908116911614610ab5576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b8015610acf57600b805461ff001916610100179055610ae1565b600b805462ff00001916620100001790555b50565b600b5462010000900460ff1681565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b7e5780601f10610b5357610100808354040283529160200191610b7e565b820191906000526020600020905b815481529060010190602001808311610b6157829003601f168201915b5050505050905090565b6000610b9c610b95611a91565b8484611a95565b5060015b92915050565b6001600160a01b03919091166000908152600a60209081526040808320938352929052205460ff1690565b60065490565b6000610be4848484611b81565b610c4284610bf0611a91565b6001600160a01b0387166000908152600560205260408120610c3d91879190610c17611a91565b6001600160a01b031681526020810191909152604001600020549063ffffffff611cc516565b611a95565b5060019392505050565b610c54611a91565b6000546001600160a01b03908116911614610ca4576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b825182518114610ce55760405162461bcd60e51b81526004018080602001828103825260228152602001806126d76022913960400191505060405180910390fd5b60005b81811015610dcd576000858281518110610cfe57fe5b602002602001015190506000858381518110610d1657fe5b6020908102919091018101516001600160a01b0384166000908152600a83526040808220838352909352919091205490915060ff16151585151514610dc3576001600160a01b0382166000818152600a60209081526040808320858452825291829020805489151560ff199091168117909155825193845290830184905282820152517e519b4877a829cbf128a39851a3e50b09698b68e659920156146d6ef95d6d499181900360600190a15b5050600101610ce8565b5050505050565b60035460ff1690565b6001600160a01b031660009081526009602052604090205460ff1690565b6000610b9c610e08611a91565b84610c3d8560056000610e19611a91565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611d2216565b610ae1610e5a611a91565b82611d83565b600b5460ff1681565b6001600160a01b03919091166000908152600860209081526040808320938352929052205460ff1690565b6001600160a01b031660009081526004602052604090205490565b610eb7611a91565b6000546001600160a01b03908116911614610f07576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600b54610100900460ff1681565b6000546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610b7e5780601f10610b5357610100808354040283529160200191610b7e565b6000610b9c610fd9611a91565b84610c3d8560056000610fea611a91565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611cc516565b600b5460ff166110615760405162461bcd60e51b81526004018080602001828103825260248152602001806127836024913960400191505060405180910390fd5b6001600160a01b0382166000908152600960205260409020548290829060ff161580156110b257506001600160a01b0382166000908152600a6020908152604080832084845290915290205460ff16155b6110ed5760405162461bcd60e51b81526004018080602001828103825260288152602001806126676028913960400191505060405180910390fd5b60006110f7611a91565b905061110b816001600160a01b0316611e65565b15611156576040805162461bcd60e51b81526020600482015260166024820152751054d20e8818d85b1b195c881a5cc81a5b9d985b1a5960521b604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018790529151918716916323b872dd9160648082019260009290919082900301818387803b1580156111ae57600080fd5b505af11580156111c2573d6000803e3d6000fd5b50505050610dcd8585836001611ea1565b6000610b9c6111e0611a91565b8484611b81565b6111ef611a91565b6000546001600160a01b0390811691161461123f576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b815160005b818110156112fa57600084828151811061125a57fe5b6020908102919091018101516001600160a01b0381166000908152600790925260409091205490915060ff161515841515146112f1576001600160a01b038116600081815260076020908152604091829020805460ff191688151590811790915582519384529083015280517f2f0da831afc833b77fe26ee6dbd22e381c6839714f9aa4f2ab6a546aed3df91b9281900390910190a15b50600101611244565b50505050565b600b5460ff166113415760405162461bcd60e51b81526004018080602001828103825260248152602001806127836024913960400191505060405180910390fd5b6001600160a01b0382166000908152600960205260409020548290829060ff1615801561139257506001600160a01b0382166000908152600a6020908152604080832084845290915290205460ff16155b6113cd5760405162461bcd60e51b81526004018080602001828103825260288152602001806126676028913960400191505060405180910390fd5b60006113d7611a91565b90506113eb816001600160a01b0316611e65565b15611436576040805162461bcd60e51b81526020600482015260166024820152751054d20e8818d85b1b195c881a5cc81a5b9d985b1a5960521b604482015290519081900360640190fd5b60408051637921219560e11b81526001600160a01b038381166004830152306024830152604482018790526001606483015260a06084830152600060a4830181905292519088169263f242432a9260e4808201939182900301818387803b1580156114a057600080fd5b505af11580156114b4573d6000803e3d6000fd5b50505050610dcd8585836000611ea1565b6114cd611a91565b6000546001600160a01b0390811691161461151d576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b815160005b818110156112fa57600084828151811061153857fe5b6020908102919091018101516001600160a01b0381166000908152600990925260409091205490915060ff161515841515146115cf576001600160a01b038116600081815260096020908152604091829020805460ff191688151590811790915582519384529083015280517f072563039beeec9a4201c29693354451b20f2ad1947277b16f6464fb0883b44f9281900390910190a15b50600101611522565b6115e0611a91565b6000546001600160a01b03908116911614611630576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b600b805460ff19166001179055565b6001600160a01b031660009081526007602052604090205460ff1690565b6001600160a01b0382166000908152600760205260408120548190819060ff16806116ab57506001600160a01b038516600090815260086020908152604080832087845290915290205460ff165b156116b4575060015b60006116d869d3c21bcecceda10000006116cc610bd1565b9063ffffffff61203e16565b905060006116f8826116ec6001600261203e565b9063ffffffff61214e16565b9050600083156117225761171b82683635c9adc5dea0000063ffffffff61225c16565b905061174d565b61174a671bc16d674ec8000061173e848063ffffffff61225c16565b9063ffffffff61225c16565b90505b92945091925050505b9250929050565b611765611a91565b6000546001600160a01b039081169116146117b5576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b8251825181146117f65760405162461bcd60e51b81526004018080602001828103825260228152602001806126d76022913960400191505060405180910390fd5b60005b81811015610dcd57600085828151811061180f57fe5b60200260200101519050600085838151811061182757fe5b6020908102919091018101516001600160a01b0384166000908152600883526040808220838352909352919091205490915060ff161515851515146118d5576001600160a01b0382166000818152600860209081526040808320858452825291829020805489151560ff199091168117909155825193845290830184905282820152517f06c99df21cd6d7c64c8accbefd46613a23a5047ba996bb4d2b3e5b7c5f4f9eae9181900360600190a15b50506001016117f9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611912611a91565b6000546001600160a01b03908116911614611962576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b801561197857600b805461ff0019169055610ae1565b600b805462ff00001916905550565b63f23a6e6160e01b9695505050505050565b6119a1611a91565b6000546001600160a01b039081169116146119f1576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b6001600160a01b038116611a365760405162461bcd60e51b815260040180806020018281038252602681526020018061268f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b038316611ada5760405162461bcd60e51b815260040180806020018281038252602481526020018061275f6024913960400191505060405180910390fd5b6001600160a01b038216611b1f5760405162461bcd60e51b81526004018080602001828103825260228152602001806126b56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611bc65760405162461bcd60e51b815260040180806020018281038252602581526020018061273a6025913960400191505060405180910390fd5b6001600160a01b038216611c0b5760405162461bcd60e51b81526004018080602001828103825260238152602001806126446023913960400191505060405180910390fd5b6001600160a01b038316600090815260046020526040902054611c34908263ffffffff611cc516565b6001600160a01b038085166000908152600460205260408082209390935590841681522054611c69908263ffffffff611d2216565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115611d1c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611d7c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611dc85760405162461bcd60e51b81526004018080602001828103825260218152602001806127196021913960400191505060405180910390fd5b6001600160a01b038216600090815260046020526040902054611df1908263ffffffff611cc516565b6001600160a01b038316600090815260046020526040902055600654611e1d908263ffffffff611cc516565b6006556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611e9957508115155b949350505050565b600080611eae868661165d565b9150915081611f7d578215611f1f57600b54610100900460ff1615611f1a576040805162461bcd60e51b815260206004820152601b60248201527f4153483a20455243373231207377617070696e67207061757365640000000000604482015290519081900360640190fd5b611f7d565b600b5462010000900460ff1615611f7d576040805162461bcd60e51b815260206004820152601c60248201527f4153483a2045524331313535207377617070696e672070617573656400000000604482015290519081900360640190fd5b60008111611fcb576040805162461bcd60e51b81526020600482015260166024820152751054d20e88185b5bdd5b9d081a5cc81a5b9d985b1a5960521b604482015290519081900360640190fd5b611fd5848261231c565b604080516001600160a01b0380891682526020820188905286168183015260608101839052831515608082015284151560a082015290517fc0dd17bd2247fd6fad0a397050d3638ce6732418a3383030efe164f0ad76e4439181900360c00190a1505050505050565b600081612081576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a764000083028315806120a95750670de0b6b3a76400008482816120a657fe5b04145b6120ed576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6002830481018181101561213b576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b83818161214457fe5b0495945050505050565b6000600183101561219e576040805162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b604482015290519081900360640190fd5b671bc16d674ec7ffff8311156121f4576040805162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b604482015290519081900360640190fd5b60006121ff8361240e565b9050600061220d8483612429565b905060006122238661221e8561248b565b612499565b905081612234579250610ba0915050565b600061224587846305f5e1006124f0565b9050612251828261225c565b979650505050505050565b600082820283158061227657508284828161227357fe5b04145b6122ba576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b2000081018181101561230d576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b670de0b6b3a764000081612144565b6001600160a01b038216612377576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60065461238a908263ffffffff611d2216565b6006556001600160a01b0382166000908152600460205260409020546123b6908263ffffffff611d2216565b6001600160a01b03831660008181526004602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000670de0b6b3a76400006124228361248b565b0292915050565b600080600061243885856125d4565b915091508015612483576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b670de0b6b3a7640000900490565b600080600283066124b257670de0b6b3a76400006124b4565b835b90506002830492505b8215611d7c576124cd848561225c565b935060028306156124e5576124e2818561225c565b90505b6002830492506124bd565b600080600061250786670de0b6b3a76400006125d4565b909250905084670de0b6b3a764000080600060015b8884106125c5576000670de0b6b3a7640000820290506000806125508861254b85670de0b6b3a7640000612429565b6125d4565b9150915061256787612562848d61225c565b61225c565b9650612573878461203e565b965086612582575050506125c5565b881561258c579315935b8015612596579315935b84156125ad576125a68688612429565b95506125ba565b6125b786886125f6565b95505b50505060010161251c565b50909998505050505050505050565b6000808284106125ea5750508082036000611756565b50508181036001611756565b600082820183811015611d7c576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fdfe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734153483a20636f6c6c656374696f6e206f7220617373657420697320696e20626c61636b6c6973744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734153483a206c656e677468206f6620617272617973206973206e6f7420657175616c4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734153483a204e4654207377617070696e6720646f6573206e6f7420737461727420796574a265627a7a72315820c809db31e0a2e01f9bc453f30e2b1d46c9c440f7b62be695e3872d845f578f4e64736f6c634300051100320000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044275726e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034153480000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638d77c9c61161011a578063bb0e69e8116100ad578063d9f9e9531161007c578063d9f9e95314610815578063dd62ed3e1461093a578063e15ef5d514610968578063f23a6e6114610987578063f2fde38b14610a37576101fb565b8063bb0e69e8146106fd578063be9a6555146107a0578063c683630d146107a8578063cb2cb645146107ce576101fb565b8063a56b60c6116100e9578063a56b60c6146105d6578063a9059cbb14610602578063aff177ca1461062e578063b36b0dd4146106d1576101fb565b80638d77c9c6146105765780638da5cb5b1461057e57806395d89b41146105a2578063a457c2d7146105aa576101fb565b8063313ce56711610192578063544736e611610161578063544736e614610514578063690e7dd81461051c57806370a0823114610548578063715018a61461056e576101fb565b8063313ce56714610487578063333e99db146104a557806339509351146104cb57806342966c68146104f7576101fb565b80630a40c99f116101ce5780630a40c99f146102e657806318160ddd1461031257806323b872dd1461032c57806329b37f9d14610362576101fb565b806302329a29146102005780630493e19f1461022157806306fdde031461023d578063095ea7b3146102ba575b600080fd5b61021f6004803603602081101561021657600080fd5b50351515610a5d565b005b610229610ae4565b604080519115158252519081900360200190f35b610245610af3565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027f578181015183820152602001610267565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610229600480360360408110156102d057600080fd5b506001600160a01b038135169060200135610b88565b610229600480360360408110156102fc57600080fd5b506001600160a01b038135169060200135610ba6565b61031a610bd1565b60408051918252519081900360200190f35b6102296004803603606081101561034257600080fd5b506001600160a01b03813581169160208101359091169060400135610bd7565b61021f6004803603606081101561037857600080fd5b810190602081018135600160201b81111561039257600080fd5b8201836020820111156103a457600080fd5b803590602001918460208302840111600160201b831117156103c557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561041457600080fd5b82018360208201111561042657600080fd5b803590602001918460208302840111600160201b8311171561044757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050503515159050610c4c565b61048f610dd4565b6040805160ff9092168252519081900360200190f35b610229600480360360208110156104bb57600080fd5b50356001600160a01b0316610ddd565b610229600480360360408110156104e157600080fd5b506001600160a01b038135169060200135610dfb565b61021f6004803603602081101561050d57600080fd5b5035610e4f565b610229610e60565b6102296004803603604081101561053257600080fd5b506001600160a01b038135169060200135610e69565b61031a6004803603602081101561055e57600080fd5b50356001600160a01b0316610e94565b61021f610eaf565b610229610f51565b610586610f5f565b604080516001600160a01b039092168252519081900360200190f35b610245610f6e565b610229600480360360408110156105c057600080fd5b506001600160a01b038135169060200135610fcc565b61021f600480360360408110156105ec57600080fd5b506001600160a01b038135169060200135611020565b6102296004803603604081101561061857600080fd5b506001600160a01b0381351690602001356111d3565b61021f6004803603604081101561064457600080fd5b810190602081018135600160201b81111561065e57600080fd5b82018360208201111561067057600080fd5b803590602001918460208302840111600160201b8311171561069157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505035151590506111e7565b61021f600480360360408110156106e757600080fd5b506001600160a01b038135169060200135611300565b61021f6004803603604081101561071357600080fd5b810190602081018135600160201b81111561072d57600080fd5b82018360208201111561073f57600080fd5b803590602001918460208302840111600160201b8311171561076057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505035151590506114c5565b61021f6115d8565b610229600480360360208110156107be57600080fd5b50356001600160a01b031661163f565b6107fa600480360360408110156107e457600080fd5b506001600160a01b03813516906020013561165d565b60408051921515835260208301919091528051918290030190f35b61021f6004803603606081101561082b57600080fd5b810190602081018135600160201b81111561084557600080fd5b82018360208201111561085757600080fd5b803590602001918460208302840111600160201b8311171561087857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108c757600080fd5b8201836020820111156108d957600080fd5b803590602001918460208302840111600160201b831117156108fa57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505050351515905061175d565b61031a6004803603604081101561095057600080fd5b506001600160a01b03813581169160200135166118df565b61021f6004803603602081101561097e57600080fd5b5035151561190a565b610a1a600480360360a081101561099d57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b8111156109dc57600080fd5b8201836020820111156109ee57600080fd5b803590602001918460018302840111600160201b83111715610a0f57600080fd5b509092509050611987565b604080516001600160e01b03199092168252519081900360200190f35b61021f60048036036020811015610a4d57600080fd5b50356001600160a01b0316611999565b610a65611a91565b6000546001600160a01b03908116911614610ab5576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b8015610acf57600b805461ff001916610100179055610ae1565b600b805462ff00001916620100001790555b50565b600b5462010000900460ff1681565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b7e5780601f10610b5357610100808354040283529160200191610b7e565b820191906000526020600020905b815481529060010190602001808311610b6157829003601f168201915b5050505050905090565b6000610b9c610b95611a91565b8484611a95565b5060015b92915050565b6001600160a01b03919091166000908152600a60209081526040808320938352929052205460ff1690565b60065490565b6000610be4848484611b81565b610c4284610bf0611a91565b6001600160a01b0387166000908152600560205260408120610c3d91879190610c17611a91565b6001600160a01b031681526020810191909152604001600020549063ffffffff611cc516565b611a95565b5060019392505050565b610c54611a91565b6000546001600160a01b03908116911614610ca4576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b825182518114610ce55760405162461bcd60e51b81526004018080602001828103825260228152602001806126d76022913960400191505060405180910390fd5b60005b81811015610dcd576000858281518110610cfe57fe5b602002602001015190506000858381518110610d1657fe5b6020908102919091018101516001600160a01b0384166000908152600a83526040808220838352909352919091205490915060ff16151585151514610dc3576001600160a01b0382166000818152600a60209081526040808320858452825291829020805489151560ff199091168117909155825193845290830184905282820152517e519b4877a829cbf128a39851a3e50b09698b68e659920156146d6ef95d6d499181900360600190a15b5050600101610ce8565b5050505050565b60035460ff1690565b6001600160a01b031660009081526009602052604090205460ff1690565b6000610b9c610e08611a91565b84610c3d8560056000610e19611a91565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611d2216565b610ae1610e5a611a91565b82611d83565b600b5460ff1681565b6001600160a01b03919091166000908152600860209081526040808320938352929052205460ff1690565b6001600160a01b031660009081526004602052604090205490565b610eb7611a91565b6000546001600160a01b03908116911614610f07576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600b54610100900460ff1681565b6000546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610b7e5780601f10610b5357610100808354040283529160200191610b7e565b6000610b9c610fd9611a91565b84610c3d8560056000610fea611a91565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611cc516565b600b5460ff166110615760405162461bcd60e51b81526004018080602001828103825260248152602001806127836024913960400191505060405180910390fd5b6001600160a01b0382166000908152600960205260409020548290829060ff161580156110b257506001600160a01b0382166000908152600a6020908152604080832084845290915290205460ff16155b6110ed5760405162461bcd60e51b81526004018080602001828103825260288152602001806126676028913960400191505060405180910390fd5b60006110f7611a91565b905061110b816001600160a01b0316611e65565b15611156576040805162461bcd60e51b81526020600482015260166024820152751054d20e8818d85b1b195c881a5cc81a5b9d985b1a5960521b604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018790529151918716916323b872dd9160648082019260009290919082900301818387803b1580156111ae57600080fd5b505af11580156111c2573d6000803e3d6000fd5b50505050610dcd8585836001611ea1565b6000610b9c6111e0611a91565b8484611b81565b6111ef611a91565b6000546001600160a01b0390811691161461123f576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b815160005b818110156112fa57600084828151811061125a57fe5b6020908102919091018101516001600160a01b0381166000908152600790925260409091205490915060ff161515841515146112f1576001600160a01b038116600081815260076020908152604091829020805460ff191688151590811790915582519384529083015280517f2f0da831afc833b77fe26ee6dbd22e381c6839714f9aa4f2ab6a546aed3df91b9281900390910190a15b50600101611244565b50505050565b600b5460ff166113415760405162461bcd60e51b81526004018080602001828103825260248152602001806127836024913960400191505060405180910390fd5b6001600160a01b0382166000908152600960205260409020548290829060ff1615801561139257506001600160a01b0382166000908152600a6020908152604080832084845290915290205460ff16155b6113cd5760405162461bcd60e51b81526004018080602001828103825260288152602001806126676028913960400191505060405180910390fd5b60006113d7611a91565b90506113eb816001600160a01b0316611e65565b15611436576040805162461bcd60e51b81526020600482015260166024820152751054d20e8818d85b1b195c881a5cc81a5b9d985b1a5960521b604482015290519081900360640190fd5b60408051637921219560e11b81526001600160a01b038381166004830152306024830152604482018790526001606483015260a06084830152600060a4830181905292519088169263f242432a9260e4808201939182900301818387803b1580156114a057600080fd5b505af11580156114b4573d6000803e3d6000fd5b50505050610dcd8585836000611ea1565b6114cd611a91565b6000546001600160a01b0390811691161461151d576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b815160005b818110156112fa57600084828151811061153857fe5b6020908102919091018101516001600160a01b0381166000908152600990925260409091205490915060ff161515841515146115cf576001600160a01b038116600081815260096020908152604091829020805460ff191688151590811790915582519384529083015280517f072563039beeec9a4201c29693354451b20f2ad1947277b16f6464fb0883b44f9281900390910190a15b50600101611522565b6115e0611a91565b6000546001600160a01b03908116911614611630576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b600b805460ff19166001179055565b6001600160a01b031660009081526007602052604090205460ff1690565b6001600160a01b0382166000908152600760205260408120548190819060ff16806116ab57506001600160a01b038516600090815260086020908152604080832087845290915290205460ff165b156116b4575060015b60006116d869d3c21bcecceda10000006116cc610bd1565b9063ffffffff61203e16565b905060006116f8826116ec6001600261203e565b9063ffffffff61214e16565b9050600083156117225761171b82683635c9adc5dea0000063ffffffff61225c16565b905061174d565b61174a671bc16d674ec8000061173e848063ffffffff61225c16565b9063ffffffff61225c16565b90505b92945091925050505b9250929050565b611765611a91565b6000546001600160a01b039081169116146117b5576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b8251825181146117f65760405162461bcd60e51b81526004018080602001828103825260228152602001806126d76022913960400191505060405180910390fd5b60005b81811015610dcd57600085828151811061180f57fe5b60200260200101519050600085838151811061182757fe5b6020908102919091018101516001600160a01b0384166000908152600883526040808220838352909352919091205490915060ff161515851515146118d5576001600160a01b0382166000818152600860209081526040808320858452825291829020805489151560ff199091168117909155825193845290830184905282820152517f06c99df21cd6d7c64c8accbefd46613a23a5047ba996bb4d2b3e5b7c5f4f9eae9181900360600190a15b50506001016117f9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611912611a91565b6000546001600160a01b03908116911614611962576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b801561197857600b805461ff0019169055610ae1565b600b805462ff00001916905550565b63f23a6e6160e01b9695505050505050565b6119a1611a91565b6000546001600160a01b039081169116146119f1576040805162461bcd60e51b815260206004820181905260248201526000805160206126f9833981519152604482015290519081900360640190fd5b6001600160a01b038116611a365760405162461bcd60e51b815260040180806020018281038252602681526020018061268f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b038316611ada5760405162461bcd60e51b815260040180806020018281038252602481526020018061275f6024913960400191505060405180910390fd5b6001600160a01b038216611b1f5760405162461bcd60e51b81526004018080602001828103825260228152602001806126b56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611bc65760405162461bcd60e51b815260040180806020018281038252602581526020018061273a6025913960400191505060405180910390fd5b6001600160a01b038216611c0b5760405162461bcd60e51b81526004018080602001828103825260238152602001806126446023913960400191505060405180910390fd5b6001600160a01b038316600090815260046020526040902054611c34908263ffffffff611cc516565b6001600160a01b038085166000908152600460205260408082209390935590841681522054611c69908263ffffffff611d2216565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115611d1c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611d7c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611dc85760405162461bcd60e51b81526004018080602001828103825260218152602001806127196021913960400191505060405180910390fd5b6001600160a01b038216600090815260046020526040902054611df1908263ffffffff611cc516565b6001600160a01b038316600090815260046020526040902055600654611e1d908263ffffffff611cc516565b6006556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611e9957508115155b949350505050565b600080611eae868661165d565b9150915081611f7d578215611f1f57600b54610100900460ff1615611f1a576040805162461bcd60e51b815260206004820152601b60248201527f4153483a20455243373231207377617070696e67207061757365640000000000604482015290519081900360640190fd5b611f7d565b600b5462010000900460ff1615611f7d576040805162461bcd60e51b815260206004820152601c60248201527f4153483a2045524331313535207377617070696e672070617573656400000000604482015290519081900360640190fd5b60008111611fcb576040805162461bcd60e51b81526020600482015260166024820152751054d20e88185b5bdd5b9d081a5cc81a5b9d985b1a5960521b604482015290519081900360640190fd5b611fd5848261231c565b604080516001600160a01b0380891682526020820188905286168183015260608101839052831515608082015284151560a082015290517fc0dd17bd2247fd6fad0a397050d3638ce6732418a3383030efe164f0ad76e4439181900360c00190a1505050505050565b600081612081576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a764000083028315806120a95750670de0b6b3a76400008482816120a657fe5b04145b6120ed576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6002830481018181101561213b576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b83818161214457fe5b0495945050505050565b6000600183101561219e576040805162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b604482015290519081900360640190fd5b671bc16d674ec7ffff8311156121f4576040805162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b604482015290519081900360640190fd5b60006121ff8361240e565b9050600061220d8483612429565b905060006122238661221e8561248b565b612499565b905081612234579250610ba0915050565b600061224587846305f5e1006124f0565b9050612251828261225c565b979650505050505050565b600082820283158061227657508284828161227357fe5b04145b6122ba576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b2000081018181101561230d576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b670de0b6b3a764000081612144565b6001600160a01b038216612377576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60065461238a908263ffffffff611d2216565b6006556001600160a01b0382166000908152600460205260409020546123b6908263ffffffff611d2216565b6001600160a01b03831660008181526004602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000670de0b6b3a76400006124228361248b565b0292915050565b600080600061243885856125d4565b915091508015612483576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b670de0b6b3a7640000900490565b600080600283066124b257670de0b6b3a76400006124b4565b835b90506002830492505b8215611d7c576124cd848561225c565b935060028306156124e5576124e2818561225c565b90505b6002830492506124bd565b600080600061250786670de0b6b3a76400006125d4565b909250905084670de0b6b3a764000080600060015b8884106125c5576000670de0b6b3a7640000820290506000806125508861254b85670de0b6b3a7640000612429565b6125d4565b9150915061256787612562848d61225c565b61225c565b9650612573878461203e565b965086612582575050506125c5565b881561258c579315935b8015612596579315935b84156125ad576125a68688612429565b95506125ba565b6125b786886125f6565b95505b50505060010161251c565b50909998505050505050505050565b6000808284106125ea5750508082036000611756565b50508181036001611756565b600082820183811015611d7c576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fdfe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734153483a20636f6c6c656374696f6e206f7220617373657420697320696e20626c61636b6c6973744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734153483a206c656e677468206f6620617272617973206973206e6f7420657175616c4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734153483a204e4654207377617070696e6720646f6573206e6f7420737461727420796574a265627a7a72315820c809db31e0a2e01f9bc453f30e2b1d46c9c440f7b62be695e3872d845f578f4e64736f6c63430005110032

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044275726e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034153480000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Burn
Arg [1] : symbol (string): ASH

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 4275726e00000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 4153480000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

26135:9232:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26135:9232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28164:203;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28164:203:0;;;;:::i;:::-;;27221:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;11833:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11833:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13812:152;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13812:152:0;;;;;;;;:::i;32025:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;32025:179:0;;;;;;;;:::i;12833:91::-;;;:::i;:::-;;;;;;;;;;;;;;;;14436:260;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14436:260:0;;;;;;;;;;;;;;;;;:::i;31058:646::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31058:646:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31058:646:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31058:646:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31058:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31058:646:0;;;;;;;;-1:-1:-1;31058:646:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;31058:646:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31058:646:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31058:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31058:646:0;;-1:-1:-1;;;;31058:646:0;;;;-1:-1:-1;31058:646:0;:::i;12685:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31788:158;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31788:158:0;-1:-1:-1;;;;;31788:158:0;;:::i;15105:210::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15105:210:0;;;;;;;;:::i;32281:97::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32281:97:0;;:::i;27142:29::-;;;:::i;30246:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;30246:179:0;;;;;;;;:::i;12987:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12987:110:0;-1:-1:-1;;;;;12987:110:0;;:::i;2912:142::-;;;:::i;27180:34::-;;;:::i;2270:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2270:79:0;;;;;;;;;;;;;;12035:87;;;:::i;15818:220::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15818:220:0;;;;;;;;:::i;34051:514::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34051:514:0;;;;;;;;:::i;13310:158::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13310:158:0;;;;;;;;:::i;28726:478::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28726:478:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28726:478:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28726:478:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28726:478:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28726:478:0;;-1:-1:-1;;;;28726:478:0;;;;-1:-1:-1;28726:478:0;:::i;34627:528::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34627:528:0;;;;;;;;:::i;30505:478::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30505:478:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30505:478:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30505:478:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30505:478:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30505:478:0;;-1:-1:-1;;;;30505:478:0;;;;-1:-1:-1;30505:478:0;:::i;28000:92::-;;;:::i;30009:158::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30009:158:0;-1:-1:-1;;;;;30009:158:0;;:::i;32474:795::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;32474:795:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;29279:646;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29279:646:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;29279:646:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29279:646:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29279:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29279:646:0;;;;;;;;-1:-1:-1;29279:646:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;29279:646:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29279:646:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29279:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29279:646:0;;-1:-1:-1;;;;29279:646:0;;;;-1:-1:-1;29279:646:0;:::i;13531:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13531:134:0;;;;;;;;;;:::i;28440:206::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28440:206:0;;;;:::i;35163:199::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;35163:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;35163:199:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;35163:199:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;35163:199:0;;-1:-1:-1;35163:199:0;-1:-1:-1;35163:199:0;:::i;:::-;;;;-1:-1:-1;;;;;;35163:199:0;;;;;;;;;;;;;;3209:240;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3209:240:0;-1:-1:-1;;;;;3209:240:0;;:::i;28164:203::-;2492:12;:10;:12::i;:::-;2482:6;;-1:-1:-1;;;;;2482:6:0;;;:22;;;2474:67;;;;;-1:-1:-1;;;2474:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2474:67:0;;;;;;;;;;;;;;;28247:6;28243:117;;;28270:14;:21;;-1:-1:-1;;28270:21:0;;;;;28243:117;;;28326:15;:22;;-1:-1:-1;;28326:22:0;;;;;28243:117;28164:203;:::o;27221:34::-;;;;;;;;;:::o;11833:83::-;11903:5;11896:12;;;;;;;;-1:-1:-1;;11896:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11870:13;;11896:12;;11903:5;;11896:12;;11903:5;11896:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11833:83;:::o;13812:152::-;13878:4;13895:39;13904:12;:10;:12::i;:::-;13918:7;13927:6;13895:8;:39::i;:::-;-1:-1:-1;13952:4:0;13812:152;;;;;:::o;32025:179::-;-1:-1:-1;;;;;32160:27:0;;;;32131:4;32160:27;;;:15;:27;;;;;;;;:36;;;;;;;;;;;32025:179::o;12833:91::-;12904:12;;12833:91;:::o;14436:260::-;14525:4;14542:36;14552:6;14560:9;14571:6;14542:9;:36::i;:::-;14589:77;14598:6;14606:12;:10;:12::i;:::-;-1:-1:-1;;;;;14620:19:0;;;;;;:11;:19;;;;;:45;;14658:6;;14620:19;14640:12;:10;:12::i;:::-;-1:-1:-1;;;;;14620:33:0;;;;;;;;;;;;-1:-1:-1;14620:33:0;;;:45;:37;:45;:::i;:::-;14589:8;:77::i;:::-;-1:-1:-1;14684:4:0;14436:260;;;;;:::o;31058:646::-;2492:12;:10;:12::i;:::-;2482:6;;-1:-1:-1;;;;;2482:6:0;;;:22;;;2474:67;;;;;-1:-1:-1;;;2474:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2474:67:0;;;;;;;;;;;;;;;31221:18;;31270:15;;31260:25;;31252:72;;;;-1:-1:-1;;;31252:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31342:9;31337:360;31361:6;31357:1;:10;31337:360;;;31389:18;31410:11;31422:1;31410:14;;;;;;;;;;;;;;31389:35;;31439:15;31457:8;31466:1;31457:11;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31489:27:0;;;;;;:15;:27;;;;;;:36;;;;;;;;;;;31457:11;;-1:-1:-1;31489:36:0;;:46;;;;;;31485:201;;-1:-1:-1;;;;;31556:27:0;;;;;;:15;:27;;;;;;;;:36;;;;;;;;;:45;;;;;-1:-1:-1;;31556:45:0;;;;;;;;31627:43;;;;;;;;;;;;;;;;;;;;;;;;;31485:201;-1:-1:-1;;31369:3:0;;31337:360;;;;2552:1;31058:646;;;:::o;12685:83::-;12751:9;;;;12685:83;:::o;31788:158::-;-1:-1:-1;;;;;31906:32:0;31877:4;31906:32;;;:20;:32;;;;;;;;;31788:158::o;15105:210::-;15185:4;15202:83;15211:12;:10;:12::i;:::-;15225:7;15234:50;15273:10;15234:11;:25;15246:12;:10;:12::i;:::-;-1:-1:-1;;;;;15234:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;15234:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;32281:97::-;32343:27;32349:12;:10;:12::i;:::-;32363:6;32343:5;:27::i;27142:29::-;;;;;;:::o;30246:179::-;-1:-1:-1;;;;;30381:27:0;;;;30352:4;30381:27;;;:15;:27;;;;;;;;:36;;;;;;;;;;;30246:179::o;12987:110::-;-1:-1:-1;;;;;13071:18:0;13044:7;13071:18;;;:9;:18;;;;;;;12987:110::o;2912:142::-;2492:12;:10;:12::i;:::-;2482:6;;-1:-1:-1;;;;;2482:6:0;;;:22;;;2474:67;;;;;-1:-1:-1;;;2474:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2474:67:0;;;;;;;;;;;;;;;3011:1;2995:6;;2974:40;;-1:-1:-1;;;;;2995:6:0;;;;2974:40;;3011:1;;2974:40;3044:1;3027:19;;-1:-1:-1;;;;;;3027:19:0;;;2912:142::o;27180:34::-;;;;;;;;;:::o;2270:79::-;2308:7;2335:6;-1:-1:-1;;;;;2335:6:0;2270:79;:::o;12035:87::-;12107:7;12100:14;;;;;;;-1:-1:-1;;12100:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12074:13;;12100:14;;12107:7;;12100:14;;12107:7;12100:14;;;;;;;;;;;;;;;;;;;;;;;;15818:220;15903:4;15920:88;15929:12;:10;:12::i;:::-;15943:7;15952:55;15991:15;15952:11;:25;15964:12;:10;:12::i;:::-;-1:-1:-1;;;;;15952:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;15952:25:0;;;:34;;;;;;;;;;;:55;:38;:55;:::i;34051:514::-;27375:9;;;;27367:58;;;;-1:-1:-1;;;27367:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27611:32:0;;;;;;:20;:32;;;;;;34167:10;;34179:7;;27611:32;;27610:33;:74;;;;-1:-1:-1;;;;;;27648:27:0;;;;;;:15;:27;;;;;;;;:36;;;;;;;;;;;27647:37;27610:74;27602:127;;;;-1:-1:-1;;;27602:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34204:17;34224:12;:10;:12::i;:::-;34204:32;;34258:22;:9;-1:-1:-1;;;;;34258:20:0;;:22::i;:::-;34257:23;34249:58;;;;;-1:-1:-1;;;34249:58:0;;;;;;;;;;;;-1:-1:-1;;;34249:58:0;;;;;;;;;;;;;;;34381:71;;;-1:-1:-1;;;34381:71:0;;-1:-1:-1;;;;;34381:71:0;;;;;;;34437:4;34381:71;;;;;;;;;;;;:36;;;;;;:71;;;;;-1:-1:-1;;34381:71:0;;;;;;;;-1:-1:-1;34381:36:0;:71;;;5:2:-1;;;;30:1;27;20:12;5:2;34381:71:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34381:71:0;;;;34508:49;34520:10;34532:7;34541:9;34552:4;34508:11;:49::i;13310:158::-;13379:4;13396:42;13406:12;:10;:12::i;:::-;13420:9;13431:6;13396:9;:42::i;28726:478::-;2492:12;:10;:12::i;:::-;2482:6;;-1:-1:-1;;;;;2482:6:0;;;:22;;;2474:67;;;;;-1:-1:-1;;;2474:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2474:67:0;;;;;;;;;;;;;;;28862:18;;28845:14;28893:304;28917:6;28913:1;:10;28893:304;;;28945:18;28966:11;28978:1;28966:14;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29001:32:0;;;;;;:20;:32;;;;;;;;28966:14;;-1:-1:-1;29001:32:0;;:42;;;;;;28997:189;;-1:-1:-1;;;;;29064:32:0;;;;;;:20;:32;;;;;;;;;:41;;-1:-1:-1;;29064:41:0;;;;;;;;;;29131:39;;;;;;;;;;;;;;;;;;;;;28997:189;-1:-1:-1;28925:3:0;;28893:304;;;;2552:1;28726:478;;:::o;34627:528::-;27375:9;;;;27367:58;;;;-1:-1:-1;;;27367:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27611:32:0;;;;;;:20;:32;;;;;;34744:10;;34756:7;;27611:32;;27610:33;:74;;;;-1:-1:-1;;;;;;27648:27:0;;;;;;:15;:27;;;;;;;;:36;;;;;;;;;;;27647:37;27610:74;27602:127;;;;-1:-1:-1;;;27602:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34781:17;34801:12;:10;:12::i;:::-;34781:32;;34835:22;:9;-1:-1:-1;;;;;34835:20:0;;:22::i;:::-;34834:23;34826:58;;;;;-1:-1:-1;;;34826:58:0;;;;;;;;;;;;-1:-1:-1;;;34826:58:0;;;;;;;;;;;;;;;34959:82;;;-1:-1:-1;;;34959:82:0;;-1:-1:-1;;;;;34959:82:0;;;;;;;35019:4;34959:82;;;;;;;;;;35035:1;34959:82;;;;;;;;;-1:-1:-1;34959:82:0;;;;;;;;:40;;;;;;:82;;;;;;;;;;;-1:-1:-1;34959:40:0;:82;;;5:2:-1;;;;30:1;27;20:12;5:2;34959:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34959:82:0;;;;35097:50;35109:10;35121:7;35130:9;35141:5;35097:11;:50::i;30505:478::-;2492:12;:10;:12::i;:::-;2482:6;;-1:-1:-1;;;;;2482:6:0;;;:22;;;2474:67;;;;;-1:-1:-1;;;2474:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2474:67:0;;;;;;;;;;;;;;;30641:18;;30624:14;30672:304;30696:6;30692:1;:10;30672:304;;;30724:18;30745:11;30757:1;30745:14;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30780:32:0;;;;;;:20;:32;;;;;;;;30745:14;;-1:-1:-1;30780:32:0;;:42;;;;;;30776:189;;-1:-1:-1;;;;;30843:32:0;;;;;;:20;:32;;;;;;;;;:41;;-1:-1:-1;;30843:41:0;;;;;;;;;;30910:39;;;;;;;;;;;;;;;;;;;;;30776:189;-1:-1:-1;30704:3:0;;30672:304;;28000:92;2492:12;:10;:12::i;:::-;2482:6;;-1:-1:-1;;;;;2482:6:0;;;:22;;;2474:67;;;;;-1:-1:-1;;;2474:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2474:67:0;;;;;;;;;;;;;;;28068:9;:16;;-1:-1:-1;;28068:16:0;28080:4;28068:16;;;28000:92::o;30009:158::-;-1:-1:-1;;;;;30127:32:0;30098:4;30127:32;;;:20;:32;;;;;;;;;30009:158::o;32474:795::-;-1:-1:-1;;;;;32708:32:0;;32583:4;32708:32;;;:20;:32;;;;;;32583:4;;;;32708:32;;;:72;;-1:-1:-1;;;;;;32744:27:0;;;;;;:15;:27;;;;;;;;:36;;;;;;;;;;;32708:72;32704:121;;;-1:-1:-1;32809:4:0;32704:121;32837:11;32851:40;32870:20;32851:13;:11;:13::i;:::-;:18;:40;:18;:40;:::i;:::-;32837:54;;32904:18;32925:29;32950:3;32925:19;32939:1;32942;32925:13;:19::i;:::-;:24;:29;:24;:29;:::i;:::-;32904:50;;32967:14;33050:9;33046:177;;;33085:34;:10;33101:17;33085:34;:15;:34;:::i;:::-;33076:43;;33046:177;;;33163:48;33196:14;33163:27;33179:10;;33163:27;:15;:27;:::i;:::-;:32;:48;:32;:48;:::i;:::-;33154:57;;33046:177;33243:9;;-1:-1:-1;33254:6:0;;-1:-1:-1;;;32474:795:0;;;;;;:::o;29279:646::-;2492:12;:10;:12::i;:::-;2482:6;;-1:-1:-1;;;;;2482:6:0;;;:22;;;2474:67;;;;;-1:-1:-1;;;2474:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2474:67:0;;;;;;;;;;;;;;;29442:18;;29491:15;;29481:25;;29473:72;;;;-1:-1:-1;;;29473:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29563:9;29558:360;29582:6;29578:1;:10;29558:360;;;29610:18;29631:11;29643:1;29631:14;;;;;;;;;;;;;;29610:35;;29660:15;29678:8;29687:1;29678:11;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29710:27:0;;;;;;:15;:27;;;;;;:36;;;;;;;;;;;29678:11;;-1:-1:-1;29710:36:0;;:46;;;;;;29706:201;;-1:-1:-1;;;;;29777:27:0;;;;;;:15;:27;;;;;;;;:36;;;;;;;;;:45;;;;;-1:-1:-1;;29777:45:0;;;;;;;;29848:43;;;;;;;;;;;;;;;;;;;;;;;;;29706:201;-1:-1:-1;;29590:3:0;;29558:360;;13531:134;-1:-1:-1;;;;;13630:18:0;;;13603:7;13630:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13531:134::o;28440:206::-;2492:12;:10;:12::i;:::-;2482:6;;-1:-1:-1;;;;;2482:6:0;;;:22;;;2474:67;;;;;-1:-1:-1;;;2474:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2474:67:0;;;;;;;;;;;;;;;28524:6;28520:119;;;28547:14;:22;;-1:-1:-1;;28547:22:0;;;28520:119;;;28604:15;:23;;-1:-1:-1;;28604:23:0;;;28440:206;:::o;35163:199::-;-1:-1:-1;;;35163:199:0;;;;;;;;:::o;3209:240::-;2492:12;:10;:12::i;:::-;2482:6;;-1:-1:-1;;;;;2482:6:0;;;:22;;;2474:67;;;;;-1:-1:-1;;;2474:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2474:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3290:22:0;;3282:73;;;;-1:-1:-1;;;3282:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3394:6;;;3373:38;;-1:-1:-1;;;;;3373:38:0;;;;3394:6;;;3373:38;;;3424:6;:17;;-1:-1:-1;;;;;;3424:17:0;-1:-1:-1;;;;;3424:17:0;;;;;;;;;;3209:240::o;846:98::-;926:10;846:98;:::o;18634:340::-;-1:-1:-1;;;;;18728:19:0;;18720:68;;;;-1:-1:-1;;;18720:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18807:21:0;;18799:68;;;;-1:-1:-1;;;18799:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18880:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18934:32;;;;;;;;;;;;;;;;;18634:340;;;:::o;16528:431::-;-1:-1:-1;;;;;16626:20:0;;16618:70;;;;-1:-1:-1;;;16618:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16707:23:0;;16699:71;;;;-1:-1:-1;;;16699:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16803:17:0;;;;;;:9;:17;;;;;;:29;;16825:6;16803:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;16783:17:0;;;;;;;:9;:17;;;;;;:49;;;;16866:20;;;;;;;:32;;16891:6;16866:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;16843:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;16916:35;;;;;;;16843:20;;16916:35;;;;;;;;;;;;;16528:431;;;:::o;4817:160::-;4875:7;4908:1;4903;:6;;4895:49;;;;;-1:-1:-1;;;4895:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4964:5:0;;;4817:160::o;4359:183::-;4417:7;4449:5;;;4475:6;;;;4467:46;;;;;-1:-1:-1;;;4467:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4533:1;4359:183;-1:-1:-1;;;4359:183:0:o;17882:312::-;-1:-1:-1;;;;;17958:21:0;;17950:67;;;;-1:-1:-1;;;17950:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18051:18:0;;;;;;:9;:18;;;;;;:30;;18074:6;18051:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;18030:18:0;;;;;;:9;:18;;;;;:51;18107:12;;:24;;18124:6;18107:24;:16;:24;:::i;:::-;18092:12;:39;18149:37;;;;;;;;18175:1;;-1:-1:-1;;;;;18149:37:0;;;;;;;;;;;;17882:312;;:::o;24751:623::-;24811:4;25281:20;;25122:66;25323:23;;;;;;:42;;-1:-1:-1;25350:15:0;;;25323:42;25315:51;24751:623;-1:-1:-1;;;;24751:623:0:o;33328:662::-;33452:14;33468;33486:35;33501:10;33513:7;33486:14;:35::i;:::-;33451:70;;;;33539:9;33534:246;;33569:8;33565:204;;;33607:14;;;;;;;33606:15;33598:55;;;;;-1:-1:-1;;;33598:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33565:204;;;33705:15;;;;;;;33704:16;33696:57;;;;;-1:-1:-1;;;33696:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33809:1;33800:6;:10;33792:45;;;;;-1:-1:-1;;;33792:45:0;;;;;;;;;;;;-1:-1:-1;;;33792:45:0;;;;;;;;;;;;;;;33876:22;33882:7;33891:6;33876:5;:22::i;:::-;33916:66;;;-1:-1:-1;;;;;33916:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33328:662;;;;;;:::o;21333:364::-;21419:7;21452:6;21444:31;;;;;-1:-1:-1;;;21444:31:0;;;;;;;;;;;;-1:-1:-1;;;21444:31:0;;;;;;;;;;;;;;;19601:8;21501;;21530:6;;;:24;;;19601:8;21545:1;21540:2;:6;;;;;;:14;21530:24;21522:53;;;;;-1:-1:-1;;;21522:53:0;;;;;;;;;;;;-1:-1:-1;;;21522:53:0;;;;;;;;;;;;;;;21611:1;21607:5;;21601:12;;21634:8;;;;21626:37;;;;;-1:-1:-1;;;21626:37:0;;;;;;;;;;;;-1:-1:-1;;;21626:37:0;;;;;;;;;;;;;;;21688:1;21683:2;:6;;;;;;;21333:364;-1:-1:-1;;;;;21333:364:0:o;22251:586::-;22342:7;19658:5;22375:4;:21;;22367:55;;;;;-1:-1:-1;;;22367:55:0;;;;;;;;;;;;-1:-1:-1;;;22367:55:0;;;;;;;;;;;;;;;19712:18;22441:21;;;22433:56;;;;;-1:-1:-1;;;22433:56:0;;;;;;;;;;;;-1:-1:-1;;;22433:56:0;;;;;;;;;;;;;;;22502:13;22518:11;22525:3;22518:6;:11::i;:::-;22502:27;;22543:14;22560:16;22565:3;22570:5;22560:4;:16::i;:::-;22543:33;;22589:16;22608:24;22614:4;22620:11;22625:5;22620:4;:11::i;:::-;22608:5;:24::i;:::-;22589:43;-1:-1:-1;22649:11:0;22645:59;;22684:8;-1:-1:-1;22677:15:0;;-1:-1:-1;;22677:15:0;22645:59;22716:21;22740:40;22751:4;22757:6;19779:15;22740:10;:40::i;:::-;22716:64;;22800:29;22805:8;22815:13;22800:4;:29::i;:::-;22793:36;22251:586;-1:-1:-1;;;;;;;22251:586:0:o;20973:320::-;21059:7;21097:5;;;21123:6;;;:21;;;21143:1;21138;21133:2;:6;;;;;;:11;21123:21;21115:50;;;;;-1:-1:-1;;;21115:50:0;;;;;;;;;;;;-1:-1:-1;;;21115:50:0;;;;;;;;;;;;;;;21197:8;21191:15;;21227:8;;;;21219:37;;;;;-1:-1:-1;;;21219:37:0;;;;;;;;;;;;-1:-1:-1;;;21219:37:0;;;;;;;;;;;;;;;19601:8;21276:2;:9;;17240:310;-1:-1:-1;;;;;17316:21:0;;17308:65;;;;;-1:-1:-1;;;17308:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17401:12;;:24;;17418:6;17401:24;:16;:24;:::i;:::-;17386:12;:39;-1:-1:-1;;;;;17457:18:0;;;;;;:9;:18;;;;;;:30;;17480:6;17457:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;17436:18:0;;;;;;:9;:18;;;;;;;;:51;;;;17505:37;;;;;;;17436:18;;;;17505:37;;;;;;;;;;17240:310;;:::o;19999:131::-;20076:7;19601:8;20108:7;20113:1;20108:4;:7::i;:::-;:14;;19999:131;-1:-1:-1;;19999:131:0:o;20423:227::-;20509:7;20535:9;20546;20559:14;20568:1;20571;20559:8;:14::i;:::-;20534:39;;;;20595:4;20594:5;20586:35;;;;;-1:-1:-1;;;20586:35:0;;;;;;;;;;;;-1:-1:-1;;;20586:35:0;;;;;;;;;;;;;;;-1:-1:-1;20641:1:0;20423:227;-1:-1:-1;;;20423:227:0:o;19835:124::-;19601:8;19943;;;19835:124::o;21737:337::-;21824:7;;21865:1;21861;:5;:21;;19601:8;21861:21;;;21874:1;21861:21;21849:33;-1:-1:-1;21905:1:0;21900:6;;;;21895:151;21908:6;;21895:151;;21943:10;21948:1;21951;21943:4;:10::i;:::-;21939:14;-1:-1:-1;21978:1:0;21974;:5;:10;21970:65;;22009:10;22014:1;22017;22009:4;:10::i;:::-;22005:14;;21970:65;21921:1;21916:6;;;;21895:151;;22877:1116;22993:7;23019:9;23030;23043:20;23052:4;19601:8;23043;:20::i;:::-;23018:45;;-1:-1:-1;23018:45:0;-1:-1:-1;23088:3:0;19601:8;;23076:9;23452:1;23435:528;23463:9;23455:4;:17;23435:528;;23494:12;19601:8;23509:1;:8;23494:23;;23535:9;23546;23559:29;23568:1;23571:16;23576:4;19601:8;23571:4;:16::i;:::-;23559:8;:29::i;:::-;23534:54;;;;23612:22;23617:4;23623:10;23628:1;23631;23623:4;:10::i;:::-;23612:4;:22::i;:::-;23605:29;;23656:16;23661:4;23667;23656;:16::i;:::-;23649:23;-1:-1:-1;23693:9:0;23689:20;;23704:5;;;;;23689:20;23730:4;23726:30;;;23747:9;;;23726:30;23775:4;23771:30;;;23792:9;;;23771:30;23822:8;23818:134;;;23857:15;23862:3;23867:4;23857;:15::i;:::-;23851:21;;23818:134;;;23921:15;23926:3;23931:4;23921;:15::i;:::-;23915:21;;23818:134;-1:-1:-1;;;23474:3:0;;23435:528;;;-1:-1:-1;23982:3:0;;22877:1116;-1:-1:-1;;;;;;;;;22877:1116:0:o;20690:243::-;20780:7;20789:4;20820:1;20815;:6;20811:115;;-1:-1:-1;;20846:5:0;;;20853;20838:21;;20811:115;-1:-1:-1;;20902:5:0;;;20909:4;20894:20;;20170:213;20256:7;20293:5;;;20319:6;;;;20311:35;;;;;-1:-1:-1;;;20311:35:0;;;;;;;;;;;;-1:-1:-1;;;20311:35:0;;;;;;;;;;;;;

Swarm Source

bzzr://c809db31e0a2e01f9bc453f30e2b1d46c9c440f7b62be695e3872d845f578f4e
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.