ETH Price: $3,097.13 (+2.11%)
Gas: 3 Gwei

Token

BabyDoodleApes (BDA)
 

Overview

Max Total Supply

3,333 BDA

Holders

1,804

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BDA
0xb51cf6c2d628af898e26509949660640b6d1c914
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:
BabyDoodleApes

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-02-26
*/

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

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

// SPDX-License-Identifier: MIT
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 BabyDoodleApes is ERC721Enumerable, Ownable
{
    using SafeMath for uint256;
    using Strings for uint256;

    uint public constant _TOTALSUPPLY = 3333;
    
    uint public maxPerTxn = 20; // 10 - whitelist , 10 - public
    // uint public maxPerWallet = 2; // 2 - whitelist , none - public
    
    uint256 public price = 0.02 ether; 
    uint public status = 0; //0 - pause , 1 - public
    
    bool public revealed = false;
    string public unrevealedUri = "https://gateway.pinata.cloud/ipfs/QmXKWdxoizpb6vXAicGG4iCDVBZsR7hcfeY8MXghKFQC72";
    
    uint private reserved = 30;

    mapping(address => bool) public trackFree;

    constructor() ERC721("BabyDoodleApes", "BDA")  {
        setBaseURI("");
    }
    function gotFree(address a) public returns(bool){
        return trackFree[a];
    }
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseURI = baseURI;
    }
    function setRevealed() public onlyOwner{
        revealed = !revealed;
    }
    function setunrevealedUri(string memory baseURI) public onlyOwner {
        unrevealedUri = baseURI;
    }
    function setPrice(uint256 _newPrice) public onlyOwner() {
        price = _newPrice;
    }
    function setReserved(uint256 _q) public onlyOwner() {
        reserved = _q;
    }
    function setMaxxQtPerTx(uint256 _quantity) public onlyOwner {
        maxPerTxn=_quantity;
    }
    // function setMaxxQtPerWallet(uint256 _quantity) public onlyOwner {
    //     maxPerWallet=_quantity;
    // }
    function giveaway(address a, uint q) public onlyOwner{
        for(uint i=0; i<q; i++)
            _safeMint(a, totalsupply()+1);
            reserved-=q;
    }
    modifier isSaleOpen{
        require(totalSupply() < _TOTALSUPPLY, "Sale end");
        _;
    }
    function seteStatus(uint s) public onlyOwner {
        status = s;
    }
    function getPrice() public view returns (uint256) {
           return price ;
    }

    function mint(uint chosenAmount) public payable isSaleOpen{
        require( status == 1 , "Sale is not active at the moment" );
        require( totalSupply() + chosenAmount <= _TOTALSUPPLY - reserved , "Quantity must be lesser then MaxSupply" );
        require( chosenAmount > 0 , "Number of tokens can not be less than or equal to 0" );
        require( chosenAmount <= maxPerTxn , "Chosen Amount exceeds MaxQuantity" );
        // require( status == 1 && ( chosenAmount + balanceOf( msg.sender ) <= maxPerWallet ) , "Chosen Amount exceeds MaxQuantity" );
        require( price.mul( trackFree[msg.sender]  ? chosenAmount : chosenAmount-1 ) == msg.value, "Sent ether value is incorrect" );
        for (uint i = 0; i < chosenAmount; i++) {
            _safeMint(msg.sender, totalsupply()+1);
        }
        trackFree[msg.sender] = true;
    }
 
    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();
    }

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

        string memory base = baseURI();

        if(revealed)
            return bytes(base).length > 0 ? string(abi.encodePacked(base, tokenId.toString(), ".json")) : "";
        else
        return unrevealedUri;
    }
    function contractURI() public view returns (string memory) {
        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Baby Doodle Apes", "description": "Baby Doodle Apes supports artists, musicians, actors and writers to pursue their dreams, by providing a source of passive income.", "seller_fee_basis_points": 1000, "fee_recipient": "0x34465664e2096eACE7F8d62874aE8B26Eb63b5f9"}'))));
        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":"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":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"q","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"gotFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxn","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":"revealed","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":[{"internalType":"uint256","name":"_q","type":"uint256"}],"name":"setReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"seteStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setunrevealedUri","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":"","type":"address"}],"name":"trackFree","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":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unrevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526014600c5566470de4df820000600d556000600e556000600f60006101000a81548160ff021916908315150217905550604051806080016040528060508152602001620051b7605091396010908051906020019062000065929190620002cd565b50601e6011553480156200007857600080fd5b506040518060400160405280600e81526020017f42616279446f6f646c65417065730000000000000000000000000000000000008152506040518060400160405280600381526020017f42444100000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000fd929190620002cd565b50806001908051906020019062000116929190620002cd565b50505060006200012b620001f060201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001ea60405180602001604052806000815250620001f860201b60201c565b62000465565b600033905090565b62000208620001f060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200022e620002a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000287576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027e90620003a4565b60405180910390fd5b80600690805190602001906200029f929190620002cd565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002db90620003d7565b90600052602060002090601f016020900481019282620002ff57600085556200034b565b82601f106200031a57805160ff19168380011785556200034b565b828001600101855582156200034b579182015b828111156200034a5782518255916020019190600101906200032d565b5b5090506200035a91906200035e565b5090565b5b80821115620003795760008160009055506001016200035f565b5090565b60006200038c602083620003c6565b915062000399826200043c565b602082019050919050565b60006020820190508181036000830152620003bf816200037d565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620003f057607f821691505b602082108114156200040757620004066200040d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614d4280620004756000396000f3fe60806040526004361061023b5760003560e01c8063743976a01161012e578063a22cb465116100ab578063db4568e21161006f578063db4568e214610888578063e8a3d485146108b3578063e985e9c5146108de578063e9c31a591461091b578063f2fde38b146109445761023b565b8063a22cb46514610791578063b88d4fde146107ba578063c02c1bcd146107e3578063c87b56dd1461080e578063c9e0f8461461084b5761023b565b806395d89b41116100f257806395d89b41146106cb57806398d5fdca146106f65780639d38fd2114610721578063a035b1fe1461074a578063a0712d68146107755761023b565b8063743976a0146105e657806377fc23c9146106115780638462151c1461063a5780638da5cb5b1461067757806391b7f5ed146106a25761023b565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104db578063518302271461051857806355f804b3146105435780636352211e1461056c57806370a08231146105a95761023b565b80632f745c591461041c5780633bd64968146104595780633cb51994146104705780633ccfd60b1461049b57806342842e0e146104b25761023b565b8063095ea7b311610203578063095ea7b31461034b57806318160ddd14610374578063200d2ed21461039f57806323b872dd146103ca5780632d6e71b6146103f35761023b565b806301ffc9a714610240578063050225ea1461027d57806305e58c86146102a657806306fdde03146102e3578063081812fc1461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061355d565b61096d565b6040516102749190613c24565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f919061351d565b6109e7565b005b3480156102b257600080fd5b506102cd60048036038101906102c8919061339a565b610abc565b6040516102da9190613c24565b60405180910390f35b3480156102ef57600080fd5b506102f8610b12565b6040516103059190613c3f565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190613600565b610ba4565b6040516103429190613b9b565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d919061351d565b610c29565b005b34801561038057600080fd5b50610389610d41565b6040516103969190613f61565b60405180910390f35b3480156103ab57600080fd5b506103b4610d4e565b6040516103c19190613f61565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190613407565b610d54565b005b3480156103ff57600080fd5b5061041a60048036038101906104159190613600565b610db4565b005b34801561042857600080fd5b50610443600480360381019061043e919061351d565b610e3a565b6040516104509190613f61565b60405180910390f35b34801561046557600080fd5b5061046e610edf565b005b34801561047c57600080fd5b50610485610f87565b6040516104929190613f61565b60405180910390f35b3480156104a757600080fd5b506104b0610f8d565b005b3480156104be57600080fd5b506104d960048036038101906104d49190613407565b611058565b005b3480156104e757600080fd5b5061050260048036038101906104fd9190613600565b611078565b60405161050f9190613f61565b60405180910390f35b34801561052457600080fd5b5061052d6110e9565b60405161053a9190613c24565b60405180910390f35b34801561054f57600080fd5b5061056a600480360381019061056591906135b7565b6110fc565b005b34801561057857600080fd5b50610593600480360381019061058e9190613600565b611192565b6040516105a09190613b9b565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb919061339a565b611244565b6040516105dd9190613f61565b60405180910390f35b3480156105f257600080fd5b506105fb6112fc565b6040516106089190613c3f565b60405180910390f35b34801561061d57600080fd5b50610638600480360381019061063391906135b7565b61138a565b005b34801561064657600080fd5b50610661600480360381019061065c919061339a565b611420565b60405161066e9190613c02565b60405180910390f35b34801561068357600080fd5b5061068c6114ce565b6040516106999190613b9b565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190613600565b6114f8565b005b3480156106d757600080fd5b506106e061157e565b6040516106ed9190613c3f565b60405180910390f35b34801561070257600080fd5b5061070b611610565b6040516107189190613f61565b60405180910390f35b34801561072d57600080fd5b5061074860048036038101906107439190613600565b61161a565b005b34801561075657600080fd5b5061075f6116a0565b60405161076c9190613f61565b60405180910390f35b61078f600480360381019061078a9190613600565b6116a6565b005b34801561079d57600080fd5b506107b860048036038101906107b391906134dd565b611973565b005b3480156107c657600080fd5b506107e160048036038101906107dc919061345a565b611af4565b005b3480156107ef57600080fd5b506107f8611b56565b6040516108059190613c3f565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190613600565b611be4565b6040516108429190613c3f565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d919061339a565b611d34565b60405161087f9190613c24565b60405180910390f35b34801561089457600080fd5b5061089d611d54565b6040516108aa9190613f61565b60405180910390f35b3480156108bf57600080fd5b506108c8611d5a565b6040516108d59190613c3f565b60405180910390f35b3480156108ea57600080fd5b50610905600480360381019061090091906133c7565b611daf565b6040516109129190613c24565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190613600565b611e43565b005b34801561095057600080fd5b5061096b6004803603810190610966919061339a565b611ec9565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109e057506109df82611fc1565b5b9050919050565b6109ef6120a3565b73ffffffffffffffffffffffffffffffffffffffff16610a0d6114ce565b73ffffffffffffffffffffffffffffffffffffffff1614610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a90613e61565b60405180910390fd5b60005b81811015610a9e57610a8b836001610a7c6120ab565b610a86919061407f565b6120ba565b8080610a96906142ad565b915050610a66565b508060116000828254610ab19190614160565b925050819055505050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b606060008054610b219061424a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4d9061424a565b8015610b9a5780601f10610b6f57610100808354040283529160200191610b9a565b820191906000526020600020905b815481529060010190602001808311610b7d57829003601f168201915b5050505050905090565b6000610baf826120d8565b610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590613e41565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c3482611192565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90613ee1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cc46120a3565b73ffffffffffffffffffffffffffffffffffffffff161480610cf35750610cf281610ced6120a3565b611daf565b5b610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613d61565b60405180910390fd5b610d3c8383612144565b505050565b6000600980549050905090565b600e5481565b610d65610d5f6120a3565b826121fd565b610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613f01565b60405180910390fd5b610daf8383836122db565b505050565b610dbc6120a3565b73ffffffffffffffffffffffffffffffffffffffff16610dda6114ce565b73ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790613e61565b60405180910390fd5b8060118190555050565b6000610e4583611244565b8210610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90613c81565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ee76120a3565b73ffffffffffffffffffffffffffffffffffffffff16610f056114ce565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613e61565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c5481565b610f956120a3565b73ffffffffffffffffffffffffffffffffffffffff16610fb36114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090613e61565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611054573d6000803e3d6000fd5b5050565b61107383838360405180602001604052806000815250611af4565b505050565b6000611082610d41565b82106110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90613f21565b60405180910390fd5b600982815481106110d7576110d66143e3565b5b90600052602060002001549050919050565b600f60009054906101000a900460ff1681565b6111046120a3565b73ffffffffffffffffffffffffffffffffffffffff166111226114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90613e61565b60405180910390fd5b806006908051906020019061118e9291906131ae565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290613da1565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90613d81565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600680546113099061424a565b80601f01602080910402602001604051908101604052809291908181526020018280546113359061424a565b80156113825780601f1061135757610100808354040283529160200191611382565b820191906000526020600020905b81548152906001019060200180831161136557829003601f168201915b505050505081565b6113926120a3565b73ffffffffffffffffffffffffffffffffffffffff166113b06114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613e61565b60405180910390fd5b806010908051906020019061141c9291906131ae565b5050565b6060600061142d83611244565b905060008167ffffffffffffffff81111561144b5761144a614412565b5b6040519080825280602002602001820160405280156114795781602001602082028036833780820191505090505b50905060005b828110156114c3576114918582610e3a565b8282815181106114a4576114a36143e3565b5b60200260200101818152505080806114bb906142ad565b91505061147f565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115006120a3565b73ffffffffffffffffffffffffffffffffffffffff1661151e6114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613e61565b60405180910390fd5b80600d8190555050565b60606001805461158d9061424a565b80601f01602080910402602001604051908101604052809291908181526020018280546115b99061424a565b80156116065780601f106115db57610100808354040283529160200191611606565b820191906000526020600020905b8154815290600101906020018083116115e957829003601f168201915b5050505050905090565b6000600d54905090565b6116226120a3565b73ffffffffffffffffffffffffffffffffffffffff166116406114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90613e61565b60405180910390fd5b80600c8190555050565b600d5481565b610d056116b1610d41565b106116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890613e01565b60405180910390fd5b6001600e5414611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90613f41565b60405180910390fd5b601154610d056117469190614160565b8161174f610d41565b611759919061407f565b111561179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613e81565b60405180910390fd5b600081116117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490613c61565b60405180910390fd5b600c54811115611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990613e21565b60405180910390fd5b3461189c601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611889576001836118849190614160565b61188b565b825b600d5461253790919063ffffffff16565b146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613dc1565b60405180910390fd5b60005b81811015611917576119043360016118f56120ab565b6118ff919061407f565b6120ba565b808061190f906142ad565b9150506118df565b506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61197b6120a3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090613d21565b60405180910390fd5b80600560006119f66120a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611aa36120a3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ae89190613c24565b60405180910390a35050565b611b05611aff6120a3565b836121fd565b611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b90613f01565b60405180910390fd5b611b508484848461254d565b50505050565b60108054611b639061424a565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8f9061424a565b8015611bdc5780601f10611bb157610100808354040283529160200191611bdc565b820191906000526020600020905b815481529060010190602001808311611bbf57829003601f168201915b505050505081565b6060611bef826120d8565b611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2590613ec1565b60405180910390fd5b6000611c386125a9565b9050600f60009054906101000a900460ff1615611ca0576000815111611c6d5760405180602001604052806000815250611c98565b80611c778461263b565b604051602001611c88929190613b35565b6040516020818303038152906040525b915050611d2f565b60108054611cad9061424a565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd99061424a565b8015611d265780601f10611cfb57610100808354040283529160200191611d26565b820191906000526020600020905b815481529060010190602001808311611d0957829003601f168201915b50505050509150505b919050565b60126020528060005260406000206000915054906101000a900460ff1681565b610d0581565b60606000611d84604051602001611d7090613b64565b60405160208183030381529060405261279c565b905080604051602001611d979190613b79565b60405160208183030381529060405290508091505090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e4b6120a3565b73ffffffffffffffffffffffffffffffffffffffff16611e696114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690613e61565b60405180910390fd5b80600e8190555050565b611ed16120a3565b73ffffffffffffffffffffffffffffffffffffffff16611eef6114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90613e61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac90613cc1565b60405180910390fd5b611fbe81612934565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061208c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061209c575061209b826129fa565b5b9050919050565b600033905090565b60006120b5610d41565b905090565b6120d4828260405180602001604052806000815250612a64565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121b783611192565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612208826120d8565b612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90613d41565b60405180910390fd5b600061225283611192565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122c157508373ffffffffffffffffffffffffffffffffffffffff166122a984610ba4565b73ffffffffffffffffffffffffffffffffffffffff16145b806122d257506122d18185611daf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122fb82611192565b73ffffffffffffffffffffffffffffffffffffffff1614612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890613ea1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b890613d01565b60405180910390fd5b6123cc838383612abf565b6123d7600082612144565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124279190614160565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247e919061407f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836125459190614106565b905092915050565b6125588484846122db565b61256484848484612bd3565b6125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90613ca1565b60405180910390fd5b50505050565b6060600680546125b89061424a565b80601f01602080910402602001604051908101604052809291908181526020018280546125e49061424a565b80156126315780601f1061260657610100808354040283529160200191612631565b820191906000526020600020905b81548152906001019060200180831161261457829003601f168201915b5050505050905090565b60606000821415612683576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612797565b600082905060005b600082146126b557808061269e906142ad565b915050600a826126ae91906140d5565b915061268b565b60008167ffffffffffffffff8111156126d1576126d0614412565b5b6040519080825280601f01601f1916602001820160405280156127035781602001600182028036833780820191505090505b5090505b600085146127905760018261271c9190614160565b9150600a8561272b91906142f6565b6030612737919061407f565b60f81b81838151811061274d5761274c6143e3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561278991906140d5565b9450612707565b8093505050505b919050565b606060008251905060008114156127c5576040518060200160405280600081525091505061292f565b600060036002836127d6919061407f565b6127e091906140d5565b60046127ec9190614106565b905060006020826127fd919061407f565b67ffffffffffffffff81111561281657612815614412565b5b6040519080825280601f01601f1916602001820160405280156128485781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614ccd604091399050600181016020830160005b868110156128ec5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612873565b506003860660018114612906576002811461291657612921565b613d3d60f01b6002830352612921565b603d60f81b60018303525b508484525050819450505050505b919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a6e8383612d6a565b612a7b6000848484612bd3565b612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190613ca1565b60405180910390fd5b505050565b612aca838383612f38565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b0d57612b0881612f3d565b612b4c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b4b57612b4a8382612f86565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b8f57612b8a81613086565b612bce565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bcd57612bcc828261311c565b5b5b505050565b6000612bf48473ffffffffffffffffffffffffffffffffffffffff1661319b565b15612d5d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c1d6120a3565b8786866040518563ffffffff1660e01b8152600401612c3f9493929190613bb6565b602060405180830381600087803b158015612c5957600080fd5b505af1925050508015612c8a57506040513d601f19601f82011682018060405250810190612c87919061358a565b60015b612d0d573d8060008114612cba576040519150601f19603f3d011682016040523d82523d6000602084013e612cbf565b606091505b50600081511415612d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfc90613ca1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d62565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd190613de1565b60405180910390fd5b612de3816120d8565b15612e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1a90613ce1565b60405180910390fd5b612e2f60008383612abf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7f919061407f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f9384611244565b612f9d9190614160565b9050600060086000848152602001908152602001600020549050818114613015576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061309a9190614160565b90506000600a60008481526020019081526020016000205490506000600983815481106130ca576130c96143e3565b5b90600052602060002001549050600a6000858152602001908152602001600020600090556009805480613100576130ff6143b4565b5b6001900381819060005260206000200160009055905550505050565b600061312783611244565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546131ba9061424a565b90600052602060002090601f0160209004810192826131dc5760008555613223565b82601f106131f557805160ff1916838001178555613223565b82800160010185558215613223579182015b82811115613222578251825591602001919060010190613207565b5b5090506132309190613234565b5090565b5b8082111561324d576000816000905550600101613235565b5090565b600061326461325f84613fa1565b613f7c565b9050828152602081018484840111156132805761327f614446565b5b61328b848285614208565b509392505050565b60006132a66132a184613fd2565b613f7c565b9050828152602081018484840111156132c2576132c1614446565b5b6132cd848285614208565b509392505050565b6000813590506132e481614c70565b92915050565b6000813590506132f981614c87565b92915050565b60008135905061330e81614c9e565b92915050565b60008151905061332381614c9e565b92915050565b600082601f83011261333e5761333d614441565b5b813561334e848260208601613251565b91505092915050565b600082601f83011261336c5761336b614441565b5b813561337c848260208601613293565b91505092915050565b60008135905061339481614cb5565b92915050565b6000602082840312156133b0576133af614450565b5b60006133be848285016132d5565b91505092915050565b600080604083850312156133de576133dd614450565b5b60006133ec858286016132d5565b92505060206133fd858286016132d5565b9150509250929050565b6000806000606084860312156134205761341f614450565b5b600061342e868287016132d5565b935050602061343f868287016132d5565b925050604061345086828701613385565b9150509250925092565b6000806000806080858703121561347457613473614450565b5b6000613482878288016132d5565b9450506020613493878288016132d5565b93505060406134a487828801613385565b925050606085013567ffffffffffffffff8111156134c5576134c461444b565b5b6134d187828801613329565b91505092959194509250565b600080604083850312156134f4576134f3614450565b5b6000613502858286016132d5565b9250506020613513858286016132ea565b9150509250929050565b6000806040838503121561353457613533614450565b5b6000613542858286016132d5565b925050602061355385828601613385565b9150509250929050565b60006020828403121561357357613572614450565b5b6000613581848285016132ff565b91505092915050565b6000602082840312156135a05761359f614450565b5b60006135ae84828501613314565b91505092915050565b6000602082840312156135cd576135cc614450565b5b600082013567ffffffffffffffff8111156135eb576135ea61444b565b5b6135f784828501613357565b91505092915050565b60006020828403121561361657613615614450565b5b600061362484828501613385565b91505092915050565b60006136398383613b17565b60208301905092915050565b61364e81614194565b82525050565b600061365f82614013565b6136698185614041565b935061367483614003565b8060005b838110156136a557815161368c888261362d565b975061369783614034565b925050600181019050613678565b5085935050505092915050565b6136bb816141a6565b82525050565b60006136cc8261401e565b6136d68185614052565b93506136e6818560208601614217565b6136ef81614455565b840191505092915050565b600061370582614029565b61370f8185614063565b935061371f818560208601614217565b61372881614455565b840191505092915050565b600061373e82614029565b6137488185614074565b9350613758818560208601614217565b80840191505092915050565b6000613771603383614063565b915061377c82614466565b604082019050919050565b6000613794602b83614063565b915061379f826144b5565b604082019050919050565b60006137b7603283614063565b91506137c282614504565b604082019050919050565b60006137da602683614063565b91506137e582614553565b604082019050919050565b60006137fd601c83614063565b9150613808826145a2565b602082019050919050565b6000613820602483614063565b915061382b826145cb565b604082019050919050565b6000613843601983614063565b915061384e8261461a565b602082019050919050565b6000613866602c83614063565b915061387182614643565b604082019050919050565b6000613889603883614063565b915061389482614692565b604082019050919050565b60006138ac602a83614063565b91506138b7826146e1565b604082019050919050565b60006138cf602983614063565b91506138da82614730565b604082019050919050565b60006138f2601d83614063565b91506138fd8261477f565b602082019050919050565b6000613915602083614063565b9150613920826147a8565b602082019050919050565b6000613938600883614063565b9150613943826147d1565b602082019050919050565b600061395b602183614063565b9150613966826147fa565b604082019050919050565b600061397e602c83614063565b915061398982614849565b604082019050919050565b60006139a1600583614074565b91506139ac82614898565b600582019050919050565b60006139c4602083614063565b91506139cf826148c1565b602082019050919050565b60006139e7602683614063565b91506139f2826148ea565b604082019050919050565b6000613a0a602983614063565b9150613a1582614939565b604082019050919050565b6000613a2e61011083614074565b9150613a3982614988565b61011082019050919050565b6000613a52602f83614063565b9150613a5d82614ae2565b604082019050919050565b6000613a75602183614063565b9150613a8082614b31565b604082019050919050565b6000613a98601d83614074565b9150613aa382614b80565b601d82019050919050565b6000613abb603183614063565b9150613ac682614ba9565b604082019050919050565b6000613ade602c83614063565b9150613ae982614bf8565b604082019050919050565b6000613b01602083614063565b9150613b0c82614c47565b602082019050919050565b613b20816141fe565b82525050565b613b2f816141fe565b82525050565b6000613b418285613733565b9150613b4d8284613733565b9150613b5882613994565b91508190509392505050565b6000613b6f82613a20565b9150819050919050565b6000613b8482613a8b565b9150613b908284613733565b915081905092915050565b6000602082019050613bb06000830184613645565b92915050565b6000608082019050613bcb6000830187613645565b613bd86020830186613645565b613be56040830185613b26565b8181036060830152613bf781846136c1565b905095945050505050565b60006020820190508181036000830152613c1c8184613654565b905092915050565b6000602082019050613c3960008301846136b2565b92915050565b60006020820190508181036000830152613c5981846136fa565b905092915050565b60006020820190508181036000830152613c7a81613764565b9050919050565b60006020820190508181036000830152613c9a81613787565b9050919050565b60006020820190508181036000830152613cba816137aa565b9050919050565b60006020820190508181036000830152613cda816137cd565b9050919050565b60006020820190508181036000830152613cfa816137f0565b9050919050565b60006020820190508181036000830152613d1a81613813565b9050919050565b60006020820190508181036000830152613d3a81613836565b9050919050565b60006020820190508181036000830152613d5a81613859565b9050919050565b60006020820190508181036000830152613d7a8161387c565b9050919050565b60006020820190508181036000830152613d9a8161389f565b9050919050565b60006020820190508181036000830152613dba816138c2565b9050919050565b60006020820190508181036000830152613dda816138e5565b9050919050565b60006020820190508181036000830152613dfa81613908565b9050919050565b60006020820190508181036000830152613e1a8161392b565b9050919050565b60006020820190508181036000830152613e3a8161394e565b9050919050565b60006020820190508181036000830152613e5a81613971565b9050919050565b60006020820190508181036000830152613e7a816139b7565b9050919050565b60006020820190508181036000830152613e9a816139da565b9050919050565b60006020820190508181036000830152613eba816139fd565b9050919050565b60006020820190508181036000830152613eda81613a45565b9050919050565b60006020820190508181036000830152613efa81613a68565b9050919050565b60006020820190508181036000830152613f1a81613aae565b9050919050565b60006020820190508181036000830152613f3a81613ad1565b9050919050565b60006020820190508181036000830152613f5a81613af4565b9050919050565b6000602082019050613f766000830184613b26565b92915050565b6000613f86613f97565b9050613f92828261427c565b919050565b6000604051905090565b600067ffffffffffffffff821115613fbc57613fbb614412565b5b613fc582614455565b9050602081019050919050565b600067ffffffffffffffff821115613fed57613fec614412565b5b613ff682614455565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061408a826141fe565b9150614095836141fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140ca576140c9614327565b5b828201905092915050565b60006140e0826141fe565b91506140eb836141fe565b9250826140fb576140fa614356565b5b828204905092915050565b6000614111826141fe565b915061411c836141fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561415557614154614327565b5b828202905092915050565b600061416b826141fe565b9150614176836141fe565b92508282101561418957614188614327565b5b828203905092915050565b600061419f826141de565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561423557808201518184015260208101905061421a565b83811115614244576000848401525b50505050565b6000600282049050600182168061426257607f821691505b6020821081141561427657614275614385565b5b50919050565b61428582614455565b810181811067ffffffffffffffff821117156142a4576142a3614412565b5b80604052505050565b60006142b8826141fe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142eb576142ea614327565b5b600182019050919050565b6000614301826141fe565b915061430c836141fe565b92508261431c5761431b614356565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f7b226e616d65223a20224261627920446f6f646c652041706573222c2022646560008201527f736372697074696f6e223a20224261627920446f6f646c65204170657320737560208201527f70706f72747320617274697374732c206d7573696369616e732c206163746f7260408201527f7320616e64207772697465727320746f2070757273756520746865697220647260608201527f65616d732c2062792070726f766964696e67206120736f75726365206f66207060808201527f61737369766520696e636f6d652e222c202273656c6c65725f6665655f62617360a08201527f69735f706f696e7473223a20313030302c20226665655f726563697069656e7460c08201527f223a20223078333434363536363465323039366541434537463864363238373460e08201527f6145384232364562363362356639227d0000000000000000000000000000000061010082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b614c7981614194565b8114614c8457600080fd5b50565b614c90816141a6565b8114614c9b57600080fd5b50565b614ca7816141b2565b8114614cb257600080fd5b50565b614cbe816141fe565b8114614cc957600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208281940739a87fa5e79351df4e4e0b11171325f10644ce10cb8457a5190d5f9b64736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d584b5764786f697a706236765841696347473469434456425a7352376863666559384d5867684b4651433732

Deployed Bytecode

0x60806040526004361061023b5760003560e01c8063743976a01161012e578063a22cb465116100ab578063db4568e21161006f578063db4568e214610888578063e8a3d485146108b3578063e985e9c5146108de578063e9c31a591461091b578063f2fde38b146109445761023b565b8063a22cb46514610791578063b88d4fde146107ba578063c02c1bcd146107e3578063c87b56dd1461080e578063c9e0f8461461084b5761023b565b806395d89b41116100f257806395d89b41146106cb57806398d5fdca146106f65780639d38fd2114610721578063a035b1fe1461074a578063a0712d68146107755761023b565b8063743976a0146105e657806377fc23c9146106115780638462151c1461063a5780638da5cb5b1461067757806391b7f5ed146106a25761023b565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104db578063518302271461051857806355f804b3146105435780636352211e1461056c57806370a08231146105a95761023b565b80632f745c591461041c5780633bd64968146104595780633cb51994146104705780633ccfd60b1461049b57806342842e0e146104b25761023b565b8063095ea7b311610203578063095ea7b31461034b57806318160ddd14610374578063200d2ed21461039f57806323b872dd146103ca5780632d6e71b6146103f35761023b565b806301ffc9a714610240578063050225ea1461027d57806305e58c86146102a657806306fdde03146102e3578063081812fc1461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061355d565b61096d565b6040516102749190613c24565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f919061351d565b6109e7565b005b3480156102b257600080fd5b506102cd60048036038101906102c8919061339a565b610abc565b6040516102da9190613c24565b60405180910390f35b3480156102ef57600080fd5b506102f8610b12565b6040516103059190613c3f565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190613600565b610ba4565b6040516103429190613b9b565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d919061351d565b610c29565b005b34801561038057600080fd5b50610389610d41565b6040516103969190613f61565b60405180910390f35b3480156103ab57600080fd5b506103b4610d4e565b6040516103c19190613f61565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190613407565b610d54565b005b3480156103ff57600080fd5b5061041a60048036038101906104159190613600565b610db4565b005b34801561042857600080fd5b50610443600480360381019061043e919061351d565b610e3a565b6040516104509190613f61565b60405180910390f35b34801561046557600080fd5b5061046e610edf565b005b34801561047c57600080fd5b50610485610f87565b6040516104929190613f61565b60405180910390f35b3480156104a757600080fd5b506104b0610f8d565b005b3480156104be57600080fd5b506104d960048036038101906104d49190613407565b611058565b005b3480156104e757600080fd5b5061050260048036038101906104fd9190613600565b611078565b60405161050f9190613f61565b60405180910390f35b34801561052457600080fd5b5061052d6110e9565b60405161053a9190613c24565b60405180910390f35b34801561054f57600080fd5b5061056a600480360381019061056591906135b7565b6110fc565b005b34801561057857600080fd5b50610593600480360381019061058e9190613600565b611192565b6040516105a09190613b9b565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb919061339a565b611244565b6040516105dd9190613f61565b60405180910390f35b3480156105f257600080fd5b506105fb6112fc565b6040516106089190613c3f565b60405180910390f35b34801561061d57600080fd5b50610638600480360381019061063391906135b7565b61138a565b005b34801561064657600080fd5b50610661600480360381019061065c919061339a565b611420565b60405161066e9190613c02565b60405180910390f35b34801561068357600080fd5b5061068c6114ce565b6040516106999190613b9b565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190613600565b6114f8565b005b3480156106d757600080fd5b506106e061157e565b6040516106ed9190613c3f565b60405180910390f35b34801561070257600080fd5b5061070b611610565b6040516107189190613f61565b60405180910390f35b34801561072d57600080fd5b5061074860048036038101906107439190613600565b61161a565b005b34801561075657600080fd5b5061075f6116a0565b60405161076c9190613f61565b60405180910390f35b61078f600480360381019061078a9190613600565b6116a6565b005b34801561079d57600080fd5b506107b860048036038101906107b391906134dd565b611973565b005b3480156107c657600080fd5b506107e160048036038101906107dc919061345a565b611af4565b005b3480156107ef57600080fd5b506107f8611b56565b6040516108059190613c3f565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190613600565b611be4565b6040516108429190613c3f565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d919061339a565b611d34565b60405161087f9190613c24565b60405180910390f35b34801561089457600080fd5b5061089d611d54565b6040516108aa9190613f61565b60405180910390f35b3480156108bf57600080fd5b506108c8611d5a565b6040516108d59190613c3f565b60405180910390f35b3480156108ea57600080fd5b50610905600480360381019061090091906133c7565b611daf565b6040516109129190613c24565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190613600565b611e43565b005b34801561095057600080fd5b5061096b6004803603810190610966919061339a565b611ec9565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109e057506109df82611fc1565b5b9050919050565b6109ef6120a3565b73ffffffffffffffffffffffffffffffffffffffff16610a0d6114ce565b73ffffffffffffffffffffffffffffffffffffffff1614610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a90613e61565b60405180910390fd5b60005b81811015610a9e57610a8b836001610a7c6120ab565b610a86919061407f565b6120ba565b8080610a96906142ad565b915050610a66565b508060116000828254610ab19190614160565b925050819055505050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b606060008054610b219061424a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4d9061424a565b8015610b9a5780601f10610b6f57610100808354040283529160200191610b9a565b820191906000526020600020905b815481529060010190602001808311610b7d57829003601f168201915b5050505050905090565b6000610baf826120d8565b610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590613e41565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c3482611192565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90613ee1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cc46120a3565b73ffffffffffffffffffffffffffffffffffffffff161480610cf35750610cf281610ced6120a3565b611daf565b5b610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613d61565b60405180910390fd5b610d3c8383612144565b505050565b6000600980549050905090565b600e5481565b610d65610d5f6120a3565b826121fd565b610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613f01565b60405180910390fd5b610daf8383836122db565b505050565b610dbc6120a3565b73ffffffffffffffffffffffffffffffffffffffff16610dda6114ce565b73ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790613e61565b60405180910390fd5b8060118190555050565b6000610e4583611244565b8210610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90613c81565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ee76120a3565b73ffffffffffffffffffffffffffffffffffffffff16610f056114ce565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613e61565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c5481565b610f956120a3565b73ffffffffffffffffffffffffffffffffffffffff16610fb36114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090613e61565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611054573d6000803e3d6000fd5b5050565b61107383838360405180602001604052806000815250611af4565b505050565b6000611082610d41565b82106110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90613f21565b60405180910390fd5b600982815481106110d7576110d66143e3565b5b90600052602060002001549050919050565b600f60009054906101000a900460ff1681565b6111046120a3565b73ffffffffffffffffffffffffffffffffffffffff166111226114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90613e61565b60405180910390fd5b806006908051906020019061118e9291906131ae565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290613da1565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90613d81565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600680546113099061424a565b80601f01602080910402602001604051908101604052809291908181526020018280546113359061424a565b80156113825780601f1061135757610100808354040283529160200191611382565b820191906000526020600020905b81548152906001019060200180831161136557829003601f168201915b505050505081565b6113926120a3565b73ffffffffffffffffffffffffffffffffffffffff166113b06114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613e61565b60405180910390fd5b806010908051906020019061141c9291906131ae565b5050565b6060600061142d83611244565b905060008167ffffffffffffffff81111561144b5761144a614412565b5b6040519080825280602002602001820160405280156114795781602001602082028036833780820191505090505b50905060005b828110156114c3576114918582610e3a565b8282815181106114a4576114a36143e3565b5b60200260200101818152505080806114bb906142ad565b91505061147f565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115006120a3565b73ffffffffffffffffffffffffffffffffffffffff1661151e6114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613e61565b60405180910390fd5b80600d8190555050565b60606001805461158d9061424a565b80601f01602080910402602001604051908101604052809291908181526020018280546115b99061424a565b80156116065780601f106115db57610100808354040283529160200191611606565b820191906000526020600020905b8154815290600101906020018083116115e957829003601f168201915b5050505050905090565b6000600d54905090565b6116226120a3565b73ffffffffffffffffffffffffffffffffffffffff166116406114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90613e61565b60405180910390fd5b80600c8190555050565b600d5481565b610d056116b1610d41565b106116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890613e01565b60405180910390fd5b6001600e5414611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90613f41565b60405180910390fd5b601154610d056117469190614160565b8161174f610d41565b611759919061407f565b111561179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613e81565b60405180910390fd5b600081116117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490613c61565b60405180910390fd5b600c54811115611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990613e21565b60405180910390fd5b3461189c601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611889576001836118849190614160565b61188b565b825b600d5461253790919063ffffffff16565b146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613dc1565b60405180910390fd5b60005b81811015611917576119043360016118f56120ab565b6118ff919061407f565b6120ba565b808061190f906142ad565b9150506118df565b506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61197b6120a3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090613d21565b60405180910390fd5b80600560006119f66120a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611aa36120a3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ae89190613c24565b60405180910390a35050565b611b05611aff6120a3565b836121fd565b611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b90613f01565b60405180910390fd5b611b508484848461254d565b50505050565b60108054611b639061424a565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8f9061424a565b8015611bdc5780601f10611bb157610100808354040283529160200191611bdc565b820191906000526020600020905b815481529060010190602001808311611bbf57829003601f168201915b505050505081565b6060611bef826120d8565b611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2590613ec1565b60405180910390fd5b6000611c386125a9565b9050600f60009054906101000a900460ff1615611ca0576000815111611c6d5760405180602001604052806000815250611c98565b80611c778461263b565b604051602001611c88929190613b35565b6040516020818303038152906040525b915050611d2f565b60108054611cad9061424a565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd99061424a565b8015611d265780601f10611cfb57610100808354040283529160200191611d26565b820191906000526020600020905b815481529060010190602001808311611d0957829003601f168201915b50505050509150505b919050565b60126020528060005260406000206000915054906101000a900460ff1681565b610d0581565b60606000611d84604051602001611d7090613b64565b60405160208183030381529060405261279c565b905080604051602001611d979190613b79565b60405160208183030381529060405290508091505090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e4b6120a3565b73ffffffffffffffffffffffffffffffffffffffff16611e696114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690613e61565b60405180910390fd5b80600e8190555050565b611ed16120a3565b73ffffffffffffffffffffffffffffffffffffffff16611eef6114ce565b73ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90613e61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac90613cc1565b60405180910390fd5b611fbe81612934565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061208c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061209c575061209b826129fa565b5b9050919050565b600033905090565b60006120b5610d41565b905090565b6120d4828260405180602001604052806000815250612a64565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121b783611192565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612208826120d8565b612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90613d41565b60405180910390fd5b600061225283611192565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122c157508373ffffffffffffffffffffffffffffffffffffffff166122a984610ba4565b73ffffffffffffffffffffffffffffffffffffffff16145b806122d257506122d18185611daf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122fb82611192565b73ffffffffffffffffffffffffffffffffffffffff1614612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890613ea1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b890613d01565b60405180910390fd5b6123cc838383612abf565b6123d7600082612144565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124279190614160565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247e919061407f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836125459190614106565b905092915050565b6125588484846122db565b61256484848484612bd3565b6125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90613ca1565b60405180910390fd5b50505050565b6060600680546125b89061424a565b80601f01602080910402602001604051908101604052809291908181526020018280546125e49061424a565b80156126315780601f1061260657610100808354040283529160200191612631565b820191906000526020600020905b81548152906001019060200180831161261457829003601f168201915b5050505050905090565b60606000821415612683576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612797565b600082905060005b600082146126b557808061269e906142ad565b915050600a826126ae91906140d5565b915061268b565b60008167ffffffffffffffff8111156126d1576126d0614412565b5b6040519080825280601f01601f1916602001820160405280156127035781602001600182028036833780820191505090505b5090505b600085146127905760018261271c9190614160565b9150600a8561272b91906142f6565b6030612737919061407f565b60f81b81838151811061274d5761274c6143e3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561278991906140d5565b9450612707565b8093505050505b919050565b606060008251905060008114156127c5576040518060200160405280600081525091505061292f565b600060036002836127d6919061407f565b6127e091906140d5565b60046127ec9190614106565b905060006020826127fd919061407f565b67ffffffffffffffff81111561281657612815614412565b5b6040519080825280601f01601f1916602001820160405280156128485781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614ccd604091399050600181016020830160005b868110156128ec5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612873565b506003860660018114612906576002811461291657612921565b613d3d60f01b6002830352612921565b603d60f81b60018303525b508484525050819450505050505b919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a6e8383612d6a565b612a7b6000848484612bd3565b612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190613ca1565b60405180910390fd5b505050565b612aca838383612f38565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b0d57612b0881612f3d565b612b4c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b4b57612b4a8382612f86565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b8f57612b8a81613086565b612bce565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bcd57612bcc828261311c565b5b5b505050565b6000612bf48473ffffffffffffffffffffffffffffffffffffffff1661319b565b15612d5d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c1d6120a3565b8786866040518563ffffffff1660e01b8152600401612c3f9493929190613bb6565b602060405180830381600087803b158015612c5957600080fd5b505af1925050508015612c8a57506040513d601f19601f82011682018060405250810190612c87919061358a565b60015b612d0d573d8060008114612cba576040519150601f19603f3d011682016040523d82523d6000602084013e612cbf565b606091505b50600081511415612d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfc90613ca1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d62565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd190613de1565b60405180910390fd5b612de3816120d8565b15612e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1a90613ce1565b60405180910390fd5b612e2f60008383612abf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7f919061407f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f9384611244565b612f9d9190614160565b9050600060086000848152602001908152602001600020549050818114613015576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061309a9190614160565b90506000600a60008481526020019081526020016000205490506000600983815481106130ca576130c96143e3565b5b90600052602060002001549050600a6000858152602001908152602001600020600090556009805480613100576130ff6143b4565b5b6001900381819060005260206000200160009055905550505050565b600061312783611244565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546131ba9061424a565b90600052602060002090601f0160209004810192826131dc5760008555613223565b82601f106131f557805160ff1916838001178555613223565b82800160010185558215613223579182015b82811115613222578251825591602001919060010190613207565b5b5090506132309190613234565b5090565b5b8082111561324d576000816000905550600101613235565b5090565b600061326461325f84613fa1565b613f7c565b9050828152602081018484840111156132805761327f614446565b5b61328b848285614208565b509392505050565b60006132a66132a184613fd2565b613f7c565b9050828152602081018484840111156132c2576132c1614446565b5b6132cd848285614208565b509392505050565b6000813590506132e481614c70565b92915050565b6000813590506132f981614c87565b92915050565b60008135905061330e81614c9e565b92915050565b60008151905061332381614c9e565b92915050565b600082601f83011261333e5761333d614441565b5b813561334e848260208601613251565b91505092915050565b600082601f83011261336c5761336b614441565b5b813561337c848260208601613293565b91505092915050565b60008135905061339481614cb5565b92915050565b6000602082840312156133b0576133af614450565b5b60006133be848285016132d5565b91505092915050565b600080604083850312156133de576133dd614450565b5b60006133ec858286016132d5565b92505060206133fd858286016132d5565b9150509250929050565b6000806000606084860312156134205761341f614450565b5b600061342e868287016132d5565b935050602061343f868287016132d5565b925050604061345086828701613385565b9150509250925092565b6000806000806080858703121561347457613473614450565b5b6000613482878288016132d5565b9450506020613493878288016132d5565b93505060406134a487828801613385565b925050606085013567ffffffffffffffff8111156134c5576134c461444b565b5b6134d187828801613329565b91505092959194509250565b600080604083850312156134f4576134f3614450565b5b6000613502858286016132d5565b9250506020613513858286016132ea565b9150509250929050565b6000806040838503121561353457613533614450565b5b6000613542858286016132d5565b925050602061355385828601613385565b9150509250929050565b60006020828403121561357357613572614450565b5b6000613581848285016132ff565b91505092915050565b6000602082840312156135a05761359f614450565b5b60006135ae84828501613314565b91505092915050565b6000602082840312156135cd576135cc614450565b5b600082013567ffffffffffffffff8111156135eb576135ea61444b565b5b6135f784828501613357565b91505092915050565b60006020828403121561361657613615614450565b5b600061362484828501613385565b91505092915050565b60006136398383613b17565b60208301905092915050565b61364e81614194565b82525050565b600061365f82614013565b6136698185614041565b935061367483614003565b8060005b838110156136a557815161368c888261362d565b975061369783614034565b925050600181019050613678565b5085935050505092915050565b6136bb816141a6565b82525050565b60006136cc8261401e565b6136d68185614052565b93506136e6818560208601614217565b6136ef81614455565b840191505092915050565b600061370582614029565b61370f8185614063565b935061371f818560208601614217565b61372881614455565b840191505092915050565b600061373e82614029565b6137488185614074565b9350613758818560208601614217565b80840191505092915050565b6000613771603383614063565b915061377c82614466565b604082019050919050565b6000613794602b83614063565b915061379f826144b5565b604082019050919050565b60006137b7603283614063565b91506137c282614504565b604082019050919050565b60006137da602683614063565b91506137e582614553565b604082019050919050565b60006137fd601c83614063565b9150613808826145a2565b602082019050919050565b6000613820602483614063565b915061382b826145cb565b604082019050919050565b6000613843601983614063565b915061384e8261461a565b602082019050919050565b6000613866602c83614063565b915061387182614643565b604082019050919050565b6000613889603883614063565b915061389482614692565b604082019050919050565b60006138ac602a83614063565b91506138b7826146e1565b604082019050919050565b60006138cf602983614063565b91506138da82614730565b604082019050919050565b60006138f2601d83614063565b91506138fd8261477f565b602082019050919050565b6000613915602083614063565b9150613920826147a8565b602082019050919050565b6000613938600883614063565b9150613943826147d1565b602082019050919050565b600061395b602183614063565b9150613966826147fa565b604082019050919050565b600061397e602c83614063565b915061398982614849565b604082019050919050565b60006139a1600583614074565b91506139ac82614898565b600582019050919050565b60006139c4602083614063565b91506139cf826148c1565b602082019050919050565b60006139e7602683614063565b91506139f2826148ea565b604082019050919050565b6000613a0a602983614063565b9150613a1582614939565b604082019050919050565b6000613a2e61011083614074565b9150613a3982614988565b61011082019050919050565b6000613a52602f83614063565b9150613a5d82614ae2565b604082019050919050565b6000613a75602183614063565b9150613a8082614b31565b604082019050919050565b6000613a98601d83614074565b9150613aa382614b80565b601d82019050919050565b6000613abb603183614063565b9150613ac682614ba9565b604082019050919050565b6000613ade602c83614063565b9150613ae982614bf8565b604082019050919050565b6000613b01602083614063565b9150613b0c82614c47565b602082019050919050565b613b20816141fe565b82525050565b613b2f816141fe565b82525050565b6000613b418285613733565b9150613b4d8284613733565b9150613b5882613994565b91508190509392505050565b6000613b6f82613a20565b9150819050919050565b6000613b8482613a8b565b9150613b908284613733565b915081905092915050565b6000602082019050613bb06000830184613645565b92915050565b6000608082019050613bcb6000830187613645565b613bd86020830186613645565b613be56040830185613b26565b8181036060830152613bf781846136c1565b905095945050505050565b60006020820190508181036000830152613c1c8184613654565b905092915050565b6000602082019050613c3960008301846136b2565b92915050565b60006020820190508181036000830152613c5981846136fa565b905092915050565b60006020820190508181036000830152613c7a81613764565b9050919050565b60006020820190508181036000830152613c9a81613787565b9050919050565b60006020820190508181036000830152613cba816137aa565b9050919050565b60006020820190508181036000830152613cda816137cd565b9050919050565b60006020820190508181036000830152613cfa816137f0565b9050919050565b60006020820190508181036000830152613d1a81613813565b9050919050565b60006020820190508181036000830152613d3a81613836565b9050919050565b60006020820190508181036000830152613d5a81613859565b9050919050565b60006020820190508181036000830152613d7a8161387c565b9050919050565b60006020820190508181036000830152613d9a8161389f565b9050919050565b60006020820190508181036000830152613dba816138c2565b9050919050565b60006020820190508181036000830152613dda816138e5565b9050919050565b60006020820190508181036000830152613dfa81613908565b9050919050565b60006020820190508181036000830152613e1a8161392b565b9050919050565b60006020820190508181036000830152613e3a8161394e565b9050919050565b60006020820190508181036000830152613e5a81613971565b9050919050565b60006020820190508181036000830152613e7a816139b7565b9050919050565b60006020820190508181036000830152613e9a816139da565b9050919050565b60006020820190508181036000830152613eba816139fd565b9050919050565b60006020820190508181036000830152613eda81613a45565b9050919050565b60006020820190508181036000830152613efa81613a68565b9050919050565b60006020820190508181036000830152613f1a81613aae565b9050919050565b60006020820190508181036000830152613f3a81613ad1565b9050919050565b60006020820190508181036000830152613f5a81613af4565b9050919050565b6000602082019050613f766000830184613b26565b92915050565b6000613f86613f97565b9050613f92828261427c565b919050565b6000604051905090565b600067ffffffffffffffff821115613fbc57613fbb614412565b5b613fc582614455565b9050602081019050919050565b600067ffffffffffffffff821115613fed57613fec614412565b5b613ff682614455565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061408a826141fe565b9150614095836141fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140ca576140c9614327565b5b828201905092915050565b60006140e0826141fe565b91506140eb836141fe565b9250826140fb576140fa614356565b5b828204905092915050565b6000614111826141fe565b915061411c836141fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561415557614154614327565b5b828202905092915050565b600061416b826141fe565b9150614176836141fe565b92508282101561418957614188614327565b5b828203905092915050565b600061419f826141de565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561423557808201518184015260208101905061421a565b83811115614244576000848401525b50505050565b6000600282049050600182168061426257607f821691505b6020821081141561427657614275614385565b5b50919050565b61428582614455565b810181811067ffffffffffffffff821117156142a4576142a3614412565b5b80604052505050565b60006142b8826141fe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142eb576142ea614327565b5b600182019050919050565b6000614301826141fe565b915061430c836141fe565b92508261431c5761431b614356565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f7b226e616d65223a20224261627920446f6f646c652041706573222c2022646560008201527f736372697074696f6e223a20224261627920446f6f646c65204170657320737560208201527f70706f72747320617274697374732c206d7573696369616e732c206163746f7260408201527f7320616e64207772697465727320746f2070757273756520746865697220647260608201527f65616d732c2062792070726f766964696e67206120736f75726365206f66207060808201527f61737369766520696e636f6d652e222c202273656c6c65725f6665655f62617360a08201527f69735f706f696e7473223a20313030302c20226665655f726563697069656e7460c08201527f223a20223078333434363536363465323039366541434537463864363238373460e08201527f6145384232364562363362356639227d0000000000000000000000000000000061010082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b614c7981614194565b8114614c8457600080fd5b50565b614c90816141a6565b8114614c9b57600080fd5b50565b614ca7816141b2565b8114614cb257600080fd5b50565b614cbe816141fe565b8114614cc957600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208281940739a87fa5e79351df4e4e0b11171325f10644ce10cb8457a5190d5f9b64736f6c63430008070033

Deployed Bytecode Sourcemap

21423:4412:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18802:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22983:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22178:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12276:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13353:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12936:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19294:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21787:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14051:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22669:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19032:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22373:78;;;;;;;;;;;;;:::i;:::-;;21604:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24654:140;;;;;;;;;;;;;:::i;:::-;;14343:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19413:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21847:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22270:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12031:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11817:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11355:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22457:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24300:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10316:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22571:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12382:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23338:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22759:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21746:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23431:860;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13580:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14534:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21882:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24904:398;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22042:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21551:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25308:524;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13881:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23258:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10535:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18802:224;18904:4;18943:35;18928:50;;;:11;:50;;;;:90;;;;18982:36;19006:11;18982:23;:36::i;:::-;18928:90;18921:97;;18802:224;;;:::o;22983:164::-;10460:12;:10;:12::i;:::-;10449:23;;:7;:5;:7::i;:::-;:23;;;10441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23051:6:::1;23047:66;23063:1;23061;:3;23047:66;;;23084:29;23094:1;23111;23097:13;:11;:13::i;:::-;:15;;;;:::i;:::-;23084:9;:29::i;:::-;23066:3;;;;;:::i;:::-;;;;23047:66;;;;23138:1;23128:8;;:11;;;;;;;:::i;:::-;;;;;;;;22983:164:::0;;:::o;22178:86::-;22221:4;22244:9;:12;22254:1;22244:12;;;;;;;;;;;;;;;;;;;;;;;;;22237:19;;22178:86;;;:::o;12276:100::-;12330:13;12363:5;12356:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12276:100;:::o;13353:221::-;13429:7;13457:16;13465:7;13457;:16::i;:::-;13449:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13542:15;:24;13558:7;13542:24;;;;;;;;;;;;;;;;;;;;;13535:31;;13353:221;;;:::o;12936:411::-;13017:13;13033:23;13048:7;13033:14;:23::i;:::-;13017:39;;13081:5;13075:11;;:2;:11;;;;13067:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13175:5;13159:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;13184:37;13201:5;13208:12;:10;:12::i;:::-;13184:16;:37::i;:::-;13159:62;13137:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;13318:21;13327:2;13331:7;13318:8;:21::i;:::-;13006:341;12936:411;;:::o;19294:113::-;19355:7;19382:10;:17;;;;19375:24;;19294:113;:::o;21787:22::-;;;;:::o;14051:286::-;14193:41;14212:12;:10;:12::i;:::-;14226:7;14193:18;:41::i;:::-;14185:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14301:28;14311:4;14317:2;14321:7;14301:9;:28::i;:::-;14051:286;;;:::o;22669:84::-;10460:12;:10;:12::i;:::-;10449:23;;:7;:5;:7::i;:::-;:23;;;10441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22743:2:::1;22732:8;:13;;;;22669:84:::0;:::o;19032:256::-;19129:7;19165:23;19182:5;19165:16;:23::i;:::-;19157:5;:31;19149:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19254:12;:19;19267:5;19254:19;;;;;;;;;;;;;;;:26;19274:5;19254:26;;;;;;;;;;;;19247:33;;19032:256;;;;:::o;22373:78::-;10460:12;:10;:12::i;:::-;10449:23;;:7;:5;:7::i;:::-;:23;;;10441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22435:8:::1;;;;;;;;;;;22434:9;22423:8;;:20;;;;;;;;;;;;;;;;;;22373:78::o:0;21604:26::-;;;;:::o;24654:140::-;10460:12;:10;:12::i;:::-;10449:23;;:7;:5;:7::i;:::-;:23;;;10441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24702:12:::1;24717:21;24702:36;;24757:10;24749:28;;:37;24778:7;24749:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24691:103;24654:140::o:0;14343:185::-;14481:39;14498:4;14504:2;14508:7;14481:39;;;;;;;;;;;;:16;:39::i;:::-;14343:185;;;:::o;19413:233::-;19488:7;19524:30;:28;:30::i;:::-;19516:5;:38;19508:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19621:10;19632:5;19621:17;;;;;;;;:::i;:::-;;;;;;;;;;19614:24;;19413:233;;;:::o;21847:28::-;;;;;;;;;;;;;:::o;22270:97::-;10460:12;:10;:12::i;:::-;10449:23;;:7;:5;:7::i;:::-;:23;;;10441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22352:7:::1;22341:8;:18;;;;;;;;;;;;:::i;:::-;;22270:97:::0;:::o;12031:239::-;12103:7;12123:13;12139:7;:16;12147:7;12139:16;;;;;;;;;;;;;;;;;;;;;12123:32;;12191:1;12174:19;;:5;:19;;;;12166:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12257:5;12250:12;;;12031:239;;;:::o;11817:208::-;11889:7;11934:1;11917:19;;:5;:19;;;;11909:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12001:9;:16;12011:5;12001:16;;;;;;;;;;;;;;;;11994:23;;11817:208;;;:::o;11355:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22457:108::-;10460:12;:10;:12::i;:::-;10449:23;;:7;:5;:7::i;:::-;:23;;;10441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22550:7:::1;22534:13;:23;;;;;;;;;;;;:::i;:::-;;22457:108:::0;:::o;24300:346::-;24360:16;24389:13;24405:17;24415:6;24405:9;:17::i;:::-;24389:33;;24433:23;24473:5;24459:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24433:46;;24495:13;24490:125;24522:5;24514;:13;24490:125;;;24569:34;24589:6;24597:5;24569:19;:34::i;:::-;24553:6;24560:5;24553:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;24529:7;;;;;:::i;:::-;;;;24490:125;;;;24632:6;24625:13;;;;24300:346;;;:::o;10316:87::-;10362:7;10389:6;;;;;;;;;;;10382:13;;10316:87;:::o;22571:92::-;10460:12;:10;:12::i;:::-;10449:23;;:7;:5;:7::i;:::-;:23;;;10441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22646:9:::1;22638:5;:17;;;;22571:92:::0;:::o;12382:104::-;12438:13;12471:7;12464:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12382:104;:::o;23338:85::-;23379:7;23409:5;;23402:12;;23338:85;:::o;22759:98::-;10460:12;:10;:12::i;:::-;10449:23;;:7;:5;:7::i;:::-;:23;;;10441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22840:9:::1;22830;:19;;;;22759:98:::0;:::o;21746:33::-;;;;:::o;23431:860::-;21587:4;23191:13;:11;:13::i;:::-;:28;23183:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23519:1:::1;23509:6;;:11;23500:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;23626:8;;21587:4;23611:23;;;;:::i;:::-;23595:12;23579:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:55;;23570:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23714:1;23699:12;:16;23690:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23809:9;;23793:12;:25;;23784:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24085:9;24014:67;24025:9;:21;24035:10;24025:21;;;;;;;;;;;;;;;;;;;;;;;;;:54;;24078:1;24065:12;:14;;;;:::i;:::-;24025:54;;;24050:12;24025:54;24014:5;;:9;;:67;;;;:::i;:::-;:80;24005:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;24145:6;24140:105;24161:12;24157:1;:16;24140:105;;;24195:38;24205:10;24231:1;24217:13;:11;:13::i;:::-;:15;;;;:::i;:::-;24195:9;:38::i;:::-;24175:3;;;;;:::i;:::-;;;;24140:105;;;;24279:4;24255:9;:21;24265:10;24255:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23431:860:::0;:::o;13580:295::-;13695:12;:10;:12::i;:::-;13683:24;;:8;:24;;;;13675:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;13795:8;13750:18;:32;13769:12;:10;:12::i;:::-;13750:32;;;;;;;;;;;;;;;:42;13783:8;13750:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;13848:8;13819:48;;13834:12;:10;:12::i;:::-;13819:48;;;13858:8;13819:48;;;;;;:::i;:::-;;;;;;;;13580:295;;:::o;14534:328::-;14709:41;14728:12;:10;:12::i;:::-;14742:7;14709:18;:41::i;:::-;14701:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14815:39;14829:4;14835:2;14839:7;14848:5;14815:13;:39::i;:::-;14534:328;;;;:::o;21882:112::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24904:398::-;24969:13;25003:16;25011:7;25003;:16::i;:::-;24995:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25084:18;25105:9;:7;:9::i;:::-;25084:30;;25130:8;;;;;;;;;;;25127:167;;;25181:1;25166:4;25160:18;:22;:89;;;;;;;;;;;;;;;;;25209:4;25215:18;:7;:16;:18::i;:::-;25192:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25160:89;25153:96;;;;;25127:167;25281:13;25274:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24904:398;;;;:::o;22042:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;21551:40::-;21587:4;21551:40;:::o;25308:524::-;25352:13;25378:18;25399:322;25426:292;;;;;;;:::i;:::-;;;;;;;;;;;;;25399:13;:322::i;:::-;25378:343;;25796:4;25746:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;25732:70;;25820:4;25813:11;;;25308:524;:::o;13881:164::-;13978:4;14002:18;:25;14021:5;14002:25;;;;;;;;;;;;;;;:35;14028:8;14002:35;;;;;;;;;;;;;;;;;;;;;;;;;13995:42;;13881:164;;;;:::o;23258:74::-;10460:12;:10;:12::i;:::-;10449:23;;:7;:5;:7::i;:::-;:23;;;10441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23323:1:::1;23314:6;:10;;;;23258:74:::0;:::o;10535:192::-;10460:12;:10;:12::i;:::-;10449:23;;:7;:5;:7::i;:::-;:23;;;10441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10644:1:::1;10624:22;;:8;:22;;;;10616:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10700:19;10710:8;10700:9;:19::i;:::-;10535:192:::0;:::o;11506:305::-;11608:4;11660:25;11645:40;;;:11;:40;;;;:105;;;;11717:33;11702:48;;;:11;:48;;;;11645:105;:158;;;;11767:36;11791:11;11767:23;:36::i;:::-;11645:158;11625:178;;11506:305;;;:::o;9779:98::-;9832:7;9859:10;9852:17;;9779:98;:::o;24800:96::-;24845:4;24869:19;:17;:19::i;:::-;24862:26;;24800:96;:::o;15676:110::-;15752:26;15762:2;15766:7;15752:26;;;;;;;;;;;;:9;:26::i;:::-;15676:110;;:::o;15189:127::-;15254:4;15306:1;15278:30;;:7;:16;15286:7;15278:16;;;;;;;;;;;;;;;;;;;;;:30;;;;15271:37;;15189:127;;;:::o;17377:174::-;17479:2;17452:15;:24;17468:7;17452:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;17535:7;17531:2;17497:46;;17506:23;17521:7;17506:14;:23::i;:::-;17497:46;;;;;;;;;;;;17377:174;;:::o;15322:348::-;15415:4;15440:16;15448:7;15440;:16::i;:::-;15432:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15516:13;15532:23;15547:7;15532:14;:23::i;:::-;15516:39;;15585:5;15574:16;;:7;:16;;;:51;;;;15618:7;15594:31;;:20;15606:7;15594:11;:20::i;:::-;:31;;;15574:51;:87;;;;15629:32;15646:5;15653:7;15629:16;:32::i;:::-;15574:87;15566:96;;;15322:348;;;;:::o;16845:526::-;17004:4;16977:31;;:23;16992:7;16977:14;:23::i;:::-;:31;;;16969:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17087:1;17073:16;;:2;:16;;;;17065:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;17143:39;17164:4;17170:2;17174:7;17143:20;:39::i;:::-;17195:29;17212:1;17216:7;17195:8;:29::i;:::-;17256:1;17237:9;:15;17247:4;17237:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;17285:1;17268:9;:13;17278:2;17268:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;17316:2;17297:7;:16;17305:7;17297:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;17355:7;17351:2;17336:27;;17345:4;17336:27;;;;;;;;;;;;16845:526;;;:::o;1538:98::-;1596:7;1627:1;1623;:5;;;;:::i;:::-;1616:12;;1538:98;;;;:::o;14868:315::-;15025:28;15035:4;15041:2;15045:7;15025:9;:28::i;:::-;15072:48;15095:4;15101:2;15105:7;15114:5;15072:22;:48::i;:::-;15064:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;14868:315;;;;:::o;12831:99::-;12881:13;12914:8;12907:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12831:99;:::o;2673:534::-;2729:13;2770:1;2761:5;:10;2757:53;;;2788:10;;;;;;;;;;;;;;;;;;;;;2757:53;2820:12;2835:5;2820:20;;2851:14;2876:78;2891:1;2883:4;:9;2876:78;;2909:8;;;;;:::i;:::-;;;;2940:2;2932:10;;;;;:::i;:::-;;;2876:78;;;2964:19;2996:6;2986:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2964:39;;3014:154;3030:1;3021:5;:10;3014:154;;3058:1;3048:11;;;;;:::i;:::-;;;3125:2;3117:5;:10;;;;:::i;:::-;3104:2;:24;;;;:::i;:::-;3091:39;;3074:6;3081;3074:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3154:2;3145:11;;;;;:::i;:::-;;;3014:154;;;3192:6;3178:21;;;;;2673:534;;;;:::o;26031:1607::-;26089:13;26115:11;26129:4;:11;26115:25;;26162:1;26155:3;:8;26151:23;;;26165:9;;;;;;;;;;;;;;;;;26151:23;26226:18;26264:1;26259;26253:3;:7;;;;:::i;:::-;26252:13;;;;:::i;:::-;26247:1;:19;;;;:::i;:::-;26226:40;;26324:19;26369:2;26356:10;:15;;;;:::i;:::-;26346:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26324:48;;26385:18;26406:5;;;;;;;;;;;;;;;;;26385:26;;26475:1;26468:5;26464:13;26520:2;26512:6;26508:15;26571:1;26539:777;26594:3;26591:1;26588:10;26539:777;;;26649:1;26646;26642:9;26637:14;;26707:8;26702:1;26696:4;26692:12;26686:19;26682:34;26787:4;26779:5;26775:2;26771:14;26767:25;26757:8;26753:40;26747:47;26826:3;26823:1;26819:11;26812:18;;26917:4;26908;26900:5;26896:2;26892:14;26888:25;26878:8;26874:40;26868:47;26864:58;26859:3;26855:68;26848:75;;26955:3;26952:1;26948:11;26941:18;;27045:4;27036;27028:5;27025:1;27021:13;27017:24;27007:8;27003:39;26997:46;26993:57;26988:3;26984:67;26977:74;;27083:3;27080:1;27076:11;27069:18;;27165:4;27156;27149:5;27145:16;27135:8;27131:31;27125:38;27121:49;27116:3;27112:59;27105:66;;27205:3;27200;27196:13;27189:20;;27247:3;27236:9;27229:22;27299:1;27288:9;27284:17;27271:30;;26618:698;;26539:777;;;26543:44;27348:1;27343:3;27339:11;27369:1;27364:84;;;;27467:1;27462:82;;;;27332:212;;27364:84;27425:6;27420:3;27416:16;27412:1;27401:9;27397:17;27390:43;27364:84;;27462:82;27523:4;27518:3;27514:14;27510:1;27499:9;27495:17;27488:41;27332:212;;27575:10;27567:6;27560:26;26433:1164;;27623:6;27609:21;;;;;;26031:1607;;;;:::o;10735:173::-;10791:16;10810:6;;;;;;;;;;;10791:25;;10836:8;10827:6;;:17;;;;;;;;;;;;;;;;;;10891:8;10860:40;;10881:8;10860:40;;;;;;;;;;;;10780:128;10735:173;:::o;7891:157::-;7976:4;8015:25;8000:40;;;:11;:40;;;;7993:47;;7891:157;;;:::o;15792:321::-;15922:18;15928:2;15932:7;15922:5;:18::i;:::-;15973:54;16004:1;16008:2;16012:7;16021:5;15973:22;:54::i;:::-;15951:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;15792:321;;;:::o;19652:589::-;19796:45;19823:4;19829:2;19833:7;19796:26;:45::i;:::-;19874:1;19858:18;;:4;:18;;;19854:187;;;19893:40;19925:7;19893:31;:40::i;:::-;19854:187;;;19963:2;19955:10;;:4;:10;;;19951:90;;19982:47;20015:4;20021:7;19982:32;:47::i;:::-;19951:90;19854:187;20069:1;20055:16;;:2;:16;;;20051:183;;;20088:45;20125:7;20088:36;:45::i;:::-;20051:183;;;20161:4;20155:10;;:2;:10;;;20151:83;;20182:40;20210:2;20214:7;20182:27;:40::i;:::-;20151:83;20051:183;19652:589;;;:::o;17557:803::-;17712:4;17733:15;:2;:13;;;:15::i;:::-;17729:624;;;17785:2;17769:36;;;17806:12;:10;:12::i;:::-;17820:4;17826:7;17835:5;17769:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;17765:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18032:1;18015:6;:13;:18;18011:272;;;18058:60;;;;;;;;;;:::i;:::-;;;;;;;;18011:272;18233:6;18227:13;18218:6;18214:2;18210:15;18203:38;17765:533;17902:45;;;17892:55;;;:6;:55;;;;17885:62;;;;;17729:624;18337:4;18330:11;;17557:803;;;;;;;:::o;16119:382::-;16213:1;16199:16;;:2;:16;;;;16191:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16272:16;16280:7;16272;:16::i;:::-;16271:17;16263:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16334:45;16363:1;16367:2;16371:7;16334:20;:45::i;:::-;16409:1;16392:9;:13;16402:2;16392:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;16440:2;16421:7;:16;16429:7;16421:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;16485:7;16481:2;16460:33;;16477:1;16460:33;;;;;;;;;;;;16119:382;;:::o;18366:126::-;;;;:::o;20474:164::-;20578:10;:17;;;;20551:15;:24;20567:7;20551:24;;;;;;;;;;;:44;;;;20606:10;20622:7;20606:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20474:164;:::o;20644:440::-;20738:22;20788:1;20763:22;20780:4;20763:16;:22::i;:::-;:26;;;;:::i;:::-;20738:51;;20800:18;20821:17;:26;20839:7;20821:26;;;;;;;;;;;;20800:47;;20878:14;20864:10;:28;20860:119;;20909:19;20931:12;:18;20944:4;20931:18;;;;;;;;;;;;;;;:34;20950:14;20931:34;;;;;;;;;;;;20909:56;;20894:85;20860:119;20998:17;:26;21016:7;20998:26;;;;;;;;;;;20991:33;;;21042:12;:18;21055:4;21042:18;;;;;;;;;;;;;;;:34;21061:14;21042:34;;;;;;;;;;;21035:41;;;20725:359;;20644:440;;:::o;21090:328::-;21174:22;21219:1;21199:10;:17;;;;:21;;;;:::i;:::-;21174:46;;21231:18;21252:15;:24;21268:7;21252:24;;;;;;;;;;;;21231:45;;21289:19;21311:10;21322:14;21311:26;;;;;;;;:::i;:::-;;;;;;;;;;21289:48;;21359:15;:24;21375:7;21359:24;;;;;;;;;;;21352:31;;;21394:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21161:257;;;21090:328;:::o;20247:221::-;20332:14;20349:20;20366:2;20349:16;:20::i;:::-;20332:37;;20407:7;20380:12;:16;20393:2;20380:16;;;;;;;;;;;;;;;:24;20397:6;20380:24;;;;;;;;;;;:34;;;;20454:6;20425:17;:26;20443:7;20425:26;;;;;;;;;;;:35;;;;20321:147;20247:221;;:::o;4038:198::-;4098:4;4117:12;4184:7;4172:20;4164:28;;4227:1;4220:4;:8;4213:15;;;4038:198;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:179::-;7227:10;7248:46;7290:3;7282:6;7248:46;:::i;:::-;7326:4;7321:3;7317:14;7303:28;;7158:179;;;;:::o;7343:118::-;7430:24;7448:5;7430:24;:::i;:::-;7425:3;7418:37;7343:118;;:::o;7497:732::-;7616:3;7645:54;7693:5;7645:54;:::i;:::-;7715:86;7794:6;7789:3;7715:86;:::i;:::-;7708:93;;7825:56;7875:5;7825:56;:::i;:::-;7904:7;7935:1;7920:284;7945:6;7942:1;7939:13;7920:284;;;8021:6;8015:13;8048:63;8107:3;8092:13;8048:63;:::i;:::-;8041:70;;8134:60;8187:6;8134:60;:::i;:::-;8124:70;;7980:224;7967:1;7964;7960:9;7955:14;;7920:284;;;7924:14;8220:3;8213:10;;7621:608;;;7497:732;;;;:::o;8235:109::-;8316:21;8331:5;8316:21;:::i;:::-;8311:3;8304:34;8235:109;;:::o;8350:360::-;8436:3;8464:38;8496:5;8464:38;:::i;:::-;8518:70;8581:6;8576:3;8518:70;:::i;:::-;8511:77;;8597:52;8642:6;8637:3;8630:4;8623:5;8619:16;8597:52;:::i;:::-;8674:29;8696:6;8674:29;:::i;:::-;8669:3;8665:39;8658:46;;8440:270;8350:360;;;;:::o;8716:364::-;8804:3;8832:39;8865:5;8832:39;:::i;:::-;8887:71;8951:6;8946:3;8887:71;:::i;:::-;8880:78;;8967:52;9012:6;9007:3;9000:4;8993:5;8989:16;8967:52;:::i;:::-;9044:29;9066:6;9044:29;:::i;:::-;9039:3;9035:39;9028:46;;8808:272;8716:364;;;;:::o;9086:377::-;9192:3;9220:39;9253:5;9220:39;:::i;:::-;9275:89;9357:6;9352:3;9275:89;:::i;:::-;9268:96;;9373:52;9418:6;9413:3;9406:4;9399:5;9395:16;9373:52;:::i;:::-;9450:6;9445:3;9441:16;9434:23;;9196:267;9086:377;;;;:::o;9469:366::-;9611:3;9632:67;9696:2;9691:3;9632:67;:::i;:::-;9625:74;;9708:93;9797:3;9708:93;:::i;:::-;9826:2;9821:3;9817:12;9810:19;;9469:366;;;:::o;9841:::-;9983:3;10004:67;10068:2;10063:3;10004:67;:::i;:::-;9997:74;;10080:93;10169:3;10080:93;:::i;:::-;10198:2;10193:3;10189:12;10182:19;;9841:366;;;:::o;10213:::-;10355:3;10376:67;10440:2;10435:3;10376:67;:::i;:::-;10369:74;;10452:93;10541:3;10452:93;:::i;:::-;10570:2;10565:3;10561:12;10554:19;;10213:366;;;:::o;10585:::-;10727:3;10748:67;10812:2;10807:3;10748:67;:::i;:::-;10741:74;;10824:93;10913:3;10824:93;:::i;:::-;10942:2;10937:3;10933:12;10926:19;;10585:366;;;:::o;10957:::-;11099:3;11120:67;11184:2;11179:3;11120:67;:::i;:::-;11113:74;;11196:93;11285:3;11196:93;:::i;:::-;11314:2;11309:3;11305:12;11298:19;;10957:366;;;:::o;11329:::-;11471:3;11492:67;11556:2;11551:3;11492:67;:::i;:::-;11485:74;;11568:93;11657:3;11568:93;:::i;:::-;11686:2;11681:3;11677:12;11670:19;;11329:366;;;:::o;11701:::-;11843:3;11864:67;11928:2;11923:3;11864:67;:::i;:::-;11857:74;;11940:93;12029:3;11940:93;:::i;:::-;12058:2;12053:3;12049:12;12042:19;;11701:366;;;:::o;12073:::-;12215:3;12236:67;12300:2;12295:3;12236:67;:::i;:::-;12229:74;;12312:93;12401:3;12312:93;:::i;:::-;12430:2;12425:3;12421:12;12414:19;;12073:366;;;:::o;12445:::-;12587:3;12608:67;12672:2;12667:3;12608:67;:::i;:::-;12601:74;;12684:93;12773:3;12684:93;:::i;:::-;12802:2;12797:3;12793:12;12786:19;;12445:366;;;:::o;12817:::-;12959:3;12980:67;13044:2;13039:3;12980:67;:::i;:::-;12973:74;;13056:93;13145:3;13056:93;:::i;:::-;13174:2;13169:3;13165:12;13158:19;;12817:366;;;:::o;13189:::-;13331:3;13352:67;13416:2;13411:3;13352:67;:::i;:::-;13345:74;;13428:93;13517:3;13428:93;:::i;:::-;13546:2;13541:3;13537:12;13530:19;;13189:366;;;:::o;13561:::-;13703:3;13724:67;13788:2;13783:3;13724:67;:::i;:::-;13717:74;;13800:93;13889:3;13800:93;:::i;:::-;13918:2;13913:3;13909:12;13902:19;;13561:366;;;:::o;13933:::-;14075:3;14096:67;14160:2;14155:3;14096:67;:::i;:::-;14089:74;;14172:93;14261:3;14172:93;:::i;:::-;14290:2;14285:3;14281:12;14274:19;;13933:366;;;:::o;14305:365::-;14447:3;14468:66;14532:1;14527:3;14468:66;:::i;:::-;14461:73;;14543:93;14632:3;14543:93;:::i;:::-;14661:2;14656:3;14652:12;14645:19;;14305:365;;;:::o;14676:366::-;14818:3;14839:67;14903:2;14898:3;14839:67;:::i;:::-;14832:74;;14915:93;15004:3;14915:93;:::i;:::-;15033:2;15028:3;15024:12;15017:19;;14676:366;;;:::o;15048:::-;15190:3;15211:67;15275:2;15270:3;15211:67;:::i;:::-;15204:74;;15287:93;15376:3;15287:93;:::i;:::-;15405:2;15400:3;15396:12;15389:19;;15048:366;;;:::o;15420:400::-;15580:3;15601:84;15683:1;15678:3;15601:84;:::i;:::-;15594:91;;15694:93;15783:3;15694:93;:::i;:::-;15812:1;15807:3;15803:11;15796:18;;15420:400;;;:::o;15826:366::-;15968:3;15989:67;16053:2;16048:3;15989:67;:::i;:::-;15982:74;;16065:93;16154:3;16065:93;:::i;:::-;16183:2;16178:3;16174:12;16167:19;;15826:366;;;:::o;16198:::-;16340:3;16361:67;16425:2;16420:3;16361:67;:::i;:::-;16354:74;;16437:93;16526:3;16437:93;:::i;:::-;16555:2;16550:3;16546:12;16539:19;;16198:366;;;:::o;16570:::-;16712:3;16733:67;16797:2;16792:3;16733:67;:::i;:::-;16726:74;;16809:93;16898:3;16809:93;:::i;:::-;16927:2;16922:3;16918:12;16911:19;;16570:366;;;:::o;16942:404::-;17102:3;17123:86;17205:3;17200;17123:86;:::i;:::-;17116:93;;17218;17307:3;17218:93;:::i;:::-;17336:3;17331;17327:13;17320:20;;16942:404;;;:::o;17352:366::-;17494:3;17515:67;17579:2;17574:3;17515:67;:::i;:::-;17508:74;;17591:93;17680:3;17591:93;:::i;:::-;17709:2;17704:3;17700:12;17693:19;;17352:366;;;:::o;17724:::-;17866:3;17887:67;17951:2;17946:3;17887:67;:::i;:::-;17880:74;;17963:93;18052:3;17963:93;:::i;:::-;18081:2;18076:3;18072:12;18065:19;;17724:366;;;:::o;18096:402::-;18256:3;18277:85;18359:2;18354:3;18277:85;:::i;:::-;18270:92;;18371:93;18460:3;18371:93;:::i;:::-;18489:2;18484:3;18480:12;18473:19;;18096:402;;;:::o;18504:366::-;18646:3;18667:67;18731:2;18726:3;18667:67;:::i;:::-;18660:74;;18743:93;18832:3;18743:93;:::i;:::-;18861:2;18856:3;18852:12;18845:19;;18504:366;;;:::o;18876:::-;19018:3;19039:67;19103:2;19098:3;19039:67;:::i;:::-;19032:74;;19115:93;19204:3;19115:93;:::i;:::-;19233:2;19228:3;19224:12;19217:19;;18876:366;;;:::o;19248:::-;19390:3;19411:67;19475:2;19470:3;19411:67;:::i;:::-;19404:74;;19487:93;19576:3;19487:93;:::i;:::-;19605:2;19600:3;19596:12;19589:19;;19248:366;;;:::o;19620:108::-;19697:24;19715:5;19697:24;:::i;:::-;19692:3;19685:37;19620:108;;:::o;19734:118::-;19821:24;19839:5;19821:24;:::i;:::-;19816:3;19809:37;19734:118;;:::o;19858:701::-;20139:3;20161:95;20252:3;20243:6;20161:95;:::i;:::-;20154:102;;20273:95;20364:3;20355:6;20273:95;:::i;:::-;20266:102;;20385:148;20529:3;20385:148;:::i;:::-;20378:155;;20550:3;20543:10;;19858:701;;;;;:::o;20565:381::-;20750:3;20772:148;20916:3;20772:148;:::i;:::-;20765:155;;20937:3;20930:10;;20565:381;;;:::o;20952:541::-;21185:3;21207:148;21351:3;21207:148;:::i;:::-;21200:155;;21372:95;21463:3;21454:6;21372:95;:::i;:::-;21365:102;;21484:3;21477:10;;20952:541;;;;:::o;21499:222::-;21592:4;21630:2;21619:9;21615:18;21607:26;;21643:71;21711:1;21700:9;21696:17;21687:6;21643:71;:::i;:::-;21499:222;;;;:::o;21727:640::-;21922:4;21960:3;21949:9;21945:19;21937:27;;21974:71;22042:1;22031:9;22027:17;22018:6;21974:71;:::i;:::-;22055:72;22123:2;22112:9;22108:18;22099:6;22055:72;:::i;:::-;22137;22205:2;22194:9;22190:18;22181:6;22137:72;:::i;:::-;22256:9;22250:4;22246:20;22241:2;22230:9;22226:18;22219:48;22284:76;22355:4;22346:6;22284:76;:::i;:::-;22276:84;;21727:640;;;;;;;:::o;22373:373::-;22516:4;22554:2;22543:9;22539:18;22531:26;;22603:9;22597:4;22593:20;22589:1;22578:9;22574:17;22567:47;22631:108;22734:4;22725:6;22631:108;:::i;:::-;22623:116;;22373:373;;;;:::o;22752:210::-;22839:4;22877:2;22866:9;22862:18;22854:26;;22890:65;22952:1;22941:9;22937:17;22928:6;22890:65;:::i;:::-;22752:210;;;;:::o;22968:313::-;23081:4;23119:2;23108:9;23104:18;23096:26;;23168:9;23162:4;23158:20;23154:1;23143:9;23139:17;23132:47;23196:78;23269:4;23260:6;23196:78;:::i;:::-;23188:86;;22968:313;;;;:::o;23287:419::-;23453:4;23491:2;23480:9;23476:18;23468:26;;23540:9;23534:4;23530:20;23526:1;23515:9;23511:17;23504:47;23568:131;23694:4;23568:131;:::i;:::-;23560:139;;23287:419;;;:::o;23712:::-;23878:4;23916:2;23905:9;23901:18;23893:26;;23965:9;23959:4;23955:20;23951:1;23940:9;23936:17;23929:47;23993:131;24119:4;23993:131;:::i;:::-;23985:139;;23712:419;;;:::o;24137:::-;24303:4;24341:2;24330:9;24326:18;24318:26;;24390:9;24384:4;24380:20;24376:1;24365:9;24361:17;24354:47;24418:131;24544:4;24418:131;:::i;:::-;24410:139;;24137:419;;;:::o;24562:::-;24728:4;24766:2;24755:9;24751:18;24743:26;;24815:9;24809:4;24805:20;24801:1;24790:9;24786:17;24779:47;24843:131;24969:4;24843:131;:::i;:::-;24835:139;;24562:419;;;:::o;24987:::-;25153:4;25191:2;25180:9;25176:18;25168:26;;25240:9;25234:4;25230:20;25226:1;25215:9;25211:17;25204:47;25268:131;25394:4;25268:131;:::i;:::-;25260:139;;24987:419;;;:::o;25412:::-;25578:4;25616:2;25605:9;25601:18;25593:26;;25665:9;25659:4;25655:20;25651:1;25640:9;25636:17;25629:47;25693:131;25819:4;25693:131;:::i;:::-;25685:139;;25412:419;;;:::o;25837:::-;26003:4;26041:2;26030:9;26026:18;26018:26;;26090:9;26084:4;26080:20;26076:1;26065:9;26061:17;26054:47;26118:131;26244:4;26118:131;:::i;:::-;26110:139;;25837:419;;;:::o;26262:::-;26428:4;26466:2;26455:9;26451:18;26443:26;;26515:9;26509:4;26505:20;26501:1;26490:9;26486:17;26479:47;26543:131;26669:4;26543:131;:::i;:::-;26535:139;;26262:419;;;:::o;26687:::-;26853:4;26891:2;26880:9;26876:18;26868:26;;26940:9;26934:4;26930:20;26926:1;26915:9;26911:17;26904:47;26968:131;27094:4;26968:131;:::i;:::-;26960:139;;26687:419;;;:::o;27112:::-;27278:4;27316:2;27305:9;27301:18;27293:26;;27365:9;27359:4;27355:20;27351:1;27340:9;27336:17;27329:47;27393:131;27519:4;27393:131;:::i;:::-;27385:139;;27112:419;;;:::o;27537:::-;27703:4;27741:2;27730:9;27726:18;27718:26;;27790:9;27784:4;27780:20;27776:1;27765:9;27761:17;27754:47;27818:131;27944:4;27818:131;:::i;:::-;27810:139;;27537:419;;;:::o;27962:::-;28128:4;28166:2;28155:9;28151:18;28143:26;;28215:9;28209:4;28205:20;28201:1;28190:9;28186:17;28179:47;28243:131;28369:4;28243:131;:::i;:::-;28235:139;;27962:419;;;:::o;28387:::-;28553:4;28591:2;28580:9;28576:18;28568:26;;28640:9;28634:4;28630:20;28626:1;28615:9;28611:17;28604:47;28668:131;28794:4;28668:131;:::i;:::-;28660:139;;28387:419;;;:::o;28812:::-;28978:4;29016:2;29005:9;29001:18;28993:26;;29065:9;29059:4;29055:20;29051:1;29040:9;29036:17;29029:47;29093:131;29219:4;29093:131;:::i;:::-;29085:139;;28812:419;;;:::o;29237:::-;29403:4;29441:2;29430:9;29426:18;29418:26;;29490:9;29484:4;29480:20;29476:1;29465:9;29461:17;29454:47;29518:131;29644:4;29518:131;:::i;:::-;29510:139;;29237:419;;;:::o;29662:::-;29828:4;29866:2;29855:9;29851:18;29843:26;;29915:9;29909:4;29905:20;29901:1;29890:9;29886:17;29879:47;29943:131;30069:4;29943:131;:::i;:::-;29935:139;;29662:419;;;:::o;30087:::-;30253:4;30291:2;30280:9;30276:18;30268:26;;30340:9;30334:4;30330:20;30326:1;30315:9;30311:17;30304:47;30368:131;30494:4;30368:131;:::i;:::-;30360:139;;30087:419;;;:::o;30512:::-;30678:4;30716:2;30705:9;30701:18;30693:26;;30765:9;30759:4;30755:20;30751:1;30740:9;30736:17;30729:47;30793:131;30919:4;30793:131;:::i;:::-;30785:139;;30512:419;;;:::o;30937:::-;31103:4;31141:2;31130:9;31126:18;31118:26;;31190:9;31184:4;31180:20;31176:1;31165:9;31161:17;31154:47;31218:131;31344:4;31218:131;:::i;:::-;31210:139;;30937:419;;;:::o;31362:::-;31528:4;31566:2;31555:9;31551:18;31543:26;;31615:9;31609:4;31605:20;31601:1;31590:9;31586:17;31579:47;31643:131;31769:4;31643:131;:::i;:::-;31635:139;;31362:419;;;:::o;31787:::-;31953:4;31991:2;31980:9;31976:18;31968:26;;32040:9;32034:4;32030:20;32026:1;32015:9;32011:17;32004:47;32068:131;32194:4;32068:131;:::i;:::-;32060:139;;31787:419;;;:::o;32212:::-;32378:4;32416:2;32405:9;32401:18;32393:26;;32465:9;32459:4;32455:20;32451:1;32440:9;32436:17;32429:47;32493:131;32619:4;32493:131;:::i;:::-;32485:139;;32212:419;;;:::o;32637:::-;32803:4;32841:2;32830:9;32826:18;32818:26;;32890:9;32884:4;32880:20;32876:1;32865:9;32861:17;32854:47;32918:131;33044:4;32918:131;:::i;:::-;32910:139;;32637:419;;;:::o;33062:::-;33228:4;33266:2;33255:9;33251:18;33243:26;;33315:9;33309:4;33305:20;33301:1;33290:9;33286:17;33279:47;33343:131;33469:4;33343:131;:::i;:::-;33335:139;;33062:419;;;:::o;33487:222::-;33580:4;33618:2;33607:9;33603:18;33595:26;;33631:71;33699:1;33688:9;33684:17;33675:6;33631:71;:::i;:::-;33487:222;;;;:::o;33715:129::-;33749:6;33776:20;;:::i;:::-;33766:30;;33805:33;33833:4;33825:6;33805:33;:::i;:::-;33715:129;;;:::o;33850:75::-;33883:6;33916:2;33910:9;33900:19;;33850:75;:::o;33931:307::-;33992:4;34082:18;34074:6;34071:30;34068:56;;;34104:18;;:::i;:::-;34068:56;34142:29;34164:6;34142:29;:::i;:::-;34134:37;;34226:4;34220;34216:15;34208:23;;33931:307;;;:::o;34244:308::-;34306:4;34396:18;34388:6;34385:30;34382:56;;;34418:18;;:::i;:::-;34382:56;34456:29;34478:6;34456:29;:::i;:::-;34448:37;;34540:4;34534;34530:15;34522:23;;34244:308;;;:::o;34558:132::-;34625:4;34648:3;34640:11;;34678:4;34673:3;34669:14;34661:22;;34558:132;;;:::o;34696:114::-;34763:6;34797:5;34791:12;34781:22;;34696:114;;;:::o;34816:98::-;34867:6;34901:5;34895:12;34885:22;;34816:98;;;:::o;34920:99::-;34972:6;35006:5;35000:12;34990:22;;34920:99;;;:::o;35025:113::-;35095:4;35127;35122:3;35118:14;35110:22;;35025:113;;;:::o;35144:184::-;35243:11;35277:6;35272:3;35265:19;35317:4;35312:3;35308:14;35293:29;;35144:184;;;;:::o;35334:168::-;35417:11;35451:6;35446:3;35439:19;35491:4;35486:3;35482:14;35467:29;;35334:168;;;;:::o;35508:169::-;35592:11;35626:6;35621:3;35614:19;35666:4;35661:3;35657:14;35642:29;;35508:169;;;;:::o;35683:148::-;35785:11;35822:3;35807:18;;35683:148;;;;:::o;35837:305::-;35877:3;35896:20;35914:1;35896:20;:::i;:::-;35891:25;;35930:20;35948:1;35930:20;:::i;:::-;35925:25;;36084:1;36016:66;36012:74;36009:1;36006:81;36003:107;;;36090:18;;:::i;:::-;36003:107;36134:1;36131;36127:9;36120:16;;35837:305;;;;:::o;36148:185::-;36188:1;36205:20;36223:1;36205:20;:::i;:::-;36200:25;;36239:20;36257:1;36239:20;:::i;:::-;36234:25;;36278:1;36268:35;;36283:18;;:::i;:::-;36268:35;36325:1;36322;36318:9;36313:14;;36148:185;;;;:::o;36339:348::-;36379:7;36402:20;36420:1;36402:20;:::i;:::-;36397:25;;36436:20;36454:1;36436:20;:::i;:::-;36431:25;;36624:1;36556:66;36552:74;36549:1;36546:81;36541:1;36534:9;36527:17;36523:105;36520:131;;;36631:18;;:::i;:::-;36520:131;36679:1;36676;36672:9;36661:20;;36339:348;;;;:::o;36693:191::-;36733:4;36753:20;36771:1;36753:20;:::i;:::-;36748:25;;36787:20;36805:1;36787:20;:::i;:::-;36782:25;;36826:1;36823;36820:8;36817:34;;;36831:18;;:::i;:::-;36817:34;36876:1;36873;36869:9;36861:17;;36693:191;;;;:::o;36890:96::-;36927:7;36956:24;36974:5;36956:24;:::i;:::-;36945:35;;36890:96;;;:::o;36992:90::-;37026:7;37069:5;37062:13;37055:21;37044:32;;36992:90;;;:::o;37088:149::-;37124:7;37164:66;37157:5;37153:78;37142:89;;37088:149;;;:::o;37243:126::-;37280:7;37320:42;37313:5;37309:54;37298:65;;37243:126;;;:::o;37375:77::-;37412:7;37441:5;37430:16;;37375:77;;;:::o;37458:154::-;37542:6;37537:3;37532;37519:30;37604:1;37595:6;37590:3;37586:16;37579:27;37458:154;;;:::o;37618:307::-;37686:1;37696:113;37710:6;37707:1;37704:13;37696:113;;;37795:1;37790:3;37786:11;37780:18;37776:1;37771:3;37767:11;37760:39;37732:2;37729:1;37725:10;37720:15;;37696:113;;;37827:6;37824:1;37821:13;37818:101;;;37907:1;37898:6;37893:3;37889:16;37882:27;37818:101;37667:258;37618:307;;;:::o;37931:320::-;37975:6;38012:1;38006:4;38002:12;37992:22;;38059:1;38053:4;38049:12;38080:18;38070:81;;38136:4;38128:6;38124:17;38114:27;;38070:81;38198:2;38190:6;38187:14;38167:18;38164:38;38161:84;;;38217:18;;:::i;:::-;38161:84;37982:269;37931:320;;;:::o;38257:281::-;38340:27;38362:4;38340:27;:::i;:::-;38332:6;38328:40;38470:6;38458:10;38455:22;38434:18;38422:10;38419:34;38416:62;38413:88;;;38481:18;;:::i;:::-;38413:88;38521:10;38517:2;38510:22;38300:238;38257:281;;:::o;38544:233::-;38583:3;38606:24;38624:5;38606:24;:::i;:::-;38597:33;;38652:66;38645:5;38642:77;38639:103;;;38722:18;;:::i;:::-;38639:103;38769:1;38762:5;38758:13;38751:20;;38544:233;;;:::o;38783:176::-;38815:1;38832:20;38850:1;38832:20;:::i;:::-;38827:25;;38866:20;38884:1;38866:20;:::i;:::-;38861:25;;38905:1;38895:35;;38910:18;;:::i;:::-;38895:35;38951:1;38948;38944:9;38939:14;;38783:176;;;;:::o;38965:180::-;39013:77;39010:1;39003:88;39110:4;39107:1;39100:15;39134:4;39131:1;39124:15;39151:180;39199:77;39196:1;39189:88;39296:4;39293:1;39286:15;39320:4;39317:1;39310:15;39337:180;39385:77;39382:1;39375:88;39482:4;39479:1;39472:15;39506:4;39503:1;39496:15;39523:180;39571:77;39568:1;39561:88;39668:4;39665:1;39658:15;39692:4;39689:1;39682:15;39709:180;39757:77;39754:1;39747:88;39854:4;39851:1;39844:15;39878:4;39875:1;39868:15;39895:180;39943:77;39940:1;39933:88;40040:4;40037:1;40030:15;40064:4;40061:1;40054:15;40081:117;40190:1;40187;40180:12;40204:117;40313:1;40310;40303:12;40327:117;40436:1;40433;40426:12;40450:117;40559:1;40556;40549:12;40573:102;40614:6;40665:2;40661:7;40656:2;40649:5;40645:14;40641:28;40631:38;;40573:102;;;:::o;40681:238::-;40821:34;40817:1;40809:6;40805:14;40798:58;40890:21;40885:2;40877:6;40873:15;40866:46;40681:238;:::o;40925:230::-;41065:34;41061:1;41053:6;41049:14;41042:58;41134:13;41129:2;41121:6;41117:15;41110:38;40925:230;:::o;41161:237::-;41301:34;41297:1;41289:6;41285:14;41278:58;41370:20;41365:2;41357:6;41353:15;41346:45;41161:237;:::o;41404:225::-;41544:34;41540:1;41532:6;41528:14;41521:58;41613:8;41608:2;41600:6;41596:15;41589:33;41404:225;:::o;41635:178::-;41775:30;41771:1;41763:6;41759:14;41752:54;41635:178;:::o;41819:223::-;41959:34;41955:1;41947:6;41943:14;41936:58;42028:6;42023:2;42015:6;42011:15;42004:31;41819:223;:::o;42048:175::-;42188:27;42184:1;42176:6;42172:14;42165:51;42048:175;:::o;42229:231::-;42369:34;42365:1;42357:6;42353:14;42346:58;42438:14;42433:2;42425:6;42421:15;42414:39;42229:231;:::o;42466:243::-;42606:34;42602:1;42594:6;42590:14;42583:58;42675:26;42670:2;42662:6;42658:15;42651:51;42466:243;:::o;42715:229::-;42855:34;42851:1;42843:6;42839:14;42832:58;42924:12;42919:2;42911:6;42907:15;42900:37;42715:229;:::o;42950:228::-;43090:34;43086:1;43078:6;43074:14;43067:58;43159:11;43154:2;43146:6;43142:15;43135:36;42950:228;:::o;43184:179::-;43324:31;43320:1;43312:6;43308:14;43301:55;43184:179;:::o;43369:182::-;43509:34;43505:1;43497:6;43493:14;43486:58;43369:182;:::o;43557:158::-;43697:10;43693:1;43685:6;43681:14;43674:34;43557:158;:::o;43721:220::-;43861:34;43857:1;43849:6;43845:14;43838:58;43930:3;43925:2;43917:6;43913:15;43906:28;43721:220;:::o;43947:231::-;44087:34;44083:1;44075:6;44071:14;44064:58;44156:14;44151:2;44143:6;44139:15;44132:39;43947:231;:::o;44184:155::-;44324:7;44320:1;44312:6;44308:14;44301:31;44184:155;:::o;44345:182::-;44485:34;44481:1;44473:6;44469:14;44462:58;44345:182;:::o;44533:225::-;44673:34;44669:1;44661:6;44657:14;44650:58;44742:8;44737:2;44729:6;44725:15;44718:33;44533:225;:::o;44764:228::-;44904:34;44900:1;44892:6;44888:14;44881:58;44973:11;44968:2;44960:6;44956:15;44949:36;44764:228;:::o;44998:931::-;45138:66;45134:1;45126:6;45122:14;45115:90;45239:66;45234:2;45226:6;45222:15;45215:91;45340:34;45335:2;45327:6;45323:15;45316:59;45409:34;45404:2;45396:6;45392:15;45385:59;45479:34;45473:3;45465:6;45461:16;45454:60;45549:66;45543:3;45535:6;45531:16;45524:92;45651:66;45645:3;45637:6;45633:16;45626:92;45753:66;45747:3;45739:6;45735:16;45728:92;45855:66;45849:3;45841:6;45837:16;45830:92;44998:931;:::o;45935:234::-;46075:34;46071:1;46063:6;46059:14;46052:58;46144:17;46139:2;46131:6;46127:15;46120:42;45935:234;:::o;46175:220::-;46315:34;46311:1;46303:6;46299:14;46292:58;46384:3;46379:2;46371:6;46367:15;46360:28;46175:220;:::o;46401:179::-;46541:31;46537:1;46529:6;46525:14;46518:55;46401:179;:::o;46586:236::-;46726:34;46722:1;46714:6;46710:14;46703:58;46795:19;46790:2;46782:6;46778:15;46771:44;46586:236;:::o;46828:231::-;46968:34;46964:1;46956:6;46952:14;46945:58;47037:14;47032:2;47024:6;47020:15;47013:39;46828:231;:::o;47065:182::-;47205:34;47201:1;47193:6;47189:14;47182:58;47065:182;:::o;47253:122::-;47326:24;47344:5;47326:24;:::i;:::-;47319:5;47316:35;47306:63;;47365:1;47362;47355:12;47306:63;47253:122;:::o;47381:116::-;47451:21;47466:5;47451:21;:::i;:::-;47444:5;47441:32;47431:60;;47487:1;47484;47477:12;47431:60;47381:116;:::o;47503:120::-;47575:23;47592:5;47575:23;:::i;:::-;47568:5;47565:34;47555:62;;47613:1;47610;47603:12;47555:62;47503:120;:::o;47629:122::-;47702:24;47720:5;47702:24;:::i;:::-;47695:5;47692:35;47682:63;;47741:1;47738;47731:12;47682:63;47629:122;:::o

Swarm Source

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