ETH Price: $2,520.62 (-0.34%)

Token

ButouToChouNoSymphonia RyureiNaChouNoFragment (BR)
 

Overview

Max Total Supply

131 BR

Holders

57

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 BR
0x88191462ecb2219f93d5e8091b8d2311ddc96a62
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:
ButouRyurei

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-07
*/

// SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
pragma solidity ^0.8.0;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;

interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
pragma solidity ^0.8.0;
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
// File: @openzeppelin/contracts/utils/Strings.sol
pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    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);
    }

    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);
    }

    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);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.8.0;

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
pragma solidity ^0.8.0;

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/Context.sol
pragma solidity ^0.8.0;

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: @openzeppelin/contracts/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    string private _name;
    string private _symbol;
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
pragma solidity ^0.8.0;

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
    mapping(uint256 => uint256) private _ownedTokensIndex;
    uint256[] private _allTokens;
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];
        uint256 lastTokenId = _allTokens[lastTokenIndex];
        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex;
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    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: @openzeppelin/contracts/interfaces/IERC2981.sol
pragma solidity ^0.8.0;

interface IERC2981 is IERC165 {
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

// File: @openzeppelin/contracts/token/common/ERC2981.sol

pragma solidity ^0.8.0;

abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
        address receiver;
        uint96 royaltyFraction;
    }

    RoyaltyInfo private _defaultRoyaltyInfo;
    mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;

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

    function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) {
        RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId];

        if (royalty.receiver == address(0)) {
            royalty = _defaultRoyaltyInfo;
        }

        uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator();

        return (royalty.receiver, royaltyAmount);
    }

    function _feeDenominator() internal pure virtual returns (uint96) {
        return 10000;
    }

    function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: invalid receiver");

        _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);
    }


    function _deleteDefaultRoyalty() internal virtual {
        delete _defaultRoyaltyInfo;
    }

    function _setTokenRoyalty(
        uint256 tokenId,
        address receiver,
        uint96 feeNumerator
    ) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: Invalid parameters");

        _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);
    }

    function _resetTokenRoyalty(uint256 tokenId) internal virtual {
        delete _tokenRoyaltyInfo[tokenId];
    }
}

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

pragma solidity ^0.8.13;

/**
 * @title  OperatorFilterer
 * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another
 *         registrant's entries in the OperatorFilterRegistry.
 * @dev    This smart contract is meant to be inherited by token contracts so they can use the following:
 *         - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.
 *         - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.
 */
abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);
    bool public operatorFilteringEnabled = true;

    IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
        // will not revert, but the contract will need to be registered with the registry once it is deployed in
        // order for the modifier to filter addresses.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (subscribe) {
                OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    OPERATOR_FILTER_REGISTRY.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator(address from) virtual {
        // Check registry code length to facilitate testing in environments without a deployed registry.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0 && operatorFilteringEnabled) {
            // Allow spending tokens from addresses with balance
            // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
            // from an EOA.
            if (from == msg.sender) {
                _;
                return;
            }
            if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), msg.sender)) {
                revert OperatorNotAllowed(msg.sender);
            }
        }
        _;
    }

    modifier onlyAllowedOperatorApproval(address operator) virtual {
        // Check registry code length to facilitate testing in environments without a deployed registry.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0 && operatorFilteringEnabled) {
            if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
                revert OperatorNotAllowed(operator);
            }
        }
        _;
    }
}


pragma solidity ^0.8.13;

abstract contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

//merkle
pragma solidity ^0.8.0;

library MerkleProof {

    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }
}

pragma solidity >=0.7.0 <0.9.0;

contract ButouRyurei is ERC721Enumerable, Ownable, ERC2981, ReentrancyGuard, DefaultOperatorFilterer{
  using Strings for uint256;
  string baseURI;
  string public baseExtension = ".json";
  uint256 public cost = 0.01 ether;
  uint256 public maxSupply = 200;
  uint256 public maxMintAmount = 2;
  bool public paused = false;
  bool public publicSaleStart = false;
  bool public preSaleStart = false;
  mapping(address => uint256) public addressMintedBalance;
  bytes32 public merkleRoot;//merkle

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    _setDefaultRoyalty(0xAB5696CABe69BA2E5214dD01Cf5A3Ed1ECa0d599, 1000);
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }
  
  function supportsInterface(bytes4 interfaceId) public view override(ERC721Enumerable, ERC2981) returns (bool) {
    return super.supportsInterface(interfaceId);
  }

  function mint(uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(publicSaleStart);
    require(!paused);
    require(_mintAmount > 0);
    require(msg.value >= cost * _mintAmount, "Value sent is not correct");
    require(_mintAmount <= maxMintAmount);
    require(maxMintAmount >= addressMintedBalance[msg.sender] + _mintAmount);
    require(supply + _mintAmount <= maxSupply);
    
    for (uint256 i = 1; i <= _mintAmount; i++) {
        addressMintedBalance[msg.sender]++;
      _safeMint(msg.sender, supply + i);
    }
  }

  function preMint(uint256 _mintAmount, bytes32[] calldata _merkleProof) public payable nonReentrant {
    bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
    uint256 supply = totalSupply();
    require(!paused);
    require(preSaleStart);
    require(_mintAmount > 0);
    require(msg.value >= cost * _mintAmount, "Value sent is not correct");
    require(_mintAmount <= maxMintAmount);
    require(maxMintAmount >= addressMintedBalance[msg.sender] + _mintAmount);
    require(supply + _mintAmount <= maxSupply);
    require(MerkleProof.verify(_merkleProof, merkleRoot, leaf),"Invalid Merkle Proof");
    
    for (uint256 i = 1; i <= _mintAmount; i++) {
        addressMintedBalance[msg.sender]++;
      _safeMint(msg.sender, supply + i);
    }
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }

  function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
    merkleRoot = _merkleRoot;
  }

  function ownerMint(address to, uint256 _mintAmount) public onlyOwner {
    uint256 supply = totalSupply();
    require(_mintAmount > 0);
    require(supply + _mintAmount <= maxSupply);
    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(to, supply + i);
    }
  }

  function withdrawRevenueShare() external onlyOwner {
        uint256 sendAmount = address(this).balance;
        address founder1 = payable(0xAB5696CABe69BA2E5214dD01Cf5A3Ed1ECa0d599);
        address founder2 = payable(0x8473Cbb2116Ae8d5901cE2c23C0A107602563963);
        address platformer = payable(0x48A23fb6f56F9c14D29FA47A4f45b3a03167dDAe);
        address engineer = payable(0xeDAcc663C23ba31398550E17b1ccF47cd9Da1888);
        bool success;
        
        (success, ) = founder1.call{value: (sendAmount * 400/1000)}("");
        require(success, "Failed to withdraw Ether");
        (success, ) = founder2.call{value: (sendAmount * 400/1000)}("");
        require(success, "Failed to withdraw Ether");
        (success, ) = platformer.call{value: (sendAmount * 100/1000)}("");
        require(success, "Failed to withdraw Ether");
        (success, ) = engineer.call{value: (sendAmount * 100/1000)}("");
        require(success, "Failed to withdraw Ether");
    }
  
  function setCost(uint256 _newCost) public onlyOwner {
    cost = _newCost;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmount = _newmaxMintAmount;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
  function switchPreSale(bool _state) external onlyOwner {
    preSaleStart = _state;
  }
  function switchPubSale(bool _state) external onlyOwner {
    publicSaleStart = _state;
  }

  function setDefaultRoyalty(address receiver, uint96 feeNumerator) external onlyOwner {
    _setDefaultRoyalty(receiver, feeNumerator);
  }

  function deleteDefaultRoyalty() external onlyOwner {
    _deleteDefaultRoyalty();
  }

  function setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator) external onlyOwner {
    _setTokenRoyalty(tokenId, receiver, feeNumerator);
  }

  function resetTokenRoyalty(uint256 tokenId) external onlyOwner {
    _resetTokenRoyalty(tokenId);
  }

  //OPENSEA.OPERATORFilterer
  function setOperatorFilteringEnabled(bool value) external onlyOwner {
    operatorFilteringEnabled = value;
  }

  function setApprovalForAll(address operator, bool approved) public override(ERC721, IERC721) onlyAllowedOperatorApproval(operator) {
    super.setApprovalForAll(operator, approved);
  }

  function approve(address operator, uint256 tokenId) public override(ERC721, IERC721) onlyAllowedOperatorApproval(operator) {
    super.approve(operator, tokenId);
  }

  function transferFrom(address from, address to, uint256 tokenId) public override(ERC721, IERC721) onlyAllowedOperator(from) {
    super.transferFrom(from, to, tokenId);
  }

  function safeTransferFrom(address from, address to, uint256 tokenId) public override(ERC721, IERC721) onlyAllowedOperator(from) {
    super.safeTransferFrom(from, to, tokenId);
  }

  function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
    public
    override(ERC721, IERC721)
    onlyAllowedOperator(from)
  {
    super.safeTransferFrom(from, to, tokenId, data);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deleteDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operatorFilteringEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSaleStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"resetTokenRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setOperatorFilteringEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setTokenRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"switchPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"switchPubSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRevenueShare","outputs":[],"stateMutability":"nonpayable","type":"function"}]

600e805460ff1916600117905560c06040526005608081905264173539b7b760d91b60a09081526200003591601091906200043e565b50662386f26fc1000060115560c860125560026013556014805462ffffff191690553480156200006457600080fd5b5060405162003aef38038062003aef8339810160408190526200008791620005b1565b733cc6cdda760b79bafa08df41ecfa224f810dceb6600184848160009080519060200190620000b89291906200043e565b508051620000ce9060019060208401906200043e565b505050620000eb620000e56200026e60201b60201c565b62000272565b6001600d556daaeb6d7670e522a718067333cd4e3b15620002355780156200018357604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200016457600080fd5b505af115801562000179573d6000803e3d6000fd5b5050505062000235565b6001600160a01b03821615620001d45760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af29039060440162000149565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b1580156200021b57600080fd5b505af115801562000230573d6000803e3d6000fd5b505050505b5062000243905081620002c4565b6200026573ab5696cabe69ba2e5214dd01cf5a3ed1eca0d5996103e86200033d565b5050506200067e565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620003245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b80516200033990600f9060208401906200043e565b5050565b6127106001600160601b0382161115620003ad5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084016200031b565b6001600160a01b038216620004055760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200031b565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600b55565b8280546200044c9062000642565b90600052602060002090601f016020900481019282620004705760008555620004bb565b82601f106200048b57805160ff1916838001178555620004bb565b82800160010185558215620004bb579182015b82811115620004bb5782518255916020019190600101906200049e565b50620004c9929150620004cd565b5090565b5b80821115620004c95760008155600101620004ce565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200050c57600080fd5b81516001600160401b0380821115620005295762000529620004e4565b604051601f8301601f19908116603f01168101908282118183101715620005545762000554620004e4565b816040528381526020925086838588010111156200057157600080fd5b600091505b8382101562000595578582018301518183018401529082019062000576565b83821115620005a75760008385830101525b9695505050505050565b600080600060608486031215620005c757600080fd5b83516001600160401b0380821115620005df57600080fd5b620005ed87838801620004fa565b945060208601519150808211156200060457600080fd5b6200061287838801620004fa565b935060408601519150808211156200062957600080fd5b506200063886828701620004fa565b9150509250925092565b600181811c908216806200065757607f821691505b6020821081036200067857634e487b7160e01b600052602260045260246000fd5b50919050565b613461806200068e6000396000f3fe6080604052600436106102935760003560e01c80635a5462231161015a578063aa1b103f116100c1578063d5abeb011161007a578063d5abeb01146107c2578063da3ef23f146107d8578063e0b0b2fb146107f8578063e985e9c514610818578063f2fde38b14610861578063fb796e6c1461088157600080fd5b8063aa1b103f14610723578063aa38cd3214610738578063b7c0b8e81461074d578063b88d4fde1461076d578063c66828621461078d578063c87b56dd146107a257600080fd5b80637f00c7a6116101135780637f00c7a61461067d5780638a616bc01461069d5780638da5cb5b146106bd57806395d89b41146106db578063a0712d68146106f0578063a22cb4651461070357600080fd5b80635a546223146105db5780635c975abb146105ee5780636352211e1461060857806370a0823114610628578063715018a6146106485780637cb647591461065d57600080fd5b80632a55205a116101fe57806344a0d68a116101b757806344a0d68a1461051b578063484b973c1461053b5780634f6ccce71461055b578063546a367d1461057b57806355f804b31461059b5780635944c753146105bb57600080fd5b80632a55205a146104455780632eb4a7ab146104845780632f745c591461049a5780633360caa0146104ba57806341f43434146104d957806342842e0e146104fb57600080fd5b80630d5624b3116102505780630d5624b31461038957806313faede6146103a957806318160ddd146103cd57806318cae269146103e2578063239c70ae1461040f57806323b872dd1461042557600080fd5b806301ffc9a71461029857806302329a29146102cd57806304634d8d146102ef57806306fdde031461030f578063081812fc14610331578063095ea7b314610369575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612c35565b61089b565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e8366004612c60565b6108ac565b005b3480156102fb57600080fd5b506102ed61030a366004612cb0565b6108f2565b34801561031b57600080fd5b5061032461092a565b6040516102c49190612d3b565b34801561033d57600080fd5b5061035161034c366004612d4e565b6109bc565b6040516001600160a01b0390911681526020016102c4565b34801561037557600080fd5b506102ed610384366004612d67565b610a51565b34801561039557600080fd5b506014546102b89062010000900460ff1681565b3480156103b557600080fd5b506103bf60115481565b6040519081526020016102c4565b3480156103d957600080fd5b506008546103bf565b3480156103ee57600080fd5b506103bf6103fd366004612d91565b60156020526000908152604090205481565b34801561041b57600080fd5b506103bf60135481565b34801561043157600080fd5b506102ed610440366004612dac565b610b2a565b34801561045157600080fd5b50610465610460366004612de8565b610c13565b604080516001600160a01b0390931683526020830191909152016102c4565b34801561049057600080fd5b506103bf60165481565b3480156104a657600080fd5b506103bf6104b5366004612d67565b610cbf565b3480156104c657600080fd5b506014546102b890610100900460ff1681565b3480156104e557600080fd5b506103516daaeb6d7670e522a718067333cd4e81565b34801561050757600080fd5b506102ed610516366004612dac565b610d55565b34801561052757600080fd5b506102ed610536366004612d4e565b610e33565b34801561054757600080fd5b506102ed610556366004612d67565b610e62565b34801561056757600080fd5b506103bf610576366004612d4e565b610eed565b34801561058757600080fd5b506102ed610596366004612c60565b610f80565b3480156105a757600080fd5b506102ed6105b6366004612e96565b610fc6565b3480156105c757600080fd5b506102ed6105d6366004612edf565b611003565b6102ed6105e9366004612f1b565b611038565b3480156105fa57600080fd5b506014546102b89060ff1681565b34801561061457600080fd5b50610351610623366004612d4e565b61123e565b34801561063457600080fd5b506103bf610643366004612d91565b6112b5565b34801561065457600080fd5b506102ed61133c565b34801561066957600080fd5b506102ed610678366004612d4e565b611372565b34801561068957600080fd5b506102ed610698366004612d4e565b6113a1565b3480156106a957600080fd5b506102ed6106b8366004612d4e565b6113d0565b3480156106c957600080fd5b50600a546001600160a01b0316610351565b3480156106e757600080fd5b5061032461140e565b6102ed6106fe366004612d4e565b61141d565b34801561070f57600080fd5b506102ed61071e366004612f9a565b611550565b34801561072f57600080fd5b506102ed611624565b34801561074457600080fd5b506102ed611658565b34801561075957600080fd5b506102ed610768366004612c60565b6118f2565b34801561077957600080fd5b506102ed610788366004612fd1565b61192f565b34801561079957600080fd5b50610324611a1b565b3480156107ae57600080fd5b506103246107bd366004612d4e565b611aa9565b3480156107ce57600080fd5b506103bf60125481565b3480156107e457600080fd5b506102ed6107f3366004612e96565b611b87565b34801561080457600080fd5b506102ed610813366004612c60565b611bc4565b34801561082457600080fd5b506102b861083336600461304d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561086d57600080fd5b506102ed61087c366004612d91565b611c08565b34801561088d57600080fd5b50600e546102b89060ff1681565b60006108a682611ca0565b92915050565b600a546001600160a01b031633146108df5760405162461bcd60e51b81526004016108d690613077565b60405180910390fd5b6014805460ff1916911515919091179055565b600a546001600160a01b0316331461091c5760405162461bcd60e51b81526004016108d690613077565b6109268282611cc5565b5050565b606060008054610939906130ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610965906130ac565b80156109b25780601f10610987576101008083540402835291602001916109b2565b820191906000526020600020905b81548152906001019060200180831161099557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a355760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108d6565b506000908152600460205260409020546001600160a01b031690565b816daaeb6d7670e522a718067333cd4e3b15801590610a725750600e5460ff165b15610b1b57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af391906130e6565b610b1b57604051633b79c77360e21b81526001600160a01b03821660048201526024016108d6565b610b258383611d7f565b505050565b826daaeb6d7670e522a718067333cd4e3b15801590610b4b5750600e5460ff165b15610c0257336001600160a01b03821603610b7057610b6b848484611e8f565b610c0d565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be391906130e6565b610c0257604051633b79c77360e21b81523360048201526024016108d6565b610c0d848484611e8f565b50505050565b6000828152600c602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610c88575060408051808201909152600b546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610ca7906001600160601b031687613119565b610cb1919061314e565b915196919550909350505050565b6000610cca836112b5565b8210610d2c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016108d6565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b826daaeb6d7670e522a718067333cd4e3b15801590610d765750600e5460ff165b15610e2857336001600160a01b03821603610d9657610b6b848484611ec0565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0991906130e6565b610e2857604051633b79c77360e21b81523360048201526024016108d6565b610c0d848484611ec0565b600a546001600160a01b03163314610e5d5760405162461bcd60e51b81526004016108d690613077565b601155565b600a546001600160a01b03163314610e8c5760405162461bcd60e51b81526004016108d690613077565b6000610e9760085490565b905060008211610ea657600080fd5b601254610eb38383613162565b1115610ebe57600080fd5b60015b828111610c0d57610edb84610ed68385613162565b611edb565b80610ee58161317a565b915050610ec1565b6000610ef860085490565b8210610f5b5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108d6565b60088281548110610f6e57610f6e613193565b90600052602060002001549050919050565b600a546001600160a01b03163314610faa5760405162461bcd60e51b81526004016108d690613077565b60148054911515620100000262ff000019909216919091179055565b600a546001600160a01b03163314610ff05760405162461bcd60e51b81526004016108d690613077565b805161092690600f906020840190612b86565b600a546001600160a01b0316331461102d5760405162461bcd60e51b81526004016108d690613077565b610b25838383611ef5565b611040611fc0565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050600061108460085490565b60145490915060ff161561109757600080fd5b60145462010000900460ff166110ac57600080fd5b600085116110b957600080fd5b846011546110c79190613119565b3410156111125760405162461bcd60e51b815260206004820152601960248201527815985b1d59481cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b60448201526064016108d6565b60135485111561112157600080fd5b3360009081526015602052604090205461113c908690613162565b601354101561114a57600080fd5b6012546111578683613162565b111561116257600080fd5b6111a3848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506016549150859050612019565b6111e65760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21026b2b935b63290283937b7b360611b60448201526064016108d6565b60015b8581116112315733600090815260156020526040812080549161120b8361317a565b9091555061121f905033610ed68385613162565b806112298161317a565b9150506111e9565b505050610b256001600d55565b6000818152600260205260408120546001600160a01b0316806108a65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108d6565b60006001600160a01b0382166113205760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108d6565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146113665760405162461bcd60e51b81526004016108d690613077565b611370600061202f565b565b600a546001600160a01b0316331461139c5760405162461bcd60e51b81526004016108d690613077565b601655565b600a546001600160a01b031633146113cb5760405162461bcd60e51b81526004016108d690613077565b601355565b600a546001600160a01b031633146113fa5760405162461bcd60e51b81526004016108d690613077565b6000908152600c6020526040812055565b50565b606060018054610939906130ac565b600061142860085490565b601454909150610100900460ff1661143f57600080fd5b60145460ff161561144f57600080fd5b6000821161145c57600080fd5b8160115461146a9190613119565b3410156114b55760405162461bcd60e51b815260206004820152601960248201527815985b1d59481cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b60448201526064016108d6565b6013548211156114c457600080fd5b336000908152601560205260409020546114df908390613162565b60135410156114ed57600080fd5b6012546114fa8383613162565b111561150557600080fd5b60015b828111610b255733600090815260156020526040812080549161152a8361317a565b9091555061153e905033610ed68385613162565b806115488161317a565b915050611508565b816daaeb6d7670e522a718067333cd4e3b158015906115715750600e5460ff165b1561161a57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156115ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f291906130e6565b61161a57604051633b79c77360e21b81526001600160a01b03821660048201526024016108d6565b610b258383612081565b600a546001600160a01b0316331461164e5760405162461bcd60e51b81526004016108d690613077565b6113706000600b55565b600a546001600160a01b031633146116825760405162461bcd60e51b81526004016108d690613077565b4773ab5696cabe69ba2e5214dd01cf5a3ed1eca0d599738473cbb2116ae8d5901ce2c23c0a1076025639637348a23fb6f56f9c14d29fa47a4f45b3a03167ddae73edacc663c23ba31398550e17b1ccf47cd9da18886000846103e86116e988610190613119565b6116f3919061314e565b604051600081818185875af1925050503d806000811461172f576040519150601f19603f3d011682016040523d82523d6000602084013e611734565b606091505b505080915050806117575760405162461bcd60e51b81526004016108d6906131a9565b6001600160a01b0384166103e861177088610190613119565b61177a919061314e565b604051600081818185875af1925050503d80600081146117b6576040519150601f19603f3d011682016040523d82523d6000602084013e6117bb565b606091505b505080915050806117de5760405162461bcd60e51b81526004016108d6906131a9565b6001600160a01b0383166103e86117f6886064613119565b611800919061314e565b604051600081818185875af1925050503d806000811461183c576040519150601f19603f3d011682016040523d82523d6000602084013e611841565b606091505b505080915050806118645760405162461bcd60e51b81526004016108d6906131a9565b6001600160a01b0382166103e861187c886064613119565b611886919061314e565b604051600081818185875af1925050503d80600081146118c2576040519150601f19603f3d011682016040523d82523d6000602084013e6118c7565b606091505b505080915050806118ea5760405162461bcd60e51b81526004016108d6906131a9565b505050505050565b600a546001600160a01b0316331461191c5760405162461bcd60e51b81526004016108d690613077565b600e805460ff1916911515919091179055565b836daaeb6d7670e522a718067333cd4e3b158015906119505750600e5460ff165b15611a0857336001600160a01b038216036119765761197185858585612145565b611a14565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e991906130e6565b611a0857604051633b79c77360e21b81523360048201526024016108d6565b611a1485858585612145565b5050505050565b60108054611a28906130ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a54906130ac565b8015611aa15780601f10611a7657610100808354040283529160200191611aa1565b820191906000526020600020905b815481529060010190602001808311611a8457829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b0316611b285760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108d6565b6000611b32612177565b90506000815111611b525760405180602001604052806000815250611b80565b80611b5c84612186565b6010604051602001611b70939291906131e0565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611bb15760405162461bcd60e51b81526004016108d690613077565b8051610926906010906020840190612b86565b600a546001600160a01b03163314611bee5760405162461bcd60e51b81526004016108d690613077565b601480549115156101000261ff0019909216919091179055565b600a546001600160a01b03163314611c325760405162461bcd60e51b81526004016108d690613077565b6001600160a01b038116611c975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d6565b61140b8161202f565b60006001600160e01b0319821663152a902d60e11b14806108a657506108a68261228f565b6127106001600160601b0382161115611cf05760405162461bcd60e51b81526004016108d6906132a3565b6001600160a01b038216611d465760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016108d6565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600b55565b6000611d8a8261123e565b9050806001600160a01b0316836001600160a01b031603611df75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108d6565b336001600160a01b0382161480611e135750611e138133610833565b611e855760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108d6565b610b2583836122b4565b611e993382612322565b611eb55760405162461bcd60e51b81526004016108d6906132ed565b610b25838383612415565b610b258383836040518060200160405280600081525061192f565b6109268282604051806020016040528060008152506125c0565b6127106001600160601b0382161115611f205760405162461bcd60e51b81526004016108d6906132a3565b6001600160a01b038216611f765760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016108d6565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600c90529190942093519051909116600160a01b029116179055565b6002600d54036120125760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108d6565b6002600d55565b60008261202685846125f3565b14949350505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b336001600160a01b038316036120d95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d6565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61214f3383612322565b61216b5760405162461bcd60e51b81526004016108d6906132ed565b610c0d84848484612640565b6060600f8054610939906130ac565b6060816000036121ad5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156121d757806121c18161317a565b91506121d09050600a8361314e565b91506121b1565b60008167ffffffffffffffff8111156121f2576121f2612e0a565b6040519080825280601f01601f19166020018201604052801561221c576020820181803683370190505b5090505b84156122875761223160018361333e565b915061223e600a86613355565b612249906030613162565b60f81b81838151811061225e5761225e613193565b60200101906001600160f81b031916908160001a905350612280600a8661314e565b9450612220565b949350505050565b60006001600160e01b0319821663780e9d6360e01b14806108a657506108a682612673565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122e98261123e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661239b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108d6565b60006123a68361123e565b9050806001600160a01b0316846001600160a01b031614806123e15750836001600160a01b03166123d6846109bc565b6001600160a01b0316145b8061228757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16612287565b826001600160a01b03166124288261123e565b6001600160a01b0316146124905760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108d6565b6001600160a01b0382166124f25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108d6565b6124fd8383836126c3565b6125086000826122b4565b6001600160a01b038316600090815260036020526040812080546001929061253190849061333e565b90915550506001600160a01b038216600090815260036020526040812080546001929061255f908490613162565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6125ca838361277b565b6125d760008484846128c9565b610b255760405162461bcd60e51b81526004016108d690613369565b600081815b8451811015612638576126248286838151811061261757612617613193565b60200260200101516129ca565b9150806126308161317a565b9150506125f8565b509392505050565b61264b848484612415565b612657848484846128c9565b610c0d5760405162461bcd60e51b81526004016108d690613369565b60006001600160e01b031982166380ac58cd60e01b14806126a457506001600160e01b03198216635b5e139f60e01b145b806108a657506301ffc9a760e01b6001600160e01b03198316146108a6565b6001600160a01b03831661271e5761271981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612741565b816001600160a01b0316836001600160a01b0316146127415761274183826129f6565b6001600160a01b03821661275857610b2581612a93565b826001600160a01b0316826001600160a01b031614610b2557610b258282612b42565b6001600160a01b0382166127d15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d6565b6000818152600260205260409020546001600160a01b0316156128365760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d6565b612842600083836126c3565b6001600160a01b038216600090815260036020526040812080546001929061286b908490613162565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156129bf57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061290d9033908990889088906004016133bb565b6020604051808303816000875af1925050508015612948575060408051601f3d908101601f19168201909252612945918101906133f8565b60015b6129a5573d808015612976576040519150601f19603f3d011682016040523d82523d6000602084013e61297b565b606091505b50805160000361299d5760405162461bcd60e51b81526004016108d690613369565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612287565b506001949350505050565b60008183106129e6576000828152602084905260409020611b80565b5060009182526020526040902090565b60006001612a03846112b5565b612a0d919061333e565b600083815260076020526040902054909150808214612a60576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612aa59060019061333e565b60008381526009602052604081205460088054939450909284908110612acd57612acd613193565b906000526020600020015490508060088381548110612aee57612aee613193565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612b2657612b26613415565b6001900381819060005260206000200160009055905550505050565b6000612b4d836112b5565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612b92906130ac565b90600052602060002090601f016020900481019282612bb45760008555612bfa565b82601f10612bcd57805160ff1916838001178555612bfa565b82800160010185558215612bfa579182015b82811115612bfa578251825591602001919060010190612bdf565b50612c06929150612c0a565b5090565b5b80821115612c065760008155600101612c0b565b6001600160e01b03198116811461140b57600080fd5b600060208284031215612c4757600080fd5b8135611b8081612c1f565b801515811461140b57600080fd5b600060208284031215612c7257600080fd5b8135611b8081612c52565b80356001600160a01b0381168114612c9457600080fd5b919050565b80356001600160601b0381168114612c9457600080fd5b60008060408385031215612cc357600080fd5b612ccc83612c7d565b9150612cda60208401612c99565b90509250929050565b60005b83811015612cfe578181015183820152602001612ce6565b83811115610c0d5750506000910152565b60008151808452612d27816020860160208601612ce3565b601f01601f19169290920160200192915050565b602081526000611b806020830184612d0f565b600060208284031215612d6057600080fd5b5035919050565b60008060408385031215612d7a57600080fd5b612d8383612c7d565b946020939093013593505050565b600060208284031215612da357600080fd5b611b8082612c7d565b600080600060608486031215612dc157600080fd5b612dca84612c7d565b9250612dd860208501612c7d565b9150604084013590509250925092565b60008060408385031215612dfb57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612e3b57612e3b612e0a565b604051601f8501601f19908116603f01168101908282118183101715612e6357612e63612e0a565b81604052809350858152868686011115612e7c57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612ea857600080fd5b813567ffffffffffffffff811115612ebf57600080fd5b8201601f81018413612ed057600080fd5b61228784823560208401612e20565b600080600060608486031215612ef457600080fd5b83359250612f0460208501612c7d565b9150612f1260408501612c99565b90509250925092565b600080600060408486031215612f3057600080fd5b83359250602084013567ffffffffffffffff80821115612f4f57600080fd5b818601915086601f830112612f6357600080fd5b813581811115612f7257600080fd5b8760208260051b8501011115612f8757600080fd5b6020830194508093505050509250925092565b60008060408385031215612fad57600080fd5b612fb683612c7d565b91506020830135612fc681612c52565b809150509250929050565b60008060008060808587031215612fe757600080fd5b612ff085612c7d565b9350612ffe60208601612c7d565b925060408501359150606085013567ffffffffffffffff81111561302157600080fd5b8501601f8101871361303257600080fd5b61304187823560208401612e20565b91505092959194509250565b6000806040838503121561306057600080fd5b61306983612c7d565b9150612cda60208401612c7d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806130c057607f821691505b6020821081036130e057634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156130f857600080fd5b8151611b8081612c52565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561313357613133613103565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261315d5761315d613138565b500490565b6000821982111561317557613175613103565b500190565b60006001820161318c5761318c613103565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60208082526018908201527f4661696c656420746f2077697468647261772045746865720000000000000000604082015260600190565b6000845160206131f38285838a01612ce3565b8551918401916132068184848a01612ce3565b8554920191600090600181811c908083168061322357607f831692505b858310810361324057634e487b7160e01b85526022600452602485fd5b808015613254576001811461326557613292565b60ff19851688528388019550613292565b60008b81526020902060005b8581101561328a5781548a820152908401908801613271565b505083880195505b50939b9a5050505050505050505050565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008282101561335057613350613103565b500390565b60008261336457613364613138565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906133ee90830184612d0f565b9695505050505050565b60006020828403121561340a57600080fd5b8151611b8081612c1f565b634e487b7160e01b600052603160045260246000fdfea264697066735822122019be73f30291ce59ee2b98778043710d5407029ed1c9edd2e692cb49a180310f64736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002d4275746f75546f43686f754e6f53796d70686f6e6961205279757265694e6143686f754e6f467261676d656e740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024252000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f617277656176652e6e65742f4665346546776846414a5045335148495467554d66724b6f79377a4f73686a2d6b58574b487252543051412f

Deployed Bytecode

0x6080604052600436106102935760003560e01c80635a5462231161015a578063aa1b103f116100c1578063d5abeb011161007a578063d5abeb01146107c2578063da3ef23f146107d8578063e0b0b2fb146107f8578063e985e9c514610818578063f2fde38b14610861578063fb796e6c1461088157600080fd5b8063aa1b103f14610723578063aa38cd3214610738578063b7c0b8e81461074d578063b88d4fde1461076d578063c66828621461078d578063c87b56dd146107a257600080fd5b80637f00c7a6116101135780637f00c7a61461067d5780638a616bc01461069d5780638da5cb5b146106bd57806395d89b41146106db578063a0712d68146106f0578063a22cb4651461070357600080fd5b80635a546223146105db5780635c975abb146105ee5780636352211e1461060857806370a0823114610628578063715018a6146106485780637cb647591461065d57600080fd5b80632a55205a116101fe57806344a0d68a116101b757806344a0d68a1461051b578063484b973c1461053b5780634f6ccce71461055b578063546a367d1461057b57806355f804b31461059b5780635944c753146105bb57600080fd5b80632a55205a146104455780632eb4a7ab146104845780632f745c591461049a5780633360caa0146104ba57806341f43434146104d957806342842e0e146104fb57600080fd5b80630d5624b3116102505780630d5624b31461038957806313faede6146103a957806318160ddd146103cd57806318cae269146103e2578063239c70ae1461040f57806323b872dd1461042557600080fd5b806301ffc9a71461029857806302329a29146102cd57806304634d8d146102ef57806306fdde031461030f578063081812fc14610331578063095ea7b314610369575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612c35565b61089b565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e8366004612c60565b6108ac565b005b3480156102fb57600080fd5b506102ed61030a366004612cb0565b6108f2565b34801561031b57600080fd5b5061032461092a565b6040516102c49190612d3b565b34801561033d57600080fd5b5061035161034c366004612d4e565b6109bc565b6040516001600160a01b0390911681526020016102c4565b34801561037557600080fd5b506102ed610384366004612d67565b610a51565b34801561039557600080fd5b506014546102b89062010000900460ff1681565b3480156103b557600080fd5b506103bf60115481565b6040519081526020016102c4565b3480156103d957600080fd5b506008546103bf565b3480156103ee57600080fd5b506103bf6103fd366004612d91565b60156020526000908152604090205481565b34801561041b57600080fd5b506103bf60135481565b34801561043157600080fd5b506102ed610440366004612dac565b610b2a565b34801561045157600080fd5b50610465610460366004612de8565b610c13565b604080516001600160a01b0390931683526020830191909152016102c4565b34801561049057600080fd5b506103bf60165481565b3480156104a657600080fd5b506103bf6104b5366004612d67565b610cbf565b3480156104c657600080fd5b506014546102b890610100900460ff1681565b3480156104e557600080fd5b506103516daaeb6d7670e522a718067333cd4e81565b34801561050757600080fd5b506102ed610516366004612dac565b610d55565b34801561052757600080fd5b506102ed610536366004612d4e565b610e33565b34801561054757600080fd5b506102ed610556366004612d67565b610e62565b34801561056757600080fd5b506103bf610576366004612d4e565b610eed565b34801561058757600080fd5b506102ed610596366004612c60565b610f80565b3480156105a757600080fd5b506102ed6105b6366004612e96565b610fc6565b3480156105c757600080fd5b506102ed6105d6366004612edf565b611003565b6102ed6105e9366004612f1b565b611038565b3480156105fa57600080fd5b506014546102b89060ff1681565b34801561061457600080fd5b50610351610623366004612d4e565b61123e565b34801561063457600080fd5b506103bf610643366004612d91565b6112b5565b34801561065457600080fd5b506102ed61133c565b34801561066957600080fd5b506102ed610678366004612d4e565b611372565b34801561068957600080fd5b506102ed610698366004612d4e565b6113a1565b3480156106a957600080fd5b506102ed6106b8366004612d4e565b6113d0565b3480156106c957600080fd5b50600a546001600160a01b0316610351565b3480156106e757600080fd5b5061032461140e565b6102ed6106fe366004612d4e565b61141d565b34801561070f57600080fd5b506102ed61071e366004612f9a565b611550565b34801561072f57600080fd5b506102ed611624565b34801561074457600080fd5b506102ed611658565b34801561075957600080fd5b506102ed610768366004612c60565b6118f2565b34801561077957600080fd5b506102ed610788366004612fd1565b61192f565b34801561079957600080fd5b50610324611a1b565b3480156107ae57600080fd5b506103246107bd366004612d4e565b611aa9565b3480156107ce57600080fd5b506103bf60125481565b3480156107e457600080fd5b506102ed6107f3366004612e96565b611b87565b34801561080457600080fd5b506102ed610813366004612c60565b611bc4565b34801561082457600080fd5b506102b861083336600461304d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561086d57600080fd5b506102ed61087c366004612d91565b611c08565b34801561088d57600080fd5b50600e546102b89060ff1681565b60006108a682611ca0565b92915050565b600a546001600160a01b031633146108df5760405162461bcd60e51b81526004016108d690613077565b60405180910390fd5b6014805460ff1916911515919091179055565b600a546001600160a01b0316331461091c5760405162461bcd60e51b81526004016108d690613077565b6109268282611cc5565b5050565b606060008054610939906130ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610965906130ac565b80156109b25780601f10610987576101008083540402835291602001916109b2565b820191906000526020600020905b81548152906001019060200180831161099557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a355760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108d6565b506000908152600460205260409020546001600160a01b031690565b816daaeb6d7670e522a718067333cd4e3b15801590610a725750600e5460ff165b15610b1b57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af391906130e6565b610b1b57604051633b79c77360e21b81526001600160a01b03821660048201526024016108d6565b610b258383611d7f565b505050565b826daaeb6d7670e522a718067333cd4e3b15801590610b4b5750600e5460ff165b15610c0257336001600160a01b03821603610b7057610b6b848484611e8f565b610c0d565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be391906130e6565b610c0257604051633b79c77360e21b81523360048201526024016108d6565b610c0d848484611e8f565b50505050565b6000828152600c602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610c88575060408051808201909152600b546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610ca7906001600160601b031687613119565b610cb1919061314e565b915196919550909350505050565b6000610cca836112b5565b8210610d2c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016108d6565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b826daaeb6d7670e522a718067333cd4e3b15801590610d765750600e5460ff165b15610e2857336001600160a01b03821603610d9657610b6b848484611ec0565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0991906130e6565b610e2857604051633b79c77360e21b81523360048201526024016108d6565b610c0d848484611ec0565b600a546001600160a01b03163314610e5d5760405162461bcd60e51b81526004016108d690613077565b601155565b600a546001600160a01b03163314610e8c5760405162461bcd60e51b81526004016108d690613077565b6000610e9760085490565b905060008211610ea657600080fd5b601254610eb38383613162565b1115610ebe57600080fd5b60015b828111610c0d57610edb84610ed68385613162565b611edb565b80610ee58161317a565b915050610ec1565b6000610ef860085490565b8210610f5b5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108d6565b60088281548110610f6e57610f6e613193565b90600052602060002001549050919050565b600a546001600160a01b03163314610faa5760405162461bcd60e51b81526004016108d690613077565b60148054911515620100000262ff000019909216919091179055565b600a546001600160a01b03163314610ff05760405162461bcd60e51b81526004016108d690613077565b805161092690600f906020840190612b86565b600a546001600160a01b0316331461102d5760405162461bcd60e51b81526004016108d690613077565b610b25838383611ef5565b611040611fc0565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050600061108460085490565b60145490915060ff161561109757600080fd5b60145462010000900460ff166110ac57600080fd5b600085116110b957600080fd5b846011546110c79190613119565b3410156111125760405162461bcd60e51b815260206004820152601960248201527815985b1d59481cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b60448201526064016108d6565b60135485111561112157600080fd5b3360009081526015602052604090205461113c908690613162565b601354101561114a57600080fd5b6012546111578683613162565b111561116257600080fd5b6111a3848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506016549150859050612019565b6111e65760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21026b2b935b63290283937b7b360611b60448201526064016108d6565b60015b8581116112315733600090815260156020526040812080549161120b8361317a565b9091555061121f905033610ed68385613162565b806112298161317a565b9150506111e9565b505050610b256001600d55565b6000818152600260205260408120546001600160a01b0316806108a65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108d6565b60006001600160a01b0382166113205760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108d6565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146113665760405162461bcd60e51b81526004016108d690613077565b611370600061202f565b565b600a546001600160a01b0316331461139c5760405162461bcd60e51b81526004016108d690613077565b601655565b600a546001600160a01b031633146113cb5760405162461bcd60e51b81526004016108d690613077565b601355565b600a546001600160a01b031633146113fa5760405162461bcd60e51b81526004016108d690613077565b6000908152600c6020526040812055565b50565b606060018054610939906130ac565b600061142860085490565b601454909150610100900460ff1661143f57600080fd5b60145460ff161561144f57600080fd5b6000821161145c57600080fd5b8160115461146a9190613119565b3410156114b55760405162461bcd60e51b815260206004820152601960248201527815985b1d59481cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b60448201526064016108d6565b6013548211156114c457600080fd5b336000908152601560205260409020546114df908390613162565b60135410156114ed57600080fd5b6012546114fa8383613162565b111561150557600080fd5b60015b828111610b255733600090815260156020526040812080549161152a8361317a565b9091555061153e905033610ed68385613162565b806115488161317a565b915050611508565b816daaeb6d7670e522a718067333cd4e3b158015906115715750600e5460ff165b1561161a57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156115ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f291906130e6565b61161a57604051633b79c77360e21b81526001600160a01b03821660048201526024016108d6565b610b258383612081565b600a546001600160a01b0316331461164e5760405162461bcd60e51b81526004016108d690613077565b6113706000600b55565b600a546001600160a01b031633146116825760405162461bcd60e51b81526004016108d690613077565b4773ab5696cabe69ba2e5214dd01cf5a3ed1eca0d599738473cbb2116ae8d5901ce2c23c0a1076025639637348a23fb6f56f9c14d29fa47a4f45b3a03167ddae73edacc663c23ba31398550e17b1ccf47cd9da18886000846103e86116e988610190613119565b6116f3919061314e565b604051600081818185875af1925050503d806000811461172f576040519150601f19603f3d011682016040523d82523d6000602084013e611734565b606091505b505080915050806117575760405162461bcd60e51b81526004016108d6906131a9565b6001600160a01b0384166103e861177088610190613119565b61177a919061314e565b604051600081818185875af1925050503d80600081146117b6576040519150601f19603f3d011682016040523d82523d6000602084013e6117bb565b606091505b505080915050806117de5760405162461bcd60e51b81526004016108d6906131a9565b6001600160a01b0383166103e86117f6886064613119565b611800919061314e565b604051600081818185875af1925050503d806000811461183c576040519150601f19603f3d011682016040523d82523d6000602084013e611841565b606091505b505080915050806118645760405162461bcd60e51b81526004016108d6906131a9565b6001600160a01b0382166103e861187c886064613119565b611886919061314e565b604051600081818185875af1925050503d80600081146118c2576040519150601f19603f3d011682016040523d82523d6000602084013e6118c7565b606091505b505080915050806118ea5760405162461bcd60e51b81526004016108d6906131a9565b505050505050565b600a546001600160a01b0316331461191c5760405162461bcd60e51b81526004016108d690613077565b600e805460ff1916911515919091179055565b836daaeb6d7670e522a718067333cd4e3b158015906119505750600e5460ff165b15611a0857336001600160a01b038216036119765761197185858585612145565b611a14565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e991906130e6565b611a0857604051633b79c77360e21b81523360048201526024016108d6565b611a1485858585612145565b5050505050565b60108054611a28906130ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a54906130ac565b8015611aa15780601f10611a7657610100808354040283529160200191611aa1565b820191906000526020600020905b815481529060010190602001808311611a8457829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b0316611b285760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108d6565b6000611b32612177565b90506000815111611b525760405180602001604052806000815250611b80565b80611b5c84612186565b6010604051602001611b70939291906131e0565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611bb15760405162461bcd60e51b81526004016108d690613077565b8051610926906010906020840190612b86565b600a546001600160a01b03163314611bee5760405162461bcd60e51b81526004016108d690613077565b601480549115156101000261ff0019909216919091179055565b600a546001600160a01b03163314611c325760405162461bcd60e51b81526004016108d690613077565b6001600160a01b038116611c975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d6565b61140b8161202f565b60006001600160e01b0319821663152a902d60e11b14806108a657506108a68261228f565b6127106001600160601b0382161115611cf05760405162461bcd60e51b81526004016108d6906132a3565b6001600160a01b038216611d465760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016108d6565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600b55565b6000611d8a8261123e565b9050806001600160a01b0316836001600160a01b031603611df75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108d6565b336001600160a01b0382161480611e135750611e138133610833565b611e855760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108d6565b610b2583836122b4565b611e993382612322565b611eb55760405162461bcd60e51b81526004016108d6906132ed565b610b25838383612415565b610b258383836040518060200160405280600081525061192f565b6109268282604051806020016040528060008152506125c0565b6127106001600160601b0382161115611f205760405162461bcd60e51b81526004016108d6906132a3565b6001600160a01b038216611f765760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016108d6565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600c90529190942093519051909116600160a01b029116179055565b6002600d54036120125760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108d6565b6002600d55565b60008261202685846125f3565b14949350505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b336001600160a01b038316036120d95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d6565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61214f3383612322565b61216b5760405162461bcd60e51b81526004016108d6906132ed565b610c0d84848484612640565b6060600f8054610939906130ac565b6060816000036121ad5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156121d757806121c18161317a565b91506121d09050600a8361314e565b91506121b1565b60008167ffffffffffffffff8111156121f2576121f2612e0a565b6040519080825280601f01601f19166020018201604052801561221c576020820181803683370190505b5090505b84156122875761223160018361333e565b915061223e600a86613355565b612249906030613162565b60f81b81838151811061225e5761225e613193565b60200101906001600160f81b031916908160001a905350612280600a8661314e565b9450612220565b949350505050565b60006001600160e01b0319821663780e9d6360e01b14806108a657506108a682612673565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122e98261123e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661239b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108d6565b60006123a68361123e565b9050806001600160a01b0316846001600160a01b031614806123e15750836001600160a01b03166123d6846109bc565b6001600160a01b0316145b8061228757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16612287565b826001600160a01b03166124288261123e565b6001600160a01b0316146124905760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108d6565b6001600160a01b0382166124f25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108d6565b6124fd8383836126c3565b6125086000826122b4565b6001600160a01b038316600090815260036020526040812080546001929061253190849061333e565b90915550506001600160a01b038216600090815260036020526040812080546001929061255f908490613162565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6125ca838361277b565b6125d760008484846128c9565b610b255760405162461bcd60e51b81526004016108d690613369565b600081815b8451811015612638576126248286838151811061261757612617613193565b60200260200101516129ca565b9150806126308161317a565b9150506125f8565b509392505050565b61264b848484612415565b612657848484846128c9565b610c0d5760405162461bcd60e51b81526004016108d690613369565b60006001600160e01b031982166380ac58cd60e01b14806126a457506001600160e01b03198216635b5e139f60e01b145b806108a657506301ffc9a760e01b6001600160e01b03198316146108a6565b6001600160a01b03831661271e5761271981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612741565b816001600160a01b0316836001600160a01b0316146127415761274183826129f6565b6001600160a01b03821661275857610b2581612a93565b826001600160a01b0316826001600160a01b031614610b2557610b258282612b42565b6001600160a01b0382166127d15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d6565b6000818152600260205260409020546001600160a01b0316156128365760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d6565b612842600083836126c3565b6001600160a01b038216600090815260036020526040812080546001929061286b908490613162565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156129bf57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061290d9033908990889088906004016133bb565b6020604051808303816000875af1925050508015612948575060408051601f3d908101601f19168201909252612945918101906133f8565b60015b6129a5573d808015612976576040519150601f19603f3d011682016040523d82523d6000602084013e61297b565b606091505b50805160000361299d5760405162461bcd60e51b81526004016108d690613369565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612287565b506001949350505050565b60008183106129e6576000828152602084905260409020611b80565b5060009182526020526040902090565b60006001612a03846112b5565b612a0d919061333e565b600083815260076020526040902054909150808214612a60576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612aa59060019061333e565b60008381526009602052604081205460088054939450909284908110612acd57612acd613193565b906000526020600020015490508060088381548110612aee57612aee613193565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612b2657612b26613415565b6001900381819060005260206000200160009055905550505050565b6000612b4d836112b5565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612b92906130ac565b90600052602060002090601f016020900481019282612bb45760008555612bfa565b82601f10612bcd57805160ff1916838001178555612bfa565b82800160010185558215612bfa579182015b82811115612bfa578251825591602001919060010190612bdf565b50612c06929150612c0a565b5090565b5b80821115612c065760008155600101612c0b565b6001600160e01b03198116811461140b57600080fd5b600060208284031215612c4757600080fd5b8135611b8081612c1f565b801515811461140b57600080fd5b600060208284031215612c7257600080fd5b8135611b8081612c52565b80356001600160a01b0381168114612c9457600080fd5b919050565b80356001600160601b0381168114612c9457600080fd5b60008060408385031215612cc357600080fd5b612ccc83612c7d565b9150612cda60208401612c99565b90509250929050565b60005b83811015612cfe578181015183820152602001612ce6565b83811115610c0d5750506000910152565b60008151808452612d27816020860160208601612ce3565b601f01601f19169290920160200192915050565b602081526000611b806020830184612d0f565b600060208284031215612d6057600080fd5b5035919050565b60008060408385031215612d7a57600080fd5b612d8383612c7d565b946020939093013593505050565b600060208284031215612da357600080fd5b611b8082612c7d565b600080600060608486031215612dc157600080fd5b612dca84612c7d565b9250612dd860208501612c7d565b9150604084013590509250925092565b60008060408385031215612dfb57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612e3b57612e3b612e0a565b604051601f8501601f19908116603f01168101908282118183101715612e6357612e63612e0a565b81604052809350858152868686011115612e7c57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612ea857600080fd5b813567ffffffffffffffff811115612ebf57600080fd5b8201601f81018413612ed057600080fd5b61228784823560208401612e20565b600080600060608486031215612ef457600080fd5b83359250612f0460208501612c7d565b9150612f1260408501612c99565b90509250925092565b600080600060408486031215612f3057600080fd5b83359250602084013567ffffffffffffffff80821115612f4f57600080fd5b818601915086601f830112612f6357600080fd5b813581811115612f7257600080fd5b8760208260051b8501011115612f8757600080fd5b6020830194508093505050509250925092565b60008060408385031215612fad57600080fd5b612fb683612c7d565b91506020830135612fc681612c52565b809150509250929050565b60008060008060808587031215612fe757600080fd5b612ff085612c7d565b9350612ffe60208601612c7d565b925060408501359150606085013567ffffffffffffffff81111561302157600080fd5b8501601f8101871361303257600080fd5b61304187823560208401612e20565b91505092959194509250565b6000806040838503121561306057600080fd5b61306983612c7d565b9150612cda60208401612c7d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806130c057607f821691505b6020821081036130e057634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156130f857600080fd5b8151611b8081612c52565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561313357613133613103565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261315d5761315d613138565b500490565b6000821982111561317557613175613103565b500190565b60006001820161318c5761318c613103565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60208082526018908201527f4661696c656420746f2077697468647261772045746865720000000000000000604082015260600190565b6000845160206131f38285838a01612ce3565b8551918401916132068184848a01612ce3565b8554920191600090600181811c908083168061322357607f831692505b858310810361324057634e487b7160e01b85526022600452602485fd5b808015613254576001811461326557613292565b60ff19851688528388019550613292565b60008b81526020902060005b8581101561328a5781548a820152908401908801613271565b505083880195505b50939b9a5050505050505050505050565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008282101561335057613350613103565b500390565b60008261336457613364613138565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906133ee90830184612d0f565b9695505050505050565b60006020828403121561340a57600080fd5b8151611b8081612c1f565b634e487b7160e01b600052603160045260246000fdfea264697066735822122019be73f30291ce59ee2b98778043710d5407029ed1c9edd2e692cb49a180310f64736f6c634300080d0033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002d4275746f75546f43686f754e6f53796d70686f6e6961205279757265694e6143686f754e6f467261676d656e740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024252000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f617277656176652e6e65742f4665346546776846414a5045335148495467554d66724b6f79377a4f73686a2d6b58574b487252543051412f

-----Decoded View---------------
Arg [0] : _name (string): ButouToChouNoSymphonia RyureiNaChouNoFragment
Arg [1] : _symbol (string): BR
Arg [2] : _initBaseURI (string): https://arweave.net/Fe4eFwhFAJPE3QHITgUMfrKoy7zOshj-kXWKHrRT0QA/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 000000000000000000000000000000000000000000000000000000000000002d
Arg [4] : 4275746f75546f43686f754e6f53796d70686f6e6961205279757265694e6143
Arg [5] : 686f754e6f467261676d656e7400000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4252000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [9] : 68747470733a2f2f617277656176652e6e65742f4665346546776846414a5045
Arg [10] : 335148495467554d66724b6f79377a4f73686a2d6b58574b487252543051412f


Deployed Bytecode Sourcemap

33441:6557:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34309:166;;;;;;;;;;-1:-1:-1;34309:166:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;34309:166:0;;;;;;;;38102:73;;;;;;;;;;-1:-1:-1;38102:73:0;;;;;:::i;:::-;;:::i;:::-;;38370:140;;;;;;;;;;-1:-1:-1;38370:140:0;;;;;:::i;:::-;;:::i;9886:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11030:221::-;;;;;;;;;;-1:-1:-1;11030:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2686:32:1;;;2668:51;;2656:2;2641:18;11030:221:0;2522:203:1;39228:168:0;;;;;;;;;;-1:-1:-1;39228:168:0;;;;;:::i;:::-;;:::i;33817:32::-;;;;;;;;;;-1:-1:-1;33817:32:0;;;;;;;;;;;33637;;;;;;;;;;;;;;;;;;;3135:25:1;;;3123:2;3108:18;33637:32:0;2989:177:1;17380:113:0;;;;;;;;;;-1:-1:-1;17468:10:0;:17;17380:113;;33854:55;;;;;;;;;;-1:-1:-1;33854:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;33709:32;;;;;;;;;;;;;;;;39402:174;;;;;;;;;;-1:-1:-1;39402:174:0;;;;;:::i;:::-;;:::i;21591:442::-;;;;;;;;;;-1:-1:-1;21591:442:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4140:32:1;;;4122:51;;4204:2;4189:18;;4182:34;;;;4095:18;21591:442:0;3948:274:1;33914:25:0;;;;;;;;;;;;;;;;17116:256;;;;;;;;;;-1:-1:-1;17116:256:0;;;;;:::i;:::-;;:::i;33777:35::-;;;;;;;;;;-1:-1:-1;33777:35:0;;;;;;;;;;;25922:143;;;;;;;;;;;;26022:42;25922:143;;39582:182;;;;;;;;;;-1:-1:-1;39582:182:0;;;;;:::i;:::-;;:::i;37662:80::-;;;;;;;;;;-1:-1:-1;37662:80:0;;;;;:::i;:::-;;:::i;36376:283::-;;;;;;;;;;-1:-1:-1;36376:283:0;;;;;:::i;:::-;;:::i;17501:233::-;;;;;;;;;;-1:-1:-1;17501:233:0;;;;;:::i;:::-;;:::i;38179:89::-;;;;;;;;;;-1:-1:-1;38179:89:0;;;;;:::i;:::-;;:::i;37870:98::-;;;;;;;;;;-1:-1:-1;37870:98:0;;;;;:::i;:::-;;:::i;38609:162::-;;;;;;;;;;-1:-1:-1;38609:162:0;;;;;:::i;:::-;;:::i;35063:772::-;;;;;;:::i;:::-;;:::i;33746:26::-;;;;;;;;;;-1:-1:-1;33746:26:0;;;;;;;;9639:239;;;;;;;;;;-1:-1:-1;9639:239:0;;;;;:::i;:::-;;:::i;9423:208::-;;;;;;;;;;-1:-1:-1;9423:208:0;;;;;:::i;:::-;;:::i;20261:94::-;;;;;;;;;;;;;:::i;36270:100::-;;;;;;;;;;-1:-1:-1;36270:100:0;;;;;:::i;:::-;;:::i;37748:116::-;;;;;;;;;;-1:-1:-1;37748:116:0;;;;;:::i;:::-;;:::i;38777:103::-;;;;;;;;;;-1:-1:-1;38777:103:0;;;;;:::i;:::-;;:::i;20038:87::-;;;;;;;;;;-1:-1:-1;20111:6:0;;-1:-1:-1;;;;;20111:6:0;20038:87;;10055:104;;;;;;;;;;;;;:::i;34481:576::-;;;;;;:::i;:::-;;:::i;39035:187::-;;;;;;;;;;-1:-1:-1;39035:187:0;;;;;:::i;:::-;;:::i;38516:87::-;;;;;;;;;;;;;:::i;36665:989::-;;;;;;;;;;;;;:::i;38916:113::-;;;;;;;;;;-1:-1:-1;38916:113:0;;;;;:::i;:::-;;:::i;39770:225::-;;;;;;;;;;-1:-1:-1;39770:225:0;;;;;:::i;:::-;;:::i;33595:37::-;;;;;;;;;;;;;:::i;35841:423::-;;;;;;;;;;-1:-1:-1;35841:423:0;;;;;:::i;:::-;;:::i;33674:30::-;;;;;;;;;;;;;;;;37974:122;;;;;;;;;;-1:-1:-1;37974:122:0;;;;;:::i;:::-;;:::i;38272:92::-;;;;;;;;;;-1:-1:-1;38272:92:0;;;;;:::i;:::-;;:::i;11562:164::-;;;;;;;;;;-1:-1:-1;11562:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;11683:25:0;;;11659:4;11683:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;11562:164;20363:192;;;;;;;;;;-1:-1:-1;20363:192:0;;;;;:::i;:::-;;:::i;25870:43::-;;;;;;;;;;-1:-1:-1;25870:43:0;;;;;;;;34309:166;34413:4;34433:36;34457:11;34433:23;:36::i;:::-;34426:43;34309:166;-1:-1:-1;;34309:166:0:o;38102:73::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;;;;;;;;;38154:6:::1;:15:::0;;-1:-1:-1;;38154:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38102:73::o;38370:140::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;38462:42:::1;38481:8;38491:12;38462:18;:42::i;:::-;38370:140:::0;;:::o;9886:100::-;9940:13;9973:5;9966:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9886:100;:::o;11030:221::-;11106:7;13022:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13022:16:0;11126:73;;;;-1:-1:-1;;;11126:73:0;;9283:2:1;11126:73:0;;;9265:21:1;9322:2;9302:18;;;9295:30;9361:34;9341:18;;;9334:62;-1:-1:-1;;;9412:18:1;;;9405:42;9464:19;;11126:73:0;9081:408:1;11126:73:0;-1:-1:-1;11219:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11219:24:0;;11030:221::o;39228:168::-;39341:8;26022:42;27944:45;:49;;;;:77;;-1:-1:-1;27997:24:0;;;;27944:77;27940:253;;;28043:67;;-1:-1:-1;;;28043:67:0;;28094:4;28043:67;;;9706:34:1;-1:-1:-1;;;;;9776:15:1;;9756:18;;;9749:43;26022:42:0;;28043;;9641:18:1;;28043:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28038:144;;28138:28;;-1:-1:-1;;;28138:28:0;;-1:-1:-1;;;;;2686:32:1;;28138:28:0;;;2668:51:1;2641:18;;28138:28:0;2522:203:1;28038:144:0;39358:32:::1;39372:8;39382:7;39358:13;:32::i;:::-;39228:168:::0;;;:::o;39402:174::-;39520:4;26022:42;27170:45;:49;;;;:77;;-1:-1:-1;27223:24:0;;;;27170:77;27166:567;;;27487:10;-1:-1:-1;;;;;27479:18:0;;;27475:85;;39533:37:::1;39552:4;39558:2;39562:7;39533:18;:37::i;:::-;27538:7:::0;;27475:85;27579:69;;-1:-1:-1;;;27579:69:0;;27630:4;27579:69;;;9706:34:1;27637:10:0;9756:18:1;;;9749:43;26022:42:0;;27579;;9641:18:1;;27579:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27574:148;;27676:30;;-1:-1:-1;;;27676:30:0;;27695:10;27676:30;;;2668:51:1;2641:18;;27676:30:0;2522:203:1;27574:148:0;39533:37:::1;39552:4;39558:2;39562:7;39533:18;:37::i;:::-;39402:174:::0;;;;:::o;21591:442::-;21688:7;21746:27;;;:17;:27;;;;;;;;21717:56;;;;;;;;;-1:-1:-1;;;;;21717:56:0;;;;;-1:-1:-1;;;21717:56:0;;;-1:-1:-1;;;;;21717:56:0;;;;;;;;21688:7;;21786:92;;-1:-1:-1;21837:29:0;;;;;;;;;21847:19;21837:29;-1:-1:-1;;;;;21837:29:0;;;;-1:-1:-1;;;21837:29:0;;-1:-1:-1;;;;;21837:29:0;;;;;21786:92;21928:23;;;;21890:21;;22125:5;;21915:36;;-1:-1:-1;;;;;21915:36:0;:10;:36;:::i;:::-;21914:58;;;;:::i;:::-;21993:16;;;;;-1:-1:-1;21591:442:0;;-1:-1:-1;;;;21591:442:0:o;17116:256::-;17213:7;17249:23;17266:5;17249:16;:23::i;:::-;17241:5;:31;17233:87;;;;-1:-1:-1;;;17233:87:0;;10817:2:1;17233:87:0;;;10799:21:1;10856:2;10836:18;;;10829:30;10895:34;10875:18;;;10868:62;-1:-1:-1;;;10946:18:1;;;10939:41;10997:19;;17233:87:0;10615:407:1;17233:87:0;-1:-1:-1;;;;;;17338:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;17116:256::o;39582:182::-;39704:4;26022:42;27170:45;:49;;;;:77;;-1:-1:-1;27223:24:0;;;;27170:77;27166:567;;;27487:10;-1:-1:-1;;;;;27479:18:0;;;27475:85;;39717:41:::1;39740:4;39746:2;39750:7;39717:22;:41::i;27475:85::-:0;27579:69;;-1:-1:-1;;;27579:69:0;;27630:4;27579:69;;;9706:34:1;27637:10:0;9756:18:1;;;9749:43;26022:42:0;;27579;;9641:18:1;;27579:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27574:148;;27676:30;;-1:-1:-1;;;27676:30:0;;27695:10;27676:30;;;2668:51:1;2641:18;;27676:30:0;2522:203:1;27574:148:0;39717:41:::1;39740:4;39746:2;39750:7;39717:22;:41::i;37662:80::-:0;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;37721:4:::1;:15:::0;37662:80::o;36376:283::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;36452:14:::1;36469:13;17468:10:::0;:17;;17380:113;36469:13:::1;36452:30;;36511:1;36497:11;:15;36489:24;;;::::0;::::1;;36552:9;::::0;36528:20:::1;36537:11:::0;36528:6;:20:::1;:::i;:::-;:33;;36520:42;;;::::0;::::1;;36586:1;36569:85;36594:11;36589:1;:16;36569:85;;36621:25;36631:2:::0;36635:10:::1;36644:1:::0;36635:6;:10:::1;:::i;:::-;36621:9;:25::i;:::-;36607:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36569:85;;17501:233:::0;17576:7;17612:30;17468:10;:17;;17380:113;17612:30;17604:5;:38;17596:95;;;;-1:-1:-1;;;17596:95:0;;11502:2:1;17596:95:0;;;11484:21:1;11541:2;11521:18;;;11514:30;11580:34;11560:18;;;11553:62;-1:-1:-1;;;11631:18:1;;;11624:42;11683:19;;17596:95:0;11300:408:1;17596:95:0;17709:10;17720:5;17709:17;;;;;;;;:::i;:::-;;;;;;;;;17702:24;;17501:233;;;:::o;38179:89::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;38241:12:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;38241:21:0;;::::1;::::0;;;::::1;::::0;;38179:89::o;37870:98::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;37941:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;38609:162::-:0;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;38716:49:::1;38733:7;38742:8;38752:12;38716:16;:49::i;35063:772::-:0;33082:21;:19;:21::i;:::-;35194:28:::1;::::0;-1:-1:-1;;35211:10:0::1;11994:2:1::0;11990:15;11986:53;35194:28:0::1;::::0;::::1;11974:66:1::0;35169:12:0::1;::::0;12056::1;;35194:28:0::1;;;;;;;;;;;;35184:39;;;;;;35169:54;;35230:14;35247:13;17468:10:::0;:17;;17380:113;35247:13:::1;35276:6;::::0;35230:30;;-1:-1:-1;35276:6:0::1;;35275:7;35267:16;;;::::0;::::1;;35298:12;::::0;;;::::1;;;35290:21;;;::::0;::::1;;35340:1;35326:11;:15;35318:24;;;::::0;::::1;;35377:11;35370:4;;:18;;;;:::i;:::-;35357:9;:31;;35349:69;;;::::0;-1:-1:-1;;;35349:69:0;;12281:2:1;35349:69:0::1;::::0;::::1;12263:21:1::0;12320:2;12300:18;;;12293:30;-1:-1:-1;;;12339:18:1;;;12332:55;12404:18;;35349:69:0::1;12079:349:1::0;35349:69:0::1;35448:13;;35433:11;:28;;35425:37;;;::::0;::::1;;35515:10;35494:32;::::0;;;:20:::1;:32;::::0;;;;;:46:::1;::::0;35529:11;;35494:46:::1;:::i;:::-;35477:13;;:63;;35469:72;;;::::0;::::1;;35580:9;::::0;35556:20:::1;35565:11:::0;35556:6;:20:::1;:::i;:::-;:33;;35548:42;;;::::0;::::1;;35605:50;35624:12;;35605:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;35638:10:0::1;::::0;;-1:-1:-1;35650:4:0;;-1:-1:-1;35605:18:0::1;:50::i;:::-;35597:82;;;::::0;-1:-1:-1;;;35597:82:0;;12635:2:1;35597:82:0::1;::::0;::::1;12617:21:1::0;12674:2;12654:18;;;12647:30;-1:-1:-1;;;12693:18:1;;;12686:50;12753:18;;35597:82:0::1;12433:344:1::0;35597:82:0::1;35709:1;35692:138;35717:11;35712:1;:16;35692:138;;35767:10;35746:32;::::0;;;:20:::1;:32;::::0;;;;:34;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;35789:33:0::1;::::0;-1:-1:-1;35799:10:0::1;35811;35820:1:::0;35811:6;:10:::1;:::i;35789:33::-;35730:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35692:138;;;;35162:673;;33126:20:::0;32898:1;33369:7;:22;33320:79;9639:239;9711:7;9747:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9747:16:0;;9774:73;;;;-1:-1:-1;;;9774:73:0;;12984:2:1;9774:73:0;;;12966:21:1;13023:2;13003:18;;;12996:30;13062:34;13042:18;;;13035:62;-1:-1:-1;;;13113:18:1;;;13106:39;13162:19;;9774:73:0;12782:405:1;9423:208:0;9495:7;-1:-1:-1;;;;;9523:19:0;;9515:74;;;;-1:-1:-1;;;9515:74:0;;13394:2:1;9515:74:0;;;13376:21:1;13433:2;13413:18;;;13406:30;13472:34;13452:18;;;13445:62;-1:-1:-1;;;13523:18:1;;;13516:40;13573:19;;9515:74:0;13192:406:1;9515:74:0;-1:-1:-1;;;;;;9607:16:0;;;;;:9;:16;;;;;;;9423:208::o;20261:94::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;20326:21:::1;20344:1;20326:9;:21::i;:::-;20261:94::o:0;36270:100::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;36340:10:::1;:24:::0;36270:100::o;37748:116::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;37825:13:::1;:33:::0;37748:116::o;38777:103::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;23069:26;;;;:17;:26;;;;;23062:33;38777:103::o;38847:27::-:1;38777:103:::0;:::o;10055:104::-;10111:13;10144:7;10137:14;;;;;:::i;34481:576::-;34538:14;34555:13;17468:10;:17;;17380:113;34555:13;34583:15;;34538:30;;-1:-1:-1;34583:15:0;;;;;34575:24;;;;;;34615:6;;;;34614:7;34606:16;;;;;;34651:1;34637:11;:15;34629:24;;;;;;34688:11;34681:4;;:18;;;;:::i;:::-;34668:9;:31;;34660:69;;;;-1:-1:-1;;;34660:69:0;;12281:2:1;34660:69:0;;;12263:21:1;12320:2;12300:18;;;12293:30;-1:-1:-1;;;12339:18:1;;;12332:55;12404:18;;34660:69:0;12079:349:1;34660:69:0;34759:13;;34744:11;:28;;34736:37;;;;;;34826:10;34805:32;;;;:20;:32;;;;;;:46;;34840:11;;34805:46;:::i;:::-;34788:13;;:63;;34780:72;;;;;;34891:9;;34867:20;34876:11;34867:6;:20;:::i;:::-;:33;;34859:42;;;;;;34931:1;34914:138;34939:11;34934:1;:16;34914:138;;34989:10;34968:32;;;;:20;:32;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;35011:33:0;;-1:-1:-1;35021:10:0;35033;35042:1;35033:6;:10;:::i;35011:33::-;34952:3;;;;:::i;:::-;;;;34914:138;;39035:187;39156:8;26022:42;27944:45;:49;;;;:77;;-1:-1:-1;27997:24:0;;;;27944:77;27940:253;;;28043:67;;-1:-1:-1;;;28043:67:0;;28094:4;28043:67;;;9706:34:1;-1:-1:-1;;;;;9776:15:1;;9756:18;;;9749:43;26022:42:0;;28043;;9641:18:1;;28043:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28038:144;;28138:28;;-1:-1:-1;;;28138:28:0;;-1:-1:-1;;;;;2686:32:1;;28138:28:0;;;2668:51:1;2641:18;;28138:28:0;2522:203:1;28038:144:0;39173:43:::1;39197:8;39207;39173:23;:43::i;38516:87::-:0;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;38574:23:::1;22556:19:::0;;22549:26;22488:95;36665:989;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;36748:21:::1;36807:42;36888;36971;37052;36727:18;36807:42:::0;37192:4:::1;37175:16;36748:21:::0;37188:3:::1;37175:16;:::i;:::-;:21;;;;:::i;:::-;37153:49;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37139:63;;;;;37221:7;37213:44;;;;-1:-1:-1::0;;;37213:44:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37282:13:0;::::1;37321:4;37304:16;:10:::0;37317:3:::1;37304:16;:::i;:::-;:21;;;;:::i;:::-;37282:49;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37268:63;;;;;37350:7;37342:44;;;;-1:-1:-1::0;;;37342:44:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37411:15:0;::::1;37452:4;37435:16;:10:::0;37448:3:::1;37435:16;:::i;:::-;:21;;;;:::i;:::-;37411:51;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37397:65;;;;;37481:7;37473:44;;;;-1:-1:-1::0;;;37473:44:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37542:13:0;::::1;37581:4;37564:16;:10:::0;37577:3:::1;37564:16;:::i;:::-;:21;;;;:::i;:::-;37542:49;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37528:63;;;;;37610:7;37602:44;;;;-1:-1:-1::0;;;37602:44:0::1;;;;;;;:::i;:::-;36716:938;;;;;;36665:989::o:0;38916:113::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;38991:24:::1;:32:::0;;-1:-1:-1;;38991:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38916:113::o;39770:225::-;39926:4;26022:42;27170:45;:49;;;;:77;;-1:-1:-1;27223:24:0;;;;27170:77;27166:567;;;27487:10;-1:-1:-1;;;;;27479:18:0;;;27475:85;;39942:47:::1;39965:4;39971:2;39975:7;39984:4;39942:22;:47::i;:::-;27538:7:::0;;27475:85;27579:69;;-1:-1:-1;;;27579:69:0;;27630:4;27579:69;;;9706:34:1;27637:10:0;9756:18:1;;;9749:43;26022:42:0;;27579;;9641:18:1;;27579:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27574:148;;27676:30;;-1:-1:-1;;;27676:30:0;;27695:10;27676:30;;;2668:51:1;2641:18;;27676:30:0;2522:203:1;27574:148:0;39942:47:::1;39965:4;39971:2;39975:7;39984:4;39942:22;:47::i;:::-;39770:225:::0;;;;;:::o;33595:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35841:423::-;12998:4;13022:16;;;:7;:16;;;;;;35939:13;;-1:-1:-1;;;;;13022:16:0;35964:97;;;;-1:-1:-1;;;35964:97:0;;14368:2:1;35964:97:0;;;14350:21:1;14407:2;14387:18;;;14380:30;14446:34;14426:18;;;14419:62;-1:-1:-1;;;14497:18:1;;;14490:45;14552:19;;35964:97:0;14166:411:1;35964:97:0;36070:28;36101:10;:8;:10::i;:::-;36070:41;;36156:1;36131:14;36125:28;:32;:133;;;;;;;;;;;;;;;;;36193:14;36209:18;:7;:16;:18::i;:::-;36229:13;36176:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36125:133;36118:140;35841:423;-1:-1:-1;;;35841:423:0:o;37974:122::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;38057:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;38272:92::-:0;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;38334:15:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;38334:24:0;;::::1;::::0;;;::::1;::::0;;38272:92::o;20363:192::-;20111:6;;-1:-1:-1;;;;;20111:6:0;8337:10;20173:23;20165:68;;;;-1:-1:-1;;;20165:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20452:22:0;::::1;20444:73;;;::::0;-1:-1:-1;;;20444:73:0;;16442:2:1;20444:73:0::1;::::0;::::1;16424:21:1::0;16481:2;16461:18;;;16454:30;16520:34;16500:18;;;16493:62;-1:-1:-1;;;16571:18:1;;;16564:36;16617:19;;20444:73:0::1;16240:402:1::0;20444:73:0::1;20528:19;20538:8;20528:9;:19::i;21368:215::-:0;21470:4;-1:-1:-1;;;;;;21494:41:0;;-1:-1:-1;;;21494:41:0;;:81;;;21539:36;21563:11;21539:23;:36::i;22146:332::-;22125:5;-1:-1:-1;;;;;22249:33:0;;;;22241:88;;;;-1:-1:-1;;;22241:88:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22348:22:0;;22340:60;;;;-1:-1:-1;;;22340:60:0;;17260:2:1;22340:60:0;;;17242:21:1;17299:2;17279:18;;;17272:30;17338:27;17318:18;;;17311:55;17383:18;;22340:60:0;17058:349:1;22340:60:0;22435:35;;;;;;;;;-1:-1:-1;;;;;22435:35:0;;;;;;-1:-1:-1;;;;;22435:35:0;;;;;;;;;;-1:-1:-1;;;22413:57:0;;;;:19;:57;22146:332::o;10611:411::-;10692:13;10708:23;10723:7;10708:14;:23::i;:::-;10692:39;;10756:5;-1:-1:-1;;;;;10750:11:0;:2;-1:-1:-1;;;;;10750:11:0;;10742:57;;;;-1:-1:-1;;;10742:57:0;;17614:2:1;10742:57:0;;;17596:21:1;17653:2;17633:18;;;17626:30;17692:34;17672:18;;;17665:62;-1:-1:-1;;;17743:18:1;;;17736:31;17784:19;;10742:57:0;17412:397:1;10742:57:0;8337:10;-1:-1:-1;;;;;10834:21:0;;;;:62;;-1:-1:-1;10859:37:0;10876:5;8337:10;11562:164;:::i;10859:37::-;10812:168;;;;-1:-1:-1;;;10812:168:0;;18016:2:1;10812:168:0;;;17998:21:1;18055:2;18035:18;;;18028:30;18094:34;18074:18;;;18067:62;18165:26;18145:18;;;18138:54;18209:19;;10812:168:0;17814:420:1;10812:168:0;10993:21;11002:2;11006:7;10993:8;:21::i;11734:339::-;11929:41;8337:10;11962:7;11929:18;:41::i;:::-;11921:103;;;;-1:-1:-1;;;11921:103:0;;;;;;;:::i;:::-;12037:28;12047:4;12053:2;12057:7;12037:9;:28::i;12081:185::-;12219:39;12236:4;12242:2;12246:7;12219:39;;;;;;;;;;;;:16;:39::i;13424:110::-;13500:26;13510:2;13514:7;13500:26;;;;;;;;;;;;:9;:26::i;22591:390::-;22125:5;-1:-1:-1;;;;;22743:33:0;;;;22735:88;;;;-1:-1:-1;;;22735:88:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22842:22:0;;22834:62;;;;-1:-1:-1;;;22834:62:0;;18859:2:1;22834:62:0;;;18841:21:1;18898:2;18878:18;;;18871:30;18937:29;18917:18;;;18910:57;18984:18;;22834:62:0;18657:351:1;22834:62:0;22938:35;;;;;;;;-1:-1:-1;;;;;22938:35:0;;;;;-1:-1:-1;;;;;22938:35:0;;;;;;;;;;-1:-1:-1;22909:26:0;;;:17;:26;;;;;;:64;;;;;;;-1:-1:-1;;;22909:64:0;;;;;;22591:390::o;33162:150::-;32942:1;33220:7;;:19;33212:63;;;;-1:-1:-1;;;33212:63:0;;19215:2:1;33212:63:0;;;19197:21:1;19254:2;19234:18;;;19227:30;19293:33;19273:18;;;19266:61;19344:18;;33212:63:0;19013:355:1;33212:63:0;32942:1;33286:7;:18;33162:150::o;28552:190::-;28677:4;28730;28701:25;28714:5;28721:4;28701:12;:25::i;:::-;:33;;28552:190;-1:-1:-1;;;;28552:190:0:o;20563:173::-;20638:6;;;-1:-1:-1;;;;;20655:17:0;;;-1:-1:-1;;;;;;20655:17:0;;;;;;;20688:40;;20638:6;;;20655:17;20638:6;;20688:40;;20619:16;;20688:40;20608:128;20563:173;:::o;11259:295::-;8337:10;-1:-1:-1;;;;;11362:24:0;;;11354:62;;;;-1:-1:-1;;;11354:62:0;;19575:2:1;11354:62:0;;;19557:21:1;19614:2;19594:18;;;19587:30;19653:27;19633:18;;;19626:55;19698:18;;11354:62:0;19373:349:1;11354:62:0;8337:10;11429:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;11429:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;11429:53:0;;;;;;;;;;11498:48;;540:41:1;;;11429:42:0;;8337:10;11498:48;;513:18:1;11498:48:0;;;;;;;11259:295;;:::o;12274:328::-;12449:41;8337:10;12482:7;12449:18;:41::i;:::-;12441:103;;;;-1:-1:-1;;;12441:103:0;;;;;;;:::i;:::-;12555:39;12569:4;12575:2;12579:7;12588:5;12555:13;:39::i;34199:102::-;34259:13;34288:7;34281:14;;;;;:::i;2346:721::-;2402:13;2621:5;2630:1;2621:10;2617:53;;-1:-1:-1;;2648:10:0;;;;;;;;;;;;-1:-1:-1;;;2648:10:0;;;;;2346:721::o;2617:53::-;2695:5;2680:12;2736:78;2743:9;;2736:78;;2769:8;;;;:::i;:::-;;-1:-1:-1;2792:10:0;;-1:-1:-1;2800:2:0;2792:10;;:::i;:::-;;;2736:78;;;2824:19;2856:6;2846:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2846:17:0;;2824:39;;2874:154;2881:10;;2874:154;;2908:11;2918:1;2908:11;;:::i;:::-;;-1:-1:-1;2977:10:0;2985:2;2977:5;:10;:::i;:::-;2964:24;;:2;:24;:::i;:::-;2951:39;;2934:6;2941;2934:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2934:56:0;;;;;;;;-1:-1:-1;3005:11:0;3014:2;3005:11;;:::i;:::-;;;2874:154;;;3052:6;2346:721;-1:-1:-1;;;;2346:721:0:o;16808:224::-;16910:4;-1:-1:-1;;;;;;16934:50:0;;-1:-1:-1;;;16934:50:0;;:90;;;16988:36;17012:11;16988:23;:36::i;15215:174::-;15290:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15290:29:0;-1:-1:-1;;;;;15290:29:0;;;;;;;;:24;;15344:23;15290:24;15344:14;:23::i;:::-;-1:-1:-1;;;;;15335:46:0;;;;;;;;;;;15215:174;;:::o;13068:348::-;13161:4;13022:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13022:16:0;13178:73;;;;-1:-1:-1;;;13178:73:0;;20176:2:1;13178:73:0;;;20158:21:1;20215:2;20195:18;;;20188:30;20254:34;20234:18;;;20227:62;-1:-1:-1;;;20305:18:1;;;20298:42;20357:19;;13178:73:0;19974:408:1;13178:73:0;13262:13;13278:23;13293:7;13278:14;:23::i;:::-;13262:39;;13331:5;-1:-1:-1;;;;;13320:16:0;:7;-1:-1:-1;;;;;13320:16:0;;:51;;;;13364:7;-1:-1:-1;;;;;13340:31:0;:20;13352:7;13340:11;:20::i;:::-;-1:-1:-1;;;;;13340:31:0;;13320:51;:87;;;-1:-1:-1;;;;;;11683:25:0;;;11659:4;11683:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;13375:32;11562:164;14629:578;14788:4;-1:-1:-1;;;;;14761:31:0;:23;14776:7;14761:14;:23::i;:::-;-1:-1:-1;;;;;14761:31:0;;14753:85;;;;-1:-1:-1;;;14753:85:0;;20589:2:1;14753:85:0;;;20571:21:1;20628:2;20608:18;;;20601:30;20667:34;20647:18;;;20640:62;-1:-1:-1;;;20718:18:1;;;20711:39;20767:19;;14753:85:0;20387:405:1;14753:85:0;-1:-1:-1;;;;;14857:16:0;;14849:65;;;;-1:-1:-1;;;14849:65:0;;20999:2:1;14849:65:0;;;20981:21:1;21038:2;21018:18;;;21011:30;21077:34;21057:18;;;21050:62;-1:-1:-1;;;21128:18:1;;;21121:34;21172:19;;14849:65:0;20797:400:1;14849:65:0;14927:39;14948:4;14954:2;14958:7;14927:20;:39::i;:::-;15031:29;15048:1;15052:7;15031:8;:29::i;:::-;-1:-1:-1;;;;;15073:15:0;;;;;;:9;:15;;;;;:20;;15092:1;;15073:15;:20;;15092:1;;15073:20;:::i;:::-;;;;-1:-1:-1;;;;;;;15104:13:0;;;;;;:9;:13;;;;;:18;;15121:1;;15104:13;:18;;15121:1;;15104:18;:::i;:::-;;;;-1:-1:-1;;15133:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;15133:21:0;-1:-1:-1;;;;;15133:21:0;;;;;;;;;15172:27;;15133:16;;15172:27;;;;;;;14629:578;;;:::o;13542:321::-;13672:18;13678:2;13682:7;13672:5;:18::i;:::-;13723:54;13754:1;13758:2;13762:7;13771:5;13723:22;:54::i;:::-;13701:154;;;;-1:-1:-1;;;13701:154:0;;;;;;;:::i;28966:296::-;29049:7;29092:4;29049:7;29107:118;29131:5;:12;29127:1;:16;29107:118;;;29180:33;29190:12;29204:5;29210:1;29204:8;;;;;;;;:::i;:::-;;;;;;;29180:9;:33::i;:::-;29165:48;-1:-1:-1;29145:3:0;;;;:::i;:::-;;;;29107:118;;;-1:-1:-1;29242:12:0;28966:296;-1:-1:-1;;;28966:296:0:o;12610:315::-;12767:28;12777:4;12783:2;12787:7;12767:9;:28::i;:::-;12814:48;12837:4;12843:2;12847:7;12856:5;12814:22;:48::i;:::-;12806:111;;;;-1:-1:-1;;;12806:111:0;;;;;;;:::i;9110:305::-;9212:4;-1:-1:-1;;;;;;9249:40:0;;-1:-1:-1;;;9249:40:0;;:105;;-1:-1:-1;;;;;;;9306:48:0;;-1:-1:-1;;;9306:48:0;9249:105;:158;;;-1:-1:-1;;;;;;;;;;2126:40:0;;;9371:36;2017:157;17742:589;-1:-1:-1;;;;;17948:18:0;;17944:187;;17983:40;18015:7;18672:10;:17;;18645:24;;;;:15;:24;;;;;:44;;;18700:24;;;;;;;;;;;;18568:164;17983:40;17944:187;;;18053:2;-1:-1:-1;;;;;18045:10:0;:4;-1:-1:-1;;;;;18045:10:0;;18041:90;;18072:47;18105:4;18111:7;18072:32;:47::i;:::-;-1:-1:-1;;;;;18145:16:0;;18141:183;;18178:45;18215:7;18178:36;:45::i;18141:183::-;18251:4;-1:-1:-1;;;;;18245:10:0;:2;-1:-1:-1;;;;;18245:10:0;;18241:83;;18272:40;18300:2;18304:7;18272:27;:40::i;13871:382::-;-1:-1:-1;;;;;13951:16:0;;13943:61;;;;-1:-1:-1;;;13943:61:0;;21823:2:1;13943:61:0;;;21805:21:1;;;21842:18;;;21835:30;21901:34;21881:18;;;21874:62;21953:18;;13943:61:0;21621:356:1;13943:61:0;12998:4;13022:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13022:16:0;:30;14015:58;;;;-1:-1:-1;;;14015:58:0;;22184:2:1;14015:58:0;;;22166:21:1;22223:2;22203:18;;;22196:30;22262;22242:18;;;22235:58;22310:18;;14015:58:0;21982:352:1;14015:58:0;14086:45;14115:1;14119:2;14123:7;14086:20;:45::i;:::-;-1:-1:-1;;;;;14144:13:0;;;;;;:9;:13;;;;;:18;;14161:1;;14144:13;:18;;14161:1;;14144:18;:::i;:::-;;;;-1:-1:-1;;14173:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;14173:21:0;-1:-1:-1;;;;;14173:21:0;;;;;;;;14212:33;;14173:16;;;14212:33;;14173:16;;14212:33;13871:382;;:::o;15397:799::-;15552:4;-1:-1:-1;;;;;15573:13:0;;4115:20;4163:8;15569:620;;15609:72;;-1:-1:-1;;;15609:72:0;;-1:-1:-1;;;;;15609:36:0;;;;;:72;;8337:10;;15660:4;;15666:7;;15675:5;;15609:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15609:72:0;;;;;;;;-1:-1:-1;;15609:72:0;;;;;;;;;;;;:::i;:::-;;;15605:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15851:6;:13;15868:1;15851:18;15847:272;;15894:60;;-1:-1:-1;;;15894:60:0;;;;;;;:::i;15847:272::-;16069:6;16063:13;16054:6;16050:2;16046:15;16039:38;15605:529;-1:-1:-1;;;;;;15732:51:0;-1:-1:-1;;;15732:51:0;;-1:-1:-1;15725:58:0;;15569:620;-1:-1:-1;16173:4:0;15397:799;;;;;;:::o;32358:149::-;32421:7;32452:1;32448;:5;:51;;32583:13;32677:15;;;32713:4;32706:15;;;32760:4;32744:21;;32448:51;;;-1:-1:-1;32583:13:0;32677:15;;;32713:4;32706:15;32760:4;32744:21;;;32358:149::o;18740:551::-;18832:22;18882:1;18857:22;18874:4;18857:16;:22::i;:::-;:26;;;;:::i;:::-;18894:18;18915:26;;;:17;:26;;;;;;18832:51;;-1:-1:-1;18956:28:0;;;18952:236;;-1:-1:-1;;;;;19023:18:0;;19001:19;19023:18;;;:12;:18;;;;;;;;:34;;;;;;;;;19074:30;;;;;;:44;;;19133:30;;:17;:30;;;;;:43;;;18952:236;-1:-1:-1;19205:26:0;;;;:17;:26;;;;;;;;19198:33;;;-1:-1:-1;;;;;19249:18:0;;;;;:12;:18;;;;;:34;;;;;;;19242:41;18740:551::o;19299:419::-;19406:10;:17;19381:22;;19406:21;;19426:1;;19406:21;:::i;:::-;19438:18;19459:24;;;:15;:24;;;;;;19516:10;:26;;19381:46;;-1:-1:-1;19459:24:0;;19381:46;;19516:26;;;;;;:::i;:::-;;;;;;;;;19494:48;;19578:11;19553:10;19564;19553:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;19600:28;;;:15;:28;;;;;;;:41;;;19659:24;;;;;19652:31;19694:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19370:348;;;19299:419;:::o;18339:221::-;18424:14;18441:20;18458:2;18441:16;:20::i;:::-;-1:-1:-1;;;;;18472:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;18517:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;18339:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:118::-;678:5;671:13;664:21;657:5;654:32;644:60;;700:1;697;690:12;715:241;771:6;824:2;812:9;803:7;799:23;795:32;792:52;;;840:1;837;830:12;792:52;879:9;866:23;898:28;920:5;898:28;:::i;961:173::-;1029:20;;-1:-1:-1;;;;;1078:31:1;;1068:42;;1058:70;;1124:1;1121;1114:12;1058:70;961:173;;;:::o;1139:179::-;1206:20;;-1:-1:-1;;;;;1255:38:1;;1245:49;;1235:77;;1308:1;1305;1298:12;1323:258;1390:6;1398;1451:2;1439:9;1430:7;1426:23;1422:32;1419:52;;;1467:1;1464;1457:12;1419:52;1490:29;1509:9;1490:29;:::i;:::-;1480:39;;1538:37;1571:2;1560:9;1556:18;1538:37;:::i;:::-;1528:47;;1323:258;;;;;:::o;1586:::-;1658:1;1668:113;1682:6;1679:1;1676:13;1668:113;;;1758:11;;;1752:18;1739:11;;;1732:39;1704:2;1697:10;1668:113;;;1799:6;1796:1;1793:13;1790:48;;;-1:-1:-1;;1834:1:1;1816:16;;1809:27;1586:258::o;1849:::-;1891:3;1929:5;1923:12;1956:6;1951:3;1944:19;1972:63;2028:6;2021:4;2016:3;2012:14;2005:4;1998:5;1994:16;1972:63;:::i;:::-;2089:2;2068:15;-1:-1:-1;;2064:29:1;2055:39;;;;2096:4;2051:50;;1849:258;-1:-1:-1;;1849:258:1:o;2112:220::-;2261:2;2250:9;2243:21;2224:4;2281:45;2322:2;2311:9;2307:18;2299:6;2281:45;:::i;2337:180::-;2396:6;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;-1:-1:-1;2488:23:1;;2337:180;-1:-1:-1;2337:180:1:o;2730:254::-;2798:6;2806;2859:2;2847:9;2838:7;2834:23;2830:32;2827:52;;;2875:1;2872;2865:12;2827:52;2898:29;2917:9;2898:29;:::i;:::-;2888:39;2974:2;2959:18;;;;2946:32;;-1:-1:-1;;;2730:254:1:o;3171:186::-;3230:6;3283:2;3271:9;3262:7;3258:23;3254:32;3251:52;;;3299:1;3296;3289:12;3251:52;3322:29;3341:9;3322:29;:::i;3362:328::-;3439:6;3447;3455;3508:2;3496:9;3487:7;3483:23;3479:32;3476:52;;;3524:1;3521;3514:12;3476:52;3547:29;3566:9;3547:29;:::i;:::-;3537:39;;3595:38;3629:2;3618:9;3614:18;3595:38;:::i;:::-;3585:48;;3680:2;3669:9;3665:18;3652:32;3642:42;;3362:328;;;;;:::o;3695:248::-;3763:6;3771;3824:2;3812:9;3803:7;3799:23;3795:32;3792:52;;;3840:1;3837;3830:12;3792:52;-1:-1:-1;;3863:23:1;;;3933:2;3918:18;;;3905:32;;-1:-1:-1;3695:248:1:o;4649:127::-;4710:10;4705:3;4701:20;4698:1;4691:31;4741:4;4738:1;4731:15;4765:4;4762:1;4755:15;4781:632;4846:5;4876:18;4917:2;4909:6;4906:14;4903:40;;;4923:18;;:::i;:::-;4998:2;4992:9;4966:2;5052:15;;-1:-1:-1;;5048:24:1;;;5074:2;5044:33;5040:42;5028:55;;;5098:18;;;5118:22;;;5095:46;5092:72;;;5144:18;;:::i;:::-;5184:10;5180:2;5173:22;5213:6;5204:15;;5243:6;5235;5228:22;5283:3;5274:6;5269:3;5265:16;5262:25;5259:45;;;5300:1;5297;5290:12;5259:45;5350:6;5345:3;5338:4;5330:6;5326:17;5313:44;5405:1;5398:4;5389:6;5381;5377:19;5373:30;5366:41;;;;4781:632;;;;;:::o;5418:451::-;5487:6;5540:2;5528:9;5519:7;5515:23;5511:32;5508:52;;;5556:1;5553;5546:12;5508:52;5596:9;5583:23;5629:18;5621:6;5618:30;5615:50;;;5661:1;5658;5651:12;5615:50;5684:22;;5737:4;5729:13;;5725:27;-1:-1:-1;5715:55:1;;5766:1;5763;5756:12;5715:55;5789:74;5855:7;5850:2;5837:16;5832:2;5828;5824:11;5789:74;:::i;5874:326::-;5950:6;5958;5966;6019:2;6007:9;5998:7;5994:23;5990:32;5987:52;;;6035:1;6032;6025:12;5987:52;6071:9;6058:23;6048:33;;6100:38;6134:2;6123:9;6119:18;6100:38;:::i;:::-;6090:48;;6157:37;6190:2;6179:9;6175:18;6157:37;:::i;:::-;6147:47;;5874:326;;;;;:::o;6205:683::-;6300:6;6308;6316;6369:2;6357:9;6348:7;6344:23;6340:32;6337:52;;;6385:1;6382;6375:12;6337:52;6421:9;6408:23;6398:33;;6482:2;6471:9;6467:18;6454:32;6505:18;6546:2;6538:6;6535:14;6532:34;;;6562:1;6559;6552:12;6532:34;6600:6;6589:9;6585:22;6575:32;;6645:7;6638:4;6634:2;6630:13;6626:27;6616:55;;6667:1;6664;6657:12;6616:55;6707:2;6694:16;6733:2;6725:6;6722:14;6719:34;;;6749:1;6746;6739:12;6719:34;6802:7;6797:2;6787:6;6784:1;6780:14;6776:2;6772:23;6768:32;6765:45;6762:65;;;6823:1;6820;6813:12;6762:65;6854:2;6850;6846:11;6836:21;;6876:6;6866:16;;;;;6205:683;;;;;:::o;7078:315::-;7143:6;7151;7204:2;7192:9;7183:7;7179:23;7175:32;7172:52;;;7220:1;7217;7210:12;7172:52;7243:29;7262:9;7243:29;:::i;:::-;7233:39;;7322:2;7311:9;7307:18;7294:32;7335:28;7357:5;7335:28;:::i;:::-;7382:5;7372:15;;;7078:315;;;;;:::o;7398:667::-;7493:6;7501;7509;7517;7570:3;7558:9;7549:7;7545:23;7541:33;7538:53;;;7587:1;7584;7577:12;7538:53;7610:29;7629:9;7610:29;:::i;:::-;7600:39;;7658:38;7692:2;7681:9;7677:18;7658:38;:::i;:::-;7648:48;;7743:2;7732:9;7728:18;7715:32;7705:42;;7798:2;7787:9;7783:18;7770:32;7825:18;7817:6;7814:30;7811:50;;;7857:1;7854;7847:12;7811:50;7880:22;;7933:4;7925:13;;7921:27;-1:-1:-1;7911:55:1;;7962:1;7959;7952:12;7911:55;7985:74;8051:7;8046:2;8033:16;8028:2;8024;8020:11;7985:74;:::i;:::-;7975:84;;;7398:667;;;;;;;:::o;8070:260::-;8138:6;8146;8199:2;8187:9;8178:7;8174:23;8170:32;8167:52;;;8215:1;8212;8205:12;8167:52;8238:29;8257:9;8238:29;:::i;:::-;8228:39;;8286:38;8320:2;8309:9;8305:18;8286:38;:::i;8335:356::-;8537:2;8519:21;;;8556:18;;;8549:30;8615:34;8610:2;8595:18;;8588:62;8682:2;8667:18;;8335:356::o;8696:380::-;8775:1;8771:12;;;;8818;;;8839:61;;8893:4;8885:6;8881:17;8871:27;;8839:61;8946:2;8938:6;8935:14;8915:18;8912:38;8909:161;;8992:10;8987:3;8983:20;8980:1;8973:31;9027:4;9024:1;9017:15;9055:4;9052:1;9045:15;8909:161;;8696:380;;;:::o;9803:245::-;9870:6;9923:2;9911:9;9902:7;9898:23;9894:32;9891:52;;;9939:1;9936;9929:12;9891:52;9971:9;9965:16;9990:28;10012:5;9990:28;:::i;10053:127::-;10114:10;10109:3;10105:20;10102:1;10095:31;10145:4;10142:1;10135:15;10169:4;10166:1;10159:15;10185:168;10225:7;10291:1;10287;10283:6;10279:14;10276:1;10273:21;10268:1;10261:9;10254:17;10250:45;10247:71;;;10298:18;;:::i;:::-;-1:-1:-1;10338:9:1;;10185:168::o;10358:127::-;10419:10;10414:3;10410:20;10407:1;10400:31;10450:4;10447:1;10440:15;10474:4;10471:1;10464:15;10490:120;10530:1;10556;10546:35;;10561:18;;:::i;:::-;-1:-1:-1;10595:9:1;;10490:120::o;11027:128::-;11067:3;11098:1;11094:6;11091:1;11088:13;11085:39;;;11104:18;;:::i;:::-;-1:-1:-1;11140:9:1;;11027:128::o;11160:135::-;11199:3;11220:17;;;11217:43;;11240:18;;:::i;:::-;-1:-1:-1;11287:1:1;11276:13;;11160:135::o;11713:127::-;11774:10;11769:3;11765:20;11762:1;11755:31;11805:4;11802:1;11795:15;11829:4;11826:1;11819:15;13813:348;14015:2;13997:21;;;14054:2;14034:18;;;14027:30;14093:26;14088:2;14073:18;;14066:54;14152:2;14137:18;;13813:348::o;14708:1527::-;14932:3;14970:6;14964:13;14996:4;15009:51;15053:6;15048:3;15043:2;15035:6;15031:15;15009:51;:::i;:::-;15123:13;;15082:16;;;;15145:55;15123:13;15082:16;15167:15;;;15145:55;:::i;:::-;15289:13;;15222:20;;;15262:1;;15349;15371:18;;;;15424;;;;15451:93;;15529:4;15519:8;15515:19;15503:31;;15451:93;15592:2;15582:8;15579:16;15559:18;15556:40;15553:167;;-1:-1:-1;;;15619:33:1;;15675:4;15672:1;15665:15;15705:4;15626:3;15693:17;15553:167;15736:18;15763:110;;;;15887:1;15882:328;;;;15729:481;;15763:110;-1:-1:-1;;15798:24:1;;15784:39;;15843:20;;;;-1:-1:-1;15763:110:1;;15882:328;14655:1;14648:14;;;14692:4;14679:18;;15977:1;15991:169;16005:8;16002:1;15999:15;15991:169;;;16087:14;;16072:13;;;16065:37;16130:16;;;;16022:10;;15991:169;;;15995:3;;16191:8;16184:5;16180:20;16173:27;;15729:481;-1:-1:-1;16226:3:1;;14708:1527;-1:-1:-1;;;;;;;;;;;14708:1527:1:o;16647:406::-;16849:2;16831:21;;;16888:2;16868:18;;;16861:30;16927:34;16922:2;16907:18;;16900:62;-1:-1:-1;;;16993:2:1;16978:18;;16971:40;17043:3;17028:19;;16647:406::o;18239:413::-;18441:2;18423:21;;;18480:2;18460:18;;;18453:30;18519:34;18514:2;18499:18;;18492:62;-1:-1:-1;;;18585:2:1;18570:18;;18563:47;18642:3;18627:19;;18239:413::o;19727:125::-;19767:4;19795:1;19792;19789:8;19786:34;;;19800:18;;:::i;:::-;-1:-1:-1;19837:9:1;;19727:125::o;19857:112::-;19889:1;19915;19905:35;;19920:18;;:::i;:::-;-1:-1:-1;19954:9:1;;19857:112::o;21202:414::-;21404:2;21386:21;;;21443:2;21423:18;;;21416:30;21482:34;21477:2;21462:18;;21455:62;-1:-1:-1;;;21548:2:1;21533:18;;21526:48;21606:3;21591:19;;21202:414::o;22339:489::-;-1:-1:-1;;;;;22608:15:1;;;22590:34;;22660:15;;22655:2;22640:18;;22633:43;22707:2;22692:18;;22685:34;;;22755:3;22750:2;22735:18;;22728:31;;;22533:4;;22776:46;;22802:19;;22794:6;22776:46;:::i;:::-;22768:54;22339:489;-1:-1:-1;;;;;;22339:489:1:o;22833:249::-;22902:6;22955:2;22943:9;22934:7;22930:23;22926:32;22923:52;;;22971:1;22968;22961:12;22923:52;23003:9;22997:16;23022:30;23046:5;23022:30;:::i;23087:127::-;23148:10;23143:3;23139:20;23136:1;23129:31;23179:4;23176:1;23169:15;23203:4;23200:1;23193:15

Swarm Source

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