ETH Price: $2,441.02 (-0.68%)
 

Overview

Max Total Supply

568 COS

Holders

332

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x25e0cE7cF653AE768A5B70d8d46d2745dFC98366
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:
COS

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 2 of 7: COS.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.9;

import './Ownable.sol';
import './IERC20.sol';
import './ERC1155U.sol';
import "./SafeMath.sol";
import "./Strings.sol";



interface ProxyRegistry {
    function proxies(address) external view returns (address);
}

interface IERC2981 {
    function royaltyInfo(uint256 _tokenId, uint256 _salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

contract COS is ERC1155U, IERC2981, Ownable {
    using SafeMath for uint256;
    using Strings for uint256;

    uint256 _currentTokenId = 1;

    uint256 public constant MAX_TOKENS = 4999;
    uint256 constant TOKENS_GIFT = 80;
    uint256 public PRICE = 0.25 ether;
    
    uint256 public giftedAmount;
    uint256 public presalePurchaseLimit = 3;
    bool public presaleLive;
    bool public saleLive;
    bool public locked;
    bool public revealed = false; 


    string private _tokenBaseURI = 'ipfs://QmQaZBeLfvrpfwuGCE7Q4iHrjzzngrminW8rgEdJUSoJgr/';

    bool private _gaslessTrading = true;
    uint256 private _royaltyPartsPerMillion = 50_000;

    string public constant name = 'Clash of Shiba';
    string public constant symbol = 'COS';

    mapping(address => bool) public presalerList;
    uint256 public currentWave;
    mapping(uint256 => mapping(address => uint256)) public presalerListPurchases;

    modifier notLocked {
        require(!locked, "Contract metadata methods are locked");
        _;
    }

    function send(address to) external onlyOwner {
        require(_currentTokenId <= MAX_TOKENS, 'Sold out');
        require(giftedAmount <= TOKENS_GIFT, 'Sold out');
        giftedAmount++;
        _mint(to, _currentTokenId, '');

        unchecked {
            // Can't overflow
            _currentTokenId++;
        }
    }

    function send_Several(address[] calldata to) external onlyOwner {
        unchecked {
            // Can't overflow
            require(_currentTokenId - 1 + to.length <= MAX_TOKENS, 'Sold out');
            require(giftedAmount + to.length <= TOKENS_GIFT, "Finito");
        }

        for (uint256 i = 0; i < to.length;) {
            giftedAmount++;
            _mint(to[i], _currentTokenId, '');
            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                _currentTokenId++;
                i++;
            }
        }
    }

    function mint_Several_nmW(uint256 count) external payable {
        require(count < 6, 'Max 5');
        require(saleLive);
        unchecked {
            // Can't overflow
            require(_currentTokenId - 1 + count <= MAX_TOKENS, 'Sold out');
            require(count * PRICE == msg.value, 'Wrong price');
        }

        uint256[] memory ids = new uint256[](count);

        for (uint256 i = 0; i < count; ) {
            ids[i] = _currentTokenId + i;
            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }

        _batchMint(msg.sender, ids, '');

        unchecked {
            // Can't overflow
            _currentTokenId += count;
        }
    }

    function addToPresaleList(address[] calldata entries) external onlyOwner {
        for(uint256 i = 0; i < entries.length; i++) {
            address entry = entries[i];
            require(entry != address(0), "NULL_ADDRESS");
            require(!presalerList[entry], "DUPLICATE_ENTRY");

            presalerList[entry] = true;
        }   
    }


    function removeFromPresaleList(address[] calldata entries) external onlyOwner {
        for(uint256 i = 0; i < entries.length; i++) {
            address entry = entries[i];
            require(entry != address(0), "NULL_ADDRESS");
            
            presalerList[entry] = false;
        }
    }

    function mint_Presale(uint256 count) external payable {
        require(count <= presalePurchaseLimit, 'Max <');
        require(presaleLive, "PRESALE_CLOSED");
        require(presalerListPurchases[currentWave][msg.sender] + count <= presalePurchaseLimit, "EXCEED_ALLOC");

        unchecked {
            // Can't overflow
            require(_currentTokenId + count < MAX_TOKENS, 'Sold out');
            require(count * PRICE == msg.value, 'Wrong price');
        }

        uint256[] memory ids = new uint256[](count);

        for (uint256 i = 0; i < count; ) {
            ids[i] = _currentTokenId + i;
            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }

        _batchMint(msg.sender, ids, '');

        unchecked {
            // Can't overflow
            _currentTokenId += count;
        }
    }

    function totalSupply() public view returns (uint256) {
        unchecked {
            // Starts with 1
            return _currentTokenId - 1;
        }
    }

    function uri(uint256 tokenId) public view override returns (string memory) {
        require(_currentTokenId >= tokenId, "Cannot query non-existent token");
        if (revealed) {
            return string(abi.encodePacked(_tokenBaseURI, tokenId.toString()));
        }else {
            return  _tokenBaseURI;
        }
        
    }

    function supportsInterface(bytes4 interfaceId) public pure virtual override returns (bool) {
        return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);
    }

    function royaltyInfo(uint256, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount) {
        receiver = owner();
        royaltyAmount = (salePrice * _royaltyPartsPerMillion) / 1_000_000;
    }

    function isApprovedForAll(address owner, address operator) public view override returns (bool) {
        // Allow easier listing for sale on OpenSea. Based on
        // https://github.com/ProjectOpenSea/opensea-creatures/blob/f7257a043e82fae8251eec2bdde37a44fee474c4/migrations/2_deploy_contracts.js#L29
        if (_gaslessTrading) {
            if (block.chainid == 4) {
                if (ProxyRegistry(0xF57B2c51dED3A29e6891aba85459d600256Cf317).proxies(owner) == operator) {
                    return true;
                }
            } else if (block.chainid == 1) {
                if (ProxyRegistry(0xa5409ec958C83C3f309868babACA7c86DCB077c1).proxies(owner) == operator) {
                    return true;
                }
            }
        }

        return super.isApprovedForAll(owner, operator);
    }

    // Admin

    function setBaseURI(string calldata URI) external onlyOwner notLocked {
        _tokenBaseURI = URI;
        revealed = true;
    }

    function setAllowGaslessListing(bool allow) public onlyOwner {
        _gaslessTrading = allow;
    }

    function setRoyaltyPPM(uint256 newValue) public onlyOwner {
        require(newValue < 1_000_000, 'Must be < 1e6');
        _royaltyPartsPerMillion = newValue;
    }

    function setPrice(uint256 _price) public onlyOwner {
        PRICE = _price;
    }

    function toggleSaleStatus() public onlyOwner {
        saleLive = !saleLive;
    }

    function isPresaler(address addr) external view returns (bool) {
        return presalerList[addr];
    }
    
    function presalePurchasedCount(address addr) external view returns (uint256) {
        return presalerListPurchases[currentWave][addr];
    }

    function nextWave(uint256 newLimit) public onlyOwner {
        currentWave = currentWave + 1;
        presalePurchaseLimit = newLimit;
    }

    function lockMetadata() public onlyOwner {
        locked = true;
    }
    
    function togglePresaleStatus() public onlyOwner {
        presaleLive = !presaleLive;
    }
    

    function withdraw() external onlyOwner {
        _widthdraw(msg.sender, address(this).balance);
    }

    function _widthdraw(address _address, uint256 _amount) private {
        (bool success, ) = _address.call{value: _amount}("");
        require(success, "Transfer failed.");
    }
    function widthrawERC20(IERC20 erc20Token) public onlyOwner {
        erc20Token.transfer(msg.sender, erc20Token.balanceOf(address(this)));
    }
}

File 1 of 7: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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 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.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 3 of 7: ERC1155U.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Minimalist and gas efficient standard ERC1155 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155U {
    /*///////////////////////////////////////////////////////////////
                                EVENTS
    //////////////////////////////////////////////////////////////*/

    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 amount
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] amounts
    );

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    /*///////////////////////////////////////////////////////////////
                            ERC1155 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256[10001] private _attrs;

    mapping(address => mapping(address => bool)) private _isApprovedForAll;

    /*///////////////////////////////////////////////////////////////
                             METADATA LOGIC
    //////////////////////////////////////////////////////////////*/

    function uri(uint256 id) public view virtual returns (string memory);

    /*///////////////////////////////////////////////////////////////
                             Ownership & Data
    //////////////////////////////////////////////////////////////*/

    function ownerOf(uint256 id) public view returns (address) {
        return address(uint160(_attrs[id] & 0x00ffffffffffffffffffffffffffffffffffffffff));
    }


    function _setOwner(uint256 id, address to) private {
        _attrs[id] = (_attrs[id] & (0xffffffffffffffffffffffff << 160)) | uint160(to);
    }

    /*///////////////////////////////////////////////////////////////
                             ERC1155 LOGIC
    //////////////////////////////////////////////////////////////*/

    function isApprovedForAll(address owner, address operator) public view virtual returns (bool) {
        return _isApprovedForAll[owner][operator];
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        _isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual {
        require(msg.sender == from || isApprovedForAll(from, msg.sender), 'NOT_AUTHORIZED');
        require(amount == 1, 'Can only transfer one');
        require(ownerOf(id) == from, 'Not owner');

        _setOwner(id, to);

        emit TransferSingle(msg.sender, from, to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, from, id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            'UNSAFE_RECIPIENT'
        );
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, 'LENGTH_MISMATCH');

        require(msg.sender == from || isApprovedForAll(from, msg.sender), 'NOT_AUTHORIZED');

        for (uint256 i = 0; i < idsLength; ) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];
            
            require(amount == 1, 'Can only transfer one');
            require(ownerOf(id) == from, 'Not owner');

            _setOwner(id, to);

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }

        emit TransferBatch(msg.sender, from, to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, from, ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            'UNSAFE_RECIPIENT'
        );
    }

    function balanceOf(address owner, uint256 id) public view virtual returns (uint256 balance) {
        if (ownerOf(id) == owner) {
            balance = 1;
        }
    }

    function balanceOfBatch(address[] memory owners, uint256[] memory ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        uint256 ownersLength = owners.length; // Saves MLOADs.

        require(ownersLength == ids.length, 'LENGTH_MISMATCH');

        balances = new uint256[](owners.length);

        // Unchecked because the only math done is incrementing
        // the array index counter which cannot possibly overflow.
        unchecked {
            for (uint256 i = 0; i < ownersLength; i++) {
                balances[i] = balanceOf(owners[i], ids[i]);
            }
        }
    }

    /*///////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
            interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI
    }

    /*///////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(
        address to,
        uint256 id,
        bytes memory data
    ) internal {
        _setOwner(id, to);
        emit TransferSingle(msg.sender, address(0), to, id, 1);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, address(0), id, 1, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            'UNSAFE_RECIPIENT'
        );
    }

    function _batchMint(
        address to,
        uint256[] memory ids,
        bytes memory data
    ) internal {
        uint256 idsLength = ids.length; // Saves MLOADs.
        uint256[] memory amounts = new uint256[](idsLength);

        for (uint256 i = 0; i < idsLength; ) {
            amounts[i] = 1;
            _setOwner(ids[i], to);

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }

        emit TransferBatch(msg.sender, address(0), to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, address(0), ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            'UNSAFE_RECIPIENT'
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC1155 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol)
interface ERC1155TokenReceiver {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external returns (bytes4);
}

File 4 of 7: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 5 of 7: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @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.
 */
abstract 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() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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 virtual onlyOwner {
        _setOwner(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 virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 6 of 7: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 7 of 7: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"entries","type":"address[]"}],"name":"addToPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentWave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giftedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isPresaler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint_Presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint_Several_nmW","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"nextWave","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalePurchaseLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"presalePurchasedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presalerList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"presalerListPurchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"entries","type":"address[]"}],"name":"removeFromPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"}],"name":"send_Several","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowGaslessListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setRoyaltyPPM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"erc20Token","type":"address"}],"name":"widthrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6001612713556703782dace9d9000061271455600361271655612717805463ff0000001916905560e060405260366080818152906200347160a0398051620000519161271891602090910190620000d9565b50612719805460ff1916600117905561c35061271a553480156200007457600080fd5b50620000803362000086565b620001bb565b61271280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000e7906200017f565b90600052602060002090601f0160209004810192826200010b576000855562000156565b82601f106200012657805160ff191683800117855562000156565b8280016001018555821562000156579182015b828111156200015657825182559160200191906001019062000139565b506200016492915062000168565b5090565b5b8082111562000164576000815560010162000169565b600181811c908216806200019457607f821691505b602082108103620001b557634e487b7160e01b600052602260045260246000fd5b50919050565b6132a680620001cb6000396000f3fe6080604052600436106102ee5760003560e01c80637204a3c91161018f5780639e273b2f116100e1578063e081b7811161008a578063f2fde38b11610064578063f2fde38b146108f0578063f474307014610910578063f47c84c51461092757600080fd5b8063e081b78114610890578063e985e9c5146108b0578063f242432a146108d057600080fd5b8063b179e060116100bb578063b179e0601461082f578063cf3090121461084f578063d6d8500d1461087057600080fd5b80639e273b2f146107b5578063a22cb465146107ef578063a9e9ee701461080f57600080fd5b80638d859f3e1161014357806395d89b411161011d57806395d89b4114610726578063989bdbb61461076f5780639cf2e8d61461078457600080fd5b80638d859f3e146106d05780638da5cb5b146106e757806391b7f5ed1461070657600080fd5b80638395b842116101745780638395b8421461067e57806383a9e0491461069e57806386b46694146106b957600080fd5b80637204a3c9146106495780637bffb4ce1461066957600080fd5b80632a55205a1161024857806351830227116101fc5780635ce7af1f116101d65780635ce7af1f146105b65780636352211e146105fc578063715018a61461063457600080fd5b8063518302271461056157806355f804b3146105835780635b9e93d3146105a357600080fd5b80633ccfd60b1161022d5780633ccfd60b146104ff5780633e58c58c146105145780634e1273f41461053457600080fd5b80632a55205a146104a05780632eb2c2d6146104df57600080fd5b8063057536ae116102aa57806316e8d2731161028457806316e8d2731461044f57806318160ddd1461046f5780631b57190e1461048957600080fd5b8063057536ae146103a057806306fdde03146103d95780630e89341c1461042f57600080fd5b806301ffc9a7116102db57806301ffc9a71461033b57806303e605551461036b578063049c5c491461038b57600080fd5b8060dd146102f3578062fdd58e14610308575b600080fd5b610306610301366004612919565b61093d565b005b34801561031457600080fd5b50610328610323366004612947565b610adc565b6040519081526020015b60405180910390f35b34801561034757600080fd5b5061035b610356366004612989565b610b09565b6040519015158152602001610332565b34801561037757600080fd5b506103066103863660046129a6565b610b47565b34801561039757600080fd5b50610306610c8e565b3480156103ac57600080fd5b506103286103bb3660046129c3565b61271d60209081526000928352604080842090915290825290205481565b3480156103e557600080fd5b506104226040518060400160405280600e81526020017f436c617368206f6620536869626100000000000000000000000000000000000081525081565b6040516103329190612a4f565b34801561043b57600080fd5b5061042261044a366004612919565b610cf5565b34801561045b57600080fd5b5061030661046a366004612a70565b610e23565b34801561047b57600080fd5b506127135460001901610328565b34801561049557600080fd5b506103286127155481565b3480156104ac57600080fd5b506104c06104bb366004612a8d565b610e80565b604080516001600160a01b039093168352602083019190915201610332565b3480156104eb57600080fd5b506103066104fa366004612bf5565b610ebe565b34801561050b57600080fd5b506103066111bd565b34801561052057600080fd5b5061030661052f3660046129a6565b611212565b34801561054057600080fd5b5061055461054f366004612ca3565b61131a565b6040516103329190612da0565b34801561056d57600080fd5b506127175461035b906301000000900460ff1681565b34801561058f57600080fd5b5061030661059e366004612db3565b61142a565b6103066105b1366004612919565b611518565b3480156105c257600080fd5b506103286105d13660046129a6565b61271c54600090815261271d602090815260408083206001600160a01b039094168352929052205490565b34801561060857600080fd5b5061061c610617366004612919565b611743565b6040516001600160a01b039091168152602001610332565b34801561064057600080fd5b50610306611769565b34801561065557600080fd5b50610306610664366004612e25565b6117bc565b34801561067557600080fd5b50610306611924565b34801561068a57600080fd5b50610306610699366004612919565b611982565b3480156106aa57600080fd5b506127175461035b9060ff1681565b3480156106c557600080fd5b5061032861271c5481565b3480156106dc57600080fd5b506103286127145481565b3480156106f357600080fd5b50612712546001600160a01b031661061c565b34801561071257600080fd5b50610306610721366004612919565b611a23565b34801561073257600080fd5b506104226040518060400160405280600381526020017f434f53000000000000000000000000000000000000000000000000000000000081525081565b34801561077b57600080fd5b50610306611a72565b34801561079057600080fd5b5061035b61079f3660046129a6565b61271b6020526000908152604090205460ff1681565b3480156107c157600080fd5b5061035b6107d03660046129a6565b6001600160a01b0316600090815261271b602052604090205460ff1690565b3480156107fb57600080fd5b5061030661080a366004612e88565b611acf565b34801561081b57600080fd5b5061030661082a366004612e25565b611b3c565b34801561083b57600080fd5b5061030661084a366004612e25565b611c9a565b34801561085b57600080fd5b506127175461035b9062010000900460ff1681565b34801561087c57600080fd5b5061030661088b366004612919565b611d90565b34801561089c57600080fd5b506127175461035b90610100900460ff1681565b3480156108bc57600080fd5b5061035b6108cb366004612eb6565b611df2565b3480156108dc57600080fd5b506103066108eb366004612ee4565b611f74565b3480156108fc57600080fd5b5061030661090b3660046129a6565b6121c2565b34801561091c57600080fd5b506103286127165481565b34801561093357600080fd5b5061032861138781565b600681106109925760405162461bcd60e51b815260206004820152600560248201527f4d6178203500000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b61271754610100900460ff166109a757600080fd5b61138781600161271354030111156109ec5760405162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b6044820152606401610989565b3461271454820214610a2e5760405162461bcd60e51b815260206004820152600b60248201526a57726f6e6720707269636560a81b6044820152606401610989565b60008167ffffffffffffffff811115610a4957610a49612aaf565b604051908082528060200260200182016040528015610a72578160200160208202803683370190505b50905060005b82811015610ab4578061271354610a8f9190612f63565b828281518110610aa157610aa1612f7b565b6020908102919091010152600101610a78565b50610acf338260405180602001604052806000815250612293565b5061271380549091019055565b6000826001600160a01b0316610af183611743565b6001600160a01b031603610b03575060015b92915050565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610b035750610b038261241b565b612712546001600160a01b03163314610b905760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b9190612f91565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190612faa565b5050565b612712546001600160a01b03163314610cd75760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b612717805461ff001981166101009182900460ff1615909102179055565b606081612713541015610d4a5760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e006044820152606401610989565b612717546301000000900460ff1615610d9057612718610d69836124b4565b604051602001610d7a92919061301d565b6040516020818303038152906040529050919050565b6127188054610d9e90612fc7565b80601f0160208091040260200160405190810160405280929190818152602001828054610dca90612fc7565b8015610e175780601f10610dec57610100808354040283529160200191610e17565b820191906000526020600020905b815481529060010190602001808311610dfa57829003601f168201915b50505050509050919050565b612712546001600160a01b03163314610e6c5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b612719805460ff1916911515919091179055565b600080610e96612712546001600160a01b031690565b9150620f424061271a5484610eab91906130c3565b610eb591906130f8565b90509250929050565b825182518114610f105760405162461bcd60e51b815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610989565b336001600160a01b0387161480610f2c5750610f2c8633611df2565b610f785760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610989565b60005b81811015611078576000858281518110610f9757610f97612f7b565b602002602001015190506000858381518110610fb557610fb5612f7b565b602002602001015190508060011461100f5760405162461bcd60e51b815260206004820152601560248201527f43616e206f6e6c79207472616e73666572206f6e6500000000000000000000006044820152606401610989565b886001600160a01b031661102283611743565b6001600160a01b0316146110645760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610989565b61106e82896125f1565b5050600101610f7b565b50846001600160a01b0316866001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110c892919061310c565b60405180910390a46001600160a01b0385163b156111695760405163bc197c8160e01b808252906001600160a01b0387169063bc197c81906111169033908b908a908a908a90600401613131565b6020604051808303816000875af1158015611135573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611159919061318f565b6001600160e01b03191614611176565b6001600160a01b03851615155b6111b55760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610989565b505050505050565b612712546001600160a01b031633146112065760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b6112103347612643565b565b612712546001600160a01b0316331461125b5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b61138761271354111561129b5760405162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b6044820152606401610989565b60506127155411156112da5760405162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b6044820152606401610989565b61271580549060006112eb836131ac565b919050555061130d8161271354604051806020016040528060008152506126e6565b5061271380546001019055565b815181516060919081146113705760405162461bcd60e51b815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610989565b835167ffffffffffffffff81111561138a5761138a612aaf565b6040519080825280602002602001820160405280156113b3578160200160208202803683370190505b50915060005b81811015611422576113fd8582815181106113d6576113d6612f7b565b60200260200101518583815181106113f0576113f0612f7b565b6020026020010151610adc565b83828151811061140f5761140f612f7b565b60209081029190910101526001016113b9565b505092915050565b612712546001600160a01b031633146114735760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b6127175462010000900460ff16156114f25760405162461bcd60e51b8152602060048201526024808201527f436f6e7472616374206d65746164617461206d6574686f647320617265206c6f60448201527f636b6564000000000000000000000000000000000000000000000000000000006064820152608401610989565b6114ff6127188383612880565b5050612717805463ff0000001916630100000017905550565b6127165481111561156b5760405162461bcd60e51b815260206004820152600560248201527f4d6178203c0000000000000000000000000000000000000000000000000000006044820152606401610989565b6127175460ff166115be5760405162461bcd60e51b815260206004820152600e60248201527f50524553414c455f434c4f5345440000000000000000000000000000000000006044820152606401610989565b6127165461271c54600090815261271d602090815260408083203384529091529020546115ec908390612f63565b111561163a5760405162461bcd60e51b815260206004820152600c60248201527f4558434545445f414c4c4f4300000000000000000000000000000000000000006044820152606401610989565b6113878161271354011061167b5760405162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b6044820152606401610989565b34612714548202146116bd5760405162461bcd60e51b815260206004820152600b60248201526a57726f6e6720707269636560a81b6044820152606401610989565b60008167ffffffffffffffff8111156116d8576116d8612aaf565b604051908082528060200260200182016040528015611701578160200160208202803683370190505b50905060005b82811015610ab457806127135461171e9190612f63565b82828151811061173057611730612f7b565b6020908102919091010152600101611707565b60008082612711811061175857611758612f7b565b01546001600160a01b031692915050565b612712546001600160a01b031633146117b25760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b6112106000612820565b612712546001600160a01b031633146118055760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b60005b8181101561191f57600083838381811061182457611824612f7b565b905060200201602081019061183991906129a6565b90506001600160a01b0381166118805760405162461bcd60e51b815260206004820152600c60248201526b4e554c4c5f4144445245535360a01b6044820152606401610989565b6001600160a01b038116600090815261271b602052604090205460ff16156118ea5760405162461bcd60e51b815260206004820152600f60248201527f4455504c49434154455f454e54525900000000000000000000000000000000006044820152606401610989565b6001600160a01b0316600090815261271b60205260409020805460ff1916600117905580611917816131ac565b915050611808565b505050565b612712546001600160a01b0316331461196d5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b612717805460ff19811660ff90911615179055565b612712546001600160a01b031633146119cb5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b620f42408110611a1d5760405162461bcd60e51b815260206004820152600d60248201527f4d757374206265203c20316536000000000000000000000000000000000000006044820152606401610989565b61271a55565b612712546001600160a01b03163314611a6c5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b61271455565b612712546001600160a01b03163314611abb5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b612717805462ff0000191662010000179055565b336000818152612711602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b612712546001600160a01b03163314611b855760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b61271354611387908201600019011115611bcc5760405162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b6044820152606401610989565b6127155460509082011115611c235760405162461bcd60e51b815260206004820152600660248201527f46696e69746f00000000000000000000000000000000000000000000000000006044820152606401610989565b60005b8181101561191f576127158054906000611c3f836131ac565b9190505550611c87838383818110611c5957611c59612f7b565b9050602002016020810190611c6e91906129a6565b61271354604051806020016040528060008152506126e6565b6127138054600190810190915501611c26565b612712546001600160a01b03163314611ce35760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b60005b8181101561191f576000838383818110611d0257611d02612f7b565b9050602002016020810190611d1791906129a6565b90506001600160a01b038116611d5e5760405162461bcd60e51b815260206004820152600c60248201526b4e554c4c5f4144445245535360a01b6044820152606401610989565b6001600160a01b0316600090815261271b60205260409020805460ff1916905580611d88816131ac565b915050611ce6565b612712546001600160a01b03163314611dd95760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b61271c54611de8906001612f63565b61271c5561271655565b6127195460009060ff1615611f425746600403611ea45760405163c455279160e01b81526001600160a01b03848116600483015283169073f57b2c51ded3a29e6891aba85459d600256cf3179063c455279190602401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8991906131c5565b6001600160a01b031603611e9f57506001610b03565b611f42565b46600103611f425760405163c455279160e01b81526001600160a01b03848116600483015283169073a5409ec958c83c3f309868babaca7c86dcb077c19063c455279190602401602060405180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c91906131c5565b6001600160a01b031603611f4257506001610b03565b6001600160a01b038084166000908152612711602090815260408083209386168352929052205460ff165b9392505050565b336001600160a01b0386161480611f905750611f908533611df2565b611fdc5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610989565b8160011461202c5760405162461bcd60e51b815260206004820152601560248201527f43616e206f6e6c79207472616e73666572206f6e6500000000000000000000006044820152606401610989565b846001600160a01b031661203f84611743565b6001600160a01b0316146120815760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610989565b61208b83856125f1565b60408051848152602081018490526001600160a01b03808716929088169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b1561216f5760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e619061211c9033908a908990899089906004016131e2565b6020604051808303816000875af115801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f919061318f565b6001600160e01b0319161461217c565b6001600160a01b03841615155b6121bb5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610989565b5050505050565b612712546001600160a01b0316331461220b5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b6001600160a01b0381166122875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610989565b61229081612820565b50565b815160008167ffffffffffffffff8111156122b0576122b0612aaf565b6040519080825280602002602001820160405280156122d9578160200160208202803683370190505b50905060005b828110156123325760018282815181106122fb576122fb612f7b565b60200260200101818152505061232a85828151811061231c5761231c612f7b565b6020026020010151876125f1565b6001016122df565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878560405161238392919061310c565b60405180910390a46001600160a01b0385163b156123d25760405163bc197c8160e01b808252906001600160a01b0387169063bc197c819061211c9033906000908a9088908b90600401613131565b6001600160a01b0385166121bb5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610989565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061247e57507fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b80610b035750506001600160e01b0319167f0e89341c000000000000000000000000000000000000000000000000000000001490565b6060816000036124f757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612521578061250b816131ac565b915061251a9050600a836130f8565b91506124fb565b60008167ffffffffffffffff81111561253c5761253c612aaf565b6040519080825280601f01601f191660200182016040528015612566576020820181803683370190505b5090505b84156125e95761257b600183613225565b9150612588600a8661323c565b612593906030612f63565b60f81b8183815181106125a8576125a8612f7b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506125e2600a866130f8565b945061256a565b949350505050565b806001600160a01b0316600083612711811061260f5761260f612f7b565b015473ffffffffffffffffffffffffffffffffffffffff191617600083612711811061263d5761263d612f7b565b01555050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612690576040519150601f19603f3d011682016040523d82523d6000602084013e612695565b606091505b505090508061191f5760405162461bcd60e51b815260206004820152601060248201527f5472616e73666572206661696c65642e000000000000000000000000000000006044820152606401610989565b6126f082846125f1565b60408051838152600160208201526001600160a01b0385169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0383163b156127d45760405163f23a6e6160e01b808252906001600160a01b0385169063f23a6e6190612781903390600090889060019089906004016131e2565b6020604051808303816000875af11580156127a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c4919061318f565b6001600160e01b031916146127e1565b6001600160a01b03831615155b61191f5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610989565b61271280546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805461288c90612fc7565b90600052602060002090601f0160209004810192826128ae57600085556128f4565b82601f106128c75782800160ff198235161785556128f4565b828001600101855582156128f4579182015b828111156128f45782358255916020019190600101906128d9565b50612900929150612904565b5090565b5b808211156129005760008155600101612905565b60006020828403121561292b57600080fd5b5035919050565b6001600160a01b038116811461229057600080fd5b6000806040838503121561295a57600080fd5b823561296581612932565b946020939093013593505050565b6001600160e01b03198116811461229057600080fd5b60006020828403121561299b57600080fd5b8135611f6d81612973565b6000602082840312156129b857600080fd5b8135611f6d81612932565b600080604083850312156129d657600080fd5b8235915060208301356129e881612932565b809150509250929050565b60005b83811015612a0e5781810151838201526020016129f6565b83811115612a1d576000848401525b50505050565b60008151808452612a3b8160208601602086016129f3565b601f01601f19169290920160200192915050565b602081526000611f6d6020830184612a23565b801515811461229057600080fd5b600060208284031215612a8257600080fd5b8135611f6d81612a62565b60008060408385031215612aa057600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612aee57612aee612aaf565b604052919050565b600067ffffffffffffffff821115612b1057612b10612aaf565b5060051b60200190565b600082601f830112612b2b57600080fd5b81356020612b40612b3b83612af6565b612ac5565b82815260059290921b84018101918181019086841115612b5f57600080fd5b8286015b84811015612b7a5780358352918301918301612b63565b509695505050505050565b600082601f830112612b9657600080fd5b813567ffffffffffffffff811115612bb057612bb0612aaf565b612bc3601f8201601f1916602001612ac5565b818152846020838601011115612bd857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215612c0d57600080fd5b8535612c1881612932565b94506020860135612c2881612932565b9350604086013567ffffffffffffffff80821115612c4557600080fd5b612c5189838a01612b1a565b94506060880135915080821115612c6757600080fd5b612c7389838a01612b1a565b93506080880135915080821115612c8957600080fd5b50612c9688828901612b85565b9150509295509295909350565b60008060408385031215612cb657600080fd5b823567ffffffffffffffff80821115612cce57600080fd5b818501915085601f830112612ce257600080fd5b81356020612cf2612b3b83612af6565b82815260059290921b84018101918181019089841115612d1157600080fd5b948201945b83861015612d38578535612d2981612932565b82529482019490820190612d16565b96505086013592505080821115612d4e57600080fd5b50612d5b85828601612b1a565b9150509250929050565b600081518084526020808501945080840160005b83811015612d9557815187529582019590820190600101612d79565b509495945050505050565b602081526000611f6d6020830184612d65565b60008060208385031215612dc657600080fd5b823567ffffffffffffffff80821115612dde57600080fd5b818501915085601f830112612df257600080fd5b813581811115612e0157600080fd5b866020828501011115612e1357600080fd5b60209290920196919550909350505050565b60008060208385031215612e3857600080fd5b823567ffffffffffffffff80821115612e5057600080fd5b818501915085601f830112612e6457600080fd5b813581811115612e7357600080fd5b8660208260051b8501011115612e1357600080fd5b60008060408385031215612e9b57600080fd5b8235612ea681612932565b915060208301356129e881612a62565b60008060408385031215612ec957600080fd5b8235612ed481612932565b915060208301356129e881612932565b600080600080600060a08688031215612efc57600080fd5b8535612f0781612932565b94506020860135612f1781612932565b93506040860135925060608601359150608086013567ffffffffffffffff811115612f4157600080fd5b612c9688828901612b85565b634e487b7160e01b600052601160045260246000fd5b60008219821115612f7657612f76612f4d565b500190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612fa357600080fd5b5051919050565b600060208284031215612fbc57600080fd5b8151611f6d81612a62565b600181811c90821680612fdb57607f821691505b602082108103612ffb57634e487b7160e01b600052602260045260246000fd5b50919050565b600081516130138185602086016129f3565b9290920192915050565b600080845481600182811c91508083168061303957607f831692505b6020808410820361305857634e487b7160e01b86526022600452602486fd5b81801561306c576001811461307d576130aa565b60ff198616895284890196506130aa565b60008b81526020902060005b868110156130a25781548b820152908501908301613089565b505084890196505b5050505050506130ba8185613001565b95945050505050565b60008160001904831182151516156130dd576130dd612f4d565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613107576131076130e2565b500490565b60408152600061311f6040830185612d65565b82810360208401526130ba8185612d65565b60006001600160a01b03808816835280871660208401525060a0604083015261315d60a0830186612d65565b828103606084015261316f8186612d65565b905082810360808401526131838185612a23565b98975050505050505050565b6000602082840312156131a157600080fd5b8151611f6d81612973565b6000600182016131be576131be612f4d565b5060010190565b6000602082840312156131d757600080fd5b8151611f6d81612932565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261321a60a0830184612a23565b979650505050505050565b60008282101561323757613237612f4d565b500390565b60008261324b5761324b6130e2565b50069056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220ccda1fc8626599de3a30be669e0eaf854b479045711d4d59049c720f1114f6f064736f6c634300080d0033697066733a2f2f516d51615a42654c667672706677754743453751346948726a7a7a6e67726d696e5738726745644a55536f4a67722f

Deployed Bytecode

0x6080604052600436106102ee5760003560e01c80637204a3c91161018f5780639e273b2f116100e1578063e081b7811161008a578063f2fde38b11610064578063f2fde38b146108f0578063f474307014610910578063f47c84c51461092757600080fd5b8063e081b78114610890578063e985e9c5146108b0578063f242432a146108d057600080fd5b8063b179e060116100bb578063b179e0601461082f578063cf3090121461084f578063d6d8500d1461087057600080fd5b80639e273b2f146107b5578063a22cb465146107ef578063a9e9ee701461080f57600080fd5b80638d859f3e1161014357806395d89b411161011d57806395d89b4114610726578063989bdbb61461076f5780639cf2e8d61461078457600080fd5b80638d859f3e146106d05780638da5cb5b146106e757806391b7f5ed1461070657600080fd5b80638395b842116101745780638395b8421461067e57806383a9e0491461069e57806386b46694146106b957600080fd5b80637204a3c9146106495780637bffb4ce1461066957600080fd5b80632a55205a1161024857806351830227116101fc5780635ce7af1f116101d65780635ce7af1f146105b65780636352211e146105fc578063715018a61461063457600080fd5b8063518302271461056157806355f804b3146105835780635b9e93d3146105a357600080fd5b80633ccfd60b1161022d5780633ccfd60b146104ff5780633e58c58c146105145780634e1273f41461053457600080fd5b80632a55205a146104a05780632eb2c2d6146104df57600080fd5b8063057536ae116102aa57806316e8d2731161028457806316e8d2731461044f57806318160ddd1461046f5780631b57190e1461048957600080fd5b8063057536ae146103a057806306fdde03146103d95780630e89341c1461042f57600080fd5b806301ffc9a7116102db57806301ffc9a71461033b57806303e605551461036b578063049c5c491461038b57600080fd5b8060dd146102f3578062fdd58e14610308575b600080fd5b610306610301366004612919565b61093d565b005b34801561031457600080fd5b50610328610323366004612947565b610adc565b6040519081526020015b60405180910390f35b34801561034757600080fd5b5061035b610356366004612989565b610b09565b6040519015158152602001610332565b34801561037757600080fd5b506103066103863660046129a6565b610b47565b34801561039757600080fd5b50610306610c8e565b3480156103ac57600080fd5b506103286103bb3660046129c3565b61271d60209081526000928352604080842090915290825290205481565b3480156103e557600080fd5b506104226040518060400160405280600e81526020017f436c617368206f6620536869626100000000000000000000000000000000000081525081565b6040516103329190612a4f565b34801561043b57600080fd5b5061042261044a366004612919565b610cf5565b34801561045b57600080fd5b5061030661046a366004612a70565b610e23565b34801561047b57600080fd5b506127135460001901610328565b34801561049557600080fd5b506103286127155481565b3480156104ac57600080fd5b506104c06104bb366004612a8d565b610e80565b604080516001600160a01b039093168352602083019190915201610332565b3480156104eb57600080fd5b506103066104fa366004612bf5565b610ebe565b34801561050b57600080fd5b506103066111bd565b34801561052057600080fd5b5061030661052f3660046129a6565b611212565b34801561054057600080fd5b5061055461054f366004612ca3565b61131a565b6040516103329190612da0565b34801561056d57600080fd5b506127175461035b906301000000900460ff1681565b34801561058f57600080fd5b5061030661059e366004612db3565b61142a565b6103066105b1366004612919565b611518565b3480156105c257600080fd5b506103286105d13660046129a6565b61271c54600090815261271d602090815260408083206001600160a01b039094168352929052205490565b34801561060857600080fd5b5061061c610617366004612919565b611743565b6040516001600160a01b039091168152602001610332565b34801561064057600080fd5b50610306611769565b34801561065557600080fd5b50610306610664366004612e25565b6117bc565b34801561067557600080fd5b50610306611924565b34801561068a57600080fd5b50610306610699366004612919565b611982565b3480156106aa57600080fd5b506127175461035b9060ff1681565b3480156106c557600080fd5b5061032861271c5481565b3480156106dc57600080fd5b506103286127145481565b3480156106f357600080fd5b50612712546001600160a01b031661061c565b34801561071257600080fd5b50610306610721366004612919565b611a23565b34801561073257600080fd5b506104226040518060400160405280600381526020017f434f53000000000000000000000000000000000000000000000000000000000081525081565b34801561077b57600080fd5b50610306611a72565b34801561079057600080fd5b5061035b61079f3660046129a6565b61271b6020526000908152604090205460ff1681565b3480156107c157600080fd5b5061035b6107d03660046129a6565b6001600160a01b0316600090815261271b602052604090205460ff1690565b3480156107fb57600080fd5b5061030661080a366004612e88565b611acf565b34801561081b57600080fd5b5061030661082a366004612e25565b611b3c565b34801561083b57600080fd5b5061030661084a366004612e25565b611c9a565b34801561085b57600080fd5b506127175461035b9062010000900460ff1681565b34801561087c57600080fd5b5061030661088b366004612919565b611d90565b34801561089c57600080fd5b506127175461035b90610100900460ff1681565b3480156108bc57600080fd5b5061035b6108cb366004612eb6565b611df2565b3480156108dc57600080fd5b506103066108eb366004612ee4565b611f74565b3480156108fc57600080fd5b5061030661090b3660046129a6565b6121c2565b34801561091c57600080fd5b506103286127165481565b34801561093357600080fd5b5061032861138781565b600681106109925760405162461bcd60e51b815260206004820152600560248201527f4d6178203500000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b61271754610100900460ff166109a757600080fd5b61138781600161271354030111156109ec5760405162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b6044820152606401610989565b3461271454820214610a2e5760405162461bcd60e51b815260206004820152600b60248201526a57726f6e6720707269636560a81b6044820152606401610989565b60008167ffffffffffffffff811115610a4957610a49612aaf565b604051908082528060200260200182016040528015610a72578160200160208202803683370190505b50905060005b82811015610ab4578061271354610a8f9190612f63565b828281518110610aa157610aa1612f7b565b6020908102919091010152600101610a78565b50610acf338260405180602001604052806000815250612293565b5061271380549091019055565b6000826001600160a01b0316610af183611743565b6001600160a01b031603610b03575060015b92915050565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610b035750610b038261241b565b612712546001600160a01b03163314610b905760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b9190612f91565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190612faa565b5050565b612712546001600160a01b03163314610cd75760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b612717805461ff001981166101009182900460ff1615909102179055565b606081612713541015610d4a5760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e006044820152606401610989565b612717546301000000900460ff1615610d9057612718610d69836124b4565b604051602001610d7a92919061301d565b6040516020818303038152906040529050919050565b6127188054610d9e90612fc7565b80601f0160208091040260200160405190810160405280929190818152602001828054610dca90612fc7565b8015610e175780601f10610dec57610100808354040283529160200191610e17565b820191906000526020600020905b815481529060010190602001808311610dfa57829003601f168201915b50505050509050919050565b612712546001600160a01b03163314610e6c5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b612719805460ff1916911515919091179055565b600080610e96612712546001600160a01b031690565b9150620f424061271a5484610eab91906130c3565b610eb591906130f8565b90509250929050565b825182518114610f105760405162461bcd60e51b815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610989565b336001600160a01b0387161480610f2c5750610f2c8633611df2565b610f785760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610989565b60005b81811015611078576000858281518110610f9757610f97612f7b565b602002602001015190506000858381518110610fb557610fb5612f7b565b602002602001015190508060011461100f5760405162461bcd60e51b815260206004820152601560248201527f43616e206f6e6c79207472616e73666572206f6e6500000000000000000000006044820152606401610989565b886001600160a01b031661102283611743565b6001600160a01b0316146110645760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610989565b61106e82896125f1565b5050600101610f7b565b50846001600160a01b0316866001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110c892919061310c565b60405180910390a46001600160a01b0385163b156111695760405163bc197c8160e01b808252906001600160a01b0387169063bc197c81906111169033908b908a908a908a90600401613131565b6020604051808303816000875af1158015611135573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611159919061318f565b6001600160e01b03191614611176565b6001600160a01b03851615155b6111b55760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610989565b505050505050565b612712546001600160a01b031633146112065760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b6112103347612643565b565b612712546001600160a01b0316331461125b5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b61138761271354111561129b5760405162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b6044820152606401610989565b60506127155411156112da5760405162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b6044820152606401610989565b61271580549060006112eb836131ac565b919050555061130d8161271354604051806020016040528060008152506126e6565b5061271380546001019055565b815181516060919081146113705760405162461bcd60e51b815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610989565b835167ffffffffffffffff81111561138a5761138a612aaf565b6040519080825280602002602001820160405280156113b3578160200160208202803683370190505b50915060005b81811015611422576113fd8582815181106113d6576113d6612f7b565b60200260200101518583815181106113f0576113f0612f7b565b6020026020010151610adc565b83828151811061140f5761140f612f7b565b60209081029190910101526001016113b9565b505092915050565b612712546001600160a01b031633146114735760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b6127175462010000900460ff16156114f25760405162461bcd60e51b8152602060048201526024808201527f436f6e7472616374206d65746164617461206d6574686f647320617265206c6f60448201527f636b6564000000000000000000000000000000000000000000000000000000006064820152608401610989565b6114ff6127188383612880565b5050612717805463ff0000001916630100000017905550565b6127165481111561156b5760405162461bcd60e51b815260206004820152600560248201527f4d6178203c0000000000000000000000000000000000000000000000000000006044820152606401610989565b6127175460ff166115be5760405162461bcd60e51b815260206004820152600e60248201527f50524553414c455f434c4f5345440000000000000000000000000000000000006044820152606401610989565b6127165461271c54600090815261271d602090815260408083203384529091529020546115ec908390612f63565b111561163a5760405162461bcd60e51b815260206004820152600c60248201527f4558434545445f414c4c4f4300000000000000000000000000000000000000006044820152606401610989565b6113878161271354011061167b5760405162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b6044820152606401610989565b34612714548202146116bd5760405162461bcd60e51b815260206004820152600b60248201526a57726f6e6720707269636560a81b6044820152606401610989565b60008167ffffffffffffffff8111156116d8576116d8612aaf565b604051908082528060200260200182016040528015611701578160200160208202803683370190505b50905060005b82811015610ab457806127135461171e9190612f63565b82828151811061173057611730612f7b565b6020908102919091010152600101611707565b60008082612711811061175857611758612f7b565b01546001600160a01b031692915050565b612712546001600160a01b031633146117b25760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b6112106000612820565b612712546001600160a01b031633146118055760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b60005b8181101561191f57600083838381811061182457611824612f7b565b905060200201602081019061183991906129a6565b90506001600160a01b0381166118805760405162461bcd60e51b815260206004820152600c60248201526b4e554c4c5f4144445245535360a01b6044820152606401610989565b6001600160a01b038116600090815261271b602052604090205460ff16156118ea5760405162461bcd60e51b815260206004820152600f60248201527f4455504c49434154455f454e54525900000000000000000000000000000000006044820152606401610989565b6001600160a01b0316600090815261271b60205260409020805460ff1916600117905580611917816131ac565b915050611808565b505050565b612712546001600160a01b0316331461196d5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b612717805460ff19811660ff90911615179055565b612712546001600160a01b031633146119cb5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b620f42408110611a1d5760405162461bcd60e51b815260206004820152600d60248201527f4d757374206265203c20316536000000000000000000000000000000000000006044820152606401610989565b61271a55565b612712546001600160a01b03163314611a6c5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b61271455565b612712546001600160a01b03163314611abb5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b612717805462ff0000191662010000179055565b336000818152612711602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b612712546001600160a01b03163314611b855760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b61271354611387908201600019011115611bcc5760405162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b6044820152606401610989565b6127155460509082011115611c235760405162461bcd60e51b815260206004820152600660248201527f46696e69746f00000000000000000000000000000000000000000000000000006044820152606401610989565b60005b8181101561191f576127158054906000611c3f836131ac565b9190505550611c87838383818110611c5957611c59612f7b565b9050602002016020810190611c6e91906129a6565b61271354604051806020016040528060008152506126e6565b6127138054600190810190915501611c26565b612712546001600160a01b03163314611ce35760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b60005b8181101561191f576000838383818110611d0257611d02612f7b565b9050602002016020810190611d1791906129a6565b90506001600160a01b038116611d5e5760405162461bcd60e51b815260206004820152600c60248201526b4e554c4c5f4144445245535360a01b6044820152606401610989565b6001600160a01b0316600090815261271b60205260409020805460ff1916905580611d88816131ac565b915050611ce6565b612712546001600160a01b03163314611dd95760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b61271c54611de8906001612f63565b61271c5561271655565b6127195460009060ff1615611f425746600403611ea45760405163c455279160e01b81526001600160a01b03848116600483015283169073f57b2c51ded3a29e6891aba85459d600256cf3179063c455279190602401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8991906131c5565b6001600160a01b031603611e9f57506001610b03565b611f42565b46600103611f425760405163c455279160e01b81526001600160a01b03848116600483015283169073a5409ec958c83c3f309868babaca7c86dcb077c19063c455279190602401602060405180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c91906131c5565b6001600160a01b031603611f4257506001610b03565b6001600160a01b038084166000908152612711602090815260408083209386168352929052205460ff165b9392505050565b336001600160a01b0386161480611f905750611f908533611df2565b611fdc5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610989565b8160011461202c5760405162461bcd60e51b815260206004820152601560248201527f43616e206f6e6c79207472616e73666572206f6e6500000000000000000000006044820152606401610989565b846001600160a01b031661203f84611743565b6001600160a01b0316146120815760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610989565b61208b83856125f1565b60408051848152602081018490526001600160a01b03808716929088169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b1561216f5760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e619061211c9033908a908990899089906004016131e2565b6020604051808303816000875af115801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f919061318f565b6001600160e01b0319161461217c565b6001600160a01b03841615155b6121bb5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610989565b5050505050565b612712546001600160a01b0316331461220b5760405162461bcd60e51b815260206004820181905260248201526000805160206132518339815191526044820152606401610989565b6001600160a01b0381166122875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610989565b61229081612820565b50565b815160008167ffffffffffffffff8111156122b0576122b0612aaf565b6040519080825280602002602001820160405280156122d9578160200160208202803683370190505b50905060005b828110156123325760018282815181106122fb576122fb612f7b565b60200260200101818152505061232a85828151811061231c5761231c612f7b565b6020026020010151876125f1565b6001016122df565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878560405161238392919061310c565b60405180910390a46001600160a01b0385163b156123d25760405163bc197c8160e01b808252906001600160a01b0387169063bc197c819061211c9033906000908a9088908b90600401613131565b6001600160a01b0385166121bb5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610989565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061247e57507fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b80610b035750506001600160e01b0319167f0e89341c000000000000000000000000000000000000000000000000000000001490565b6060816000036124f757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612521578061250b816131ac565b915061251a9050600a836130f8565b91506124fb565b60008167ffffffffffffffff81111561253c5761253c612aaf565b6040519080825280601f01601f191660200182016040528015612566576020820181803683370190505b5090505b84156125e95761257b600183613225565b9150612588600a8661323c565b612593906030612f63565b60f81b8183815181106125a8576125a8612f7b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506125e2600a866130f8565b945061256a565b949350505050565b806001600160a01b0316600083612711811061260f5761260f612f7b565b015473ffffffffffffffffffffffffffffffffffffffff191617600083612711811061263d5761263d612f7b565b01555050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612690576040519150601f19603f3d011682016040523d82523d6000602084013e612695565b606091505b505090508061191f5760405162461bcd60e51b815260206004820152601060248201527f5472616e73666572206661696c65642e000000000000000000000000000000006044820152606401610989565b6126f082846125f1565b60408051838152600160208201526001600160a01b0385169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0383163b156127d45760405163f23a6e6160e01b808252906001600160a01b0385169063f23a6e6190612781903390600090889060019089906004016131e2565b6020604051808303816000875af11580156127a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c4919061318f565b6001600160e01b031916146127e1565b6001600160a01b03831615155b61191f5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610989565b61271280546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805461288c90612fc7565b90600052602060002090601f0160209004810192826128ae57600085556128f4565b82601f106128c75782800160ff198235161785556128f4565b828001600101855582156128f4579182015b828111156128f45782358255916020019190600101906128d9565b50612900929150612904565b5090565b5b808211156129005760008155600101612905565b60006020828403121561292b57600080fd5b5035919050565b6001600160a01b038116811461229057600080fd5b6000806040838503121561295a57600080fd5b823561296581612932565b946020939093013593505050565b6001600160e01b03198116811461229057600080fd5b60006020828403121561299b57600080fd5b8135611f6d81612973565b6000602082840312156129b857600080fd5b8135611f6d81612932565b600080604083850312156129d657600080fd5b8235915060208301356129e881612932565b809150509250929050565b60005b83811015612a0e5781810151838201526020016129f6565b83811115612a1d576000848401525b50505050565b60008151808452612a3b8160208601602086016129f3565b601f01601f19169290920160200192915050565b602081526000611f6d6020830184612a23565b801515811461229057600080fd5b600060208284031215612a8257600080fd5b8135611f6d81612a62565b60008060408385031215612aa057600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612aee57612aee612aaf565b604052919050565b600067ffffffffffffffff821115612b1057612b10612aaf565b5060051b60200190565b600082601f830112612b2b57600080fd5b81356020612b40612b3b83612af6565b612ac5565b82815260059290921b84018101918181019086841115612b5f57600080fd5b8286015b84811015612b7a5780358352918301918301612b63565b509695505050505050565b600082601f830112612b9657600080fd5b813567ffffffffffffffff811115612bb057612bb0612aaf565b612bc3601f8201601f1916602001612ac5565b818152846020838601011115612bd857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215612c0d57600080fd5b8535612c1881612932565b94506020860135612c2881612932565b9350604086013567ffffffffffffffff80821115612c4557600080fd5b612c5189838a01612b1a565b94506060880135915080821115612c6757600080fd5b612c7389838a01612b1a565b93506080880135915080821115612c8957600080fd5b50612c9688828901612b85565b9150509295509295909350565b60008060408385031215612cb657600080fd5b823567ffffffffffffffff80821115612cce57600080fd5b818501915085601f830112612ce257600080fd5b81356020612cf2612b3b83612af6565b82815260059290921b84018101918181019089841115612d1157600080fd5b948201945b83861015612d38578535612d2981612932565b82529482019490820190612d16565b96505086013592505080821115612d4e57600080fd5b50612d5b85828601612b1a565b9150509250929050565b600081518084526020808501945080840160005b83811015612d9557815187529582019590820190600101612d79565b509495945050505050565b602081526000611f6d6020830184612d65565b60008060208385031215612dc657600080fd5b823567ffffffffffffffff80821115612dde57600080fd5b818501915085601f830112612df257600080fd5b813581811115612e0157600080fd5b866020828501011115612e1357600080fd5b60209290920196919550909350505050565b60008060208385031215612e3857600080fd5b823567ffffffffffffffff80821115612e5057600080fd5b818501915085601f830112612e6457600080fd5b813581811115612e7357600080fd5b8660208260051b8501011115612e1357600080fd5b60008060408385031215612e9b57600080fd5b8235612ea681612932565b915060208301356129e881612a62565b60008060408385031215612ec957600080fd5b8235612ed481612932565b915060208301356129e881612932565b600080600080600060a08688031215612efc57600080fd5b8535612f0781612932565b94506020860135612f1781612932565b93506040860135925060608601359150608086013567ffffffffffffffff811115612f4157600080fd5b612c9688828901612b85565b634e487b7160e01b600052601160045260246000fd5b60008219821115612f7657612f76612f4d565b500190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612fa357600080fd5b5051919050565b600060208284031215612fbc57600080fd5b8151611f6d81612a62565b600181811c90821680612fdb57607f821691505b602082108103612ffb57634e487b7160e01b600052602260045260246000fd5b50919050565b600081516130138185602086016129f3565b9290920192915050565b600080845481600182811c91508083168061303957607f831692505b6020808410820361305857634e487b7160e01b86526022600452602486fd5b81801561306c576001811461307d576130aa565b60ff198616895284890196506130aa565b60008b81526020902060005b868110156130a25781548b820152908501908301613089565b505084890196505b5050505050506130ba8185613001565b95945050505050565b60008160001904831182151516156130dd576130dd612f4d565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613107576131076130e2565b500490565b60408152600061311f6040830185612d65565b82810360208401526130ba8185612d65565b60006001600160a01b03808816835280871660208401525060a0604083015261315d60a0830186612d65565b828103606084015261316f8186612d65565b905082810360808401526131838185612a23565b98975050505050505050565b6000602082840312156131a157600080fd5b8151611f6d81612973565b6000600182016131be576131be612f4d565b5060010190565b6000602082840312156131d757600080fd5b8151611f6d81612932565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261321a60a0830184612a23565b979650505050505050565b60008282101561323757613237612f4d565b500390565b60008261324b5761324b6130e2565b50069056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220ccda1fc8626599de3a30be669e0eaf854b479045711d4d59049c720f1114f6f064736f6c634300080d0033

Deployed Bytecode Sourcemap

476:8001:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2521:805;;;;;;:::i;:::-;;:::i;:::-;;4676:174:2;;;;;;;;;;-1:-1:-1;4676:174:2;;;;;:::i;:::-;;:::i;:::-;;;824:25:7;;;812:2;797:18;4676:174:2;;;;;;;;5501:198:0;;;;;;;;;;-1:-1:-1;5501:198:0;;;;;:::i;:::-;;:::i;:::-;;;1457:14:7;;1450:22;1432:41;;1420:2;1405:18;5501:198:0;1292:187:7;8328:146:0;;;;;;;;;;-1:-1:-1;8328:146:0;;;;;:::i;:::-;;:::i;7325:84::-;;;;;;;;;;;;;:::i;1344:76::-;;;;;;;;;;-1:-1:-1;1344:76:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1161:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5149:344::-;;;;;;;;;;-1:-1:-1;5149:344:0;;;;;:::i;:::-;;:::i;6946:103::-;;;;;;;;;;-1:-1:-1;6946:103:0;;;;;:::i;:::-;;:::i;4977:164::-;;;;;;;;;;-1:-1:-1;5103:15:0;;-1:-1:-1;;5103:19:0;4977:164;;764:27;;;;;;;;;;;;;;;;5707:226;;;;;;;;;;-1:-1:-1;5707:226:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3658:55:7;;;3640:74;;3745:2;3730:18;;3723:34;;;;3613:18;5707:226:0;3466:297:7;3397:1271:2;;;;;;;;;;-1:-1:-1;3397:1271:2;;;;;:::i;:::-;;:::i;8030:103:0:-;;;;;;;;;;;;;:::i;1543:336::-;;;;;;;;;;-1:-1:-1;1543:336:0;;;;;:::i;:::-;;:::i;4858:660:2:-;;;;;;;;;;-1:-1:-1;4858:660:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;926:28:0:-;;;;;;;;;;-1:-1:-1;926:28:0;;;;;;;;;;;6804:134;;;;;;;;;;-1:-1:-1;6804:134:0;;;;;:::i;:::-;;:::i;4016:953::-;;;;;;:::i;:::-;;:::i;7536:143::-;;;;;;;;;;-1:-1:-1;7536:143:0;;;;;:::i;:::-;7653:11;;7604:7;7631:34;;;:21;:34;;;;;;;;-1:-1:-1;;;;;7631:40:0;;;;;;;;;;;7536:143;1723:160:2;;;;;;;;;;-1:-1:-1;1723:160:2;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9642:55:7;;;9624:74;;9612:2;9597:18;1723:160:2;9478:226:7;1650:94:4;;;;;;;;;;;;;:::i;3334:356:0:-;;;;;;;;;;-1:-1:-1;3334:356:0;;;;;:::i;:::-;;:::i;7923:93::-;;;;;;;;;;;;;:::i;7057:168::-;;;;;;;;;;-1:-1:-1;7057:168:0;;;;;:::i;:::-;;:::i;844:23::-;;;;;;;;;;-1:-1:-1;844:23:0;;;;;;;;1311:26;;;;;;;;;;;;;;;;718:33;;;;;;;;;;;;;;;;999:87:4;;;;;;;;;;-1:-1:-1;1072:6:4;;-1:-1:-1;;;;;1072:6:4;999:87;;7233:84:0;;;;;;;;;;-1:-1:-1;7233:84:0;;;;;:::i;:::-;;:::i;1214:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7838:73;;;;;;;;;;;;;:::i;1260:44::-;;;;;;;;;;-1:-1:-1;1260:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7417:107;;;;;;;;;;-1:-1:-1;7417:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;7498:18:0;7474:4;7498:18;;;:12;:18;;;;;;;;;7417:107;2397:208:2;;;;;;;;;;-1:-1:-1;2397:208:2;;;;;:::i;:::-;;:::i;1887:626:0:-;;;;;;;;;;-1:-1:-1;1887:626:0;;;;;:::i;:::-;;:::i;3700:308::-;;;;;;;;;;-1:-1:-1;3700:308:0;;;;;:::i;:::-;;:::i;901:18::-;;;;;;;;;;-1:-1:-1;901:18:0;;;;;;;;;;;7687:143;;;;;;;;;;-1:-1:-1;7687:143:0;;;;;:::i;:::-;;:::i;874:20::-;;;;;;;;;;-1:-1:-1;874:20:0;;;;;;;;;;;5941:839;;;;;;;;;;-1:-1:-1;5941:839:0;;;;;:::i;:::-;;:::i;2613:776:2:-;;;;;;;;;;-1:-1:-1;2613:776:2;;;;;:::i;:::-;;:::i;1899:192:4:-;;;;;;;;;;-1:-1:-1;1899:192:4;;;;;:::i;:::-;;:::i;798:39:0:-;;;;;;;;;;;;;;;;630:41;;;;;;;;;;;;667:4;630:41;;2521:805;2606:1;2598:5;:9;2590:27;;;;-1:-1:-1;;;2590:27:0;;12050:2:7;2590:27:0;;;12032:21:7;12089:1;12069:18;;;12062:29;12127:7;12107:18;;;12100:35;12152:18;;2590:27:0;;;;;;;;;2636:8;;;;;;;2628:17;;;;;;667:4;2742:5;2738:1;2720:15;;:19;:27;:41;;2712:62;;;;-1:-1:-1;;;2712:62:0;;12383:2:7;2712:62:0;;;12365:21:7;12422:1;12402:18;;;12395:29;-1:-1:-1;;;12440:18:7;;;12433:38;12488:18;;2712:62:0;12181:331:7;2712:62:0;2814:9;2805:5;;2797;:13;:26;2789:50;;;;-1:-1:-1;;;2789:50:0;;12719:2:7;2789:50:0;;;12701:21:7;12758:2;12738:18;;;12731:30;-1:-1:-1;;;12777:18:7;;;12770:41;12828:18;;2789:50:0;12517:335:7;2789:50:0;2863:20;2900:5;2886:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2886:20:0;;2863:43;;2924:9;2919:252;2943:5;2939:1;:9;2919:252;;;2994:1;2976:15;;:19;;;;:::i;:::-;2967:3;2971:1;2967:6;;;;;;;;:::i;:::-;;;;;;;;;;:28;3141:3;;2919:252;;;;3183:31;3194:10;3206:3;3183:31;;;;;;;;;;;;:10;:31::i;:::-;-1:-1:-1;3283:15:0;:24;;;;;;;2521:805::o;4676:174:2:-;4751:15;4798:5;-1:-1:-1;;;;;4783:20:2;:11;4791:2;4783:7;:11::i;:::-;-1:-1:-1;;;;;4783:20:2;;4779:64;;-1:-1:-1;4830:1:2;4779:64;4676:174;;;;:::o;5501:198:0:-;5586:4;-1:-1:-1;;;;;;5610:41:0;;5625:26;5610:41;;:81;;;5655:36;5679:11;5655:23;:36::i;8328:146::-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;8430:35:0::1;::::0;;;;8459:4:::1;8430:35;::::0;::::1;9624:74:7::0;-1:-1:-1;;;;;8398:19:0;::::1;::::0;::::1;::::0;8418:10:::1;::::0;8398:19;;8430:20:::1;::::0;9597:18:7;;8430:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8398:68;::::0;-1:-1:-1;;;;;;8398:68:0::1;::::0;;;;;;-1:-1:-1;;;;;3658:55:7;;;8398:68:0::1;::::0;::::1;3640:74:7::0;3730:18;;;3723:34;3613:18;;8398:68:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8328:146:::0;:::o;7325:84::-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;7393:8:0::1;::::0;;-1:-1:-1;;7381:20:0;::::1;7393:8;::::0;;;::::1;;;7392:9;7381:20:::0;;::::1;;::::0;;7325:84::o;5149:344::-;5209:13;5262:7;5243:15;;:26;;5235:70;;;;-1:-1:-1;;;5235:70:0;;14370:2:7;5235:70:0;;;14352:21:7;14409:2;14389:18;;;14382:30;14448:33;14428:18;;;14421:61;14499:18;;5235:70:0;14168:355:7;5235:70:0;5320:8;;;;;;;5316:160;;;5376:13;5391:18;:7;:16;:18::i;:::-;5359:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5345:66;;5149:344;;;:::o;5316:160::-;5451:13;5443:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5149:344;;;:::o;6946:103::-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;7018:15:0::1;:23:::0;;-1:-1:-1;;7018:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;6946:103::o;5707:226::-;5779:16;5797:21;5842:7;1072:6:4;;-1:-1:-1;;;;;1072:6:4;;999:87;5842:7:0;5831:18;;5916:9;5889:23;;5877:9;:35;;;;:::i;:::-;5876:49;;;;:::i;:::-;5860:65;;5707:226;;;;;:::o;3397:1271:2:-;3619:10;;3680:14;;3667:27;;3659:55;;;;-1:-1:-1;;;3659:55:2;;17211:2:7;3659:55:2;;;17193:21:7;17250:2;17230:18;;;17223:30;17289:17;17269:18;;;17262:45;17324:18;;3659:55:2;17009:339:7;3659:55:2;3735:10;-1:-1:-1;;;;;3735:18:2;;;;:56;;;3757:34;3774:4;3780:10;3757:16;:34::i;:::-;3727:83;;;;-1:-1:-1;;;3727:83:2;;17555:2:7;3727:83:2;;;17537:21:7;17594:2;17574:18;;;17567:30;17633:16;17613:18;;;17606:44;17667:18;;3727:83:2;17353:338:7;3727:83:2;3828:9;3823:455;3847:9;3843:1;:13;3823:455;;;3875:10;3888:3;3892:1;3888:6;;;;;;;;:::i;:::-;;;;;;;3875:19;;3909:14;3926:7;3934:1;3926:10;;;;;;;;:::i;:::-;;;;;;;3909:27;;3973:6;3983:1;3973:11;3965:45;;;;-1:-1:-1;;;3965:45:2;;17898:2:7;3965:45:2;;;17880:21:7;17937:2;17917:18;;;17910:30;17976:23;17956:18;;;17949:51;18017:18;;3965:45:2;17696:345:7;3965:45:2;4048:4;-1:-1:-1;;;;;4033:19:2;:11;4041:2;4033:7;:11::i;:::-;-1:-1:-1;;;;;4033:19:2;;4025:41;;;;-1:-1:-1;;;4025:41:2;;18248:2:7;4025:41:2;;;18230:21:7;18287:1;18267:18;;;18260:29;-1:-1:-1;;;18305:18:7;;;18298:39;18354:18;;4025:41:2;18046:332:7;4025:41:2;4083:17;4093:2;4097;4083:9;:17::i;:::-;-1:-1:-1;;4248:3:2;;3823:455;;;;4327:2;-1:-1:-1;;;;;4295:49:2;4321:4;-1:-1:-1;;;;;4295:49:2;4309:10;-1:-1:-1;;;;;4295:49:2;;4331:3;4336:7;4295:49;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;4379:14:2;;;:19;:237;;4454:85;;-1:-1:-1;;;4454:85:2;;;4564:52;-1:-1:-1;;;;;4454:47:2;;;4564:52;;4454:85;;4502:10;;4514:4;;4520:3;;4525:7;;4534:4;;4454:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;4454:162:2;;4379:237;;;-1:-1:-1;;;;;4418:16:2;;;;4379:237;4357:303;;;;-1:-1:-1;;;4357:303:2;;20175:2:7;4357:303:2;;;20157:21:7;20214:2;20194:18;;;20187:30;-1:-1:-1;;;20233:18:7;;;20226:46;20289:18;;4357:303:2;19973:340:7;4357:303:2;3588:1080;3397:1271;;;;;:::o;8030:103:0:-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;8080:45:0::1;8091:10;8103:21;8080:10;:45::i;:::-;8030:103::o:0;1543:336::-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;667:4:0::1;1607:15;;:29;;1599:50;;;::::0;-1:-1:-1;;;1599:50:0;;12383:2:7;1599:50:0::1;::::0;::::1;12365:21:7::0;12422:1;12402:18;;;12395:29;-1:-1:-1;;;12440:18:7;;;12433:38;12488:18;;1599:50:0::1;12181:331:7::0;1599:50:0::1;709:2;1668:12;;:27;;1660:48;;;::::0;-1:-1:-1;;;1660:48:0;;12383:2:7;1660:48:0::1;::::0;::::1;12365:21:7::0;12422:1;12402:18;;;12395:29;-1:-1:-1;;;12440:18:7;;;12433:38;12488:18;;1660:48:0::1;12181:331:7::0;1660:48:0::1;1719:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;;;;;;1744:30;1750:2;1754:15;;1744:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;-1:-1:-1::0;1843:15:0::1;:17:::0;;::::1;;::::0;;1543:336::o;4858:660:2:-;5060:13;;5127:10;;4994:25;;5060:13;5111:26;;5103:54;;;;-1:-1:-1;;;5103:54:2;;17211:2:7;5103:54:2;;;17193:21:7;17250:2;17230:18;;;17223:30;17289:17;17269:18;;;17262:45;17324:18;;5103:54:2;17009:339:7;5103:54:2;5195:6;:13;5181:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5181:28:2;;5170:39;;5385:9;5380:120;5404:12;5400:1;:16;5380:120;;;5456:28;5466:6;5473:1;5466:9;;;;;;;;:::i;:::-;;;;;;;5477:3;5481:1;5477:6;;;;;;;;:::i;:::-;;;;;;;5456:9;:28::i;:::-;5442:8;5451:1;5442:11;;;;;;;;:::i;:::-;;;;;;;;;;:42;5418:3;;5380:120;;;;5026:492;4858:660;;;;:::o;6804:134:0:-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;1468:6:0::1;::::0;;;::::1;;;1467:7;1459:56;;;::::0;-1:-1:-1;;;1459:56:0;;20660:2:7;1459:56:0::1;::::0;::::1;20642:21:7::0;20699:2;20679:18;;;20672:30;20738:34;20718:18;;;20711:62;20809:6;20789:18;;;20782:34;20833:19;;1459:56:0::1;20458:400:7::0;1459:56:0::1;6885:19:::2;:13;6901:3:::0;;6885:19:::2;:::i;:::-;-1:-1:-1::0;;6915:8:0::2;:15:::0;;-1:-1:-1;;6915:15:0::2;::::0;::::2;::::0;;-1:-1:-1;6804:134:0:o;4016:953::-;4098:20;;4089:5;:29;;4081:47;;;;-1:-1:-1;;;4081:47:0;;21065:2:7;4081:47:0;;;21047:21:7;21104:1;21084:18;;;21077:29;21142:7;21122:18;;;21115:35;21167:18;;4081:47:0;20863:328:7;4081:47:0;4147:11;;;;4139:38;;;;-1:-1:-1;;;4139:38:0;;21398:2:7;4139:38:0;;;21380:21:7;21437:2;21417:18;;;21410:30;21476:16;21456:18;;;21449:44;21510:18;;4139:38:0;21196:338:7;4139:38:0;4254:20;;4218:11;;4196:34;;;;:21;:34;;;;;;;;4231:10;4196:46;;;;;;;;:54;;4245:5;;4196:54;:::i;:::-;:78;;4188:103;;;;-1:-1:-1;;;4188:103:0;;21741:2:7;4188:103:0;;;21723:21:7;21780:2;21760:18;;;21753:30;21819:14;21799:18;;;21792:42;21851:18;;4188:103:0;21539:336:7;4188:103:0;667:4;4386:5;4368:15;;:23;:36;4360:57;;;;-1:-1:-1;;;4360:57:0;;12383:2:7;4360:57:0;;;12365:21:7;12422:1;12402:18;;;12395:29;-1:-1:-1;;;12440:18:7;;;12433:38;12488:18;;4360:57:0;12181:331:7;4360:57:0;4457:9;4448:5;;4440;:13;:26;4432:50;;;;-1:-1:-1;;;4432:50:0;;12719:2:7;4432:50:0;;;12701:21:7;12758:2;12738:18;;;12731:30;-1:-1:-1;;;12777:18:7;;;12770:41;12828:18;;4432:50:0;12517:335:7;4432:50:0;4506:20;4543:5;4529:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4529:20:0;;4506:43;;4567:9;4562:252;4586:5;4582:1;:9;4562:252;;;4637:1;4619:15;;:19;;;;:::i;:::-;4610:3;4614:1;4610:6;;;;;;;;:::i;:::-;;;;;;;;;;:28;4784:3;;4562:252;;1723:160:2;1773:7;1816:6;1823:2;1816:10;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1816:57:2;;1723:160;-1:-1:-1;;1723:160:2:o;1650:94:4:-;1072:6;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;1715:21:::1;1733:1;1715:9;:21::i;3334:356:0:-:0;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;3422:9:0::1;3418:262;3437:18:::0;;::::1;3418:262;;;3477:13;3493:7;;3501:1;3493:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3477:26:::0;-1:-1:-1;;;;;;3526:19:0;::::1;3518:44;;;::::0;-1:-1:-1;;;3518:44:0;;22082:2:7;3518:44:0::1;::::0;::::1;22064:21:7::0;22121:2;22101:18;;;22094:30;-1:-1:-1;;;22140:18:7;;;22133:42;22192:18;;3518:44:0::1;21880:336:7::0;3518:44:0::1;-1:-1:-1::0;;;;;3586:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;3585:20;3577:48;;;::::0;-1:-1:-1;;;3577:48:0;;22423:2:7;3577:48:0::1;::::0;::::1;22405:21:7::0;22462:2;22442:18;;;22435:30;22501:17;22481:18;;;22474:45;22536:18;;3577:48:0::1;22221:339:7::0;3577:48:0::1;-1:-1:-1::0;;;;;3642:19:0::1;;::::0;;;:12:::1;:19;::::0;;;;:26;;-1:-1:-1;;3642:26:0::1;3664:4;3642:26;::::0;;3457:3;::::1;::::0;::::1;:::i;:::-;;;;3418:262;;;;3334:356:::0;;:::o;7923:93::-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;7997:11:0::1;::::0;;-1:-1:-1;;7982:26:0;::::1;7997:11;::::0;;::::1;7996:12;7982:26;::::0;;7923:93::o;7057:168::-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;7145:9:0::1;7134:8;:20;7126:46;;;::::0;-1:-1:-1;;;7126:46:0;;22767:2:7;7126:46:0::1;::::0;::::1;22749:21:7::0;22806:2;22786:18;;;22779:30;22845:15;22825:18;;;22818:43;22878:18;;7126:46:0::1;22565:337:7::0;7126:46:0::1;7183:23;:34:::0;7057:168::o;7233:84::-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;7295:5:0::1;:14:::0;7233:84::o;7838:73::-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;7890:6:0::1;:13:::0;;-1:-1:-1;;7890:13:0::1;::::0;::::1;::::0;;7838:73::o;2397:208:2:-;2501:10;2483:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;2483:39:2;;;;;;;;;;;;:50;;-1:-1:-1;;2483:50:2;;;;;;;;;;2551:46;;1432:41:7;;;2483:39:2;;2501:10;2551:46;;1405:18:7;2551:46:2;;;;;;;2397:208;;:::o;1887:626:0:-;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;2026:15:0::1;::::0;667:4:::1;2026:31:::0;;;-1:-1:-1;;2026:31:0;:45:::1;;2018:66;;;::::0;-1:-1:-1;;;2018:66:0;;12383:2:7;2018:66:0::1;::::0;::::1;12365:21:7::0;12422:1;12402:18;;;12395:29;-1:-1:-1;;;12440:18:7;;;12433:38;12488:18;;2018:66:0::1;12181:331:7::0;2018:66:0::1;2107:12;::::0;709:2:::1;2107:24:::0;;::::1;:39;;2099:58;;;::::0;-1:-1:-1;;;2099:58:0;;23109:2:7;2099:58:0::1;::::0;::::1;23091:21:7::0;23148:1;23128:18;;;23121:29;23186:8;23166:18;;;23159:36;23212:18;;2099:58:0::1;22907:329:7::0;2099:58:0::1;2186:9;2181:325;2201:13:::0;;::::1;2181:325;;;2232:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;;;;;;2261:33;2267:2;;2270:1;2267:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2274:15;;2261:33;;;;;;;;;;;::::0;:5:::1;:33::i;:::-;2440:15;:17:::0;;::::1;::::0;;::::1;::::0;;;2476:3:::1;2181:325;;3700:308:::0;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;3793:9:0::1;3789:212;3808:18:::0;;::::1;3789:212;;;3848:13;3864:7;;3872:1;3864:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3848:26:::0;-1:-1:-1;;;;;;3897:19:0;::::1;3889:44;;;::::0;-1:-1:-1;;;3889:44:0;;22082:2:7;3889:44:0::1;::::0;::::1;22064:21:7::0;22121:2;22101:18;;;22094:30;-1:-1:-1;;;22140:18:7;;;22133:42;22192:18;;3889:44:0::1;21880:336:7::0;3889:44:0::1;-1:-1:-1::0;;;;;3962:19:0::1;3984:5;3962:19:::0;;;:12:::1;:19;::::0;;;;:27;;-1:-1:-1;;3962:27:0::1;::::0;;3828:3;::::1;::::0;::::1;:::i;:::-;;;;3789:212;;7687:143:::0;1072:6:4;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;7765:11:0::1;::::0;:15:::1;::::0;7779:1:::1;7765:15;:::i;:::-;7751:11;:29:::0;7791:20:::1;:31:::0;7687:143::o;5941:839::-;6261:15;;6030:4;;6261:15;;6257:457;;;6297:13;6314:1;6297:18;6293:410;;6340:72;;-1:-1:-1;;;6340:72:0;;-1:-1:-1;;;;;9642:55:7;;;6340:72:0;;;9624:74:7;6340:84:0;;;6354:42;;6340:65;;9597:18:7;;6340:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6340:84:0;;6336:144;;-1:-1:-1;6456:4:0;6449:11;;6336:144;6293:410;;;6505:13;6522:1;6505:18;6501:202;;6548:72;;-1:-1:-1;;;6548:72:0;;-1:-1:-1;;;;;9642:55:7;;;6548:72:0;;;9624:74:7;6548:84:0;;;6562:42;;6548:65;;9597:18:7;;6548:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6548:84:0;;6544:144;;-1:-1:-1;6664:4:0;6657:11;;6544:144;-1:-1:-1;;;;;2347:24:2;;;2323:4;2347:24;;;:17;:24;;;;;;;;:34;;;;;;;;;;;;6733:39:0;6726:46;5941:839;-1:-1:-1;;;5941:839:0:o;2613:776:2:-;2798:10;-1:-1:-1;;;;;2798:18:2;;;;:56;;;2820:34;2837:4;2843:10;2820:16;:34::i;:::-;2790:83;;;;-1:-1:-1;;;2790:83:2;;17555:2:7;2790:83:2;;;17537:21:7;17594:2;17574:18;;;17567:30;17633:16;17613:18;;;17606:44;17667:18;;2790:83:2;17353:338:7;2790:83:2;2892:6;2902:1;2892:11;2884:45;;;;-1:-1:-1;;;2884:45:2;;17898:2:7;2884:45:2;;;17880:21:7;17937:2;17917:18;;;17910:30;17976:23;17956:18;;;17949:51;18017:18;;2884:45:2;17696:345:7;2884:45:2;2963:4;-1:-1:-1;;;;;2948:19:2;:11;2956:2;2948:7;:11::i;:::-;-1:-1:-1;;;;;2948:19:2;;2940:41;;;;-1:-1:-1;;;2940:41:2;;18248:2:7;2940:41:2;;;18230:21:7;18287:1;18267:18;;;18260:29;-1:-1:-1;;;18305:18:7;;;18298:39;18354:18;;2940:41:2;18046:332:7;2940:41:2;2994:17;3004:2;3008;2994:9;:17::i;:::-;3029:48;;;23671:25:7;;;23727:2;23712:18;;23705:34;;;-1:-1:-1;;;;;3029:48:2;;;;;;;;3044:10;;3029:48;;23644:18:7;3029:48:2;;;;;;;-1:-1:-1;;;;;3112:14:2;;;:19;:225;;3187:78;;-1:-1:-1;;;3187:78:2;;;3290:47;-1:-1:-1;;;;;3187:42:2;;;3290:47;;3187:78;;3230:10;;3242:4;;3248:2;;3252:6;;3260:4;;3187:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3187:150:2;;3112:225;;;-1:-1:-1;;;;;3151:16:2;;;;3112:225;3090:291;;;;-1:-1:-1;;;3090:291:2;;20175:2:7;3090:291:2;;;20157:21:7;20214:2;20194:18;;;20187:30;-1:-1:-1;;;20233:18:7;;;20226:46;20289:18;;3090:291:2;19973:340:7;3090:291:2;2613:776;;;;;:::o;1899:192:4:-;1072:6;;-1:-1:-1;;;;;1072:6:4;682:10:1;1219:23:4;1211:68;;;;-1:-1:-1;;;1211:68:4;;13570:2:7;1211:68:4;;;13552:21:7;;;13589:18;;;13582:30;-1:-1:-1;;;;;;;;;;;13628:18:7;;;13621:62;13700:18;;1211:68:4;13368:356:7;1211:68:4;-1:-1:-1;;;;;1988:22:4;::::1;1980:73;;;::::0;-1:-1:-1;;;1980:73:4;;24552:2:7;1980:73:4::1;::::0;::::1;24534:21:7::0;24591:2;24571:18;;;24564:30;24630:34;24610:18;;;24603:62;24701:8;24681:18;;;24674:36;24727:19;;1980:73:4::1;24350:402:7::0;1980:73:4::1;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;6774:931:2:-;6921:10;;6901:17;6921:10;6986:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6986:24:2;;6959:51;;7028:9;7023:280;7047:9;7043:1;:13;7023:280;;;7088:1;7075:7;7083:1;7075:10;;;;;;;;:::i;:::-;;;;;;:14;;;;;7104:21;7114:3;7118:1;7114:6;;;;;;;;:::i;:::-;;;;;;;7122:2;7104:9;:21::i;:::-;7273:3;;7023:280;;;;7358:2;-1:-1:-1;;;;;7320:55:2;7354:1;-1:-1:-1;;;;;7320:55:2;7334:10;-1:-1:-1;;;;;7320:55:2;;7362:3;7367:7;7320:55;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;7410:14:2;;;:19;:243;;7485:91;;-1:-1:-1;;;7485:91:2;;;7601:52;-1:-1:-1;;;;;7485:47:2;;;7601:52;;7485:91;;7533:10;;7553:1;;7557:3;;7562:7;;7571:4;;7485:91;;;:::i;7410:243::-;-1:-1:-1;;;;;7449:16:2;;7388:309;;;;-1:-1:-1;;;7388:309:2;;20175:2:7;7388:309:2;;;20157:21:7;20214:2;20194:18;;;20187:30;-1:-1:-1;;;20233:18:7;;;20226:46;20289:18;;7388:309:2;19973:340:7;5713:345:2;5789:4;5826:25;-1:-1:-1;;;;;;5826:25:2;;;;:101;;-1:-1:-1;5902:25:2;-1:-1:-1;;;;;;5902:25:2;;;5826:101;:178;;;-1:-1:-1;;;;;;;;5979:25:2;;;;5713:345::o;288:723:6:-;344:13;565:5;574:1;565:10;561:53;;-1:-1:-1;;592:10:6;;;;;;;;;;;;;;;;;;288:723::o;561:53::-;639:5;624:12;680:78;687:9;;680:78;;713:8;;;;:::i;:::-;;-1:-1:-1;736:10:6;;-1:-1:-1;744:2:6;736:10;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;790:17:6;;768:39;;818:154;825:10;;818:154;;852:11;862:1;852:11;;:::i;:::-;;-1:-1:-1;921:10:6;929:2;921:5;:10;:::i;:::-;908:24;;:2;:24;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;949:11:6;958:2;949:11;;:::i;:::-;;;818:154;;;996:6;288:723;-1:-1:-1;;;;288:723:6:o;1893:147:2:-;2029:2;-1:-1:-1;;;;;1968:64:2;1969:6;1976:2;1969:10;;;;;;;:::i;:::-;;;-1:-1:-1;;1969:48:2;1968:64;1955:6;1962:2;1955:10;;;;;;;:::i;:::-;;:77;-1:-1:-1;;1893:147:2:o;8141:181:0:-;8216:12;8234:8;-1:-1:-1;;;;;8234:13:0;8255:7;8234:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8215:52;;;8286:7;8278:36;;;;-1:-1:-1;;;8278:36:0;;25416:2:7;8278:36:0;;;25398:21:7;25455:2;25435:18;;;25428:30;25494:18;25474;;;25467:46;25530:18;;8278:36:0;25214:340:7;6259:507:2;6371:17;6381:2;6385;6371:9;:17::i;:::-;6404:49;;;23671:25:7;;;6451:1:2;23727:2:7;23712:18;;23705:34;-1:-1:-1;;;;;6404:49:2;;;6439:1;;6419:10;;6404:49;;23644:18:7;6404:49:2;;;;;;;-1:-1:-1;;;;;6488:14:2;;;:19;:226;;6563:79;;-1:-1:-1;;;6563:79:2;;;6667:47;-1:-1:-1;;;;;6563:42:2;;;6667:47;;6563:79;;6606:10;;6626:1;;6630:2;;6634:1;;6637:4;;6563:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;6563:151:2;;6488:226;;;-1:-1:-1;;;;;6527:16:2;;;;6488:226;6466:292;;;;-1:-1:-1;;;6466:292:2;;20175:2:7;6466:292:2;;;20157:21:7;20214:2;20194:18;;;20187:30;-1:-1:-1;;;20233:18:7;;;20226:46;20289:18;;6466:292:2;19973:340:7;2099:173:4;2174:6;;;-1:-1:-1;;;;;2191:17:4;;;-1:-1:-1;;2191:17:4;;;;;;;2224:40;;2174:6;;;2191:17;2174:6;;2224:40;;2155:16;;2224:40;2144:128;2099:173;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:180:7;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:7;;14:180;-1:-1:-1;14:180:7:o;199:154::-;-1:-1:-1;;;;;278:5:7;274:54;267:5;264:65;254:93;;343:1;340;333:12;358:315;426:6;434;487:2;475:9;466:7;462:23;458:32;455:52;;;503:1;500;493:12;455:52;542:9;529:23;561:31;586:5;561:31;:::i;:::-;611:5;663:2;648:18;;;;635:32;;-1:-1:-1;;;358:315:7:o;860:177::-;-1:-1:-1;;;;;;938:5:7;934:78;927:5;924:89;914:117;;1027:1;1024;1017:12;1042:245;1100:6;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:30;1251:5;1227:30;:::i;1484:262::-;1558:6;1611:2;1599:9;1590:7;1586:23;1582:32;1579:52;;;1627:1;1624;1617:12;1579:52;1666:9;1653:23;1685:31;1710:5;1685:31;:::i;1751:315::-;1819:6;1827;1880:2;1868:9;1859:7;1855:23;1851:32;1848:52;;;1896:1;1893;1886:12;1848:52;1932:9;1919:23;1909:33;;1992:2;1981:9;1977:18;1964:32;2005:31;2030:5;2005:31;:::i;:::-;2055:5;2045:15;;;1751:315;;;;;:::o;2071:258::-;2143:1;2153:113;2167:6;2164:1;2161:13;2153:113;;;2243:11;;;2237:18;2224:11;;;2217:39;2189:2;2182:10;2153:113;;;2284:6;2281:1;2278:13;2275:48;;;2319:1;2310:6;2305:3;2301:16;2294:27;2275:48;;2071:258;;;:::o;2334:269::-;2387:3;2425:5;2419:12;2452:6;2447:3;2440:19;2468:63;2524:6;2517:4;2512:3;2508:14;2501:4;2494:5;2490:16;2468:63;:::i;:::-;2585:2;2564:15;-1:-1:-1;;2560:29:7;2551:39;;;;2592:4;2547:50;;2334:269;-1:-1:-1;;2334:269:7:o;2608:231::-;2757:2;2746:9;2739:21;2720:4;2777:56;2829:2;2818:9;2814:18;2806:6;2777:56;:::i;2844:118::-;2930:5;2923:13;2916:21;2909:5;2906:32;2896:60;;2952:1;2949;2942:12;2967:241;3023:6;3076:2;3064:9;3055:7;3051:23;3047:32;3044:52;;;3092:1;3089;3082:12;3044:52;3131:9;3118:23;3150:28;3172:5;3150:28;:::i;3213:248::-;3281:6;3289;3342:2;3330:9;3321:7;3317:23;3313:32;3310:52;;;3358:1;3355;3348:12;3310:52;-1:-1:-1;;3381:23:7;;;3451:2;3436:18;;;3423:32;;-1:-1:-1;3213:248:7:o;3768:184::-;-1:-1:-1;;;3817:1:7;3810:88;3917:4;3914:1;3907:15;3941:4;3938:1;3931:15;3957:275;4028:2;4022:9;4093:2;4074:13;;-1:-1:-1;;4070:27:7;4058:40;;4128:18;4113:34;;4149:22;;;4110:62;4107:88;;;4175:18;;:::i;:::-;4211:2;4204:22;3957:275;;-1:-1:-1;3957:275:7:o;4237:183::-;4297:4;4330:18;4322:6;4319:30;4316:56;;;4352:18;;:::i;:::-;-1:-1:-1;4397:1:7;4393:14;4409:4;4389:25;;4237:183::o;4425:662::-;4479:5;4532:3;4525:4;4517:6;4513:17;4509:27;4499:55;;4550:1;4547;4540:12;4499:55;4586:6;4573:20;4612:4;4636:60;4652:43;4692:2;4652:43;:::i;:::-;4636:60;:::i;:::-;4730:15;;;4816:1;4812:10;;;;4800:23;;4796:32;;;4761:12;;;;4840:15;;;4837:35;;;4868:1;4865;4858:12;4837:35;4904:2;4896:6;4892:15;4916:142;4932:6;4927:3;4924:15;4916:142;;;4998:17;;4986:30;;5036:12;;;;4949;;4916:142;;;-1:-1:-1;5076:5:7;4425:662;-1:-1:-1;;;;;;4425:662:7:o;5092:530::-;5134:5;5187:3;5180:4;5172:6;5168:17;5164:27;5154:55;;5205:1;5202;5195:12;5154:55;5241:6;5228:20;5267:18;5263:2;5260:26;5257:52;;;5289:18;;:::i;:::-;5333:55;5376:2;5357:13;;-1:-1:-1;;5353:27:7;5382:4;5349:38;5333:55;:::i;:::-;5413:2;5404:7;5397:19;5459:3;5452:4;5447:2;5439:6;5435:15;5431:26;5428:35;5425:55;;;5476:1;5473;5466:12;5425:55;5541:2;5534:4;5526:6;5522:17;5515:4;5506:7;5502:18;5489:55;5589:1;5564:16;;;5582:4;5560:27;5553:38;;;;5568:7;5092:530;-1:-1:-1;;;5092:530:7:o;5627:1071::-;5781:6;5789;5797;5805;5813;5866:3;5854:9;5845:7;5841:23;5837:33;5834:53;;;5883:1;5880;5873:12;5834:53;5922:9;5909:23;5941:31;5966:5;5941:31;:::i;:::-;5991:5;-1:-1:-1;6048:2:7;6033:18;;6020:32;6061:33;6020:32;6061:33;:::i;:::-;6113:7;-1:-1:-1;6171:2:7;6156:18;;6143:32;6194:18;6224:14;;;6221:34;;;6251:1;6248;6241:12;6221:34;6274:61;6327:7;6318:6;6307:9;6303:22;6274:61;:::i;:::-;6264:71;;6388:2;6377:9;6373:18;6360:32;6344:48;;6417:2;6407:8;6404:16;6401:36;;;6433:1;6430;6423:12;6401:36;6456:63;6511:7;6500:8;6489:9;6485:24;6456:63;:::i;:::-;6446:73;;6572:3;6561:9;6557:19;6544:33;6528:49;;6602:2;6592:8;6589:16;6586:36;;;6618:1;6615;6608:12;6586:36;;6641:51;6684:7;6673:8;6662:9;6658:24;6641:51;:::i;:::-;6631:61;;;5627:1071;;;;;;;;:::o;6955:1215::-;7073:6;7081;7134:2;7122:9;7113:7;7109:23;7105:32;7102:52;;;7150:1;7147;7140:12;7102:52;7190:9;7177:23;7219:18;7260:2;7252:6;7249:14;7246:34;;;7276:1;7273;7266:12;7246:34;7314:6;7303:9;7299:22;7289:32;;7359:7;7352:4;7348:2;7344:13;7340:27;7330:55;;7381:1;7378;7371:12;7330:55;7417:2;7404:16;7439:4;7463:60;7479:43;7519:2;7479:43;:::i;7463:60::-;7557:15;;;7639:1;7635:10;;;;7627:19;;7623:28;;;7588:12;;;;7663:19;;;7660:39;;;7695:1;7692;7685:12;7660:39;7719:11;;;;7739:217;7755:6;7750:3;7747:15;7739:217;;;7835:3;7822:17;7852:31;7877:5;7852:31;:::i;:::-;7896:18;;7772:12;;;;7934;;;;7739:217;;;7975:5;-1:-1:-1;;8018:18:7;;8005:32;;-1:-1:-1;;8049:16:7;;;8046:36;;;8078:1;8075;8068:12;8046:36;;8101:63;8156:7;8145:8;8134:9;8130:24;8101:63;:::i;:::-;8091:73;;;6955:1215;;;;;:::o;8175:435::-;8228:3;8266:5;8260:12;8293:6;8288:3;8281:19;8319:4;8348:2;8343:3;8339:12;8332:19;;8385:2;8378:5;8374:14;8406:1;8416:169;8430:6;8427:1;8424:13;8416:169;;;8491:13;;8479:26;;8525:12;;;;8560:15;;;;8452:1;8445:9;8416:169;;;-1:-1:-1;8601:3:7;;8175:435;-1:-1:-1;;;;;8175:435:7:o;8615:261::-;8794:2;8783:9;8776:21;8757:4;8814:56;8866:2;8855:9;8851:18;8843:6;8814:56;:::i;8881:592::-;8952:6;8960;9013:2;9001:9;8992:7;8988:23;8984:32;8981:52;;;9029:1;9026;9019:12;8981:52;9069:9;9056:23;9098:18;9139:2;9131:6;9128:14;9125:34;;;9155:1;9152;9145:12;9125:34;9193:6;9182:9;9178:22;9168:32;;9238:7;9231:4;9227:2;9223:13;9219:27;9209:55;;9260:1;9257;9250:12;9209:55;9300:2;9287:16;9326:2;9318:6;9315:14;9312:34;;;9342:1;9339;9332:12;9312:34;9387:7;9382:2;9373:6;9369:2;9365:15;9361:24;9358:37;9355:57;;;9408:1;9405;9398:12;9355:57;9439:2;9431:11;;;;;9461:6;;-1:-1:-1;8881:592:7;;-1:-1:-1;;;;8881:592:7:o;9709:615::-;9795:6;9803;9856:2;9844:9;9835:7;9831:23;9827:32;9824:52;;;9872:1;9869;9862:12;9824:52;9912:9;9899:23;9941:18;9982:2;9974:6;9971:14;9968:34;;;9998:1;9995;9988:12;9968:34;10036:6;10025:9;10021:22;10011:32;;10081:7;10074:4;10070:2;10066:13;10062:27;10052:55;;10103:1;10100;10093:12;10052:55;10143:2;10130:16;10169:2;10161:6;10158:14;10155:34;;;10185:1;10182;10175:12;10155:34;10238:7;10233:2;10223:6;10220:1;10216:14;10212:2;10208:23;10204:32;10201:45;10198:65;;;10259:1;10256;10249:12;10329:382;10394:6;10402;10455:2;10443:9;10434:7;10430:23;10426:32;10423:52;;;10471:1;10468;10461:12;10423:52;10510:9;10497:23;10529:31;10554:5;10529:31;:::i;:::-;10579:5;-1:-1:-1;10636:2:7;10621:18;;10608:32;10649:30;10608:32;10649:30;:::i;10716:388::-;10784:6;10792;10845:2;10833:9;10824:7;10820:23;10816:32;10813:52;;;10861:1;10858;10851:12;10813:52;10900:9;10887:23;10919:31;10944:5;10919:31;:::i;:::-;10969:5;-1:-1:-1;11026:2:7;11011:18;;10998:32;11039:33;10998:32;11039:33;:::i;11109:734::-;11213:6;11221;11229;11237;11245;11298:3;11286:9;11277:7;11273:23;11269:33;11266:53;;;11315:1;11312;11305:12;11266:53;11354:9;11341:23;11373:31;11398:5;11373:31;:::i;:::-;11423:5;-1:-1:-1;11480:2:7;11465:18;;11452:32;11493:33;11452:32;11493:33;:::i;:::-;11545:7;-1:-1:-1;11599:2:7;11584:18;;11571:32;;-1:-1:-1;11650:2:7;11635:18;;11622:32;;-1:-1:-1;11705:3:7;11690:19;;11677:33;11733:18;11722:30;;11719:50;;;11765:1;11762;11755:12;11719:50;11788:49;11829:7;11820:6;11809:9;11805:22;11788:49;:::i;12857:184::-;-1:-1:-1;;;12906:1:7;12899:88;13006:4;13003:1;12996:15;13030:4;13027:1;13020:15;13046:128;13086:3;13117:1;13113:6;13110:1;13107:13;13104:39;;;13123:18;;:::i;:::-;-1:-1:-1;13159:9:7;;13046:128::o;13179:184::-;-1:-1:-1;;;13228:1:7;13221:88;13328:4;13325:1;13318:15;13352:4;13349:1;13342:15;13729:184;13799:6;13852:2;13840:9;13831:7;13827:23;13823:32;13820:52;;;13868:1;13865;13858:12;13820:52;-1:-1:-1;13891:16:7;;13729:184;-1:-1:-1;13729:184:7:o;13918:245::-;13985:6;14038:2;14026:9;14017:7;14013:23;14009:32;14006:52;;;14054:1;14051;14044:12;14006:52;14086:9;14080:16;14105:28;14127:5;14105:28;:::i;14528:437::-;14607:1;14603:12;;;;14650;;;14671:61;;14725:4;14717:6;14713:17;14703:27;;14671:61;14778:2;14770:6;14767:14;14747:18;14744:38;14741:218;;-1:-1:-1;;;14812:1:7;14805:88;14916:4;14913:1;14906:15;14944:4;14941:1;14934:15;14741:218;;14528:437;;;:::o;15096:185::-;15138:3;15176:5;15170:12;15191:52;15236:6;15231:3;15224:4;15217:5;15213:16;15191:52;:::i;:::-;15259:16;;;;;15096:185;-1:-1:-1;;15096:185:7:o;15286:1231::-;15462:3;15491:1;15524:6;15518:13;15554:3;15576:1;15604:9;15600:2;15596:18;15586:28;;15664:2;15653:9;15649:18;15686;15676:61;;15730:4;15722:6;15718:17;15708:27;;15676:61;15756:2;15804;15796:6;15793:14;15773:18;15770:38;15767:222;;-1:-1:-1;;;15838:3:7;15831:90;15944:4;15941:1;15934:15;15974:4;15969:3;15962:17;15767:222;16005:18;16032:104;;;;16150:1;16145:320;;;;15998:467;;16032:104;-1:-1:-1;;16065:24:7;;16053:37;;16110:16;;;;-1:-1:-1;16032:104:7;;16145:320;15043:1;15036:14;;;15080:4;15067:18;;16240:1;16254:165;16268:6;16265:1;16262:13;16254:165;;;16346:14;;16333:11;;;16326:35;16389:16;;;;16283:10;;16254:165;;;16258:3;;16448:6;16443:3;16439:16;16432:23;;15998:467;;;;;;;16481:30;16507:3;16499:6;16481:30;:::i;:::-;16474:37;15286:1231;-1:-1:-1;;;;;15286:1231:7:o;16522:168::-;16562:7;16628:1;16624;16620:6;16616:14;16613:1;16610:21;16605:1;16598:9;16591:17;16587:45;16584:71;;;16635:18;;:::i;:::-;-1:-1:-1;16675:9:7;;16522:168::o;16695:184::-;-1:-1:-1;;;16744:1:7;16737:88;16844:4;16841:1;16834:15;16868:4;16865:1;16858:15;16884:120;16924:1;16950;16940:35;;16955:18;;:::i;:::-;-1:-1:-1;16989:9:7;;16884:120::o;18383:465::-;18640:2;18629:9;18622:21;18603:4;18666:56;18718:2;18707:9;18703:18;18695:6;18666:56;:::i;:::-;18770:9;18762:6;18758:22;18753:2;18742:9;18738:18;18731:50;18798:44;18835:6;18827;18798:44;:::i;18853:861::-;19175:4;-1:-1:-1;;;;;19285:2:7;19277:6;19273:15;19262:9;19255:34;19337:2;19329:6;19325:15;19320:2;19309:9;19305:18;19298:43;;19377:3;19372:2;19361:9;19357:18;19350:31;19404:57;19456:3;19445:9;19441:19;19433:6;19404:57;:::i;:::-;19509:9;19501:6;19497:22;19492:2;19481:9;19477:18;19470:50;19543:44;19580:6;19572;19543:44;:::i;:::-;19529:58;;19636:9;19628:6;19624:22;19618:3;19607:9;19603:19;19596:51;19664:44;19701:6;19693;19664:44;:::i;:::-;19656:52;18853:861;-1:-1:-1;;;;;;;;18853:861:7:o;19719:249::-;19788:6;19841:2;19829:9;19820:7;19816:23;19812:32;19809:52;;;19857:1;19854;19847:12;19809:52;19889:9;19883:16;19908:30;19932:5;19908:30;:::i;20318:135::-;20357:3;20378:17;;;20375:43;;20398:18;;:::i;:::-;-1:-1:-1;20445:1:7;20434:13;;20318:135::o;23241:251::-;23311:6;23364:2;23352:9;23343:7;23339:23;23335:32;23332:52;;;23380:1;23377;23370:12;23332:52;23412:9;23406:16;23431:31;23456:5;23431:31;:::i;23750:595::-;23972:4;-1:-1:-1;;;;;24082:2:7;24074:6;24070:15;24059:9;24052:34;24134:2;24126:6;24122:15;24117:2;24106:9;24102:18;24095:43;;24174:6;24169:2;24158:9;24154:18;24147:34;24217:6;24212:2;24201:9;24197:18;24190:34;24261:3;24255;24244:9;24240:19;24233:32;24282:57;24334:3;24323:9;24319:19;24311:6;24282:57;:::i;:::-;24274:65;23750:595;-1:-1:-1;;;;;;;23750:595:7:o;24757:125::-;24797:4;24825:1;24822;24819:8;24816:34;;;24830:18;;:::i;:::-;-1:-1:-1;24867:9:7;;24757:125::o;24887:112::-;24919:1;24945;24935:35;;24950:18;;:::i;:::-;-1:-1:-1;24984:9:7;;24887:112::o

Swarm Source

ipfs://ccda1fc8626599de3a30be669e0eaf854b479045711d4d59049c720f1114f6f0
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.