ETH Price: $2,678.61 (-2.20%)

Token

Goodfellapes (GFApes)
 

Overview

Max Total Supply

269 GFApes

Holders

147

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 GFApes
0xcde97ca62d0960f8db16a835eb63dfc96c790123
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Goodfellapes

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-17
*/

pragma solidity ^0.8.0;
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
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);
    }
}
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
    ) private 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);
            }
        }
    }
}
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
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 IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) external view returns (uint256);
}
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);
}
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 private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
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;


    string public _baseURI;
    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 base = baseURI();
        return bytes(base).length > 0 ? string(abi.encodePacked(base, tokenId.toString(), ".json")) : "";
    }
    function baseURI() internal view virtual returns (string memory) {
        return _baseURI;
    }
    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 {
        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);

        _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(to).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 ERC721Enumerable is ERC721, IERC721Enumerable {
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    mapping(uint256 => uint256) private _ownedTokensIndex;

    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

        }

        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        uint256 lastTokenId = _allTokens[lastTokenIndex];


        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}
contract Goodfellapes is ERC721Enumerable, Ownable
{
    using SafeMath for uint256;
    using Strings for uint256;

    uint public constant _TOTALSUPPLY = 2000;
    uint public maxQuantity =20;
    uint256 public price = 0.07 ether; 
    uint256 public status = 1; // 0-pause, 1-whitelist, 2-public
    bool public reveal = false;
    mapping(address=>bool) public whiteListedAddress;

    // uint private tokenId=1;

    constructor() ERC721("Goodfellapes", "GFApes")  {
        setBaseURI("https://gateway.pinata.cloud/ipfs/QmTVv6B4qk7CiZ75a4yZD1TEfP6ph3ABKMKWiVwGk2UDqw/");
         for(uint i=1; i< 41 ; i++){
            _safeMint(msg.sender,i);
        }
    }
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseURI = baseURI;
    }

    function setPrice(uint256 _newPrice) public onlyOwner() {
        price = _newPrice;
    }
    function setStatus(uint8 s) public onlyOwner{
        status = s;
    }
    function setMaxxQtPerTx(uint256 _quantity) public onlyOwner {
        maxQuantity=_quantity;
    }
    function setReveal() public onlyOwner{
        reveal =! reveal;
    }
    modifier isSaleOpen{
        require(totalSupply() < _TOTALSUPPLY, "Sale end");
        _;
    }
    function getStatus() public view returns (uint256) {
        return status;

    }
    function getPrice(uint256 _quantity) public view returns (uint256) {
       
           return _quantity*price ;
    }

    function mint(uint chosenAmount) public payable isSaleOpen {
        require(totalSupply()+chosenAmount<=_TOTALSUPPLY-40,"Quantity must be lesser then MaxSupply");
        require(chosenAmount > 0, "Number of tokens can not be less than or equal to 0");
        require(chosenAmount <= maxQuantity,"Chosen Amount exceeds MaxQuantity");
        require(price.mul(chosenAmount) == msg.value, "Sent ether value is incorrect");
        require(whiteListedAddress[msg.sender] || status == 2, "Sorry you are not white listed");
        for (uint i = 0; i < chosenAmount; i++) {
            _safeMint(msg.sender, totalsupply());
        }
    }
 
    function tokensOfOwner(address _owner) public view returns (uint256[] memory)
    {
        uint256 count = balanceOf(_owner);
        uint256[] memory result = new uint256[](count);
        for (uint256 index = 0; index < count; index++) {
            result[index] = tokenOfOwnerByIndex(_owner, index);
        }
        return result;
    }

    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
    function totalsupply() private view returns (uint)
    {
        return super.totalSupply()+1;
    }
    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory base = baseURI();
        if(bytes(base).length > 0){
            return reveal ? string(abi.encodePacked(base, tokenId.toString(), ".json")) : string(abi.encodePacked("https://gateway.pinata.cloud/ipfs/QmecYkftXd9HxJxXmzyhqfjCJBwsBrhSSyCEK47TXoGqdv"));
        }
        else 
        return "";
    }
    function addWhiteListAddress(address[] memory _address) public onlyOwner {
        for(uint i=0; i<_address.length; i++){
            whiteListedAddress[_address[i]] = true;
        }
    }
    function isWhiteListAddress(address _address) public returns (bool){
        return whiteListedAddress[_address];
    }
    function isWhiteListSender() public returns (bool){
        return whiteListedAddress[msg.sender];
    }
    function contractURI() public view returns (string memory) {
        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Goodfellapes ", "description": "Inspired by the award winning film \"GoodFellas\" , Our collection of 2,000+ \"GoodFellape\" NFTs are unique in their own right. A community focused project with traits & character qualities inspired from both BAYC & the film. Each GoodFellape is unique & algorithmically generated from over 60 traits. This family of wise guys is looking to grow.. and As far back as I can remember, I always wanted to be a gangster"}'))));
        json = string(abi.encodePacked('data:application/json;base64,', json));
        return json;
    }
}
library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)

            for {
                let i := 0
            } lt(i, len) {

            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)

                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_TOTALSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"addWhiteListAddress","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhiteListAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isWhiteListSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"setMaxxQtPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"s","type":"uint8"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","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":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526014600c5566f8b0a10e470000600d556001600e556000600f60006101000a81548160ff0219169083151502179055503480156200004157600080fd5b506040518060400160405280600c81526020017f476f6f6466656c6c6170657300000000000000000000000000000000000000008152506040518060400160405280600681526020017f47464170657300000000000000000000000000000000000000000000000000008152508160009080519060200190620000c692919062000c17565b508060019080519060200190620000df92919062000c17565b5050506000620000f4620001fd60201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001bd60405180608001604052806051815260200162006193605191396200020560201b60201c565b6000600190505b6029811015620001f657620001e03382620002b060201b60201c565b8080620001ed90620010cf565b915050620001c4565b5062001322565b600033905090565b62000215620001fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023b620002d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000294576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028b9062000f12565b60405180910390fd5b8060069080519060200190620002ac92919062000c17565b5050565b620002d28282604051806020016040528060008152506200030060201b60201c565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200031283836200036e60201b60201c565b6200032760008484846200055460201b60201c565b62000369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003609062000e8a565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d89062000ef0565b60405180910390fd5b620003f2816200070e60201b60201c565b1562000435576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042c9062000eac565b60405180910390fd5b62000449600083836200077a60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200049b919062000f61565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620005828473ffffffffffffffffffffffffffffffffffffffff16620008c160201b62001dbf1760201c565b1562000701578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620005b4620001fd60201b60201c565b8786866040518563ffffffff1660e01b8152600401620005d8949392919062000e36565b602060405180830381600087803b158015620005f357600080fd5b505af19250505080156200062757506040513d601f19601f8201168201806040525081019062000624919062000cde565b60015b620006b0573d80600081146200065a576040519150601f19603f3d011682016040523d82523d6000602084013e6200065f565b606091505b50600081511415620006a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069f9062000e8a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000706565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000792838383620008d460201b62001dd21760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620007df57620007d981620008d960201b60201c565b62000827565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000826576200082583826200092260201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000874576200086e8162000a3260201b60201c565b620008bc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620008bb57620008ba828262000ad060201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016200093c8462000b5c60201b620011aa1760201c565b62000948919062000fbe565b9050600060086000848152602001908152602001600020549050818114620009c1576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905062000a48919062000fbe565b90506000600a600084815260200190815260200160002054905060006009838154811062000a7b5762000a7a620011aa565b5b90600052602060002001549050600a600085815260200190815260200160002060009055600980548062000ab45762000ab36200117b565b5b6001900381819060005260206000200160009055905550505050565b600062000ae88362000b5c60201b620011aa1760201c565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc79062000ece565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000c259062001099565b90600052602060002090601f01602090048101928262000c49576000855562000c95565b82601f1062000c6457805160ff191683800117855562000c95565b8280016001018555821562000c95579182015b8281111562000c9457825182559160200191906001019062000c77565b5b50905062000ca4919062000ca8565b5090565b5b8082111562000cc357600081600090555060010162000ca9565b5090565b60008151905062000cd88162001308565b92915050565b60006020828403121562000cf75762000cf6620011d9565b5b600062000d078482850162000cc7565b91505092915050565b62000d1b8162000ff9565b82525050565b600062000d2e8262000f34565b62000d3a818562000f3f565b935062000d4c81856020860162001063565b62000d5781620011de565b840191505092915050565b600062000d7160328362000f50565b915062000d7e82620011ef565b604082019050919050565b600062000d98601c8362000f50565b915062000da5826200123e565b602082019050919050565b600062000dbf602a8362000f50565b915062000dcc8262001267565b604082019050919050565b600062000de660208362000f50565b915062000df382620012b6565b602082019050919050565b600062000e0d60208362000f50565b915062000e1a82620012df565b602082019050919050565b62000e308162001059565b82525050565b600060808201905062000e4d600083018762000d10565b62000e5c602083018662000d10565b62000e6b604083018562000e25565b818103606083015262000e7f818462000d21565b905095945050505050565b6000602082019050818103600083015262000ea58162000d62565b9050919050565b6000602082019050818103600083015262000ec78162000d89565b9050919050565b6000602082019050818103600083015262000ee98162000db0565b9050919050565b6000602082019050818103600083015262000f0b8162000dd7565b9050919050565b6000602082019050818103600083015262000f2d8162000dfe565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000f6e8262001059565b915062000f7b8362001059565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000fb35762000fb26200111d565b5b828201905092915050565b600062000fcb8262001059565b915062000fd88362001059565b92508282101562000fee5762000fed6200111d565b5b828203905092915050565b6000620010068262001039565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200108357808201518184015260208101905062001066565b8381111562001093576000848401525b50505050565b60006002820490506001821680620010b257607f821691505b60208210811415620010c957620010c86200114c565b5b50919050565b6000620010dc8262001059565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200111257620011116200111d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62001313816200100d565b81146200131f57600080fd5b50565b614e6180620013326000396000f3fe6080604052600436106102305760003560e01c8063743976a01161012e578063a475b5dd116100ab578063e640cf7d1161006f578063e640cf7d14610854578063e75722301461087f578063e8a3d485146108bc578063e985e9c5146108e7578063f2fde38b1461092457610230565b8063a475b5dd1461075b578063b88d4fde14610786578063c166d13d146107af578063c87b56dd146107ec578063db4568e21461082957610230565b806395d89b41116100f257806395d89b41146106975780639d38fd21146106c2578063a035b1fe146106eb578063a0712d6814610716578063a22cb4651461073257610230565b8063743976a0146105c457806376645315146105ef5780638462151c146106065780638da5cb5b1461064357806391b7f5ed1461066e57610230565b80633ccfd60b116101bc5780636352211e116101805780636352211e146104b957806367316b3f146104f65780636f302ef71461051f57806370a082311461054a57806373cf68691461058757610230565b80633ccfd60b146103e857806342842e0e146103ff5780634e69d560146104285780634f6ccce71461045357806355f804b31461049057610230565b806318160ddd1161020357806318160ddd14610303578063200d2ed21461032e57806323b872dd146103595780632e49d78b146103825780632f745c59146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613463565b61094d565b6040516102699190613b8f565b60405180910390f35b34801561027e57600080fd5b506102876109c7565b6040516102949190613baa565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613506565b610a59565b6040516102d19190613b06565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906133da565b610ade565b005b34801561030f57600080fd5b50610318610bf6565b6040516103259190613ecc565b60405180910390f35b34801561033a57600080fd5b50610343610c03565b6040516103509190613ecc565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906132c4565b610c09565b005b34801561038e57600080fd5b506103a960048036038101906103a49190613533565b610c69565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906133da565b610cf2565b6040516103df9190613ecc565b60405180910390f35b3480156103f457600080fd5b506103fd610d97565b005b34801561040b57600080fd5b50610426600480360381019061042191906132c4565b610e62565b005b34801561043457600080fd5b5061043d610e82565b60405161044a9190613ecc565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190613506565b610e8c565b6040516104879190613ecc565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b291906134bd565b610efd565b005b3480156104c557600080fd5b506104e060048036038101906104db9190613506565b610f93565b6040516104ed9190613b06565b60405180910390f35b34801561050257600080fd5b5061051d6004803603810190610518919061341a565b611045565b005b34801561052b57600080fd5b50610534611156565b6040516105419190613b8f565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190613257565b6111aa565b60405161057e9190613ecc565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a99190613257565b611262565b6040516105bb9190613b8f565b60405180910390f35b3480156105d057600080fd5b506105d96112b8565b6040516105e69190613baa565b60405180910390f35b3480156105fb57600080fd5b50610604611346565b005b34801561061257600080fd5b5061062d60048036038101906106289190613257565b6113ee565b60405161063a9190613b6d565b60405180910390f35b34801561064f57600080fd5b5061065861149c565b6040516106659190613b06565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190613506565b6114c6565b005b3480156106a357600080fd5b506106ac61154c565b6040516106b99190613baa565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190613506565b6115de565b005b3480156106f757600080fd5b50610700611664565b60405161070d9190613ecc565b60405180910390f35b610730600480360381019061072b9190613506565b61166a565b005b34801561073e57600080fd5b506107596004803603810190610754919061339a565b6118c2565b005b34801561076757600080fd5b50610770611a43565b60405161077d9190613b8f565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190613317565b611a56565b005b3480156107bb57600080fd5b506107d660048036038101906107d19190613257565b611ab8565b6040516107e39190613b8f565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190613506565b611ad8565b6040516108209190613baa565b60405180910390f35b34801561083557600080fd5b5061083e611bbb565b60405161084b9190613ecc565b60405180910390f35b34801561086057600080fd5b50610869611bc1565b6040516108769190613ecc565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a19190613506565b611bc7565b6040516108b39190613ecc565b60405180910390f35b3480156108c857600080fd5b506108d1611bde565b6040516108de9190613baa565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190613284565b611c33565b60405161091b9190613b8f565b60405180910390f35b34801561093057600080fd5b5061094b60048036038101906109469190613257565b611cc7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c057506109bf82611dd7565b5b9050919050565b6060600080546109d6906141ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610a02906141ee565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b6000610a6482611eb9565b610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a90613dac565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae982610f93565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613e4c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b79611f25565b73ffffffffffffffffffffffffffffffffffffffff161480610ba85750610ba781610ba2611f25565b611c33565b5b610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90613ccc565b60405180910390fd5b610bf18383611f2d565b505050565b6000600980549050905090565b600e5481565b610c1a610c14611f25565b82611fe6565b610c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5090613e8c565b60405180910390fd5b610c648383836120c4565b505050565b610c71611f25565b73ffffffffffffffffffffffffffffffffffffffff16610c8f61149c565b73ffffffffffffffffffffffffffffffffffffffff1614610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc90613dcc565b60405180910390fd5b8060ff16600e8190555050565b6000610cfd836111aa565b8210610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3590613bec565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d9f611f25565b73ffffffffffffffffffffffffffffffffffffffff16610dbd61149c565b73ffffffffffffffffffffffffffffffffffffffff1614610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90613dcc565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e5e573d6000803e3d6000fd5b5050565b610e7d83838360405180602001604052806000815250611a56565b505050565b6000600e54905090565b6000610e96610bf6565b8210610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90613eac565b60405180910390fd5b60098281548110610eeb57610eea614387565b5b90600052602060002001549050919050565b610f05611f25565b73ffffffffffffffffffffffffffffffffffffffff16610f2361149c565b73ffffffffffffffffffffffffffffffffffffffff1614610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090613dcc565b60405180910390fd5b8060069080519060200190610f8f929190612fb8565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390613d0c565b60405180910390fd5b80915050919050565b61104d611f25565b73ffffffffffffffffffffffffffffffffffffffff1661106b61149c565b73ffffffffffffffffffffffffffffffffffffffff16146110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890613dcc565b60405180910390fd5b60005b8151811015611152576001601060008484815181106110e6576110e5614387565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061114a90614251565b9150506110c4565b5050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290613cec565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600680546112c5906141ee565b80601f01602080910402602001604051908101604052809291908181526020018280546112f1906141ee565b801561133e5780601f106113135761010080835404028352916020019161133e565b820191906000526020600020905b81548152906001019060200180831161132157829003601f168201915b505050505081565b61134e611f25565b73ffffffffffffffffffffffffffffffffffffffff1661136c61149c565b73ffffffffffffffffffffffffffffffffffffffff16146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990613dcc565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b606060006113fb836111aa565b905060008167ffffffffffffffff811115611419576114186143b6565b5b6040519080825280602002602001820160405280156114475781602001602082028036833780820191505090505b50905060005b828110156114915761145f8582610cf2565b82828151811061147257611471614387565b5b602002602001018181525050808061148990614251565b91505061144d565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ce611f25565b73ffffffffffffffffffffffffffffffffffffffff166114ec61149c565b73ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613dcc565b60405180910390fd5b80600d8190555050565b60606001805461155b906141ee565b80601f0160208091040260200160405190810160405280929190818152602001828054611587906141ee565b80156115d45780601f106115a9576101008083540402835291602001916115d4565b820191906000526020600020905b8154815290600101906020018083116115b757829003601f168201915b5050505050905090565b6115e6611f25565b73ffffffffffffffffffffffffffffffffffffffff1661160461149c565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165190613dcc565b60405180910390fd5b80600c8190555050565b600d5481565b6107d0611675610bf6565b106116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90613d6c565b60405180910390fd5b60286107d06116c491906140f7565b816116cd610bf6565b6116d79190614016565b1115611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f90613dec565b60405180910390fd5b6000811161175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290613bcc565b60405180910390fd5b600c548111156117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790613d8c565b60405180910390fd5b346117b682600d5461232090919063ffffffff16565b146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90613d2c565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061185057506002600e54145b61188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690613e6c565b60405180910390fd5b60005b818110156118be576118ab336118a6612336565b612351565b80806118b690614251565b915050611892565b5050565b6118ca611f25565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90613c8c565b60405180910390fd5b8060056000611945611f25565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119f2611f25565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a379190613b8f565b60405180910390a35050565b600f60009054906101000a900460ff1681565b611a67611a61611f25565b83611fe6565b611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90613e8c565b60405180910390fd5b611ab28484848461236f565b50505050565b60106020528060005260406000206000915054906101000a900460ff1681565b6060611ae382611eb9565b611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1990613e2c565b60405180910390fd5b6000611b2c6123cb565b9050600081511115611ba257600f60009054906101000a900460ff16611b6f57604051602001611b5b90613aba565b604051602081830303815290604052611b9a565b80611b798461245d565b604051602001611b8a929190613a8b565b6040516020818303038152906040525b915050611bb6565b604051806020016040528060008152509150505b919050565b6107d081565b600c5481565b6000600d5482611bd7919061409d565b9050919050565b60606000611c08604051602001611bf490613acf565b6040516020818303038152906040526125be565b905080604051602001611c1b9190613ae4565b60405160208183030381529060405290508091505090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ccf611f25565b73ffffffffffffffffffffffffffffffffffffffff16611ced61149c565b73ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613dcc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90613c2c565b60405180910390fd5b611dbc81612756565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ea257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611eb25750611eb18261281c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fa083610f93565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ff182611eb9565b612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790613cac565b60405180910390fd5b600061203b83610f93565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120aa57508373ffffffffffffffffffffffffffffffffffffffff1661209284610a59565b73ffffffffffffffffffffffffffffffffffffffff16145b806120bb57506120ba8185611c33565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120e482610f93565b73ffffffffffffffffffffffffffffffffffffffff161461213a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213190613e0c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190613c6c565b60405180910390fd5b6121b5838383612886565b6121c0600082611f2d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221091906140f7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122679190614016565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000818361232e919061409d565b905092915050565b60006001612342610bf6565b61234c9190614016565b905090565b61236b82826040518060200160405280600081525061299a565b5050565b61237a8484846120c4565b612386848484846129f5565b6123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc90613c0c565b60405180910390fd5b50505050565b6060600680546123da906141ee565b80601f0160208091040260200160405190810160405280929190818152602001828054612406906141ee565b80156124535780601f1061242857610100808354040283529160200191612453565b820191906000526020600020905b81548152906001019060200180831161243657829003601f168201915b5050505050905090565b606060008214156124a5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125b9565b600082905060005b600082146124d75780806124c090614251565b915050600a826124d0919061406c565b91506124ad565b60008167ffffffffffffffff8111156124f3576124f26143b6565b5b6040519080825280601f01601f1916602001820160405280156125255781602001600182028036833780820191505090505b5090505b600085146125b25760018261253e91906140f7565b9150600a8561254d919061429a565b60306125599190614016565b60f81b81838151811061256f5761256e614387565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125ab919061406c565b9450612529565b8093505050505b919050565b606060008251905060008114156125e75760405180602001604052806000815250915050612751565b600060036002836125f89190614016565b612602919061406c565b600461260e919061409d565b9050600060208261261f9190614016565b67ffffffffffffffff811115612638576126376143b6565b5b6040519080825280601f01601f19166020018201604052801561266a5781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614dec604091399050600181016020830160005b8681101561270e5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612695565b506003860660018114612728576002811461273857612743565b613d3d60f01b6002830352612743565b603d60f81b60018303525b508484525050819450505050505b919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612891838383611dd2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128d4576128cf81612b8c565b612913565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612912576129118382612bd5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129565761295181612cd5565b612995565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612994576129938282612d6b565b5b5b505050565b6129a48383612dea565b6129b160008484846129f5565b6129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e790613c0c565b60405180910390fd5b505050565b6000612a168473ffffffffffffffffffffffffffffffffffffffff16611dbf565b15612b7f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a3f611f25565b8786866040518563ffffffff1660e01b8152600401612a619493929190613b21565b602060405180830381600087803b158015612a7b57600080fd5b505af1925050508015612aac57506040513d601f19601f82011682018060405250810190612aa99190613490565b60015b612b2f573d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b50600081511415612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e90613c0c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b84565b600190505b949350505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612be2846111aa565b612bec91906140f7565b9050600060086000848152602001908152602001600020549050818114612c64576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612ce991906140f7565b90506000600a6000848152602001908152602001600020549050600060098381548110612d1957612d18614387565b5b90600052602060002001549050600a6000858152602001908152602001600020600090556009805480612d4f57612d4e614358565b5b6001900381819060005260206000200160009055905550505050565b6000612d76836111aa565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5190613d4c565b60405180910390fd5b612e6381611eb9565b15612ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9a90613c4c565b60405180910390fd5b612eaf60008383612886565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eff9190614016565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612fc4906141ee565b90600052602060002090601f016020900481019282612fe6576000855561302d565b82601f10612fff57805160ff191683800117855561302d565b8280016001018555821561302d579182015b8281111561302c578251825591602001919060010190613011565b5b50905061303a919061303e565b5090565b5b8082111561305757600081600090555060010161303f565b5090565b600061306e61306984613f0c565b613ee7565b90508083825260208201905082856020860282011115613091576130906143ea565b5b60005b858110156130c157816130a7888261314f565b845260208401935060208301925050600181019050613094565b5050509392505050565b60006130de6130d984613f38565b613ee7565b9050828152602081018484840111156130fa576130f96143ef565b5b6131058482856141ac565b509392505050565b600061312061311b84613f69565b613ee7565b90508281526020810184848401111561313c5761313b6143ef565b5b6131478482856141ac565b509392505050565b60008135905061315e81614d78565b92915050565b600082601f830112613179576131786143e5565b5b813561318984826020860161305b565b91505092915050565b6000813590506131a181614d8f565b92915050565b6000813590506131b681614da6565b92915050565b6000815190506131cb81614da6565b92915050565b600082601f8301126131e6576131e56143e5565b5b81356131f68482602086016130cb565b91505092915050565b600082601f830112613214576132136143e5565b5b813561322484826020860161310d565b91505092915050565b60008135905061323c81614dbd565b92915050565b60008135905061325181614dd4565b92915050565b60006020828403121561326d5761326c6143f9565b5b600061327b8482850161314f565b91505092915050565b6000806040838503121561329b5761329a6143f9565b5b60006132a98582860161314f565b92505060206132ba8582860161314f565b9150509250929050565b6000806000606084860312156132dd576132dc6143f9565b5b60006132eb8682870161314f565b93505060206132fc8682870161314f565b925050604061330d8682870161322d565b9150509250925092565b60008060008060808587031215613331576133306143f9565b5b600061333f8782880161314f565b94505060206133508782880161314f565b93505060406133618782880161322d565b925050606085013567ffffffffffffffff811115613382576133816143f4565b5b61338e878288016131d1565b91505092959194509250565b600080604083850312156133b1576133b06143f9565b5b60006133bf8582860161314f565b92505060206133d085828601613192565b9150509250929050565b600080604083850312156133f1576133f06143f9565b5b60006133ff8582860161314f565b92505060206134108582860161322d565b9150509250929050565b6000602082840312156134305761342f6143f9565b5b600082013567ffffffffffffffff81111561344e5761344d6143f4565b5b61345a84828501613164565b91505092915050565b600060208284031215613479576134786143f9565b5b6000613487848285016131a7565b91505092915050565b6000602082840312156134a6576134a56143f9565b5b60006134b4848285016131bc565b91505092915050565b6000602082840312156134d3576134d26143f9565b5b600082013567ffffffffffffffff8111156134f1576134f06143f4565b5b6134fd848285016131ff565b91505092915050565b60006020828403121561351c5761351b6143f9565b5b600061352a8482850161322d565b91505092915050565b600060208284031215613549576135486143f9565b5b600061355784828501613242565b91505092915050565b600061356c8383613a6d565b60208301905092915050565b6135818161412b565b82525050565b600061359282613faa565b61359c8185613fd8565b93506135a783613f9a565b8060005b838110156135d85781516135bf8882613560565b97506135ca83613fcb565b9250506001810190506135ab565b5085935050505092915050565b6135ee8161413d565b82525050565b60006135ff82613fb5565b6136098185613fe9565b93506136198185602086016141bb565b613622816143fe565b840191505092915050565b600061363882613fc0565b6136428185613ffa565b93506136528185602086016141bb565b61365b816143fe565b840191505092915050565b600061367182613fc0565b61367b818561400b565b935061368b8185602086016141bb565b80840191505092915050565b60006136a460508361400b565b91506136af8261440f565b605082019050919050565b60006136c7603383613ffa565b91506136d282614484565b604082019050919050565b60006136ea602b83613ffa565b91506136f5826144d3565b604082019050919050565b600061370d603283613ffa565b915061371882614522565b604082019050919050565b6000613730602683613ffa565b915061373b82614571565b604082019050919050565b60006137546101c88361400b565b915061375f826145c0565b6101c882019050919050565b6000613778601c83613ffa565b915061378382614804565b602082019050919050565b600061379b602483613ffa565b91506137a68261482d565b604082019050919050565b60006137be601983613ffa565b91506137c98261487c565b602082019050919050565b60006137e1602c83613ffa565b91506137ec826148a5565b604082019050919050565b6000613804603883613ffa565b915061380f826148f4565b604082019050919050565b6000613827602a83613ffa565b915061383282614943565b604082019050919050565b600061384a602983613ffa565b915061385582614992565b604082019050919050565b600061386d601d83613ffa565b9150613878826149e1565b602082019050919050565b6000613890602083613ffa565b915061389b82614a0a565b602082019050919050565b60006138b3600883613ffa565b91506138be82614a33565b602082019050919050565b60006138d6602183613ffa565b91506138e182614a5c565b604082019050919050565b60006138f9602c83613ffa565b915061390482614aab565b604082019050919050565b600061391c60058361400b565b915061392782614afa565b600582019050919050565b600061393f602083613ffa565b915061394a82614b23565b602082019050919050565b6000613962602683613ffa565b915061396d82614b4c565b604082019050919050565b6000613985602983613ffa565b915061399082614b9b565b604082019050919050565b60006139a8602f83613ffa565b91506139b382614bea565b604082019050919050565b60006139cb602183613ffa565b91506139d682614c39565b604082019050919050565b60006139ee601e83613ffa565b91506139f982614c88565b602082019050919050565b6000613a11601d8361400b565b9150613a1c82614cb1565b601d82019050919050565b6000613a34603183613ffa565b9150613a3f82614cda565b604082019050919050565b6000613a57602c83613ffa565b9150613a6282614d29565b604082019050919050565b613a7681614195565b82525050565b613a8581614195565b82525050565b6000613a978285613666565b9150613aa38284613666565b9150613aae8261390f565b91508190509392505050565b6000613ac582613697565b9150819050919050565b6000613ada82613746565b9150819050919050565b6000613aef82613a04565b9150613afb8284613666565b915081905092915050565b6000602082019050613b1b6000830184613578565b92915050565b6000608082019050613b366000830187613578565b613b436020830186613578565b613b506040830185613a7c565b8181036060830152613b6281846135f4565b905095945050505050565b60006020820190508181036000830152613b878184613587565b905092915050565b6000602082019050613ba460008301846135e5565b92915050565b60006020820190508181036000830152613bc4818461362d565b905092915050565b60006020820190508181036000830152613be5816136ba565b9050919050565b60006020820190508181036000830152613c05816136dd565b9050919050565b60006020820190508181036000830152613c2581613700565b9050919050565b60006020820190508181036000830152613c4581613723565b9050919050565b60006020820190508181036000830152613c658161376b565b9050919050565b60006020820190508181036000830152613c858161378e565b9050919050565b60006020820190508181036000830152613ca5816137b1565b9050919050565b60006020820190508181036000830152613cc5816137d4565b9050919050565b60006020820190508181036000830152613ce5816137f7565b9050919050565b60006020820190508181036000830152613d058161381a565b9050919050565b60006020820190508181036000830152613d258161383d565b9050919050565b60006020820190508181036000830152613d4581613860565b9050919050565b60006020820190508181036000830152613d6581613883565b9050919050565b60006020820190508181036000830152613d85816138a6565b9050919050565b60006020820190508181036000830152613da5816138c9565b9050919050565b60006020820190508181036000830152613dc5816138ec565b9050919050565b60006020820190508181036000830152613de581613932565b9050919050565b60006020820190508181036000830152613e0581613955565b9050919050565b60006020820190508181036000830152613e2581613978565b9050919050565b60006020820190508181036000830152613e458161399b565b9050919050565b60006020820190508181036000830152613e65816139be565b9050919050565b60006020820190508181036000830152613e85816139e1565b9050919050565b60006020820190508181036000830152613ea581613a27565b9050919050565b60006020820190508181036000830152613ec581613a4a565b9050919050565b6000602082019050613ee16000830184613a7c565b92915050565b6000613ef1613f02565b9050613efd8282614220565b919050565b6000604051905090565b600067ffffffffffffffff821115613f2757613f266143b6565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f5357613f526143b6565b5b613f5c826143fe565b9050602081019050919050565b600067ffffffffffffffff821115613f8457613f836143b6565b5b613f8d826143fe565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061402182614195565b915061402c83614195565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614061576140606142cb565b5b828201905092915050565b600061407782614195565b915061408283614195565b925082614092576140916142fa565b5b828204905092915050565b60006140a882614195565b91506140b383614195565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140ec576140eb6142cb565b5b828202905092915050565b600061410282614195565b915061410d83614195565b9250828210156141205761411f6142cb565b5b828203905092915050565b600061413682614175565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156141d95780820151818401526020810190506141be565b838111156141e8576000848401525b50505050565b6000600282049050600182168061420657607f821691505b6020821081141561421a57614219614329565b5b50919050565b614229826143fe565b810181811067ffffffffffffffff82111715614248576142476143b6565b5b80604052505050565b600061425c82614195565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561428f5761428e6142cb565b5b600182019050919050565b60006142a582614195565b91506142b083614195565b9250826142c0576142bf6142fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f69706660008201527f732f516d6563596b667458643948784a78586d7a796871666a434a427773427260208201527f6853537943454b343754586f4771647600000000000000000000000000000000604082015250565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f7b226e616d65223a2022476f6f6466656c6c6170657320222c2022646573637260008201527f697074696f6e223a2022496e737069726564206279207468652061776172642060208201527f77696e6e696e672066696c6d2022476f6f6446656c6c617322202c204f75722060408201527f636f6c6c656374696f6e206f6620322c3030302b2022476f6f6446656c6c617060608201527f6522204e4654732061726520756e6971756520696e207468656972206f776e2060808201527f72696768742e204120636f6d6d756e69747920666f63757365642070726f6a6560a08201527f6374207769746820747261697473202620636861726163746572207175616c6960c08201527f7469657320696e7370697265642066726f6d20626f746820424159432026207460e08201527f68652066696c6d2e204561636820476f6f6446656c6c61706520697320756e696101008201527f717565202620616c676f726974686d6963616c6c792067656e657261746564206101208201527f66726f6d206f766572203630207472616974732e20546869732066616d696c796101408201527f206f6620776973652067757973206973206c6f6f6b696e6720746f2067726f776101608201527f2e2e20616e6420417320666172206261636b20617320492063616e2072656d656101808201527f6d6265722c204920616c776179732077616e74656420746f20626520612067616101a08201527f6e6773746572227d0000000000000000000000000000000000000000000000006101c082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f536f72727920796f7520617265206e6f74207768697465206c69737465640000600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614d818161412b565b8114614d8c57600080fd5b50565b614d988161413d565b8114614da357600080fd5b50565b614daf81614149565b8114614dba57600080fd5b50565b614dc681614195565b8114614dd157600080fd5b50565b614ddd8161419f565b8114614de857600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220a312be41e730102a96881d667caf97fbb830b41a4b81d67d6ec9a75276e7575b64736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d545676364234716b3743695a37356134795a4431544566503670683341424b4d4b57695677476b32554471772f

Deployed Bytecode

0x6080604052600436106102305760003560e01c8063743976a01161012e578063a475b5dd116100ab578063e640cf7d1161006f578063e640cf7d14610854578063e75722301461087f578063e8a3d485146108bc578063e985e9c5146108e7578063f2fde38b1461092457610230565b8063a475b5dd1461075b578063b88d4fde14610786578063c166d13d146107af578063c87b56dd146107ec578063db4568e21461082957610230565b806395d89b41116100f257806395d89b41146106975780639d38fd21146106c2578063a035b1fe146106eb578063a0712d6814610716578063a22cb4651461073257610230565b8063743976a0146105c457806376645315146105ef5780638462151c146106065780638da5cb5b1461064357806391b7f5ed1461066e57610230565b80633ccfd60b116101bc5780636352211e116101805780636352211e146104b957806367316b3f146104f65780636f302ef71461051f57806370a082311461054a57806373cf68691461058757610230565b80633ccfd60b146103e857806342842e0e146103ff5780634e69d560146104285780634f6ccce71461045357806355f804b31461049057610230565b806318160ddd1161020357806318160ddd14610303578063200d2ed21461032e57806323b872dd146103595780632e49d78b146103825780632f745c59146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613463565b61094d565b6040516102699190613b8f565b60405180910390f35b34801561027e57600080fd5b506102876109c7565b6040516102949190613baa565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613506565b610a59565b6040516102d19190613b06565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906133da565b610ade565b005b34801561030f57600080fd5b50610318610bf6565b6040516103259190613ecc565b60405180910390f35b34801561033a57600080fd5b50610343610c03565b6040516103509190613ecc565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906132c4565b610c09565b005b34801561038e57600080fd5b506103a960048036038101906103a49190613533565b610c69565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906133da565b610cf2565b6040516103df9190613ecc565b60405180910390f35b3480156103f457600080fd5b506103fd610d97565b005b34801561040b57600080fd5b50610426600480360381019061042191906132c4565b610e62565b005b34801561043457600080fd5b5061043d610e82565b60405161044a9190613ecc565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190613506565b610e8c565b6040516104879190613ecc565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b291906134bd565b610efd565b005b3480156104c557600080fd5b506104e060048036038101906104db9190613506565b610f93565b6040516104ed9190613b06565b60405180910390f35b34801561050257600080fd5b5061051d6004803603810190610518919061341a565b611045565b005b34801561052b57600080fd5b50610534611156565b6040516105419190613b8f565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190613257565b6111aa565b60405161057e9190613ecc565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a99190613257565b611262565b6040516105bb9190613b8f565b60405180910390f35b3480156105d057600080fd5b506105d96112b8565b6040516105e69190613baa565b60405180910390f35b3480156105fb57600080fd5b50610604611346565b005b34801561061257600080fd5b5061062d60048036038101906106289190613257565b6113ee565b60405161063a9190613b6d565b60405180910390f35b34801561064f57600080fd5b5061065861149c565b6040516106659190613b06565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190613506565b6114c6565b005b3480156106a357600080fd5b506106ac61154c565b6040516106b99190613baa565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190613506565b6115de565b005b3480156106f757600080fd5b50610700611664565b60405161070d9190613ecc565b60405180910390f35b610730600480360381019061072b9190613506565b61166a565b005b34801561073e57600080fd5b506107596004803603810190610754919061339a565b6118c2565b005b34801561076757600080fd5b50610770611a43565b60405161077d9190613b8f565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190613317565b611a56565b005b3480156107bb57600080fd5b506107d660048036038101906107d19190613257565b611ab8565b6040516107e39190613b8f565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190613506565b611ad8565b6040516108209190613baa565b60405180910390f35b34801561083557600080fd5b5061083e611bbb565b60405161084b9190613ecc565b60405180910390f35b34801561086057600080fd5b50610869611bc1565b6040516108769190613ecc565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a19190613506565b611bc7565b6040516108b39190613ecc565b60405180910390f35b3480156108c857600080fd5b506108d1611bde565b6040516108de9190613baa565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190613284565b611c33565b60405161091b9190613b8f565b60405180910390f35b34801561093057600080fd5b5061094b60048036038101906109469190613257565b611cc7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c057506109bf82611dd7565b5b9050919050565b6060600080546109d6906141ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610a02906141ee565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b6000610a6482611eb9565b610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a90613dac565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae982610f93565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613e4c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b79611f25565b73ffffffffffffffffffffffffffffffffffffffff161480610ba85750610ba781610ba2611f25565b611c33565b5b610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90613ccc565b60405180910390fd5b610bf18383611f2d565b505050565b6000600980549050905090565b600e5481565b610c1a610c14611f25565b82611fe6565b610c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5090613e8c565b60405180910390fd5b610c648383836120c4565b505050565b610c71611f25565b73ffffffffffffffffffffffffffffffffffffffff16610c8f61149c565b73ffffffffffffffffffffffffffffffffffffffff1614610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc90613dcc565b60405180910390fd5b8060ff16600e8190555050565b6000610cfd836111aa565b8210610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3590613bec565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d9f611f25565b73ffffffffffffffffffffffffffffffffffffffff16610dbd61149c565b73ffffffffffffffffffffffffffffffffffffffff1614610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90613dcc565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e5e573d6000803e3d6000fd5b5050565b610e7d83838360405180602001604052806000815250611a56565b505050565b6000600e54905090565b6000610e96610bf6565b8210610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90613eac565b60405180910390fd5b60098281548110610eeb57610eea614387565b5b90600052602060002001549050919050565b610f05611f25565b73ffffffffffffffffffffffffffffffffffffffff16610f2361149c565b73ffffffffffffffffffffffffffffffffffffffff1614610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090613dcc565b60405180910390fd5b8060069080519060200190610f8f929190612fb8565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390613d0c565b60405180910390fd5b80915050919050565b61104d611f25565b73ffffffffffffffffffffffffffffffffffffffff1661106b61149c565b73ffffffffffffffffffffffffffffffffffffffff16146110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890613dcc565b60405180910390fd5b60005b8151811015611152576001601060008484815181106110e6576110e5614387565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061114a90614251565b9150506110c4565b5050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290613cec565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600680546112c5906141ee565b80601f01602080910402602001604051908101604052809291908181526020018280546112f1906141ee565b801561133e5780601f106113135761010080835404028352916020019161133e565b820191906000526020600020905b81548152906001019060200180831161132157829003601f168201915b505050505081565b61134e611f25565b73ffffffffffffffffffffffffffffffffffffffff1661136c61149c565b73ffffffffffffffffffffffffffffffffffffffff16146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990613dcc565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b606060006113fb836111aa565b905060008167ffffffffffffffff811115611419576114186143b6565b5b6040519080825280602002602001820160405280156114475781602001602082028036833780820191505090505b50905060005b828110156114915761145f8582610cf2565b82828151811061147257611471614387565b5b602002602001018181525050808061148990614251565b91505061144d565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ce611f25565b73ffffffffffffffffffffffffffffffffffffffff166114ec61149c565b73ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613dcc565b60405180910390fd5b80600d8190555050565b60606001805461155b906141ee565b80601f0160208091040260200160405190810160405280929190818152602001828054611587906141ee565b80156115d45780601f106115a9576101008083540402835291602001916115d4565b820191906000526020600020905b8154815290600101906020018083116115b757829003601f168201915b5050505050905090565b6115e6611f25565b73ffffffffffffffffffffffffffffffffffffffff1661160461149c565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165190613dcc565b60405180910390fd5b80600c8190555050565b600d5481565b6107d0611675610bf6565b106116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90613d6c565b60405180910390fd5b60286107d06116c491906140f7565b816116cd610bf6565b6116d79190614016565b1115611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f90613dec565b60405180910390fd5b6000811161175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290613bcc565b60405180910390fd5b600c548111156117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790613d8c565b60405180910390fd5b346117b682600d5461232090919063ffffffff16565b146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90613d2c565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061185057506002600e54145b61188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690613e6c565b60405180910390fd5b60005b818110156118be576118ab336118a6612336565b612351565b80806118b690614251565b915050611892565b5050565b6118ca611f25565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90613c8c565b60405180910390fd5b8060056000611945611f25565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119f2611f25565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a379190613b8f565b60405180910390a35050565b600f60009054906101000a900460ff1681565b611a67611a61611f25565b83611fe6565b611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90613e8c565b60405180910390fd5b611ab28484848461236f565b50505050565b60106020528060005260406000206000915054906101000a900460ff1681565b6060611ae382611eb9565b611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1990613e2c565b60405180910390fd5b6000611b2c6123cb565b9050600081511115611ba257600f60009054906101000a900460ff16611b6f57604051602001611b5b90613aba565b604051602081830303815290604052611b9a565b80611b798461245d565b604051602001611b8a929190613a8b565b6040516020818303038152906040525b915050611bb6565b604051806020016040528060008152509150505b919050565b6107d081565b600c5481565b6000600d5482611bd7919061409d565b9050919050565b60606000611c08604051602001611bf490613acf565b6040516020818303038152906040526125be565b905080604051602001611c1b9190613ae4565b60405160208183030381529060405290508091505090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ccf611f25565b73ffffffffffffffffffffffffffffffffffffffff16611ced61149c565b73ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613dcc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90613c2c565b60405180910390fd5b611dbc81612756565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ea257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611eb25750611eb18261281c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fa083610f93565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ff182611eb9565b612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790613cac565b60405180910390fd5b600061203b83610f93565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120aa57508373ffffffffffffffffffffffffffffffffffffffff1661209284610a59565b73ffffffffffffffffffffffffffffffffffffffff16145b806120bb57506120ba8185611c33565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120e482610f93565b73ffffffffffffffffffffffffffffffffffffffff161461213a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213190613e0c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190613c6c565b60405180910390fd5b6121b5838383612886565b6121c0600082611f2d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221091906140f7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122679190614016565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000818361232e919061409d565b905092915050565b60006001612342610bf6565b61234c9190614016565b905090565b61236b82826040518060200160405280600081525061299a565b5050565b61237a8484846120c4565b612386848484846129f5565b6123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc90613c0c565b60405180910390fd5b50505050565b6060600680546123da906141ee565b80601f0160208091040260200160405190810160405280929190818152602001828054612406906141ee565b80156124535780601f1061242857610100808354040283529160200191612453565b820191906000526020600020905b81548152906001019060200180831161243657829003601f168201915b5050505050905090565b606060008214156124a5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125b9565b600082905060005b600082146124d75780806124c090614251565b915050600a826124d0919061406c565b91506124ad565b60008167ffffffffffffffff8111156124f3576124f26143b6565b5b6040519080825280601f01601f1916602001820160405280156125255781602001600182028036833780820191505090505b5090505b600085146125b25760018261253e91906140f7565b9150600a8561254d919061429a565b60306125599190614016565b60f81b81838151811061256f5761256e614387565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125ab919061406c565b9450612529565b8093505050505b919050565b606060008251905060008114156125e75760405180602001604052806000815250915050612751565b600060036002836125f89190614016565b612602919061406c565b600461260e919061409d565b9050600060208261261f9190614016565b67ffffffffffffffff811115612638576126376143b6565b5b6040519080825280601f01601f19166020018201604052801561266a5781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614dec604091399050600181016020830160005b8681101561270e5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612695565b506003860660018114612728576002811461273857612743565b613d3d60f01b6002830352612743565b603d60f81b60018303525b508484525050819450505050505b919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612891838383611dd2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128d4576128cf81612b8c565b612913565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612912576129118382612bd5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129565761295181612cd5565b612995565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612994576129938282612d6b565b5b5b505050565b6129a48383612dea565b6129b160008484846129f5565b6129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e790613c0c565b60405180910390fd5b505050565b6000612a168473ffffffffffffffffffffffffffffffffffffffff16611dbf565b15612b7f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a3f611f25565b8786866040518563ffffffff1660e01b8152600401612a619493929190613b21565b602060405180830381600087803b158015612a7b57600080fd5b505af1925050508015612aac57506040513d601f19601f82011682018060405250810190612aa99190613490565b60015b612b2f573d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b50600081511415612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e90613c0c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b84565b600190505b949350505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612be2846111aa565b612bec91906140f7565b9050600060086000848152602001908152602001600020549050818114612c64576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612ce991906140f7565b90506000600a6000848152602001908152602001600020549050600060098381548110612d1957612d18614387565b5b90600052602060002001549050600a6000858152602001908152602001600020600090556009805480612d4f57612d4e614358565b5b6001900381819060005260206000200160009055905550505050565b6000612d76836111aa565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5190613d4c565b60405180910390fd5b612e6381611eb9565b15612ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9a90613c4c565b60405180910390fd5b612eaf60008383612886565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eff9190614016565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612fc4906141ee565b90600052602060002090601f016020900481019282612fe6576000855561302d565b82601f10612fff57805160ff191683800117855561302d565b8280016001018555821561302d579182015b8281111561302c578251825591602001919060010190613011565b5b50905061303a919061303e565b5090565b5b8082111561305757600081600090555060010161303f565b5090565b600061306e61306984613f0c565b613ee7565b90508083825260208201905082856020860282011115613091576130906143ea565b5b60005b858110156130c157816130a7888261314f565b845260208401935060208301925050600181019050613094565b5050509392505050565b60006130de6130d984613f38565b613ee7565b9050828152602081018484840111156130fa576130f96143ef565b5b6131058482856141ac565b509392505050565b600061312061311b84613f69565b613ee7565b90508281526020810184848401111561313c5761313b6143ef565b5b6131478482856141ac565b509392505050565b60008135905061315e81614d78565b92915050565b600082601f830112613179576131786143e5565b5b813561318984826020860161305b565b91505092915050565b6000813590506131a181614d8f565b92915050565b6000813590506131b681614da6565b92915050565b6000815190506131cb81614da6565b92915050565b600082601f8301126131e6576131e56143e5565b5b81356131f68482602086016130cb565b91505092915050565b600082601f830112613214576132136143e5565b5b813561322484826020860161310d565b91505092915050565b60008135905061323c81614dbd565b92915050565b60008135905061325181614dd4565b92915050565b60006020828403121561326d5761326c6143f9565b5b600061327b8482850161314f565b91505092915050565b6000806040838503121561329b5761329a6143f9565b5b60006132a98582860161314f565b92505060206132ba8582860161314f565b9150509250929050565b6000806000606084860312156132dd576132dc6143f9565b5b60006132eb8682870161314f565b93505060206132fc8682870161314f565b925050604061330d8682870161322d565b9150509250925092565b60008060008060808587031215613331576133306143f9565b5b600061333f8782880161314f565b94505060206133508782880161314f565b93505060406133618782880161322d565b925050606085013567ffffffffffffffff811115613382576133816143f4565b5b61338e878288016131d1565b91505092959194509250565b600080604083850312156133b1576133b06143f9565b5b60006133bf8582860161314f565b92505060206133d085828601613192565b9150509250929050565b600080604083850312156133f1576133f06143f9565b5b60006133ff8582860161314f565b92505060206134108582860161322d565b9150509250929050565b6000602082840312156134305761342f6143f9565b5b600082013567ffffffffffffffff81111561344e5761344d6143f4565b5b61345a84828501613164565b91505092915050565b600060208284031215613479576134786143f9565b5b6000613487848285016131a7565b91505092915050565b6000602082840312156134a6576134a56143f9565b5b60006134b4848285016131bc565b91505092915050565b6000602082840312156134d3576134d26143f9565b5b600082013567ffffffffffffffff8111156134f1576134f06143f4565b5b6134fd848285016131ff565b91505092915050565b60006020828403121561351c5761351b6143f9565b5b600061352a8482850161322d565b91505092915050565b600060208284031215613549576135486143f9565b5b600061355784828501613242565b91505092915050565b600061356c8383613a6d565b60208301905092915050565b6135818161412b565b82525050565b600061359282613faa565b61359c8185613fd8565b93506135a783613f9a565b8060005b838110156135d85781516135bf8882613560565b97506135ca83613fcb565b9250506001810190506135ab565b5085935050505092915050565b6135ee8161413d565b82525050565b60006135ff82613fb5565b6136098185613fe9565b93506136198185602086016141bb565b613622816143fe565b840191505092915050565b600061363882613fc0565b6136428185613ffa565b93506136528185602086016141bb565b61365b816143fe565b840191505092915050565b600061367182613fc0565b61367b818561400b565b935061368b8185602086016141bb565b80840191505092915050565b60006136a460508361400b565b91506136af8261440f565b605082019050919050565b60006136c7603383613ffa565b91506136d282614484565b604082019050919050565b60006136ea602b83613ffa565b91506136f5826144d3565b604082019050919050565b600061370d603283613ffa565b915061371882614522565b604082019050919050565b6000613730602683613ffa565b915061373b82614571565b604082019050919050565b60006137546101c88361400b565b915061375f826145c0565b6101c882019050919050565b6000613778601c83613ffa565b915061378382614804565b602082019050919050565b600061379b602483613ffa565b91506137a68261482d565b604082019050919050565b60006137be601983613ffa565b91506137c98261487c565b602082019050919050565b60006137e1602c83613ffa565b91506137ec826148a5565b604082019050919050565b6000613804603883613ffa565b915061380f826148f4565b604082019050919050565b6000613827602a83613ffa565b915061383282614943565b604082019050919050565b600061384a602983613ffa565b915061385582614992565b604082019050919050565b600061386d601d83613ffa565b9150613878826149e1565b602082019050919050565b6000613890602083613ffa565b915061389b82614a0a565b602082019050919050565b60006138b3600883613ffa565b91506138be82614a33565b602082019050919050565b60006138d6602183613ffa565b91506138e182614a5c565b604082019050919050565b60006138f9602c83613ffa565b915061390482614aab565b604082019050919050565b600061391c60058361400b565b915061392782614afa565b600582019050919050565b600061393f602083613ffa565b915061394a82614b23565b602082019050919050565b6000613962602683613ffa565b915061396d82614b4c565b604082019050919050565b6000613985602983613ffa565b915061399082614b9b565b604082019050919050565b60006139a8602f83613ffa565b91506139b382614bea565b604082019050919050565b60006139cb602183613ffa565b91506139d682614c39565b604082019050919050565b60006139ee601e83613ffa565b91506139f982614c88565b602082019050919050565b6000613a11601d8361400b565b9150613a1c82614cb1565b601d82019050919050565b6000613a34603183613ffa565b9150613a3f82614cda565b604082019050919050565b6000613a57602c83613ffa565b9150613a6282614d29565b604082019050919050565b613a7681614195565b82525050565b613a8581614195565b82525050565b6000613a978285613666565b9150613aa38284613666565b9150613aae8261390f565b91508190509392505050565b6000613ac582613697565b9150819050919050565b6000613ada82613746565b9150819050919050565b6000613aef82613a04565b9150613afb8284613666565b915081905092915050565b6000602082019050613b1b6000830184613578565b92915050565b6000608082019050613b366000830187613578565b613b436020830186613578565b613b506040830185613a7c565b8181036060830152613b6281846135f4565b905095945050505050565b60006020820190508181036000830152613b878184613587565b905092915050565b6000602082019050613ba460008301846135e5565b92915050565b60006020820190508181036000830152613bc4818461362d565b905092915050565b60006020820190508181036000830152613be5816136ba565b9050919050565b60006020820190508181036000830152613c05816136dd565b9050919050565b60006020820190508181036000830152613c2581613700565b9050919050565b60006020820190508181036000830152613c4581613723565b9050919050565b60006020820190508181036000830152613c658161376b565b9050919050565b60006020820190508181036000830152613c858161378e565b9050919050565b60006020820190508181036000830152613ca5816137b1565b9050919050565b60006020820190508181036000830152613cc5816137d4565b9050919050565b60006020820190508181036000830152613ce5816137f7565b9050919050565b60006020820190508181036000830152613d058161381a565b9050919050565b60006020820190508181036000830152613d258161383d565b9050919050565b60006020820190508181036000830152613d4581613860565b9050919050565b60006020820190508181036000830152613d6581613883565b9050919050565b60006020820190508181036000830152613d85816138a6565b9050919050565b60006020820190508181036000830152613da5816138c9565b9050919050565b60006020820190508181036000830152613dc5816138ec565b9050919050565b60006020820190508181036000830152613de581613932565b9050919050565b60006020820190508181036000830152613e0581613955565b9050919050565b60006020820190508181036000830152613e2581613978565b9050919050565b60006020820190508181036000830152613e458161399b565b9050919050565b60006020820190508181036000830152613e65816139be565b9050919050565b60006020820190508181036000830152613e85816139e1565b9050919050565b60006020820190508181036000830152613ea581613a27565b9050919050565b60006020820190508181036000830152613ec581613a4a565b9050919050565b6000602082019050613ee16000830184613a7c565b92915050565b6000613ef1613f02565b9050613efd8282614220565b919050565b6000604051905090565b600067ffffffffffffffff821115613f2757613f266143b6565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f5357613f526143b6565b5b613f5c826143fe565b9050602081019050919050565b600067ffffffffffffffff821115613f8457613f836143b6565b5b613f8d826143fe565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061402182614195565b915061402c83614195565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614061576140606142cb565b5b828201905092915050565b600061407782614195565b915061408283614195565b925082614092576140916142fa565b5b828204905092915050565b60006140a882614195565b91506140b383614195565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140ec576140eb6142cb565b5b828202905092915050565b600061410282614195565b915061410d83614195565b9250828210156141205761411f6142cb565b5b828203905092915050565b600061413682614175565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156141d95780820151818401526020810190506141be565b838111156141e8576000848401525b50505050565b6000600282049050600182168061420657607f821691505b6020821081141561421a57614219614329565b5b50919050565b614229826143fe565b810181811067ffffffffffffffff82111715614248576142476143b6565b5b80604052505050565b600061425c82614195565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561428f5761428e6142cb565b5b600182019050919050565b60006142a582614195565b91506142b083614195565b9250826142c0576142bf6142fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f69706660008201527f732f516d6563596b667458643948784a78586d7a796871666a434a427773427260208201527f6853537943454b343754586f4771647600000000000000000000000000000000604082015250565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f7b226e616d65223a2022476f6f6466656c6c6170657320222c2022646573637260008201527f697074696f6e223a2022496e737069726564206279207468652061776172642060208201527f77696e6e696e672066696c6d2022476f6f6446656c6c617322202c204f75722060408201527f636f6c6c656374696f6e206f6620322c3030302b2022476f6f6446656c6c617060608201527f6522204e4654732061726520756e6971756520696e207468656972206f776e2060808201527f72696768742e204120636f6d6d756e69747920666f63757365642070726f6a6560a08201527f6374207769746820747261697473202620636861726163746572207175616c6960c08201527f7469657320696e7370697265642066726f6d20626f746820424159432026207460e08201527f68652066696c6d2e204561636820476f6f6446656c6c61706520697320756e696101008201527f717565202620616c676f726974686d6963616c6c792067656e657261746564206101208201527f66726f6d206f766572203630207472616974732e20546869732066616d696c796101408201527f206f6620776973652067757973206973206c6f6f6b696e6720746f2067726f776101608201527f2e2e20616e6420417320666172206261636b20617320492063616e2072656d656101808201527f6d6265722c204920616c776179732077616e74656420746f20626520612067616101a08201527f6e6773746572227d0000000000000000000000000000000000000000000000006101c082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f536f72727920796f7520617265206e6f74207768697465206c69737465640000600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614d818161412b565b8114614d8c57600080fd5b50565b614d988161413d565b8114614da357600080fd5b50565b614daf81614149565b8114614dba57600080fd5b50565b614dc681614195565b8114614dd157600080fd5b50565b614ddd8161419f565b8114614de857600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220a312be41e730102a96881d667caf97fbb830b41a4b81d67d6ec9a75276e7575b64736f6c63430008070033

Deployed Bytecode Sourcemap

21248:4414:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18627:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12101:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13178:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12761:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19119:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21496:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13876:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22144:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18857:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23746:140;;;;;;;;;;;;;:::i;:::-;;14168:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22512:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19238:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21941:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11856:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24509:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24835:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11642:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24708:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11180:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22329:72;;;;;;;;;;;;;:::i;:::-;;23387:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10141:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22046:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12207:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22223:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21455:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22732:646;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13405:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21562:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14359:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21595:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24001:502;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21374:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21421:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22603:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24947:712;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13706:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10360:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18627:224;18729:4;18768:35;18753:50;;;:11;:50;;;;:90;;;;18807:36;18831:11;18807:23;:36::i;:::-;18753:90;18746:97;;18627:224;;;:::o;12101:100::-;12155:13;12188:5;12181:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12101:100;:::o;13178:221::-;13254:7;13282:16;13290:7;13282;:16::i;:::-;13274:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13367:15;:24;13383:7;13367:24;;;;;;;;;;;;;;;;;;;;;13360:31;;13178:221;;;:::o;12761:411::-;12842:13;12858:23;12873:7;12858:14;:23::i;:::-;12842:39;;12906:5;12900:11;;:2;:11;;;;12892:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13000:5;12984:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;13009:37;13026:5;13033:12;:10;:12::i;:::-;13009:16;:37::i;:::-;12984:62;12962:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;13143:21;13152:2;13156:7;13143:8;:21::i;:::-;12831:341;12761:411;;:::o;19119:113::-;19180:7;19207:10;:17;;;;19200:24;;19119:113;:::o;21496:25::-;;;;:::o;13876:286::-;14018:41;14037:12;:10;:12::i;:::-;14051:7;14018:18;:41::i;:::-;14010:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14126:28;14136:4;14142:2;14146:7;14126:9;:28::i;:::-;13876:286;;;:::o;22144:73::-;10285:12;:10;:12::i;:::-;10274:23;;:7;:5;:7::i;:::-;:23;;;10266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22208:1:::1;22199:10;;:6;:10;;;;22144:73:::0;:::o;18857:256::-;18954:7;18990:23;19007:5;18990:16;:23::i;:::-;18982:5;:31;18974:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19079:12;:19;19092:5;19079:19;;;;;;;;;;;;;;;:26;19099:5;19079:26;;;;;;;;;;;;19072:33;;18857:256;;;;:::o;23746:140::-;10285:12;:10;:12::i;:::-;10274:23;;:7;:5;:7::i;:::-;:23;;;10266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23794:12:::1;23809:21;23794:36;;23849:10;23841:28;;:37;23870:7;23841:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23783:103;23746:140::o:0;14168:185::-;14306:39;14323:4;14329:2;14333:7;14306:39;;;;;;;;;;;;:16;:39::i;:::-;14168:185;;;:::o;22512:85::-;22554:7;22581:6;;22574:13;;22512:85;:::o;19238:233::-;19313:7;19349:30;:28;:30::i;:::-;19341:5;:38;19333:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19446:10;19457:5;19446:17;;;;;;;;:::i;:::-;;;;;;;;;;19439:24;;19238:233;;;:::o;21941:97::-;10285:12;:10;:12::i;:::-;10274:23;;:7;:5;:7::i;:::-;:23;;;10266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22023:7:::1;22012:8;:18;;;;;;;;;;;;:::i;:::-;;21941:97:::0;:::o;11856:239::-;11928:7;11948:13;11964:7;:16;11972:7;11964:16;;;;;;;;;;;;;;;;;;;;;11948:32;;12016:1;11999:19;;:5;:19;;;;11991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12082:5;12075:12;;;11856:239;;;:::o;24509:193::-;10285:12;:10;:12::i;:::-;10274:23;;:7;:5;:7::i;:::-;:23;;;10266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24597:6:::1;24593:102;24609:8;:15;24607:1;:17;24593:102;;;24679:4;24645:18;:31;24664:8;24673:1;24664:11;;;;;;;;:::i;:::-;;;;;;;;24645:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;24626:3;;;;;:::i;:::-;;;;24593:102;;;;24509:193:::0;:::o;24835:106::-;24880:4;24903:18;:30;24922:10;24903:30;;;;;;;;;;;;;;;;;;;;;;;;;24896:37;;24835:106;:::o;11642:208::-;11714:7;11759:1;11742:19;;:5;:19;;;;11734:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11826:9;:16;11836:5;11826:16;;;;;;;;;;;;;;;;11819:23;;11642:208;;;:::o;24708:121::-;24770:4;24793:18;:28;24812:8;24793:28;;;;;;;;;;;;;;;;;;;;;;;;;24786:35;;24708:121;;;:::o;11180:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22329:72::-;10285:12;:10;:12::i;:::-;10274:23;;:7;:5;:7::i;:::-;:23;;;10266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22387:6:::1;;;;;;;;;;;22385:8;22377:6;;:16;;;;;;;;;;;;;;;;;;22329:72::o:0;23387:351::-;23447:16;23481:13;23497:17;23507:6;23497:9;:17::i;:::-;23481:33;;23525:23;23565:5;23551:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23525:46;;23587:13;23582:125;23614:5;23606;:13;23582:125;;;23661:34;23681:6;23689:5;23661:19;:34::i;:::-;23645:6;23652:5;23645:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;23621:7;;;;;:::i;:::-;;;;23582:125;;;;23724:6;23717:13;;;;23387:351;;;:::o;10141:87::-;10187:7;10214:6;;;;;;;;;;;10207:13;;10141:87;:::o;22046:92::-;10285:12;:10;:12::i;:::-;10274:23;;:7;:5;:7::i;:::-;:23;;;10266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22121:9:::1;22113:5;:17;;;;22046:92:::0;:::o;12207:104::-;12263:13;12296:7;12289:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12207:104;:::o;22223:100::-;10285:12;:10;:12::i;:::-;10274:23;;:7;:5;:7::i;:::-;:23;;;10266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22306:9:::1;22294:11;:21;;;;22223:100:::0;:::o;21455:33::-;;;;:::o;22732:646::-;21410:4;22445:13;:11;:13::i;:::-;:28;22437:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22851:2:::1;21410:4;22838:15;;;;:::i;:::-;22824:12;22810:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:43;;22802:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;22929:1;22914:12;:16;22906:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;23021:11;;23005:12;:27;;22997:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23115:9;23088:23;23098:12;23088:5;;:9;;:23;;;;:::i;:::-;:36;23080:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23177:18;:30;23196:10;23177:30;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;23221:1;23211:6;;:11;23177:45;23169:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;23273:6;23268:103;23289:12;23285:1;:16;23268:103;;;23323:36;23333:10;23345:13;:11;:13::i;:::-;23323:9;:36::i;:::-;23303:3;;;;;:::i;:::-;;;;23268:103;;;;22732:646:::0;:::o;13405:295::-;13520:12;:10;:12::i;:::-;13508:24;;:8;:24;;;;13500:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;13620:8;13575:18;:32;13594:12;:10;:12::i;:::-;13575:32;;;;;;;;;;;;;;;:42;13608:8;13575:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;13673:8;13644:48;;13659:12;:10;:12::i;:::-;13644:48;;;13683:8;13644:48;;;;;;:::i;:::-;;;;;;;;13405:295;;:::o;21562:26::-;;;;;;;;;;;;;:::o;14359:328::-;14534:41;14553:12;:10;:12::i;:::-;14567:7;14534:18;:41::i;:::-;14526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14640:39;14654:4;14660:2;14664:7;14673:5;14640:13;:39::i;:::-;14359:328;;;;:::o;21595:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;24001:502::-;24066:13;24100:16;24108:7;24100;:16::i;:::-;24092:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24181:18;24202:9;:7;:9::i;:::-;24181:30;;24246:1;24231:4;24225:18;:22;24222:273;;;24270:6;;;;;;;;;;;:179;;24348:100;;;;;;;:::i;:::-;;;;;;;;;;;;;24270:179;;;24303:4;24309:18;:7;:16;:18::i;:::-;24286:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24270:179;24263:186;;;;;24222:273;24486:9;;;;;;;;;;;;;;;24001:502;;;;:::o;21374:40::-;21410:4;21374:40;:::o;21421:27::-;;;;:::o;22603:121::-;22661:7;22710:5;;22700:9;:15;;;;:::i;:::-;22693:22;;22603:121;;;:::o;24947:712::-;24991:13;25017:18;25038:510;25065:480;;;;;;;:::i;:::-;;;;;;;;;;;;;25038:13;:510::i;:::-;25017:531;;25623:4;25573:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;25559:70;;25647:4;25640:11;;;24947:712;:::o;13706:164::-;13803:4;13827:18;:25;13846:5;13827:25;;;;;;;;;;;;;;;:35;13853:8;13827:35;;;;;;;;;;;;;;;;;;;;;;;;;13820:42;;13706:164;;;;:::o;10360:192::-;10285:12;:10;:12::i;:::-;10274:23;;:7;:5;:7::i;:::-;:23;;;10266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10469:1:::1;10449:22;;:8;:22;;;;10441:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10525:19;10535:8;10525:9;:19::i;:::-;10360:192:::0;:::o;3863:198::-;3923:4;3942:12;4009:7;3997:20;3989:28;;4052:1;4045:4;:8;4038:15;;;3863:198;;;:::o;18191:126::-;;;;:::o;11331:305::-;11433:4;11485:25;11470:40;;;:11;:40;;;;:105;;;;11542:33;11527:48;;;:11;:48;;;;11470:105;:158;;;;11592:36;11616:11;11592:23;:36::i;:::-;11470:158;11450:178;;11331:305;;;:::o;15014:127::-;15079:4;15131:1;15103:30;;:7;:16;15111:7;15103:16;;;;;;;;;;;;;;;;;;;;;:30;;;;15096:37;;15014:127;;;:::o;9604:98::-;9657:7;9684:10;9677:17;;9604:98;:::o;17202:174::-;17304:2;17277:15;:24;17293:7;17277:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;17360:7;17356:2;17322:46;;17331:23;17346:7;17331:14;:23::i;:::-;17322:46;;;;;;;;;;;;17202:174;;:::o;15147:348::-;15240:4;15265:16;15273:7;15265;:16::i;:::-;15257:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15341:13;15357:23;15372:7;15357:14;:23::i;:::-;15341:39;;15410:5;15399:16;;:7;:16;;;:51;;;;15443:7;15419:31;;:20;15431:7;15419:11;:20::i;:::-;:31;;;15399:51;:87;;;;15454:32;15471:5;15478:7;15454:16;:32::i;:::-;15399:87;15391:96;;;15147:348;;;;:::o;16670:526::-;16829:4;16802:31;;:23;16817:7;16802:14;:23::i;:::-;:31;;;16794:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16912:1;16898:16;;:2;:16;;;;16890:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;16968:39;16989:4;16995:2;16999:7;16968:20;:39::i;:::-;17020:29;17037:1;17041:7;17020:8;:29::i;:::-;17081:1;17062:9;:15;17072:4;17062:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;17110:1;17093:9;:13;17103:2;17093:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;17141:2;17122:7;:16;17130:7;17122:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;17180:7;17176:2;17161:27;;17170:4;17161:27;;;;;;;;;;;;16670:526;;;:::o;1363:98::-;1421:7;1452:1;1448;:5;;;;:::i;:::-;1441:12;;1363:98;;;;:::o;23892:103::-;23937:4;23986:1;23966:19;:17;:19::i;:::-;:21;;;;:::i;:::-;23959:28;;23892:103;:::o;15501:110::-;15577:26;15587:2;15591:7;15577:26;;;;;;;;;;;;:9;:26::i;:::-;15501:110;;:::o;14693:315::-;14850:28;14860:4;14866:2;14870:7;14850:9;:28::i;:::-;14897:48;14920:4;14926:2;14930:7;14939:5;14897:22;:48::i;:::-;14889:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;14693:315;;;;:::o;12656:99::-;12706:13;12739:8;12732:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12656:99;:::o;2498:534::-;2554:13;2595:1;2586:5;:10;2582:53;;;2613:10;;;;;;;;;;;;;;;;;;;;;2582:53;2645:12;2660:5;2645:20;;2676:14;2701:78;2716:1;2708:4;:9;2701:78;;2734:8;;;;;:::i;:::-;;;;2765:2;2757:10;;;;;:::i;:::-;;;2701:78;;;2789:19;2821:6;2811:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2789:39;;2839:154;2855:1;2846:5;:10;2839:154;;2883:1;2873:11;;;;;:::i;:::-;;;2950:2;2942:5;:10;;;;:::i;:::-;2929:2;:24;;;;:::i;:::-;2916:39;;2899:6;2906;2899:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2979:2;2970:11;;;;;:::i;:::-;;;2839:154;;;3017:6;3003:21;;;;;2498:534;;;;:::o;25858:1607::-;25916:13;25942:11;25956:4;:11;25942:25;;25989:1;25982:3;:8;25978:23;;;25992:9;;;;;;;;;;;;;;;;;25978:23;26053:18;26091:1;26086;26080:3;:7;;;;:::i;:::-;26079:13;;;;:::i;:::-;26074:1;:19;;;;:::i;:::-;26053:40;;26151:19;26196:2;26183:10;:15;;;;:::i;:::-;26173:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26151:48;;26212:18;26233:5;;;;;;;;;;;;;;;;;26212:26;;26302:1;26295:5;26291:13;26347:2;26339:6;26335:15;26398:1;26366:777;26421:3;26418:1;26415:10;26366:777;;;26476:1;26473;26469:9;26464:14;;26534:8;26529:1;26523:4;26519:12;26513:19;26509:34;26614:4;26606:5;26602:2;26598:14;26594:25;26584:8;26580:40;26574:47;26653:3;26650:1;26646:11;26639:18;;26744:4;26735;26727:5;26723:2;26719:14;26715:25;26705:8;26701:40;26695:47;26691:58;26686:3;26682:68;26675:75;;26782:3;26779:1;26775:11;26768:18;;26872:4;26863;26855:5;26852:1;26848:13;26844:24;26834:8;26830:39;26824:46;26820:57;26815:3;26811:67;26804:74;;26910:3;26907:1;26903:11;26896:18;;26992:4;26983;26976:5;26972:16;26962:8;26958:31;26952:38;26948:49;26943:3;26939:59;26932:66;;27032:3;27027;27023:13;27016:20;;27074:3;27063:9;27056:22;27126:1;27115:9;27111:17;27098:30;;26445:698;;26366:777;;;26370:44;27175:1;27170:3;27166:11;27196:1;27191:84;;;;27294:1;27289:82;;;;27159:212;;27191:84;27252:6;27247:3;27243:16;27239:1;27228:9;27224:17;27217:43;27191:84;;27289:82;27350:4;27345:3;27341:14;27337:1;27326:9;27322:17;27315:41;27159:212;;27402:10;27394:6;27387:26;26260:1164;;27450:6;27436:21;;;;;;25858:1607;;;;:::o;10560:173::-;10616:16;10635:6;;;;;;;;;;;10616:25;;10661:8;10652:6;;:17;;;;;;;;;;;;;;;;;;10716:8;10685:40;;10706:8;10685:40;;;;;;;;;;;;10605:128;10560:173;:::o;7716:157::-;7801:4;7840:25;7825:40;;;:11;:40;;;;7818:47;;7716:157;;;:::o;19477:589::-;19621:45;19648:4;19654:2;19658:7;19621:26;:45::i;:::-;19699:1;19683:18;;:4;:18;;;19679:187;;;19718:40;19750:7;19718:31;:40::i;:::-;19679:187;;;19788:2;19780:10;;:4;:10;;;19776:90;;19807:47;19840:4;19846:7;19807:32;:47::i;:::-;19776:90;19679:187;19894:1;19880:16;;:2;:16;;;19876:183;;;19913:45;19950:7;19913:36;:45::i;:::-;19876:183;;;19986:4;19980:10;;:2;:10;;;19976:83;;20007:40;20035:2;20039:7;20007:27;:40::i;:::-;19976:83;19876:183;19477:589;;;:::o;15617:321::-;15747:18;15753:2;15757:7;15747:5;:18::i;:::-;15798:54;15829:1;15833:2;15837:7;15846:5;15798:22;:54::i;:::-;15776:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;15617:321;;;:::o;17382:803::-;17537:4;17558:15;:2;:13;;;:15::i;:::-;17554:624;;;17610:2;17594:36;;;17631:12;:10;:12::i;:::-;17645:4;17651:7;17660:5;17594:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;17590:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17857:1;17840:6;:13;:18;17836:272;;;17883:60;;;;;;;;;;:::i;:::-;;;;;;;;17836:272;18058:6;18052:13;18043:6;18039:2;18035:15;18028:38;17590:533;17727:45;;;17717:55;;;:6;:55;;;;17710:62;;;;;17554:624;18162:4;18155:11;;17382:803;;;;;;;:::o;20299:164::-;20403:10;:17;;;;20376:15;:24;20392:7;20376:24;;;;;;;;;;;:44;;;;20431:10;20447:7;20431:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20299:164;:::o;20469:440::-;20563:22;20613:1;20588:22;20605:4;20588:16;:22::i;:::-;:26;;;;:::i;:::-;20563:51;;20625:18;20646:17;:26;20664:7;20646:26;;;;;;;;;;;;20625:47;;20703:14;20689:10;:28;20685:119;;20734:19;20756:12;:18;20769:4;20756:18;;;;;;;;;;;;;;;:34;20775:14;20756:34;;;;;;;;;;;;20734:56;;20719:85;20685:119;20823:17;:26;20841:7;20823:26;;;;;;;;;;;20816:33;;;20867:12;:18;20880:4;20867:18;;;;;;;;;;;;;;;:34;20886:14;20867:34;;;;;;;;;;;20860:41;;;20550:359;;20469:440;;:::o;20915:328::-;20999:22;21044:1;21024:10;:17;;;;:21;;;;:::i;:::-;20999:46;;21056:18;21077:15;:24;21093:7;21077:24;;;;;;;;;;;;21056:45;;21114:19;21136:10;21147:14;21136:26;;;;;;;;:::i;:::-;;;;;;;;;;21114:48;;21184:15;:24;21200:7;21184:24;;;;;;;;;;;21177:31;;;21219:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20986:257;;;20915:328;:::o;20072:221::-;20157:14;20174:20;20191:2;20174:16;:20::i;:::-;20157:37;;20232:7;20205:12;:16;20218:2;20205:16;;;;;;;;;;;;;;;:24;20222:6;20205:24;;;;;;;;;;;:34;;;;20279:6;20250:17;:26;20268:7;20250:26;;;;;;;;;;;:35;;;;20146:147;20072:221;;:::o;15944:382::-;16038:1;16024:16;;:2;:16;;;;16016:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16097:16;16105:7;16097;:16::i;:::-;16096:17;16088:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16159:45;16188:1;16192:2;16196:7;16159:20;:45::i;:::-;16234:1;16217:9;:13;16227:2;16217:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;16265:2;16246:7;:16;16254:7;16246:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;16310:7;16306:2;16285:33;;16302:1;16285:33;;;;;;;;;;;;15944:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:135::-;3459:5;3497:6;3484:20;3475:29;;3513:31;3538:5;3513:31;:::i;:::-;3415:135;;;;:::o;3556:329::-;3615:6;3664:2;3652:9;3643:7;3639:23;3635:32;3632:119;;;3670:79;;:::i;:::-;3632:119;3790:1;3815:53;3860:7;3851:6;3840:9;3836:22;3815:53;:::i;:::-;3805:63;;3761:117;3556:329;;;;:::o;3891:474::-;3959:6;3967;4016:2;4004:9;3995:7;3991:23;3987:32;3984:119;;;4022:79;;:::i;:::-;3984:119;4142:1;4167:53;4212:7;4203:6;4192:9;4188:22;4167:53;:::i;:::-;4157:63;;4113:117;4269:2;4295:53;4340:7;4331:6;4320:9;4316:22;4295:53;:::i;:::-;4285:63;;4240:118;3891:474;;;;;:::o;4371:619::-;4448:6;4456;4464;4513:2;4501:9;4492:7;4488:23;4484:32;4481:119;;;4519:79;;:::i;:::-;4481:119;4639:1;4664:53;4709:7;4700:6;4689:9;4685:22;4664:53;:::i;:::-;4654:63;;4610:117;4766:2;4792:53;4837:7;4828:6;4817:9;4813:22;4792:53;:::i;:::-;4782:63;;4737:118;4894:2;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4865:118;4371:619;;;;;:::o;4996:943::-;5091:6;5099;5107;5115;5164:3;5152:9;5143:7;5139:23;5135:33;5132:120;;;5171:79;;:::i;:::-;5132:120;5291:1;5316:53;5361:7;5352:6;5341:9;5337:22;5316:53;:::i;:::-;5306:63;;5262:117;5418:2;5444:53;5489:7;5480:6;5469:9;5465:22;5444:53;:::i;:::-;5434:63;;5389:118;5546:2;5572:53;5617:7;5608:6;5597:9;5593:22;5572:53;:::i;:::-;5562:63;;5517:118;5702:2;5691:9;5687:18;5674:32;5733:18;5725:6;5722:30;5719:117;;;5755:79;;:::i;:::-;5719:117;5860:62;5914:7;5905:6;5894:9;5890:22;5860:62;:::i;:::-;5850:72;;5645:287;4996:943;;;;;;;:::o;5945:468::-;6010:6;6018;6067:2;6055:9;6046:7;6042:23;6038:32;6035:119;;;6073:79;;:::i;:::-;6035:119;6193:1;6218:53;6263:7;6254:6;6243:9;6239:22;6218:53;:::i;:::-;6208:63;;6164:117;6320:2;6346:50;6388:7;6379:6;6368:9;6364:22;6346:50;:::i;:::-;6336:60;;6291:115;5945:468;;;;;:::o;6419:474::-;6487:6;6495;6544:2;6532:9;6523:7;6519:23;6515:32;6512:119;;;6550:79;;:::i;:::-;6512:119;6670:1;6695:53;6740:7;6731:6;6720:9;6716:22;6695:53;:::i;:::-;6685:63;;6641:117;6797:2;6823:53;6868:7;6859:6;6848:9;6844:22;6823:53;:::i;:::-;6813:63;;6768:118;6419:474;;;;;:::o;6899:539::-;6983:6;7032:2;7020:9;7011:7;7007:23;7003:32;7000:119;;;7038:79;;:::i;:::-;7000:119;7186:1;7175:9;7171:17;7158:31;7216:18;7208:6;7205:30;7202:117;;;7238:79;;:::i;:::-;7202:117;7343:78;7413:7;7404:6;7393:9;7389:22;7343:78;:::i;:::-;7333:88;;7129:302;6899:539;;;;:::o;7444:327::-;7502:6;7551:2;7539:9;7530:7;7526:23;7522:32;7519:119;;;7557:79;;:::i;:::-;7519:119;7677:1;7702:52;7746:7;7737:6;7726:9;7722:22;7702:52;:::i;:::-;7692:62;;7648:116;7444:327;;;;:::o;7777:349::-;7846:6;7895:2;7883:9;7874:7;7870:23;7866:32;7863:119;;;7901:79;;:::i;:::-;7863:119;8021:1;8046:63;8101:7;8092:6;8081:9;8077:22;8046:63;:::i;:::-;8036:73;;7992:127;7777:349;;;;:::o;8132:509::-;8201:6;8250:2;8238:9;8229:7;8225:23;8221:32;8218:119;;;8256:79;;:::i;:::-;8218:119;8404:1;8393:9;8389:17;8376:31;8434:18;8426:6;8423:30;8420:117;;;8456:79;;:::i;:::-;8420:117;8561:63;8616:7;8607:6;8596:9;8592:22;8561:63;:::i;:::-;8551:73;;8347:287;8132:509;;;;:::o;8647:329::-;8706:6;8755:2;8743:9;8734:7;8730:23;8726:32;8723:119;;;8761:79;;:::i;:::-;8723:119;8881:1;8906:53;8951:7;8942:6;8931:9;8927:22;8906:53;:::i;:::-;8896:63;;8852:117;8647:329;;;;:::o;8982:325::-;9039:6;9088:2;9076:9;9067:7;9063:23;9059:32;9056:119;;;9094:79;;:::i;:::-;9056:119;9214:1;9239:51;9282:7;9273:6;9262:9;9258:22;9239:51;:::i;:::-;9229:61;;9185:115;8982:325;;;;:::o;9313:179::-;9382:10;9403:46;9445:3;9437:6;9403:46;:::i;:::-;9481:4;9476:3;9472:14;9458:28;;9313:179;;;;:::o;9498:118::-;9585:24;9603:5;9585:24;:::i;:::-;9580:3;9573:37;9498:118;;:::o;9652:732::-;9771:3;9800:54;9848:5;9800:54;:::i;:::-;9870:86;9949:6;9944:3;9870:86;:::i;:::-;9863:93;;9980:56;10030:5;9980:56;:::i;:::-;10059:7;10090:1;10075:284;10100:6;10097:1;10094:13;10075:284;;;10176:6;10170:13;10203:63;10262:3;10247:13;10203:63;:::i;:::-;10196:70;;10289:60;10342:6;10289:60;:::i;:::-;10279:70;;10135:224;10122:1;10119;10115:9;10110:14;;10075:284;;;10079:14;10375:3;10368:10;;9776:608;;;9652:732;;;;:::o;10390:109::-;10471:21;10486:5;10471:21;:::i;:::-;10466:3;10459:34;10390:109;;:::o;10505:360::-;10591:3;10619:38;10651:5;10619:38;:::i;:::-;10673:70;10736:6;10731:3;10673:70;:::i;:::-;10666:77;;10752:52;10797:6;10792:3;10785:4;10778:5;10774:16;10752:52;:::i;:::-;10829:29;10851:6;10829:29;:::i;:::-;10824:3;10820:39;10813:46;;10595:270;10505:360;;;;:::o;10871:364::-;10959:3;10987:39;11020:5;10987:39;:::i;:::-;11042:71;11106:6;11101:3;11042:71;:::i;:::-;11035:78;;11122:52;11167:6;11162:3;11155:4;11148:5;11144:16;11122:52;:::i;:::-;11199:29;11221:6;11199:29;:::i;:::-;11194:3;11190:39;11183:46;;10963:272;10871:364;;;;:::o;11241:377::-;11347:3;11375:39;11408:5;11375:39;:::i;:::-;11430:89;11512:6;11507:3;11430:89;:::i;:::-;11423:96;;11528:52;11573:6;11568:3;11561:4;11554:5;11550:16;11528:52;:::i;:::-;11605:6;11600:3;11596:16;11589:23;;11351:267;11241:377;;;;:::o;11624:402::-;11784:3;11805:85;11887:2;11882:3;11805:85;:::i;:::-;11798:92;;11899:93;11988:3;11899:93;:::i;:::-;12017:2;12012:3;12008:12;12001:19;;11624:402;;;:::o;12032:366::-;12174:3;12195:67;12259:2;12254:3;12195:67;:::i;:::-;12188:74;;12271:93;12360:3;12271:93;:::i;:::-;12389:2;12384:3;12380:12;12373:19;;12032:366;;;:::o;12404:::-;12546:3;12567:67;12631:2;12626:3;12567:67;:::i;:::-;12560:74;;12643:93;12732:3;12643:93;:::i;:::-;12761:2;12756:3;12752:12;12745:19;;12404:366;;;:::o;12776:::-;12918:3;12939:67;13003:2;12998:3;12939:67;:::i;:::-;12932:74;;13015:93;13104:3;13015:93;:::i;:::-;13133:2;13128:3;13124:12;13117:19;;12776:366;;;:::o;13148:::-;13290:3;13311:67;13375:2;13370:3;13311:67;:::i;:::-;13304:74;;13387:93;13476:3;13387:93;:::i;:::-;13505:2;13500:3;13496:12;13489:19;;13148:366;;;:::o;13520:404::-;13680:3;13701:86;13783:3;13778;13701:86;:::i;:::-;13694:93;;13796;13885:3;13796:93;:::i;:::-;13914:3;13909;13905:13;13898:20;;13520:404;;;:::o;13930:366::-;14072:3;14093:67;14157:2;14152:3;14093:67;:::i;:::-;14086:74;;14169:93;14258:3;14169:93;:::i;:::-;14287:2;14282:3;14278:12;14271:19;;13930:366;;;:::o;14302:::-;14444:3;14465:67;14529:2;14524:3;14465:67;:::i;:::-;14458:74;;14541:93;14630:3;14541:93;:::i;:::-;14659:2;14654:3;14650:12;14643:19;;14302:366;;;:::o;14674:::-;14816:3;14837:67;14901:2;14896:3;14837:67;:::i;:::-;14830:74;;14913:93;15002:3;14913:93;:::i;:::-;15031:2;15026:3;15022:12;15015:19;;14674:366;;;:::o;15046:::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:::-;15560:3;15581:67;15645:2;15640:3;15581:67;:::i;:::-;15574:74;;15657:93;15746:3;15657:93;:::i;:::-;15775:2;15770:3;15766:12;15759:19;;15418:366;;;:::o;15790:::-;15932:3;15953:67;16017:2;16012:3;15953:67;:::i;:::-;15946:74;;16029:93;16118:3;16029:93;:::i;:::-;16147:2;16142:3;16138:12;16131:19;;15790:366;;;:::o;16162:::-;16304:3;16325:67;16389:2;16384:3;16325:67;:::i;:::-;16318:74;;16401:93;16490:3;16401:93;:::i;:::-;16519:2;16514:3;16510:12;16503:19;;16162:366;;;:::o;16534:::-;16676:3;16697:67;16761:2;16756:3;16697:67;:::i;:::-;16690:74;;16773:93;16862:3;16773:93;:::i;:::-;16891:2;16886:3;16882:12;16875:19;;16534:366;;;:::o;16906:::-;17048:3;17069:67;17133:2;17128:3;17069:67;:::i;:::-;17062:74;;17145:93;17234:3;17145:93;:::i;:::-;17263:2;17258:3;17254:12;17247:19;;16906:366;;;:::o;17278:365::-;17420:3;17441:66;17505:1;17500:3;17441:66;:::i;:::-;17434:73;;17516:93;17605:3;17516:93;:::i;:::-;17634:2;17629:3;17625:12;17618:19;;17278:365;;;:::o;17649:366::-;17791:3;17812:67;17876:2;17871:3;17812:67;:::i;:::-;17805:74;;17888:93;17977:3;17888:93;:::i;:::-;18006:2;18001:3;17997:12;17990:19;;17649:366;;;:::o;18021:::-;18163:3;18184:67;18248:2;18243:3;18184:67;:::i;:::-;18177:74;;18260:93;18349:3;18260:93;:::i;:::-;18378:2;18373:3;18369:12;18362:19;;18021:366;;;:::o;18393:400::-;18553:3;18574:84;18656:1;18651:3;18574:84;:::i;:::-;18567:91;;18667:93;18756:3;18667:93;:::i;:::-;18785:1;18780:3;18776:11;18769:18;;18393:400;;;:::o;18799:366::-;18941:3;18962:67;19026:2;19021:3;18962:67;:::i;:::-;18955:74;;19038:93;19127:3;19038:93;:::i;:::-;19156:2;19151:3;19147:12;19140:19;;18799:366;;;:::o;19171:::-;19313:3;19334:67;19398:2;19393:3;19334:67;:::i;:::-;19327:74;;19410:93;19499:3;19410:93;:::i;:::-;19528:2;19523:3;19519:12;19512:19;;19171:366;;;:::o;19543:::-;19685:3;19706:67;19770:2;19765:3;19706:67;:::i;:::-;19699:74;;19782:93;19871:3;19782:93;:::i;:::-;19900:2;19895:3;19891:12;19884:19;;19543:366;;;:::o;19915:::-;20057:3;20078:67;20142:2;20137:3;20078:67;:::i;:::-;20071:74;;20154:93;20243:3;20154:93;:::i;:::-;20272:2;20267:3;20263:12;20256:19;;19915:366;;;:::o;20287:::-;20429:3;20450:67;20514:2;20509:3;20450:67;:::i;:::-;20443:74;;20526:93;20615:3;20526:93;:::i;:::-;20644:2;20639:3;20635:12;20628:19;;20287:366;;;:::o;20659:::-;20801:3;20822:67;20886:2;20881:3;20822:67;:::i;:::-;20815:74;;20898:93;20987:3;20898:93;:::i;:::-;21016:2;21011:3;21007:12;21000:19;;20659:366;;;:::o;21031:402::-;21191:3;21212:85;21294:2;21289:3;21212:85;:::i;:::-;21205:92;;21306:93;21395:3;21306:93;:::i;:::-;21424:2;21419:3;21415:12;21408:19;;21031:402;;;:::o;21439:366::-;21581:3;21602:67;21666:2;21661:3;21602:67;:::i;:::-;21595:74;;21678:93;21767:3;21678:93;:::i;:::-;21796:2;21791:3;21787:12;21780:19;;21439:366;;;:::o;21811:::-;21953:3;21974:67;22038:2;22033:3;21974:67;:::i;:::-;21967:74;;22050:93;22139:3;22050:93;:::i;:::-;22168:2;22163:3;22159:12;22152:19;;21811:366;;;:::o;22183:108::-;22260:24;22278:5;22260:24;:::i;:::-;22255:3;22248:37;22183:108;;:::o;22297:118::-;22384:24;22402:5;22384:24;:::i;:::-;22379:3;22372:37;22297:118;;:::o;22421:701::-;22702:3;22724:95;22815:3;22806:6;22724:95;:::i;:::-;22717:102;;22836:95;22927:3;22918:6;22836:95;:::i;:::-;22829:102;;22948:148;23092:3;22948:148;:::i;:::-;22941:155;;23113:3;23106:10;;22421:701;;;;;:::o;23128:381::-;23313:3;23335:148;23479:3;23335:148;:::i;:::-;23328:155;;23500:3;23493:10;;23128:381;;;:::o;23515:::-;23700:3;23722:148;23866:3;23722:148;:::i;:::-;23715:155;;23887:3;23880:10;;23515:381;;;:::o;23902:541::-;24135:3;24157:148;24301:3;24157:148;:::i;:::-;24150:155;;24322:95;24413:3;24404:6;24322:95;:::i;:::-;24315:102;;24434:3;24427:10;;23902:541;;;;:::o;24449:222::-;24542:4;24580:2;24569:9;24565:18;24557:26;;24593:71;24661:1;24650:9;24646:17;24637:6;24593:71;:::i;:::-;24449:222;;;;:::o;24677:640::-;24872:4;24910:3;24899:9;24895:19;24887:27;;24924:71;24992:1;24981:9;24977:17;24968:6;24924:71;:::i;:::-;25005:72;25073:2;25062:9;25058:18;25049:6;25005:72;:::i;:::-;25087;25155:2;25144:9;25140:18;25131:6;25087:72;:::i;:::-;25206:9;25200:4;25196:20;25191:2;25180:9;25176:18;25169:48;25234:76;25305:4;25296:6;25234:76;:::i;:::-;25226:84;;24677:640;;;;;;;:::o;25323:373::-;25466:4;25504:2;25493:9;25489:18;25481:26;;25553:9;25547:4;25543:20;25539:1;25528:9;25524:17;25517:47;25581:108;25684:4;25675:6;25581:108;:::i;:::-;25573:116;;25323:373;;;;:::o;25702:210::-;25789:4;25827:2;25816:9;25812:18;25804:26;;25840:65;25902:1;25891:9;25887:17;25878:6;25840:65;:::i;:::-;25702:210;;;;:::o;25918:313::-;26031:4;26069:2;26058:9;26054:18;26046:26;;26118:9;26112:4;26108:20;26104:1;26093:9;26089:17;26082:47;26146:78;26219:4;26210:6;26146:78;:::i;:::-;26138:86;;25918:313;;;;:::o;26237:419::-;26403:4;26441:2;26430:9;26426:18;26418:26;;26490:9;26484:4;26480:20;26476:1;26465:9;26461:17;26454:47;26518:131;26644:4;26518:131;:::i;:::-;26510:139;;26237:419;;;:::o;26662:::-;26828:4;26866:2;26855:9;26851:18;26843:26;;26915:9;26909:4;26905:20;26901:1;26890:9;26886:17;26879:47;26943:131;27069:4;26943:131;:::i;:::-;26935:139;;26662:419;;;:::o;27087:::-;27253:4;27291:2;27280:9;27276:18;27268:26;;27340:9;27334:4;27330:20;27326:1;27315:9;27311:17;27304:47;27368:131;27494:4;27368:131;:::i;:::-;27360:139;;27087:419;;;:::o;27512:::-;27678:4;27716:2;27705:9;27701:18;27693:26;;27765:9;27759:4;27755:20;27751:1;27740:9;27736:17;27729:47;27793:131;27919:4;27793:131;:::i;:::-;27785:139;;27512:419;;;:::o;27937:::-;28103:4;28141:2;28130:9;28126:18;28118:26;;28190:9;28184:4;28180:20;28176:1;28165:9;28161:17;28154:47;28218:131;28344:4;28218:131;:::i;:::-;28210:139;;27937:419;;;:::o;28362:::-;28528:4;28566:2;28555:9;28551:18;28543:26;;28615:9;28609:4;28605:20;28601:1;28590:9;28586:17;28579:47;28643:131;28769:4;28643:131;:::i;:::-;28635:139;;28362:419;;;:::o;28787:::-;28953:4;28991:2;28980:9;28976:18;28968:26;;29040:9;29034:4;29030:20;29026:1;29015:9;29011:17;29004:47;29068:131;29194:4;29068:131;:::i;:::-;29060:139;;28787:419;;;:::o;29212:::-;29378:4;29416:2;29405:9;29401:18;29393:26;;29465:9;29459:4;29455:20;29451:1;29440:9;29436:17;29429:47;29493:131;29619:4;29493:131;:::i;:::-;29485:139;;29212:419;;;:::o;29637:::-;29803:4;29841:2;29830:9;29826:18;29818:26;;29890:9;29884:4;29880:20;29876:1;29865:9;29861:17;29854:47;29918:131;30044:4;29918:131;:::i;:::-;29910:139;;29637:419;;;:::o;30062:::-;30228:4;30266:2;30255:9;30251:18;30243:26;;30315:9;30309:4;30305:20;30301:1;30290:9;30286:17;30279:47;30343:131;30469:4;30343:131;:::i;:::-;30335:139;;30062:419;;;:::o;30487:::-;30653:4;30691:2;30680:9;30676:18;30668:26;;30740:9;30734:4;30730:20;30726:1;30715:9;30711:17;30704:47;30768:131;30894:4;30768:131;:::i;:::-;30760:139;;30487:419;;;:::o;30912:::-;31078:4;31116:2;31105:9;31101:18;31093:26;;31165:9;31159:4;31155:20;31151:1;31140:9;31136:17;31129:47;31193:131;31319:4;31193:131;:::i;:::-;31185:139;;30912:419;;;:::o;31337:::-;31503:4;31541:2;31530:9;31526:18;31518:26;;31590:9;31584:4;31580:20;31576:1;31565:9;31561:17;31554:47;31618:131;31744:4;31618:131;:::i;:::-;31610:139;;31337:419;;;:::o;31762:::-;31928:4;31966:2;31955:9;31951:18;31943:26;;32015:9;32009:4;32005:20;32001:1;31990:9;31986:17;31979:47;32043:131;32169:4;32043:131;:::i;:::-;32035:139;;31762:419;;;:::o;32187:::-;32353:4;32391:2;32380:9;32376:18;32368:26;;32440:9;32434:4;32430:20;32426:1;32415:9;32411:17;32404:47;32468:131;32594:4;32468:131;:::i;:::-;32460:139;;32187:419;;;:::o;32612:::-;32778:4;32816:2;32805:9;32801:18;32793:26;;32865:9;32859:4;32855:20;32851:1;32840:9;32836:17;32829:47;32893:131;33019:4;32893:131;:::i;:::-;32885:139;;32612:419;;;:::o;33037:::-;33203:4;33241:2;33230:9;33226:18;33218:26;;33290:9;33284:4;33280:20;33276:1;33265:9;33261:17;33254:47;33318:131;33444:4;33318:131;:::i;:::-;33310:139;;33037:419;;;:::o;33462:::-;33628:4;33666:2;33655:9;33651:18;33643:26;;33715:9;33709:4;33705:20;33701:1;33690:9;33686:17;33679:47;33743:131;33869:4;33743:131;:::i;:::-;33735:139;;33462:419;;;:::o;33887:::-;34053:4;34091:2;34080:9;34076:18;34068:26;;34140:9;34134:4;34130:20;34126:1;34115:9;34111:17;34104:47;34168:131;34294:4;34168:131;:::i;:::-;34160:139;;33887:419;;;:::o;34312:::-;34478:4;34516:2;34505:9;34501:18;34493:26;;34565:9;34559:4;34555:20;34551:1;34540:9;34536:17;34529:47;34593:131;34719:4;34593:131;:::i;:::-;34585:139;;34312:419;;;:::o;34737:::-;34903:4;34941:2;34930:9;34926:18;34918:26;;34990:9;34984:4;34980:20;34976:1;34965:9;34961:17;34954:47;35018:131;35144:4;35018:131;:::i;:::-;35010:139;;34737:419;;;:::o;35162:::-;35328:4;35366:2;35355:9;35351:18;35343:26;;35415:9;35409:4;35405:20;35401:1;35390:9;35386:17;35379:47;35443:131;35569:4;35443:131;:::i;:::-;35435:139;;35162:419;;;:::o;35587:::-;35753:4;35791:2;35780:9;35776:18;35768:26;;35840:9;35834:4;35830:20;35826:1;35815:9;35811:17;35804:47;35868:131;35994:4;35868:131;:::i;:::-;35860:139;;35587:419;;;:::o;36012:::-;36178:4;36216:2;36205:9;36201:18;36193:26;;36265:9;36259:4;36255:20;36251:1;36240:9;36236:17;36229:47;36293:131;36419:4;36293:131;:::i;:::-;36285:139;;36012:419;;;:::o;36437:222::-;36530:4;36568:2;36557:9;36553:18;36545:26;;36581:71;36649:1;36638:9;36634:17;36625:6;36581:71;:::i;:::-;36437:222;;;;:::o;36665:129::-;36699:6;36726:20;;:::i;:::-;36716:30;;36755:33;36783:4;36775:6;36755:33;:::i;:::-;36665:129;;;:::o;36800:75::-;36833:6;36866:2;36860:9;36850:19;;36800:75;:::o;36881:311::-;36958:4;37048:18;37040:6;37037:30;37034:56;;;37070:18;;:::i;:::-;37034:56;37120:4;37112:6;37108:17;37100:25;;37180:4;37174;37170:15;37162:23;;36881:311;;;:::o;37198:307::-;37259:4;37349:18;37341:6;37338:30;37335:56;;;37371:18;;:::i;:::-;37335:56;37409:29;37431:6;37409:29;:::i;:::-;37401:37;;37493:4;37487;37483:15;37475:23;;37198:307;;;:::o;37511:308::-;37573:4;37663:18;37655:6;37652:30;37649:56;;;37685:18;;:::i;:::-;37649:56;37723:29;37745:6;37723:29;:::i;:::-;37715:37;;37807:4;37801;37797:15;37789:23;;37511:308;;;:::o;37825:132::-;37892:4;37915:3;37907:11;;37945:4;37940:3;37936:14;37928:22;;37825:132;;;:::o;37963:114::-;38030:6;38064:5;38058:12;38048:22;;37963:114;;;:::o;38083:98::-;38134:6;38168:5;38162:12;38152:22;;38083:98;;;:::o;38187:99::-;38239:6;38273:5;38267:12;38257:22;;38187:99;;;:::o;38292:113::-;38362:4;38394;38389:3;38385:14;38377:22;;38292:113;;;:::o;38411:184::-;38510:11;38544:6;38539:3;38532:19;38584:4;38579:3;38575:14;38560:29;;38411:184;;;;:::o;38601:168::-;38684:11;38718:6;38713:3;38706:19;38758:4;38753:3;38749:14;38734:29;;38601:168;;;;:::o;38775:169::-;38859:11;38893:6;38888:3;38881:19;38933:4;38928:3;38924:14;38909:29;;38775:169;;;;:::o;38950:148::-;39052:11;39089:3;39074:18;;38950:148;;;;:::o;39104:305::-;39144:3;39163:20;39181:1;39163:20;:::i;:::-;39158:25;;39197:20;39215:1;39197:20;:::i;:::-;39192:25;;39351:1;39283:66;39279:74;39276:1;39273:81;39270:107;;;39357:18;;:::i;:::-;39270:107;39401:1;39398;39394:9;39387:16;;39104:305;;;;:::o;39415:185::-;39455:1;39472:20;39490:1;39472:20;:::i;:::-;39467:25;;39506:20;39524:1;39506:20;:::i;:::-;39501:25;;39545:1;39535:35;;39550:18;;:::i;:::-;39535:35;39592:1;39589;39585:9;39580:14;;39415:185;;;;:::o;39606:348::-;39646:7;39669:20;39687:1;39669:20;:::i;:::-;39664:25;;39703:20;39721:1;39703:20;:::i;:::-;39698:25;;39891:1;39823:66;39819:74;39816:1;39813:81;39808:1;39801:9;39794:17;39790:105;39787:131;;;39898:18;;:::i;:::-;39787:131;39946:1;39943;39939:9;39928:20;;39606:348;;;;:::o;39960:191::-;40000:4;40020:20;40038:1;40020:20;:::i;:::-;40015:25;;40054:20;40072:1;40054:20;:::i;:::-;40049:25;;40093:1;40090;40087:8;40084:34;;;40098:18;;:::i;:::-;40084:34;40143:1;40140;40136:9;40128:17;;39960:191;;;;:::o;40157:96::-;40194:7;40223:24;40241:5;40223:24;:::i;:::-;40212:35;;40157:96;;;:::o;40259:90::-;40293:7;40336:5;40329:13;40322:21;40311:32;;40259:90;;;:::o;40355:149::-;40391:7;40431:66;40424:5;40420:78;40409:89;;40355:149;;;:::o;40510:126::-;40547:7;40587:42;40580:5;40576:54;40565:65;;40510:126;;;:::o;40642:77::-;40679:7;40708:5;40697:16;;40642:77;;;:::o;40725:86::-;40760:7;40800:4;40793:5;40789:16;40778:27;;40725:86;;;:::o;40817:154::-;40901:6;40896:3;40891;40878:30;40963:1;40954:6;40949:3;40945:16;40938:27;40817:154;;;:::o;40977:307::-;41045:1;41055:113;41069:6;41066:1;41063:13;41055:113;;;41154:1;41149:3;41145:11;41139:18;41135:1;41130:3;41126:11;41119:39;41091:2;41088:1;41084:10;41079:15;;41055:113;;;41186:6;41183:1;41180:13;41177:101;;;41266:1;41257:6;41252:3;41248:16;41241:27;41177:101;41026:258;40977:307;;;:::o;41290:320::-;41334:6;41371:1;41365:4;41361:12;41351:22;;41418:1;41412:4;41408:12;41439:18;41429:81;;41495:4;41487:6;41483:17;41473:27;;41429:81;41557:2;41549:6;41546:14;41526:18;41523:38;41520:84;;;41576:18;;:::i;:::-;41520:84;41341:269;41290:320;;;:::o;41616:281::-;41699:27;41721:4;41699:27;:::i;:::-;41691:6;41687:40;41829:6;41817:10;41814:22;41793:18;41781:10;41778:34;41775:62;41772:88;;;41840:18;;:::i;:::-;41772:88;41880:10;41876:2;41869:22;41659:238;41616:281;;:::o;41903:233::-;41942:3;41965:24;41983:5;41965:24;:::i;:::-;41956:33;;42011:66;42004:5;42001:77;41998:103;;;42081:18;;:::i;:::-;41998:103;42128:1;42121:5;42117:13;42110:20;;41903:233;;;:::o;42142:176::-;42174:1;42191:20;42209:1;42191:20;:::i;:::-;42186:25;;42225:20;42243:1;42225:20;:::i;:::-;42220:25;;42264:1;42254:35;;42269:18;;:::i;:::-;42254:35;42310:1;42307;42303:9;42298:14;;42142:176;;;;:::o;42324:180::-;42372:77;42369:1;42362:88;42469:4;42466:1;42459:15;42493:4;42490:1;42483:15;42510:180;42558:77;42555:1;42548:88;42655:4;42652:1;42645:15;42679:4;42676:1;42669:15;42696:180;42744:77;42741:1;42734:88;42841:4;42838:1;42831:15;42865:4;42862:1;42855:15;42882:180;42930:77;42927:1;42920:88;43027:4;43024:1;43017:15;43051:4;43048:1;43041:15;43068:180;43116:77;43113:1;43106:88;43213:4;43210:1;43203:15;43237:4;43234:1;43227:15;43254:180;43302:77;43299:1;43292:88;43399:4;43396:1;43389:15;43423:4;43420:1;43413:15;43440:117;43549:1;43546;43539:12;43563:117;43672:1;43669;43662:12;43686:117;43795:1;43792;43785:12;43809:117;43918:1;43915;43908:12;43932:117;44041:1;44038;44031:12;44055:102;44096:6;44147:2;44143:7;44138:2;44131:5;44127:14;44123:28;44113:38;;44055:102;;;:::o;44163:316::-;44303:34;44299:1;44291:6;44287:14;44280:58;44376:34;44371:2;44363:6;44359:15;44352:59;44449:18;44444:2;44436:6;44432:15;44425:43;44163:316;:::o;44489:250::-;44633:34;44629:1;44621:6;44617:14;44610:58;44706:21;44701:2;44693:6;44689:15;44682:46;44489:250;:::o;44749:242::-;44893:34;44889:1;44881:6;44877:14;44870:58;44966:13;44961:2;44953:6;44949:15;44942:38;44749:242;:::o;45001:249::-;45145:34;45141:1;45133:6;45129:14;45122:58;45218:20;45213:2;45205:6;45201:15;45194:45;45001:249;:::o;45260:237::-;45404:34;45400:1;45392:6;45388:14;45381:58;45477:8;45472:2;45464:6;45460:15;45453:33;45260:237;:::o;45507:1415::-;45651:66;45647:1;45639:6;45635:14;45628:90;45756:66;45751:2;45743:6;45739:15;45732:91;45861:66;45856:2;45848:6;45844:15;45837:91;45966:66;45961:2;45953:6;45949:15;45942:91;46072:66;46066:3;46058:6;46054:16;46047:92;46178:34;46172:3;46164:6;46160:16;46153:60;46252:34;46246:3;46238:6;46234:16;46227:60;46326:34;46320:3;46312:6;46308:16;46301:60;46400:34;46394:3;46386:6;46382:16;46375:60;46474:34;46468:3;46460:6;46456:16;46449:60;46548:34;46542:3;46534:6;46530:16;46523:60;46622:34;46616:3;46608:6;46604:16;46597:60;46696:34;46690:3;46682:6;46678:16;46671:60;46770:34;46764:3;46756:6;46752:16;46745:60;46844:66;46838:3;46830:6;46826:16;46819:92;45507:1415;:::o;46932:186::-;47076:30;47072:1;47064:6;47060:14;47053:54;46932:186;:::o;47128:235::-;47272:34;47268:1;47260:6;47256:14;47249:58;47345:6;47340:2;47332:6;47328:15;47321:31;47128:235;:::o;47373:183::-;47517:27;47513:1;47505:6;47501:14;47494:51;47373:183;:::o;47566:243::-;47710:34;47706:1;47698:6;47694:14;47687:58;47783:14;47778:2;47770:6;47766:15;47759:39;47566:243;:::o;47819:255::-;47963:34;47959:1;47951:6;47947:14;47940:58;48036:26;48031:2;48023:6;48019:15;48012:51;47819:255;:::o;48084:241::-;48228:34;48224:1;48216:6;48212:14;48205:58;48301:12;48296:2;48288:6;48284:15;48277:37;48084:241;:::o;48335:240::-;48479:34;48475:1;48467:6;48463:14;48456:58;48552:11;48547:2;48539:6;48535:15;48528:36;48335:240;:::o;48585:187::-;48729:31;48725:1;48717:6;48713:14;48706:55;48585:187;:::o;48782:190::-;48926:34;48922:1;48914:6;48910:14;48903:58;48782:190;:::o;48982:166::-;49126:10;49122:1;49114:6;49110:14;49103:34;48982:166;:::o;49158:232::-;49302:34;49298:1;49290:6;49286:14;49279:58;49375:3;49370:2;49362:6;49358:15;49351:28;49158:232;:::o;49400:243::-;49544:34;49540:1;49532:6;49528:14;49521:58;49617:14;49612:2;49604:6;49600:15;49593:39;49400:243;:::o;49653:163::-;49797:7;49793:1;49785:6;49781:14;49774:31;49653:163;:::o;49826:190::-;49970:34;49966:1;49958:6;49954:14;49947:58;49826:190;:::o;50026:237::-;50170:34;50166:1;50158:6;50154:14;50147:58;50243:8;50238:2;50230:6;50226:15;50219:33;50026:237;:::o;50273:240::-;50417:34;50413:1;50405:6;50401:14;50394:58;50490:11;50485:2;50477:6;50473:15;50466:36;50273:240;:::o;50523:246::-;50667:34;50663:1;50655:6;50651:14;50644:58;50740:17;50735:2;50727:6;50723:15;50716:42;50523:246;:::o;50779:232::-;50923:34;50919:1;50911:6;50907:14;50900:58;50996:3;50991:2;50983:6;50979:15;50972:28;50779:232;:::o;51021:188::-;51165:32;51161:1;51153:6;51149:14;51142:56;51021:188;:::o;51219:187::-;51363:31;51359:1;51351:6;51347:14;51340:55;51219:187;:::o;51416:248::-;51560:34;51556:1;51548:6;51544:14;51537:58;51633:19;51628:2;51620:6;51616:15;51609:44;51416:248;:::o;51674:243::-;51818:34;51814:1;51806:6;51802:14;51795:58;51891:14;51886:2;51878:6;51874:15;51867:39;51674:243;:::o;51927:130::-;52004:24;52022:5;52004:24;:::i;:::-;51997:5;51994:35;51984:63;;52043:1;52040;52033:12;51984:63;51927:130;:::o;52067:124::-;52141:21;52156:5;52141:21;:::i;:::-;52134:5;52131:32;52121:60;;52177:1;52174;52167:12;52121:60;52067:124;:::o;52201:128::-;52277:23;52294:5;52277:23;:::i;:::-;52270:5;52267:34;52257:62;;52315:1;52312;52305:12;52257:62;52201:128;:::o;52339:130::-;52416:24;52434:5;52416:24;:::i;:::-;52409:5;52406:35;52396:63;;52455:1;52452;52445:12;52396:63;52339:130;:::o;52479:126::-;52554:22;52570:5;52554:22;:::i;:::-;52547:5;52544:33;52534:61;;52591:1;52588;52581:12;52534:61;52479:126;:::o

Swarm Source

ipfs://a312be41e730102a96881d667caf97fbb830b41a4b81d67d6ec9a75276e7575b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.