ETH Price: $3,819.44 (+2.13%)
Gas: 10 Gwei

Contract

0xFeb0755878e299153E49748878F38b46443D04DB
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
0x74ff1495ffff4484a30833e2a72f080c7b15dd98347084d4e8b33a5e7db7efa5Set Approval For...(pending)2024-05-19 2:21:014 days ago1716085261IN
0xFeb07558...6443D04DB
0 ETH(Pending)(Pending)
Set Approval For...156850652022-10-05 23:04:11595 days ago1665011051IN
0xFeb07558...6443D04DB
0 ETH0.0021457181.74452003
Set Approval For...156850612022-10-05 23:03:23595 days ago1665011003IN
0xFeb07558...6443D04DB
0 ETH0.0027270859.09311844
Set Approval For...156547872022-10-01 17:26:47599 days ago1664645207IN
0xFeb07558...6443D04DB
0 ETH0.0004930510.68388557
Set Approval For...152063242022-07-24 16:12:44668 days ago1658679164IN
0xFeb07558...6443D04DB
0 ETH0.0009331720.18414862
Approve149478952022-06-12 3:18:22711 days ago1655003902IN
0xFeb07558...6443D04DB
0 ETH0.0010036634.69994312
Approve149406012022-06-10 21:27:09712 days ago1654896429IN
0xFeb07558...6443D04DB
0 ETH0.0025954753.15989677
Set Approval For...149005902022-06-04 1:55:05719 days ago1654307705IN
0xFeb07558...6443D04DB
0 ETH0.001794838.8209376
Approve148940732022-06-03 0:30:16720 days ago1654216216IN
0xFeb07558...6443D04DB
0 ETH0.0016617257.45143212
Transfer From148671342022-05-29 15:08:28724 days ago1653836908IN
0xFeb07558...6443D04DB
0 ETH0.0014713224.56460101
Approve148211332022-05-22 3:30:21732 days ago1653190221IN
0xFeb07558...6443D04DB
0 ETH0.0005126617.72450138
Approve147837852022-05-16 2:59:57738 days ago1652669997IN
0xFeb07558...6443D04DB
0 ETH0.0010434121.37101245
Approve146731222022-04-28 13:28:38755 days ago1651152518IN
0xFeb07558...6443D04DB
0 ETH0.0010662236.86310665
Approve146731112022-04-28 13:26:41755 days ago1651152401IN
0xFeb07558...6443D04DB
0 ETH0.0010222235.34188627
Approve146725772022-04-28 11:23:25755 days ago1651145005IN
0xFeb07558...6443D04DB
0 ETH0.000819828.34327219
Approve146725572022-04-28 11:19:44755 days ago1651144784IN
0xFeb07558...6443D04DB
0 ETH0.000880430.43853381
Approve146574862022-04-26 2:19:59758 days ago1650939599IN
0xFeb07558...6443D04DB
0 ETH0.0010937537.81484418
Approve146574772022-04-26 2:17:55758 days ago1650939475IN
0xFeb07558...6443D04DB
0 ETH0.0008871430.67142725
Set Approval For...146443962022-04-24 0:52:52760 days ago1650761572IN
0xFeb07558...6443D04DB
0 ETH0.0005479620.80890149
Set Approval For...146443962022-04-24 0:52:52760 days ago1650761572IN
0xFeb07558...6443D04DB
0 ETH0.0009620520.80890149
Approve146411072022-04-23 12:38:50760 days ago1650717530IN
0xFeb07558...6443D04DB
0 ETH0.0010039534.71021536
Approve146410942022-04-23 12:35:33760 days ago1650717333IN
0xFeb07558...6443D04DB
0 ETH0.0009553333.02925178
Set Approval For...146400532022-04-23 8:44:51761 days ago1650703491IN
0xFeb07558...6443D04DB
0 ETH0.001300628.13162756
Approve146325462022-04-22 4:29:02762 days ago1650601742IN
0xFeb07558...6443D04DB
0 ETH0.0009443832.65048683
Approve146060572022-04-18 0:44:35766 days ago1650242675IN
0xFeb07558...6443D04DB
0 ETH0.0013531446.78264137
View all transactions

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
143048632022-03-02 2:18:35813 days ago1646187515
0xFeb07558...6443D04DB
20.826 ETH
142981242022-03-01 1:22:16814 days ago1646097736
0xFeb07558...6443D04DB
0.224 ETH
142971362022-02-28 21:43:09814 days ago1646084589
0xFeb07558...6443D04DB
18.986 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MferCribs

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
    hey mfers.
 */
pragma solidity ^0.8.0;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

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

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

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

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address payable private _owner;

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

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

    function owner() public view virtual returns (address payable) {
        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 = payable(newOwner);
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

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

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

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

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

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

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

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

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

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

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

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

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

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        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);
    }
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

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

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

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

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

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

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

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    function _setTokenURI(uint256 tokenId, string memory _tokenURI)
        internal
        virtual
    {
        require(
            _exists(tokenId),
            "ERC721URIStorage: URI set of nonexistent token"
        );
        _tokenURIs[tokenId] = _tokenURI;
    }

    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

interface IAccessControl {
    event RoleAdminChanged(
        bytes32 indexed role,
        bytes32 indexed previousAdminRole,
        bytes32 indexed newAdminRole
    );

    event RoleGranted(
        bytes32 indexed role,
        address indexed account,
        address indexed sender
    );

    event RoleRevoked(
        bytes32 indexed role,
        address indexed account,
        address indexed sender
    );

    function hasRole(bytes32 role, address account)
        external
        view
        returns (bool);

    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    function grantRole(bytes32 role, address account) external;

    function revokeRole(bytes32 role, address account) external;

    function renounceRole(bytes32 role, address account) external;
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

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

    function hasRole(bytes32 role, address account)
        public
        view
        override
        returns (bool)
    {
        return _roles[role].members[account];
    }

    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account)
        public
        virtual
        override
        onlyRole(getRoleAdmin(role))
    {
        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account)
        public
        virtual
        override
        onlyRole(getRoleAdmin(role))
    {
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account)
        public
        virtual
        override
    {
        require(
            account == _msgSender(),
            "AccessControl: can only renounce roles for self"
        );

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

contract MferCribs is ERC721URIStorage, Ownable, AccessControl {
    using SafeMath for uint256;

    bytes32 public constant PRE_SALE_ROLE = keccak256("PRE_SALE_ROLE");
    string private contractUri;
    string private baseUri;
    uint8 private platformRoyalty;
    mapping(uint256 => uint256) tokenSalePrices;
    event TokenSold(
        uint256 tokenId,
        address from,
        address to,
        uint256 price,
        uint256 royaltyPaid
    );

    bool public saleIsActive = false;
    uint256 public MAX_MINT;
    uint256 public constant apePrice = 22000000000000000; //0.022 ETH
    uint256 public constant maxApePurchase = 8888;
    uint256 public totalMintNumber;

    function totalSupply() public view returns (uint256) {
        return totalMintNumber;
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC721, AccessControl)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }

    constructor() ERC721("Mfer Cribs", "MferCribs") {
      
        contractUri = "http://nft-stage-bwrld.s3-website.us-east-2.amazonaws.com/contract";
        baseUri = "http://nft-stage-bwrld.s3-website.us-east-2.amazonaws.com/ipfs/";

        MAX_MINT = 8888;

        totalMintNumber = 0;
        platformRoyalty = 5;

        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
    }

    function contractURI() public view returns (string memory) {
        return contractUri;
    }

    function setContractUri(string memory newUri) public onlyOwner {
        contractUri = newUri;
    }

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

    function setBaseUri(string memory newUri) public onlyOwner {
        baseUri = newUri;
    }

    function withdraw() public onlyOwner {
        uint amount = address(this).balance;

        (bool success, ) = owner().call{value: amount}("");
        require(success, "Failed to send Ether");
    }

    function platformFee() public view returns (uint8) {
        return platformRoyalty;
    }

    function setPlatformFee(uint8 newFee) public onlyOwner {
        platformRoyalty = newFee;
    }

    function mintNFT(uint256 numberOfTokens) public payable {
        require(saleIsActive, "Sale must be active to mint");
        require(
            numberOfTokens <= maxApePurchase,
            "Can only mint x tokens at a time"
        );
        require(
            totalSupply().add(numberOfTokens) <= MAX_MINT,
            "Purchase would exceed max supply"
        );
        require(
            apePrice.mul(numberOfTokens) <= msg.value,
            "Ether value sent is not correct"
        );

        for (uint256 i = 0; i < numberOfTokens; i++) {
            uint256 mintIndex = totalSupply();
            if (totalSupply() < MAX_MINT) {
                require(!_exists(mintIndex), "Has already been minted");
                totalMintNumber = totalMintNumber + 1;
                _mint(msg.sender, mintIndex);
            }
        }
    }

    /*
     * Pause sale if active, make active if paused
     */
    function flipSaleState() public onlyOwner {
        saleIsActive = !saleIsActive;
    }

    function isApprovedForAll(address _owner, address _operator)
        public
        view
        override
        returns (bool isOperator)
    {
        // Whitelist OpenSea proxy contract for easy trading.

        return isApprovedForAll(_owner, _operator);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override {
        super._beforeTokenTransfer(from, to, tokenId);
        if (tokenSalePrices[tokenId] > 0) {
            tokenSalePrices[tokenId] = 0;
        }
    }
}

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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"royaltyPaid","type":"uint256"}],"name":"TokenSold","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":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRE_SALE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","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":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxApePurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","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":"platformFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setContractUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newFee","type":"uint8"}],"name":"setPlatformFee","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600d805460ff191690553480156200001b57600080fd5b50604080518082018252600a8152694d66657220437269627360b01b6020808301918252835180850190945260098452684d666572437269627360b81b9084015281519192916200006f916000916200023a565b508051620000859060019060208401906200023a565b505050620000a26200009c6200013060201b60201c565b62000134565b6040518060800160405280604281526020016200293e604291398051620000d2916009916020909101906200023a565b506040518060600160405280603f8152602001620028ff603f913980516200010391600a916020909101906200023a565b506122b8600e556000600f819055600b805460ff191660051790556200012a903362000186565b6200031d565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000192828262000196565b5050565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16620001925760008281526008602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001f63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b8280546200024890620002e0565b90600052602060002090601f0160209004810192826200026c5760008555620002b7565b82601f106200028757805160ff1916838001178555620002b7565b82800160010185558215620002b7579182015b82811115620002b75782518255916020019190600101906200029a565b50620002c5929150620002c9565b5090565b5b80821115620002c55760008155600101620002ca565b600181811c90821680620002f557607f821691505b602082108114156200031757634e487b7160e01b600052602260045260246000fd5b50919050565b6125d2806200032d6000396000f3fe60806040526004361061021a5760003560e01c80637a3f451e11610123578063b88d4fde116100ab578063e8a3d4851161006f578063e8a3d48514610616578063e985e9c51461062b578063eb8d24441461064b578063f0292a0314610665578063f2fde38b1461067b57600080fd5b8063b88d4fde14610580578063bf5142de146105a0578063c87b56dd146105b6578063ccb4807b146105d6578063d547741f146105f657600080fd5b806392642744116100f2578063926427441461050357806395d89b4114610516578063a0bcfc7f1461052b578063a217fddf1461054b578063a22cb4651461056057600080fd5b80637a3f451e1461048a5780638042853f146104a55780638da5cb5b146104c557806391d14854146104e357600080fd5b806334918dfd116101a657806342842e0e1161017557806342842e0e146103ff578063571dff3b1461041f5780636352211e1461043557806370a0823114610455578063715018a61461047557600080fd5b806334918dfd1461038157806336568abe1461039657806337754d9a146103b65780633ccfd60b146103ea57600080fd5b806318160ddd116101ed57806318160ddd146102d057806323b872dd146102ef578063248a9ca31461030f57806326232a2e1461033f5780632f2ff15d1461036157600080fd5b806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276578063095ea7b3146102ae575b600080fd5b34801561022b57600080fd5b5061023f61023a36600461219e565b61069b565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b506102696106ac565b60405161024b919061234a565b34801561028257600080fd5b50610296610291366004612164565b61073e565b6040516001600160a01b03909116815260200161024b565b3480156102ba57600080fd5b506102ce6102c936600461213b565b6107cb565b005b3480156102dc57600080fd5b50600f545b60405190815260200161024b565b3480156102fb57600080fd5b506102ce61030a36600461204d565b6108e1565b34801561031b57600080fd5b506102e161032a366004612164565b60009081526008602052604090206001015490565b34801561034b57600080fd5b50600b5460405160ff909116815260200161024b565b34801561036d57600080fd5b506102ce61037c36600461217c565b610912565b34801561038d57600080fd5b506102ce610938565b3480156103a257600080fd5b506102ce6103b136600461217c565b610976565b3480156103c257600080fd5b506102e17f413b964388ffbef8da45753e2ce53bd2bcc66055e28876253fbd02817f2b316581565b3480156103f657600080fd5b506102ce6109f4565b34801561040b57600080fd5b506102ce61041a36600461204d565b610aca565b34801561042b57600080fd5b506102e16122b881565b34801561044157600080fd5b50610296610450366004612164565b610ae5565b34801561046157600080fd5b506102e1610470366004612001565b610b5c565b34801561048157600080fd5b506102ce610be3565b34801561049657600080fd5b506102e1664e28e2290f000081565b3480156104b157600080fd5b506102ce6104c036600461221c565b610c19565b3480156104d157600080fd5b506007546001600160a01b0316610296565b3480156104ef57600080fd5b5061023f6104fe36600461217c565b610c59565b6102ce610511366004612164565b610c84565b34801561052257600080fd5b50610269610e9a565b34801561053757600080fd5b506102ce6105463660046121d6565b610ea9565b34801561055757600080fd5b506102e1600081565b34801561056c57600080fd5b506102ce61057b366004612101565b610ee6565b34801561058c57600080fd5b506102ce61059b366004612088565b610fab565b3480156105ac57600080fd5b506102e1600f5481565b3480156105c257600080fd5b506102696105d1366004612164565b610fe3565b3480156105e257600080fd5b506102ce6105f13660046121d6565b61114d565b34801561060257600080fd5b506102ce61061136600461217c565b61118a565b34801561062257600080fd5b506102696111b0565b34801561063757600080fd5b5061023f61064636600461201b565b6111bf565b34801561065757600080fd5b50600d5461023f9060ff1681565b34801561067157600080fd5b506102e1600e5481565b34801561068757600080fd5b506102ce610696366004612001565b6111d2565b60006106a68261126d565b92915050565b6060600080546106bb906124da565b80601f01602080910402602001604051908101604052809291908181526020018280546106e7906124da565b80156107345780601f1061070957610100808354040283529160200191610734565b820191906000526020600020905b81548152906001019060200180831161071757829003601f168201915b5050505050905090565b600061074982611292565b6107af5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006107d682610ae5565b9050806001600160a01b0316836001600160a01b031614156108445760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107a6565b336001600160a01b0382161480610860575061086081336111bf565b6108d25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107a6565b6108dc83836112af565b505050565b6108eb338261131d565b6109075760405162461bcd60e51b81526004016107a6906123e4565b6108dc8383836113df565b60008281526008602052604090206001015461092e813361158a565b6108dc83836115ee565b6007546001600160a01b031633146109625760405162461bcd60e51b81526004016107a6906123af565b600d805460ff19811660ff90911615179055565b6001600160a01b03811633146109e65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107a6565b6109f08282611674565b5050565b6007546001600160a01b03163314610a1e5760405162461bcd60e51b81526004016107a6906123af565b476000610a336007546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a7d576040519150601f19603f3d011682016040523d82523d6000602084013e610a82565b606091505b50509050806109f05760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016107a6565b6108dc83838360405180602001604052806000815250610fab565b6000818152600260205260408120546001600160a01b0316806106a65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107a6565b60006001600160a01b038216610bc75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107a6565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b03163314610c0d5760405162461bcd60e51b81526004016107a6906123af565b610c1760006116db565b565b6007546001600160a01b03163314610c435760405162461bcd60e51b81526004016107a6906123af565b600b805460ff191660ff92909216919091179055565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600d5460ff16610cd65760405162461bcd60e51b815260206004820152601b60248201527f53616c65206d7573742062652061637469766520746f206d696e74000000000060448201526064016107a6565b6122b8811115610d285760405162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206d696e74207820746f6b656e7320617420612074696d6560448201526064016107a6565b600e54610d3e82610d38600f5490565b9061172d565b1115610d8c5760405162461bcd60e51b815260206004820181905260248201527f507572636861736520776f756c6420657863656564206d617820737570706c7960448201526064016107a6565b34610d9e664e28e2290f00008361178c565b1115610dec5760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016107a6565b60005b818110156109f0576000610e02600f5490565b9050600e54610e10600f5490565b1015610e8757610e1f81611292565b15610e6c5760405162461bcd60e51b815260206004820152601760248201527f48617320616c7265616479206265656e206d696e74656400000000000000000060448201526064016107a6565b600f54610e7a906001612435565b600f55610e87338261180b565b5080610e9281612515565b915050610def565b6060600180546106bb906124da565b6007546001600160a01b03163314610ed35760405162461bcd60e51b81526004016107a6906123af565b80516109f090600a906020840190611ed6565b6001600160a01b038216331415610f3f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107a6565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610fb5338361131d565b610fd15760405162461bcd60e51b81526004016107a6906123e4565b610fdd8484848461194a565b50505050565b6060610fee82611292565b6110545760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016107a6565b6000828152600660205260408120805461106d906124da565b80601f0160208091040260200160405190810160405280929190818152602001828054611099906124da565b80156110e65780601f106110bb576101008083540402835291602001916110e6565b820191906000526020600020905b8154815290600101906020018083116110c957829003601f168201915b5050505050905060006110f761197d565b905080516000141561110a575092915050565b81511561113c578082604051602001611124929190612269565b60405160208183030381529060405292505050919050565b6111458461198c565b949350505050565b6007546001600160a01b031633146111775760405162461bcd60e51b81526004016107a6906123af565b80516109f0906009906020840190611ed6565b6000828152600860205260409020600101546111a6813361158a565b6108dc8383611674565b6060600980546106bb906124da565b60006111cb83836111bf565b9392505050565b6007546001600160a01b031633146111fc5760405162461bcd60e51b81526004016107a6906123af565b6001600160a01b0381166112615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a6565b61126a816116db565b50565b60006001600160e01b03198216637965db0b60e01b14806106a657506106a682611a56565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112e482610ae5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061132882611292565b6113895760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107a6565b600061139483610ae5565b9050806001600160a01b0316846001600160a01b031614806113cf5750836001600160a01b03166113c48461073e565b6001600160a01b0316145b80611145575061114581856111bf565b826001600160a01b03166113f282610ae5565b6001600160a01b03161461145a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107a6565b6001600160a01b0382166114bc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107a6565b6114c7838383611aa6565b6114d26000826112af565b6001600160a01b03831660009081526003602052604081208054600192906114fb908490612480565b90915550506001600160a01b0382166000908152600360205260408120805460019290611529908490612435565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6115948282610c59565b6109f0576115ac816001600160a01b03166014611acd565b6115b7836020611acd565b6040516020016115c8929190612298565b60408051601f198184030181529082905262461bcd60e51b82526107a69160040161234a565b6115f88282610c59565b6109f05760008281526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790556116303390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61167e8282610c59565b156109f05760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008061173a8385612435565b9050838110156111cb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107a6565b60008261179b575060006106a6565b60006117a78385612461565b9050826117b4858361244d565b146111cb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107a6565b6001600160a01b0382166118615760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107a6565b61186a81611292565b156118b75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107a6565b6118c360008383611aa6565b6001600160a01b03821660009081526003602052604081208054600192906118ec908490612435565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6119558484846113df565b61196184848484611caf565b610fdd5760405162461bcd60e51b81526004016107a69061235d565b6060600a80546106bb906124da565b606061199782611292565b6119fb5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107a6565b6000611a0561197d565b90506000815111611a2557604051806020016040528060008152506111cb565b80611a2f84611dbc565b604051602001611a40929190612269565b6040516020818303038152906040529392505050565b60006001600160e01b031982166380ac58cd60e01b1480611a8757506001600160e01b03198216635b5e139f60e01b145b806106a657506301ffc9a760e01b6001600160e01b03198316146106a6565b6000818152600c6020526040902054156108dc576000908152600c60205260408120555050565b60606000611adc836002612461565b611ae7906002612435565b67ffffffffffffffff811115611b0d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b37576020820181803683370190505b509050600360fc1b81600081518110611b6057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611b9d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611bc1846002612461565b611bcc906001612435565b90505b6001811115611c60576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c0e57634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611c3257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611c59816124c3565b9050611bcf565b5083156111cb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107a6565b60006001600160a01b0384163b15611db157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cf390339089908890889060040161230d565b602060405180830381600087803b158015611d0d57600080fd5b505af1925050508015611d3d575060408051601f3d908101601f19168201909252611d3a918101906121ba565b60015b611d97573d808015611d6b576040519150601f19603f3d011682016040523d82523d6000602084013e611d70565b606091505b508051611d8f5760405162461bcd60e51b81526004016107a69061235d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611145565b506001949350505050565b606081611de05750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e0a5780611df481612515565b9150611e039050600a8361244d565b9150611de4565b60008167ffffffffffffffff811115611e3357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611e5d576020820181803683370190505b5090505b841561114557611e72600183612480565b9150611e7f600a86612530565b611e8a906030612435565b60f81b818381518110611ead57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611ecf600a8661244d565b9450611e61565b828054611ee2906124da565b90600052602060002090601f016020900481019282611f045760008555611f4a565b82601f10611f1d57805160ff1916838001178555611f4a565b82800160010185558215611f4a579182015b82811115611f4a578251825591602001919060010190611f2f565b50611f56929150611f5a565b5090565b5b80821115611f565760008155600101611f5b565b600067ffffffffffffffff80841115611f8a57611f8a612570565b604051601f8501601f19908116603f01168101908282118183101715611fb257611fb2612570565b81604052809350858152868686011115611fcb57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611ffc57600080fd5b919050565b600060208284031215612012578081fd5b6111cb82611fe5565b6000806040838503121561202d578081fd5b61203683611fe5565b915061204460208401611fe5565b90509250929050565b600080600060608486031215612061578081fd5b61206a84611fe5565b925061207860208501611fe5565b9150604084013590509250925092565b6000806000806080858703121561209d578081fd5b6120a685611fe5565b93506120b460208601611fe5565b925060408501359150606085013567ffffffffffffffff8111156120d6578182fd5b8501601f810187136120e6578182fd5b6120f587823560208401611f6f565b91505092959194509250565b60008060408385031215612113578182fd5b61211c83611fe5565b915060208301358015158114612130578182fd5b809150509250929050565b6000806040838503121561214d578182fd5b61215683611fe5565b946020939093013593505050565b600060208284031215612175578081fd5b5035919050565b6000806040838503121561218e578182fd5b8235915061204460208401611fe5565b6000602082840312156121af578081fd5b81356111cb81612586565b6000602082840312156121cb578081fd5b81516111cb81612586565b6000602082840312156121e7578081fd5b813567ffffffffffffffff8111156121fd578182fd5b8201601f8101841361220d578182fd5b61114584823560208401611f6f565b60006020828403121561222d578081fd5b813560ff811681146111cb578182fd5b60008151808452612255816020860160208601612497565b601f01601f19169290920160200192915050565b6000835161227b818460208801612497565b83519083019061228f818360208801612497565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516122d0816017850160208801612497565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612301816028840160208801612497565b01602801949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123409083018461223d565b9695505050505050565b6020815260006111cb602083018461223d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561244857612448612544565b500190565b60008261245c5761245c61255a565b500490565b600081600019048311821515161561247b5761247b612544565b500290565b60008282101561249257612492612544565b500390565b60005b838110156124b257818101518382015260200161249a565b83811115610fdd5750506000910152565b6000816124d2576124d2612544565b506000190190565b600181811c908216806124ee57607f821691505b6020821081141561250f57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561252957612529612544565b5060010190565b60008261253f5761253f61255a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461126a57600080fdfea2646970667358221220329b167f9c3886ff568515431868ba9c03b7dc568e6432ca042051b6ebb0582a64736f6c63430008040033687474703a2f2f6e66742d73746167652d6277726c642e73332d776562736974652e75732d656173742d322e616d617a6f6e6177732e636f6d2f697066732f687474703a2f2f6e66742d73746167652d6277726c642e73332d776562736974652e75732d656173742d322e616d617a6f6e6177732e636f6d2f636f6e7472616374

Deployed Bytecode

0x60806040526004361061021a5760003560e01c80637a3f451e11610123578063b88d4fde116100ab578063e8a3d4851161006f578063e8a3d48514610616578063e985e9c51461062b578063eb8d24441461064b578063f0292a0314610665578063f2fde38b1461067b57600080fd5b8063b88d4fde14610580578063bf5142de146105a0578063c87b56dd146105b6578063ccb4807b146105d6578063d547741f146105f657600080fd5b806392642744116100f2578063926427441461050357806395d89b4114610516578063a0bcfc7f1461052b578063a217fddf1461054b578063a22cb4651461056057600080fd5b80637a3f451e1461048a5780638042853f146104a55780638da5cb5b146104c557806391d14854146104e357600080fd5b806334918dfd116101a657806342842e0e1161017557806342842e0e146103ff578063571dff3b1461041f5780636352211e1461043557806370a0823114610455578063715018a61461047557600080fd5b806334918dfd1461038157806336568abe1461039657806337754d9a146103b65780633ccfd60b146103ea57600080fd5b806318160ddd116101ed57806318160ddd146102d057806323b872dd146102ef578063248a9ca31461030f57806326232a2e1461033f5780632f2ff15d1461036157600080fd5b806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276578063095ea7b3146102ae575b600080fd5b34801561022b57600080fd5b5061023f61023a36600461219e565b61069b565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b506102696106ac565b60405161024b919061234a565b34801561028257600080fd5b50610296610291366004612164565b61073e565b6040516001600160a01b03909116815260200161024b565b3480156102ba57600080fd5b506102ce6102c936600461213b565b6107cb565b005b3480156102dc57600080fd5b50600f545b60405190815260200161024b565b3480156102fb57600080fd5b506102ce61030a36600461204d565b6108e1565b34801561031b57600080fd5b506102e161032a366004612164565b60009081526008602052604090206001015490565b34801561034b57600080fd5b50600b5460405160ff909116815260200161024b565b34801561036d57600080fd5b506102ce61037c36600461217c565b610912565b34801561038d57600080fd5b506102ce610938565b3480156103a257600080fd5b506102ce6103b136600461217c565b610976565b3480156103c257600080fd5b506102e17f413b964388ffbef8da45753e2ce53bd2bcc66055e28876253fbd02817f2b316581565b3480156103f657600080fd5b506102ce6109f4565b34801561040b57600080fd5b506102ce61041a36600461204d565b610aca565b34801561042b57600080fd5b506102e16122b881565b34801561044157600080fd5b50610296610450366004612164565b610ae5565b34801561046157600080fd5b506102e1610470366004612001565b610b5c565b34801561048157600080fd5b506102ce610be3565b34801561049657600080fd5b506102e1664e28e2290f000081565b3480156104b157600080fd5b506102ce6104c036600461221c565b610c19565b3480156104d157600080fd5b506007546001600160a01b0316610296565b3480156104ef57600080fd5b5061023f6104fe36600461217c565b610c59565b6102ce610511366004612164565b610c84565b34801561052257600080fd5b50610269610e9a565b34801561053757600080fd5b506102ce6105463660046121d6565b610ea9565b34801561055757600080fd5b506102e1600081565b34801561056c57600080fd5b506102ce61057b366004612101565b610ee6565b34801561058c57600080fd5b506102ce61059b366004612088565b610fab565b3480156105ac57600080fd5b506102e1600f5481565b3480156105c257600080fd5b506102696105d1366004612164565b610fe3565b3480156105e257600080fd5b506102ce6105f13660046121d6565b61114d565b34801561060257600080fd5b506102ce61061136600461217c565b61118a565b34801561062257600080fd5b506102696111b0565b34801561063757600080fd5b5061023f61064636600461201b565b6111bf565b34801561065757600080fd5b50600d5461023f9060ff1681565b34801561067157600080fd5b506102e1600e5481565b34801561068757600080fd5b506102ce610696366004612001565b6111d2565b60006106a68261126d565b92915050565b6060600080546106bb906124da565b80601f01602080910402602001604051908101604052809291908181526020018280546106e7906124da565b80156107345780601f1061070957610100808354040283529160200191610734565b820191906000526020600020905b81548152906001019060200180831161071757829003601f168201915b5050505050905090565b600061074982611292565b6107af5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006107d682610ae5565b9050806001600160a01b0316836001600160a01b031614156108445760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107a6565b336001600160a01b0382161480610860575061086081336111bf565b6108d25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107a6565b6108dc83836112af565b505050565b6108eb338261131d565b6109075760405162461bcd60e51b81526004016107a6906123e4565b6108dc8383836113df565b60008281526008602052604090206001015461092e813361158a565b6108dc83836115ee565b6007546001600160a01b031633146109625760405162461bcd60e51b81526004016107a6906123af565b600d805460ff19811660ff90911615179055565b6001600160a01b03811633146109e65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107a6565b6109f08282611674565b5050565b6007546001600160a01b03163314610a1e5760405162461bcd60e51b81526004016107a6906123af565b476000610a336007546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a7d576040519150601f19603f3d011682016040523d82523d6000602084013e610a82565b606091505b50509050806109f05760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016107a6565b6108dc83838360405180602001604052806000815250610fab565b6000818152600260205260408120546001600160a01b0316806106a65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107a6565b60006001600160a01b038216610bc75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107a6565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b03163314610c0d5760405162461bcd60e51b81526004016107a6906123af565b610c1760006116db565b565b6007546001600160a01b03163314610c435760405162461bcd60e51b81526004016107a6906123af565b600b805460ff191660ff92909216919091179055565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600d5460ff16610cd65760405162461bcd60e51b815260206004820152601b60248201527f53616c65206d7573742062652061637469766520746f206d696e74000000000060448201526064016107a6565b6122b8811115610d285760405162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206d696e74207820746f6b656e7320617420612074696d6560448201526064016107a6565b600e54610d3e82610d38600f5490565b9061172d565b1115610d8c5760405162461bcd60e51b815260206004820181905260248201527f507572636861736520776f756c6420657863656564206d617820737570706c7960448201526064016107a6565b34610d9e664e28e2290f00008361178c565b1115610dec5760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016107a6565b60005b818110156109f0576000610e02600f5490565b9050600e54610e10600f5490565b1015610e8757610e1f81611292565b15610e6c5760405162461bcd60e51b815260206004820152601760248201527f48617320616c7265616479206265656e206d696e74656400000000000000000060448201526064016107a6565b600f54610e7a906001612435565b600f55610e87338261180b565b5080610e9281612515565b915050610def565b6060600180546106bb906124da565b6007546001600160a01b03163314610ed35760405162461bcd60e51b81526004016107a6906123af565b80516109f090600a906020840190611ed6565b6001600160a01b038216331415610f3f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107a6565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610fb5338361131d565b610fd15760405162461bcd60e51b81526004016107a6906123e4565b610fdd8484848461194a565b50505050565b6060610fee82611292565b6110545760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016107a6565b6000828152600660205260408120805461106d906124da565b80601f0160208091040260200160405190810160405280929190818152602001828054611099906124da565b80156110e65780601f106110bb576101008083540402835291602001916110e6565b820191906000526020600020905b8154815290600101906020018083116110c957829003601f168201915b5050505050905060006110f761197d565b905080516000141561110a575092915050565b81511561113c578082604051602001611124929190612269565b60405160208183030381529060405292505050919050565b6111458461198c565b949350505050565b6007546001600160a01b031633146111775760405162461bcd60e51b81526004016107a6906123af565b80516109f0906009906020840190611ed6565b6000828152600860205260409020600101546111a6813361158a565b6108dc8383611674565b6060600980546106bb906124da565b60006111cb83836111bf565b9392505050565b6007546001600160a01b031633146111fc5760405162461bcd60e51b81526004016107a6906123af565b6001600160a01b0381166112615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a6565b61126a816116db565b50565b60006001600160e01b03198216637965db0b60e01b14806106a657506106a682611a56565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112e482610ae5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061132882611292565b6113895760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107a6565b600061139483610ae5565b9050806001600160a01b0316846001600160a01b031614806113cf5750836001600160a01b03166113c48461073e565b6001600160a01b0316145b80611145575061114581856111bf565b826001600160a01b03166113f282610ae5565b6001600160a01b03161461145a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107a6565b6001600160a01b0382166114bc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107a6565b6114c7838383611aa6565b6114d26000826112af565b6001600160a01b03831660009081526003602052604081208054600192906114fb908490612480565b90915550506001600160a01b0382166000908152600360205260408120805460019290611529908490612435565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6115948282610c59565b6109f0576115ac816001600160a01b03166014611acd565b6115b7836020611acd565b6040516020016115c8929190612298565b60408051601f198184030181529082905262461bcd60e51b82526107a69160040161234a565b6115f88282610c59565b6109f05760008281526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790556116303390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61167e8282610c59565b156109f05760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008061173a8385612435565b9050838110156111cb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107a6565b60008261179b575060006106a6565b60006117a78385612461565b9050826117b4858361244d565b146111cb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107a6565b6001600160a01b0382166118615760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107a6565b61186a81611292565b156118b75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107a6565b6118c360008383611aa6565b6001600160a01b03821660009081526003602052604081208054600192906118ec908490612435565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6119558484846113df565b61196184848484611caf565b610fdd5760405162461bcd60e51b81526004016107a69061235d565b6060600a80546106bb906124da565b606061199782611292565b6119fb5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107a6565b6000611a0561197d565b90506000815111611a2557604051806020016040528060008152506111cb565b80611a2f84611dbc565b604051602001611a40929190612269565b6040516020818303038152906040529392505050565b60006001600160e01b031982166380ac58cd60e01b1480611a8757506001600160e01b03198216635b5e139f60e01b145b806106a657506301ffc9a760e01b6001600160e01b03198316146106a6565b6000818152600c6020526040902054156108dc576000908152600c60205260408120555050565b60606000611adc836002612461565b611ae7906002612435565b67ffffffffffffffff811115611b0d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b37576020820181803683370190505b509050600360fc1b81600081518110611b6057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611b9d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611bc1846002612461565b611bcc906001612435565b90505b6001811115611c60576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c0e57634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611c3257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611c59816124c3565b9050611bcf565b5083156111cb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107a6565b60006001600160a01b0384163b15611db157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cf390339089908890889060040161230d565b602060405180830381600087803b158015611d0d57600080fd5b505af1925050508015611d3d575060408051601f3d908101601f19168201909252611d3a918101906121ba565b60015b611d97573d808015611d6b576040519150601f19603f3d011682016040523d82523d6000602084013e611d70565b606091505b508051611d8f5760405162461bcd60e51b81526004016107a69061235d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611145565b506001949350505050565b606081611de05750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e0a5780611df481612515565b9150611e039050600a8361244d565b9150611de4565b60008167ffffffffffffffff811115611e3357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611e5d576020820181803683370190505b5090505b841561114557611e72600183612480565b9150611e7f600a86612530565b611e8a906030612435565b60f81b818381518110611ead57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611ecf600a8661244d565b9450611e61565b828054611ee2906124da565b90600052602060002090601f016020900481019282611f045760008555611f4a565b82601f10611f1d57805160ff1916838001178555611f4a565b82800160010185558215611f4a579182015b82811115611f4a578251825591602001919060010190611f2f565b50611f56929150611f5a565b5090565b5b80821115611f565760008155600101611f5b565b600067ffffffffffffffff80841115611f8a57611f8a612570565b604051601f8501601f19908116603f01168101908282118183101715611fb257611fb2612570565b81604052809350858152868686011115611fcb57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611ffc57600080fd5b919050565b600060208284031215612012578081fd5b6111cb82611fe5565b6000806040838503121561202d578081fd5b61203683611fe5565b915061204460208401611fe5565b90509250929050565b600080600060608486031215612061578081fd5b61206a84611fe5565b925061207860208501611fe5565b9150604084013590509250925092565b6000806000806080858703121561209d578081fd5b6120a685611fe5565b93506120b460208601611fe5565b925060408501359150606085013567ffffffffffffffff8111156120d6578182fd5b8501601f810187136120e6578182fd5b6120f587823560208401611f6f565b91505092959194509250565b60008060408385031215612113578182fd5b61211c83611fe5565b915060208301358015158114612130578182fd5b809150509250929050565b6000806040838503121561214d578182fd5b61215683611fe5565b946020939093013593505050565b600060208284031215612175578081fd5b5035919050565b6000806040838503121561218e578182fd5b8235915061204460208401611fe5565b6000602082840312156121af578081fd5b81356111cb81612586565b6000602082840312156121cb578081fd5b81516111cb81612586565b6000602082840312156121e7578081fd5b813567ffffffffffffffff8111156121fd578182fd5b8201601f8101841361220d578182fd5b61114584823560208401611f6f565b60006020828403121561222d578081fd5b813560ff811681146111cb578182fd5b60008151808452612255816020860160208601612497565b601f01601f19169290920160200192915050565b6000835161227b818460208801612497565b83519083019061228f818360208801612497565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516122d0816017850160208801612497565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612301816028840160208801612497565b01602801949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123409083018461223d565b9695505050505050565b6020815260006111cb602083018461223d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561244857612448612544565b500190565b60008261245c5761245c61255a565b500490565b600081600019048311821515161561247b5761247b612544565b500290565b60008282101561249257612492612544565b500390565b60005b838110156124b257818101518382015260200161249a565b83811115610fdd5750506000910152565b6000816124d2576124d2612544565b506000190190565b600181811c908216806124ee57607f821691505b6020821081141561250f57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561252957612529612544565b5060010190565b60008261253f5761253f61255a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461126a57600080fdfea2646970667358221220329b167f9c3886ff568515431868ba9c03b7dc568e6432ca042051b6ebb0582a64736f6c63430008040033

Deployed Bytecode Sourcemap

29795:3912:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30609:226;;;;;;;;;;-1:-1:-1;30609:226:0;;;;;:::i;:::-;;:::i;:::-;;;7779:14:1;;7772:22;7754:41;;7742:2;7727:18;30609:226:0;;;;;;;;17578:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18795:308::-;;;;;;;;;;-1:-1:-1;18795:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6853:32:1;;;6835:51;;6823:2;6808:18;18795:308:0;6790:102:1;18376:411:0;;;;;;;;;;-1:-1:-1;18376:411:0;;;;;:::i;:::-;;:::i;:::-;;30507:94;;;;;;;;;;-1:-1:-1;30578:15:0;;30507:94;;;7952:25:1;;;7940:2;7925:18;30507:94:0;7907:76:1;19668:376:0;;;;;;;;;;-1:-1:-1;19668:376:0;;;;;:::i;:::-;;:::i;28122:123::-;;;;;;;;;;-1:-1:-1;28122:123:0;;;;;:::i;:::-;28188:7;28215:12;;;:6;:12;;;;;:22;;;;28122:123;31876:92;;;;;;;;;;-1:-1:-1;31945:15:0;;31876:92;;31945:15;;;;19010:36:1;;18998:2;18983:18;31876:92:0;18965:87:1;28253:188:0;;;;;;;;;;-1:-1:-1;28253:188:0;;;;;:::i;:::-;;:::i;33036:89::-;;;;;;;;;;;;;:::i;28647:287::-;;;;;;;;;;-1:-1:-1;28647:287:0;;;;;:::i;:::-;;:::i;29900:66::-;;;;;;;;;;;;29940:26;29900:66;;31663:205;;;;;;;;;;;;;:::i;20052:185::-;;;;;;;;;;-1:-1:-1;20052:185:0;;;;;:::i;:::-;;:::i;30416:45::-;;;;;;;;;;;;30457:4;30416:45;;17244:326;;;;;;;;;;-1:-1:-1;17244:326:0;;;;;:::i;:::-;;:::i;16941:295::-;;;;;;;;;;-1:-1:-1;16941:295:0;;;;;:::i;:::-;;:::i;7851:94::-;;;;;;;;;;;;;:::i;30345:52::-;;;;;;;;;;;;30380:17;30345:52;;31976:98;;;;;;;;;;-1:-1:-1;31976:98:0;;;;;:::i;:::-;;:::i;7620:95::-;;;;;;;;;;-1:-1:-1;7701:6:0;;-1:-1:-1;;;;;7701:6:0;7620:95;;27429:180;;;;;;;;;;-1:-1:-1;27429:180:0;;;;;:::i;:::-;;:::i;32082:877::-;;;;;;:::i;:::-;;:::i;17686:104::-;;;;;;;;;;;;;:::i;31561:94::-;;;;;;;;;;-1:-1:-1;31561:94:0;;;;;:::i;:::-;;:::i;26982:49::-;;;;;;;;;;-1:-1:-1;26982:49:0;27027:4;26982:49;;19111:327;;;;;;;;;;-1:-1:-1;19111:327:0;;;;;:::i;:::-;;:::i;20245:365::-;;;;;;;;;;-1:-1:-1;20245:365:0;;;;;:::i;:::-;;:::i;30468:30::-;;;;;;;;;;;;;;;;24792:617;;;;;;;;;;-1:-1:-1;24792:617:0;;;;;:::i;:::-;;:::i;31343:102::-;;;;;;;;;;-1:-1:-1;31343:102:0;;;;;:::i;:::-;;:::i;28449:190::-;;;;;;;;;;-1:-1:-1;28449:190:0;;;;;:::i;:::-;;:::i;31239:96::-;;;;;;;;;;;;;:::i;33133:275::-;;;;;;;;;;-1:-1:-1;33133:275:0;;;;;:::i;:::-;;:::i;30276:32::-;;;;;;;;;;-1:-1:-1;30276:32:0;;;;;;;;30315:23;;;;;;;;;;;;;;;;7953:229;;;;;;;;;;-1:-1:-1;7953:229:0;;;;;:::i;:::-;;:::i;30609:226::-;30762:4;30791:36;30815:11;30791:23;:36::i;:::-;30784:43;30609:226;-1:-1:-1;;30609:226:0:o;17578:100::-;17632:13;17665:5;17658:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17578:100;:::o;18795:308::-;18916:7;18963:16;18971:7;18963;:16::i;:::-;18941:110;;;;-1:-1:-1;;;18941:110:0;;15339:2:1;18941:110:0;;;15321:21:1;15378:2;15358:18;;;15351:30;15417:34;15397:18;;;15390:62;-1:-1:-1;;;15468:18:1;;;15461:42;15520:19;;18941:110:0;;;;;;;;;-1:-1:-1;19071:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;19071:24:0;;18795:308::o;18376:411::-;18457:13;18473:23;18488:7;18473:14;:23::i;:::-;18457:39;;18521:5;-1:-1:-1;;;;;18515:11:0;:2;-1:-1:-1;;;;;18515:11:0;;;18507:57;;;;-1:-1:-1;;;18507:57:0;;16939:2:1;18507:57:0;;;16921:21:1;16978:2;16958:18;;;16951:30;17017:34;16997:18;;;16990:62;-1:-1:-1;;;17068:18:1;;;17061:31;17109:19;;18507:57:0;16911:223:1;18507:57:0;7222:10;-1:-1:-1;;;;;18599:21:0;;;;:62;;-1:-1:-1;18624:37:0;18641:5;7222:10;33133:275;:::i;18624:37::-;18577:168;;;;-1:-1:-1;;;18577:168:0;;12551:2:1;18577:168:0;;;12533:21:1;12590:2;12570:18;;;12563:30;12629:34;12609:18;;;12602:62;12700:26;12680:18;;;12673:54;12744:19;;18577:168:0;12523:246:1;18577:168:0;18758:21;18767:2;18771:7;18758:8;:21::i;:::-;18376:411;;;:::o;19668:376::-;19877:41;7222:10;19910:7;19877:18;:41::i;:::-;19855:140;;;;-1:-1:-1;;;19855:140:0;;;;;;;:::i;:::-;20008:28;20018:4;20024:2;20028:7;20008:9;:28::i;28253:188::-;28188:7;28215:12;;;:6;:12;;;;;:22;;;27083:30;27094:4;7222:10;27083;:30::i;:::-;28408:25:::1;28419:4;28425:7;28408:10;:25::i;33036:89::-:0;7701:6;;-1:-1:-1;;;;;7701:6:0;7222:10;7763:23;7755:68;;;;-1:-1:-1;;;7755:68:0;;;;;;;:::i;:::-;33105:12:::1;::::0;;-1:-1:-1;;33089:28:0;::::1;33105:12;::::0;;::::1;33104:13;33089:28;::::0;;33036:89::o;28647:287::-;-1:-1:-1;;;;;28789:23:0;;7222:10;28789:23;28767:120;;;;-1:-1:-1;;;28767:120:0;;18472:2:1;28767:120:0;;;18454:21:1;18511:2;18491:18;;;18484:30;18550:34;18530:18;;;18523:62;-1:-1:-1;;;18601:18:1;;;18594:45;18656:19;;28767:120:0;18444:237:1;28767:120:0;28900:26;28912:4;28918:7;28900:11;:26::i;:::-;28647:287;;:::o;31663:205::-;7701:6;;-1:-1:-1;;;;;7701:6:0;7222:10;7763:23;7755:68;;;;-1:-1:-1;;;7755:68:0;;;;;;;:::i;:::-;31725:21:::1;31711:11;31778:7;7701:6:::0;;-1:-1:-1;;;;;7701:6:0;;7620:95;31778:7:::1;-1:-1:-1::0;;;;;31778:12:0::1;31798:6;31778:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31759:50;;;31828:7;31820:40;;;::::0;-1:-1:-1;;;31820:40:0;;10314:2:1;31820:40:0::1;::::0;::::1;10296:21:1::0;10353:2;10333:18;;;10326:30;-1:-1:-1;;;10372:18:1;;;10365:50;10432:18;;31820:40:0::1;10286:170:1::0;20052:185:0;20190:39;20207:4;20213:2;20217:7;20190:39;;;;;;;;;;;;:16;:39::i;17244:326::-;17361:7;17402:16;;;:7;:16;;;;;;-1:-1:-1;;;;;17402:16:0;17451:19;17429:110;;;;-1:-1:-1;;;17429:110:0;;13387:2:1;17429:110:0;;;13369:21:1;13426:2;13406:18;;;13399:30;13465:34;13445:18;;;13438:62;-1:-1:-1;;;13516:18:1;;;13509:39;13565:19;;17429:110:0;13359:231:1;16941:295:0;17058:7;-1:-1:-1;;;;;17105:19:0;;17083:111;;;;-1:-1:-1;;;17083:111:0;;12976:2:1;17083:111:0;;;12958:21:1;13015:2;12995:18;;;12988:30;13054:34;13034:18;;;13027:62;-1:-1:-1;;;13105:18:1;;;13098:40;13155:19;;17083:111:0;12948:232:1;17083:111:0;-1:-1:-1;;;;;;17212:16:0;;;;;:9;:16;;;;;;;16941:295::o;7851:94::-;7701:6;;-1:-1:-1;;;;;7701:6:0;7222:10;7763:23;7755:68;;;;-1:-1:-1;;;7755:68:0;;;;;;;:::i;:::-;7916:21:::1;7934:1;7916:9;:21::i;:::-;7851:94::o:0;31976:98::-;7701:6;;-1:-1:-1;;;;;7701:6:0;7222:10;7763:23;7755:68;;;;-1:-1:-1;;;7755:68:0;;;;;;;:::i;:::-;32042:15:::1;:24:::0;;-1:-1:-1;;32042:24:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;31976:98::o;27429:180::-;27543:4;27572:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;27572:29:0;;;;;;;;;;;;;;;27429:180::o;32082:877::-;32157:12;;;;32149:52;;;;-1:-1:-1;;;32149:52:0;;11782:2:1;32149:52:0;;;11764:21:1;11821:2;11801:18;;;11794:30;11860:29;11840:18;;;11833:57;11907:18;;32149:52:0;11754:177:1;32149:52:0;30457:4;32234:14;:32;;32212:114;;;;-1:-1:-1;;;32212:114:0;;17759:2:1;32212:114:0;;;17741:21:1;;;17778:18;;;17771:30;17837:34;17817:18;;;17810:62;17889:18;;32212:114:0;17731:182:1;32212:114:0;32396:8;;32359:33;32377:14;32359:13;30578:15;;;30507:94;32359:13;:17;;:33::i;:::-;:45;;32337:127;;;;-1:-1:-1;;;32337:127:0;;13797:2:1;32337:127:0;;;13779:21:1;;;13816:18;;;13809:30;13875:34;13855:18;;;13848:62;13927:18;;32337:127:0;13769:182:1;32337:127:0;32529:9;32497:28;30380:17;32510:14;32497:12;:28::i;:::-;:41;;32475:122;;;;-1:-1:-1;;;32475:122:0;;11422:2:1;32475:122:0;;;11404:21:1;11461:2;11441:18;;;11434:30;11500:33;11480:18;;;11473:61;11551:18;;32475:122:0;11394:181:1;32475:122:0;32615:9;32610:342;32634:14;32630:1;:18;32610:342;;;32670:17;32690:13;30578:15;;;30507:94;32690:13;32670:33;;32738:8;;32722:13;30578:15;;;30507:94;32722:13;:24;32718:223;;;32776:18;32784:9;32776:7;:18::i;:::-;32775:19;32767:55;;;;-1:-1:-1;;;32767:55:0;;18120:2:1;32767:55:0;;;18102:21:1;18159:2;18139:18;;;18132:30;18198:25;18178:18;;;18171:53;18241:18;;32767:55:0;18092:173:1;32767:55:0;32859:15;;:19;;32877:1;32859:19;:::i;:::-;32841:15;:37;32897:28;32903:10;32915:9;32897:5;:28::i;:::-;-1:-1:-1;32650:3:0;;;;:::i;:::-;;;;32610:342;;17686:104;17742:13;17775:7;17768:14;;;;;:::i;31561:94::-;7701:6;;-1:-1:-1;;;;;7701:6:0;7222:10;7763:23;7755:68;;;;-1:-1:-1;;;7755:68:0;;;;;;;:::i;:::-;31631:16;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;19111:327::-:0;-1:-1:-1;;;;;19246:24:0;;7222:10;19246:24;;19238:62;;;;-1:-1:-1;;;19238:62:0;;11068:2:1;19238:62:0;;;11050:21:1;11107:2;11087:18;;;11080:30;11146:27;11126:18;;;11119:55;11191:18;;19238:62:0;11040:175:1;19238:62:0;7222:10;19313:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;19313:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;19313:53:0;;;;;;;;;;19382:48;;7754:41:1;;;19313:42:0;;7222:10;19382:48;;7727:18:1;19382:48:0;;;;;;;19111:327;;:::o;20245:365::-;20434:41;7222:10;20467:7;20434:18;:41::i;:::-;20412:140;;;;-1:-1:-1;;;20412:140:0;;;;;;;:::i;:::-;20563:39;20577:4;20583:2;20587:7;20596:5;20563:13;:39::i;:::-;20245:365;;;;:::o;24792:617::-;24910:13;24963:16;24971:7;24963;:16::i;:::-;24941:115;;;;-1:-1:-1;;;24941:115:0;;14519:2:1;24941:115:0;;;14501:21:1;14558:2;14538:18;;;14531:30;14597:34;14577:18;;;14570:62;-1:-1:-1;;;14648:18:1;;;14641:47;14705:19;;24941:115:0;14491:239:1;24941:115:0;25069:23;25095:19;;;:10;:19;;;;;25069:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25125:18;25146:10;:8;:10::i;:::-;25125:31;;25179:4;25173:18;25195:1;25173:23;25169:72;;;-1:-1:-1;25220:9:0;24792:617;-1:-1:-1;;24792:617:0:o;25169:72::-;25255:23;;:27;25251:108;;25330:4;25336:9;25313:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25299:48;;;;24792:617;;;:::o;25251:108::-;25378:23;25393:7;25378:14;:23::i;:::-;25371:30;24792:617;-1:-1:-1;;;;24792:617:0:o;31343:102::-;7701:6;;-1:-1:-1;;;;;7701:6:0;7222:10;7763:23;7755:68;;;;-1:-1:-1;;;7755:68:0;;;;;;;:::i;:::-;31417:20;;::::1;::::0;:11:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;28449:190::-:0;28188:7;28215:12;;;:6;:12;;;;;:22;;;27083:30;27094:4;7222:10;27083;:30::i;:::-;28605:26:::1;28617:4;28623:7;28605:11;:26::i;31239:96::-:0;31283:13;31316:11;31309:18;;;;;:::i;33133:275::-;33260:15;33365:35;33382:6;33390:9;33365:16;:35::i;:::-;33358:42;33133:275;-1:-1:-1;;;33133:275:0:o;7953:229::-;7701:6;;-1:-1:-1;;;;;7701:6:0;7222:10;7763:23;7755:68;;;;-1:-1:-1;;;7755:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8056:22:0;::::1;8034:110;;;::::0;-1:-1:-1;;;8034:110:0;;9194:2:1;8034:110:0::1;::::0;::::1;9176:21:1::0;9233:2;9213:18;;;9206:30;9272:34;9252:18;;;9245:62;-1:-1:-1;;;9323:18:1;;;9316:36;9369:19;;8034:110:0::1;9166:228:1::0;8034:110:0::1;8155:19;8165:8;8155:9;:19::i;:::-;7953:229:::0;:::o;27141:280::-;27271:4;-1:-1:-1;;;;;;27313:47:0;;-1:-1:-1;;;27313:47:0;;:100;;;27377:36;27401:11;27377:23;:36::i;20978:127::-;21043:4;21067:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21067:16:0;:30;;;20978:127::o;23349:174::-;23424:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;23424:29:0;-1:-1:-1;;;;;23424:29:0;;;;;;;;:24;;23478:23;23424:24;23478:14;:23::i;:::-;-1:-1:-1;;;;;23469:46:0;;;;;;;;;;;23349:174;;:::o;21113:452::-;21242:4;21286:16;21294:7;21286;:16::i;:::-;21264:110;;;;-1:-1:-1;;;21264:110:0;;12138:2:1;21264:110:0;;;12120:21:1;12177:2;12157:18;;;12150:30;12216:34;12196:18;;;12189:62;-1:-1:-1;;;12267:18:1;;;12260:42;12319:19;;21264:110:0;12110:234:1;21264:110:0;21385:13;21401:23;21416:7;21401:14;:23::i;:::-;21385:39;;21454:5;-1:-1:-1;;;;;21443:16:0;:7;-1:-1:-1;;;;;21443:16:0;;:64;;;;21500:7;-1:-1:-1;;;;;21476:31:0;:20;21488:7;21476:11;:20::i;:::-;-1:-1:-1;;;;;21476:31:0;;21443:64;:113;;;;21524:32;21541:5;21548:7;21524:16;:32::i;22778:563::-;22951:4;-1:-1:-1;;;;;22924:31:0;:23;22939:7;22924:14;:23::i;:::-;-1:-1:-1;;;;;22924:31:0;;22902:122;;;;-1:-1:-1;;;22902:122:0;;16113:2:1;22902:122:0;;;16095:21:1;16152:2;16132:18;;;16125:30;16191:34;16171:18;;;16164:62;-1:-1:-1;;;16242:18:1;;;16235:39;16291:19;;22902:122:0;16085:231:1;22902:122:0;-1:-1:-1;;;;;23043:16:0;;23035:65;;;;-1:-1:-1;;;23035:65:0;;10663:2:1;23035:65:0;;;10645:21:1;10702:2;10682:18;;;10675:30;10741:34;10721:18;;;10714:62;-1:-1:-1;;;10792:18:1;;;10785:34;10836:19;;23035:65:0;10635:226:1;23035:65:0;23113:39;23134:4;23140:2;23144:7;23113:20;:39::i;:::-;23165:29;23182:1;23186:7;23165:8;:29::i;:::-;-1:-1:-1;;;;;23207:15:0;;;;;;:9;:15;;;;;:20;;23226:1;;23207:15;:20;;23226:1;;23207:20;:::i;:::-;;;;-1:-1:-1;;;;;;;23238:13:0;;;;;;:9;:13;;;;;:18;;23255:1;;23238:13;:18;;23255:1;;23238:18;:::i;:::-;;;;-1:-1:-1;;23267:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;23267:21:0;-1:-1:-1;;;;;23267:21:0;;;;;;;;;23306:27;;23267:16;;23306:27;;;;;;;22778:563;;;:::o;27617:497::-;27698:22;27706:4;27712:7;27698;:22::i;:::-;27693:414;;27886:41;27914:7;-1:-1:-1;;;;;27886:41:0;27924:2;27886:19;:41::i;:::-;28000:38;28028:4;28035:2;28000:19;:38::i;:::-;27791:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27791:270:0;;;;;;;;;;-1:-1:-1;;;27737:358:0;;;;;;;:::i;29321:229::-;29396:22;29404:4;29410:7;29396;:22::i;:::-;29391:152;;29435:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;29435:29:0;;;;;;;;;:36;;-1:-1:-1;;29435:36:0;29467:4;29435:36;;;29518:12;7222:10;;7141:99;29518:12;-1:-1:-1;;;;;29491:40:0;29509:7;-1:-1:-1;;;;;29491:40:0;29503:4;29491:40;;;;;;;;;;29321:229;;:::o;29558:230::-;29633:22;29641:4;29647:7;29633;:22::i;:::-;29629:152;;;29704:5;29672:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;29672:29:0;;;;;;;;;;:37;;-1:-1:-1;;29672:37:0;;;29729:40;7222:10;;29672:12;;29729:40;;29704:5;29729:40;29558:230;;:::o;8190:182::-;8265:6;;;-1:-1:-1;;;;;8282:26:0;;;-1:-1:-1;;;;;;8282:26:0;;;;;;;8324:40;;8265:6;;;8282:26;8265:6;;8324:40;;8246:16;;8324:40;8190:182;;:::o;2339:179::-;2397:7;;2429:5;2433:1;2429;:5;:::i;:::-;2417:17;;2458:1;2453;:6;;2445:46;;;;-1:-1:-1;;;2445:46:0;;9958:2:1;2445:46:0;;;9940:21:1;9997:2;9977:18;;;9970:30;10036:29;10016:18;;;10009:57;10083:18;;2445:46:0;9930:177:1;3218:220:0;3276:7;3300:6;3296:20;;-1:-1:-1;3315:1:0;3308:8;;3296:20;3327:9;3339:5;3343:1;3339;:5;:::i;:::-;3327:17;-1:-1:-1;3372:1:0;3363:5;3367:1;3327:17;3363:5;:::i;:::-;:10;3355:56;;;;-1:-1:-1;;;3355:56:0;;14937:2:1;3355:56:0;;;14919:21:1;14976:2;14956:18;;;14949:30;15015:34;14995:18;;;14988:62;-1:-1:-1;;;15066:18:1;;;15059:31;15107:19;;3355:56:0;14909:223:1;22020:382:0;-1:-1:-1;;;;;22100:16:0;;22092:61;;;;-1:-1:-1;;;22092:61:0;;14158:2:1;22092:61:0;;;14140:21:1;;;14177:18;;;14170:30;14236:34;14216:18;;;14209:62;14288:18;;22092:61:0;14130:182:1;22092:61:0;22173:16;22181:7;22173;:16::i;:::-;22172:17;22164:58;;;;-1:-1:-1;;;22164:58:0;;9601:2:1;22164:58:0;;;9583:21:1;9640:2;9620:18;;;9613:30;9679;9659:18;;;9652:58;9727:18;;22164:58:0;9573:178:1;22164:58:0;22235:45;22264:1;22268:2;22272:7;22235:20;:45::i;:::-;-1:-1:-1;;;;;22293:13:0;;;;;;:9;:13;;;;;:18;;22310:1;;22293:13;:18;;22310:1;;22293:18;:::i;:::-;;;;-1:-1:-1;;22322:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;22322:21:0;-1:-1:-1;;;;;22322:21:0;;;;;;;;22361:33;;22322:16;;;22361:33;;22322:16;;22361:33;22020:382;;:::o;20618:352::-;20775:28;20785:4;20791:2;20795:7;20775:9;:28::i;:::-;20836:48;20859:4;20865:2;20869:7;20878:5;20836:22;:48::i;:::-;20814:148;;;;-1:-1:-1;;;20814:148:0;;;;;;;:::i;31453:100::-;31505:13;31538:7;31531:14;;;;;:::i;17798:468::-;17916:13;17969:16;17977:7;17969;:16::i;:::-;17947:113;;;;-1:-1:-1;;;17947:113:0;;16523:2:1;17947:113:0;;;16505:21:1;16562:2;16542:18;;;16535:30;16601:34;16581:18;;;16574:62;-1:-1:-1;;;16652:18:1;;;16645:45;16707:19;;17947:113:0;16495:237:1;17947:113:0;18073:21;18097:10;:8;:10::i;:::-;18073:34;;18162:1;18144:7;18138:21;:25;:120;;;;;;;;;;;;;;;;;18207:7;18216:18;:7;:16;:18::i;:::-;18190:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18118:140;17798:468;-1:-1:-1;;;17798:468:0:o;16578:355::-;16725:4;-1:-1:-1;;;;;;16767:40:0;;-1:-1:-1;;;16767:40:0;;:105;;-1:-1:-1;;;;;;;16824:48:0;;-1:-1:-1;;;16824:48:0;16767:105;:158;;;-1:-1:-1;;;;;;;;;;8689:40:0;;;16889:36;8530:207;33416:288;33639:1;33612:24;;;:15;:24;;;;;;:28;33608:89;;33684:1;33657:24;;;:15;:24;;;;;:28;-1:-1:-1;;33416:288:0:o;15319:483::-;15421:13;15452:19;15484:10;15488:6;15484:1;:10;:::i;:::-;:14;;15497:1;15484:14;:::i;:::-;15474:25;;;;;;-1:-1:-1;;;15474:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15474:25:0;;15452:47;;-1:-1:-1;;;15510:6:0;15517:1;15510:9;;;;;;-1:-1:-1;;;15510:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;15510:15:0;;;;;;;;;-1:-1:-1;;;15536:6:0;15543:1;15536:9;;;;;;-1:-1:-1;;;15536:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;15536:15:0;;;;;;;;-1:-1:-1;15567:9:0;15579:10;15583:6;15579:1;:10;:::i;:::-;:14;;15592:1;15579:14;:::i;:::-;15567:26;;15562:135;15599:1;15595;:5;15562:135;;;-1:-1:-1;;;15647:5:0;15655:3;15647:11;15634:25;;;;;-1:-1:-1;;;15634:25:0;;;;;;;;;;;;15622:6;15629:1;15622:9;;;;;;-1:-1:-1;;;15622:9:0;;;;;;;;;;;;:37;-1:-1:-1;;;;;15622:37:0;;;;;;;;-1:-1:-1;15684:1:0;15674:11;;;;;15602:3;;;:::i;:::-;;;15562:135;;;-1:-1:-1;15715:10:0;;15707:55;;;;-1:-1:-1;;;15707:55:0;;8414:2:1;15707:55:0;;;8396:21:1;;;8433:18;;;8426:30;8492:34;8472:18;;;8465:62;8544:18;;15707:55:0;8386:182:1;23531:980:0;23686:4;-1:-1:-1;;;;;23707:13:0;;10492:20;10540:8;23703:801;;23760:175;;-1:-1:-1;;;23760:175:0;;-1:-1:-1;;;;;23760:36:0;;;;;:175;;7222:10;;23854:4;;23881:7;;23911:5;;23760:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23760:175:0;;;;;;;;-1:-1:-1;;23760:175:0;;;;;;;;;;;;:::i;:::-;;;23739:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24118:13:0;;24114:320;;24161:108;;-1:-1:-1;;;24161:108:0;;;;;;;:::i;24114:320::-;24384:6;24378:13;24369:6;24365:2;24361:15;24354:38;23739:710;-1:-1:-1;;;;;;23999:51:0;-1:-1:-1;;;23999:51:0;;-1:-1:-1;23992:58:0;;23703:801;-1:-1:-1;24488:4:0;23531:980;;;;;;:::o;14431:532::-;14487:13;14517:10;14513:53;;-1:-1:-1;;14544:10:0;;;;;;;;;;;;-1:-1:-1;;;14544:10:0;;;;;14431:532::o;14513:53::-;14591:5;14576:12;14632:78;14639:9;;14632:78;;14665:8;;;;:::i;:::-;;-1:-1:-1;14688:10:0;;-1:-1:-1;14696:2:0;14688:10;;:::i;:::-;;;14632:78;;;14720:19;14752:6;14742:17;;;;;;-1:-1:-1;;;14742:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14742:17:0;;14720:39;;14770:154;14777:10;;14770:154;;14804:11;14814:1;14804:11;;:::i;:::-;;-1:-1:-1;14873:10:0;14881:2;14873:5;:10;:::i;:::-;14860:24;;:2;:24;:::i;:::-;14847:39;;14830:6;14837;14830:14;;;;;;-1:-1:-1;;;14830:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;14830:56:0;;;;;;;;-1:-1:-1;14901:11:0;14910:2;14901:11;;:::i;:::-;;;14770:154;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:196::-;887:6;940:2;928:9;919:7;915:23;911:32;908:2;;;961:6;953;946:22;908:2;989:29;1008:9;989:29;:::i;1029:270::-;1097:6;1105;1158:2;1146:9;1137:7;1133:23;1129:32;1126:2;;;1179:6;1171;1164:22;1126:2;1207:29;1226:9;1207:29;:::i;:::-;1197:39;;1255:38;1289:2;1278:9;1274:18;1255:38;:::i;:::-;1245:48;;1116:183;;;;;:::o;1304:338::-;1381:6;1389;1397;1450:2;1438:9;1429:7;1425:23;1421:32;1418:2;;;1471:6;1463;1456:22;1418:2;1499:29;1518:9;1499:29;:::i;:::-;1489:39;;1547:38;1581:2;1570:9;1566:18;1547:38;:::i;:::-;1537:48;;1632:2;1621:9;1617:18;1604:32;1594:42;;1408:234;;;;;:::o;1647:696::-;1742:6;1750;1758;1766;1819:3;1807:9;1798:7;1794:23;1790:33;1787:2;;;1841:6;1833;1826:22;1787:2;1869:29;1888:9;1869:29;:::i;:::-;1859:39;;1917:38;1951:2;1940:9;1936:18;1917:38;:::i;:::-;1907:48;;2002:2;1991:9;1987:18;1974:32;1964:42;;2057:2;2046:9;2042:18;2029:32;2084:18;2076:6;2073:30;2070:2;;;2121:6;2113;2106:22;2070:2;2149:22;;2202:4;2194:13;;2190:27;-1:-1:-1;2180:2:1;;2236:6;2228;2221:22;2180:2;2264:73;2329:7;2324:2;2311:16;2306:2;2302;2298:11;2264:73;:::i;:::-;2254:83;;;1777:566;;;;;;;:::o;2348:367::-;2413:6;2421;2474:2;2462:9;2453:7;2449:23;2445:32;2442:2;;;2495:6;2487;2480:22;2442:2;2523:29;2542:9;2523:29;:::i;:::-;2513:39;;2602:2;2591:9;2587:18;2574:32;2649:5;2642:13;2635:21;2628:5;2625:32;2615:2;;2676:6;2668;2661:22;2615:2;2704:5;2694:15;;;2432:283;;;;;:::o;2720:264::-;2788:6;2796;2849:2;2837:9;2828:7;2824:23;2820:32;2817:2;;;2870:6;2862;2855:22;2817:2;2898:29;2917:9;2898:29;:::i;:::-;2888:39;2974:2;2959:18;;;;2946:32;;-1:-1:-1;;;2807:177:1:o;2989:190::-;3048:6;3101:2;3089:9;3080:7;3076:23;3072:32;3069:2;;;3122:6;3114;3107:22;3069:2;-1:-1:-1;3150:23:1;;3059:120;-1:-1:-1;3059:120:1:o;3184:264::-;3252:6;3260;3313:2;3301:9;3292:7;3288:23;3284:32;3281:2;;;3334:6;3326;3319:22;3281:2;3375:9;3362:23;3352:33;;3404:38;3438:2;3427:9;3423:18;3404:38;:::i;3453:255::-;3511:6;3564:2;3552:9;3543:7;3539:23;3535:32;3532:2;;;3585:6;3577;3570:22;3532:2;3629:9;3616:23;3648:30;3672:5;3648:30;:::i;3713:259::-;3782:6;3835:2;3823:9;3814:7;3810:23;3806:32;3803:2;;;3856:6;3848;3841:22;3803:2;3893:9;3887:16;3912:30;3936:5;3912:30;:::i;3977:480::-;4046:6;4099:2;4087:9;4078:7;4074:23;4070:32;4067:2;;;4120:6;4112;4105:22;4067:2;4165:9;4152:23;4198:18;4190:6;4187:30;4184:2;;;4235:6;4227;4220:22;4184:2;4263:22;;4316:4;4308:13;;4304:27;-1:-1:-1;4294:2:1;;4350:6;4342;4335:22;4294:2;4378:73;4443:7;4438:2;4425:16;4420:2;4416;4412:11;4378:73;:::i;4657:289::-;4714:6;4767:2;4755:9;4746:7;4742:23;4738:32;4735:2;;;4788:6;4780;4773:22;4735:2;4832:9;4819:23;4882:4;4875:5;4871:16;4864:5;4861:27;4851:2;;4907:6;4899;4892:22;4951:257;4992:3;5030:5;5024:12;5057:6;5052:3;5045:19;5073:63;5129:6;5122:4;5117:3;5113:14;5106:4;5099:5;5095:16;5073:63;:::i;:::-;5190:2;5169:15;-1:-1:-1;;5165:29:1;5156:39;;;;5197:4;5152:50;;5000:208;-1:-1:-1;;5000:208:1:o;5213:470::-;5392:3;5430:6;5424:13;5446:53;5492:6;5487:3;5480:4;5472:6;5468:17;5446:53;:::i;:::-;5562:13;;5521:16;;;;5584:57;5562:13;5521:16;5618:4;5606:17;;5584:57;:::i;:::-;5657:20;;5400:283;-1:-1:-1;;;;5400:283:1:o;5898:786::-;6309:25;6304:3;6297:38;6279:3;6364:6;6358:13;6380:62;6435:6;6430:2;6425:3;6421:12;6414:4;6406:6;6402:17;6380:62;:::i;:::-;-1:-1:-1;;;6501:2:1;6461:16;;;6493:11;;;6486:40;6551:13;;6573:63;6551:13;6622:2;6614:11;;6607:4;6595:17;;6573:63;:::i;:::-;6656:17;6675:2;6652:26;;6287:397;-1:-1:-1;;;;6287:397:1:o;7121:488::-;-1:-1:-1;;;;;7390:15:1;;;7372:34;;7442:15;;7437:2;7422:18;;7415:43;7489:2;7474:18;;7467:34;;;7537:3;7532:2;7517:18;;7510:31;;;7315:4;;7558:45;;7583:19;;7575:6;7558:45;:::i;:::-;7550:53;7324:285;-1:-1:-1;;;;;;7324:285:1:o;7988:219::-;8137:2;8126:9;8119:21;8100:4;8157:44;8197:2;8186:9;8182:18;8174:6;8157:44;:::i;8573:414::-;8775:2;8757:21;;;8814:2;8794:18;;;8787:30;8853:34;8848:2;8833:18;;8826:62;-1:-1:-1;;;8919:2:1;8904:18;;8897:48;8977:3;8962:19;;8747:240::o;15550:356::-;15752:2;15734:21;;;15771:18;;;15764:30;15830:34;15825:2;15810:18;;15803:62;15897:2;15882:18;;15724:182::o;17139:413::-;17341:2;17323:21;;;17380:2;17360:18;;;17353:30;17419:34;17414:2;17399:18;;17392:62;-1:-1:-1;;;17485:2:1;17470:18;;17463:47;17542:3;17527:19;;17313:239::o;19057:128::-;19097:3;19128:1;19124:6;19121:1;19118:13;19115:2;;;19134:18;;:::i;:::-;-1:-1:-1;19170:9:1;;19105:80::o;19190:120::-;19230:1;19256;19246:2;;19261:18;;:::i;:::-;-1:-1:-1;19295:9:1;;19236:74::o;19315:168::-;19355:7;19421:1;19417;19413:6;19409:14;19406:1;19403:21;19398:1;19391:9;19384:17;19380:45;19377:2;;;19428:18;;:::i;:::-;-1:-1:-1;19468:9:1;;19367:116::o;19488:125::-;19528:4;19556:1;19553;19550:8;19547:2;;;19561:18;;:::i;:::-;-1:-1:-1;19598:9:1;;19537:76::o;19618:258::-;19690:1;19700:113;19714:6;19711:1;19708:13;19700:113;;;19790:11;;;19784:18;19771:11;;;19764:39;19736:2;19729:10;19700:113;;;19831:6;19828:1;19825:13;19822:2;;;-1:-1:-1;;19866:1:1;19848:16;;19841:27;19671:205::o;19881:136::-;19920:3;19948:5;19938:2;;19957:18;;:::i;:::-;-1:-1:-1;;;19993:18:1;;19928:89::o;20022:380::-;20101:1;20097:12;;;;20144;;;20165:2;;20219:4;20211:6;20207:17;20197:27;;20165:2;20272;20264:6;20261:14;20241:18;20238:38;20235:2;;;20318:10;20313:3;20309:20;20306:1;20299:31;20353:4;20350:1;20343:15;20381:4;20378:1;20371:15;20235:2;;20077:325;;;:::o;20407:135::-;20446:3;-1:-1:-1;;20467:17:1;;20464:2;;;20487:18;;:::i;:::-;-1:-1:-1;20534:1:1;20523:13;;20454:88::o;20547:112::-;20579:1;20605;20595:2;;20610:18;;:::i;:::-;-1:-1:-1;20644:9:1;;20585:74::o;20664:127::-;20725:10;20720:3;20716:20;20713:1;20706:31;20756:4;20753:1;20746:15;20780:4;20777:1;20770:15;20796:127;20857:10;20852:3;20848:20;20845:1;20838:31;20888:4;20885:1;20878:15;20912:4;20909:1;20902:15;20928:127;20989:10;20984:3;20980:20;20977:1;20970:31;21020:4;21017:1;21010:15;21044:4;21041:1;21034:15;21060:131;-1:-1:-1;;;;;;21134:32:1;;21124:43;;21114:2;;21181:1;21178;21171:12

Swarm Source

ipfs://329b167f9c3886ff568515431868ba9c03b7dc568e6432ca042051b6ebb0582a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.