ETH Price: $3,108.73 (-2.34%)

Token

Mars Punks (MP)
 

Overview

Max Total Supply

1,500 MP

Holders

648

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 MP
0x00737f564161809317809922fe57b24d0e3d8e43
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:
MarsPunks

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-14
*/

/**
 *Submitted for verification at Etherscan.io on 2021-12-11
*/

// SPDX-License-Identifier: UNLICENSED;

pragma solidity ^0.8.0;

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



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() {
        _setOwner(_msgSender());
    }

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}



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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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



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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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



abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    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 {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

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

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

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

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}



// a special whitelist that allows you to mint a certain ammount for no cost (just gas)  =>  DONE;
//  a "normal" whitelist
// presale (for whitelisted) 
// Also we want to have a reveal

contract MarsPunks is ERC721Enumerable, Ownable {

    using Strings for uint256;

    string _baseTokenURI;
    uint256 public _reserved = 50;
    uint256 private _price = 0.04 ether;
    bool public _paused = true;
    bool public _WLpaused = true;
    uint256 public limit = 10000;
    uint256 public maxPerTx = 5;
    
    uint256  public WL_limit = 3;
    mapping(address => bool) public WL; 
    mapping(address => uint) public WL_Mint;
    
    uint256  public SWL_limit = 1;
    mapping(address => bool) public SWL; 
    mapping(address => uint) public SWL_Mint; 
        
    constructor(string memory baseURI) ERC721("Mars Punks", "MP") {
        setBaseURI(baseURI);
        // fundWallet = _fundWallet;
    }

    function Mint(uint256 num) public payable {
        uint256 supply = totalSupply();
        require( !_paused,                              "Sale paused" );
        require( num <= maxPerTx,                       "You exceeds mint limit per transaction." );
        require( supply + num <= limit - _reserved,     "Exceeds maximum punks supply" );
        require( msg.value >= _price * num,             "Ether sent is not correct" );

        for(uint256 i; i < num; i++){
            _safeMint( msg.sender, supply + i );
        }
    }

    function giveAway(address[] memory _to, uint256[] memory _amount) external onlyOwner() {
        require( _to.length == _amount.length, "Entered data is invalid");
        for(uint i;  i<_amount.length; i++){
            minto(_to[i], _amount[i]);
        }
    }
    
    function minto (address _to, uint256 _amount) private {
        uint256 supply = totalSupply();
        require( _to != address(0),    "Invalid address found");
        require( _amount <= _reserved, "Exceeds reserved punk supply" );

        for(uint i; i<_amount; i++){
            _safeMint( _to, supply + i );
        }
        _reserved -= _amount;
    }
    
    function WHITELIST_MINT(uint256 num) public payable {
        uint256 supply = totalSupply();
        require( !_WLpaused,                                       "Sale paused" );
        require( WL[msg.sender] == true,                         "Only WHITELIST can mint" );
        require( supply + num <= limit - _reserved,              "Exceeds maximum PUNK supply" );
        require( msg.value >= _price * num,                      "Ether sent is not correct" );
        require( WL_Mint[msg.sender]  +  num <= WL_limit,        "Exceeds minting limit per tx");
        
        for(uint256 i; i < num; i++){
            _safeMint( msg.sender, supply + i );
        }
        WL_Mint[msg.sender] += num;
    }
    
    function SWL_mint(uint qwt) public payable {
        uint256 supply = totalSupply();
        require( !_WLpaused,                                      "Sale paused" );
        require( SWL[msg.sender] == true,                       "You are not allowed to mint from here");
        require( SWL_Mint[msg.sender]  +  qwt <=  SWL_limit ,   "You are exceeding SWL mint allowance");
        require( qwt  <=  SWL_limit,                            "Exceeds minting limit per tx");
        require( supply + qwt <= limit - _reserved,             "Exceeds maximum punks supply" );
        
        for(uint256 i; i < qwt; i++){
            _safeMint( msg.sender, supply + i );
        }
        
        SWL_Mint[msg.sender] += qwt;
    }
    
    function walletOfOwner(address _owner) public view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }
    
    // Just in case Eth does some crazy stuff
    function setPrice(uint256 _newPrice) public onlyOwner() {
        _price = _newPrice;
    }
 
    function setWL(address[] memory _address) public onlyOwner() {
        for(uint256 i; i<_address.length; i++){
            require(_address[i] != address(0), "Invalid address found");
            address tempAdd = _address[i];
            WL[tempAdd] = true;
        }
    }
 
    function setSWL(address[] memory _address) public onlyOwner() {
        for(uint256 i; i<_address.length; i++){
            require(_address[i] != address(0), "Invalid address found");
            address tempAdd = _address[i];
            SWL[tempAdd] = true;
        }
    }

    function setSWL_limit(uint256 _limit) public onlyOwner() {
        SWL_limit = _limit;
    }

    function setLimit(uint256 __limit) public onlyOwner() {
        limit = __limit;
    }

    function setMaxPerTx(uint256 __maxPerTx) public onlyOwner() {
        maxPerTx = __maxPerTx;
    }

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

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

    function getPrice() public view returns (uint256){
        return _price;
    }

    function pause() public onlyOwner {
        _paused = !_paused;
    }

    function WLpaused() public onlyOwner {
        _WLpaused = !_WLpaused;
    }



    address public wallet1 = 0x592A830d4883bBEF0fB5eF78eC2a8455F1EbAC4D;
    address public wallet2 = 0x24d38AF5790189902037d4b81242C3EC2739Ab71;
 
    function withdraw() public payable onlyOwner {
        uint256 _mars1 = (address(this).balance * 500) / 1000;  // 50%  
        uint256 _mars2 = (address(this).balance * 500) / 1000;  // 50%
 
        payable(wallet1).transfer(_mars1);
        payable(wallet2).transfer(_mars2);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"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":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"Mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"SWL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"SWL_Mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWL_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qwt","type":"uint256"}],"name":"SWL_mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"WHITELIST_MINT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"WL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"WL_Mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WL_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLpaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_WLpaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"giveAway","outputs":[],"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":"limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"__limit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__maxPerTx","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"setSWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setSWL_limit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"setWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallet1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526032600c55668e1bc9bf040000600d556001600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff021916908315150217905550612710600f5560056010556003601155600160145573592a830d4883bbef0fb5ef78ec2a8455f1ebac4d601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324d38af5790189902037d4b81242c3ec2739ab71601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200011657600080fd5b5060405162005f3038038062005f3083398181016040528101906200013c9190620004d9565b6040518060400160405280600a81526020017f4d6172732050756e6b73000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4d500000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001c0929190620003b7565b508060019080519060200190620001d9929190620003b7565b505050620001fc620001f06200021460201b60201c565b6200021c60201b60201c565b6200020d81620002e260201b60201c565b50620006c4565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002f26200021460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003186200038d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000371576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003689062000560565b60405180910390fd5b80600b908051906020019062000389929190620003b7565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003c59062000630565b90600052602060002090601f016020900481019282620003e9576000855562000435565b82601f106200040457805160ff191683800117855562000435565b8280016001018555821562000435579182015b828111156200043457825182559160200191906001019062000417565b5b50905062000444919062000448565b5090565b5b808211156200046357600081600090555060010162000449565b5090565b60006200047e6200047884620005b6565b62000582565b9050828152602081018484840111156200049757600080fd5b620004a4848285620005fa565b509392505050565b600082601f830112620004be57600080fd5b8151620004d084826020860162000467565b91505092915050565b600060208284031215620004ec57600080fd5b600082015167ffffffffffffffff8111156200050757600080fd5b6200051584828501620004ac565b91505092915050565b60006200052d602083620005e9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200057b816200051e565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620005ac57620005ab62000695565b5b8060405250919050565b600067ffffffffffffffff821115620005d457620005d362000695565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b838110156200061a578082015181840152602081019050620005fd565b838111156200062a576000848401525b50505050565b600060028204905060018216806200064957607f821691505b6020821081141562000660576200065f62000666565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61585c80620006d46000396000f3fe6080604052600436106102935760003560e01c80636aaa571d1161015a5780639b1ac328116100c1578063c6f6f2161161007a578063c6f6f216146109b8578063c87b56dd146109e1578063caa6e2d814610a1e578063e985e9c514610a5b578063f2fde38b14610a98578063f968adbe14610ac157610293565b80639b1ac328146108be578063a22cb465146108e7578063a4d66daf14610910578063b88d4fde1461093b578063bd40ac0a14610964578063c3f1d1851461098f57610293565b8063877816c011610113578063877816c0146107bb5780638da5cb5b146107f857806391b7f5ed1461082357806395d89b411461084c57806397f4c6101461087757806398d5fdca1461089357610293565b80636aaa571d146106e55780636de251d81461071057806370a0823114610739578063715018a6146107765780637f6e90931461078d5780638456cb59146107a457610293565b806327d060b9116101fe57806342842e0e116101b757806342842e0e1461059f578063438b6300146105c85780634f6ccce71461060557806355f804b314610642578063569dde651461066b5780636352211e146106a857610293565b806327d060b9146104ab57806327ea6f2b146104e85780632f745c59146105115780633557e38e1461054e57806335aacecd146105795780633ccfd60b1461059557610293565b806316c61ccc1161025057806316c61ccc146103ad57806318160ddd146103d85780631a026c961461040357806322a2eced1461042e578063233b4fa61461045757806323b872dd1461048257610293565b806301ffc9a71461029857806306fdde03146102d55780630788370314610300578063081812fc1461031c578063095ea7b3146103595780630b8d0a2814610382575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba91906141fa565b610aec565b6040516102cc9190614f09565b60405180910390f35b3480156102e157600080fd5b506102ea610b66565b6040516102f79190614f24565b60405180910390f35b61031a6004803603810190610315919061428d565b610bf8565b005b34801561032857600080fd5b50610343600480360381019061033e919061428d565b610d7e565b6040516103509190614e80565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190614111565b610e03565b005b34801561038e57600080fd5b50610397610f1b565b6040516103a49190614e80565b60405180910390f35b3480156103b957600080fd5b506103c2610f41565b6040516103cf9190614f09565b60405180910390f35b3480156103e457600080fd5b506103ed610f54565b6040516103fa9190615306565b60405180910390f35b34801561040f57600080fd5b50610418610f61565b6040516104259190614e80565b60405180910390f35b34801561043a57600080fd5b506104556004803603810190610450919061418e565b610f87565b005b34801561046357600080fd5b5061046c6110f5565b6040516104799190614f09565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a4919061400b565b611108565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190613fa6565b611168565b6040516104df9190615306565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061428d565b611180565b005b34801561051d57600080fd5b5061053860048036038101906105339190614111565b611206565b6040516105459190615306565b60405180910390f35b34801561055a57600080fd5b506105636112ab565b6040516105709190615306565b60405180910390f35b610593600480360381019061058e919061428d565b6112b1565b005b61059d61156a565b005b3480156105ab57600080fd5b506105c660048036038101906105c1919061400b565b6116fa565b005b3480156105d457600080fd5b506105ef60048036038101906105ea9190613fa6565b61171a565b6040516105fc9190614ee7565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061428d565b611814565b6040516106399190615306565b60405180910390f35b34801561064e57600080fd5b506106696004803603810190610664919061424c565b6118ab565b005b34801561067757600080fd5b50610692600480360381019061068d9190613fa6565b611941565b60405161069f9190615306565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca919061428d565b611959565b6040516106dc9190614e80565b60405180910390f35b3480156106f157600080fd5b506106fa611a0b565b6040516107079190615306565b60405180910390f35b34801561071c57600080fd5b506107376004803603810190610732919061414d565b611a11565b005b34801561074557600080fd5b50610760600480360381019061075b9190613fa6565b611bfe565b60405161076d9190615306565b60405180910390f35b34801561078257600080fd5b5061078b611cb6565b005b34801561079957600080fd5b506107a2611d3e565b005b3480156107b057600080fd5b506107b9611de6565b005b3480156107c757600080fd5b506107e260048036038101906107dd9190613fa6565b611e8e565b6040516107ef9190614f09565b60405180910390f35b34801561080457600080fd5b5061080d611eae565b60405161081a9190614e80565b60405180910390f35b34801561082f57600080fd5b5061084a6004803603810190610845919061428d565b611ed8565b005b34801561085857600080fd5b50610861611f5e565b60405161086e9190614f24565b60405180910390f35b610891600480360381019061088c919061428d565b611ff0565b005b34801561089f57600080fd5b506108a861229e565b6040516108b59190615306565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e0919061428d565b6122a8565b005b3480156108f357600080fd5b5061090e600480360381019061090991906140d5565b61232e565b005b34801561091c57600080fd5b506109256124af565b6040516109329190615306565b60405180910390f35b34801561094757600080fd5b50610962600480360381019061095d919061405a565b6124b5565b005b34801561097057600080fd5b50610979612517565b6040516109869190615306565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b1919061414d565b61251d565b005b3480156109c457600080fd5b506109df60048036038101906109da919061428d565b61270a565b005b3480156109ed57600080fd5b50610a086004803603810190610a03919061428d565b612790565b604051610a159190614f24565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a409190613fa6565b612837565b604051610a529190614f09565b60405180910390f35b348015610a6757600080fd5b50610a826004803603810190610a7d9190613fcf565b612857565b604051610a8f9190614f09565b60405180910390f35b348015610aa457600080fd5b50610abf6004803603810190610aba9190613fa6565b6128eb565b005b348015610acd57600080fd5b50610ad66129e3565b604051610ae39190615306565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5f5750610b5e826129e9565b5b9050919050565b606060008054610b7590615651565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba190615651565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050905090565b6000610c02610f54565b9050600e60009054906101000a900460ff1615610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b90614f66565b60405180910390fd5b601054821115610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090615026565b60405180910390fd5b600c54600f54610ca99190615567565b8282610cb59190615486565b1115610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906151c6565b60405180910390fd5b81600d54610d04919061550d565b341015610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90615266565b60405180910390fd5b60005b82811015610d7957610d66338284610d619190615486565b612acb565b8080610d7190615683565b915050610d49565b505050565b6000610d8982612ae9565b610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf906151a6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e0e82611959565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690615246565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e9e612b55565b73ffffffffffffffffffffffffffffffffffffffff161480610ecd5750610ecc81610ec7612b55565b612857565b5b610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0390615126565b60405180910390fd5b610f168383612b5d565b505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900460ff1681565b6000600880549050905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f8f612b55565b73ffffffffffffffffffffffffffffffffffffffff16610fad611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa906151e6565b60405180910390fd5b8051825114611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e906150a6565b60405180910390fd5b60005b81518110156110f0576110dd83828151811061108f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518383815181106110d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151612c16565b80806110e890615683565b91505061104a565b505050565b600e60019054906101000a900460ff1681565b611119611113612b55565b82612d29565b611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f906152a6565b60405180910390fd5b611163838383612e07565b505050565b60136020528060005260406000206000915090505481565b611188612b55565b73ffffffffffffffffffffffffffffffffffffffff166111a6611eae565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f3906151e6565b60405180910390fd5b80600f8190555050565b600061121183611bfe565b8210611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990614fa6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60115481565b60006112bb610f54565b9050600e60019054906101000a900460ff161561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614f66565b60405180910390fd5b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146113a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139790614f46565b60405180910390fd5b600c54600f546113b09190615567565b82826113bc9190615486565b11156113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f490614fe6565b60405180910390fd5b81600d5461140b919061550d565b34101561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144490615266565b60405180910390fd5b60115482601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461149b9190615486565b11156114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d3906150e6565b60405180910390fd5b60005b8281101561150f576114fc3382846114f79190615486565b612acb565b808061150790615683565b9150506114df565b5081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461155f9190615486565b925050819055505050565b611572612b55565b73ffffffffffffffffffffffffffffffffffffffff16611590611eae565b73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd906151e6565b60405180910390fd5b60006103e86101f4476115f9919061550d565b61160391906154dc565b905060006103e86101f447611618919061550d565b61162291906154dc565b9050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561168c573d6000803e3d6000fd5b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116f5573d6000803e3d6000fd5b505050565b611715838383604051806020016040528060008152506124b5565b505050565b6060600061172783611bfe565b905060008167ffffffffffffffff81111561176b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117995781602001602082028036833780820191505090505b50905060005b82811015611809576117b18582611206565b8282815181106117ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061180190615683565b91505061179f565b508092505050919050565b600061181e610f54565b821061185f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611856906152c6565b60405180910390fd5b60088281548110611899577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6118b3612b55565b73ffffffffffffffffffffffffffffffffffffffff166118d1611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e906151e6565b60405180910390fd5b80600b908051906020019061193d929190613c9e565b5050565b60166020528060005260406000206000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990615166565b60405180910390fd5b80915050919050565b600c5481565b611a19612b55565b73ffffffffffffffffffffffffffffffffffffffff16611a37611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a84906151e6565b60405180910390fd5b60005b8151811015611bfa57600073ffffffffffffffffffffffffffffffffffffffff16828281518110611aea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b40906152e6565b60405180910390fd5b6000828281518110611b84577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611bf290615683565b915050611a90565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690615146565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611cbe612b55565b73ffffffffffffffffffffffffffffffffffffffff16611cdc611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d29906151e6565b60405180910390fd5b611d3c6000613063565b565b611d46612b55565b73ffffffffffffffffffffffffffffffffffffffff16611d64611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db1906151e6565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b611dee612b55565b73ffffffffffffffffffffffffffffffffffffffff16611e0c611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e59906151e6565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60126020528060005260406000206000915054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ee0612b55565b73ffffffffffffffffffffffffffffffffffffffff16611efe611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b906151e6565b60405180910390fd5b80600d8190555050565b606060018054611f6d90615651565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9990615651565b8015611fe65780601f10611fbb57610100808354040283529160200191611fe6565b820191906000526020600020905b815481529060010190602001808311611fc957829003601f168201915b5050505050905090565b6000611ffa610f54565b9050600e60019054906101000a900460ff161561204c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204390614f66565b60405180910390fd5b60011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690615286565b60405180910390fd5b60145482601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461212d9190615486565b111561216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590615106565b60405180910390fd5b6014548211156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa906150e6565b60405180910390fd5b600c54600f546121c39190615567565b82826121cf9190615486565b1115612210576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612207906151c6565b60405180910390fd5b60005b828110156122435761223033828461222b9190615486565b612acb565b808061223b90615683565b915050612213565b5081601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122939190615486565b925050819055505050565b6000600d54905090565b6122b0612b55565b73ffffffffffffffffffffffffffffffffffffffff166122ce611eae565b73ffffffffffffffffffffffffffffffffffffffff1614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906151e6565b60405180910390fd5b8060148190555050565b612336612b55565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239b90615086565b60405180910390fd5b80600560006123b1612b55565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661245e612b55565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124a39190614f09565b60405180910390a35050565b600f5481565b6124c66124c0612b55565b83612d29565b612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc906152a6565b60405180910390fd5b61251184848484613129565b50505050565b60145481565b612525612b55565b73ffffffffffffffffffffffffffffffffffffffff16612543611eae565b73ffffffffffffffffffffffffffffffffffffffff1614612599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612590906151e6565b60405180910390fd5b60005b815181101561270657600073ffffffffffffffffffffffffffffffffffffffff168282815181106125f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c906152e6565b60405180910390fd5b6000828281518110612690577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806126fe90615683565b91505061259c565b5050565b612712612b55565b73ffffffffffffffffffffffffffffffffffffffff16612730611eae565b73ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d906151e6565b60405180910390fd5b8060108190555050565b606061279b82612ae9565b6127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d190615226565b60405180910390fd5b60006127e4613185565b90506000815111612804576040518060200160405280600081525061282f565b8061280e84613217565b60405160200161281f929190614e51565b6040516020818303038152906040525b915050919050565b60156020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6128f3612b55565b73ffffffffffffffffffffffffffffffffffffffff16612911611eae565b73ffffffffffffffffffffffffffffffffffffffff1614612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e906151e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce90615006565b60405180910390fd5b6129e081613063565b50565b60105481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612ab457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612ac45750612ac3826133c4565b5b9050919050565b612ae582826040518060200160405280600081525061342e565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612bd083611959565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612c20610f54565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c89906152e6565b60405180910390fd5b600c54821115612cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cce90614f86565b60405180910390fd5b60005b82811015612d0a57612cf7848284612cf29190615486565b612acb565b8080612d0290615683565b915050612cda565b5081600c6000828254612d1d9190615567565b92505081905550505050565b6000612d3482612ae9565b612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a906150c6565b60405180910390fd5b6000612d7e83611959565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ded57508373ffffffffffffffffffffffffffffffffffffffff16612dd584610d7e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612dfe5750612dfd8185612857565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e2782611959565b73ffffffffffffffffffffffffffffffffffffffff1614612e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7490615206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee490615066565b60405180910390fd5b612ef8838383613495565b612f03600082612b5d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f539190615567565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612faa9190615486565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613134848484612e07565b613140848484846135a9565b61317f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317690614fc6565b60405180910390fd5b50505050565b6060600b805461319490615651565b80601f01602080910402602001604051908101604052809291908181526020018280546131c090615651565b801561320d5780601f106131e25761010080835404028352916020019161320d565b820191906000526020600020905b8154815290600101906020018083116131f057829003601f168201915b5050505050905090565b6060600082141561325f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133bf565b600082905060005b6000821461329157808061327a90615683565b915050600a8261328a91906154dc565b9150613267565b60008167ffffffffffffffff8111156132d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133055781602001600182028036833780820191505090505b5090505b600085146133b85760018261331e9190615567565b9150600a8561332d91906156cc565b60306133399190615486565b60f81b818381518110613375577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133b191906154dc565b9450613309565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6134448360018461343f9190615486565b613740565b61345160008484846135a9565b613490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348790614fc6565b60405180910390fd5b505050565b6134a083838361390e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134e3576134de81613913565b613522565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461352157613520838261395c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135655761356081613ac9565b6135a4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146135a3576135a28282613c0c565b5b5b505050565b60006135ca8473ffffffffffffffffffffffffffffffffffffffff16613c8b565b15613733578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135f3612b55565b8786866040518563ffffffff1660e01b81526004016136159493929190614e9b565b602060405180830381600087803b15801561362f57600080fd5b505af192505050801561366057506040513d601f19601f8201168201806040525081019061365d9190614223565b60015b6136e3573d8060008114613690576040519150601f19603f3d011682016040523d82523d6000602084013e613695565b606091505b506000815114156136db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d290614fc6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613738565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a790615186565b60405180910390fd5b6137b981612ae9565b156137f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f090615046565b60405180910390fd5b61380560008383613495565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138559190615486565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161396984611bfe565b6139739190615567565b9050600060076000848152602001908152602001600020549050818114613a58576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613add9190615567565b9050600060096000848152602001908152602001600020549050600060088381548110613b33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613b7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613bf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613c1783611bfe565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613caa90615651565b90600052602060002090601f016020900481019282613ccc5760008555613d13565b82601f10613ce557805160ff1916838001178555613d13565b82800160010185558215613d13579182015b82811115613d12578251825591602001919060010190613cf7565b5b509050613d209190613d24565b5090565b5b80821115613d3d576000816000905550600101613d25565b5090565b6000613d54613d4f84615352565b615321565b90508083825260208201905082856020860282011115613d7357600080fd5b60005b85811015613da35781613d898882613e95565b845260208401935060208301925050600181019050613d76565b5050509392505050565b6000613dc0613dbb8461537e565b615321565b90508083825260208201905082856020860282011115613ddf57600080fd5b60005b85811015613e0f5781613df58882613f91565b845260208401935060208301925050600181019050613de2565b5050509392505050565b6000613e2c613e27846153aa565b615321565b905082815260208101848484011115613e4457600080fd5b613e4f84828561560f565b509392505050565b6000613e6a613e65846153da565b615321565b905082815260208101848484011115613e8257600080fd5b613e8d84828561560f565b509392505050565b600081359050613ea4816157ca565b92915050565b600082601f830112613ebb57600080fd5b8135613ecb848260208601613d41565b91505092915050565b600082601f830112613ee557600080fd5b8135613ef5848260208601613dad565b91505092915050565b600081359050613f0d816157e1565b92915050565b600081359050613f22816157f8565b92915050565b600081519050613f37816157f8565b92915050565b600082601f830112613f4e57600080fd5b8135613f5e848260208601613e19565b91505092915050565b600082601f830112613f7857600080fd5b8135613f88848260208601613e57565b91505092915050565b600081359050613fa08161580f565b92915050565b600060208284031215613fb857600080fd5b6000613fc684828501613e95565b91505092915050565b60008060408385031215613fe257600080fd5b6000613ff085828601613e95565b925050602061400185828601613e95565b9150509250929050565b60008060006060848603121561402057600080fd5b600061402e86828701613e95565b935050602061403f86828701613e95565b925050604061405086828701613f91565b9150509250925092565b6000806000806080858703121561407057600080fd5b600061407e87828801613e95565b945050602061408f87828801613e95565b93505060406140a087828801613f91565b925050606085013567ffffffffffffffff8111156140bd57600080fd5b6140c987828801613f3d565b91505092959194509250565b600080604083850312156140e857600080fd5b60006140f685828601613e95565b925050602061410785828601613efe565b9150509250929050565b6000806040838503121561412457600080fd5b600061413285828601613e95565b925050602061414385828601613f91565b9150509250929050565b60006020828403121561415f57600080fd5b600082013567ffffffffffffffff81111561417957600080fd5b61418584828501613eaa565b91505092915050565b600080604083850312156141a157600080fd5b600083013567ffffffffffffffff8111156141bb57600080fd5b6141c785828601613eaa565b925050602083013567ffffffffffffffff8111156141e457600080fd5b6141f085828601613ed4565b9150509250929050565b60006020828403121561420c57600080fd5b600061421a84828501613f13565b91505092915050565b60006020828403121561423557600080fd5b600061424384828501613f28565b91505092915050565b60006020828403121561425e57600080fd5b600082013567ffffffffffffffff81111561427857600080fd5b61428484828501613f67565b91505092915050565b60006020828403121561429f57600080fd5b60006142ad84828501613f91565b91505092915050565b60006142c28383614e33565b60208301905092915050565b6142d78161559b565b82525050565b60006142e88261541a565b6142f28185615448565b93506142fd8361540a565b8060005b8381101561432e57815161431588826142b6565b97506143208361543b565b925050600181019050614301565b5085935050505092915050565b614344816155ad565b82525050565b600061435582615425565b61435f8185615459565b935061436f81856020860161561e565b614378816157b9565b840191505092915050565b600061438e82615430565b614398818561546a565b93506143a881856020860161561e565b6143b1816157b9565b840191505092915050565b60006143c782615430565b6143d1818561547b565b93506143e181856020860161561e565b80840191505092915050565b60006143fa60178361546a565b91507f4f6e6c792057484954454c4953542063616e206d696e740000000000000000006000830152602082019050919050565b600061443a600b8361546a565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b600061447a601c8361546a565b91507f457863656564732072657365727665642070756e6b20737570706c79000000006000830152602082019050919050565b60006144ba602b8361546a565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061452060328361546a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614586601b8361546a565b91507f45786365656473206d6178696d756d2050554e4b20737570706c7900000000006000830152602082019050919050565b60006145c660268361546a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061462c60278361546a565b91507f596f752065786365656473206d696e74206c696d697420706572207472616e7360008301527f616374696f6e2e000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614692601c8361546a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006146d260248361546a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061473860198361546a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061477860178361546a565b91507f456e7465726564206461746120697320696e76616c69640000000000000000006000830152602082019050919050565b60006147b8602c8361546a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061481e601c8361546a565b91507f45786365656473206d696e74696e67206c696d697420706572207478000000006000830152602082019050919050565b600061485e60248361546a565b91507f596f752061726520657863656564696e672053574c206d696e7420616c6c6f7760008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148c460388361546a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061492a602a8361546a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061499060298361546a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006149f660208361546a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614a36602c8361546a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614a9c60058361547b565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000614adc601c8361546a565b91507f45786365656473206d6178696d756d2070756e6b7320737570706c79000000006000830152602082019050919050565b6000614b1c60208361546a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614b5c60298361546a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614bc2602f8361546a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614c2860218361546a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c8e60198361546a565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b6000614cce60258361546a565b91507f596f7520617265206e6f7420616c6c6f77656420746f206d696e742066726f6d60008301527f20686572650000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d3460318361546a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614d9a602c8361546a565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614e0060158361546a565b91507f496e76616c6964206164647265737320666f756e6400000000000000000000006000830152602082019050919050565b614e3c81615605565b82525050565b614e4b81615605565b82525050565b6000614e5d82856143bc565b9150614e6982846143bc565b9150614e7482614a8f565b91508190509392505050565b6000602082019050614e9560008301846142ce565b92915050565b6000608082019050614eb060008301876142ce565b614ebd60208301866142ce565b614eca6040830185614e42565b8181036060830152614edc818461434a565b905095945050505050565b60006020820190508181036000830152614f0181846142dd565b905092915050565b6000602082019050614f1e600083018461433b565b92915050565b60006020820190508181036000830152614f3e8184614383565b905092915050565b60006020820190508181036000830152614f5f816143ed565b9050919050565b60006020820190508181036000830152614f7f8161442d565b9050919050565b60006020820190508181036000830152614f9f8161446d565b9050919050565b60006020820190508181036000830152614fbf816144ad565b9050919050565b60006020820190508181036000830152614fdf81614513565b9050919050565b60006020820190508181036000830152614fff81614579565b9050919050565b6000602082019050818103600083015261501f816145b9565b9050919050565b6000602082019050818103600083015261503f8161461f565b9050919050565b6000602082019050818103600083015261505f81614685565b9050919050565b6000602082019050818103600083015261507f816146c5565b9050919050565b6000602082019050818103600083015261509f8161472b565b9050919050565b600060208201905081810360008301526150bf8161476b565b9050919050565b600060208201905081810360008301526150df816147ab565b9050919050565b600060208201905081810360008301526150ff81614811565b9050919050565b6000602082019050818103600083015261511f81614851565b9050919050565b6000602082019050818103600083015261513f816148b7565b9050919050565b6000602082019050818103600083015261515f8161491d565b9050919050565b6000602082019050818103600083015261517f81614983565b9050919050565b6000602082019050818103600083015261519f816149e9565b9050919050565b600060208201905081810360008301526151bf81614a29565b9050919050565b600060208201905081810360008301526151df81614acf565b9050919050565b600060208201905081810360008301526151ff81614b0f565b9050919050565b6000602082019050818103600083015261521f81614b4f565b9050919050565b6000602082019050818103600083015261523f81614bb5565b9050919050565b6000602082019050818103600083015261525f81614c1b565b9050919050565b6000602082019050818103600083015261527f81614c81565b9050919050565b6000602082019050818103600083015261529f81614cc1565b9050919050565b600060208201905081810360008301526152bf81614d27565b9050919050565b600060208201905081810360008301526152df81614d8d565b9050919050565b600060208201905081810360008301526152ff81614df3565b9050919050565b600060208201905061531b6000830184614e42565b92915050565b6000604051905081810181811067ffffffffffffffff821117156153485761534761578a565b5b8060405250919050565b600067ffffffffffffffff82111561536d5761536c61578a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156153995761539861578a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156153c5576153c461578a565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156153f5576153f461578a565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061549182615605565b915061549c83615605565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154d1576154d06156fd565b5b828201905092915050565b60006154e782615605565b91506154f283615605565b9250826155025761550161572c565b5b828204905092915050565b600061551882615605565b915061552383615605565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561555c5761555b6156fd565b5b828202905092915050565b600061557282615605565b915061557d83615605565b9250828210156155905761558f6156fd565b5b828203905092915050565b60006155a6826155e5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561563c578082015181840152602081019050615621565b8381111561564b576000848401525b50505050565b6000600282049050600182168061566957607f821691505b6020821081141561567d5761567c61575b565b5b50919050565b600061568e82615605565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156c1576156c06156fd565b5b600182019050919050565b60006156d782615605565b91506156e283615605565b9250826156f2576156f161572c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6157d38161559b565b81146157de57600080fd5b50565b6157ea816155ad565b81146157f557600080fd5b50565b615801816155b9565b811461580c57600080fd5b50565b61581881615605565b811461582357600080fd5b5056fea26469706673582212203a43ffd3b181907fc3517249acc493967a5c134af1a1428cac2ed30428d40ff664736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006368747470733a2f2f66696e616c672e6d7970696e6174612e636c6f75642f697066732f516d534131417245386f31574c45565858777976426842596866626b523672463155574a744e5732417158566b522f4d61727325323050756e6b2532302532330000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102935760003560e01c80636aaa571d1161015a5780639b1ac328116100c1578063c6f6f2161161007a578063c6f6f216146109b8578063c87b56dd146109e1578063caa6e2d814610a1e578063e985e9c514610a5b578063f2fde38b14610a98578063f968adbe14610ac157610293565b80639b1ac328146108be578063a22cb465146108e7578063a4d66daf14610910578063b88d4fde1461093b578063bd40ac0a14610964578063c3f1d1851461098f57610293565b8063877816c011610113578063877816c0146107bb5780638da5cb5b146107f857806391b7f5ed1461082357806395d89b411461084c57806397f4c6101461087757806398d5fdca1461089357610293565b80636aaa571d146106e55780636de251d81461071057806370a0823114610739578063715018a6146107765780637f6e90931461078d5780638456cb59146107a457610293565b806327d060b9116101fe57806342842e0e116101b757806342842e0e1461059f578063438b6300146105c85780634f6ccce71461060557806355f804b314610642578063569dde651461066b5780636352211e146106a857610293565b806327d060b9146104ab57806327ea6f2b146104e85780632f745c59146105115780633557e38e1461054e57806335aacecd146105795780633ccfd60b1461059557610293565b806316c61ccc1161025057806316c61ccc146103ad57806318160ddd146103d85780631a026c961461040357806322a2eced1461042e578063233b4fa61461045757806323b872dd1461048257610293565b806301ffc9a71461029857806306fdde03146102d55780630788370314610300578063081812fc1461031c578063095ea7b3146103595780630b8d0a2814610382575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba91906141fa565b610aec565b6040516102cc9190614f09565b60405180910390f35b3480156102e157600080fd5b506102ea610b66565b6040516102f79190614f24565b60405180910390f35b61031a6004803603810190610315919061428d565b610bf8565b005b34801561032857600080fd5b50610343600480360381019061033e919061428d565b610d7e565b6040516103509190614e80565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190614111565b610e03565b005b34801561038e57600080fd5b50610397610f1b565b6040516103a49190614e80565b60405180910390f35b3480156103b957600080fd5b506103c2610f41565b6040516103cf9190614f09565b60405180910390f35b3480156103e457600080fd5b506103ed610f54565b6040516103fa9190615306565b60405180910390f35b34801561040f57600080fd5b50610418610f61565b6040516104259190614e80565b60405180910390f35b34801561043a57600080fd5b506104556004803603810190610450919061418e565b610f87565b005b34801561046357600080fd5b5061046c6110f5565b6040516104799190614f09565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a4919061400b565b611108565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190613fa6565b611168565b6040516104df9190615306565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061428d565b611180565b005b34801561051d57600080fd5b5061053860048036038101906105339190614111565b611206565b6040516105459190615306565b60405180910390f35b34801561055a57600080fd5b506105636112ab565b6040516105709190615306565b60405180910390f35b610593600480360381019061058e919061428d565b6112b1565b005b61059d61156a565b005b3480156105ab57600080fd5b506105c660048036038101906105c1919061400b565b6116fa565b005b3480156105d457600080fd5b506105ef60048036038101906105ea9190613fa6565b61171a565b6040516105fc9190614ee7565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061428d565b611814565b6040516106399190615306565b60405180910390f35b34801561064e57600080fd5b506106696004803603810190610664919061424c565b6118ab565b005b34801561067757600080fd5b50610692600480360381019061068d9190613fa6565b611941565b60405161069f9190615306565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca919061428d565b611959565b6040516106dc9190614e80565b60405180910390f35b3480156106f157600080fd5b506106fa611a0b565b6040516107079190615306565b60405180910390f35b34801561071c57600080fd5b506107376004803603810190610732919061414d565b611a11565b005b34801561074557600080fd5b50610760600480360381019061075b9190613fa6565b611bfe565b60405161076d9190615306565b60405180910390f35b34801561078257600080fd5b5061078b611cb6565b005b34801561079957600080fd5b506107a2611d3e565b005b3480156107b057600080fd5b506107b9611de6565b005b3480156107c757600080fd5b506107e260048036038101906107dd9190613fa6565b611e8e565b6040516107ef9190614f09565b60405180910390f35b34801561080457600080fd5b5061080d611eae565b60405161081a9190614e80565b60405180910390f35b34801561082f57600080fd5b5061084a6004803603810190610845919061428d565b611ed8565b005b34801561085857600080fd5b50610861611f5e565b60405161086e9190614f24565b60405180910390f35b610891600480360381019061088c919061428d565b611ff0565b005b34801561089f57600080fd5b506108a861229e565b6040516108b59190615306565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e0919061428d565b6122a8565b005b3480156108f357600080fd5b5061090e600480360381019061090991906140d5565b61232e565b005b34801561091c57600080fd5b506109256124af565b6040516109329190615306565b60405180910390f35b34801561094757600080fd5b50610962600480360381019061095d919061405a565b6124b5565b005b34801561097057600080fd5b50610979612517565b6040516109869190615306565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b1919061414d565b61251d565b005b3480156109c457600080fd5b506109df60048036038101906109da919061428d565b61270a565b005b3480156109ed57600080fd5b50610a086004803603810190610a03919061428d565b612790565b604051610a159190614f24565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a409190613fa6565b612837565b604051610a529190614f09565b60405180910390f35b348015610a6757600080fd5b50610a826004803603810190610a7d9190613fcf565b612857565b604051610a8f9190614f09565b60405180910390f35b348015610aa457600080fd5b50610abf6004803603810190610aba9190613fa6565b6128eb565b005b348015610acd57600080fd5b50610ad66129e3565b604051610ae39190615306565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5f5750610b5e826129e9565b5b9050919050565b606060008054610b7590615651565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba190615651565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050905090565b6000610c02610f54565b9050600e60009054906101000a900460ff1615610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b90614f66565b60405180910390fd5b601054821115610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090615026565b60405180910390fd5b600c54600f54610ca99190615567565b8282610cb59190615486565b1115610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906151c6565b60405180910390fd5b81600d54610d04919061550d565b341015610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90615266565b60405180910390fd5b60005b82811015610d7957610d66338284610d619190615486565b612acb565b8080610d7190615683565b915050610d49565b505050565b6000610d8982612ae9565b610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf906151a6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e0e82611959565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690615246565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e9e612b55565b73ffffffffffffffffffffffffffffffffffffffff161480610ecd5750610ecc81610ec7612b55565b612857565b5b610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0390615126565b60405180910390fd5b610f168383612b5d565b505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900460ff1681565b6000600880549050905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f8f612b55565b73ffffffffffffffffffffffffffffffffffffffff16610fad611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa906151e6565b60405180910390fd5b8051825114611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e906150a6565b60405180910390fd5b60005b81518110156110f0576110dd83828151811061108f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518383815181106110d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151612c16565b80806110e890615683565b91505061104a565b505050565b600e60019054906101000a900460ff1681565b611119611113612b55565b82612d29565b611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f906152a6565b60405180910390fd5b611163838383612e07565b505050565b60136020528060005260406000206000915090505481565b611188612b55565b73ffffffffffffffffffffffffffffffffffffffff166111a6611eae565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f3906151e6565b60405180910390fd5b80600f8190555050565b600061121183611bfe565b8210611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990614fa6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60115481565b60006112bb610f54565b9050600e60019054906101000a900460ff161561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614f66565b60405180910390fd5b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146113a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139790614f46565b60405180910390fd5b600c54600f546113b09190615567565b82826113bc9190615486565b11156113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f490614fe6565b60405180910390fd5b81600d5461140b919061550d565b34101561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144490615266565b60405180910390fd5b60115482601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461149b9190615486565b11156114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d3906150e6565b60405180910390fd5b60005b8281101561150f576114fc3382846114f79190615486565b612acb565b808061150790615683565b9150506114df565b5081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461155f9190615486565b925050819055505050565b611572612b55565b73ffffffffffffffffffffffffffffffffffffffff16611590611eae565b73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd906151e6565b60405180910390fd5b60006103e86101f4476115f9919061550d565b61160391906154dc565b905060006103e86101f447611618919061550d565b61162291906154dc565b9050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561168c573d6000803e3d6000fd5b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116f5573d6000803e3d6000fd5b505050565b611715838383604051806020016040528060008152506124b5565b505050565b6060600061172783611bfe565b905060008167ffffffffffffffff81111561176b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117995781602001602082028036833780820191505090505b50905060005b82811015611809576117b18582611206565b8282815181106117ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061180190615683565b91505061179f565b508092505050919050565b600061181e610f54565b821061185f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611856906152c6565b60405180910390fd5b60088281548110611899577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6118b3612b55565b73ffffffffffffffffffffffffffffffffffffffff166118d1611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e906151e6565b60405180910390fd5b80600b908051906020019061193d929190613c9e565b5050565b60166020528060005260406000206000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990615166565b60405180910390fd5b80915050919050565b600c5481565b611a19612b55565b73ffffffffffffffffffffffffffffffffffffffff16611a37611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a84906151e6565b60405180910390fd5b60005b8151811015611bfa57600073ffffffffffffffffffffffffffffffffffffffff16828281518110611aea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b40906152e6565b60405180910390fd5b6000828281518110611b84577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611bf290615683565b915050611a90565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690615146565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611cbe612b55565b73ffffffffffffffffffffffffffffffffffffffff16611cdc611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d29906151e6565b60405180910390fd5b611d3c6000613063565b565b611d46612b55565b73ffffffffffffffffffffffffffffffffffffffff16611d64611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db1906151e6565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b611dee612b55565b73ffffffffffffffffffffffffffffffffffffffff16611e0c611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e59906151e6565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60126020528060005260406000206000915054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ee0612b55565b73ffffffffffffffffffffffffffffffffffffffff16611efe611eae565b73ffffffffffffffffffffffffffffffffffffffff1614611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b906151e6565b60405180910390fd5b80600d8190555050565b606060018054611f6d90615651565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9990615651565b8015611fe65780601f10611fbb57610100808354040283529160200191611fe6565b820191906000526020600020905b815481529060010190602001808311611fc957829003601f168201915b5050505050905090565b6000611ffa610f54565b9050600e60019054906101000a900460ff161561204c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204390614f66565b60405180910390fd5b60011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690615286565b60405180910390fd5b60145482601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461212d9190615486565b111561216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590615106565b60405180910390fd5b6014548211156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa906150e6565b60405180910390fd5b600c54600f546121c39190615567565b82826121cf9190615486565b1115612210576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612207906151c6565b60405180910390fd5b60005b828110156122435761223033828461222b9190615486565b612acb565b808061223b90615683565b915050612213565b5081601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122939190615486565b925050819055505050565b6000600d54905090565b6122b0612b55565b73ffffffffffffffffffffffffffffffffffffffff166122ce611eae565b73ffffffffffffffffffffffffffffffffffffffff1614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906151e6565b60405180910390fd5b8060148190555050565b612336612b55565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239b90615086565b60405180910390fd5b80600560006123b1612b55565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661245e612b55565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124a39190614f09565b60405180910390a35050565b600f5481565b6124c66124c0612b55565b83612d29565b612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc906152a6565b60405180910390fd5b61251184848484613129565b50505050565b60145481565b612525612b55565b73ffffffffffffffffffffffffffffffffffffffff16612543611eae565b73ffffffffffffffffffffffffffffffffffffffff1614612599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612590906151e6565b60405180910390fd5b60005b815181101561270657600073ffffffffffffffffffffffffffffffffffffffff168282815181106125f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c906152e6565b60405180910390fd5b6000828281518110612690577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806126fe90615683565b91505061259c565b5050565b612712612b55565b73ffffffffffffffffffffffffffffffffffffffff16612730611eae565b73ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d906151e6565b60405180910390fd5b8060108190555050565b606061279b82612ae9565b6127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d190615226565b60405180910390fd5b60006127e4613185565b90506000815111612804576040518060200160405280600081525061282f565b8061280e84613217565b60405160200161281f929190614e51565b6040516020818303038152906040525b915050919050565b60156020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6128f3612b55565b73ffffffffffffffffffffffffffffffffffffffff16612911611eae565b73ffffffffffffffffffffffffffffffffffffffff1614612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e906151e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce90615006565b60405180910390fd5b6129e081613063565b50565b60105481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612ab457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612ac45750612ac3826133c4565b5b9050919050565b612ae582826040518060200160405280600081525061342e565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612bd083611959565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612c20610f54565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c89906152e6565b60405180910390fd5b600c54821115612cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cce90614f86565b60405180910390fd5b60005b82811015612d0a57612cf7848284612cf29190615486565b612acb565b8080612d0290615683565b915050612cda565b5081600c6000828254612d1d9190615567565b92505081905550505050565b6000612d3482612ae9565b612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a906150c6565b60405180910390fd5b6000612d7e83611959565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ded57508373ffffffffffffffffffffffffffffffffffffffff16612dd584610d7e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612dfe5750612dfd8185612857565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e2782611959565b73ffffffffffffffffffffffffffffffffffffffff1614612e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7490615206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee490615066565b60405180910390fd5b612ef8838383613495565b612f03600082612b5d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f539190615567565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612faa9190615486565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613134848484612e07565b613140848484846135a9565b61317f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317690614fc6565b60405180910390fd5b50505050565b6060600b805461319490615651565b80601f01602080910402602001604051908101604052809291908181526020018280546131c090615651565b801561320d5780601f106131e25761010080835404028352916020019161320d565b820191906000526020600020905b8154815290600101906020018083116131f057829003601f168201915b5050505050905090565b6060600082141561325f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133bf565b600082905060005b6000821461329157808061327a90615683565b915050600a8261328a91906154dc565b9150613267565b60008167ffffffffffffffff8111156132d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133055781602001600182028036833780820191505090505b5090505b600085146133b85760018261331e9190615567565b9150600a8561332d91906156cc565b60306133399190615486565b60f81b818381518110613375577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133b191906154dc565b9450613309565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6134448360018461343f9190615486565b613740565b61345160008484846135a9565b613490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348790614fc6565b60405180910390fd5b505050565b6134a083838361390e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134e3576134de81613913565b613522565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461352157613520838261395c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135655761356081613ac9565b6135a4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146135a3576135a28282613c0c565b5b5b505050565b60006135ca8473ffffffffffffffffffffffffffffffffffffffff16613c8b565b15613733578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135f3612b55565b8786866040518563ffffffff1660e01b81526004016136159493929190614e9b565b602060405180830381600087803b15801561362f57600080fd5b505af192505050801561366057506040513d601f19601f8201168201806040525081019061365d9190614223565b60015b6136e3573d8060008114613690576040519150601f19603f3d011682016040523d82523d6000602084013e613695565b606091505b506000815114156136db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d290614fc6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613738565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a790615186565b60405180910390fd5b6137b981612ae9565b156137f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f090615046565b60405180910390fd5b61380560008383613495565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138559190615486565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161396984611bfe565b6139739190615567565b9050600060076000848152602001908152602001600020549050818114613a58576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613add9190615567565b9050600060096000848152602001908152602001600020549050600060088381548110613b33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613b7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613bf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613c1783611bfe565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613caa90615651565b90600052602060002090601f016020900481019282613ccc5760008555613d13565b82601f10613ce557805160ff1916838001178555613d13565b82800160010185558215613d13579182015b82811115613d12578251825591602001919060010190613cf7565b5b509050613d209190613d24565b5090565b5b80821115613d3d576000816000905550600101613d25565b5090565b6000613d54613d4f84615352565b615321565b90508083825260208201905082856020860282011115613d7357600080fd5b60005b85811015613da35781613d898882613e95565b845260208401935060208301925050600181019050613d76565b5050509392505050565b6000613dc0613dbb8461537e565b615321565b90508083825260208201905082856020860282011115613ddf57600080fd5b60005b85811015613e0f5781613df58882613f91565b845260208401935060208301925050600181019050613de2565b5050509392505050565b6000613e2c613e27846153aa565b615321565b905082815260208101848484011115613e4457600080fd5b613e4f84828561560f565b509392505050565b6000613e6a613e65846153da565b615321565b905082815260208101848484011115613e8257600080fd5b613e8d84828561560f565b509392505050565b600081359050613ea4816157ca565b92915050565b600082601f830112613ebb57600080fd5b8135613ecb848260208601613d41565b91505092915050565b600082601f830112613ee557600080fd5b8135613ef5848260208601613dad565b91505092915050565b600081359050613f0d816157e1565b92915050565b600081359050613f22816157f8565b92915050565b600081519050613f37816157f8565b92915050565b600082601f830112613f4e57600080fd5b8135613f5e848260208601613e19565b91505092915050565b600082601f830112613f7857600080fd5b8135613f88848260208601613e57565b91505092915050565b600081359050613fa08161580f565b92915050565b600060208284031215613fb857600080fd5b6000613fc684828501613e95565b91505092915050565b60008060408385031215613fe257600080fd5b6000613ff085828601613e95565b925050602061400185828601613e95565b9150509250929050565b60008060006060848603121561402057600080fd5b600061402e86828701613e95565b935050602061403f86828701613e95565b925050604061405086828701613f91565b9150509250925092565b6000806000806080858703121561407057600080fd5b600061407e87828801613e95565b945050602061408f87828801613e95565b93505060406140a087828801613f91565b925050606085013567ffffffffffffffff8111156140bd57600080fd5b6140c987828801613f3d565b91505092959194509250565b600080604083850312156140e857600080fd5b60006140f685828601613e95565b925050602061410785828601613efe565b9150509250929050565b6000806040838503121561412457600080fd5b600061413285828601613e95565b925050602061414385828601613f91565b9150509250929050565b60006020828403121561415f57600080fd5b600082013567ffffffffffffffff81111561417957600080fd5b61418584828501613eaa565b91505092915050565b600080604083850312156141a157600080fd5b600083013567ffffffffffffffff8111156141bb57600080fd5b6141c785828601613eaa565b925050602083013567ffffffffffffffff8111156141e457600080fd5b6141f085828601613ed4565b9150509250929050565b60006020828403121561420c57600080fd5b600061421a84828501613f13565b91505092915050565b60006020828403121561423557600080fd5b600061424384828501613f28565b91505092915050565b60006020828403121561425e57600080fd5b600082013567ffffffffffffffff81111561427857600080fd5b61428484828501613f67565b91505092915050565b60006020828403121561429f57600080fd5b60006142ad84828501613f91565b91505092915050565b60006142c28383614e33565b60208301905092915050565b6142d78161559b565b82525050565b60006142e88261541a565b6142f28185615448565b93506142fd8361540a565b8060005b8381101561432e57815161431588826142b6565b97506143208361543b565b925050600181019050614301565b5085935050505092915050565b614344816155ad565b82525050565b600061435582615425565b61435f8185615459565b935061436f81856020860161561e565b614378816157b9565b840191505092915050565b600061438e82615430565b614398818561546a565b93506143a881856020860161561e565b6143b1816157b9565b840191505092915050565b60006143c782615430565b6143d1818561547b565b93506143e181856020860161561e565b80840191505092915050565b60006143fa60178361546a565b91507f4f6e6c792057484954454c4953542063616e206d696e740000000000000000006000830152602082019050919050565b600061443a600b8361546a565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b600061447a601c8361546a565b91507f457863656564732072657365727665642070756e6b20737570706c79000000006000830152602082019050919050565b60006144ba602b8361546a565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061452060328361546a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614586601b8361546a565b91507f45786365656473206d6178696d756d2050554e4b20737570706c7900000000006000830152602082019050919050565b60006145c660268361546a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061462c60278361546a565b91507f596f752065786365656473206d696e74206c696d697420706572207472616e7360008301527f616374696f6e2e000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614692601c8361546a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006146d260248361546a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061473860198361546a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061477860178361546a565b91507f456e7465726564206461746120697320696e76616c69640000000000000000006000830152602082019050919050565b60006147b8602c8361546a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061481e601c8361546a565b91507f45786365656473206d696e74696e67206c696d697420706572207478000000006000830152602082019050919050565b600061485e60248361546a565b91507f596f752061726520657863656564696e672053574c206d696e7420616c6c6f7760008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148c460388361546a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061492a602a8361546a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061499060298361546a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006149f660208361546a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614a36602c8361546a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614a9c60058361547b565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000614adc601c8361546a565b91507f45786365656473206d6178696d756d2070756e6b7320737570706c79000000006000830152602082019050919050565b6000614b1c60208361546a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614b5c60298361546a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614bc2602f8361546a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614c2860218361546a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c8e60198361546a565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b6000614cce60258361546a565b91507f596f7520617265206e6f7420616c6c6f77656420746f206d696e742066726f6d60008301527f20686572650000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d3460318361546a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614d9a602c8361546a565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614e0060158361546a565b91507f496e76616c6964206164647265737320666f756e6400000000000000000000006000830152602082019050919050565b614e3c81615605565b82525050565b614e4b81615605565b82525050565b6000614e5d82856143bc565b9150614e6982846143bc565b9150614e7482614a8f565b91508190509392505050565b6000602082019050614e9560008301846142ce565b92915050565b6000608082019050614eb060008301876142ce565b614ebd60208301866142ce565b614eca6040830185614e42565b8181036060830152614edc818461434a565b905095945050505050565b60006020820190508181036000830152614f0181846142dd565b905092915050565b6000602082019050614f1e600083018461433b565b92915050565b60006020820190508181036000830152614f3e8184614383565b905092915050565b60006020820190508181036000830152614f5f816143ed565b9050919050565b60006020820190508181036000830152614f7f8161442d565b9050919050565b60006020820190508181036000830152614f9f8161446d565b9050919050565b60006020820190508181036000830152614fbf816144ad565b9050919050565b60006020820190508181036000830152614fdf81614513565b9050919050565b60006020820190508181036000830152614fff81614579565b9050919050565b6000602082019050818103600083015261501f816145b9565b9050919050565b6000602082019050818103600083015261503f8161461f565b9050919050565b6000602082019050818103600083015261505f81614685565b9050919050565b6000602082019050818103600083015261507f816146c5565b9050919050565b6000602082019050818103600083015261509f8161472b565b9050919050565b600060208201905081810360008301526150bf8161476b565b9050919050565b600060208201905081810360008301526150df816147ab565b9050919050565b600060208201905081810360008301526150ff81614811565b9050919050565b6000602082019050818103600083015261511f81614851565b9050919050565b6000602082019050818103600083015261513f816148b7565b9050919050565b6000602082019050818103600083015261515f8161491d565b9050919050565b6000602082019050818103600083015261517f81614983565b9050919050565b6000602082019050818103600083015261519f816149e9565b9050919050565b600060208201905081810360008301526151bf81614a29565b9050919050565b600060208201905081810360008301526151df81614acf565b9050919050565b600060208201905081810360008301526151ff81614b0f565b9050919050565b6000602082019050818103600083015261521f81614b4f565b9050919050565b6000602082019050818103600083015261523f81614bb5565b9050919050565b6000602082019050818103600083015261525f81614c1b565b9050919050565b6000602082019050818103600083015261527f81614c81565b9050919050565b6000602082019050818103600083015261529f81614cc1565b9050919050565b600060208201905081810360008301526152bf81614d27565b9050919050565b600060208201905081810360008301526152df81614d8d565b9050919050565b600060208201905081810360008301526152ff81614df3565b9050919050565b600060208201905061531b6000830184614e42565b92915050565b6000604051905081810181811067ffffffffffffffff821117156153485761534761578a565b5b8060405250919050565b600067ffffffffffffffff82111561536d5761536c61578a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156153995761539861578a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156153c5576153c461578a565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156153f5576153f461578a565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061549182615605565b915061549c83615605565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154d1576154d06156fd565b5b828201905092915050565b60006154e782615605565b91506154f283615605565b9250826155025761550161572c565b5b828204905092915050565b600061551882615605565b915061552383615605565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561555c5761555b6156fd565b5b828202905092915050565b600061557282615605565b915061557d83615605565b9250828210156155905761558f6156fd565b5b828203905092915050565b60006155a6826155e5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561563c578082015181840152602081019050615621565b8381111561564b576000848401525b50505050565b6000600282049050600182168061566957607f821691505b6020821081141561567d5761567c61575b565b5b50919050565b600061568e82615605565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156c1576156c06156fd565b5b600182019050919050565b60006156d782615605565b91506156e283615605565b9250826156f2576156f161572c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6157d38161559b565b81146157de57600080fd5b50565b6157ea816155ad565b81146157f557600080fd5b50565b615801816155b9565b811461580c57600080fd5b50565b61581881615605565b811461582357600080fd5b5056fea26469706673582212203a43ffd3b181907fc3517249acc493967a5c134af1a1428cac2ed30428d40ff664736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006368747470733a2f2f66696e616c672e6d7970696e6174612e636c6f75642f697066732f516d534131417245386f31574c45565858777976426842596866626b523672463155574a744e5732417158566b522f4d61727325323050756e6b2532302532330000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://finalg.mypinata.cloud/ipfs/QmSA1ArE8o1WLEVXXwyvBhBYhfbkR6rF1UWJtNW2AqXVkR/Mars%20Punk%20%23

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000063
Arg [2] : 68747470733a2f2f66696e616c672e6d7970696e6174612e636c6f75642f6970
Arg [3] : 66732f516d534131417245386f31574c45565858777976426842596866626b52
Arg [4] : 3672463155574a744e5732417158566b522f4d61727325323050756e6b253230
Arg [5] : 2532330000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

23189:5780:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19052:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12100:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23940:548;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13192:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12773:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28599:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23385:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19548:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28525:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24496:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23418:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13896:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23605:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27831:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19284:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23528:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25156:723;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28676:290;;;:::i;:::-;;14243:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26647:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19671:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28157:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23736:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11853:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23307:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27439:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11637:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2288:94;;;;;;;;;;;;;:::i;:::-;;28435:78;;;;;;;;;;;;;:::i;:::-;;28356:71;;;;;;;;;;;;;:::i;:::-;;23563:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2065:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27048:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12208:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25891:744;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28267:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27729:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13421:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23453:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14436:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23657:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27150:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27927:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12320:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23693:35;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13724:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2390:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23488:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19052:224;19154:4;19193:35;19178:50;;;:11;:50;;;;:90;;;;19232:36;19256:11;19232:23;:36::i;:::-;19178:90;19171:97;;19052:224;;;:::o;12100:100::-;12154:13;12187:5;12180:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12100:100;:::o;23940:548::-;23993:14;24010:13;:11;:13::i;:::-;23993:30;;24044:7;;;;;;;;;;;24043:8;24034:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24124:8;;24117:3;:15;;24108:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24243:9;;24235:5;;:17;;;;:::i;:::-;24228:3;24219:6;:12;;;;:::i;:::-;:33;;24210:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24332:3;24323:6;;:12;;;;:::i;:::-;24310:9;:25;;24301:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24395:9;24391:90;24410:3;24406:1;:7;24391:90;;;24434:35;24445:10;24466:1;24457:6;:10;;;;:::i;:::-;24434:9;:35::i;:::-;24415:3;;;;;:::i;:::-;;;;24391:90;;;;23940:548;;:::o;13192:221::-;13268:7;13296:16;13304:7;13296;:16::i;:::-;13288:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13381:15;:24;13397:7;13381:24;;;;;;;;;;;;;;;;;;;;;13374:31;;13192:221;;;:::o;12773:411::-;12854:13;12870:23;12885:7;12870:14;:23::i;:::-;12854:39;;12918:5;12912:11;;:2;:11;;;;12904:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13012:5;12996:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;13021:37;13038:5;13045:12;:10;:12::i;:::-;13021:16;:37::i;:::-;12996:62;12974:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;13155:21;13164:2;13168:7;13155:8;:21::i;:::-;12773:411;;;:::o;28599:67::-;;;;;;;;;;;;;:::o;23385:26::-;;;;;;;;;;;;;:::o;19548:113::-;19609:7;19636:10;:17;;;;19629:24;;19548:113;:::o;28525:67::-;;;;;;;;;;;;;:::o;24496:268::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24617:7:::1;:14;24603:3;:10;:28;24594:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24674:6;24670:87;24685:7;:14;24683:1;:16;24670:87;;;24720:25;24726:3;24730:1;24726:6;;;;;;;;;;;;;;;;;;;;;;24734:7;24742:1;24734:10;;;;;;;;;;;;;;;;;;;;;;24720:5;:25::i;:::-;24701:3;;;;;:::i;:::-;;;;24670:87;;;;24496:268:::0;;:::o;23418:28::-;;;;;;;;;;;;;:::o;13896:339::-;14091:41;14110:12;:10;:12::i;:::-;14124:7;14091:18;:41::i;:::-;14083:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14199:28;14209:4;14215:2;14219:7;14199:9;:28::i;:::-;13896:339;;;:::o;23605:39::-;;;;;;;;;;;;;;;;;:::o;27831:88::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27904:7:::1;27896:5;:15;;;;27831:88:::0;:::o;19284:256::-;19381:7;19417:23;19434:5;19417:16;:23::i;:::-;19409:5;:31;19401:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19506:12;:19;19519:5;19506:19;;;;;;;;;;;;;;;:26;19526:5;19506:26;;;;;;;;;;;;19499:33;;19284:256;;;;:::o;23528:28::-;;;;:::o;25156:723::-;25219:14;25236:13;:11;:13::i;:::-;25219:30;;25270:9;;;;;;;;;;;25269:10;25260:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25372:4;25354:22;;:2;:14;25357:10;25354:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;25345:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;25473:9;;25465:5;;:17;;;;:::i;:::-;25458:3;25449:6;:12;;;;:::i;:::-;:33;;25440:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;25570:3;25561:6;;:12;;;;:::i;:::-;25548:9;:25;;25539:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;25676:8;;25669:3;25645:7;:19;25653:10;25645:19;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;:39;;25636:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;25749:9;25745:90;25764:3;25760:1;:7;25745:90;;;25788:35;25799:10;25820:1;25811:6;:10;;;;:::i;:::-;25788:9;:35::i;:::-;25769:3;;;;;:::i;:::-;;;;25745:90;;;;25868:3;25845:7;:19;25853:10;25845:19;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;25156:723;;:::o;28676:290::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28732:14:::1;28781:4;28774:3;28750:21;:27;;;;:::i;:::-;28749:36;;;;:::i;:::-;28732:53;;28806:14;28855:4;28848:3;28824:21;:27;;;;:::i;:::-;28823:36;;;;:::i;:::-;28806:53;;28889:7;;;;;;;;;;;28881:25;;:33;28907:6;28881:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28933:7;;;;;;;;;;;28925:25;;:33;28951:6;28925:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;2271:1;;28676:290::o:0;14243:185::-;14381:39;14398:4;14404:2;14408:7;14381:39;;;;;;;;;;;;:16;:39::i;:::-;14243:185;;;:::o;26647:342::-;26706:16;26735:18;26756:17;26766:6;26756:9;:17::i;:::-;26735:38;;26786:25;26828:10;26814:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26786:53;;26854:9;26850:106;26869:10;26865:1;:14;26850:106;;;26914:30;26934:6;26942:1;26914:19;:30::i;:::-;26900:8;26909:1;26900:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;26881:3;;;;;:::i;:::-;;;;26850:106;;;;26973:8;26966:15;;;;26647:342;;;:::o;19671:233::-;19746:7;19782:30;:28;:30::i;:::-;19774:5;:38;19766:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19879:10;19890:5;19879:17;;;;;;;;;;;;;;;;;;;;;;;;19872:24;;19671:233;;;:::o;28157:102::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28244:7:::1;28228:13;:23;;;;;;;;;;;;:::i;:::-;;28157:102:::0;:::o;23736:40::-;;;;;;;;;;;;;;;;;:::o;11853:239::-;11925:7;11945:13;11961:7;:16;11969:7;11961:16;;;;;;;;;;;;;;;;;;;;;11945:32;;12013:1;11996:19;;:5;:19;;;;11988:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12079:5;12072:12;;;11853:239;;;:::o;23307:29::-;;;;:::o;27439:282::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27516:9:::1;27512:202;27529:8;:15;27527:1;:17;27512:202;;;27596:1;27573:25;;:8;27582:1;27573:11;;;;;;;;;;;;;;;;;;;;;;:25;;;;27565:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;27639:15;27657:8;27666:1;27657:11;;;;;;;;;;;;;;;;;;;;;;27639:29;;27698:4;27683:3;:12;27687:7;27683:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;27512:202;27546:3;;;;;:::i;:::-;;;;27512:202;;;;27439:282:::0;:::o;11637:208::-;11709:7;11754:1;11737:19;;:5;:19;;;;11729:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11821:9;:16;11831:5;11821:16;;;;;;;;;;;;;;;;11814:23;;11637:208;;;:::o;2288:94::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2353:21:::1;2371:1;2353:9;:21::i;:::-;2288:94::o:0;28435:78::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28496:9:::1;;;;;;;;;;;28495:10;28483:9;;:22;;;;;;;;;;;;;;;;;;28435:78::o:0;28356:71::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28412:7:::1;;;;;;;;;;;28411:8;28401:7;;:18;;;;;;;;;;;;;;;;;;28356:71::o:0;23563:34::-;;;;;;;;;;;;;;;;;;;;;;:::o;2065:87::-;2111:7;2138:6;;;;;;;;;;;2131:13;;2065:87;:::o;27048:93::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27124:9:::1;27115:6;:18;;;;27048:93:::0;:::o;12208:104::-;12264:13;12297:7;12290:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12208:104;:::o;25891:744::-;25945:14;25962:13;:11;:13::i;:::-;25945:30;;25996:9;;;;;;;;;;;25995:10;25986:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26098:4;26079:23;;:3;:15;26083:10;26079:15;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;26070:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;26219:9;;26211:3;26186:8;:20;26195:10;26186:20;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;:42;;26177:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;26301:9;;26292:3;:18;;26283:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26414:9;;26406:5;;:17;;;;:::i;:::-;26399:3;26390:6;:12;;;;:::i;:::-;:33;;26381:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;26494:9;26490:90;26509:3;26505:1;:7;26490:90;;;26533:35;26544:10;26565:1;26556:6;:10;;;;:::i;:::-;26533:9;:35::i;:::-;26514:3;;;;;:::i;:::-;;;;26490:90;;;;26624:3;26600:8;:20;26609:10;26600:20;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25891:744;;:::o;28267:81::-;28308:7;28334:6;;28327:13;;28267:81;:::o;27729:94::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27809:6:::1;27797:9;:18;;;;27729:94:::0;:::o;13421:295::-;13536:12;:10;:12::i;:::-;13524:24;;:8;:24;;;;13516:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;13636:8;13591:18;:32;13610:12;:10;:12::i;:::-;13591:32;;;;;;;;;;;;;;;:42;13624:8;13591:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;13689:8;13660:48;;13675:12;:10;:12::i;:::-;13660:48;;;13699:8;13660:48;;;;;;:::i;:::-;;;;;;;;13421:295;;:::o;23453:28::-;;;;:::o;14436:328::-;14611:41;14630:12;:10;:12::i;:::-;14644:7;14611:18;:41::i;:::-;14603:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14717:39;14731:4;14737:2;14741:7;14750:5;14717:13;:39::i;:::-;14436:328;;;;:::o;23657:29::-;;;;:::o;27150:280::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27226:9:::1;27222:201;27239:8;:15;27237:1;:17;27222:201;;;27306:1;27283:25;;:8;27292:1;27283:11;;;;;;;;;;;;;;;;;;;;;;:25;;;;27275:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;27349:15;27367:8;27376:1;27367:11;;;;;;;;;;;;;;;;;;;;;;27349:29;;27407:4;27393:2;:11;27396:7;27393:11;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;27222:201;27256:3;;;;;:::i;:::-;;;;27222:201;;;;27150:280:::0;:::o;27927:100::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28009:10:::1;27998:8;:21;;;;27927:100:::0;:::o;12320:343::-;12393:13;12427:16;12435:7;12427;:16::i;:::-;12419:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;12508:21;12532:10;:8;:10::i;:::-;12508:34;;12584:1;12566:7;12560:21;:25;:95;;;;;;;;;;;;;;;;;12612:7;12621:18;:7;:16;:18::i;:::-;12595:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12560:95;12553:102;;;12320:343;;;:::o;23693:35::-;;;;;;;;;;;;;;;;;;;;;;:::o;13724:164::-;13821:4;13845:18;:25;13864:5;13845:25;;;;;;;;;;;;;;;:35;13871:8;13845:35;;;;;;;;;;;;;;;;;;;;;;;;;13838:42;;13724:164;;;;:::o;2390:192::-;2211:12;:10;:12::i;:::-;2200:23;;:7;:5;:7::i;:::-;:23;;;2192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2499:1:::1;2479:22;;:8;:22;;;;2471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2555:19;2565:8;2555:9;:19::i;:::-;2390:192:::0;:::o;23488:27::-;;;;:::o;11324:305::-;11426:4;11478:25;11463:40;;;:11;:40;;;;:105;;;;11535:33;11520:48;;;:11;:48;;;;11463:105;:158;;;;11585:36;11609:11;11585:23;:36::i;:::-;11463:158;11443:178;;11324:305;;;:::o;15586:110::-;15662:26;15672:2;15676:7;15662:26;;;;;;;;;;;;:9;:26::i;:::-;15586:110;;:::o;15095:127::-;15160:4;15212:1;15184:30;;:7;:16;15192:7;15184:16;;;;;;;;;;;;;;;;;;;;;:30;;;;15177:37;;15095:127;;;:::o;1616:98::-;1669:7;1696:10;1689:17;;1616:98;:::o;17381:174::-;17483:2;17456:15;:24;17472:7;17456:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;17539:7;17535:2;17501:46;;17510:23;17525:7;17510:14;:23::i;:::-;17501:46;;;;;;;;;;;;17381:174;;:::o;24776:368::-;24841:14;24858:13;:11;:13::i;:::-;24841:30;;24906:1;24891:17;;:3;:17;;;;24882:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24968:9;;24957:7;:20;;24948:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25028:6;25024:82;25038:7;25036:1;:9;25024:82;;;25066:28;25077:3;25091:1;25082:6;:10;;;;:::i;:::-;25066:9;:28::i;:::-;25047:3;;;;;:::i;:::-;;;;25024:82;;;;25129:7;25116:9;;:20;;;;;;;:::i;:::-;;;;;;;;24776:368;;;:::o;15230:348::-;15323:4;15348:16;15356:7;15348;:16::i;:::-;15340:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15424:13;15440:23;15455:7;15440:14;:23::i;:::-;15424:39;;15493:5;15482:16;;:7;:16;;;:51;;;;15526:7;15502:31;;:20;15514:7;15502:11;:20::i;:::-;:31;;;15482:51;:87;;;;15537:32;15554:5;15561:7;15537:16;:32::i;:::-;15482:87;15474:96;;;15230:348;;;;:::o;16795:578::-;16954:4;16927:31;;:23;16942:7;16927:14;:23::i;:::-;:31;;;16919:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17037:1;17023:16;;:2;:16;;;;17015:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;17093:39;17114:4;17120:2;17124:7;17093:20;:39::i;:::-;17197:29;17214:1;17218:7;17197:8;:29::i;:::-;17258:1;17239:9;:15;17249:4;17239:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;17287:1;17270:9;:13;17280:2;17270:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;17318:2;17299:7;:16;17307:7;17299:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;17357:7;17353:2;17338:27;;17347:4;17338:27;;;;;;;;;;;;16795:578;;;:::o;2590:173::-;2646:16;2665:6;;;;;;;;;;;2646:25;;2691:8;2682:6;;:17;;;;;;;;;;;;;;;;;;2746:8;2715:40;;2736:8;2715:40;;;;;;;;;;;;2590:173;;:::o;14772:315::-;14929:28;14939:4;14945:2;14949:7;14929:9;:28::i;:::-;14976:48;14999:4;15005:2;15009:7;15018:5;14976:22;:48::i;:::-;14968:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;14772:315;;;;:::o;28035:114::-;28095:13;28128;28121:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28035:114;:::o;231:534::-;287:13;328:1;319:5;:10;315:53;;;346:10;;;;;;;;;;;;;;;;;;;;;315:53;378:12;393:5;378:20;;409:14;434:78;449:1;441:4;:9;434:78;;467:8;;;;;:::i;:::-;;;;498:2;490:10;;;;;:::i;:::-;;;434:78;;;522:19;554:6;544:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;522:39;;572:154;588:1;579:5;:10;572:154;;616:1;606:11;;;;;:::i;:::-;;;683:2;675:5;:10;;;;:::i;:::-;662:2;:24;;;;:::i;:::-;649:39;;632:6;639;632:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;712:2;703:11;;;;;:::i;:::-;;;572:154;;;750:6;736:21;;;;;231:534;;;;:::o;8624:157::-;8709:4;8748:25;8733:40;;;:11;:40;;;;8726:47;;8624:157;;;:::o;15704:325::-;15834:22;15840:2;15854:1;15844:7;:11;;;;:::i;:::-;15834:5;:22::i;:::-;15889:54;15920:1;15924:2;15928:7;15937:5;15889:22;:54::i;:::-;15867:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;15704:325;;;:::o;19912:589::-;20056:45;20083:4;20089:2;20093:7;20056:26;:45::i;:::-;20134:1;20118:18;;:4;:18;;;20114:187;;;20153:40;20185:7;20153:31;:40::i;:::-;20114:187;;;20223:2;20215:10;;:4;:10;;;20211:90;;20242:47;20275:4;20281:7;20242:32;:47::i;:::-;20211:90;20114:187;20329:1;20315:16;;:2;:16;;;20311:183;;;20348:45;20385:7;20348:36;:45::i;:::-;20311:183;;;20421:4;20415:10;;:2;:10;;;20411:83;;20442:40;20470:2;20474:7;20442:27;:40::i;:::-;20411:83;20311:183;19912:589;;;:::o;17563:799::-;17718:4;17739:15;:2;:13;;;:15::i;:::-;17735:620;;;17791:2;17775:36;;;17812:12;:10;:12::i;:::-;17826:4;17832:7;17841:5;17775:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;17771:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18034:1;18017:6;:13;:18;18013:272;;;18060:60;;;;;;;;;;:::i;:::-;;;;;;;;18013:272;18235:6;18229:13;18220:6;18216:2;18212:15;18205:38;17771:529;17908:41;;;17898:51;;;:6;:51;;;;17891:58;;;;;17735:620;18339:4;18332:11;;17563:799;;;;;;;:::o;16037:382::-;16131:1;16117:16;;:2;:16;;;;16109:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16190:16;16198:7;16190;:16::i;:::-;16189:17;16181:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16252:45;16281:1;16285:2;16289:7;16252:20;:45::i;:::-;16327:1;16310:9;:13;16320:2;16310:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;16358:2;16339:7;:16;16347:7;16339:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;16403:7;16399:2;16378:33;;16395:1;16378:33;;;;;;;;;;;;16037:382;;:::o;18370:126::-;;;;:::o;20738:164::-;20842:10;:17;;;;20815:15;:24;20831:7;20815:24;;;;;;;;;;;:44;;;;20870:10;20886:7;20870:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20738:164;:::o;20910:988::-;21176:22;21226:1;21201:22;21218:4;21201:16;:22::i;:::-;:26;;;;:::i;:::-;21176:51;;21238:18;21259:17;:26;21277:7;21259:26;;;;;;;;;;;;21238:47;;21406:14;21392:10;:28;21388:328;;21437:19;21459:12;:18;21472:4;21459:18;;;;;;;;;;;;;;;:34;21478:14;21459:34;;;;;;;;;;;;21437:56;;21543:11;21510:12;:18;21523:4;21510:18;;;;;;;;;;;;;;;:30;21529:10;21510:30;;;;;;;;;;;:44;;;;21660:10;21627:17;:30;21645:11;21627:30;;;;;;;;;;;:43;;;;21388:328;;21812:17;:26;21830:7;21812:26;;;;;;;;;;;21805:33;;;21856:12;:18;21869:4;21856:18;;;;;;;;;;;;;;;:34;21875:14;21856:34;;;;;;;;;;;21849:41;;;20910:988;;;;:::o;21906:1079::-;22159:22;22204:1;22184:10;:17;;;;:21;;;;:::i;:::-;22159:46;;22216:18;22237:15;:24;22253:7;22237:24;;;;;;;;;;;;22216:45;;22588:19;22610:10;22621:14;22610:26;;;;;;;;;;;;;;;;;;;;;;;;22588:48;;22674:11;22649:10;22660;22649:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;22785:10;22754:15;:28;22770:11;22754:28;;;;;;;;;;;:41;;;;22926:15;:24;22942:7;22926:24;;;;;;;;;;;22919:31;;;22961:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21906:1079;;;;:::o;20509:221::-;20594:14;20611:20;20628:2;20611:16;:20::i;:::-;20594:37;;20669:7;20642:12;:16;20655:2;20642:16;;;;;;;;;;;;;;;:24;20659:6;20642:24;;;;;;;;;;;:34;;;;20716:6;20687:17;:26;20705:7;20687:26;;;;;;;;;;;:35;;;;20509:221;;;:::o;2797:196::-;2857:4;2874:12;2941:7;2929:20;2921:28;;2984:1;2977:4;:8;2970:15;;;2797:196;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:344::-;;1748:65;1763:49;1805:6;1763:49;:::i;:::-;1748:65;:::i;:::-;1739:74;;1836:6;1829:5;1822:21;1874:4;1867:5;1863:16;1912:3;1903:6;1898:3;1894:16;1891:25;1888:2;;;1929:1;1926;1919:12;1888:2;1942:41;1976:6;1971:3;1966;1942:41;:::i;:::-;1729:260;;;;;;:::o;1995:139::-;;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2157:303::-;;2277:3;2270:4;2262:6;2258:17;2254:27;2244:2;;2295:1;2292;2285:12;2244:2;2335:6;2322:20;2360:94;2450:3;2442:6;2435:4;2427:6;2423:17;2360:94;:::i;:::-;2351:103;;2234:226;;;;;:::o;2483:303::-;;2603:3;2596:4;2588:6;2584:17;2580:27;2570:2;;2621:1;2618;2611:12;2570:2;2661:6;2648:20;2686:94;2776:3;2768:6;2761:4;2753:6;2749:17;2686:94;:::i;:::-;2677:103;;2560:226;;;;;:::o;2792:133::-;;2873:6;2860:20;2851:29;;2889:30;2913:5;2889:30;:::i;:::-;2841:84;;;;:::o;2931:137::-;;3014:6;3001:20;2992:29;;3030:32;3056:5;3030:32;:::i;:::-;2982:86;;;;:::o;3074:141::-;;3161:6;3155:13;3146:22;;3177:32;3203:5;3177:32;:::i;:::-;3136:79;;;;:::o;3234:271::-;;3338:3;3331:4;3323:6;3319:17;3315:27;3305:2;;3356:1;3353;3346:12;3305:2;3396:6;3383:20;3421:78;3495:3;3487:6;3480:4;3472:6;3468:17;3421:78;:::i;:::-;3412:87;;3295:210;;;;;:::o;3525:273::-;;3630:3;3623:4;3615:6;3611:17;3607:27;3597:2;;3648:1;3645;3638:12;3597:2;3688:6;3675:20;3713:79;3788:3;3780:6;3773:4;3765:6;3761:17;3713:79;:::i;:::-;3704:88;;3587:211;;;;;:::o;3804:139::-;;3888:6;3875:20;3866:29;;3904:33;3931:5;3904:33;:::i;:::-;3856:87;;;;:::o;3949:262::-;;4057:2;4045:9;4036:7;4032:23;4028:32;4025:2;;;4073:1;4070;4063:12;4025:2;4116:1;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4087:117;4015:196;;;;:::o;4217:407::-;;;4342:2;4330:9;4321:7;4317:23;4313:32;4310:2;;;4358:1;4355;4348:12;4310:2;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4300:324;;;;;:::o;4630:552::-;;;;4772:2;4760:9;4751:7;4747:23;4743:32;4740:2;;;4788:1;4785;4778:12;4740:2;4831:1;4856:53;4901:7;4892:6;4881:9;4877:22;4856:53;:::i;:::-;4846:63;;4802:117;4958:2;4984:53;5029:7;5020:6;5009:9;5005:22;4984:53;:::i;:::-;4974:63;;4929:118;5086:2;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5057:118;4730:452;;;;;:::o;5188:809::-;;;;;5356:3;5344:9;5335:7;5331:23;5327:33;5324:2;;;5373:1;5370;5363:12;5324:2;5416:1;5441:53;5486:7;5477:6;5466:9;5462:22;5441:53;:::i;:::-;5431:63;;5387:117;5543:2;5569:53;5614:7;5605:6;5594:9;5590:22;5569:53;:::i;:::-;5559:63;;5514:118;5671:2;5697:53;5742:7;5733:6;5722:9;5718:22;5697:53;:::i;:::-;5687:63;;5642:118;5827:2;5816:9;5812:18;5799:32;5858:18;5850:6;5847:30;5844:2;;;5890:1;5887;5880:12;5844:2;5918:62;5972:7;5963:6;5952:9;5948:22;5918:62;:::i;:::-;5908:72;;5770:220;5314:683;;;;;;;:::o;6003:401::-;;;6125:2;6113:9;6104:7;6100:23;6096:32;6093:2;;;6141:1;6138;6131:12;6093:2;6184:1;6209:53;6254:7;6245:6;6234:9;6230:22;6209:53;:::i;:::-;6199:63;;6155:117;6311:2;6337:50;6379:7;6370:6;6359:9;6355:22;6337:50;:::i;:::-;6327:60;;6282:115;6083:321;;;;;:::o;6410:407::-;;;6535:2;6523:9;6514:7;6510:23;6506:32;6503:2;;;6551:1;6548;6541:12;6503:2;6594:1;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6565:117;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6493:324;;;;;:::o;6823:405::-;;6956:2;6944:9;6935:7;6931:23;6927:32;6924:2;;;6972:1;6969;6962:12;6924:2;7043:1;7032:9;7028:17;7015:31;7073:18;7065:6;7062:30;7059:2;;;7105:1;7102;7095:12;7059:2;7133:78;7203:7;7194:6;7183:9;7179:22;7133:78;:::i;:::-;7123:88;;6986:235;6914:314;;;;:::o;7234:693::-;;;7409:2;7397:9;7388:7;7384:23;7380:32;7377:2;;;7425:1;7422;7415:12;7377:2;7496:1;7485:9;7481:17;7468:31;7526:18;7518:6;7515:30;7512:2;;;7558:1;7555;7548:12;7512:2;7586:78;7656:7;7647:6;7636:9;7632:22;7586:78;:::i;:::-;7576:88;;7439:235;7741:2;7730:9;7726:18;7713:32;7772:18;7764:6;7761:30;7758:2;;;7804:1;7801;7794:12;7758:2;7832:78;7902:7;7893:6;7882:9;7878:22;7832:78;:::i;:::-;7822:88;;7684:236;7367:560;;;;;:::o;7933:260::-;;8040:2;8028:9;8019:7;8015:23;8011:32;8008:2;;;8056:1;8053;8046:12;8008:2;8099:1;8124:52;8168:7;8159:6;8148:9;8144:22;8124:52;:::i;:::-;8114:62;;8070:116;7998:195;;;;:::o;8199:282::-;;8317:2;8305:9;8296:7;8292:23;8288:32;8285:2;;;8333:1;8330;8323:12;8285:2;8376:1;8401:63;8456:7;8447:6;8436:9;8432:22;8401:63;:::i;:::-;8391:73;;8347:127;8275:206;;;;:::o;8487:375::-;;8605:2;8593:9;8584:7;8580:23;8576:32;8573:2;;;8621:1;8618;8611:12;8573:2;8692:1;8681:9;8677:17;8664:31;8722:18;8714:6;8711:30;8708:2;;;8754:1;8751;8744:12;8708:2;8782:63;8837:7;8828:6;8817:9;8813:22;8782:63;:::i;:::-;8772:73;;8635:220;8563:299;;;;:::o;8868:262::-;;8976:2;8964:9;8955:7;8951:23;8947:32;8944:2;;;8992:1;8989;8982:12;8944:2;9035:1;9060:53;9105:7;9096:6;9085:9;9081:22;9060:53;:::i;:::-;9050:63;;9006:117;8934:196;;;;:::o;9136:179::-;;9226:46;9268:3;9260:6;9226:46;:::i;:::-;9304:4;9299:3;9295:14;9281:28;;9216:99;;;;:::o;9321:118::-;9408:24;9426:5;9408:24;:::i;:::-;9403:3;9396:37;9386:53;;:::o;9475:732::-;;9623:54;9671:5;9623:54;:::i;:::-;9693:86;9772:6;9767:3;9693:86;:::i;:::-;9686:93;;9803:56;9853:5;9803:56;:::i;:::-;9882:7;9913:1;9898:284;9923:6;9920:1;9917:13;9898:284;;;9999:6;9993:13;10026:63;10085:3;10070:13;10026:63;:::i;:::-;10019:70;;10112:60;10165:6;10112:60;:::i;:::-;10102:70;;9958:224;9945:1;9942;9938:9;9933:14;;9898:284;;;9902:14;10198:3;10191:10;;9599:608;;;;;;;:::o;10213:109::-;10294:21;10309:5;10294:21;:::i;:::-;10289:3;10282:34;10272:50;;:::o;10328:360::-;;10442:38;10474:5;10442:38;:::i;:::-;10496:70;10559:6;10554:3;10496:70;:::i;:::-;10489:77;;10575:52;10620:6;10615:3;10608:4;10601:5;10597:16;10575:52;:::i;:::-;10652:29;10674:6;10652:29;:::i;:::-;10647:3;10643:39;10636:46;;10418:270;;;;;:::o;10694:364::-;;10810:39;10843:5;10810:39;:::i;:::-;10865:71;10929:6;10924:3;10865:71;:::i;:::-;10858:78;;10945:52;10990:6;10985:3;10978:4;10971:5;10967:16;10945:52;:::i;:::-;11022:29;11044:6;11022:29;:::i;:::-;11017:3;11013:39;11006:46;;10786:272;;;;;:::o;11064:377::-;;11198:39;11231:5;11198:39;:::i;:::-;11253:89;11335:6;11330:3;11253:89;:::i;:::-;11246:96;;11351:52;11396:6;11391:3;11384:4;11377:5;11373:16;11351:52;:::i;:::-;11428:6;11423:3;11419:16;11412:23;;11174:267;;;;;:::o;11447:321::-;;11610:67;11674:2;11669:3;11610:67;:::i;:::-;11603:74;;11707:25;11703:1;11698:3;11694:11;11687:46;11759:2;11754:3;11750:12;11743:19;;11593:175;;;:::o;11774:309::-;;11937:67;12001:2;11996:3;11937:67;:::i;:::-;11930:74;;12034:13;12030:1;12025:3;12021:11;12014:34;12074:2;12069:3;12065:12;12058:19;;11920:163;;;:::o;12089:326::-;;12252:67;12316:2;12311:3;12252:67;:::i;:::-;12245:74;;12349:30;12345:1;12340:3;12336:11;12329:51;12406:2;12401:3;12397:12;12390:19;;12235:180;;;:::o;12421:375::-;;12584:67;12648:2;12643:3;12584:67;:::i;:::-;12577:74;;12681:34;12677:1;12672:3;12668:11;12661:55;12747:13;12742:2;12737:3;12733:12;12726:35;12787:2;12782:3;12778:12;12771:19;;12567:229;;;:::o;12802:382::-;;12965:67;13029:2;13024:3;12965:67;:::i;:::-;12958:74;;13062:34;13058:1;13053:3;13049:11;13042:55;13128:20;13123:2;13118:3;13114:12;13107:42;13175:2;13170:3;13166:12;13159:19;;12948:236;;;:::o;13190:325::-;;13353:67;13417:2;13412:3;13353:67;:::i;:::-;13346:74;;13450:29;13446:1;13441:3;13437:11;13430:50;13506:2;13501:3;13497:12;13490:19;;13336:179;;;:::o;13521:370::-;;13684:67;13748:2;13743:3;13684:67;:::i;:::-;13677:74;;13781:34;13777:1;13772:3;13768:11;13761:55;13847:8;13842:2;13837:3;13833:12;13826:30;13882:2;13877:3;13873:12;13866:19;;13667:224;;;:::o;13897:371::-;;14060:67;14124:2;14119:3;14060:67;:::i;:::-;14053:74;;14157:34;14153:1;14148:3;14144:11;14137:55;14223:9;14218:2;14213:3;14209:12;14202:31;14259:2;14254:3;14250:12;14243:19;;14043:225;;;:::o;14274:326::-;;14437:67;14501:2;14496:3;14437:67;:::i;:::-;14430:74;;14534:30;14530:1;14525:3;14521:11;14514:51;14591:2;14586:3;14582:12;14575:19;;14420:180;;;:::o;14606:368::-;;14769:67;14833:2;14828:3;14769:67;:::i;:::-;14762:74;;14866:34;14862:1;14857:3;14853:11;14846:55;14932:6;14927:2;14922:3;14918:12;14911:28;14965:2;14960:3;14956:12;14949:19;;14752:222;;;:::o;14980:323::-;;15143:67;15207:2;15202:3;15143:67;:::i;:::-;15136:74;;15240:27;15236:1;15231:3;15227:11;15220:48;15294:2;15289:3;15285:12;15278:19;;15126:177;;;:::o;15309:321::-;;15472:67;15536:2;15531:3;15472:67;:::i;:::-;15465:74;;15569:25;15565:1;15560:3;15556:11;15549:46;15621:2;15616:3;15612:12;15605:19;;15455:175;;;:::o;15636:376::-;;15799:67;15863:2;15858:3;15799:67;:::i;:::-;15792:74;;15896:34;15892:1;15887:3;15883:11;15876:55;15962:14;15957:2;15952:3;15948:12;15941:36;16003:2;15998:3;15994:12;15987:19;;15782:230;;;:::o;16018:326::-;;16181:67;16245:2;16240:3;16181:67;:::i;:::-;16174:74;;16278:30;16274:1;16269:3;16265:11;16258:51;16335:2;16330:3;16326:12;16319:19;;16164:180;;;:::o;16350:368::-;;16513:67;16577:2;16572:3;16513:67;:::i;:::-;16506:74;;16610:34;16606:1;16601:3;16597:11;16590:55;16676:6;16671:2;16666:3;16662:12;16655:28;16709:2;16704:3;16700:12;16693:19;;16496:222;;;:::o;16724:388::-;;16887:67;16951:2;16946:3;16887:67;:::i;:::-;16880:74;;16984:34;16980:1;16975:3;16971:11;16964:55;17050:26;17045:2;17040:3;17036:12;17029:48;17103:2;17098:3;17094:12;17087:19;;16870:242;;;:::o;17118:374::-;;17281:67;17345:2;17340:3;17281:67;:::i;:::-;17274:74;;17378:34;17374:1;17369:3;17365:11;17358:55;17444:12;17439:2;17434:3;17430:12;17423:34;17483:2;17478:3;17474:12;17467:19;;17264:228;;;:::o;17498:373::-;;17661:67;17725:2;17720:3;17661:67;:::i;:::-;17654:74;;17758:34;17754:1;17749:3;17745:11;17738:55;17824:11;17819:2;17814:3;17810:12;17803:33;17862:2;17857:3;17853:12;17846:19;;17644:227;;;:::o;17877:330::-;;18040:67;18104:2;18099:3;18040:67;:::i;:::-;18033:74;;18137:34;18133:1;18128:3;18124:11;18117:55;18198:2;18193:3;18189:12;18182:19;;18023:184;;;:::o;18213:376::-;;18376:67;18440:2;18435:3;18376:67;:::i;:::-;18369:74;;18473:34;18469:1;18464:3;18460:11;18453:55;18539:14;18534:2;18529:3;18525:12;18518:36;18580:2;18575:3;18571:12;18564:19;;18359:230;;;:::o;18595:337::-;;18776:84;18858:1;18853:3;18776:84;:::i;:::-;18769:91;;18890:7;18886:1;18881:3;18877:11;18870:28;18924:1;18919:3;18915:11;18908:18;;18759:173;;;:::o;18938:326::-;;19101:67;19165:2;19160:3;19101:67;:::i;:::-;19094:74;;19198:30;19194:1;19189:3;19185:11;19178:51;19255:2;19250:3;19246:12;19239:19;;19084:180;;;:::o;19270:330::-;;19433:67;19497:2;19492:3;19433:67;:::i;:::-;19426:74;;19530:34;19526:1;19521:3;19517:11;19510:55;19591:2;19586:3;19582:12;19575:19;;19416:184;;;:::o;19606:373::-;;19769:67;19833:2;19828:3;19769:67;:::i;:::-;19762:74;;19866:34;19862:1;19857:3;19853:11;19846:55;19932:11;19927:2;19922:3;19918:12;19911:33;19970:2;19965:3;19961:12;19954:19;;19752:227;;;:::o;19985:379::-;;20148:67;20212:2;20207:3;20148:67;:::i;:::-;20141:74;;20245:34;20241:1;20236:3;20232:11;20225:55;20311:17;20306:2;20301:3;20297:12;20290:39;20355:2;20350:3;20346:12;20339:19;;20131:233;;;:::o;20370:365::-;;20533:67;20597:2;20592:3;20533:67;:::i;:::-;20526:74;;20630:34;20626:1;20621:3;20617:11;20610:55;20696:3;20691:2;20686:3;20682:12;20675:25;20726:2;20721:3;20717:12;20710:19;;20516:219;;;:::o;20741:323::-;;20904:67;20968:2;20963:3;20904:67;:::i;:::-;20897:74;;21001:27;20997:1;20992:3;20988:11;20981:48;21055:2;21050:3;21046:12;21039:19;;20887:177;;;:::o;21070:369::-;;21233:67;21297:2;21292:3;21233:67;:::i;:::-;21226:74;;21330:34;21326:1;21321:3;21317:11;21310:55;21396:7;21391:2;21386:3;21382:12;21375:29;21430:2;21425:3;21421:12;21414:19;;21216:223;;;:::o;21445:381::-;;21608:67;21672:2;21667:3;21608:67;:::i;:::-;21601:74;;21705:34;21701:1;21696:3;21692:11;21685:55;21771:19;21766:2;21761:3;21757:12;21750:41;21817:2;21812:3;21808:12;21801:19;;21591:235;;;:::o;21832:376::-;;21995:67;22059:2;22054:3;21995:67;:::i;:::-;21988:74;;22092:34;22088:1;22083:3;22079:11;22072:55;22158:14;22153:2;22148:3;22144:12;22137:36;22199:2;22194:3;22190:12;22183:19;;21978:230;;;:::o;22214:319::-;;22377:67;22441:2;22436:3;22377:67;:::i;:::-;22370:74;;22474:23;22470:1;22465:3;22461:11;22454:44;22524:2;22519:3;22515:12;22508:19;;22360:173;;;:::o;22539:108::-;22616:24;22634:5;22616:24;:::i;:::-;22611:3;22604:37;22594:53;;:::o;22653:118::-;22740:24;22758:5;22740:24;:::i;:::-;22735:3;22728:37;22718:53;;:::o;22777:701::-;;23080:95;23171:3;23162:6;23080:95;:::i;:::-;23073:102;;23192:95;23283:3;23274:6;23192:95;:::i;:::-;23185:102;;23304:148;23448:3;23304:148;:::i;:::-;23297:155;;23469:3;23462:10;;23062:416;;;;;:::o;23484:222::-;;23615:2;23604:9;23600:18;23592:26;;23628:71;23696:1;23685:9;23681:17;23672:6;23628:71;:::i;:::-;23582:124;;;;:::o;23712:640::-;;23945:3;23934:9;23930:19;23922:27;;23959:71;24027:1;24016:9;24012:17;24003:6;23959:71;:::i;:::-;24040:72;24108:2;24097:9;24093:18;24084:6;24040:72;:::i;:::-;24122;24190:2;24179:9;24175:18;24166:6;24122:72;:::i;:::-;24241:9;24235:4;24231:20;24226:2;24215:9;24211:18;24204:48;24269:76;24340:4;24331:6;24269:76;:::i;:::-;24261:84;;23912:440;;;;;;;:::o;24358:373::-;;24539:2;24528:9;24524:18;24516:26;;24588:9;24582:4;24578:20;24574:1;24563:9;24559:17;24552:47;24616:108;24719:4;24710:6;24616:108;:::i;:::-;24608:116;;24506:225;;;;:::o;24737:210::-;;24862:2;24851:9;24847:18;24839:26;;24875:65;24937:1;24926:9;24922:17;24913:6;24875:65;:::i;:::-;24829:118;;;;:::o;24953:313::-;;25104:2;25093:9;25089:18;25081:26;;25153:9;25147:4;25143:20;25139:1;25128:9;25124:17;25117:47;25181:78;25254:4;25245:6;25181:78;:::i;:::-;25173:86;;25071:195;;;;:::o;25272:419::-;;25476:2;25465:9;25461:18;25453:26;;25525:9;25519:4;25515:20;25511:1;25500:9;25496:17;25489:47;25553:131;25679:4;25553:131;:::i;:::-;25545:139;;25443:248;;;:::o;25697:419::-;;25901:2;25890:9;25886:18;25878:26;;25950:9;25944:4;25940:20;25936:1;25925:9;25921:17;25914:47;25978:131;26104:4;25978:131;:::i;:::-;25970:139;;25868:248;;;:::o;26122:419::-;;26326:2;26315:9;26311:18;26303:26;;26375:9;26369:4;26365:20;26361:1;26350:9;26346:17;26339:47;26403:131;26529:4;26403:131;:::i;:::-;26395:139;;26293:248;;;:::o;26547:419::-;;26751:2;26740:9;26736:18;26728:26;;26800:9;26794:4;26790:20;26786:1;26775:9;26771:17;26764:47;26828:131;26954:4;26828:131;:::i;:::-;26820:139;;26718:248;;;:::o;26972:419::-;;27176:2;27165:9;27161:18;27153:26;;27225:9;27219:4;27215:20;27211:1;27200:9;27196:17;27189:47;27253:131;27379:4;27253:131;:::i;:::-;27245:139;;27143:248;;;:::o;27397:419::-;;27601:2;27590:9;27586:18;27578:26;;27650:9;27644:4;27640:20;27636:1;27625:9;27621:17;27614:47;27678:131;27804:4;27678:131;:::i;:::-;27670:139;;27568:248;;;:::o;27822:419::-;;28026:2;28015:9;28011:18;28003:26;;28075:9;28069:4;28065:20;28061:1;28050:9;28046:17;28039:47;28103:131;28229:4;28103:131;:::i;:::-;28095:139;;27993:248;;;:::o;28247:419::-;;28451:2;28440:9;28436:18;28428:26;;28500:9;28494:4;28490:20;28486:1;28475:9;28471:17;28464:47;28528:131;28654:4;28528:131;:::i;:::-;28520:139;;28418:248;;;:::o;28672:419::-;;28876:2;28865:9;28861:18;28853:26;;28925:9;28919:4;28915:20;28911:1;28900:9;28896:17;28889:47;28953:131;29079:4;28953:131;:::i;:::-;28945:139;;28843:248;;;:::o;29097:419::-;;29301:2;29290:9;29286:18;29278:26;;29350:9;29344:4;29340:20;29336:1;29325:9;29321:17;29314:47;29378:131;29504:4;29378:131;:::i;:::-;29370:139;;29268:248;;;:::o;29522:419::-;;29726:2;29715:9;29711:18;29703:26;;29775:9;29769:4;29765:20;29761:1;29750:9;29746:17;29739:47;29803:131;29929:4;29803:131;:::i;:::-;29795:139;;29693:248;;;:::o;29947:419::-;;30151:2;30140:9;30136:18;30128:26;;30200:9;30194:4;30190:20;30186:1;30175:9;30171:17;30164:47;30228:131;30354:4;30228:131;:::i;:::-;30220:139;;30118:248;;;:::o;30372:419::-;;30576:2;30565:9;30561:18;30553:26;;30625:9;30619:4;30615:20;30611:1;30600:9;30596:17;30589:47;30653:131;30779:4;30653:131;:::i;:::-;30645:139;;30543:248;;;:::o;30797:419::-;;31001:2;30990:9;30986:18;30978:26;;31050:9;31044:4;31040:20;31036:1;31025:9;31021:17;31014:47;31078:131;31204:4;31078:131;:::i;:::-;31070:139;;30968:248;;;:::o;31222:419::-;;31426:2;31415:9;31411:18;31403:26;;31475:9;31469:4;31465:20;31461:1;31450:9;31446:17;31439:47;31503:131;31629:4;31503:131;:::i;:::-;31495:139;;31393:248;;;:::o;31647:419::-;;31851:2;31840:9;31836:18;31828:26;;31900:9;31894:4;31890:20;31886:1;31875:9;31871:17;31864:47;31928:131;32054:4;31928:131;:::i;:::-;31920:139;;31818:248;;;:::o;32072:419::-;;32276:2;32265:9;32261:18;32253:26;;32325:9;32319:4;32315:20;32311:1;32300:9;32296:17;32289:47;32353:131;32479:4;32353:131;:::i;:::-;32345:139;;32243:248;;;:::o;32497:419::-;;32701:2;32690:9;32686:18;32678:26;;32750:9;32744:4;32740:20;32736:1;32725:9;32721:17;32714:47;32778:131;32904:4;32778:131;:::i;:::-;32770:139;;32668:248;;;:::o;32922:419::-;;33126:2;33115:9;33111:18;33103:26;;33175:9;33169:4;33165:20;33161:1;33150:9;33146:17;33139:47;33203:131;33329:4;33203:131;:::i;:::-;33195:139;;33093:248;;;:::o;33347:419::-;;33551:2;33540:9;33536:18;33528:26;;33600:9;33594:4;33590:20;33586:1;33575:9;33571:17;33564:47;33628:131;33754:4;33628:131;:::i;:::-;33620:139;;33518:248;;;:::o;33772:419::-;;33976:2;33965:9;33961:18;33953:26;;34025:9;34019:4;34015:20;34011:1;34000:9;33996:17;33989:47;34053:131;34179:4;34053:131;:::i;:::-;34045:139;;33943:248;;;:::o;34197:419::-;;34401:2;34390:9;34386:18;34378:26;;34450:9;34444:4;34440:20;34436:1;34425:9;34421:17;34414:47;34478:131;34604:4;34478:131;:::i;:::-;34470:139;;34368:248;;;:::o;34622:419::-;;34826:2;34815:9;34811:18;34803:26;;34875:9;34869:4;34865:20;34861:1;34850:9;34846:17;34839:47;34903:131;35029:4;34903:131;:::i;:::-;34895:139;;34793:248;;;:::o;35047:419::-;;35251:2;35240:9;35236:18;35228:26;;35300:9;35294:4;35290:20;35286:1;35275:9;35271:17;35264:47;35328:131;35454:4;35328:131;:::i;:::-;35320:139;;35218:248;;;:::o;35472:419::-;;35676:2;35665:9;35661:18;35653:26;;35725:9;35719:4;35715:20;35711:1;35700:9;35696:17;35689:47;35753:131;35879:4;35753:131;:::i;:::-;35745:139;;35643:248;;;:::o;35897:419::-;;36101:2;36090:9;36086:18;36078:26;;36150:9;36144:4;36140:20;36136:1;36125:9;36121:17;36114:47;36178:131;36304:4;36178:131;:::i;:::-;36170:139;;36068:248;;;:::o;36322:419::-;;36526:2;36515:9;36511:18;36503:26;;36575:9;36569:4;36565:20;36561:1;36550:9;36546:17;36539:47;36603:131;36729:4;36603:131;:::i;:::-;36595:139;;36493:248;;;:::o;36747:419::-;;36951:2;36940:9;36936:18;36928:26;;37000:9;36994:4;36990:20;36986:1;36975:9;36971:17;36964:47;37028:131;37154:4;37028:131;:::i;:::-;37020:139;;36918:248;;;:::o;37172:419::-;;37376:2;37365:9;37361:18;37353:26;;37425:9;37419:4;37415:20;37411:1;37400:9;37396:17;37389:47;37453:131;37579:4;37453:131;:::i;:::-;37445:139;;37343:248;;;:::o;37597:419::-;;37801:2;37790:9;37786:18;37778:26;;37850:9;37844:4;37840:20;37836:1;37825:9;37821:17;37814:47;37878:131;38004:4;37878:131;:::i;:::-;37870:139;;37768:248;;;:::o;38022:222::-;;38153:2;38142:9;38138:18;38130:26;;38166:71;38234:1;38223:9;38219:17;38210:6;38166:71;:::i;:::-;38120:124;;;;:::o;38250:283::-;;38316:2;38310:9;38300:19;;38358:4;38350:6;38346:17;38465:6;38453:10;38450:22;38429:18;38417:10;38414:34;38411:62;38408:2;;;38476:18;;:::i;:::-;38408:2;38516:10;38512:2;38505:22;38290:243;;;;:::o;38539:311::-;;38706:18;38698:6;38695:30;38692:2;;;38728:18;;:::i;:::-;38692:2;38778:4;38770:6;38766:17;38758:25;;38838:4;38832;38828:15;38820:23;;38621:229;;;:::o;38856:311::-;;39023:18;39015:6;39012:30;39009:2;;;39045:18;;:::i;:::-;39009:2;39095:4;39087:6;39083:17;39075:25;;39155:4;39149;39145:15;39137:23;;38938:229;;;:::o;39173:331::-;;39324:18;39316:6;39313:30;39310:2;;;39346:18;;:::i;:::-;39310:2;39431:4;39427:9;39420:4;39412:6;39408:17;39404:33;39396:41;;39492:4;39486;39482:15;39474:23;;39239:265;;;:::o;39510:332::-;;39662:18;39654:6;39651:30;39648:2;;;39684:18;;:::i;:::-;39648:2;39769:4;39765:9;39758:4;39750:6;39746:17;39742:33;39734:41;;39830:4;39824;39820:15;39812:23;;39577:265;;;:::o;39848:132::-;;39938:3;39930:11;;39968:4;39963:3;39959:14;39951:22;;39920:60;;;:::o;39986:114::-;;40087:5;40081:12;40071:22;;40060:40;;;:::o;40106:98::-;;40191:5;40185:12;40175:22;;40164:40;;;:::o;40210:99::-;;40296:5;40290:12;40280:22;;40269:40;;;:::o;40315:113::-;;40417:4;40412:3;40408:14;40400:22;;40390:38;;;:::o;40434:184::-;;40567:6;40562:3;40555:19;40607:4;40602:3;40598:14;40583:29;;40545:73;;;;:::o;40624:168::-;;40741:6;40736:3;40729:19;40781:4;40776:3;40772:14;40757:29;;40719:73;;;;:::o;40798:169::-;;40916:6;40911:3;40904:19;40956:4;40951:3;40947:14;40932:29;;40894:73;;;;:::o;40973:148::-;;41112:3;41097:18;;41087:34;;;;:::o;41127:305::-;;41186:20;41204:1;41186:20;:::i;:::-;41181:25;;41220:20;41238:1;41220:20;:::i;:::-;41215:25;;41374:1;41306:66;41302:74;41299:1;41296:81;41293:2;;;41380:18;;:::i;:::-;41293:2;41424:1;41421;41417:9;41410:16;;41171:261;;;;:::o;41438:185::-;;41495:20;41513:1;41495:20;:::i;:::-;41490:25;;41529:20;41547:1;41529:20;:::i;:::-;41524:25;;41568:1;41558:2;;41573:18;;:::i;:::-;41558:2;41615:1;41612;41608:9;41603:14;;41480:143;;;;:::o;41629:348::-;;41692:20;41710:1;41692:20;:::i;:::-;41687:25;;41726:20;41744:1;41726:20;:::i;:::-;41721:25;;41914:1;41846:66;41842:74;41839:1;41836:81;41831:1;41824:9;41817:17;41813:105;41810:2;;;41921:18;;:::i;:::-;41810:2;41969:1;41966;41962:9;41951:20;;41677:300;;;;:::o;41983:191::-;;42043:20;42061:1;42043:20;:::i;:::-;42038:25;;42077:20;42095:1;42077:20;:::i;:::-;42072:25;;42116:1;42113;42110:8;42107:2;;;42121:18;;:::i;:::-;42107:2;42166:1;42163;42159:9;42151:17;;42028:146;;;;:::o;42180:96::-;;42246:24;42264:5;42246:24;:::i;:::-;42235:35;;42225:51;;;:::o;42282:90::-;;42359:5;42352:13;42345:21;42334:32;;42324:48;;;:::o;42378:149::-;;42454:66;42447:5;42443:78;42432:89;;42422:105;;;:::o;42533:126::-;;42610:42;42603:5;42599:54;42588:65;;42578:81;;;:::o;42665:77::-;;42731:5;42720:16;;42710:32;;;:::o;42748:154::-;42832:6;42827:3;42822;42809:30;42894:1;42885:6;42880:3;42876:16;42869:27;42799:103;;;:::o;42908:307::-;42976:1;42986:113;43000:6;42997:1;42994:13;42986:113;;;43085:1;43080:3;43076:11;43070:18;43066:1;43061:3;43057:11;43050:39;43022:2;43019:1;43015:10;43010:15;;42986:113;;;43117:6;43114:1;43111:13;43108:2;;;43197:1;43188:6;43183:3;43179:16;43172:27;43108:2;42957:258;;;;:::o;43221:320::-;;43302:1;43296:4;43292:12;43282:22;;43349:1;43343:4;43339:12;43370:18;43360:2;;43426:4;43418:6;43414:17;43404:27;;43360:2;43488;43480:6;43477:14;43457:18;43454:38;43451:2;;;43507:18;;:::i;:::-;43451:2;43272:269;;;;:::o;43547:233::-;;43609:24;43627:5;43609:24;:::i;:::-;43600:33;;43655:66;43648:5;43645:77;43642:2;;;43725:18;;:::i;:::-;43642:2;43772:1;43765:5;43761:13;43754:20;;43590:190;;;:::o;43786:176::-;;43835:20;43853:1;43835:20;:::i;:::-;43830:25;;43869:20;43887:1;43869:20;:::i;:::-;43864:25;;43908:1;43898:2;;43913:18;;:::i;:::-;43898:2;43954:1;43951;43947:9;43942:14;;43820:142;;;;:::o;43968:180::-;44016:77;44013:1;44006:88;44113:4;44110:1;44103:15;44137:4;44134:1;44127:15;44154:180;44202:77;44199:1;44192:88;44299:4;44296:1;44289:15;44323:4;44320:1;44313:15;44340:180;44388:77;44385:1;44378:88;44485:4;44482:1;44475:15;44509:4;44506:1;44499:15;44526:180;44574:77;44571:1;44564:88;44671:4;44668:1;44661:15;44695:4;44692:1;44685:15;44712:102;;44804:2;44800:7;44795:2;44788:5;44784:14;44780:28;44770:38;;44760:54;;;:::o;44820:122::-;44893:24;44911:5;44893:24;:::i;:::-;44886:5;44883:35;44873:2;;44932:1;44929;44922:12;44873:2;44863:79;:::o;44948:116::-;45018:21;45033:5;45018:21;:::i;:::-;45011:5;45008:32;44998:2;;45054:1;45051;45044:12;44998:2;44988:76;:::o;45070:120::-;45142:23;45159:5;45142:23;:::i;:::-;45135:5;45132:34;45122:2;;45180:1;45177;45170:12;45122:2;45112:78;:::o;45196:122::-;45269:24;45287:5;45269:24;:::i;:::-;45262:5;45259:35;45249:2;;45308:1;45305;45298:12;45249:2;45239:79;:::o

Swarm Source

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