ETH Price: $3,112.75 (+1.45%)
Gas: 7 Gwei

Token

PIGEONS OF NEW YORK: Phase 3 (PONY)
 

Overview

Max Total Supply

557 PONY

Holders

224

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 PONY
0x044Ffe4018944C0e309Ca0bd3e386F4d0190D379
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:
Phase3

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-02
*/

// SPDX-License-Identifier: MIT

//Developer Info:
//Written by Blockchainguy.net
//Email: [email protected]
//Instagram: @sheraz.manzoor


pragma solidity ^0.8.0;
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
pragma solidity ^0.8.0;
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
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;
}
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);
}
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);
    function tokenByIndex(uint256 index) external view returns (uint256);
}
pragma solidity ^0.8.1;
library Address {
    function isContract(address account) internal view returns (bool) {

        return account.code.length > 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);
            }
        }
    }
}
// OpenZeppelin Contracts v4.4.1 (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;
    }
}

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);
    }
}
// OpenZeppelin Contracts v4.4.1 (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) {
        // 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);
    }
}
// OpenZeppelin Contracts v4.4.1 (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;
    }
}

pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {
    // word because each write operation emits an extra SLOAD to first read the
    // back. This is the compiler's defense against contract upgrades and

    // but in exchange the refund on every call to nonReentrant will be lower in
    // transaction's gas, it is best to keep them low in cases like this one, to
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;

        _;
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;
contract ERC721A is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 private currentIndex = 0;

    uint256 internal immutable collectionSize;
    uint256 internal immutable maxBatchSize;
    string private _name;
    string private _symbol;
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) private _ownerships;
    mapping(address => AddressData) private _addressData;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxBatchSize_,
        uint256 collectionSize_
    ) {
        require(
            collectionSize_ > 0,
            "ERC721A: collection must have a nonzero supply"
        );
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
        collectionSize = collectionSize_;
    }
    function totalSupply() public view override returns (uint256) {
        return currentIndex;
    }
    function tokenByIndex(uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < totalSupply(), "ERC721A: global index out of bounds");
        return index;
    }
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A: unable to get token of owner by index");
    }
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view override returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: balance query for the zero address"
        );
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: number minted query for the zero address"
        );
        return uint256(_addressData[owner].numberMinted);
    }

    function ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

        uint256 lowestTokenToCheck;
        if (tokenId >= maxBatchSize) {
            lowestTokenToCheck = tokenId - maxBatchSize + 1;
        }

        for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }

        revert("ERC721A: unable to determine the owner of token");
    }
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    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 override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, "ERC721A: approval to current owner");

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

        _approve(to, tokenId, owner);
    }
    function getApproved(uint256 tokenId)
        public
        view
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721A: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved)
        public
        override
    {
        require(operator != _msgSender(), "ERC721A: 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 override {
        _transfer(from, to, tokenId);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A: mint to the zero address");
        require(!_exists(startTokenId), "ERC721A: token already minted");
        require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        AddressData memory addressData = _addressData[to];
        _addressData[to] = AddressData(
            addressData.balance + uint128(quantity),
            addressData.numberMinted + uint128(quantity)
        );
        _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

        uint256 updatedIndex = startTokenId;

        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            require(
                _checkOnERC721Received(address(0), to, updatedIndex, _data),
                "ERC721A: transfer to non ERC721Receiver implementer"
            );
            updatedIndex++;
        }

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(
            isApprovedOrOwner,
            "ERC721A: transfer caller is not owner nor approved"
        );

        require(
            prevOwnership.addr == from,
            "ERC721A: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721A: transfer to the zero address");

        _beforeTokenTransfers(from, to, tokenId, 1);
        _approve(address(0), tokenId, prevOwnership.addr);

        _addressData[from].balance -= 1;
        _addressData[to].balance += 1;
        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));
        // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(
                    prevOwnership.addr,
                    prevOwnership.startTimestamp
                );
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    uint256 public nextOwnerToExplicitlySet = 0;
    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > collectionSize - 1) {
            endIndex = collectionSize - 1;
        }
        require(_exists(endIndex), "not enough minted yet for this cleanup");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(
                    ownership.addr,
                    ownership.startTimestamp
                );
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }
    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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721A: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract Phase3 is Ownable, ERC721A, ReentrancyGuard {
    uint256 public maxToken = 1000;
    uint256 public maxTokentoMint = 516;
    string private _baseTokenURI= "https://crumbos.vercel.app/api/phase3/";
    string public _extension = "";
    address public PHASE1_CONTRACT_ADDRESS = 0xF3ff64b9477b19adcf15e71945282DFAc1a1703b;
    address public PHASE2_CONTRACT_ADDRESS = 0xA76AAb0aA0587b52B9a57C400c9a7001f7a8472C;
    address public CRUMBOS_CONTRACT_ADDRESS = 0x8F60ee65DD44260D09628FC6Ddc49bBc0F52577b;
    address public BURN_ADDRESS = 0x0000000000000000000000000000000000001001;
    bool public mergeStarted = false;
    uint256 public maxPerTx = 10;

    uint256 public mutationPrice = 0 ether;
    uint256 public mintingPrice = 0.04 ether;


    constructor()  ERC721A("PIGEONS OF NEW YORK: Phase 3", "PONY", 1000, maxToken)
    {}

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }
    function mergeNfts(uint[] memory idsOfPhase1, uint[] memory idsOfPhase2, uint[] memory idsOfCrumbos ) external payable nonReentrant{

        uint crumbosBalance = IERC721(CRUMBOS_CONTRACT_ADDRESS).balanceOf(msg.sender);
        uint totalNftsToMint = idsOfPhase1.length + idsOfPhase2.length;

        require(idsOfCrumbos.length == totalNftsToMint, "Invalid Arguments");
        require(crumbosBalance >= totalNftsToMint, "You donot have enough Crumbos.");
        require(idsOfPhase1.length > 0 || idsOfPhase2.length > 0, "Select atleast 1 Nft to burn");
        require(idsOfCrumbos.length > 0, "Add Crumbos Id");
        require(totalSupply() + totalNftsToMint <= maxTokentoMint, "Max Supply Reached.");
        require(msg.value == mutationPrice * totalNftsToMint, "INVALID_ETH");
        require(mergeStarted, "Not Started Yet!");

        require(IERC721(CRUMBOS_CONTRACT_ADDRESS).isApprovedForAll(msg.sender, address(this)) , "Approve CRUMBOS Nfts");
         //Burning Nfts of Crumbos
        for(uint i=0; i<idsOfCrumbos.length; i++){
            IERC721(CRUMBOS_CONTRACT_ADDRESS).safeTransferFrom(msg.sender, BURN_ADDRESS, idsOfCrumbos[i]);
        }


        if(idsOfPhase1.length > 0){
            require(IERC721(PHASE1_CONTRACT_ADDRESS).isApprovedForAll(msg.sender, address(this)) , "Approve Phase 1 Nfts");
            //Burning Nfts of Phase1
            for(uint i=0; i<idsOfPhase1.length; i++){
                IERC721(PHASE1_CONTRACT_ADDRESS).safeTransferFrom(msg.sender, BURN_ADDRESS, idsOfPhase1[i]);
            }
        }

        if(idsOfPhase2.length > 0){
            require(IERC721(PHASE2_CONTRACT_ADDRESS).isApprovedForAll(msg.sender, address(this)) , "Approve Phase 2 Nfts");
            //Burning Nfts of Phase2
            for(uint i=0; i<idsOfPhase2.length; i++){
                IERC721(PHASE2_CONTRACT_ADDRESS).safeTransferFrom(msg.sender, BURN_ADDRESS, idsOfPhase2[i]);
            }
        }

        _safeMint(msg.sender, totalNftsToMint);

    }
    
    function buy(uint256 quantity) public payable {
        require(mergeStarted, "Not Started Yet!");
        require(totalSupply() + quantity <= maxTokentoMint, "Max Supply Reached.");
        require(msg.value == mintingPrice * quantity, "INVALID_ETH");
        require(quantity > 0, "CANNOT_MINT_THAT_MANY");
        require(quantity <= maxPerTx, "You cannot mint more than the limit.");

        _safeMint(msg.sender, quantity);

    }
    function get_data_for_dapp(address _temp) public view returns(bool,bool,bool,uint,uint,uint,uint,uint,uint){

        return(IERC721(PHASE1_CONTRACT_ADDRESS).isApprovedForAll(_temp, address(this)),
            IERC721(PHASE2_CONTRACT_ADDRESS).isApprovedForAll(_temp, address(this)),
            IERC721(CRUMBOS_CONTRACT_ADDRESS).isApprovedForAll(_temp, address(this)), 
            IERC721(CRUMBOS_CONTRACT_ADDRESS).balanceOf(_temp), 
            IERC721(PHASE1_CONTRACT_ADDRESS).balanceOf(_temp), 
            totalSupply(),
            mintingPrice,
            mutationPrice,
            maxTokentoMint
            );

    }
    function setMaxLimits(uint256 t_max_per_tx) external onlyOwner {
        maxPerTx = t_max_per_tx;
    }
   function sendGiftsToOwner(address _wallet, uint256 _num) external onlyOwner{
            require(totalSupply() + _num < maxToken, "Max Supply Reached.");
            _safeMint(_wallet, _num);
    }
    function sendGifts(address _wallet, uint256 _num) external onlyOwner{
         require(totalSupply() + _num <= maxToken, "Max Supply Reached.");
            _safeMint(_wallet, _num);
    }
   function sendGiftsToWallet(address _wallet, uint256 _num) external onlyOwner{
            require(totalSupply() + _num <= maxToken, "Max Supply Reached.");
            _safeMint(_wallet, _num);
    }
    function updateMintingPrice(uint256 price_in_wei) external onlyOwner{
            mintingPrice = price_in_wei;
    }
    function updateMutationPrice(uint256 price_in_wei) external onlyOwner{
            mutationPrice = price_in_wei;
    }
    function changeCollectionAddress(address phase1, address phase2, address crumbos) external onlyOwner{
            PHASE1_CONTRACT_ADDRESS = phase1;
            PHASE2_CONTRACT_ADDRESS = phase2;
            CRUMBOS_CONTRACT_ADDRESS = crumbos;
    }


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

    function setBaseURI(string calldata baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }

    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
    function setmaxToken(uint _temp) onlyOwner public {
        maxToken = _temp;
    }
    function setmaxTokentoMint(uint _temp) onlyOwner public {
        maxTokentoMint = _temp;
    }
    function updateExtension(string memory _temp) onlyOwner public {
        _extension = _temp;
    }
    function setMergeStarted(bool _temp) onlyOwner public {
        mergeStarted = _temp;
    }
    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }

    function getOwnershipData(uint256 tokenId)
        external
        view
        returns (TokenOwnership memory)
    {
        return ownershipOf(tokenId);
    }

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

        string memory _tokenURI = super.tokenURI(tokenId);
        return
            bytes(_tokenURI).length > 0
                ? string(abi.encodePacked(_tokenURI, _extension))
                : "";
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CRUMBOS_CONTRACT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PHASE1_CONTRACT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PHASE2_CONTRACT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_extension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"phase1","type":"address"},{"internalType":"address","name":"phase2","type":"address"},{"internalType":"address","name":"crumbos","type":"address"}],"name":"changeCollectionAddress","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":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_temp","type":"address"}],"name":"get_data_for_dapp","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokentoMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"idsOfPhase1","type":"uint256[]"},{"internalType":"uint256[]","name":"idsOfPhase2","type":"uint256[]"},{"internalType":"uint256[]","name":"idsOfCrumbos","type":"uint256[]"}],"name":"mergeNfts","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mergeStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mutationPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"_wallet","type":"address"},{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"sendGifts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"sendGiftsToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"sendGiftsToWallet","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"t_max_per_tx","type":"uint256"}],"name":"setMaxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_temp","type":"bool"}],"name":"setMergeStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_temp","type":"uint256"}],"name":"setmaxToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_temp","type":"uint256"}],"name":"setmaxTokentoMint","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":[],"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":[{"internalType":"string","name":"_temp","type":"string"}],"name":"updateExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_in_wei","type":"uint256"}],"name":"updateMintingPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_in_wei","type":"uint256"}],"name":"updateMutationPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

600060018190556008556103e8600a55610204600b55610120604052602660c08181529062003aa460e03980516200004091600c91602090910190620002d7565b506040805160208101918290526000908190526200006191600d91620002d7565b50600e80546001600160a01b031990811673f3ff64b9477b19adcf15e71945282dfac1a1703b17909155600f8054821673a76aab0aa0587b52b9a57c400c9a7001f7a8472c17905560108054909116738f60ee65dd44260d09628fc6ddc49bbc0f52577b179055601180546001600160a81b031916611001179055600a6012556000601355668e1bc9bf040000601455348015620000fe57600080fd5b506040518060400160405280601c81526020017f504947454f4e53204f46204e455720594f524b3a20506861736520330000000081525060405180604001604052806004815260200163504f4e5960e01b8152506103e8600a54620001726200016c6200028360201b60201c565b62000287565b60008111620001df5760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620002415760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b6064820152608401620001d6565b835162000256906002906020870190620002d7565b5082516200026c906003906020860190620002d7565b5060a09190915260805250506001600955620003ba565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620002e5906200037d565b90600052602060002090601f01602090048101928262000309576000855562000354565b82601f106200032457805160ff191683800117855562000354565b8280016001018555821562000354579182015b828111156200035457825182559160200191906001019062000337565b506200036292915062000366565b5090565b5b8082111562000362576000815560010162000367565b600181811c908216806200039257607f821691505b60208210811415620003b457634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516136b9620003eb600039600081816125170152818161254101526129650152600050506136b96000f3fe6080604052600436106102ad5760003560e01c806370a0823111610175578063b74bf884116100dc578063d7224ba011610095578063e985e9c51161006f578063e985e9c514610862578063f2fde38b146108ab578063f968adbe146108cb578063fccc2813146108e157600080fd5b8063d7224ba014610819578063d96a094a1461082f578063dc33e6811461084257600080fd5b8063b74bf8841461078d578063b88d4fde146107ad578063c87b56dd146107cd578063ca69e323146107ed578063cff7736314610803578063d1f919ed146102b257600080fd5b80639231ab2a1161012e5780639231ab2a146106ab57806395d89b41146106f8578063a22cb4651461070d578063a70799ec1461072d578063ae7ae3de1461074d578063b2bcf62f1461076d57600080fd5b806370a0823114610605578063715018a6146106255780637abc8f051461063a5780637e6182d91461065a578063805cba1e1461067a5780638da5cb5b1461068d57600080fd5b80632f745c59116102195780634f6ccce7116101d25780634f6ccce7146105455780634fbb867c1461056557806355f804b3146105855780635788ff36146105a55780636352211e146105c557806364527dc0146105e557600080fd5b80632f745c59146104a557806335db70b5146104c55780633ae1dd9d146104db5780633ccfd60b146104f057806342842e0e1461050557806343734cb21461052557600080fd5b806316adccc21161026b57806316adccc2146103a357806318160ddd146103c35780631974c998146103e25780631cad311e146103f8578063208128af1461046457806323b872dd1461048557600080fd5b806247c745146102b257806301ffc9a7146102d457806306fdde0314610309578063081812fc1461032b578063095ea7b314610363578063159c932314610383575b600080fd5b3480156102be57600080fd5b506102d26102cd36600461300e565b610901565b005b3480156102e057600080fd5b506102f46102ef3660046130f9565b610977565b60405190151581526020015b60405180910390f35b34801561031557600080fd5b5061031e6109e4565b6040516103009190613367565b34801561033757600080fd5b5061034b6103463660046131ec565b610a76565b6040516001600160a01b039091168152602001610300565b34801561036f57600080fd5b506102d261037e36600461300e565b610b01565b34801561038f57600080fd5b506102d261039e3660046131ec565b610c19565b3480156103af57600080fd5b50600e5461034b906001600160a01b031681565b3480156103cf57600080fd5b506001545b604051908152602001610300565b3480156103ee57600080fd5b506103d460135481565b34801561040457600080fd5b50610418610413366004612e8f565b610c48565b604080519915158a5297151560208a0152951515968801969096526060870193909352608086019190915260a085015260c084015260e083019190915261010082015261012001610300565b34801561047057600080fd5b506011546102f490600160a01b900460ff1681565b34801561049157600080fd5b506102d26104a0366004612f20565b610f2c565b3480156104b157600080fd5b506103d46104c036600461300e565b610f37565b3480156104d157600080fd5b506103d460145481565b3480156104e757600080fd5b5061031e6110af565b3480156104fc57600080fd5b506102d261113d565b34801561051157600080fd5b506102d2610520366004612f20565b611196565b34801561053157600080fd5b50600f5461034b906001600160a01b031681565b34801561055157600080fd5b506103d46105603660046131ec565b6111b1565b34801561057157600080fd5b506102d26105803660046131ec565b61121a565b34801561059157600080fd5b506102d26105a0366004613133565b611249565b3480156105b157600080fd5b506102d26105c03660046131ec565b61127f565b3480156105d157600080fd5b5061034b6105e03660046131ec565b6112ae565b3480156105f157600080fd5b506102d26106003660046131ec565b6112c0565b34801561061157600080fd5b506103d4610620366004612e8f565b6112ef565b34801561063157600080fd5b506102d2611380565b34801561064657600080fd5b506102d261065536600461300e565b6113b6565b34801561066657600080fd5b506102d26106753660046131a4565b611414565b6102d2610688366004613038565b611451565b34801561069957600080fd5b506000546001600160a01b031661034b565b3480156106b757600080fd5b506106cb6106c63660046131ec565b611bf2565b6040805182516001600160a01b031681526020928301516001600160401b03169281019290925201610300565b34801561070457600080fd5b5061031e611c0f565b34801561071957600080fd5b506102d2610728366004612fd7565b611c1e565b34801561073957600080fd5b5060105461034b906001600160a01b031681565b34801561075957600080fd5b506102d26107683660046131ec565b611ce3565b34801561077957600080fd5b506102d26107883660046130bf565b611d12565b34801561079957600080fd5b506102d26107a8366004612edd565b611d5a565b3480156107b957600080fd5b506102d26107c8366004612f5c565b611dc3565b3480156107d957600080fd5b5061031e6107e83660046131ec565b611dfc565b3480156107f957600080fd5b506103d4600a5481565b34801561080f57600080fd5b506103d4600b5481565b34801561082557600080fd5b506103d460085481565b6102d261083d3660046131ec565b611e7b565b34801561084e57600080fd5b506103d461085d366004612e8f565b611ff6565b34801561086e57600080fd5b506102f461087d366004612eaa565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156108b757600080fd5b506102d26108c6366004612e8f565b612001565b3480156108d757600080fd5b506103d460125481565b3480156108ed57600080fd5b5060115461034b906001600160a01b031681565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161092b9061337a565b60405180910390fd5b600a548161094160015490565b61094b91906134d0565b11156109695760405162461bcd60e51b815260040161092b90613451565b6109738282612099565b5050565b60006001600160e01b031982166380ac58cd60e01b14806109a857506001600160e01b03198216635b5e139f60e01b145b806109c357506001600160e01b0319821663780e9d6360e01b145b806109de57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546109f39061359d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1f9061359d565b8015610a6c5780601f10610a4157610100808354040283529160200191610a6c565b820191906000526020600020905b815481529060010190602001808311610a4f57829003601f168201915b5050505050905090565b6000610a83826001541190565b610ae55760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b606482015260840161092b565b506000908152600660205260409020546001600160a01b031690565b6000610b0c826112ae565b9050806001600160a01b0316836001600160a01b03161415610b7b5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b606482015260840161092b565b336001600160a01b0382161480610b975750610b97813361087d565b610c095760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606482015260840161092b565b610c148383836120b3565b505050565b6000546001600160a01b03163314610c435760405162461bcd60e51b815260040161092b9061337a565b600b55565b600e5460405163e985e9c560e01b81526001600160a01b038381166004830152306024830152600092839283928392839283928392839283929091169063e985e9c59060440160206040518083038186803b158015610ca657600080fd5b505afa158015610cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cde91906130dc565b600f5460405163e985e9c560e01b81526001600160a01b038d811660048301523060248301529091169063e985e9c59060440160206040518083038186803b158015610d2957600080fd5b505afa158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6191906130dc565b60105460405163e985e9c560e01b81526001600160a01b038e811660048301523060248301529091169063e985e9c59060440160206040518083038186803b158015610dac57600080fd5b505afa158015610dc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de491906130dc565b6010546040516370a0823160e01b81526001600160a01b038f81166004830152909116906370a082319060240160206040518083038186803b158015610e2957600080fd5b505afa158015610e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e619190613205565b600e60009054906101000a90046001600160a01b03166001600160a01b03166370a082318f6040518263ffffffff1660e01b8152600401610eb191906001600160a01b0391909116815260200190565b60206040518083038186803b158015610ec957600080fd5b505afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f019190613205565b600154601454601354600b549850985098509850985098509850985098509193959799909294969850565b610c1483838361210f565b6000610f42836112ef565b8210610f9b5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161092b565b6000610fa660015490565b905060008060005b8381101561104f576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561100057805192505b876001600160a01b0316836001600160a01b0316141561103c578684141561102e575093506109de92505050565b83611038816135d8565b9450505b5080611047816135d8565b915050610fae565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b606482015260840161092b565b600d80546110bc9061359d565b80601f01602080910402602001604051908101604052809291908181526020018280546110e89061359d565b80156111355780601f1061110a57610100808354040283529160200191611135565b820191906000526020600020905b81548152906001019060200180831161111857829003601f168201915b505050505081565b6000546001600160a01b031633146111675760405162461bcd60e51b815260040161092b9061337a565b60405133904780156108fc02916000818181858888f19350505050158015611193573d6000803e3d6000fd5b50565b610c1483838360405180602001604052806000815250611dc3565b60006111bc60015490565b82106112165760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b606482015260840161092b565b5090565b6000546001600160a01b031633146112445760405162461bcd60e51b815260040161092b9061337a565b601255565b6000546001600160a01b031633146112735760405162461bcd60e51b815260040161092b9061337a565b610c14600c8383612c8e565b6000546001600160a01b031633146112a95760405162461bcd60e51b815260040161092b9061337a565b601455565b60006112b982612495565b5192915050565b6000546001600160a01b031633146112ea5760405162461bcd60e51b815260040161092b9061337a565b601355565b60006001600160a01b03821661135b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161092b565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b031633146113aa5760405162461bcd60e51b815260040161092b9061337a565b6113b4600061263e565b565b6000546001600160a01b031633146113e05760405162461bcd60e51b815260040161092b9061337a565b600a54816113ed60015490565b6113f791906134d0565b106109695760405162461bcd60e51b815260040161092b90613451565b6000546001600160a01b0316331461143e5760405162461bcd60e51b815260040161092b9061337a565b805161097390600d906020840190612d0e565b600260095414156114a45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161092b565b60026009556010546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156114ed57600080fd5b505afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190613205565b905060008351855161153791906134d0565b90508083511461157d5760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420417267756d656e747360781b604482015260640161092b565b808210156115cd5760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f6e6f74206861766520656e6f756768204372756d626f732e0000604482015260640161092b565b6000855111806115de575060008451115b61162a5760405162461bcd60e51b815260206004820152601c60248201527f53656c6563742061746c656173742031204e667420746f206275726e00000000604482015260640161092b565b600083511161166c5760405162461bcd60e51b815260206004820152600e60248201526d1059190810dc9d5b589bdcc8125960921b604482015260640161092b565b600b548161167960015490565b61168391906134d0565b11156116a15760405162461bcd60e51b815260040161092b90613451565b806013546116af91906134fc565b34146116eb5760405162461bcd60e51b815260206004820152600b60248201526a0929cac82989288be8aa8960ab1b604482015260640161092b565b601154600160a01b900460ff166117375760405162461bcd60e51b815260206004820152601060248201526f4e6f742053746172746564205965742160801b604482015260640161092b565b60105460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c59060440160206040518083038186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b891906130dc565b6117fb5760405162461bcd60e51b8152602060048201526014602482015273417070726f7665204352554d424f53204e66747360601b604482015260640161092b565b60005b83518110156118bd5760105460115485516001600160a01b03928316926342842e0e92339291169088908690811061183857611838613633565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b5050505080806118b5906135d8565b9150506117fe565b50845115611a4d57600e5460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c59060440160206040518083038186803b15801561190e57600080fd5b505afa158015611922573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194691906130dc565b6119895760405162461bcd60e51b8152602060048201526014602482015273417070726f76652050686173652031204e66747360601b604482015260640161092b565b60005b8551811015611a4b57600e5460115487516001600160a01b03928316926342842e0e9233929116908a90869081106119c6576119c6613633565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015611a2057600080fd5b505af1158015611a34573d6000803e3d6000fd5b505050508080611a43906135d8565b91505061198c565b505b835115611bdc57600f5460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c59060440160206040518083038186803b158015611a9d57600080fd5b505afa158015611ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad591906130dc565b611b185760405162461bcd60e51b8152602060048201526014602482015273417070726f76652050686173652032204e66747360601b604482015260640161092b565b60005b8451811015611bda57600f5460115486516001600160a01b03928316926342842e0e923392911690899086908110611b5557611b55613633565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b505050508080611bd2906135d8565b915050611b1b565b505b611be63382612099565b50506001600955505050565b60408051808201909152600080825260208201526109de82612495565b6060600380546109f39061359d565b6001600160a01b038216331415611c775760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604482015260640161092b565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b03163314611d0d5760405162461bcd60e51b815260040161092b9061337a565b600a55565b6000546001600160a01b03163314611d3c5760405162461bcd60e51b815260040161092b9061337a565b60118054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314611d845760405162461bcd60e51b815260040161092b9061337a565b600e80546001600160a01b039485166001600160a01b031991821617909155600f80549385169382169390931790925560108054919093169116179055565b611dce84848461210f565b611dda8484848461268e565b611df65760405162461bcd60e51b815260040161092b906133fe565b50505050565b6060611e09826001541190565b611e255760405162461bcd60e51b815260040161092b906133af565b6000611e308361279c565b90506000815111611e505760405180602001604052806000815250611e74565b80600d604051602001611e64929190613279565b6040516020818303038152906040525b9392505050565b601154600160a01b900460ff16611ec75760405162461bcd60e51b815260206004820152601060248201526f4e6f742053746172746564205965742160801b604482015260640161092b565b600b5481611ed460015490565b611ede91906134d0565b1115611efc5760405162461bcd60e51b815260040161092b90613451565b80601454611f0a91906134fc565b3414611f465760405162461bcd60e51b815260206004820152600b60248201526a0929cac82989288be8aa8960ab1b604482015260640161092b565b60008111611f8e5760405162461bcd60e51b815260206004820152601560248201527443414e4e4f545f4d494e545f544841545f4d414e5960581b604482015260640161092b565b601254811115611fec5760405162461bcd60e51b8152602060048201526024808201527f596f752063616e6e6f74206d696e74206d6f7265207468616e20746865206c6960448201526336b4ba1760e11b606482015260840161092b565b6111933382612099565b60006109de8261280a565b6000546001600160a01b0316331461202b5760405162461bcd60e51b815260040161092b9061337a565b6001600160a01b0381166120905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092b565b6111938161263e565b6109738282604051806020016040528060008152506128a8565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061211a82612495565b80519091506000906001600160a01b0316336001600160a01b0316148061215157503361214684610a76565b6001600160a01b0316145b8061216357508151612163903361087d565b9050806121cd5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161092b565b846001600160a01b031682600001516001600160a01b0316146122415760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b606482015260840161092b565b6001600160a01b0384166122a55760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b606482015260840161092b565b6122b560008484600001516120b3565b6001600160a01b03851660009081526005602052604081208054600192906122e79084906001600160801b031661351b565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092612333918591166134ae565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b031990911691909216171790556123ba8460016134d0565b6000818152600460205260409020549091506001600160a01b031661244b576123e4816001541190565b1561244b5760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b60408051808201909152600080825260208201526124b4826001541190565b6125135760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b606482015260840161092b565b60007f00000000000000000000000000000000000000000000000000000000000000008310612574576125667f000000000000000000000000000000000000000000000000000000000000000084613543565b6125719060016134d0565b90505b825b8181106125dd576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b031691830191909152156125ca57949350505050565b50806125d581613586565b915050612576565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b606482015260840161092b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0384163b1561279057604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906126d290339089908890889060040161332a565b602060405180830381600087803b1580156126ec57600080fd5b505af192505050801561271c575060408051601f3d908101601f1916820190925261271991810190613116565b60015b612776573d80801561274a576040519150601f19603f3d011682016040523d82523d6000602084013e61274f565b606091505b50805161276e5760405162461bcd60e51b815260040161092b906133fe565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612794565b5060015b949350505050565b60606127a9826001541190565b6127c55760405162461bcd60e51b815260040161092b906133af565b60006127cf612b82565b905060008151116127ef5760405180602001604052806000815250611e74565b806127f984612b91565b604051602001611e6492919061324a565b60006001600160a01b03821661287c5760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161092b565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b03841661290b5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161092b565b612916816001541190565b156129635760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604482015260640161092b565b7f00000000000000000000000000000000000000000000000000000000000000008311156129de5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b606482015260840161092b565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612a3a9087906134ae565b6001600160801b03168152602001858360200151612a5891906134ae565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015612b775760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4612b3b600088848861268e565b612b575760405162461bcd60e51b815260040161092b906133fe565b81612b61816135d8565b9250508080612b6f906135d8565b915050612aee565b50600181905561248d565b6060600c80546109f39061359d565b606081612bb55750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612bdf5780612bc9816135d8565b9150612bd89050600a836134e8565b9150612bb9565b6000816001600160401b03811115612bf957612bf9613649565b6040519080825280601f01601f191660200182016040528015612c23576020820181803683370190505b5090505b841561279457612c38600183613543565b9150612c45600a866135f3565b612c509060306134d0565b60f81b818381518110612c6557612c65613633565b60200101906001600160f81b031916908160001a905350612c87600a866134e8565b9450612c27565b828054612c9a9061359d565b90600052602060002090601f016020900481019282612cbc5760008555612d02565b82601f10612cd55782800160ff19823516178555612d02565b82800160010185558215612d02579182015b82811115612d02578235825591602001919060010190612ce7565b50611216929150612d82565b828054612d1a9061359d565b90600052602060002090601f016020900481019282612d3c5760008555612d02565b82601f10612d5557805160ff1916838001178555612d02565b82800160010185558215612d02579182015b82811115612d02578251825591602001919060010190612d67565b5b808211156112165760008155600101612d83565b60006001600160401b03831115612db057612db0613649565b612dc3601f8401601f191660200161347e565b9050828152838383011115612dd757600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612e0557600080fd5b919050565b600082601f830112612e1b57600080fd5b813560206001600160401b03821115612e3657612e36613649565b8160051b612e4582820161347e565b838152828101908684018388018501891015612e6057600080fd5b600093505b85841015612e83578035835260019390930192918401918401612e65565b50979650505050505050565b600060208284031215612ea157600080fd5b611e7482612dee565b60008060408385031215612ebd57600080fd5b612ec683612dee565b9150612ed460208401612dee565b90509250929050565b600080600060608486031215612ef257600080fd5b612efb84612dee565b9250612f0960208501612dee565b9150612f1760408501612dee565b90509250925092565b600080600060608486031215612f3557600080fd5b612f3e84612dee565b9250612f4c60208501612dee565b9150604084013590509250925092565b60008060008060808587031215612f7257600080fd5b612f7b85612dee565b9350612f8960208601612dee565b92506040850135915060608501356001600160401b03811115612fab57600080fd5b8501601f81018713612fbc57600080fd5b612fcb87823560208401612d97565b91505092959194509250565b60008060408385031215612fea57600080fd5b612ff383612dee565b915060208301356130038161365f565b809150509250929050565b6000806040838503121561302157600080fd5b61302a83612dee565b946020939093013593505050565b60008060006060848603121561304d57600080fd5b83356001600160401b038082111561306457600080fd5b61307087838801612e0a565b9450602086013591508082111561308657600080fd5b61309287838801612e0a565b935060408601359150808211156130a857600080fd5b506130b586828701612e0a565b9150509250925092565b6000602082840312156130d157600080fd5b8135611e748161365f565b6000602082840312156130ee57600080fd5b8151611e748161365f565b60006020828403121561310b57600080fd5b8135611e748161366d565b60006020828403121561312857600080fd5b8151611e748161366d565b6000806020838503121561314657600080fd5b82356001600160401b038082111561315d57600080fd5b818501915085601f83011261317157600080fd5b81358181111561318057600080fd5b86602082850101111561319257600080fd5b60209290920196919550909350505050565b6000602082840312156131b657600080fd5b81356001600160401b038111156131cc57600080fd5b8201601f810184136131dd57600080fd5b61279484823560208401612d97565b6000602082840312156131fe57600080fd5b5035919050565b60006020828403121561321757600080fd5b5051919050565b6000815180845261323681602086016020860161355a565b601f01601f19169290920160200192915050565b6000835161325c81846020880161355a565b83519083019061327081836020880161355a565b01949350505050565b60008351602061328c828583890161355a565b845491840191600090600181811c90808316806132aa57607f831692505b8583108114156132c857634e487b7160e01b85526022600452602485fd5b8080156132dc57600181146132ed5761331a565b60ff1985168852838801955061331a565b60008b81526020902060005b858110156133125781548a8201529084019088016132f9565b505083880195505b50939a9950505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061335d9083018461321e565b9695505050505050565b602081526000611e74602083018461321e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b60208082526013908201527226b0bc1029bab838363c902932b0b1b432b21760691b604082015260600190565b604051601f8201601f191681016001600160401b03811182821017156134a6576134a6613649565b604052919050565b60006001600160801b0380831681851680830382111561327057613270613607565b600082198211156134e3576134e3613607565b500190565b6000826134f7576134f761361d565b500490565b600081600019048311821515161561351657613516613607565b500290565b60006001600160801b038381169083168181101561353b5761353b613607565b039392505050565b60008282101561355557613555613607565b500390565b60005b8381101561357557818101518382015260200161355d565b83811115611df65750506000910152565b60008161359557613595613607565b506000190190565b600181811c908216806135b157607f821691505b602082108114156135d257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156135ec576135ec613607565b5060010190565b6000826136025761360261361d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461119357600080fd5b6001600160e01b03198116811461119357600080fdfea26469706673582212203c65a6afdd2c2814f21d4723aca8ced772d049b76e8fa07df900d4e18d8051f964736f6c6343000807003368747470733a2f2f6372756d626f732e76657263656c2e6170702f6170692f7068617365332f

Deployed Bytecode

0x6080604052600436106102ad5760003560e01c806370a0823111610175578063b74bf884116100dc578063d7224ba011610095578063e985e9c51161006f578063e985e9c514610862578063f2fde38b146108ab578063f968adbe146108cb578063fccc2813146108e157600080fd5b8063d7224ba014610819578063d96a094a1461082f578063dc33e6811461084257600080fd5b8063b74bf8841461078d578063b88d4fde146107ad578063c87b56dd146107cd578063ca69e323146107ed578063cff7736314610803578063d1f919ed146102b257600080fd5b80639231ab2a1161012e5780639231ab2a146106ab57806395d89b41146106f8578063a22cb4651461070d578063a70799ec1461072d578063ae7ae3de1461074d578063b2bcf62f1461076d57600080fd5b806370a0823114610605578063715018a6146106255780637abc8f051461063a5780637e6182d91461065a578063805cba1e1461067a5780638da5cb5b1461068d57600080fd5b80632f745c59116102195780634f6ccce7116101d25780634f6ccce7146105455780634fbb867c1461056557806355f804b3146105855780635788ff36146105a55780636352211e146105c557806364527dc0146105e557600080fd5b80632f745c59146104a557806335db70b5146104c55780633ae1dd9d146104db5780633ccfd60b146104f057806342842e0e1461050557806343734cb21461052557600080fd5b806316adccc21161026b57806316adccc2146103a357806318160ddd146103c35780631974c998146103e25780631cad311e146103f8578063208128af1461046457806323b872dd1461048557600080fd5b806247c745146102b257806301ffc9a7146102d457806306fdde0314610309578063081812fc1461032b578063095ea7b314610363578063159c932314610383575b600080fd5b3480156102be57600080fd5b506102d26102cd36600461300e565b610901565b005b3480156102e057600080fd5b506102f46102ef3660046130f9565b610977565b60405190151581526020015b60405180910390f35b34801561031557600080fd5b5061031e6109e4565b6040516103009190613367565b34801561033757600080fd5b5061034b6103463660046131ec565b610a76565b6040516001600160a01b039091168152602001610300565b34801561036f57600080fd5b506102d261037e36600461300e565b610b01565b34801561038f57600080fd5b506102d261039e3660046131ec565b610c19565b3480156103af57600080fd5b50600e5461034b906001600160a01b031681565b3480156103cf57600080fd5b506001545b604051908152602001610300565b3480156103ee57600080fd5b506103d460135481565b34801561040457600080fd5b50610418610413366004612e8f565b610c48565b604080519915158a5297151560208a0152951515968801969096526060870193909352608086019190915260a085015260c084015260e083019190915261010082015261012001610300565b34801561047057600080fd5b506011546102f490600160a01b900460ff1681565b34801561049157600080fd5b506102d26104a0366004612f20565b610f2c565b3480156104b157600080fd5b506103d46104c036600461300e565b610f37565b3480156104d157600080fd5b506103d460145481565b3480156104e757600080fd5b5061031e6110af565b3480156104fc57600080fd5b506102d261113d565b34801561051157600080fd5b506102d2610520366004612f20565b611196565b34801561053157600080fd5b50600f5461034b906001600160a01b031681565b34801561055157600080fd5b506103d46105603660046131ec565b6111b1565b34801561057157600080fd5b506102d26105803660046131ec565b61121a565b34801561059157600080fd5b506102d26105a0366004613133565b611249565b3480156105b157600080fd5b506102d26105c03660046131ec565b61127f565b3480156105d157600080fd5b5061034b6105e03660046131ec565b6112ae565b3480156105f157600080fd5b506102d26106003660046131ec565b6112c0565b34801561061157600080fd5b506103d4610620366004612e8f565b6112ef565b34801561063157600080fd5b506102d2611380565b34801561064657600080fd5b506102d261065536600461300e565b6113b6565b34801561066657600080fd5b506102d26106753660046131a4565b611414565b6102d2610688366004613038565b611451565b34801561069957600080fd5b506000546001600160a01b031661034b565b3480156106b757600080fd5b506106cb6106c63660046131ec565b611bf2565b6040805182516001600160a01b031681526020928301516001600160401b03169281019290925201610300565b34801561070457600080fd5b5061031e611c0f565b34801561071957600080fd5b506102d2610728366004612fd7565b611c1e565b34801561073957600080fd5b5060105461034b906001600160a01b031681565b34801561075957600080fd5b506102d26107683660046131ec565b611ce3565b34801561077957600080fd5b506102d26107883660046130bf565b611d12565b34801561079957600080fd5b506102d26107a8366004612edd565b611d5a565b3480156107b957600080fd5b506102d26107c8366004612f5c565b611dc3565b3480156107d957600080fd5b5061031e6107e83660046131ec565b611dfc565b3480156107f957600080fd5b506103d4600a5481565b34801561080f57600080fd5b506103d4600b5481565b34801561082557600080fd5b506103d460085481565b6102d261083d3660046131ec565b611e7b565b34801561084e57600080fd5b506103d461085d366004612e8f565b611ff6565b34801561086e57600080fd5b506102f461087d366004612eaa565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156108b757600080fd5b506102d26108c6366004612e8f565b612001565b3480156108d757600080fd5b506103d460125481565b3480156108ed57600080fd5b5060115461034b906001600160a01b031681565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161092b9061337a565b60405180910390fd5b600a548161094160015490565b61094b91906134d0565b11156109695760405162461bcd60e51b815260040161092b90613451565b6109738282612099565b5050565b60006001600160e01b031982166380ac58cd60e01b14806109a857506001600160e01b03198216635b5e139f60e01b145b806109c357506001600160e01b0319821663780e9d6360e01b145b806109de57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546109f39061359d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1f9061359d565b8015610a6c5780601f10610a4157610100808354040283529160200191610a6c565b820191906000526020600020905b815481529060010190602001808311610a4f57829003601f168201915b5050505050905090565b6000610a83826001541190565b610ae55760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b606482015260840161092b565b506000908152600660205260409020546001600160a01b031690565b6000610b0c826112ae565b9050806001600160a01b0316836001600160a01b03161415610b7b5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b606482015260840161092b565b336001600160a01b0382161480610b975750610b97813361087d565b610c095760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606482015260840161092b565b610c148383836120b3565b505050565b6000546001600160a01b03163314610c435760405162461bcd60e51b815260040161092b9061337a565b600b55565b600e5460405163e985e9c560e01b81526001600160a01b038381166004830152306024830152600092839283928392839283928392839283929091169063e985e9c59060440160206040518083038186803b158015610ca657600080fd5b505afa158015610cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cde91906130dc565b600f5460405163e985e9c560e01b81526001600160a01b038d811660048301523060248301529091169063e985e9c59060440160206040518083038186803b158015610d2957600080fd5b505afa158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6191906130dc565b60105460405163e985e9c560e01b81526001600160a01b038e811660048301523060248301529091169063e985e9c59060440160206040518083038186803b158015610dac57600080fd5b505afa158015610dc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de491906130dc565b6010546040516370a0823160e01b81526001600160a01b038f81166004830152909116906370a082319060240160206040518083038186803b158015610e2957600080fd5b505afa158015610e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e619190613205565b600e60009054906101000a90046001600160a01b03166001600160a01b03166370a082318f6040518263ffffffff1660e01b8152600401610eb191906001600160a01b0391909116815260200190565b60206040518083038186803b158015610ec957600080fd5b505afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f019190613205565b600154601454601354600b549850985098509850985098509850985098509193959799909294969850565b610c1483838361210f565b6000610f42836112ef565b8210610f9b5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161092b565b6000610fa660015490565b905060008060005b8381101561104f576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561100057805192505b876001600160a01b0316836001600160a01b0316141561103c578684141561102e575093506109de92505050565b83611038816135d8565b9450505b5080611047816135d8565b915050610fae565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b606482015260840161092b565b600d80546110bc9061359d565b80601f01602080910402602001604051908101604052809291908181526020018280546110e89061359d565b80156111355780601f1061110a57610100808354040283529160200191611135565b820191906000526020600020905b81548152906001019060200180831161111857829003601f168201915b505050505081565b6000546001600160a01b031633146111675760405162461bcd60e51b815260040161092b9061337a565b60405133904780156108fc02916000818181858888f19350505050158015611193573d6000803e3d6000fd5b50565b610c1483838360405180602001604052806000815250611dc3565b60006111bc60015490565b82106112165760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b606482015260840161092b565b5090565b6000546001600160a01b031633146112445760405162461bcd60e51b815260040161092b9061337a565b601255565b6000546001600160a01b031633146112735760405162461bcd60e51b815260040161092b9061337a565b610c14600c8383612c8e565b6000546001600160a01b031633146112a95760405162461bcd60e51b815260040161092b9061337a565b601455565b60006112b982612495565b5192915050565b6000546001600160a01b031633146112ea5760405162461bcd60e51b815260040161092b9061337a565b601355565b60006001600160a01b03821661135b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161092b565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b031633146113aa5760405162461bcd60e51b815260040161092b9061337a565b6113b4600061263e565b565b6000546001600160a01b031633146113e05760405162461bcd60e51b815260040161092b9061337a565b600a54816113ed60015490565b6113f791906134d0565b106109695760405162461bcd60e51b815260040161092b90613451565b6000546001600160a01b0316331461143e5760405162461bcd60e51b815260040161092b9061337a565b805161097390600d906020840190612d0e565b600260095414156114a45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161092b565b60026009556010546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156114ed57600080fd5b505afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190613205565b905060008351855161153791906134d0565b90508083511461157d5760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420417267756d656e747360781b604482015260640161092b565b808210156115cd5760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f6e6f74206861766520656e6f756768204372756d626f732e0000604482015260640161092b565b6000855111806115de575060008451115b61162a5760405162461bcd60e51b815260206004820152601c60248201527f53656c6563742061746c656173742031204e667420746f206275726e00000000604482015260640161092b565b600083511161166c5760405162461bcd60e51b815260206004820152600e60248201526d1059190810dc9d5b589bdcc8125960921b604482015260640161092b565b600b548161167960015490565b61168391906134d0565b11156116a15760405162461bcd60e51b815260040161092b90613451565b806013546116af91906134fc565b34146116eb5760405162461bcd60e51b815260206004820152600b60248201526a0929cac82989288be8aa8960ab1b604482015260640161092b565b601154600160a01b900460ff166117375760405162461bcd60e51b815260206004820152601060248201526f4e6f742053746172746564205965742160801b604482015260640161092b565b60105460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c59060440160206040518083038186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b891906130dc565b6117fb5760405162461bcd60e51b8152602060048201526014602482015273417070726f7665204352554d424f53204e66747360601b604482015260640161092b565b60005b83518110156118bd5760105460115485516001600160a01b03928316926342842e0e92339291169088908690811061183857611838613633565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b5050505080806118b5906135d8565b9150506117fe565b50845115611a4d57600e5460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c59060440160206040518083038186803b15801561190e57600080fd5b505afa158015611922573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194691906130dc565b6119895760405162461bcd60e51b8152602060048201526014602482015273417070726f76652050686173652031204e66747360601b604482015260640161092b565b60005b8551811015611a4b57600e5460115487516001600160a01b03928316926342842e0e9233929116908a90869081106119c6576119c6613633565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015611a2057600080fd5b505af1158015611a34573d6000803e3d6000fd5b505050508080611a43906135d8565b91505061198c565b505b835115611bdc57600f5460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c59060440160206040518083038186803b158015611a9d57600080fd5b505afa158015611ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad591906130dc565b611b185760405162461bcd60e51b8152602060048201526014602482015273417070726f76652050686173652032204e66747360601b604482015260640161092b565b60005b8451811015611bda57600f5460115486516001600160a01b03928316926342842e0e923392911690899086908110611b5557611b55613633565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b505050508080611bd2906135d8565b915050611b1b565b505b611be63382612099565b50506001600955505050565b60408051808201909152600080825260208201526109de82612495565b6060600380546109f39061359d565b6001600160a01b038216331415611c775760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604482015260640161092b565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b03163314611d0d5760405162461bcd60e51b815260040161092b9061337a565b600a55565b6000546001600160a01b03163314611d3c5760405162461bcd60e51b815260040161092b9061337a565b60118054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314611d845760405162461bcd60e51b815260040161092b9061337a565b600e80546001600160a01b039485166001600160a01b031991821617909155600f80549385169382169390931790925560108054919093169116179055565b611dce84848461210f565b611dda8484848461268e565b611df65760405162461bcd60e51b815260040161092b906133fe565b50505050565b6060611e09826001541190565b611e255760405162461bcd60e51b815260040161092b906133af565b6000611e308361279c565b90506000815111611e505760405180602001604052806000815250611e74565b80600d604051602001611e64929190613279565b6040516020818303038152906040525b9392505050565b601154600160a01b900460ff16611ec75760405162461bcd60e51b815260206004820152601060248201526f4e6f742053746172746564205965742160801b604482015260640161092b565b600b5481611ed460015490565b611ede91906134d0565b1115611efc5760405162461bcd60e51b815260040161092b90613451565b80601454611f0a91906134fc565b3414611f465760405162461bcd60e51b815260206004820152600b60248201526a0929cac82989288be8aa8960ab1b604482015260640161092b565b60008111611f8e5760405162461bcd60e51b815260206004820152601560248201527443414e4e4f545f4d494e545f544841545f4d414e5960581b604482015260640161092b565b601254811115611fec5760405162461bcd60e51b8152602060048201526024808201527f596f752063616e6e6f74206d696e74206d6f7265207468616e20746865206c6960448201526336b4ba1760e11b606482015260840161092b565b6111933382612099565b60006109de8261280a565b6000546001600160a01b0316331461202b5760405162461bcd60e51b815260040161092b9061337a565b6001600160a01b0381166120905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092b565b6111938161263e565b6109738282604051806020016040528060008152506128a8565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061211a82612495565b80519091506000906001600160a01b0316336001600160a01b0316148061215157503361214684610a76565b6001600160a01b0316145b8061216357508151612163903361087d565b9050806121cd5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161092b565b846001600160a01b031682600001516001600160a01b0316146122415760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b606482015260840161092b565b6001600160a01b0384166122a55760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b606482015260840161092b565b6122b560008484600001516120b3565b6001600160a01b03851660009081526005602052604081208054600192906122e79084906001600160801b031661351b565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092612333918591166134ae565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b031990911691909216171790556123ba8460016134d0565b6000818152600460205260409020549091506001600160a01b031661244b576123e4816001541190565b1561244b5760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b60408051808201909152600080825260208201526124b4826001541190565b6125135760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b606482015260840161092b565b60007f00000000000000000000000000000000000000000000000000000000000003e88310612574576125667f00000000000000000000000000000000000000000000000000000000000003e884613543565b6125719060016134d0565b90505b825b8181106125dd576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b031691830191909152156125ca57949350505050565b50806125d581613586565b915050612576565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b606482015260840161092b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0384163b1561279057604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906126d290339089908890889060040161332a565b602060405180830381600087803b1580156126ec57600080fd5b505af192505050801561271c575060408051601f3d908101601f1916820190925261271991810190613116565b60015b612776573d80801561274a576040519150601f19603f3d011682016040523d82523d6000602084013e61274f565b606091505b50805161276e5760405162461bcd60e51b815260040161092b906133fe565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612794565b5060015b949350505050565b60606127a9826001541190565b6127c55760405162461bcd60e51b815260040161092b906133af565b60006127cf612b82565b905060008151116127ef5760405180602001604052806000815250611e74565b806127f984612b91565b604051602001611e6492919061324a565b60006001600160a01b03821661287c5760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161092b565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b03841661290b5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161092b565b612916816001541190565b156129635760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604482015260640161092b565b7f00000000000000000000000000000000000000000000000000000000000003e88311156129de5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b606482015260840161092b565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612a3a9087906134ae565b6001600160801b03168152602001858360200151612a5891906134ae565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015612b775760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4612b3b600088848861268e565b612b575760405162461bcd60e51b815260040161092b906133fe565b81612b61816135d8565b9250508080612b6f906135d8565b915050612aee565b50600181905561248d565b6060600c80546109f39061359d565b606081612bb55750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612bdf5780612bc9816135d8565b9150612bd89050600a836134e8565b9150612bb9565b6000816001600160401b03811115612bf957612bf9613649565b6040519080825280601f01601f191660200182016040528015612c23576020820181803683370190505b5090505b841561279457612c38600183613543565b9150612c45600a866135f3565b612c509060306134d0565b60f81b818381518110612c6557612c65613633565b60200101906001600160f81b031916908160001a905350612c87600a866134e8565b9450612c27565b828054612c9a9061359d565b90600052602060002090601f016020900481019282612cbc5760008555612d02565b82601f10612cd55782800160ff19823516178555612d02565b82800160010185558215612d02579182015b82811115612d02578235825591602001919060010190612ce7565b50611216929150612d82565b828054612d1a9061359d565b90600052602060002090601f016020900481019282612d3c5760008555612d02565b82601f10612d5557805160ff1916838001178555612d02565b82800160010185558215612d02579182015b82811115612d02578251825591602001919060010190612d67565b5b808211156112165760008155600101612d83565b60006001600160401b03831115612db057612db0613649565b612dc3601f8401601f191660200161347e565b9050828152838383011115612dd757600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612e0557600080fd5b919050565b600082601f830112612e1b57600080fd5b813560206001600160401b03821115612e3657612e36613649565b8160051b612e4582820161347e565b838152828101908684018388018501891015612e6057600080fd5b600093505b85841015612e83578035835260019390930192918401918401612e65565b50979650505050505050565b600060208284031215612ea157600080fd5b611e7482612dee565b60008060408385031215612ebd57600080fd5b612ec683612dee565b9150612ed460208401612dee565b90509250929050565b600080600060608486031215612ef257600080fd5b612efb84612dee565b9250612f0960208501612dee565b9150612f1760408501612dee565b90509250925092565b600080600060608486031215612f3557600080fd5b612f3e84612dee565b9250612f4c60208501612dee565b9150604084013590509250925092565b60008060008060808587031215612f7257600080fd5b612f7b85612dee565b9350612f8960208601612dee565b92506040850135915060608501356001600160401b03811115612fab57600080fd5b8501601f81018713612fbc57600080fd5b612fcb87823560208401612d97565b91505092959194509250565b60008060408385031215612fea57600080fd5b612ff383612dee565b915060208301356130038161365f565b809150509250929050565b6000806040838503121561302157600080fd5b61302a83612dee565b946020939093013593505050565b60008060006060848603121561304d57600080fd5b83356001600160401b038082111561306457600080fd5b61307087838801612e0a565b9450602086013591508082111561308657600080fd5b61309287838801612e0a565b935060408601359150808211156130a857600080fd5b506130b586828701612e0a565b9150509250925092565b6000602082840312156130d157600080fd5b8135611e748161365f565b6000602082840312156130ee57600080fd5b8151611e748161365f565b60006020828403121561310b57600080fd5b8135611e748161366d565b60006020828403121561312857600080fd5b8151611e748161366d565b6000806020838503121561314657600080fd5b82356001600160401b038082111561315d57600080fd5b818501915085601f83011261317157600080fd5b81358181111561318057600080fd5b86602082850101111561319257600080fd5b60209290920196919550909350505050565b6000602082840312156131b657600080fd5b81356001600160401b038111156131cc57600080fd5b8201601f810184136131dd57600080fd5b61279484823560208401612d97565b6000602082840312156131fe57600080fd5b5035919050565b60006020828403121561321757600080fd5b5051919050565b6000815180845261323681602086016020860161355a565b601f01601f19169290920160200192915050565b6000835161325c81846020880161355a565b83519083019061327081836020880161355a565b01949350505050565b60008351602061328c828583890161355a565b845491840191600090600181811c90808316806132aa57607f831692505b8583108114156132c857634e487b7160e01b85526022600452602485fd5b8080156132dc57600181146132ed5761331a565b60ff1985168852838801955061331a565b60008b81526020902060005b858110156133125781548a8201529084019088016132f9565b505083880195505b50939a9950505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061335d9083018461321e565b9695505050505050565b602081526000611e74602083018461321e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b60208082526013908201527226b0bc1029bab838363c902932b0b1b432b21760691b604082015260600190565b604051601f8201601f191681016001600160401b03811182821017156134a6576134a6613649565b604052919050565b60006001600160801b0380831681851680830382111561327057613270613607565b600082198211156134e3576134e3613607565b500190565b6000826134f7576134f761361d565b500490565b600081600019048311821515161561351657613516613607565b500290565b60006001600160801b038381169083168181101561353b5761353b613607565b039392505050565b60008282101561355557613555613607565b500390565b60005b8381101561357557818101518382015260200161355d565b83811115611df65750506000910152565b60008161359557613595613607565b506000190190565b600181811c908216806135b157607f821691505b602082108114156135d257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156135ec576135ec613607565b5060010190565b6000826136025761360261361d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461119357600080fd5b6001600160e01b03198116811461119357600080fdfea26469706673582212203c65a6afdd2c2814f21d4723aca8ced772d049b76e8fa07df900d4e18d8051f964736f6c63430008070033

Deployed Bytecode Sourcemap

23249:6889:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27695:191;;;;;;;;;;-1:-1:-1;27695:191:0;;;;;:::i;:::-;;:::i;:::-;;13225:422;;;;;;;;;;-1:-1:-1;13225:422:0;;;;;:::i;:::-;;:::i;:::-;;;10593:14:1;;10586:22;10568:41;;10556:2;10541:18;13225:422:0;;;;;;;;15011:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16220:292::-;;;;;;;;;;-1:-1:-1;16220:292:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9202:32:1;;;9184:51;;9172:2;9157:18;16220:292:0;9038:203:1;15801:413:0;;;;;;;;;;-1:-1:-1;15801:413:0;;;;;:::i;:::-;;:::i;29052:97::-;;;;;;;;;;-1:-1:-1;29052:97:0;;;;;:::i;:::-;;:::i;23501:83::-;;;;;;;;;;-1:-1:-1;23501:83:0;;;;-1:-1:-1;;;;;23501:83:0;;;12015:100;;;;;;;;;;-1:-1:-1;12095:12:0;;12015:100;;;25217:25:1;;;25205:2;25190:18;12015:100:0;25071:177:1;23927:38:0;;;;;;;;;;;;;;;;26733:640;;;;;;;;;;-1:-1:-1;26733:640:0;;;;;:::i;:::-;;:::i;:::-;;;;10998:14:1;;10991:22;10973:41;;11057:14;;11050:22;11045:2;11030:18;;11023:50;11116:14;;11109:22;11089:18;;;11082:50;;;;11163:2;11148:18;;11141:34;;;;11206:3;11191:19;;11184:35;;;;11250:3;11235:19;;11228:35;11294:3;11279:19;;11272:35;11338:3;11323:19;;11316:35;;;;11382:3;11367:19;;11360:35;10960:3;10945:19;26733:640:0;10620:781:1;23851:32:0;;;;;;;;;;-1:-1:-1;23851:32:0;;;;-1:-1:-1;;;23851:32:0;;;;;;17055:162;;;;;;;;;;-1:-1:-1;17055:162:0;;;;;:::i;:::-;;:::i;12355:864::-;;;;;;;;;;-1:-1:-1;12355:864:0;;;;;:::i;:::-;;:::i;23972:40::-;;;;;;;;;;;;;;;;23465:29;;;;;;;;;;;;;:::i;28846:109::-;;;;;;;;;;;;;:::i;17223:177::-;;;;;;;;;;-1:-1:-1;17223:177:0;;;;;:::i;:::-;;:::i;23591:83::-;;;;;;;;;;-1:-1:-1;23591:83:0;;;;-1:-1:-1;;;;;23591:83:0;;;12121:228;;;;;;;;;;-1:-1:-1;12121:228:0;;;;;:::i;:::-;;:::i;27379:105::-;;;;;;;;;;-1:-1:-1;27379:105:0;;;;;:::i;:::-;;:::i;28732:106::-;;;;;;;;;;-1:-1:-1;28732:106:0;;;;;:::i;:::-;;:::i;28099:118::-;;;;;;;;;;-1:-1:-1;28099:118:0;;;;;:::i;:::-;;:::i;14881:124::-;;;;;;;;;;-1:-1:-1;14881:124:0;;;;;:::i;:::-;;:::i;28223:120::-;;;;;;;;;;-1:-1:-1;28223:120:0;;;;;:::i;:::-;;:::i;13653:258::-;;;;;;;;;;-1:-1:-1;13653:258:0;;;;;:::i;:::-;;:::i;7209:94::-;;;;;;;;;;;;;:::i;27489:200::-;;;;;;;;;;-1:-1:-1;27489:200:0;;;;;:::i;:::-;;:::i;29155:100::-;;;;;;;;;;-1:-1:-1;29155:100:0;;;;;:::i;:::-;;:::i;24244:2026::-;;;;;;:::i;:::-;;:::i;6990:87::-;;;;;;;;;;-1:-1:-1;7036:7:0;7063:6;-1:-1:-1;;;;;7063:6:0;6990:87;;29481:167;;;;;;;;;;-1:-1:-1;29481:167:0;;;;;:::i;:::-;;:::i;:::-;;;;24936:13:1;;-1:-1:-1;;;;;24932:39:1;24914:58;;25032:4;25020:17;;;25014:24;-1:-1:-1;;;;;25010:49:1;24988:20;;;24981:79;;;;24887:18;29481:167:0;24706:360:1;15117:104:0;;;;;;;;;;;;;:::i;16518:311::-;;;;;;;;;;-1:-1:-1;16518:311:0;;;;;:::i;:::-;;:::i;23681:84::-;;;;;;;;;;-1:-1:-1;23681:84:0;;;;-1:-1:-1;;;;;23681:84:0;;;28961:85;;;;;;;;;;-1:-1:-1;28961:85:0;;;;;:::i;:::-;;:::i;29261:93::-;;;;;;;;;;-1:-1:-1;29261:93:0;;;;;:::i;:::-;;:::i;28349:251::-;;;;;;;;;;-1:-1:-1;28349:251:0;;;;;:::i;:::-;;:::i;17406:355::-;;;;;;;;;;-1:-1:-1;17406:355:0;;;;;:::i;:::-;;:::i;29656:479::-;;;;;;;;;;-1:-1:-1;29656:479:0;;;;;:::i;:::-;;:::i;23309:30::-;;;;;;;;;;;;;;;;23346:35;;;;;;;;;;;;;;;;21027:43;;;;;;;;;;;;;;;;26282:445;;;;;;:::i;:::-;;:::i;29360:113::-;;;;;;;;;;-1:-1:-1;29360:113:0;;;;;:::i;:::-;;:::i;16835:214::-;;;;;;;;;;-1:-1:-1;16835:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;17006:25:0;;;16977:4;17006:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;16835:214;7309:229;;;;;;;;;;-1:-1:-1;7309:229:0;;;;;:::i;:::-;;:::i;23890:28::-;;;;;;;;;;;;;;;;23772:72;;;;;;;;;;-1:-1:-1;23772:72:0;;;;-1:-1:-1;;;;;23772:72:0;;;27695:191;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;;;;;;;;;27807:8:::1;;27799:4;27783:13;12095:12:::0;;;12015:100;27783:13:::1;:20;;;;:::i;:::-;:32;;27775:64;;;;-1:-1:-1::0;;;27775:64:0::1;;;;;;;:::i;:::-;27854:24;27864:7;27873:4;27854:9;:24::i;:::-;27695:191:::0;;:::o;13225:422::-;13372:4;-1:-1:-1;;;;;;13414:40:0;;-1:-1:-1;;;13414:40:0;;:105;;-1:-1:-1;;;;;;;13471:48:0;;-1:-1:-1;;;13471:48:0;13414:105;:172;;;-1:-1:-1;;;;;;;13536:50:0;;-1:-1:-1;;;13536:50:0;13414:172;:225;;;-1:-1:-1;;;;;;;;;;9681:40:0;;;13603:36;13394:245;13225:422;-1:-1:-1;;13225:422:0:o;15011:100::-;15065:13;15098:5;15091:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15011:100;:::o;16220:292::-;16324:7;16371:16;16379:7;17858:12;;-1:-1:-1;17848:22:0;17767:111;16371:16;16349:111;;;;-1:-1:-1;;;16349:111:0;;24091:2:1;16349:111:0;;;24073:21:1;24130:2;24110:18;;;24103:30;24169:34;24149:18;;;24142:62;-1:-1:-1;;;24220:18:1;;;24213:43;24273:19;;16349:111:0;23889:409:1;16349:111:0;-1:-1:-1;16480:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;16480:24:0;;16220:292::o;15801:413::-;15874:13;15890:24;15906:7;15890:15;:24::i;:::-;15874:40;;15939:5;-1:-1:-1;;;;;15933:11:0;:2;-1:-1:-1;;;;;15933:11:0;;;15925:58;;;;-1:-1:-1;;;15925:58:0;;20280:2:1;15925:58:0;;;20262:21:1;20319:2;20299:18;;;20292:30;20358:34;20338:18;;;20331:62;-1:-1:-1;;;20409:18:1;;;20402:32;20451:19;;15925:58:0;20078:398:1;15925:58:0;6577:10;-1:-1:-1;;;;;16018:21:0;;;;:62;;-1:-1:-1;16043:37:0;16060:5;6577:10;16835:214;:::i;16043:37::-;15996:169;;;;-1:-1:-1;;;15996:169:0;;16385:2:1;15996:169:0;;;16367:21:1;16424:2;16404:18;;;16397:30;16463:34;16443:18;;;16436:62;16534:27;16514:18;;;16507:55;16579:19;;15996:169:0;16183:421:1;15996:169:0;16178:28;16187:2;16191:7;16200:5;16178:8;:28::i;:::-;15863:351;15801:413;;:::o;29052:97::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;29119:14:::1;:22:::0;29052:97::o;26733:640::-;26868:23;;26860:71;;-1:-1:-1;;;26860:71:0;;-1:-1:-1;;;;;9476:15:1;;;26860:71:0;;;9458:34:1;26925:4:0;9508:18:1;;;9501:43;26795:4:0;;;;;;;;;;;;;;;;;;26868:23;;;;26860:49;;9393:18:1;;26860:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26954:23;;26946:71;;-1:-1:-1;;;26946:71:0;;-1:-1:-1;;;;;9476:15:1;;;26946:71:0;;;9458:34:1;27011:4:0;9508:18:1;;;9501:43;26954:23:0;;;;26946:49;;9393:18:1;;26946:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27040:24;;27032:72;;-1:-1:-1;;;27032:72:0;;-1:-1:-1;;;;;9476:15:1;;;27032:72:0;;;9458:34:1;27098:4:0;9508:18:1;;;9501:43;27040:24:0;;;;27032:50;;9393:18:1;;27032:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27128:24;;27120:50;;-1:-1:-1;;;27120:50:0;;-1:-1:-1;;;;;9202:32:1;;;27120:50:0;;;9184:51:1;27128:24:0;;;;27120:43;;9157:18:1;;27120:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27194:23;;;;;;;;;-1:-1:-1;;;;;27194:23:0;-1:-1:-1;;;;;27186:42:0;;27229:5;27186:49;;;;;;;;;;;;;;-1:-1:-1;;;;;9202:32:1;;;;9184:51;;9172:2;9157:18;;9038:203;27186:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12095:12;;27279;;27306:13;;27334:14;;26853:510;;;;;;;;;;;;;;;;;;26733:640;;;;;;;;;;;:::o;17055:162::-;17181:28;17191:4;17197:2;17201:7;17181:9;:28::i;12355:864::-;12480:7;12521:16;12531:5;12521:9;:16::i;:::-;12513:5;:24;12505:71;;;;-1:-1:-1;;;12505:71:0;;11832:2:1;12505:71:0;;;11814:21:1;11871:2;11851:18;;;11844:30;11910:34;11890:18;;;11883:62;-1:-1:-1;;;11961:18:1;;;11954:32;12003:19;;12505:71:0;11630:398:1;12505:71:0;12587:22;12612:13;12095:12;;;12015:100;12612:13;12587:38;;12636:19;12670:25;12724:9;12719:426;12743:14;12739:1;:18;12719:426;;;12779:31;12813:14;;;:11;:14;;;;;;;;;12779:48;;;;;;;;;-1:-1:-1;;;;;12779:48:0;;;;;-1:-1:-1;;;12779:48:0;;;-1:-1:-1;;;;;12779:48:0;;;;;;;;12846:28;12842:103;;12915:14;;;-1:-1:-1;12842:103:0;12984:5;-1:-1:-1;;;;;12963:26:0;:17;-1:-1:-1;;;;;12963:26:0;;12959:175;;;13029:5;13014:11;:20;13010:77;;;-1:-1:-1;13066:1:0;-1:-1:-1;13059:8:0;;-1:-1:-1;;;13059:8:0;13010:77;13105:13;;;;:::i;:::-;;;;12959:175;-1:-1:-1;12759:3:0;;;;:::i;:::-;;;;12719:426;;;-1:-1:-1;13155:56:0;;-1:-1:-1;;;13155:56:0;;22554:2:1;13155:56:0;;;22536:21:1;22593:2;22573:18;;;22566:30;22632:34;22612:18;;;22605:62;-1:-1:-1;;;22683:18:1;;;22676:44;22737:19;;13155:56:0;22352:410:1;23465:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28846:109::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;28896:51:::1;::::0;28904:10:::1;::::0;28925:21:::1;28896:51:::0;::::1;;;::::0;::::1;::::0;;;28925:21;28904:10;28896:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28846:109::o:0;17223:177::-;17353:39;17370:4;17376:2;17380:7;17353:39;;;;;;;;;;;;:16;:39::i;12121:228::-;12224:7;12265:13;12095:12;;;12015:100;12265:13;12257:5;:21;12249:69;;;;-1:-1:-1;;;12249:69:0;;14441:2:1;12249:69:0;;;14423:21:1;14480:2;14460:18;;;14453:30;14519:34;14499:18;;;14492:62;-1:-1:-1;;;14570:18:1;;;14563:33;14613:19;;12249:69:0;14239:399:1;12249:69:0;-1:-1:-1;12336:5:0;12121:228::o;27379:105::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;27453:8:::1;:23:::0;27379:105::o;28732:106::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;28807:23:::1;:13;28823:7:::0;;28807:23:::1;:::i;28099:118::-:0;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;28182:12:::1;:27:::0;28099:118::o;14881:124::-;14945:7;14972:20;14984:7;14972:11;:20::i;:::-;:25;;14881:124;-1:-1:-1;;14881:124:0:o;28223:120::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;28307:13:::1;:28:::0;28223:120::o;13653:258::-;13717:7;-1:-1:-1;;;;;13759:19:0;;13737:112;;;;-1:-1:-1;;;13737:112:0;;17156:2:1;13737:112:0;;;17138:21:1;17195:2;17175:18;;;17168:30;17234:34;17214:18;;;17207:62;-1:-1:-1;;;17285:18:1;;;17278:41;17336:19;;13737:112:0;16954:407:1;13737:112:0;-1:-1:-1;;;;;;13875:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;13875:27:0;;13653:258::o;7209:94::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;7274:21:::1;7292:1;7274:9;:21::i;:::-;7209:94::o:0;27489:200::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;27610:8:::1;;27603:4;27587:13;12095:12:::0;;;12015:100;27587:13:::1;:20;;;;:::i;:::-;:31;27579:63;;;;-1:-1:-1::0;;;27579:63:0::1;;;;;;;:::i;29155:100::-:0;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;29229:18;;::::1;::::0;:10:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;24244:2026::-:0;10210:1;10356:7;;:19;;10348:63;;;;-1:-1:-1;;;10348:63:0;;22969:2:1;10348:63:0;;;22951:21:1;23008:2;22988:18;;;22981:30;23047:33;23027:18;;;23020:61;23098:18;;10348:63:0;22767:355:1;10348:63:0;10210:1;10422:7;:18;24418:24:::1;::::0;24410:55:::1;::::0;-1:-1:-1;;;24410:55:0;;24454:10:::1;24410:55;::::0;::::1;9184:51:1::0;24388:19:0::1;::::0;-1:-1:-1;;;;;24418:24:0::1;::::0;24410:43:::1;::::0;9157:18:1;;24410:55:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24388:77;;24476:20;24520:11;:18;24499:11;:18;:39;;;;:::i;:::-;24476:62;;24582:15;24559:12;:19;:38;24551:68;;;::::0;-1:-1:-1;;;24551:68:0;;23745:2:1;24551:68:0::1;::::0;::::1;23727:21:1::0;23784:2;23764:18;;;23757:30;-1:-1:-1;;;23803:18:1;;;23796:47;23860:18;;24551:68:0::1;23543:341:1::0;24551:68:0::1;24656:15;24638:14;:33;;24630:76;;;::::0;-1:-1:-1;;;24630:76:0;;15669:2:1;24630:76:0::1;::::0;::::1;15651:21:1::0;15708:2;15688:18;;;15681:30;15747:32;15727:18;;;15720:60;15797:18;;24630:76:0::1;15467:354:1::0;24630:76:0::1;24746:1;24725:11;:18;:22;:48;;;;24772:1;24751:11;:18;:22;24725:48;24717:89;;;::::0;-1:-1:-1;;;24717:89:0;;16028:2:1;24717:89:0::1;::::0;::::1;16010:21:1::0;16067:2;16047:18;;;16040:30;16106;16086:18;;;16079:58;16154:18;;24717:89:0::1;15826:352:1::0;24717:89:0::1;24847:1;24825:12;:19;:23;24817:50;;;::::0;-1:-1:-1;;;24817:50:0;;21863:2:1;24817:50:0::1;::::0;::::1;21845:21:1::0;21902:2;21882:18;;;21875:30;-1:-1:-1;;;21921:18:1;;;21914:44;21975:18;;24817:50:0::1;21661:338:1::0;24817:50:0::1;24921:14;;24902:15;24886:13;12095:12:::0;;;12015:100;24886:13:::1;:31;;;;:::i;:::-;:49;;24878:81;;;;-1:-1:-1::0;;;24878:81:0::1;;;;;;;:::i;:::-;25007:15;24991:13;;:31;;;;:::i;:::-;24978:9;:44;24970:68;;;::::0;-1:-1:-1;;;24970:68:0;;13341:2:1;24970:68:0::1;::::0;::::1;13323:21:1::0;13380:2;13360:18;;;13353:30;-1:-1:-1;;;13399:18:1;;;13392:41;13450:18;;24970:68:0::1;13139:335:1::0;24970:68:0::1;25057:12;::::0;-1:-1:-1;;;25057:12:0;::::1;;;25049:41;;;::::0;-1:-1:-1;;;25049:41:0;;16811:2:1;25049:41:0::1;::::0;::::1;16793:21:1::0;16850:2;16830:18;;;16823:30;-1:-1:-1;;;16869:18:1;;;16862:46;16925:18;;25049:41:0::1;16609:340:1::0;25049:41:0::1;25119:24;::::0;25111:77:::1;::::0;-1:-1:-1;;;25111:77:0;;25162:10:::1;25111:77;::::0;::::1;9458:34:1::0;25182:4:0::1;9508:18:1::0;;;9501:43;-1:-1:-1;;;;;25119:24:0;;::::1;::::0;25111:50:::1;::::0;9393:18:1;;25111:77:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25103:111;;;::::0;-1:-1:-1;;;25103:111:0;;12235:2:1;25103:111:0::1;::::0;::::1;12217:21:1::0;12274:2;12254:18;;;12247:30;-1:-1:-1;;;12293:18:1;;;12286:50;12353:18;;25103:111:0::1;12033:344:1::0;25103:111:0::1;25265:6;25261:161;25277:12;:19;25275:1;:21;25261:161;;;25325:24;::::0;25380:12:::1;::::0;25394:15;;-1:-1:-1;;;;;25325:24:0;;::::1;::::0;25317:50:::1;::::0;25368:10:::1;::::0;25380:12;::::1;::::0;25394;;25407:1;;25394:15;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;25317:93:::1;::::0;-1:-1:-1;;;;;;25317:93:0::1;::::0;;;;;;-1:-1:-1;;;;;9813:15:1;;;25317:93:0::1;::::0;::::1;9795:34:1::0;9865:15;;;;9845:18;;;9838:43;9897:18;;;9890:34;9730:18;;25317:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25298:3;;;;;:::i;:::-;;;;25261:161;;;-1:-1:-1::0;25439:18:0;;:22;25436:381:::1;;25493:23;::::0;25485:76:::1;::::0;-1:-1:-1;;;25485:76:0;;25535:10:::1;25485:76;::::0;::::1;9458:34:1::0;25555:4:0::1;9508:18:1::0;;;9501:43;-1:-1:-1;;;;;25493:23:0;;::::1;::::0;25485:49:::1;::::0;9393:18:1;;25485:76:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25477:110;;;::::0;-1:-1:-1;;;25477:110:0;;14092:2:1;25477:110:0::1;::::0;::::1;14074:21:1::0;14131:2;14111:18;;;14104:30;-1:-1:-1;;;14150:18:1;;;14143:50;14210:18;;25477:110:0::1;13890:344:1::0;25477:110:0::1;25644:6;25640:166;25656:11;:18;25654:1;:20;25640:166;;;25707:23;::::0;25761:12:::1;::::0;25775:14;;-1:-1:-1;;;;;25707:23:0;;::::1;::::0;25699:49:::1;::::0;25749:10:::1;::::0;25761:12;::::1;::::0;25775:11;;25787:1;;25775:14;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;25699:91:::1;::::0;-1:-1:-1;;;;;;25699:91:0::1;::::0;;;;;;-1:-1:-1;;;;;9813:15:1;;;25699:91:0::1;::::0;::::1;9795:34:1::0;9865:15;;;;9845:18;;;9838:43;9897:18;;;9890:34;9730:18;;25699:91:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25676:3;;;;;:::i;:::-;;;;25640:166;;;;25436:381;25832:18:::0;;:22;25829:381:::1;;25886:23;::::0;25878:76:::1;::::0;-1:-1:-1;;;25878:76:0;;25928:10:::1;25878:76;::::0;::::1;9458:34:1::0;25948:4:0::1;9508:18:1::0;;;9501:43;-1:-1:-1;;;;;25886:23:0;;::::1;::::0;25878:49:::1;::::0;9393:18:1;;25878:76:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25870:110;;;::::0;-1:-1:-1;;;25870:110:0;;19157:2:1;25870:110:0::1;::::0;::::1;19139:21:1::0;19196:2;19176:18;;;19169:30;-1:-1:-1;;;19215:18:1;;;19208:50;19275:18;;25870:110:0::1;18955:344:1::0;25870:110:0::1;26037:6;26033:166;26049:11;:18;26047:1;:20;26033:166;;;26100:23;::::0;26154:12:::1;::::0;26168:14;;-1:-1:-1;;;;;26100:23:0;;::::1;::::0;26092:49:::1;::::0;26142:10:::1;::::0;26154:12;::::1;::::0;26168:11;;26180:1;;26168:14;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;26092:91:::1;::::0;-1:-1:-1;;;;;;26092:91:0::1;::::0;;;;;;-1:-1:-1;;;;;9813:15:1;;;26092:91:0::1;::::0;::::1;9795:34:1::0;9865:15;;;;9845:18;;;9838:43;9897:18;;;9890:34;9730:18;;26092:91:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26069:3;;;;;:::i;:::-;;;;26033:166;;;;25829:381;26222:38;26232:10;26244:15;26222:9;:38::i;:::-;-1:-1:-1::0;;10166:1:0;10518:7;:22;-1:-1:-1;;;24244:2026:0:o;29481:167::-;-1:-1:-1;;;;;;;;;;;;;;;;;29620:20:0;29632:7;29620:11;:20::i;15117:104::-;15173:13;15206:7;15199:14;;;;;:::i;16518:311::-;-1:-1:-1;;;;;16636:24:0;;6577:10;16636:24;;16628:63;;;;-1:-1:-1;;;16628:63:0;;19506:2:1;16628:63:0;;;19488:21:1;19545:2;19525:18;;;19518:30;19584:28;19564:18;;;19557:56;19630:18;;16628:63:0;19304:350:1;16628:63:0;6577:10;16704:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;16704:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;16704:53:0;;;;;;;;;;16773:48;;10568:41:1;;;16704:42:0;;6577:10;16773:48;;10541:18:1;16773:48:0;;;;;;;16518:311;;:::o;28961:85::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;29022:8:::1;:16:::0;28961:85::o;29261:93::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;29326:12:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;29326:20:0::1;-1:-1:-1::0;;;;29326:20:0;;::::1;::::0;;;::::1;::::0;;29261:93::o;28349:251::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;28464:23:::1;:32:::0;;-1:-1:-1;;;;;28464:32:0;;::::1;-1:-1:-1::0;;;;;;28464:32:0;;::::1;;::::0;;;28511:23:::1;:32:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;28558:24:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;28349:251::o;17406:355::-;17565:28;17575:4;17581:2;17585:7;17565:9;:28::i;:::-;17626:48;17649:4;17655:2;17659:7;17668:5;17626:22;:48::i;:::-;17604:149;;;;-1:-1:-1;;;17604:149:0;;;;;;;:::i;:::-;17406:355;;;;:::o;29656:479::-;29774:13;29827:16;29835:7;17858:12;;-1:-1:-1;17848:22:0;17767:111;29827:16;29805:113;;;;-1:-1:-1;;;29805:113:0;;;;;;;:::i;:::-;29931:23;29957;29972:7;29957:14;:23::i;:::-;29931:49;;30037:1;30017:9;30011:23;:27;:116;;;;;;;;;;;;;;;;;30082:9;30093:10;30065:39;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30011:116;29991:136;29656:479;-1:-1:-1;;;29656:479:0:o;26282:445::-;26347:12;;-1:-1:-1;;;26347:12:0;;;;26339:41;;;;-1:-1:-1;;;26339:41:0;;16811:2:1;26339:41:0;;;16793:21:1;16850:2;16830:18;;;16823:30;-1:-1:-1;;;16869:18:1;;;16862:46;16925:18;;26339:41:0;16609:340:1;26339:41:0;26427:14;;26415:8;26399:13;12095:12;;;12015:100;26399:13;:24;;;;:::i;:::-;:42;;26391:74;;;;-1:-1:-1;;;26391:74:0;;;;;;;:::i;:::-;26512:8;26497:12;;:23;;;;:::i;:::-;26484:9;:36;26476:60;;;;-1:-1:-1;;;26476:60:0;;13341:2:1;26476:60:0;;;13323:21:1;13380:2;13360:18;;;13353:30;-1:-1:-1;;;13399:18:1;;;13392:41;13450:18;;26476:60:0;13139:335:1;26476:60:0;26566:1;26555:8;:12;26547:46;;;;-1:-1:-1;;;26547:46:0;;12584:2:1;26547:46:0;;;12566:21:1;12623:2;12603:18;;;12596:30;-1:-1:-1;;;12642:18:1;;;12635:51;12703:18;;26547:46:0;12382:345:1;26547:46:0;26624:8;;26612;:20;;26604:69;;;;-1:-1:-1;;;26604:69:0;;17568:2:1;26604:69:0;;;17550:21:1;17607:2;17587:18;;;17580:30;17646:34;17626:18;;;17619:62;-1:-1:-1;;;17697:18:1;;;17690:34;17741:19;;26604:69:0;17366:400:1;26604:69:0;26686:31;26696:10;26708:8;26686:9;:31::i;29360:113::-;29418:7;29445:20;29459:5;29445:13;:20::i;7309:229::-;7036:7;7063:6;-1:-1:-1;;;;;7063:6:0;6577:10;7123:23;7115:68;;;;-1:-1:-1;;;7115:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7412:22:0;::::1;7390:110;;;::::0;-1:-1:-1;;;7390:110:0;;12934:2:1;7390:110:0::1;::::0;::::1;12916:21:1::0;12973:2;12953:18;;;12946:30;13012:34;12992:18;;;12985:62;-1:-1:-1;;;13063:18:1;;;13056:36;13109:19;;7390:110:0::1;12732:402:1::0;7390:110:0::1;7511:19;7521:8;7511:9;:19::i;17886:104::-:0;17955:27;17965:2;17969:8;17955:27;;;;;;;;;;;;:9;:27::i;20823:196::-;20938:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;20938:29:0;-1:-1:-1;;;;;20938:29:0;;;;;;;;;20983:28;;20938:24;;20983:28;;;;;;;20823:196;;;:::o;19277:1540::-;19392:35;19430:20;19442:7;19430:11;:20::i;:::-;19505:18;;19392:58;;-1:-1:-1;19463:22:0;;-1:-1:-1;;;;;19489:34:0;6577:10;-1:-1:-1;;;;;19489:34:0;;:87;;;-1:-1:-1;6577:10:0;19540:20;19552:7;19540:11;:20::i;:::-;-1:-1:-1;;;;;19540:36:0;;19489:87;:154;;;-1:-1:-1;19610:18:0;;19593:50;;6577:10;16835:214;:::i;19593:50::-;19463:181;;19679:17;19657:117;;;;-1:-1:-1;;;19657:117:0;;19861:2:1;19657:117:0;;;19843:21:1;19900:2;19880:18;;;19873:30;19939:34;19919:18;;;19912:62;-1:-1:-1;;;19990:18:1;;;19983:48;20048:19;;19657:117:0;19659:414:1;19657:117:0;19831:4;-1:-1:-1;;;;;19809:26:0;:13;:18;;;-1:-1:-1;;;;;19809:26:0;;19787:114;;;;-1:-1:-1;;;19787:114:0;;17973:2:1;19787:114:0;;;17955:21:1;18012:2;17992:18;;;17985:30;18051:34;18031:18;;;18024:62;-1:-1:-1;;;18102:18:1;;;18095:36;18148:19;;19787:114:0;17771:402:1;19787:114:0;-1:-1:-1;;;;;19920:16:0;;19912:66;;;;-1:-1:-1;;;19912:66:0;;14845:2:1;19912:66:0;;;14827:21:1;14884:2;14864:18;;;14857:30;14923:34;14903:18;;;14896:62;-1:-1:-1;;;14974:18:1;;;14967:35;15019:19;;19912:66:0;14643:401:1;19912:66:0;20045:49;20062:1;20066:7;20075:13;:18;;;20045:8;:49::i;:::-;-1:-1:-1;;;;;20107:18:0;;;;;;:12;:18;;;;;:31;;20137:1;;20107:18;:31;;20137:1;;-1:-1:-1;;;;;20107:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;20107:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20149:16:0;;-1:-1:-1;20149:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;20149:16:0;;:29;;-1:-1:-1;;20149:29:0;;:::i;:::-;;;-1:-1:-1;;;;;20149:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20212:43:0;;;;;;;;-1:-1:-1;;;;;20212:43:0;;;;;-1:-1:-1;;;;;20238:15:0;20212:43;;;;;;;;;-1:-1:-1;20189:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;20189:66:0;-1:-1:-1;;;;;;20189:66:0;;;;;;;;;;;20402:11;20201:7;-1:-1:-1;20402:11:0;:::i;:::-;20469:1;20428:24;;;:11;:24;;;;;:29;20380:33;;-1:-1:-1;;;;;;20428:29:0;20424:288;;20492:20;20500:11;17858:12;;-1:-1:-1;17848:22:0;17767:111;20492:20;20488:213;;;20560:125;;;;;;;;20597:18;;-1:-1:-1;;;;;20560:125:0;;;;;;20638:28;;;;-1:-1:-1;;;;;20560:125:0;;;;;;;;;-1:-1:-1;20533:24:0;;;:11;:24;;;;;;;:152;;;;;;;;;-1:-1:-1;;;20533:152:0;-1:-1:-1;;;;;;20533:152:0;;;;;;;;;;;;20488:213;20748:7;20744:2;-1:-1:-1;;;;;20729:27:0;20738:4;-1:-1:-1;;;;;20729:27:0;;;;;;;;;;;20767:42;19381:1436;;;19277:1540;;;:::o;14193:682::-;-1:-1:-1;;;;;;;;;;;;;;;;;14328:16:0;14336:7;17858:12;;-1:-1:-1;17848:22:0;17767:111;14328:16;14320:71;;;;-1:-1:-1;;;14320:71:0;;13681:2:1;14320:71:0;;;13663:21:1;13720:2;13700:18;;;13693:30;13759:34;13739:18;;;13732:62;-1:-1:-1;;;13810:18:1;;;13803:40;13860:19;;14320:71:0;13479:406:1;14320:71:0;14404:26;14456:12;14445:7;:23;14441:103;;14506:22;14516:12;14506:7;:22;:::i;:::-;:26;;14531:1;14506:26;:::i;:::-;14485:47;;14441:103;14576:7;14556:242;14593:18;14585:4;:26;14556:242;;14636:31;14670:17;;;:11;:17;;;;;;;;;14636:51;;;;;;;;;-1:-1:-1;;;;;14636:51:0;;;;;-1:-1:-1;;;14636:51:0;;;-1:-1:-1;;;;;14636:51:0;;;;;;;;14706:28;14702:85;;14762:9;14193:682;-1:-1:-1;;;;14193:682:0:o;14702:85::-;-1:-1:-1;14613:6:0;;;;:::i;:::-;;;;14556:242;;;-1:-1:-1;14810:57:0;;-1:-1:-1;;;14810:57:0;;23329:2:1;14810:57:0;;;23311:21:1;23368:2;23348:18;;;23341:30;23407:34;23387:18;;;23380:62;-1:-1:-1;;;23458:18:1;;;23451:45;23513:19;;14810:57:0;23127:411:1;7546:173:0;7602:16;7621:6;;-1:-1:-1;;;;;7638:17:0;;;-1:-1:-1;;;;;;7638:17:0;;;;;;7671:40;;7621:6;;;;;;;7671:40;;7602:16;7671:40;7591:128;7546:173;:::o;21928:985::-;22083:4;-1:-1:-1;;;;;22104:13:0;;2589:19;:23;22100:806;;22157:175;;-1:-1:-1;;;22157:175:0;;-1:-1:-1;;;;;22157:36:0;;;;;:175;;6577:10;;22251:4;;22278:7;;22308:5;;22157:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22157:175:0;;;;;;;;-1:-1:-1;;22157:175:0;;;;;;;;;;;;:::i;:::-;;;22136:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22519:13:0;;22515:321;;22562:109;;-1:-1:-1;;;22562:109:0;;;;;;;:::i;22515:321::-;22786:6;22780:13;22771:6;22767:2;22763:15;22756:38;22136:715;-1:-1:-1;;;;;;22396:55:0;-1:-1:-1;;;22396:55:0;;-1:-1:-1;22389:62:0;;22100:806;-1:-1:-1;22890:4:0;22100:806;21928:985;;;;;;:::o;15227:468::-;15345:13;15398:16;15406:7;17858:12;;-1:-1:-1;17848:22:0;17767:111;15398:16;15376:113;;;;-1:-1:-1;;;15376:113:0;;;;;;;:::i;:::-;15502:21;15526:10;:8;:10::i;:::-;15502:34;;15591:1;15573:7;15567:21;:25;:120;;;;;;;;;;;;;;;;;15636:7;15645:18;:7;:16;:18::i;:::-;15619:45;;;;;;;;;:::i;13919:266::-;13980:7;-1:-1:-1;;;;;14022:19:0;;14000:118;;;;-1:-1:-1;;;14000:118:0;;15251:2:1;14000:118:0;;;15233:21:1;15290:2;15270:18;;;15263:30;15329:34;15309:18;;;15302:62;-1:-1:-1;;;15380:18:1;;;15373:47;15437:19;;14000:118:0;15049:413:1;14000:118:0;-1:-1:-1;;;;;;14144:19:0;;;;;:12;:19;;;;;:32;-1:-1:-1;;;14144:32:0;;-1:-1:-1;;;;;14144:32:0;;13919:266::o;17996:1275::-;18142:12;;-1:-1:-1;;;;;18173:16:0;;18165:62;;;;-1:-1:-1;;;18165:62:0;;21461:2:1;18165:62:0;;;21443:21:1;21500:2;21480:18;;;21473:30;21539:34;21519:18;;;21512:62;-1:-1:-1;;;21590:18:1;;;21583:31;21631:19;;18165:62:0;21259:397:1;18165:62:0;18247:21;18255:12;17858;;-1:-1:-1;17848:22:0;17767:111;18247:21;18246:22;18238:64;;;;-1:-1:-1;;;18238:64:0;;21103:2:1;18238:64:0;;;21085:21:1;21142:2;21122:18;;;21115:30;21181:31;21161:18;;;21154:59;21230:18;;18238:64:0;20901:353:1;18238:64:0;18333:12;18321:8;:24;;18313:71;;;;-1:-1:-1;;;18313:71:0;;24505:2:1;18313:71:0;;;24487:21:1;24544:2;24524:18;;;24517:30;24583:34;24563:18;;;24556:62;-1:-1:-1;;;24634:18:1;;;24627:32;24676:19;;18313:71:0;24303:398:1;18313:71:0;-1:-1:-1;;;;;18504:16:0;;18471:30;18504:16;;;:12;:16;;;;;;;;;18471:49;;;;;;;;;-1:-1:-1;;;;;18471:49:0;;;;;-1:-1:-1;;;18471:49:0;;;;;;;;;;;18550:135;;;;;;;;18576:19;;18471:49;;18550:135;;;18576:39;;18606:8;;18576:39;:::i;:::-;-1:-1:-1;;;;;18550:135:0;;;;;18665:8;18630:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;18550:135:0;;;;;;-1:-1:-1;;;;;18531:16:0;;;;;;;:12;:16;;;;;;;;:154;;;;;;;;-1:-1:-1;;;18531:154:0;;;;;;;;;;;;18724:43;;;;;;;;;;-1:-1:-1;;;;;18750:15:0;18724:43;;;;;;;;18696:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;18696:71:0;-1:-1:-1;;;;;;18696:71:0;;;;;;;;;;;;;;;;;;18708:12;;18828:325;18852:8;18848:1;:12;18828:325;;;18887:38;;18912:12;;-1:-1:-1;;;;;18887:38:0;;;18904:1;;18887:38;;18904:1;;18887:38;18966:59;18997:1;19001:2;19005:12;19019:5;18966:22;:59::i;:::-;18940:172;;;;-1:-1:-1;;;18940:172:0;;;;;;;:::i;:::-;19127:14;;;;:::i;:::-;;;;18862:3;;;;;:::i;:::-;;;;18828:325;;;-1:-1:-1;19165:12:0;:27;;;19203:60;17406:355;28610:114;28670:13;28703;28696:20;;;;;:::i;7891:656::-;7947:13;8101:10;8097:53;;-1:-1:-1;;8128:10:0;;;;;;;;;;;;-1:-1:-1;;;8128:10:0;;;;;7891:656::o;8097:53::-;8175:5;8160:12;8216:78;8223:9;;8216:78;;8249:8;;;;:::i;:::-;;-1:-1:-1;8272:10:0;;-1:-1:-1;8280:2:0;8272:10;;:::i;:::-;;;8216:78;;;8304:19;8336:6;-1:-1:-1;;;;;8326:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8326:17:0;;8304:39;;8354:154;8361:10;;8354:154;;8388:11;8398:1;8388:11;;:::i;:::-;;-1:-1:-1;8457:10:0;8465:2;8457:5;:10;:::i;:::-;8444:24;;:2;:24;:::i;:::-;8431:39;;8414:6;8421;8414:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8414:56:0;;;;;;;;-1:-1:-1;8485:11:0;8494:2;8485:11;;:::i;:::-;;;8354:154;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:723::-;657:5;710:3;703:4;695:6;691:17;687:27;677:55;;728:1;725;718:12;677:55;764:6;751:20;790:4;-1:-1:-1;;;;;809:2:1;806:26;803:52;;;835:18;;:::i;:::-;881:2;878:1;874:10;904:28;928:2;924;920:11;904:28;:::i;:::-;966:15;;;997:12;;;;1029:15;;;1063;;;1059:24;;1056:33;-1:-1:-1;1053:53:1;;;1102:1;1099;1092:12;1053:53;1124:1;1115:10;;1134:163;1148:2;1145:1;1142:9;1134:163;;;1205:17;;1193:30;;1166:1;1159:9;;;;;1243:12;;;;1275;;1134:163;;;-1:-1:-1;1315:5:1;603:723;-1:-1:-1;;;;;;;603:723:1:o;1331:186::-;1390:6;1443:2;1431:9;1422:7;1418:23;1414:32;1411:52;;;1459:1;1456;1449:12;1411:52;1482:29;1501:9;1482:29;:::i;1522:260::-;1590:6;1598;1651:2;1639:9;1630:7;1626:23;1622:32;1619:52;;;1667:1;1664;1657:12;1619:52;1690:29;1709:9;1690:29;:::i;:::-;1680:39;;1738:38;1772:2;1761:9;1757:18;1738:38;:::i;:::-;1728:48;;1522:260;;;;;:::o;1787:334::-;1864:6;1872;1880;1933:2;1921:9;1912:7;1908:23;1904:32;1901:52;;;1949:1;1946;1939:12;1901:52;1972:29;1991:9;1972:29;:::i;:::-;1962:39;;2020:38;2054:2;2043:9;2039:18;2020:38;:::i;:::-;2010:48;;2077:38;2111:2;2100:9;2096:18;2077:38;:::i;:::-;2067:48;;1787:334;;;;;:::o;2126:328::-;2203:6;2211;2219;2272:2;2260:9;2251:7;2247:23;2243:32;2240:52;;;2288:1;2285;2278:12;2240:52;2311:29;2330:9;2311:29;:::i;:::-;2301:39;;2359:38;2393:2;2382:9;2378:18;2359:38;:::i;:::-;2349:48;;2444:2;2433:9;2429:18;2416:32;2406:42;;2126:328;;;;;:::o;2459:666::-;2554:6;2562;2570;2578;2631:3;2619:9;2610:7;2606:23;2602:33;2599:53;;;2648:1;2645;2638:12;2599:53;2671:29;2690:9;2671:29;:::i;:::-;2661:39;;2719:38;2753:2;2742:9;2738:18;2719:38;:::i;:::-;2709:48;;2804:2;2793:9;2789:18;2776:32;2766:42;;2859:2;2848:9;2844:18;2831:32;-1:-1:-1;;;;;2878:6:1;2875:30;2872:50;;;2918:1;2915;2908:12;2872:50;2941:22;;2994:4;2986:13;;2982:27;-1:-1:-1;2972:55:1;;3023:1;3020;3013:12;2972:55;3046:73;3111:7;3106:2;3093:16;3088:2;3084;3080:11;3046:73;:::i;:::-;3036:83;;;2459:666;;;;;;;:::o;3130:315::-;3195:6;3203;3256:2;3244:9;3235:7;3231:23;3227:32;3224:52;;;3272:1;3269;3262:12;3224:52;3295:29;3314:9;3295:29;:::i;:::-;3285:39;;3374:2;3363:9;3359:18;3346:32;3387:28;3409:5;3387:28;:::i;:::-;3434:5;3424:15;;;3130:315;;;;;:::o;3450:254::-;3518:6;3526;3579:2;3567:9;3558:7;3554:23;3550:32;3547:52;;;3595:1;3592;3585:12;3547:52;3618:29;3637:9;3618:29;:::i;:::-;3608:39;3694:2;3679:18;;;;3666:32;;-1:-1:-1;;;3450:254:1:o;3709:821::-;3861:6;3869;3877;3930:2;3918:9;3909:7;3905:23;3901:32;3898:52;;;3946:1;3943;3936:12;3898:52;3986:9;3973:23;-1:-1:-1;;;;;4056:2:1;4048:6;4045:14;4042:34;;;4072:1;4069;4062:12;4042:34;4095:61;4148:7;4139:6;4128:9;4124:22;4095:61;:::i;:::-;4085:71;;4209:2;4198:9;4194:18;4181:32;4165:48;;4238:2;4228:8;4225:16;4222:36;;;4254:1;4251;4244:12;4222:36;4277:63;4332:7;4321:8;4310:9;4306:24;4277:63;:::i;:::-;4267:73;;4393:2;4382:9;4378:18;4365:32;4349:48;;4422:2;4412:8;4409:16;4406:36;;;4438:1;4435;4428:12;4406:36;;4461:63;4516:7;4505:8;4494:9;4490:24;4461:63;:::i;:::-;4451:73;;;3709:821;;;;;:::o;4535:241::-;4591:6;4644:2;4632:9;4623:7;4619:23;4615:32;4612:52;;;4660:1;4657;4650:12;4612:52;4699:9;4686:23;4718:28;4740:5;4718:28;:::i;4781:245::-;4848:6;4901:2;4889:9;4880:7;4876:23;4872:32;4869:52;;;4917:1;4914;4907:12;4869:52;4949:9;4943:16;4968:28;4990:5;4968:28;:::i;5031:245::-;5089:6;5142:2;5130:9;5121:7;5117:23;5113:32;5110:52;;;5158:1;5155;5148:12;5110:52;5197:9;5184:23;5216:30;5240:5;5216:30;:::i;5281:249::-;5350:6;5403:2;5391:9;5382:7;5378:23;5374:32;5371:52;;;5419:1;5416;5409:12;5371:52;5451:9;5445:16;5470:30;5494:5;5470:30;:::i;5535:592::-;5606:6;5614;5667:2;5655:9;5646:7;5642:23;5638:32;5635:52;;;5683:1;5680;5673:12;5635:52;5723:9;5710:23;-1:-1:-1;;;;;5793:2:1;5785:6;5782:14;5779:34;;;5809:1;5806;5799:12;5779:34;5847:6;5836:9;5832:22;5822:32;;5892:7;5885:4;5881:2;5877:13;5873:27;5863:55;;5914:1;5911;5904:12;5863:55;5954:2;5941:16;5980:2;5972:6;5969:14;5966:34;;;5996:1;5993;5986:12;5966:34;6041:7;6036:2;6027:6;6023:2;6019:15;6015:24;6012:37;6009:57;;;6062:1;6059;6052:12;6009:57;6093:2;6085:11;;;;;6115:6;;-1:-1:-1;5535:592:1;;-1:-1:-1;;;;5535:592:1:o;6132:450::-;6201:6;6254:2;6242:9;6233:7;6229:23;6225:32;6222:52;;;6270:1;6267;6260:12;6222:52;6310:9;6297:23;-1:-1:-1;;;;;6335:6:1;6332:30;6329:50;;;6375:1;6372;6365:12;6329:50;6398:22;;6451:4;6443:13;;6439:27;-1:-1:-1;6429:55:1;;6480:1;6477;6470:12;6429:55;6503:73;6568:7;6563:2;6550:16;6545:2;6541;6537:11;6503:73;:::i;6587:180::-;6646:6;6699:2;6687:9;6678:7;6674:23;6670:32;6667:52;;;6715:1;6712;6705:12;6667:52;-1:-1:-1;6738:23:1;;6587:180;-1:-1:-1;6587:180:1:o;6772:184::-;6842:6;6895:2;6883:9;6874:7;6870:23;6866:32;6863:52;;;6911:1;6908;6901:12;6863:52;-1:-1:-1;6934:16:1;;6772:184;-1:-1:-1;6772:184:1:o;6961:257::-;7002:3;7040:5;7034:12;7067:6;7062:3;7055:19;7083:63;7139:6;7132:4;7127:3;7123:14;7116:4;7109:5;7105:16;7083:63;:::i;:::-;7200:2;7179:15;-1:-1:-1;;7175:29:1;7166:39;;;;7207:4;7162:50;;6961:257;-1:-1:-1;;6961:257:1:o;7223:470::-;7402:3;7440:6;7434:13;7456:53;7502:6;7497:3;7490:4;7482:6;7478:17;7456:53;:::i;:::-;7572:13;;7531:16;;;;7594:57;7572:13;7531:16;7628:4;7616:17;;7594:57;:::i;:::-;7667:20;;7223:470;-1:-1:-1;;;;7223:470:1:o;7698:1335::-;7874:3;7912:6;7906:13;7938:4;7951:51;7995:6;7990:3;7985:2;7977:6;7973:15;7951:51;:::i;:::-;8087:13;;8024:16;;;;8060:1;;8147;8169:18;;;;8222;;;;8249:93;;8327:4;8317:8;8313:19;8301:31;;8249:93;8390:2;8380:8;8377:16;8357:18;8354:40;8351:167;;;-1:-1:-1;;;8417:33:1;;8473:4;8470:1;8463:15;8503:4;8424:3;8491:17;8351:167;8534:18;8561:110;;;;8685:1;8680:328;;;;8527:481;;8561:110;-1:-1:-1;;8596:24:1;;8582:39;;8641:20;;;;-1:-1:-1;8561:110:1;;8680:328;25606:1;25599:14;;;25643:4;25630:18;;8775:1;8789:169;8803:8;8800:1;8797:15;8789:169;;;8885:14;;8870:13;;;8863:37;8928:16;;;;8820:10;;8789:169;;;8793:3;;8989:8;8982:5;8978:20;8971:27;;8527:481;-1:-1:-1;9024:3:1;;7698:1335;-1:-1:-1;;;;;;;;;;7698:1335:1:o;9935:488::-;-1:-1:-1;;;;;10204:15:1;;;10186:34;;10256:15;;10251:2;10236:18;;10229:43;10303:2;10288:18;;10281:34;;;10351:3;10346:2;10331:18;;10324:31;;;10129:4;;10372:45;;10397:19;;10389:6;10372:45;:::i;:::-;10364:53;9935:488;-1:-1:-1;;;;;;9935:488:1:o;11406:219::-;11555:2;11544:9;11537:21;11518:4;11575:44;11615:2;11604:9;11600:18;11592:6;11575:44;:::i;18178:356::-;18380:2;18362:21;;;18399:18;;;18392:30;18458:34;18453:2;18438:18;;18431:62;18525:2;18510:18;;18178:356::o;18539:411::-;18741:2;18723:21;;;18780:2;18760:18;;;18753:30;18819:34;18814:2;18799:18;;18792:62;-1:-1:-1;;;18885:2:1;18870:18;;18863:45;18940:3;18925:19;;18539:411::o;20481:415::-;20683:2;20665:21;;;20722:2;20702:18;;;20695:30;20761:34;20756:2;20741:18;;20734:62;-1:-1:-1;;;20827:2:1;20812:18;;20805:49;20886:3;20871:19;;20481:415::o;22004:343::-;22206:2;22188:21;;;22245:2;22225:18;;;22218:30;-1:-1:-1;;;22279:2:1;22264:18;;22257:49;22338:2;22323:18;;22004:343::o;25253:275::-;25324:2;25318:9;25389:2;25370:13;;-1:-1:-1;;25366:27:1;25354:40;;-1:-1:-1;;;;;25409:34:1;;25445:22;;;25406:62;25403:88;;;25471:18;;:::i;:::-;25507:2;25500:22;25253:275;;-1:-1:-1;25253:275:1:o;25659:253::-;25699:3;-1:-1:-1;;;;;25788:2:1;25785:1;25781:10;25818:2;25815:1;25811:10;25849:3;25845:2;25841:12;25836:3;25833:21;25830:47;;;25857:18;;:::i;25917:128::-;25957:3;25988:1;25984:6;25981:1;25978:13;25975:39;;;25994:18;;:::i;:::-;-1:-1:-1;26030:9:1;;25917:128::o;26050:120::-;26090:1;26116;26106:35;;26121:18;;:::i;:::-;-1:-1:-1;26155:9:1;;26050:120::o;26175:168::-;26215:7;26281:1;26277;26273:6;26269:14;26266:1;26263:21;26258:1;26251:9;26244:17;26240:45;26237:71;;;26288:18;;:::i;:::-;-1:-1:-1;26328:9:1;;26175:168::o;26348:246::-;26388:4;-1:-1:-1;;;;;26501:10:1;;;;26471;;26523:12;;;26520:38;;;26538:18;;:::i;:::-;26575:13;;26348:246;-1:-1:-1;;;26348:246:1:o;26599:125::-;26639:4;26667:1;26664;26661:8;26658:34;;;26672:18;;:::i;:::-;-1:-1:-1;26709:9:1;;26599:125::o;26729:258::-;26801:1;26811:113;26825:6;26822:1;26819:13;26811:113;;;26901:11;;;26895:18;26882:11;;;26875:39;26847:2;26840:10;26811:113;;;26942:6;26939:1;26936:13;26933:48;;;-1:-1:-1;;26977:1:1;26959:16;;26952:27;26729:258::o;26992:136::-;27031:3;27059:5;27049:39;;27068:18;;:::i;:::-;-1:-1:-1;;;27104:18:1;;26992:136::o;27133:380::-;27212:1;27208:12;;;;27255;;;27276:61;;27330:4;27322:6;27318:17;27308:27;;27276:61;27383:2;27375:6;27372:14;27352:18;27349:38;27346:161;;;27429:10;27424:3;27420:20;27417:1;27410:31;27464:4;27461:1;27454:15;27492:4;27489:1;27482:15;27346:161;;27133:380;;;:::o;27518:135::-;27557:3;-1:-1:-1;;27578:17:1;;27575:43;;;27598:18;;:::i;:::-;-1:-1:-1;27645:1:1;27634:13;;27518:135::o;27658:112::-;27690:1;27716;27706:35;;27721:18;;:::i;:::-;-1:-1:-1;27755:9:1;;27658:112::o;27775:127::-;27836:10;27831:3;27827:20;27824:1;27817:31;27867:4;27864:1;27857:15;27891:4;27888:1;27881:15;27907:127;27968:10;27963:3;27959:20;27956:1;27949:31;27999:4;27996:1;27989:15;28023:4;28020:1;28013:15;28039:127;28100:10;28095:3;28091:20;28088:1;28081:31;28131:4;28128:1;28121:15;28155:4;28152:1;28145:15;28171:127;28232:10;28227:3;28223:20;28220:1;28213:31;28263:4;28260:1;28253:15;28287:4;28284:1;28277:15;28303:118;28389:5;28382:13;28375:21;28368:5;28365:32;28355:60;;28411:1;28408;28401:12;28426:131;-1:-1:-1;;;;;;28500:32:1;;28490:43;;28480:71;;28547:1;28544;28537:12

Swarm Source

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