ETH Price: $3,374.00 (+2.90%)

Token

Blazz Lab (BLAZZ)
 

Overview

Max Total Supply

3,333 BLAZZ

Holders

541

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
6 BLAZZ
0xae926010d9fced9d05c0575732c4b69d79a16fe5
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Blazz Lab is a laboratory full of experiments done by Dr Blazz, an illustrator alter ego. These experiments are completely on-chain and were randomly generated at mint.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BlazzLab

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 2022-03-08
*/

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

interface IERC165 {

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

}

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

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

abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {

        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED; _; _status = _NOT_ENTERED;

    }

}

interface IERC721Receiver {

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

}

interface IERC721Metadata is IERC721 {

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);

}

library Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract ERC165 is IERC165 {

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

}

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {

    using Address for address;
    using Strings for uint256;

    string private _name;
    string private _symbol;

    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

}

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {

    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
    mapping(uint256 => uint256) private _ownedTokensIndex;

    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;

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

    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {

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

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

            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }

        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {

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

        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex;

        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

//////////////////////////////////////////////////////////////////////////////////////////////
//'████████::'██::::::::::'███::::'████████:'████████:::::::'██::::::::::'███::::'████████:://
// ██.... ██: ██:::::::::'██ ██:::..... ██::..... ██:::::::: ██:::::::::'██ ██::: ██.... ██://
// ██:::: ██: ██::::::::'██:. ██:::::: ██::::::: ██::::::::: ██::::::::'██:. ██:: ██:::: ██://
// ████████:: ██:::::::'██:::. ██:::: ██::::::: ██:::::::::: ██:::::::'██:::. ██: ████████:://
// ██.... ██: ██::::::: █████████::: ██::::::: ██::::::::::: ██::::::: █████████: ██.... ██://
// ██:::: ██: ██::::::: ██.... ██:: ██::::::: ██:::::::::::: ██::::::: ██.... ██: ██:::: ██://
// ████████:: ████████: ██:::: ██: ████████: ████████::::::: ████████: ██:::: ██: ████████:://
//..........................................................................................//
//.......................................................................by Jr Casas........//
//////////////////////////////////////////////////////////////////////////////////////////////


 

 contract BlazzLab is ERC721Enumerable, ReentrancyGuard, Ownable {

    uint256 public maxSupply = 3333;
    uint256 public price = 0.01 ether;
    uint256 public maxMint = 8;
    uint256 public numTokensMinted;

    string[10] private thirdNames = ['Finger', 'Bitten Finger', 'Zombie Finger', 'Zombie Bitten Finger', 'Eye', 'Denture', 'Denture Gold', 'Nipple', 'Zombie Nipple', 'Satoshi Hair'];
    string[10] private thirdLayers = [
        '<path fill="#FFF" d="m20,13h2v1h-1v1h1v1h-2v-1h-1v-1h1z"/><path fill="#E7C2B3" d="m13,12h6v4h-6v-1h-1v-2h1zm1,1h-1v2h2v-2z"/><path fill="#FFEDEB" d="m13,13h2v2h-2z"/>',
        '<path fill="#E7C2B3" d="m13,12h1v1h-1v2h2v-1h1v-1h1v-1h2v4h-6v-1h-1v-2h1z"/><path fill="#FFEDEB" d="m13,13h1v1h1v1h-2z"/><path fill="#952A00" d="m16,12h1v1h-1v1h-2v-1h2z"/><path fill="#FFF" d="m20,13h2v1h-1v1h1v1h-2v-1h-1v-1h1z"/>',
        '<path fill="#91A58E" d="m13,13h2v2h-2z"/><path fill="#FFF" d="m20,13h2v1h-1v1h1v1h-2v-1h-1v-1h1z"/><path fill="#416E4A" d="m13,12h6v4h-6v-1h-1v-2h1zm1,1h-1v2h2v-2z"/>',
        '<path fill="#91A58E" d="m13,13h1v1h1v1h-2z"/><path fill="#416E4A" d="m13,12h1v1h-1v2h2v-1h1v-1h1v-1h2v4h-6v-1h-1v-2h1z"/><path fill="#FFF" d="m20,13h2v1h-1v1h1v1h-2v-1h-1v-1h1z"/><path fill="#952A00" d="m16,12h1v1h-1v1h-2v-1h2z"/>',
        '<path fill="#E8EBE5" d="m14,12h4v4h-4zm2,1h-1v2h2v-2z"/><path fill="#000" d="m16,13h1v2h-2v-1h1z"/><path fill="#CDCCC7" d="m18,12h1v4h-1v1h-4v-1h4z"/><path fill="#FFF" d="m14,11h4v1h-4v4h-1v-4h1zm1,2h1v1h-1z"/>',
        '<path fill="#FFF" d="m12,15h1v1h1v1h-1v-1h-1zm8,0h1v1h-1v1h-1v-1h1zm-5,1h1v1h-1zm2,0h1v1h-1z"/><path fill="#D5948B" d="m12,13h2v1h5v-1h2v1h-1v1h-7v-1h-1z"/><path fill="#CD6F6D" d="m12,14h1v1h7v-1h1v1h-1v1h-7v-1h-1z"/>',
        '<path fill="#FFF" d="m12,15h1v1h-1zm8,0h1v1h-1v1h-1v-1h1zm-5,1h1v1h-1zm2,0h1v1h-1z"/><path fill="#CD6F6D" d="m12,14h1v1h7v-1h1v1h-1v1h-7v-1h-1z"/><path fill="#D5948B" d="m12,13h2v1h5v-1h2v1h-1v1h-7v-1h-1z"/><path fill="#e6d309" d="m13,16h1v1h-1z"/>',
        '<path fill="#FCC4A6" d="m15,12h3v1h1v3h-1v1h-3v-1h-1v-3h1zm1,1h-1v3h3v-3z"/><path fill="#B14547" d="m16,14h1v1h-1z"/><path fill="#CC7E6A" d="m17,13h1v3h-3v-1h2z"/><path fill="#E7927C" d="m15,13h2v1h-1v1h-1z"/>',
        '<path fill="#837853" d="m17,13h1v3h-3v-1h2z"/><path fill="#416E4A" d="m15,12h3v1h1v3h-1v1h-3v-1h-1v-3h1zm1,1h-1v3h3v-3z"/><path fill="#94454E" d="m16,14h1v1h-1z"/><path fill="#AE9569" d="m15,13h2v1h-1v1h-1z"/>',
        '<path fill="#423F3D" d="m16,16h1v1h-1v1h1v1h-1v-1h-1v-1h1z"/><path fill="#272A2D" d="m17,14h1v2h-1z"/><path fill="#000" d="m15,11h1v1h1v2h-1v-2h-1z"/>'];
    string[12] private fourthNames = ['Blue','Evaporated blue','Green','Evaporated green','Yellow','Evaporated yellow','Purple','Evaporated purple','Radioactive','Evaporated Radioactive','Regular','Evaporated regular'];
    string[12] private fourthLayers = [
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#19546D" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#5FA7BE" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#195467" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#117E9C" d="m12,5h8v1h1v1h1v1h1v15h-14v-15h1v-1h1v-1h1zm0,2h-1v1h1zm-1,2h-1v3h1zm10,2h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#19546D" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#5FA7BE" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#195467" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#117E9C" d="m9,10h1v2h1v-2h12v13h-14zm12,1h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#145237" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#6dbf9b" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#275c49" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#22855a" d="m12,5h8v1h1v1h1v1h1v15h-14v-15h1v-1h1v-1h1zm0,2h-1v1h1zm-1,2h-1v3h1zm10,2h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#145237" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#6dbf9b" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#275c49" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#22855a" d="m9,10h1v2h1v-2h12v13h-14zm12,1h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#9c9114" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#ede69a" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#aba13a" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#d6c61e" d="m12,5h8v1h1v1h1v1h1v15h-14v-15h1v-1h1v-1h1zm0,2h-1v1h1zm-1,2h-1v3h1zm10,2h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#9c9114" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#ede69a" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#aba13a" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#d6c61e" d="m9,10h1v2h1v-2h12v13h-14zm12,1h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#611d46" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#f0c2de" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#613b52" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#db7db6" d="m12,5h8v1h1v1h1v1h1v15h-14v-15h1v-1h1v-1h1zm0,2h-1v1h1zm-1,2h-1v3h1zm10,2h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#611d46" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#f0c2de" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#613b52" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#db7db6" d="m9,10h1v2h1v-2h12v13h-14zm12,1h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#2a8a0c" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#87fa64" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#5aa343" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#3cff00" d="m12,5h8v1h1v1h1v1h1v15h-14v-15h1v-1h1v-1h1zm0,2h-1v1h1zm-1,2h-1v3h1zm10,2h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#2a8a0c" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#87fa64" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#5aa343" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#3cff00" d="m9,10h1v2h1v-2h12v13h-14zm12,1h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#629ba1" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#c4eef2" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#646d6e" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#a1e0e6" d="m12,5h8v1h1v1h1v1h1v15h-14v-15h1v-1h1v-1h1zm0,2h-1v1h1zm-1,2h-1v3h1zm10,2h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />',
        '<path fill="#FFF" d="m11,7h1v1h-1zm-1,2h1v3h-1zm0,4h1v6h-1z"/><path fill="#629ba1" d="m21,17h1v1h-1zm-9,1h1v1h-1zm8,2h1v1h-1z" fill-opacity="0.5" /><path fill="#c4eef2" d="m20,11h1v1h-1zm-2,7h1v1h-1zm-5,2h1v1h-1z" fill-opacity="0.5" /><path fill="#646d6e" d="m12,4h8v1h1v1h1v1h1v1h1v15h-1v-15h-1v-1h-1v-1h-1v-1h-8v1h-1v1h-1v1h-1v15h-1v-15h1v-1h1v-1h1v-1h1z"/><path fill="#a1e0e6" d="m9,10h1v2h1v-2h12v13h-14zm12,1h-1v1h1zm-10,2h-1v6h1zm11,4h-1v1h1zm-9,1h-1v1h1zm6,0h-1v1h1zm-5,2h-1v1h1zm7,0h-1v1h1z" fill-opacity="0.3" />']; 
    string[10] private fifthNames = ['ESP','CRJ','GLL6','PQL','EYJ','TER','NF','JOR','AC','KAI'];
    string[10] private fifthLayers = [
        '<path fill="#e3aa1b" d="m7,24h18v1h1v1h-6v-1h-9v1h-5v-1h1zm-1,3h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1z"/><path fill="#565C53" d="m11,25h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1z"/><path fill="#949393" d="m12,25h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1z"/><path fill="#000" d="m7,23h18v1h1v1h1v4h-22v-4h1v-1h1zm1,1h-1v1h-1v3h20v-3h-1v-1z"/><path fill="#997314" d="m6,26h20v2h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1z"/>',
        '<path fill="#315779" d="m7,24h2v1h-2zm3,0h2v1h-2zm3,0h2v1h-2zm3,0h2v1h-2zm3,0h2v1h-2zm3,0h2v1h-2zm-16,2h20v2h-16v-1h-2v1h-2z"/><path fill="#c22715" d="m8,27h1v1h-1z"/><path fill="#439C29" d="m9,27h1v1h-1z"/><path fill="#082B3E" d="m9,24h1v1h2v-1h1v1h2v-1h1v1h2v-1h1v1h2v-1h1v1h2v-1h1v1h1v1h-20v-1h3z"/><path fill="#000" d="m7,23h18v1h1v1h1v4h-22v-4h1v-1h1zm1,1h-1v1h-1v3h20v-3h-1v-1z"/>',
        '<path fill="#6e150b" d="m6,25h20v3h-20v-1h1v-1h-1zm3,1h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1z"/><path fill="#952A00" d="m7,24h4v1h-4zm13,0h5v1h-5zm-14,2h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1z"/><path fill="#3F3E40" d="m12,24h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1z"/><path fill="#000" d="m7,23h18v1h1v1h1v4h-22v-4h1v-1h1zm1,1h-1v1h-1v3h20v-3h-1v-1z"/><path fill="#949393" d="m11,24h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1z"/> ',
        '<path fill="#8a7c11" d="m8,24h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm-17,2h3v2h-1v-1h-1v1h-1zm6,0h6v2h-1v-1h-4v1h-1zm9,0h3v2h-1v-1h-1v1h-1z"/><path fill="#d9c31c" d="m7,24h1v1h1v-1h1v1h1v-1h1v1h1v-1h1v1h1v-1h1v1h1v-1h1v1h1v-1h1v1h1v-1h1v1h1v-1h1v1h2v3h-1v-2h-3v2h-3v-2h-6v2h-3v-2h-3v2h-1v-3h1zm1,3h1v1h-1zm6,0h4v1h-4zm9,0h1v1h-1z"/><path fill="#000" d="m7,23h18v1h1v1h1v4h-22v-4h1v-1h1zm1,1h-1v1h-1v3h20v-3h-1v-1z"/>',
        '<path fill="#929491" d="m7,24h18v1h1v1h-2v-1h-1v1h-2v-1h-1v1h-2v-1h-1v1h-2v-1h-1v1h-2v-1h-1v1h-2v-1h-1v1h-2v-1h1zm-1,3h20v1h-20z"/><path fill="#4A4E4D" d="m8,25h1v1h2v-1h1v1h2v-1h1v1h2v-1h1v1h2v-1h1v1h2v-1h1v1h2v1h-20v-1h2z"/><path fill="#000" d="m7,23h18v1h1v1h1v4h-22v-4h1v-1h1zm1,1h-1v1h-1v3h20v-3h-1v-1z"/>',
        '<path fill="#000" d="m7,23h18v1h1v1h1v4h-22v-4h1v-1h1zm1,1h-1v1h-1v3h20v-3h-1v-1z"/><path fill="#5C6F41" d="m7,24h18v1h1v3h-20v-3h1zm1,1h-1v2h1zm2,0h-1v2h1zm2,0h-1v2h1zm2,0h-1v2h1zm2,0h-1v2h2v-2zm3,0h-1v2h1zm2,0h-1v2h1zm2,0h-1v2h1zm2,0h-1v2h1z"/><path fill="#3B4A2C" d="m7,25h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,0h2v2h-2zm3,0h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1z"/>',
        '<path fill="#000" d="m7,23h18v1h1v1h1v4h-22v-4h1v-1h1zm1,1h-1v1h-1v3h20v-3h-1v-1z"/><path fill="#775e8a" d="m7,25h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h2v1h-2zm3,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm-18,2h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h8v1h-8zm9,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1z"/><path fill="#4b3859" d="m7,24h18v1h1v2h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-8v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v-2h1zm1,1h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h2v-1zm3,0h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1zm2,0h-1v1h1z"/>',
        '<path fill="#9c6f00" d="m8,24h1v2h1v-2h1v2h1v-2h1v2h1v-2h1v2h1v-2h1v2h1v-2h1v2h1v-2h1v2h1v-2h1v2h1v-2h1v2h1v1h-20v-2h1v1h1z"/><path fill="#e6ba4e" d="m11,25h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm-12,2h1v1h-1zm17,0h1v1h-1z"/><path fill="#000" d="m7,23h18v1h1v1h1v4h-22v-4h1v-1h1zm1,1h-1v1h-1v3h20v-3h-1v-1z"/><path fill="#cf9400" d="m7,24h1v2h-1zm2,0h1v2h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,1h1v1h-1zm-19,2h1v1h-1zm2,0h16v1h-16zm17,0h1v1h-1z"/>',
        '<path fill="#2B5D6D" d="m6,26h1v1h-1zm2,0h3v1h-3zm4,0h3v1h-3zm4,0h3v1h-3zm4,0h3v1h-3zm4,0h2v1h-2z"/><path fill="#4a0700" d="m6,25h20v1h-2v1h2v1h-20v-1h1v-1h-1zm3,1h-1v1h3v-1zm4,0h-1v1h3v-1zm4,0h-1v1h3v-1zm4,0h-1v1h3v-1z"/><path fill="#000" d="m7,23h18v1h1v1h1v4h-22v-4h1v-1h1zm1,1h-1v1h-1v3h20v-3h-1v-1z"/><path fill="#952A00" d="m7,24h18v1h-18z"/>',
        '<path fill="#EDEADC" d="m6,25h20v1h-1v2h-1v-2h-1v2h-1v-2h-1v2h-1v-2h-1v2h-1v-2h-1v2h-1v-2h-1v2h-1v-2h-1v2h-1v-2h-1v2h-1v-2h-1v2h-1v-2h-1v2h-1z"/><path fill="#000" d="m7,23h18v1h1v1h1v4h-22v-4h1v-1h1zm1,1h-1v1h-1v3h20v-3h-1v-1z"/><path fill="#C5C7AF" d="m7,24h18v1h-18zm0,2h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1zm2,0h1v2h-1z"/>']; 
    string[13] private sixthNames = ['Plug','LAN','Hand crank','One Button','Ring','Caution','Wind up','Buttons','Lever','Load indicator','Verified','Handle','Winder'];
    string[13] private sixthLayers = [
        '<path fill="#631811" d="m24,12h1v1h1v3h-1v1h-1z"/><path fill="#9c2217" d="m27,25h1v3h-1z"/><path fill="#000" d="m26,14h2v1h1v2h-1v1h-1v1h1v1h1v4h1v2h-1v1h-1v-1h1v-2h-1v-4h-1v-1h-1v-1h1v-1h1v-2h-2z"/> ',
        '<path fill="#801e14" d="m5,9h1v1h-1z"/><path fill="#647377" d="m5,10h1v8h-1z"/><path fill="#4A4E4D" d="m7,16h1v4h-1v-1h-1v-2h1z"/> ',
        '<path fill="#6E491E" d="m2,17h2v1h-2z"/><path fill="#000000" d="m7,11h1v5h-1v-1h-1v-3h1z"/><path fill="#647377" d="m5,13h1v5h-2v-1h1z"/>',
        '<path fill="#e3a617" d="m25,12h1v2h-1z"/><path fill="#052B36" d="m24,11h1v4h-1z"/>',
        '<path fill="#3A4446" d="m6,20h2v1h-2zm4,0h1v1h-1zm3,0h1v1h-1zm3,0h1v1h-1zm3,0h1v1h-1zm3,0h1v1h-1zm2,0h2v1h-2z"/><path fill="#5D7272" d="m7,19h18v1h-1v1h1v1h-18v-1h1v-1h-1zm4,1h-1v1h1zm3,0h-1v1h1zm3,0h-1v1h1zm3,0h-1v1h1zm3,0h-1v1h1z"/>',
        '<path fill="#e3c817" d="m7,16h5v4h-1v1h-1v1h-3zm3,1h-1v2h1zm0,3h-1v1h1z"/><path fill="#000" d="m9,17h1v2h-1zm0,3h1v1h-1z"/><path fill="#EFA603" d="m11,20h1v1h-1v1h-1v-1h1z"/>',
        '<path fill="#a13115" d="m26,13h3v3h-1v1h1v3h-3v-3h-1v-1h1zm2,1h-1v1h1zm0,4h-1v1h1z"/><path fill="#263238" d="m24,14h1v5h-1z"/>',
        '<path fill="#ba200b" d="m6,14h1v1h-1z"/><path fill="#1f690f" d="m6,16h1v1h-1z"/><path fill="#263238" d="m7,11h1v7h-1z"/><path fill="#d9cf16" d="m6,12h1v1h-1z"/>',
        '<path fill="#112326" d="m24,14h1v7h-1z"/><path fill="#8a2c19" d="m27,14h2v2h-2z"/><path fill="#3A4D51" d="m26,16h1v1h-1v2h-1v-2h1z"/>',
        '<path fill="#26323A" d="m11,19h10v3h-10zm2,1h-1v1h8v-1z"/><path fill="#184831" d="m17,20h3v1h-3z"/><path fill="#56a81b" d="m12,20h5v1h-5z"/>',
        '<path fill="#117E9C" d="m19,17h6v5h-6zm5,1h-1v1h1zm-3,1h-1v1h1zm2,0h-1v1h1zm-1,1h-1v1h1z"/><path fill="#FFF" d="m23,18h1v1h-1v1h-1v1h-1v-1h-1v-1h1v1h1v-1h1z"/>',
        '<path fill="#3A4446" d="m25,10h2v3h-1v-2h-1zm1,8h1v3h-2v-1h1z"/><path fill="#102f3d" d="m24,9h1v3h-1zm0,10h1v3h-1z"/><path fill="#302919" d="m25,13h3v5h-3z"/>',
        '<path fill="#3A4446" d="m5,10h2v1h-2zm0,2h2v1h-2zm0,2h2v1h-2zm0,2h2v1h-2zm0,2h2v1h-2z"/><path fill="#5A6C6C" d="m5,11h2v1h-2zm0,2h2v1h-2zm0,2h2v1h-2zm0,2h2v1h-2z"/><path fill="#700909" d="m7,13h1v3h-1z"/>'];       
    string[11] private seventhNames = ['Button','Charge','Vernon','Broken','Weisz','Bamberg','Carroll','Kaufman','Clifton','Ascanio','None'];
    string[11] private seventhLayers = [
        '<path fill="#851515" d="m15,2h2v1h-2z"/><path fill="#51514D" d="m12,4h8v1h-8z"/><path fill="#34352B" d="m14,3h4v1h-4z"/>',
        '<path fill="#7fbf24" d="m11,4h4v1h-4z"/><path fill="#2A3B42" d="m10,3h12v1h1v1h-1v1h-12v-1h-1v-1h1zm2,1h-1v1h10v-1z"/><path fill="#E23E36" d="m20,4h1v1h-1z"/><path fill="#FFB31A" d="m18,4h2v1h-2z"/><path fill="#d6d12d" d="m15,4h3v1h-3z"/>',
        '<path fill="#455A60" d="m9,4h1v1h-1zm13,0h1v1h-1z"/><path fill="#364F38" d="m10,3h12v1h-12zm0,2h12v1h-12z"/><path fill="#e8a41c" d="m8,4h1v1h-1zm15,0h1v1h-1z"/><path fill="#1C3331" d="m10,4h12v1h-12z"/>',
        '<path fill="#FFF" d="m19,5h1v1h-1v2h1v1h1v1h-1v-1h-1v-1h-1v1h-1v1h-1v1h-1v-1h1v-1h1v-1h1v-2h1z"/>',
        '<path fill="#916c20" d="m12,3h8v1h-8z"/><path fill="#3F3E40" d="m11,5h10v1h-10z"/><path fill="#45595D" d="m10,4h12v1h-12zm0,2h12v1h-12z"/>',
        '<path fill="#E23E36" d="m11,3h1v1h-1z"/><path fill="#45595D" d="m10,3h1v1h-1zm3,0h9v1h-9zm-5,2h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1zm2,0h1v1h-1z"/><path fill="#439C29" d="m12,3h1v1h-1z"/><path fill="#2B3B41" d="m9,4h14v1h1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1z"/>',
        '<path fill="#2A3B42" d="m15,2h2v1h2v1h1v-1h3v3h-3v-1h-3v1h-2v-1h-3v1h-3v-3h3v1h1v-1h2zm-4,2h-1v1h1zm11,0h-1v1h1z"/>',
        '<path fill="#313335" d="m12,4h8v1h-8z"/><path fill="#99242D" d="m11,3h10v1h-10z"/><path fill="#000" d="m11,5h10v1h-10z"/>',
        '<path fill="#FFF" d="m15,3h2v1h-2z"/><path fill="#99242D" d="m12,2h8v1h-8z"/><path fill="#252B20" d="m10,6h12v1h-12z"/><path fill="#4B4C3C" d="m9,4h14v2h-14z"/>',
        '<path fill="#117E9C" d="m9,6h14v1h-14z"/><path fill="#FFCC01" d="m19,4h1v1h-1z"/><path fill="#2D545A" d="m18,3h3v3h-3zm2,1h-1v1h1z"/><path fill="#082B3E" d="m10,3h8v3h-9v1h-1v-2h1v-1h1zm11,0h1v1h1v1h1v2h-1v-1h-2z"/>',
        ''];

  struct BlazzObject {
        uint256 layerThree;
        uint256 layerFour;
        uint256 layerFive;
        uint256 layerSix;
        uint256 layerSeven;
    }

function randomBlazzLab(uint256 tokenId) internal pure returns (BlazzObject memory) {
        
        BlazzObject memory blazzLab;

        blazzLab.layerThree = getLayerThree(tokenId);
        blazzLab.layerFour = getLayerFour(tokenId);
        blazzLab.layerFive = getLayerFive(tokenId);
        blazzLab.layerSix = getLayerSix(tokenId);
        blazzLab.layerSeven = getLayerSeven(tokenId);

        return blazzLab;
    }

function getTraits(BlazzObject memory blazzLab) internal view returns (string memory) {
        
        string[17] memory parts;
        
        parts[0] = ', "attributes": [{"trait_type": "Souvenir","value": "';
        parts[1] = thirdNames[blazzLab.layerThree]; 
        parts[2] = '"}, {"trait_type": "Jar","value": "';
        parts[3] = fourthNames[blazzLab.layerFour];
        parts[4] = '"}, {"trait_type": "Base","value": "';
        parts[5] = fifthNames[blazzLab.layerFive];
        parts[6] = '"}, {"trait_type": "Accessory","value": "';
        parts[7] = sixthNames[blazzLab.layerSix];
        parts[8] = '"}, {"trait_type": "Top","value": "';
        parts[9] = seventhNames[blazzLab.layerSeven];
        parts[10] = '"}], ';
        
        string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2]));
                      output = string(abi.encodePacked(output, parts[3], parts[4], parts[5], parts[6], parts[7], parts[8], parts[9], parts[10]));
        return output;
    }    

function random(string memory input) internal pure returns (uint256) {
        return uint256(keccak256(abi.encodePacked(input)));
    }

function getLayerThree(uint256 tokenId) internal pure returns (uint256) {
        uint256 rand = random(string(abi.encodePacked("LAYER THREE", toString(tokenId))));

        uint256 rn3 = rand % 275;
        uint256 l3 = 0;

        if (rn3 >= 40 && rn3 < 75) { l3 = 1; }
        if (rn3 >= 75 && rn3 < 110) { l3 = 2; }
        if (rn3 >= 110 && rn3 < 140) { l3 = 3; }
        if (rn3 >= 140 && rn3 < 180) { l3 = 4; }
        if (rn3 >= 180 && rn3 < 220) { l3 = 5; }
        if (rn3 >= 220 && rn3 < 245) { l3 = 6; }
        if (rn3 >= 245 && rn3 < 260) { l3 = 7; }
        if (rn3 >= 260 && rn3 < 270) { l3 = 8; }
        if (rn3 >= 270) { l3 = 9; }
        
        return l3;
    }

    function getLayerFour(uint256 tokenId) internal pure returns (uint256) {
        uint256 rand = random(string(abi.encodePacked("LAYER FOUR", toString(tokenId))));

        uint256 rn4 = rand % 310;
        uint256 l4 = 0;

        if (rn4 >= 35 && rn4 < 65) { l4 = 1; }
        if (rn4 >= 65 && rn4 < 100) { l4 = 2; }
        if (rn4 >= 100 && rn4 < 130) { l4 = 3; }
        if (rn4 >= 130 && rn4 < 155) { l4 = 4; }
        if (rn4 >= 155 && rn4 < 175) { l4 = 5; }
        if (rn4 >= 175 && rn4 < 200) { l4 = 6; }
        if (rn4 >= 200 && rn4 < 220) { l4 = 7; }
        if (rn4 >= 220 && rn4 < 235) { l4 = 8; }
        if (rn4 >= 235 && rn4 < 245) { l4 = 9; }
        if (rn4 >= 245 && rn4 < 280) { l4 = 10; }
        if (rn4 >= 280) { l4 = 11; }
        
        return l4;
    }

   function getLayerFive(uint256 tokenId) internal pure returns (uint256) {
        uint256 rand = random(string(abi.encodePacked("LAYER FIVE", toString(tokenId))));

        uint256 rn5 = rand % 165;
        uint256 l5 = 0;

        if (rn5 >= 15 && rn5 < 27) { l5 = 1; }
        if (rn5 >= 27 && rn5 < 40) { l5 = 2; }
        if (rn5 >= 40 && rn5 < 60) { l5 = 3; }
        if (rn5 >= 60 && rn5 < 80) { l5 = 4; }
        if (rn5 >= 80 && rn5 < 100) { l5 = 5; }
        if (rn5 >= 100 && rn5 < 120) { l5 = 6; }
        if (rn5 >= 120 && rn5 < 140) { l5 = 7; }
        if (rn5 >= 140 && rn5 < 155) { l5 = 8; }
        if (rn5 >= 155) { l5 = 9; }
        
        
        return l5;
    }

   function getLayerSix(uint256 tokenId) internal pure returns (uint256) {
        uint256 rand = random(string(abi.encodePacked("LAYER SIX", toString(tokenId))));

        uint256 rn6 = rand % 300;
        uint256 l6 = 0;

        if (rn6 >= 25 && rn6 < 55) { l6 = 1; }
        if (rn6 >= 55 && rn6 < 80) { l6 = 2; }
        if (rn6 >= 80 && rn6 < 110) { l6 = 3; }
        if (rn6 >= 110 && rn6 < 130) { l6 = 4; }
        if (rn6 >= 130 && rn6 < 145) { l6 = 5; }
        if (rn6 >= 145 && rn6 < 160) { l6 = 6; }
        if (rn6 >= 160 && rn6 < 190) { l6 = 7; }
        if (rn6 >= 190 && rn6 < 215) { l6 = 8; }
        if (rn6 >= 215 && rn6 < 245) { l6 = 9; }
        if (rn6 >= 245 && rn6 < 255) { l6 = 10; }
        if (rn6 >= 255 && rn6 < 280) { l6 = 11; }
        if (rn6 >= 280) { l6 = 12; }
        
        return l6;
    }

 function getLayerSeven(uint256 tokenId) internal pure returns (uint256) {
        uint256 rand = random(string(abi.encodePacked("LAYER SEVEN", toString(tokenId))));

        uint256 rn7 = rand % 220;
        uint256 l7 = 0;

        if (rn7 >= 30 && rn7 < 60) { l7 = 1; }
        if (rn7 >= 60 && rn7 < 90) { l7 = 2; }
        if (rn7 >= 90 && rn7 < 110) { l7 = 3; }
        if (rn7 >= 110 && rn7 < 130) { l7 = 4; }
        if (rn7 >= 130 && rn7 < 150) { l7 = 5; }
        if (rn7 >= 150 && rn7 < 165) { l7 = 6; }
         if (rn7 >= 165 && rn7 < 180) { l7 = 7; }
        if (rn7 >= 180 && rn7 < 195) { l7 = 8; }
        if (rn7 >= 195 && rn7 < 205) { l7 = 9; }
        if (rn7 >= 205) { l7 = 10; }
        
        return l7;
    }

   function getSVG(BlazzObject memory blazzLab) internal view returns (string memory) {
        string[7] memory parts;

        parts[0] = '<svg id="x" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 32 32"><path fill="#94b5ae" d="m0,0h32v32h-32z"/>';
        parts[1] = thirdLayers[blazzLab.layerThree];
        parts[2] = fourthLayers[blazzLab.layerFour];
        parts[3] = fifthLayers[blazzLab.layerFive];
        parts[4] = sixthLayers[blazzLab.layerSix];
        parts[5] = seventhLayers[blazzLab.layerSeven];
        parts[6] = '<style>#x{shape-rendering: crispedges;}</style></svg>';

        string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6]));

        return output;
    }

   function tokenURI(uint256 tokenId) override public view returns (string memory) {
        BlazzObject memory blazzLab = randomBlazzLab(tokenId);
        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Blazz Lab Exp.No #', toString(tokenId), '", "description": "Blazz Lab is a laboratory full of experiments done by Dr Blazz, an illustrator alter ego. These experiments are completely on-chain and were randomly generated at mint."', getTraits(blazzLab), '"image": "data:image/svg+xml;base64,', Base64.encode(bytes(getSVG(blazzLab))), '"}'))));
        json = string(abi.encodePacked('data:application/json;base64,', json));
        return json;
    }

    function mint(address destination, uint256 amountOfTokens) private {
        require(totalSupply() < maxSupply, "All tokens have been minted");
        require(totalSupply() + amountOfTokens <= maxSupply, "Minting would exceed max supply");
        require(amountOfTokens <= maxMint, "Cannot purchase this many tokens in a transaction");
        require(amountOfTokens > 0, "Must mint at least one token");
        require(price * amountOfTokens == msg.value, "ETH amount is incorrect");

        for (uint256 i = 0; i < amountOfTokens; i++) {
            uint256 tokenId = numTokensMinted + 1;
            _safeMint(destination, tokenId);
            numTokensMinted += 1;
        }
    }

    function mintForSelf(uint256 amountOfTokens) public payable virtual {
        mint(_msgSender(),amountOfTokens);
    }

    function mintForFriend(address walletAddress, uint256 amountOfTokens) public payable virtual {
        mint(walletAddress,amountOfTokens);
    }

    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }

    function setMaxMint(uint256 newMaxMint) public onlyOwner {
        maxMint = newMaxMint;
    }

    function withdrawAll() public payable onlyOwner {
        require(payable(_msgSender()).send(address(this).balance));
    }

    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);
    }
    
    constructor() ERC721("Blazz Lab", "BLAZZ") Ownable() {}
}

library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        uint256 encodedLen = 4 * ((len + 2) / 3);

        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

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

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

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

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

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

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

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[{"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":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"amountOfTokens","type":"uint256"}],"name":"mintForFriend","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfTokens","type":"uint256"}],"name":"mintForSelf","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052610d05600c55662386f26fc10000600d556008600e556040518061014001604052806040518060400160405280600681526020017f46696e676572000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f42697474656e2046696e6765720000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f5a6f6d6269652046696e6765720000000000000000000000000000000000000081525081526020016040518060400160405280601481526020017f5a6f6d6269652042697474656e2046696e67657200000000000000000000000081525081526020016040518060400160405280600381526020017f457965000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f44656e747572650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f44656e7475726520476f6c64000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4e6970706c65000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f5a6f6d626965204e6970706c650000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5361746f73686920486169720000000000000000000000000000000000000000815250815250601090600a62000284929190620016de565b506040518061014001604052806040518060e0016040528060a6815260200162009d9260a69139815260200160405180610120016040528060e6815260200162009b2e60e6913981526020016040518060e0016040528060a6815260200162007e5e60a69139815260200160405180610120016040528060e6815260200162007f0460e69139815260200160405180610100016040528060d281526020016200973b60d29139815260200160405180610100016040528060d98152602001620089d160d99139815260200160405180610120016040528060f881526020016200ab8860f89139815260200160405180610100016040528060d181526020016200994e60d19139815260200160405180610100016040528060d181526020016200a4da60d1913981526020016040518060c00160405280609681526020016200ac8060969139815250601a90600a620003de929190620016de565b506040518061018001604052806040518060400160405280600481526020017f426c75650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f457661706f726174656420626c7565000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f477265656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f457661706f726174656420677265656e0000000000000000000000000000000081525081526020016040518060400160405280600681526020017f59656c6c6f77000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f457661706f72617465642079656c6c6f7700000000000000000000000000000081525081526020016040518060400160405280600681526020017f507572706c65000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f457661706f726174656420707572706c6500000000000000000000000000000081525081526020016040518060400160405280600b81526020017f526164696f61637469766500000000000000000000000000000000000000000081525081526020016040518060400160405280601681526020017f457661706f726174656420526164696f6163746976650000000000000000000081525081526020016040518060400160405280600781526020017f526567756c61720000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601281526020017f457661706f726174656420726567756c61720000000000000000000000000000815250815250602490600c620006bf92919062001738565b5060405180610180016040528060405180610260016040528061023481526020016200a5ab610234913981526020016040518061024001604052806102098152602001620077566102099139815260200160405180610260016040528061023481526020016200b6096102349139815260200160405180610240016040528061020981526020016200a23161020991398152602001604051806102600160405280610234815260200162009f33610234913981526020016040518061024001604052806102098152602001620095326102099139815260200160405180610260016040528061023481526020016200a8b66102349139815260200160405180610240016040528061020981526020016200b3226102099139815260200160405180610260016040528061023481526020016200ad89610234913981526020016040518061024001604052806102098152602001620083496102099139815260200160405180610260016040528061023481526020016200855261023491398152602001604051806102400160405280610209815260200162008aaa6102099139815250603090600c6200087492919062001738565b506040518061014001604052806040518060400160405280600381526020017f455350000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f43524a000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f474c4c360000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f50514c000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f45594a000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f544552000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f4e4600000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f4a4f52000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f414300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f4b41490000000000000000000000000000000000000000000000000000000000815250815250603c90600a62000adf929190620016de565b50604051806101400160405280604051806102800160405280610242815260200162007c1c61024291398152602001604051806101c0016040528061018281526020016200b1a06101829139815260200160405180610280016040528061024b81526020016200878661024b913981526020016040518061022001604052806101e181526020016200902e6101e19139815260200160405180610160016040528061013681526020016200795f61013691398152602001604051806101a0016040528061017e815260200162009c1461017e913981526020016040518061024001604052806102158152602001620080b661021591398152602001604051806102400160405280610203815260200162008cb36102039139815260200160405180610180016040528061015c8152602001620093d661015c91398152602001604051806101c00160405280610187815260200162007a956101879139815250604690600a62000c50929190620016de565b50604051806101a001604052806040518060400160405280600481526020017f506c75670000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f4c414e000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f48616e64206372616e6b0000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4f6e6520427574746f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f52696e670000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f43617574696f6e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f57696e642075700000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f427574746f6e730000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4c6576657200000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4c6f616420696e64696361746f7200000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f566572696669656400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f48616e646c65000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f57696e6465720000000000000000000000000000000000000000000000000000815250815250605090600d62000f6c92919062001792565b50604051806101a0016040528060405180610100016040528060c881526020016200988660c8913981526020016040518060c001604052806083815260200162009eb06083913981526020016040518060c00160405280608881526020016200920f6088913981526020016040518060800160405280605281526020016200b52b60529139815260200160405180610120016040528060ea81526020016200b83d60ea913981526020016040518060e0016040528060ae815260200162009a1f60ae913981526020016040518060a00160405280607e8152602001620082cb607e913981526020016040518060c0016040528060a081526020016200a43a60a0913981526020016040518060c00160405280608581526020016200afbd6085913981526020016040518060c00160405280608c81526020016200b57d608c913981526020016040518060c00160405280609f815260200162009297609f913981526020016040518060c00160405280609e81526020016200aaea609e9139815260200160405180610100016040528060cc815260200162007fea60cc9139815250605d90600d6200111f92919062001792565b506040518061016001604052806040518060400160405280600681526020017f427574746f6e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f436861726765000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f5665726e6f6e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f42726f6b656e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f576569737a00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f42616d626572670000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f436172726f6c6c0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4b6175666d616e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f436c6966746f6e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f417363616e696f0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4e6f6e6500000000000000000000000000000000000000000000000000000000815250815250606a90600b620013c5929190620017ec565b506040518061016001604052806040518060a001604052806078815260200162009e3860789139815260200160405180610120016040528060ee815260200162008eb660ee9139815260200160405180610100016040528060ca81526020016200a16760ca913981526020016040518060a001604052806061815260200162009acd6061913981526020016040518060c00160405280608a815260200162008fa4608a9139815260200160405180610180016040528061015e81526020016200b04261015e913981526020016040518060a00160405280607381526020016200ad166073913981526020016040518060a00160405280607981526020016200980d6079913981526020016040518060c0016040528060a081526020016200933660a09139815260200160405180610100016040528060d781526020016200a7df60d79139815260200160405180602001604052806000815250815250607590600b62001533929190620017ec565b503480156200154157600080fd5b506040518060400160405280600981526020017f426c617a7a204c616200000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f424c415a5a0000000000000000000000000000000000000000000000000000008152508160009080519060200190620015c692919062001846565b508060019080519060200190620015df92919062001846565b5050506001600a819055506200160a620015fe6200161060201b60201c565b6200161860201b60201c565b620019c9565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82600a810192821562001725579160200282015b82811115620017245782518290805190602001906200171392919062001846565b5091602001919060010190620016f2565b5b509050620017349190620018d7565b5090565b82600c81019282156200177f579160200282015b828111156200177e5782518290805190602001906200176d92919062001846565b50916020019190600101906200174c565b5b5090506200178e9190620018d7565b5090565b82600d8101928215620017d9579160200282015b82811115620017d8578251829080519060200190620017c792919062001846565b5091602001919060010190620017a6565b5b509050620017e89190620018d7565b5090565b82600b810192821562001833579160200282015b82811115620018325782518290805190602001906200182192919062001846565b509160200191906001019062001800565b5b509050620018429190620018d7565b5090565b828054620018549062001964565b90600052602060002090601f016020900481019282620018785760008555620018c4565b82601f106200189357805160ff1916838001178555620018c4565b82800160010185558215620018c4579182015b82811115620018c3578251825591602001919060010190620018a6565b5b509050620018d39190620018ff565b5090565b5b80821115620018fb5760008181620018f191906200191e565b50600101620018d8565b5090565b5b808211156200191a57600081600090555060010162001900565b5090565b5080546200192c9062001964565b6000825580601f1062001940575062001961565b601f016020900490600052602060002090810190620019609190620018ff565b5b50565b600060028204905060018216806200197d57607f821691505b602082108114156200199457620019936200199a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615d7d80620019d96000396000f3fe6080604052600436106101b75760003560e01c80637501f741116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146105cf578063d5abeb011461060c578063e985e9c514610637578063f2fde38b14610674576101b7565b8063a22cb46514610561578063b88d4fde1461058a578063c49b3d54146105b3576101b7565b806391b7f5ed116100c657806391b7f5ed146104c657806395d89b41146104ef578063a035b1fe1461051a578063a108f52914610545576101b7565b80637501f74114610466578063853828b6146104915780638da5cb5b1461049b576101b7565b80634230baee11610159578063547520fe11610133578063547520fe146103ac5780636352211e146103d557806370a0823114610412578063715018a61461044f576101b7565b80634230baee1461031b57806342842e0e146103465780634f6ccce71461036f576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b55780632f745c59146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de919061451e565b61069d565b6040516101f0919061541d565b60405180910390f35b34801561020557600080fd5b5061020e610717565b60405161021b9190615438565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190614570565b6107a9565b60405161025891906153b6565b60405180910390f35b34801561026d57600080fd5b50610288600480360381019061028391906144e2565b61082e565b005b34801561029657600080fd5b5061029f610946565b6040516102ac919061571a565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d791906143dc565b610953565b005b3480156102ea57600080fd5b50610305600480360381019061030091906144e2565b6109b3565b604051610312919061571a565b60405180910390f35b34801561032757600080fd5b50610330610a58565b60405161033d919061571a565b60405180910390f35b34801561035257600080fd5b5061036d600480360381019061036891906143dc565b610a5e565b005b34801561037b57600080fd5b5061039660048036038101906103919190614570565b610a7e565b6040516103a3919061571a565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190614570565b610b15565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190614570565b610b9b565b60405161040991906153b6565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190614377565b610c4d565b604051610446919061571a565b60405180910390f35b34801561045b57600080fd5b50610464610d05565b005b34801561047257600080fd5b5061047b610d8d565b604051610488919061571a565b60405180910390f35b610499610d93565b005b3480156104a757600080fd5b506104b0610e56565b6040516104bd91906153b6565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190614570565b610e80565b005b3480156104fb57600080fd5b50610504610f06565b6040516105119190615438565b60405180910390f35b34801561052657600080fd5b5061052f610f98565b60405161053c919061571a565b60405180910390f35b61055f600480360381019061055a91906144e2565b610f9e565b005b34801561056d57600080fd5b50610588600480360381019061058391906144a6565b610fac565b005b34801561059657600080fd5b506105b160048036038101906105ac919061442b565b61112d565b005b6105cd60048036038101906105c89190614570565b61118f565b005b3480156105db57600080fd5b506105f660048036038101906105f19190614570565b6111a3565b6040516106039190615438565b60405180910390f35b34801561061857600080fd5b5061062161122e565b60405161062e919061571a565b60405180910390f35b34801561064357600080fd5b5061065e600480360381019061065991906143a0565b611234565b60405161066b919061541d565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190614377565b6112c8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610710575061070f826113c0565b5b9050919050565b606060008054610726906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610752906159a4565b801561079f5780601f106107745761010080835404028352916020019161079f565b820191906000526020600020905b81548152906001019060200180831161078257829003601f168201915b5050505050905090565b60006107b4826114a2565b6107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea9061561a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083982610b9b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a19061569a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108c961150e565b73ffffffffffffffffffffffffffffffffffffffff1614806108f857506108f7816108f261150e565b611234565b5b610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e9061553a565b60405180910390fd5b6109418383611516565b505050565b6000600880549050905090565b61096461095e61150e565b826115cf565b6109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a906156ba565b60405180910390fd5b6109ae8383836116ad565b505050565b60006109be83610c4d565b82106109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f69061545a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f5481565b610a798383836040518060200160405280600081525061112d565b505050565b6000610a88610946565b8210610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac0906156da565b60405180910390fd5b60088281548110610b03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610b1d61150e565b73ffffffffffffffffffffffffffffffffffffffff16610b3b610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b889061563a565b60405180910390fd5b80600e8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b9061557a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb59061555a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d0d61150e565b73ffffffffffffffffffffffffffffffffffffffff16610d2b610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d789061563a565b60405180910390fd5b610d8b6000611909565b565b600e5481565b610d9b61150e565b73ffffffffffffffffffffffffffffffffffffffff16610db9610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e069061563a565b60405180910390fd5b610e1761150e565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e5457600080fd5b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e8861150e565b73ffffffffffffffffffffffffffffffffffffffff16610ea6610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef39061563a565b60405180910390fd5b80600d8190555050565b606060018054610f15906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610f41906159a4565b8015610f8e5780601f10610f6357610100808354040283529160200191610f8e565b820191906000526020600020905b815481529060010190602001808311610f7157829003601f168201915b5050505050905090565b600d5481565b610fa882826119cf565b5050565b610fb461150e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611022576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611019906154fa565b60405180910390fd5b806005600061102f61150e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110dc61150e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611121919061541d565b60405180910390a35050565b61113e61113861150e565b836115cf565b61117d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611174906156ba565b60405180910390fd5b61118984848484611ba3565b50505050565b6111a061119a61150e565b826119cf565b50565b606060006111b083611bff565b905060006112006111c085611c72565b6111c984611e1f565b6111da6111d5866128a8565b613086565b6040516020016111ec93929190615359565b604051602081830303815290604052613086565b9050806040516020016112139190615315565b60405160208183030381529060405290508092505050919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112d061150e565b73ffffffffffffffffffffffffffffffffffffffff166112ee610e56565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b9061563a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab9061549a565b60405180910390fd5b6113bd81611909565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061148b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061149b575061149a82613244565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661158983610b9b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115da826114a2565b611619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116109061551a565b60405180910390fd5b600061162483610b9b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061169357508373ffffffffffffffffffffffffffffffffffffffff1661167b846107a9565b73ffffffffffffffffffffffffffffffffffffffff16145b806116a457506116a38185611234565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116cd82610b9b565b73ffffffffffffffffffffffffffffffffffffffff1614611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a9061565a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a906154da565b60405180910390fd5b61179e8383836132ae565b6117a9600082611516565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117f991906158ba565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461185091906157d9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600c546119da610946565b10611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a11906156fa565b60405180910390fd5b600c5481611a26610946565b611a3091906157d9565b1115611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a689061559a565b60405180910390fd5b600e54811115611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad906155ba565b60405180910390fd5b60008111611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af09061567a565b60405180910390fd5b3481600d54611b089190615860565b14611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f906155fa565b60405180910390fd5b60005b81811015611b9e5760006001600f54611b6491906157d9565b9050611b7084826133c2565b6001600f6000828254611b8391906157d9565b92505081905550508080611b96906159d6565b915050611b4b565b505050565b611bae8484846116ad565b611bba848484846133e0565b611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf09061547a565b60405180910390fd5b50505050565b611c07614228565b611c0f614228565b611c1883613577565b816000018181525050611c2a836136b4565b816020018181525050611c3c83613825565b816040018181525050611c4e8361395d565b816060018181525050611c6083613ae9565b81608001818152505080915050919050565b60606000821415611cba576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e1a565b600082905060005b60008214611cec578080611cd5906159d6565b915050600a82611ce5919061582f565b9150611cc2565b60008167ffffffffffffffff811115611d2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611d605781602001600182028036833780820191505090505b5090505b60008514611e1357600182611d7991906158ba565b9150600a85611d889190615a1f565b6030611d9491906157d9565b60f81b818381518110611dd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e0c919061582f565b9450611d64565b8093505050505b919050565b6060611e29614257565b604051806060016040528060358152602001615d136035913981600060118110611e7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060108360000151600a8110611ec2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054611ece906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054611efa906159a4565b8015611f475780601f10611f1c57610100808354040283529160200191611f47565b820191906000526020600020905b815481529060010190602001808311611f2a57829003601f168201915b505050505081600160118110611f86577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060238152602001615ccc6023913981600260118110611fe1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060248360200151600c8110612027577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612033906159a4565b80601f016020809104026020016040519081016040528092919081815260200182805461205f906159a4565b80156120ac5780601f10612081576101008083540402835291602001916120ac565b820191906000526020600020905b81548152906001019060200180831161208f57829003601f168201915b5050505050816003601181106120eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060248152602001615cef6024913981600460118110612146577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250603c8360400151600a811061218c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612198906159a4565b80601f01602080910402602001604051908101604052809291908181526020018280546121c4906159a4565b80156122115780601f106121e657610100808354040283529160200191612211565b820191906000526020600020905b8154815290600101906020018083116121f457829003601f168201915b505050505081600560118110612250577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060298152602001615b7a60299139816006601181106122ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060508360600151600d81106122f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0180546122fd906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612329906159a4565b80156123765780601f1061234b57610100808354040283529160200191612376565b820191906000526020600020905b81548152906001019060200180831161235957829003601f168201915b5050505050816007601181106123b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060238152602001615ca96023913981600860118110612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250606a8360800151600b8110612456577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612462906159a4565b80601f016020809104026020016040519081016040528092919081815260200182805461248e906159a4565b80156124db5780601f106124b0576101008083540402835291602001916124db565b820191906000526020600020905b8154815290600101906020018083116124be57829003601f168201915b50505050508160096011811061251a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060400160405280600581526020017f227d5d2c2000000000000000000000000000000000000000000000000000000081525081600a60118110612592577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506000816000601181106125d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015182600160118110612615577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600260118110612654577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160405160200161266b93929190615178565b604051602081830303815290604052905080826003601181106126b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151836004601181106126f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600560118110612735577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015185600660118110612774577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151866007601181106127b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151876008601181106127f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015188600960118110612831577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015189600a60118110612870577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160405160200161288d9998979695949392919061520e565b60405160208183030381529060405290508092505050919050565b60606128b261427f565b6040518060c0016040528060918152602001615bd86091913981600060078110612905577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250601a8360000151600a811061294b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612957906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612983906159a4565b80156129d05780601f106129a5576101008083540402835291602001916129d0565b820191906000526020600020905b8154815290600101906020018083116129b357829003601f168201915b505050505081600160078110612a0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060308360200151600c8110612a55577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612a61906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8d906159a4565b8015612ada5780601f10612aaf57610100808354040283529160200191612ada565b820191906000526020600020905b815481529060010190602001808311612abd57829003601f168201915b505050505081600260078110612b19577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060468360400151600a8110612b5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612b6b906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612b97906159a4565b8015612be45780601f10612bb957610100808354040283529160200191612be4565b820191906000526020600020905b815481529060010190602001808311612bc757829003601f168201915b505050505081600360078110612c23577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250605d8360600151600d8110612c69577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612c75906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca1906159a4565b8015612cee5780601f10612cc357610100808354040283529160200191612cee565b820191906000526020600020905b815481529060010190602001808311612cd157829003601f168201915b505050505081600460078110612d2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060758360800151600b8110612d73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612d7f906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612dab906159a4565b8015612df85780601f10612dcd57610100808354040283529160200191612df8565b820191906000526020600020905b815481529060010190602001808311612ddb57829003601f168201915b505050505081600560078110612e37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060358152602001615ba36035913981600660078110612e92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250600081600060078110612ed6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015182600160078110612f15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600260078110612f54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600360078110612f93577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015185600460078110612fd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015186600560078110613011577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600660078110613050577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160405160200161306b97969594939291906151a9565b60405160208183030381529060405290508092505050919050565b606060008251905060008114156130af576040518060200160405280600081525091505061323f565b600060036002836130c091906157d9565b6130ca919061582f565b60046130d69190615860565b905060006020826130e791906157d9565b67ffffffffffffffff811115613126577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156131585781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001615c69604091399050600181016020830160005b868110156131fc5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050613183565b506003860660018114613216576002811461322657613231565b613d3d60f01b6002830352613231565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132b9838383613c3c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132fc576132f781613c41565b61333b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461333a576133398382613c8a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561337e5761337981613df7565b6133bd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133bc576133bb8282613f3a565b5b5b505050565b6133dc828260405180602001604052806000815250613fb9565b5050565b60006134018473ffffffffffffffffffffffffffffffffffffffff16614014565b1561356a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261342a61150e565b8786866040518563ffffffff1660e01b815260040161344c94939291906153d1565b602060405180830381600087803b15801561346657600080fd5b505af192505050801561349757506040513d601f19601f820116820180604052508101906134949190614547565b60015b61351a573d80600081146134c7576040519150601f19603f3d011682016040523d82523d6000602084013e6134cc565b606091505b50600081511415613512576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135099061547a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061356f565b600190505b949350505050565b6000806135aa61358684611c72565b604051602001613596919061528d565b604051602081830303815290604052614027565b90506000610113826135bc9190615a1f565b90506000602882101580156135d15750604b82105b156135db57600190505b604b82101580156135ec5750606e82105b156135f657600290505b606e82101580156136075750608c82105b1561361157600390505b608c8210158015613622575060b482105b1561362c57600490505b60b4821015801561363d575060dc82105b1561364757600590505b60dc8210158015613658575060f582105b1561366257600690505b60f58210158015613674575061010482105b1561367e57600790505b6101048210158015613691575061010e82105b1561369b57600890505b61010e82106136a957600990505b809350505050919050565b6000806136e76136c384611c72565b6040516020016136d39190615337565b604051602081830303815290604052614027565b90506000610136826136f99190615a1f565b905060006023821015801561370e5750604182105b1561371857600190505b604182101580156137295750606482105b1561373357600290505b606482101580156137445750608282105b1561374e57600390505b6082821015801561375f5750609b82105b1561376957600490505b609b821015801561377a575060af82105b1561378457600590505b60af8210158015613795575060c882105b1561379f57600690505b60c882101580156137b0575060dc82105b156137ba57600790505b60dc82101580156137cb575060eb82105b156137d557600890505b60eb82101580156137e6575060f582105b156137f057600990505b60f58210158015613802575061011882105b1561380c57600a90505b610118821061381a57600b90505b809350505050919050565b60008061385861383484611c72565b60405160200161384491906152af565b604051602081830303815290604052614027565b9050600060a5826138699190615a1f565b90506000600f821015801561387e5750601b82105b1561388857600190505b601b82101580156138995750602882105b156138a357600290505b602882101580156138b45750603c82105b156138be57600390505b603c82101580156138cf5750605082105b156138d957600490505b605082101580156138ea5750606482105b156138f457600590505b606482101580156139055750607882105b1561390f57600690505b607882101580156139205750608c82105b1561392a57600790505b608c821015801561393b5750609b82105b1561394557600890505b609b821061395257600990505b809350505050919050565b60008061399061396c84611c72565b60405160200161397c91906152d1565b604051602081830303815290604052614027565b9050600061012c826139a29190615a1f565b90506000601982101580156139b75750603782105b156139c157600190505b603782101580156139d25750605082105b156139dc57600290505b605082101580156139ed5750606e82105b156139f757600390505b606e8210158015613a085750608282105b15613a1257600490505b60828210158015613a235750609182105b15613a2d57600590505b60918210158015613a3e575060a082105b15613a4857600690505b60a08210158015613a59575060be82105b15613a6357600790505b60be8210158015613a74575060d782105b15613a7e57600890505b60d78210158015613a8f575060f582105b15613a9957600990505b60f58210158015613aaa575060ff82105b15613ab457600a90505b60ff8210158015613ac6575061011882105b15613ad057600b90505b6101188210613ade57600c90505b809350505050919050565b600080613b1c613af884611c72565b604051602001613b0891906152f3565b604051602081830303815290604052614027565b9050600060dc82613b2d9190615a1f565b90506000601e8210158015613b425750603c82105b15613b4c57600190505b603c8210158015613b5d5750605a82105b15613b6757600290505b605a8210158015613b785750606e82105b15613b8257600390505b606e8210158015613b935750608282105b15613b9d57600490505b60828210158015613bae5750609682105b15613bb857600590505b60968210158015613bc9575060a582105b15613bd357600690505b60a58210158015613be4575060b482105b15613bee57600790505b60b48210158015613bff575060c382105b15613c0957600890505b60c38210158015613c1a575060cd82105b15613c2457600990505b60cd8210613c3157600a90505b809350505050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613c9784610c4d565b613ca191906158ba565b9050600060076000848152602001908152602001600020549050818114613d86576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613e0b91906158ba565b9050600060096000848152602001908152602001600020549050600060088381548110613e61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613ea9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613f1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613f4583610c4d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b613fc3838361405a565b613fd060008484846133e0565b61400f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140069061547a565b60405180910390fd5b505050565b600080823b905060008111915050919050565b60008160405160200161403a9190615161565b6040516020818303038152906040528051906020012060001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156140ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140c1906155da565b60405180910390fd5b6140d3816114a2565b15614113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410a906154ba565b60405180910390fd5b61411f600083836132ae565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461416f91906157d9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518061022001604052806011905b60608152602001906001900390816142675790505090565b6040518060e001604052806007905b606081526020019060019003908161428e5790505090565b60006142b96142b484615766565b615735565b9050828152602081018484840111156142d157600080fd5b6142dc848285615962565b509392505050565b6000813590506142f381615b1d565b92915050565b60008135905061430881615b34565b92915050565b60008135905061431d81615b4b565b92915050565b60008151905061433281615b4b565b92915050565b600082601f83011261434957600080fd5b81356143598482602086016142a6565b91505092915050565b60008135905061437181615b62565b92915050565b60006020828403121561438957600080fd5b6000614397848285016142e4565b91505092915050565b600080604083850312156143b357600080fd5b60006143c1858286016142e4565b92505060206143d2858286016142e4565b9150509250929050565b6000806000606084860312156143f157600080fd5b60006143ff868287016142e4565b9350506020614410868287016142e4565b925050604061442186828701614362565b9150509250925092565b6000806000806080858703121561444157600080fd5b600061444f878288016142e4565b9450506020614460878288016142e4565b935050604061447187828801614362565b925050606085013567ffffffffffffffff81111561448e57600080fd5b61449a87828801614338565b91505092959194509250565b600080604083850312156144b957600080fd5b60006144c7858286016142e4565b92505060206144d8858286016142f9565b9150509250929050565b600080604083850312156144f557600080fd5b6000614503858286016142e4565b925050602061451485828601614362565b9150509250929050565b60006020828403121561453057600080fd5b600061453e8482850161430e565b91505092915050565b60006020828403121561455957600080fd5b600061456784828501614323565b91505092915050565b60006020828403121561458257600080fd5b600061459084828501614362565b91505092915050565b6145a2816158ee565b82525050565b6145b181615900565b82525050565b60006145c282615796565b6145cc81856157ac565b93506145dc818560208601615971565b6145e581615b0c565b840191505092915050565b60006145fb826157a1565b61460581856157bd565b9350614615818560208601615971565b61461e81615b0c565b840191505092915050565b6000614634826157a1565b61463e81856157ce565b935061464e818560208601615971565b80840191505092915050565b6000614667602b836157bd565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006146cd6032836157bd565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006147336026836157bd565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614799600b836157ce565b91507f4c415945522054485245450000000000000000000000000000000000000000006000830152600b82019050919050565b60006147d9600a836157ce565b91507f4c415945522046495645000000000000000000000000000000000000000000006000830152600a82019050919050565b6000614819601c836157bd565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006148596009836157ce565b91507f4c415945522053495800000000000000000000000000000000000000000000006000830152600982019050919050565b60006148996024836157bd565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148ff6019836157bd565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061493f602c836157bd565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006149a56038836157bd565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614a0b602a836157bd565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a716029836157bd565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ad7601f836157bd565b91507f4d696e74696e6720776f756c6420657863656564206d617820737570706c79006000830152602082019050919050565b6000614b176024836157ce565b91507f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360008301527f6536342c000000000000000000000000000000000000000000000000000000006020830152602482019050919050565b6000614b7d6031836157bd565b91507f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008301527f20696e2061207472616e73616374696f6e0000000000000000000000000000006020830152604082019050919050565b6000614be36002836157ce565b91507f227d0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b6000614c236020836157bd565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614c636017836157bd565b91507f45544820616d6f756e7420697320696e636f72726563740000000000000000006000830152602082019050919050565b6000614ca3602c836157bd565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614d096020836157bd565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614d496029836157bd565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614daf600b836157ce565b91507f4c4159455220534556454e0000000000000000000000000000000000000000006000830152600b82019050919050565b6000614def601c836157bd565b91507f4d757374206d696e74206174206c65617374206f6e6520746f6b656e000000006000830152602082019050919050565b6000614e2f6021836157bd565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e95601d836157ce565b91507f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006000830152601d82019050919050565b6000614ed56031836157bd565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614f3b602c836157bd565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614fa1600a836157ce565b91507f4c4159455220464f5552000000000000000000000000000000000000000000006000830152600a82019050919050565b6000614fe160bc836157ce565b91507f222c20226465736372697074696f6e223a2022426c617a7a204c61622069732060008301527f61206c61626f7261746f72792066756c6c206f66206578706572696d656e747360208301527f20646f6e6520627920447220426c617a7a2c20616e20696c6c7573747261746f60408301527f7220616c7465722065676f2e205468657365206578706572696d656e7473206160608301527f726520636f6d706c6574656c79206f6e2d636861696e20616e6420776572652060808301527f72616e646f6d6c792067656e657261746564206174206d696e742e220000000060a083015260bc82019050919050565b60006150df601c836157ce565b91507f7b226e616d65223a2022426c617a7a204c6162204578702e4e6f2023000000006000830152601c82019050919050565b600061511f601b836157bd565b91507f416c6c20746f6b656e732068617665206265656e206d696e74656400000000006000830152602082019050919050565b61515b81615958565b82525050565b600061516d8284614629565b915081905092915050565b60006151848286614629565b91506151908285614629565b915061519c8284614629565b9150819050949350505050565b60006151b5828a614629565b91506151c18289614629565b91506151cd8288614629565b91506151d98287614629565b91506151e58286614629565b91506151f18285614629565b91506151fd8284614629565b915081905098975050505050505050565b600061521a828c614629565b9150615226828b614629565b9150615232828a614629565b915061523e8289614629565b915061524a8288614629565b91506152568287614629565b91506152628286614629565b915061526e8285614629565b915061527a8284614629565b91508190509a9950505050505050505050565b60006152988261478c565b91506152a48284614629565b915081905092915050565b60006152ba826147cc565b91506152c68284614629565b915081905092915050565b60006152dc8261484c565b91506152e88284614629565b915081905092915050565b60006152fe82614da2565b915061530a8284614629565b915081905092915050565b600061532082614e88565b915061532c8284614629565b915081905092915050565b600061534282614f94565b915061534e8284614629565b915081905092915050565b6000615364826150d2565b91506153708286614629565b915061537b82614fd4565b91506153878285614629565b915061539282614b0a565b915061539e8284614629565b91506153a982614bd6565b9150819050949350505050565b60006020820190506153cb6000830184614599565b92915050565b60006080820190506153e66000830187614599565b6153f36020830186614599565b6154006040830185615152565b818103606083015261541281846145b7565b905095945050505050565b600060208201905061543260008301846145a8565b92915050565b6000602082019050818103600083015261545281846145f0565b905092915050565b600060208201905081810360008301526154738161465a565b9050919050565b60006020820190508181036000830152615493816146c0565b9050919050565b600060208201905081810360008301526154b381614726565b9050919050565b600060208201905081810360008301526154d38161480c565b9050919050565b600060208201905081810360008301526154f38161488c565b9050919050565b60006020820190508181036000830152615513816148f2565b9050919050565b6000602082019050818103600083015261553381614932565b9050919050565b6000602082019050818103600083015261555381614998565b9050919050565b60006020820190508181036000830152615573816149fe565b9050919050565b6000602082019050818103600083015261559381614a64565b9050919050565b600060208201905081810360008301526155b381614aca565b9050919050565b600060208201905081810360008301526155d381614b70565b9050919050565b600060208201905081810360008301526155f381614c16565b9050919050565b6000602082019050818103600083015261561381614c56565b9050919050565b6000602082019050818103600083015261563381614c96565b9050919050565b6000602082019050818103600083015261565381614cfc565b9050919050565b6000602082019050818103600083015261567381614d3c565b9050919050565b6000602082019050818103600083015261569381614de2565b9050919050565b600060208201905081810360008301526156b381614e22565b9050919050565b600060208201905081810360008301526156d381614ec8565b9050919050565b600060208201905081810360008301526156f381614f2e565b9050919050565b6000602082019050818103600083015261571381615112565b9050919050565b600060208201905061572f6000830184615152565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561575c5761575b615add565b5b8060405250919050565b600067ffffffffffffffff82111561578157615780615add565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006157e482615958565b91506157ef83615958565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561582457615823615a50565b5b828201905092915050565b600061583a82615958565b915061584583615958565b92508261585557615854615a7f565b5b828204905092915050565b600061586b82615958565b915061587683615958565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158af576158ae615a50565b5b828202905092915050565b60006158c582615958565b91506158d083615958565b9250828210156158e3576158e2615a50565b5b828203905092915050565b60006158f982615938565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561598f578082015181840152602081019050615974565b8381111561599e576000848401525b50505050565b600060028204905060018216806159bc57607f821691505b602082108114156159d0576159cf615aae565b5b50919050565b60006159e182615958565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a1457615a13615a50565b5b600182019050919050565b6000615a2a82615958565b9150615a3583615958565b925082615a4557615a44615a7f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615b26816158ee565b8114615b3157600080fd5b50565b615b3d81615900565b8114615b4857600080fd5b50565b615b548161590c565b8114615b5f57600080fd5b50565b615b6b81615958565b8114615b7657600080fd5b5056fe227d2c207b2274726169745f74797065223a20224163636573736f7279222c2276616c7565223a20223c7374796c653e23787b73686170652d72656e646572696e673a20637269737065646765733b7d3c2f7374796c653e3c2f7376673e3c7376672069643d22782220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d22302030203332203332223e3c706174682066696c6c3d22233934623561652220643d226d302c30683332763332682d33327a222f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f227d2c207b2274726169745f74797065223a2022546f70222c2276616c7565223a2022227d2c207b2274726169745f74797065223a20224a6172222c2276616c7565223a2022227d2c207b2274726169745f74797065223a202242617365222c2276616c7565223a20222c202261747472696275746573223a205b7b2274726169745f74797065223a2022536f7576656e6972222c2276616c7565223a2022a26469706673582212203966d3680bbcf6a9bbcd3c7e3e2b0c790043383a9eddf720d3ed44ca52e14a9e64736f6c634300080000333c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233139353436442220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233546413742452220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233139353436372220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22233131374539432220643d226d392c3130683176326831762d32683132763133682d31347a6d31322c31682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22233932393439312220643d226d372c3234683138763168317631682d32762d31682d317631682d32762d31682d317631682d32762d31682d317631682d32762d31682d317631682d32762d31682d317631682d32762d31682d317631682d32762d3168317a6d2d312c336832307631682d32307a222f3e3c706174682066696c6c3d22233441344534442220643d226d382c3235683176316832762d31683176316832762d31683176316832762d31683176316832762d31683176316832762d316831763168327631682d3230762d3168327a222f3e3c706174682066696c6c3d22233030302220643d226d372c323368313876316831763168317634682d3232762d346831762d3168317a6d312c31682d317631682d317633683230762d33682d31762d317a222f3e3c706174682066696c6c3d22234544454144432220643d226d362c32356832307631682d317632682d31762d32682d317632682d31762d32682d317632682d31762d32682d317632682d31762d32682d317632682d31762d32682d317632682d31762d32682d317632682d31762d32682d317632682d31762d32682d317632682d31762d32682d317632682d317a222f3e3c706174682066696c6c3d22233030302220643d226d372c323368313876316831763168317634682d3232762d346831762d3168317a6d312c31682d317631682d317633683230762d33682d31762d317a222f3e3c706174682066696c6c3d22234335433741462220643d226d372c32346831387631682d31387a6d302c3268317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a222f3e3c706174682066696c6c3d22236533616131622220643d226d372c3234683138763168317631682d36762d31682d397631682d35762d3168317a6d2d312c3368317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a222f3e3c706174682066696c6c3d22233536354335332220643d226d31312c323568317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a222f3e3c706174682066696c6c3d22233934393339332220643d226d31322c323568317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a222f3e3c706174682066696c6c3d22233030302220643d226d372c323368313876316831763168317634682d3232762d346831762d3168317a6d312c31682d317631682d317633683230762d33682d31762d317a222f3e3c706174682066696c6c3d22233939373331342220643d226d362c32366832307632682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317a222f3e3c706174682066696c6c3d22233931413538452220643d226d31332c313368327632682d327a222f3e3c706174682066696c6c3d22234646462220643d226d32302c313368327631682d31763168317631682d32762d31682d31762d3168317a222f3e3c706174682066696c6c3d22233431364534412220643d226d31332c313268367634682d36762d31682d31762d3268317a6d312c31682d3176326832762d327a222f3e3c706174682066696c6c3d22233931413538452220643d226d31332c31336831763168317631682d327a222f3e3c706174682066696c6c3d22233431364534412220643d226d31332c313268317631682d3176326832762d316831762d316831762d3168327634682d36762d31682d31762d3268317a222f3e3c706174682066696c6c3d22234646462220643d226d32302c313368327631682d31763168317631682d32762d31682d31762d3168317a222f3e3c706174682066696c6c3d22233935324130302220643d226d31362c313268317631682d317631682d32762d3168327a222f3e3c706174682066696c6c3d22233341343434362220643d226d352c313068327631682d327a6d302c3268327631682d327a6d302c3268327631682d327a6d302c3268327631682d327a6d302c3268327631682d327a222f3e3c706174682066696c6c3d22233541364336432220643d226d352c313168327631682d327a6d302c3268327631682d327a6d302c3268327631682d327a6d302c3268327631682d327a222f3e3c706174682066696c6c3d22233730303930392220643d226d372c313368317633682d317a222f3e3c706174682066696c6c3d22233030302220643d226d372c323368313876316831763168317634682d3232762d346831762d3168317a6d312c31682d317631682d317633683230762d33682d31762d317a222f3e3c706174682066696c6c3d22233737356538612220643d226d372c323568317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068327631682d327a6d332c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d2d31382c3268317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068387631682d387a6d392c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a222f3e3c706174682066696c6c3d22233462333835392220643d226d372c3234683138763168317632682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d387631682d31762d31682d317631682d31762d31682d317631682d31762d31682d31762d3268317a6d312c31682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a6d322c30682d3176316832762d317a6d332c30682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a222f3e3c706174682066696c6c3d22236131333131352220643d226d32362c313368337633682d31763168317633682d33762d33682d31762d3168317a6d322c31682d31763168317a6d302c34682d31763168317a222f3e3c706174682066696c6c3d22233236333233382220643d226d32342c313468317635682d317a222f3e3c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233261386130632220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233837666136342220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233561613334332220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22233363666630302220643d226d392c3130683176326831762d32683132763133682d31347a6d31322c31682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233632396261312220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22236334656566322220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233634366436652220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22236131653065362220643d226d31322c356838763168317631683176316831763135682d3134762d31356831762d316831762d3168317a6d302c32682d31763168317a6d2d312c32682d31763368317a6d31302c32682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22233665313530622220643d226d362c32356832307633682d3230762d316831762d31682d317a6d332c31682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a6d322c30682d31763168317a222f3e3c706174682066696c6c3d22233935324130302220643d226d372c323468347631682d347a6d31332c3068357631682d357a6d2d31342c3268317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a222f3e3c706174682066696c6c3d22233346334534302220643d226d31322c323468317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a222f3e3c706174682066696c6c3d22233030302220643d226d372c323368313876316831763168317634682d3232762d346831762d3168317a6d312c31682d317631682d317633683230762d33682d31762d317a222f3e3c706174682066696c6c3d22233934393339332220643d226d31312c323468317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a222f3e203c706174682066696c6c3d22234646462220643d226d31322c31356831763168317631682d31762d31682d317a6d382c3068317631682d317631682d31762d3168317a6d2d352c3168317631682d317a6d322c3068317631682d317a222f3e3c706174682066696c6c3d22234435393438422220643d226d31322c3133683276316835762d3168327631682d317631682d37762d31682d317a222f3e3c706174682066696c6c3d22234344364636442220643d226d31322c3134683176316837762d3168317631682d317631682d37762d31682d317a222f3e3c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233632396261312220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22236334656566322220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233634366436652220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22236131653065362220643d226d392c3130683176326831762d32683132763133682d31347a6d31322c31682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22233963366630302220643d226d382c3234683176326831762d32683176326831762d32683176326831762d32683176326831762d32683176326831762d32683176326831762d32683176326831762d32683176326831762d326831763268317631682d3230762d326831763168317a222f3e3c706174682066696c6c3d22236536626134652220643d226d31312c323568317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d2d31322c3268317631682d317a6d31372c3068317631682d317a222f3e3c706174682066696c6c3d22233030302220643d226d372c323368313876316831763168317634682d3232762d346831762d3168317a6d312c31682d317631682d317633683230762d33682d31762d317a222f3e3c706174682066696c6c3d22236366393430302220643d226d372c323468317632682d317a6d322c3068317632682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3168317631682d317a6d2d31392c3268317631682d317a6d322c306831367631682d31367a6d31372c3068317631682d317a222f3e3c706174682066696c6c3d22233766626632342220643d226d31312c3468347631682d347a222f3e3c706174682066696c6c3d22233241334234322220643d226d31302c33683132763168317631682d317631682d3132762d31682d31762d3168317a6d322c31682d317631683130762d317a222f3e3c706174682066696c6c3d22234532334533362220643d226d32302c3468317631682d317a222f3e3c706174682066696c6c3d22234646423331412220643d226d31382c3468327631682d327a222f3e3c706174682066696c6c3d22236436643132642220643d226d31352c3468337631682d337a222f3e3c706174682066696c6c3d22233931366332302220643d226d31322c3368387631682d387a222f3e3c706174682066696c6c3d22233346334534302220643d226d31312c356831307631682d31307a222f3e3c706174682066696c6c3d22233435353935442220643d226d31302c346831327631682d31327a6d302c326831327631682d31327a222f3e3c706174682066696c6c3d22233861376331312220643d226d382c323468317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d2d31372c3268337632682d31762d31682d317631682d317a6d362c3068367632682d31762d31682d347631682d317a6d392c3068337632682d31762d31682d317631682d317a222f3e3c706174682066696c6c3d22236439633331632220643d226d372c3234683176316831762d31683176316831762d31683176316831762d31683176316831762d31683176316831762d31683176316831762d31683176316831762d31683176316831762d316831763168327633682d31762d32682d337632682d33762d32682d367632682d33762d32682d337632682d31762d3368317a6d312c3368317631682d317a6d362c3068347631682d347a6d392c3068317631682d317a222f3e3c706174682066696c6c3d22233030302220643d226d372c323368313876316831763168317634682d3232762d346831762d3168317a6d312c31682d317631682d317633683230762d33682d31762d317a222f3e3c706174682066696c6c3d22233645343931452220643d226d322c313768327631682d327a222f3e3c706174682066696c6c3d22233030303030302220643d226d372c313168317635682d31762d31682d31762d3368317a222f3e3c706174682066696c6c3d22233634373337372220643d226d352c313368317635682d32762d3168317a222f3e3c706174682066696c6c3d22233131374539432220643d226d31392c313768367635682d367a6d352c31682d31763168317a6d2d332c31682d31763168317a6d322c30682d31763168317a6d2d312c31682d31763168317a222f3e3c706174682066696c6c3d22234646462220643d226d32332c313868317631682d317631682d317631682d31762d31682d31762d31683176316831762d3168317a222f3e3c706174682066696c6c3d22234646462220643d226d31352c3368327631682d327a222f3e3c706174682066696c6c3d22233939323432442220643d226d31322c3268387631682d387a222f3e3c706174682066696c6c3d22233235324232302220643d226d31302c366831327631682d31327a222f3e3c706174682066696c6c3d22233442344333432220643d226d392c346831347632682d31347a222f3e3c706174682066696c6c3d22233242354436442220643d226d362c323668317631682d317a6d322c3068337631682d337a6d342c3068337631682d337a6d342c3068337631682d337a6d342c3068337631682d337a6d342c3068327631682d327a222f3e3c706174682066696c6c3d22233461303730302220643d226d362c32356832307631682d32763168327631682d3230762d316831762d31682d317a6d332c31682d3176316833762d317a6d342c30682d3176316833762d317a6d342c30682d3176316833762d317a6d342c30682d3176316833762d317a222f3e3c706174682066696c6c3d22233030302220643d226d372c323368313876316831763168317634682d3232762d346831762d3168317a6d312c31682d317631682d317633683230762d33682d31762d317a222f3e3c706174682066696c6c3d22233935324130302220643d226d372c32346831387631682d31387a222f3e3c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233963393131342220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22236564653639612220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22236162613133612220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22236436633631652220643d226d392c3130683176326831762d32683132763133682d31347a6d31322c31682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22234538454245352220643d226d31342c313268347634682d347a6d322c31682d3176326832762d327a222f3e3c706174682066696c6c3d22233030302220643d226d31362c313368317632682d32762d3168317a222f3e3c706174682066696c6c3d22234344434343372220643d226d31382c313268317634682d317631682d34762d3168347a222f3e3c706174682066696c6c3d22234646462220643d226d31342c313168347631682d347634682d31762d3468317a6d312c3268317631682d317a222f3e3c706174682066696c6c3d22233331333333352220643d226d31322c3468387631682d387a222f3e3c706174682066696c6c3d22233939323432442220643d226d31312c336831307631682d31307a222f3e3c706174682066696c6c3d22233030302220643d226d31312c356831307631682d31307a222f3e3c706174682066696c6c3d22233633313831312220643d226d32342c31326831763168317633682d317631682d317a222f3e3c706174682066696c6c3d22233963323231372220643d226d32372c323568317633682d317a222f3e3c706174682066696c6c3d22233030302220643d226d32362c31346832763168317632682d317631682d317631683176316831763468317632682d317631682d31762d316831762d32682d31762d34682d31762d31682d31762d316831762d316831762d32682d327a222f3e203c706174682066696c6c3d22234643433441362220643d226d31352c31326833763168317633682d317631682d33762d31682d31762d3368317a6d312c31682d3176336833762d337a222f3e3c706174682066696c6c3d22234231343534372220643d226d31362c313468317631682d317a222f3e3c706174682066696c6c3d22234343374536412220643d226d31372c313368317633682d33762d3168327a222f3e3c706174682066696c6c3d22234537393237432220643d226d31352c313368327631682d317631682d317a222f3e3c706174682066696c6c3d22236533633831372220643d226d372c313668357634682d317631682d317631682d337a6d332c31682d31763268317a6d302c33682d31763168317a222f3e3c706174682066696c6c3d22233030302220643d226d392c313768317632682d317a6d302c3368317631682d317a222f3e3c706174682066696c6c3d22234546413630332220643d226d31312c323068317631682d317631682d31762d3168317a222f3e3c706174682066696c6c3d22234646462220643d226d31392c3568317631682d3176326831763168317631682d31762d31682d31762d31682d317631682d317631682d317631682d31762d316831762d316831762d316831762d3268317a222f3e3c706174682066696c6c3d22234537433242332220643d226d31332c313268317631682d3176326832762d316831762d316831762d3168327634682d36762d31682d31762d3268317a222f3e3c706174682066696c6c3d22234646454445422220643d226d31332c31336831763168317631682d327a222f3e3c706174682066696c6c3d22233935324130302220643d226d31362c313268317631682d317631682d32762d3168327a222f3e3c706174682066696c6c3d22234646462220643d226d32302c313368327631682d31763168317631682d32762d31682d31762d3168317a222f3e3c706174682066696c6c3d22233030302220643d226d372c323368313876316831763168317634682d3232762d346831762d3168317a6d312c31682d317631682d317633683230762d33682d31762d317a222f3e3c706174682066696c6c3d22233543364634312220643d226d372c3234683138763168317633682d3230762d3368317a6d312c31682d31763268317a6d322c30682d31763268317a6d322c30682d31763268317a6d322c30682d31763268317a6d322c30682d3176326832762d327a6d332c30682d31763268317a6d322c30682d31763268317a6d322c30682d31763268317a6d322c30682d31763268317a222f3e3c706174682066696c6c3d22233342344132432220643d226d372c323568317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3068327632682d327a6d332c3068317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a6d322c3068317632682d317a222f3e3c706174682066696c6c3d22234646462220643d226d32302c313368327631682d31763168317631682d32762d31682d31762d3168317a222f3e3c706174682066696c6c3d22234537433242332220643d226d31332c313268367634682d36762d31682d31762d3268317a6d312c31682d3176326832762d327a222f3e3c706174682066696c6c3d22234646454445422220643d226d31332c313368327632682d327a222f3e3c706174682066696c6c3d22233835313531352220643d226d31352c3268327631682d327a222f3e3c706174682066696c6c3d22233531353134442220643d226d31322c3468387631682d387a222f3e3c706174682066696c6c3d22233334333532422220643d226d31342c3368347631682d347a222f3e3c706174682066696c6c3d22233830316531342220643d226d352c3968317631682d317a222f3e3c706174682066696c6c3d22233634373337372220643d226d352c313068317638682d317a222f3e3c706174682066696c6c3d22233441344534442220643d226d372c313668317634682d31762d31682d31762d3268317a222f3e203c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233963393131342220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22236564653639612220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22236162613133612220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22236436633631652220643d226d31322c356838763168317631683176316831763135682d3134762d31356831762d316831762d3168317a6d302c32682d31763168317a6d2d312c32682d31763368317a6d31302c32682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22233435354136302220643d226d392c3468317631682d317a6d31332c3068317631682d317a222f3e3c706174682066696c6c3d22233336344633382220643d226d31302c336831327631682d31327a6d302c326831327631682d31327a222f3e3c706174682066696c6c3d22236538613431632220643d226d382c3468317631682d317a6d31352c3068317631682d317a222f3e3c706174682066696c6c3d22233143333333312220643d226d31302c346831327631682d31327a222f3e3c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233134353233372220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233664626639622220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233237356334392220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22233232383535612220643d226d392c3130683176326831762d32683132763133682d31347a6d31322c31682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22236261323030622220643d226d362c313468317631682d317a222f3e3c706174682066696c6c3d22233166363930662220643d226d362c313668317631682d317a222f3e3c706174682066696c6c3d22233236333233382220643d226d372c313168317637682d317a222f3e3c706174682066696c6c3d22236439636631362220643d226d362c313268317631682d317a222f3e3c706174682066696c6c3d22233833373835332220643d226d31372c313368317633682d33762d3168327a222f3e3c706174682066696c6c3d22233431364534412220643d226d31352c31326833763168317633682d317631682d33762d31682d31762d3368317a6d312c31682d3176336833762d337a222f3e3c706174682066696c6c3d22233934343534452220643d226d31362c313468317631682d317a222f3e3c706174682066696c6c3d22234145393536392220643d226d31352c313368327631682d317631682d317a222f3e3c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233139353436442220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233546413742452220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233139353436372220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22233131374539432220643d226d31322c356838763168317631683176316831763135682d3134762d31356831762d316831762d3168317a6d302c32682d31763168317a6d2d312c32682d31763368317a6d31302c32682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22233131374539432220643d226d392c366831347631682d31347a222f3e3c706174682066696c6c3d22234646434330312220643d226d31392c3468317631682d317a222f3e3c706174682066696c6c3d22233244353435412220643d226d31382c3368337633682d337a6d322c31682d31763168317a222f3e3c706174682066696c6c3d22233038324233452220643d226d31302c3368387633682d397631682d31762d326831762d3168317a6d31312c30683176316831763168317632682d31762d31682d327a222f3e3c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233631316434362220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22236630633264652220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233631336235322220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22236462376462362220643d226d31322c356838763168317631683176316831763135682d3134762d31356831762d316831762d3168317a6d302c32682d31763168317a6d2d312c32682d31763368317a6d31302c32682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22233341343434362220643d226d32352c313068327633682d31762d32682d317a6d312c3868317633682d32762d3168317a222f3e3c706174682066696c6c3d22233130326633642220643d226d32342c3968317633682d317a6d302c313068317633682d317a222f3e3c706174682066696c6c3d22233330323931392220643d226d32352c313368337635682d337a222f3e3c706174682066696c6c3d22234646462220643d226d31322c313568317631682d317a6d382c3068317631682d317631682d31762d3168317a6d2d352c3168317631682d317a6d322c3068317631682d317a222f3e3c706174682066696c6c3d22234344364636442220643d226d31322c3134683176316837762d3168317631682d317631682d37762d31682d317a222f3e3c706174682066696c6c3d22234435393438422220643d226d31322c3133683276316835762d3168327631682d317631682d37762d31682d317a222f3e3c706174682066696c6c3d22236536643330392220643d226d31332c313668317631682d317a222f3e3c706174682066696c6c3d22233432334633442220643d226d31362c313668317631682d31763168317631682d31762d31682d31762d3168317a222f3e3c706174682066696c6c3d22233237324132442220643d226d31372c313468317632682d317a222f3e3c706174682066696c6c3d22233030302220643d226d31352c31316831763168317632682d31762d32682d317a222f3e3c706174682066696c6c3d22233241334234322220643d226d31352c3268327631683276316831762d3168337633682d33762d31682d337631682d32762d31682d337631682d33762d33683376316831762d3168327a6d2d342c32682d31763168317a6d31312c30682d31763168317a222f3e3c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233261386130632220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233837666136342220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233561613334332220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22233363666630302220643d226d31322c356838763168317631683176316831763135682d3134762d31356831762d316831762d3168317a6d302c32682d31763168317a6d2d312c32682d31763368317a6d31302c32682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22233131323332362220643d226d32342c313468317637682d317a222f3e3c706174682066696c6c3d22233861326331392220643d226d32372c313468327632682d327a222f3e3c706174682066696c6c3d22233341344435312220643d226d32362c313668317631682d317632682d31762d3268317a222f3e3c706174682066696c6c3d22234532334533362220643d226d31312c3368317631682d317a222f3e3c706174682066696c6c3d22233435353935442220643d226d31302c3368317631682d317a6d332c3068397631682d397a6d2d352c3268317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a6d322c3068317631682d317a222f3e3c706174682066696c6c3d22233433394332392220643d226d31322c3368317631682d317a222f3e3c706174682066696c6c3d22233242334234312220643d226d392c34683134763168317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d31762d31682d317631682d317a222f3e3c706174682066696c6c3d22233331353737392220643d226d372c323468327631682d327a6d332c3068327631682d327a6d332c3068327631682d327a6d332c3068327631682d327a6d332c3068327631682d327a6d332c3068327631682d327a6d2d31362c326832307632682d3136762d31682d327631682d327a222f3e3c706174682066696c6c3d22236332323731352220643d226d382c323768317631682d317a222f3e3c706174682066696c6c3d22233433394332392220643d226d392c323768317631682d317a222f3e3c706174682066696c6c3d22233038324233452220643d226d392c3234683176316832762d31683176316832762d31683176316832762d31683176316832762d31683176316832762d316831763168317631682d3230762d3168337a222f3e3c706174682066696c6c3d22233030302220643d226d372c323368313876316831763168317634682d3232762d346831762d3168317a6d312c31682d317631682d317633683230762d33682d31762d317a222f3e3c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233631316434362220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22236630633264652220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233631336235322220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22236462376462362220643d226d392c3130683176326831762d32683132763133682d31347a6d31322c31682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22236533613631372220643d226d32352c313268317632682d317a222f3e3c706174682066696c6c3d22233035324233362220643d226d32342c313168317634682d317a222f3e3c706174682066696c6c3d22233236333233412220643d226d31312c31396831307633682d31307a6d322c31682d3176316838762d317a222f3e3c706174682066696c6c3d22233138343833312220643d226d31372c323068337631682d337a222f3e3c706174682066696c6c3d22233536613831622220643d226d31322c323068357631682d357a222f3e3c706174682066696c6c3d22234646462220643d226d31312c3768317631682d317a6d2d312c3268317633682d317a6d302c3468317636682d317a222f3e3c706174682066696c6c3d22233134353233372220643d226d32312c313768317631682d317a6d2d392c3168317631682d317a6d382c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233664626639622220643d226d32302c313168317631682d317a6d2d322c3768317631682d317a6d2d352c3268317631682d317a222066696c6c2d6f7061636974793d22302e3522202f3e3c706174682066696c6c3d22233237356334392220643d226d31322c34683876316831763168317631683176316831763135682d31762d3135682d31762d31682d31762d31682d31762d31682d387631682d317631682d317631682d31763135682d31762d31356831762d316831762d316831762d3168317a222f3e3c706174682066696c6c3d22233232383535612220643d226d31322c356838763168317631683176316831763135682d3134762d31356831762d316831762d3168317a6d302c32682d31763168317a6d2d312c32682d31763368317a6d31302c32682d31763168317a6d2d31302c32682d31763668317a6d31312c34682d31763168317a6d2d392c31682d31763168317a6d362c30682d31763168317a6d2d352c32682d31763168317a6d372c30682d31763168317a222066696c6c2d6f7061636974793d22302e3322202f3e3c706174682066696c6c3d22233341343434362220643d226d362c323068327631682d327a6d342c3068317631682d317a6d332c3068317631682d317a6d332c3068317631682d317a6d332c3068317631682d317a6d332c3068317631682d317a6d322c3068327631682d327a222f3e3c706174682066696c6c3d22233544373237322220643d226d372c31396831387631682d31763168317631682d3138762d316831762d31682d317a6d342c31682d31763168317a6d332c30682d31763168317a6d332c30682d31763168317a6d332c30682d31763168317a6d332c30682d31763168317a222f3e

Deployed Bytecode

0x6080604052600436106101b75760003560e01c80637501f741116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146105cf578063d5abeb011461060c578063e985e9c514610637578063f2fde38b14610674576101b7565b8063a22cb46514610561578063b88d4fde1461058a578063c49b3d54146105b3576101b7565b806391b7f5ed116100c657806391b7f5ed146104c657806395d89b41146104ef578063a035b1fe1461051a578063a108f52914610545576101b7565b80637501f74114610466578063853828b6146104915780638da5cb5b1461049b576101b7565b80634230baee11610159578063547520fe11610133578063547520fe146103ac5780636352211e146103d557806370a0823114610412578063715018a61461044f576101b7565b80634230baee1461031b57806342842e0e146103465780634f6ccce71461036f576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b55780632f745c59146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de919061451e565b61069d565b6040516101f0919061541d565b60405180910390f35b34801561020557600080fd5b5061020e610717565b60405161021b9190615438565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190614570565b6107a9565b60405161025891906153b6565b60405180910390f35b34801561026d57600080fd5b50610288600480360381019061028391906144e2565b61082e565b005b34801561029657600080fd5b5061029f610946565b6040516102ac919061571a565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d791906143dc565b610953565b005b3480156102ea57600080fd5b50610305600480360381019061030091906144e2565b6109b3565b604051610312919061571a565b60405180910390f35b34801561032757600080fd5b50610330610a58565b60405161033d919061571a565b60405180910390f35b34801561035257600080fd5b5061036d600480360381019061036891906143dc565b610a5e565b005b34801561037b57600080fd5b5061039660048036038101906103919190614570565b610a7e565b6040516103a3919061571a565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190614570565b610b15565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190614570565b610b9b565b60405161040991906153b6565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190614377565b610c4d565b604051610446919061571a565b60405180910390f35b34801561045b57600080fd5b50610464610d05565b005b34801561047257600080fd5b5061047b610d8d565b604051610488919061571a565b60405180910390f35b610499610d93565b005b3480156104a757600080fd5b506104b0610e56565b6040516104bd91906153b6565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190614570565b610e80565b005b3480156104fb57600080fd5b50610504610f06565b6040516105119190615438565b60405180910390f35b34801561052657600080fd5b5061052f610f98565b60405161053c919061571a565b60405180910390f35b61055f600480360381019061055a91906144e2565b610f9e565b005b34801561056d57600080fd5b50610588600480360381019061058391906144a6565b610fac565b005b34801561059657600080fd5b506105b160048036038101906105ac919061442b565b61112d565b005b6105cd60048036038101906105c89190614570565b61118f565b005b3480156105db57600080fd5b506105f660048036038101906105f19190614570565b6111a3565b6040516106039190615438565b60405180910390f35b34801561061857600080fd5b5061062161122e565b60405161062e919061571a565b60405180910390f35b34801561064357600080fd5b5061065e600480360381019061065991906143a0565b611234565b60405161066b919061541d565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190614377565b6112c8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610710575061070f826113c0565b5b9050919050565b606060008054610726906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610752906159a4565b801561079f5780601f106107745761010080835404028352916020019161079f565b820191906000526020600020905b81548152906001019060200180831161078257829003601f168201915b5050505050905090565b60006107b4826114a2565b6107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea9061561a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083982610b9b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a19061569a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108c961150e565b73ffffffffffffffffffffffffffffffffffffffff1614806108f857506108f7816108f261150e565b611234565b5b610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e9061553a565b60405180910390fd5b6109418383611516565b505050565b6000600880549050905090565b61096461095e61150e565b826115cf565b6109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a906156ba565b60405180910390fd5b6109ae8383836116ad565b505050565b60006109be83610c4d565b82106109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f69061545a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f5481565b610a798383836040518060200160405280600081525061112d565b505050565b6000610a88610946565b8210610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac0906156da565b60405180910390fd5b60088281548110610b03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610b1d61150e565b73ffffffffffffffffffffffffffffffffffffffff16610b3b610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b889061563a565b60405180910390fd5b80600e8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b9061557a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb59061555a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d0d61150e565b73ffffffffffffffffffffffffffffffffffffffff16610d2b610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d789061563a565b60405180910390fd5b610d8b6000611909565b565b600e5481565b610d9b61150e565b73ffffffffffffffffffffffffffffffffffffffff16610db9610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e069061563a565b60405180910390fd5b610e1761150e565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e5457600080fd5b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e8861150e565b73ffffffffffffffffffffffffffffffffffffffff16610ea6610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef39061563a565b60405180910390fd5b80600d8190555050565b606060018054610f15906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610f41906159a4565b8015610f8e5780601f10610f6357610100808354040283529160200191610f8e565b820191906000526020600020905b815481529060010190602001808311610f7157829003601f168201915b5050505050905090565b600d5481565b610fa882826119cf565b5050565b610fb461150e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611022576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611019906154fa565b60405180910390fd5b806005600061102f61150e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110dc61150e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611121919061541d565b60405180910390a35050565b61113e61113861150e565b836115cf565b61117d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611174906156ba565b60405180910390fd5b61118984848484611ba3565b50505050565b6111a061119a61150e565b826119cf565b50565b606060006111b083611bff565b905060006112006111c085611c72565b6111c984611e1f565b6111da6111d5866128a8565b613086565b6040516020016111ec93929190615359565b604051602081830303815290604052613086565b9050806040516020016112139190615315565b60405160208183030381529060405290508092505050919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112d061150e565b73ffffffffffffffffffffffffffffffffffffffff166112ee610e56565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b9061563a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab9061549a565b60405180910390fd5b6113bd81611909565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061148b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061149b575061149a82613244565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661158983610b9b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115da826114a2565b611619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116109061551a565b60405180910390fd5b600061162483610b9b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061169357508373ffffffffffffffffffffffffffffffffffffffff1661167b846107a9565b73ffffffffffffffffffffffffffffffffffffffff16145b806116a457506116a38185611234565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116cd82610b9b565b73ffffffffffffffffffffffffffffffffffffffff1614611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a9061565a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a906154da565b60405180910390fd5b61179e8383836132ae565b6117a9600082611516565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117f991906158ba565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461185091906157d9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600c546119da610946565b10611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a11906156fa565b60405180910390fd5b600c5481611a26610946565b611a3091906157d9565b1115611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a689061559a565b60405180910390fd5b600e54811115611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad906155ba565b60405180910390fd5b60008111611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af09061567a565b60405180910390fd5b3481600d54611b089190615860565b14611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f906155fa565b60405180910390fd5b60005b81811015611b9e5760006001600f54611b6491906157d9565b9050611b7084826133c2565b6001600f6000828254611b8391906157d9565b92505081905550508080611b96906159d6565b915050611b4b565b505050565b611bae8484846116ad565b611bba848484846133e0565b611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf09061547a565b60405180910390fd5b50505050565b611c07614228565b611c0f614228565b611c1883613577565b816000018181525050611c2a836136b4565b816020018181525050611c3c83613825565b816040018181525050611c4e8361395d565b816060018181525050611c6083613ae9565b81608001818152505080915050919050565b60606000821415611cba576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e1a565b600082905060005b60008214611cec578080611cd5906159d6565b915050600a82611ce5919061582f565b9150611cc2565b60008167ffffffffffffffff811115611d2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611d605781602001600182028036833780820191505090505b5090505b60008514611e1357600182611d7991906158ba565b9150600a85611d889190615a1f565b6030611d9491906157d9565b60f81b818381518110611dd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e0c919061582f565b9450611d64565b8093505050505b919050565b6060611e29614257565b604051806060016040528060358152602001615d136035913981600060118110611e7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060108360000151600a8110611ec2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054611ece906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054611efa906159a4565b8015611f475780601f10611f1c57610100808354040283529160200191611f47565b820191906000526020600020905b815481529060010190602001808311611f2a57829003601f168201915b505050505081600160118110611f86577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060238152602001615ccc6023913981600260118110611fe1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060248360200151600c8110612027577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612033906159a4565b80601f016020809104026020016040519081016040528092919081815260200182805461205f906159a4565b80156120ac5780601f10612081576101008083540402835291602001916120ac565b820191906000526020600020905b81548152906001019060200180831161208f57829003601f168201915b5050505050816003601181106120eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060248152602001615cef6024913981600460118110612146577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250603c8360400151600a811061218c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612198906159a4565b80601f01602080910402602001604051908101604052809291908181526020018280546121c4906159a4565b80156122115780601f106121e657610100808354040283529160200191612211565b820191906000526020600020905b8154815290600101906020018083116121f457829003601f168201915b505050505081600560118110612250577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060298152602001615b7a60299139816006601181106122ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060508360600151600d81106122f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0180546122fd906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612329906159a4565b80156123765780601f1061234b57610100808354040283529160200191612376565b820191906000526020600020905b81548152906001019060200180831161235957829003601f168201915b5050505050816007601181106123b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060238152602001615ca96023913981600860118110612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250606a8360800151600b8110612456577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612462906159a4565b80601f016020809104026020016040519081016040528092919081815260200182805461248e906159a4565b80156124db5780601f106124b0576101008083540402835291602001916124db565b820191906000526020600020905b8154815290600101906020018083116124be57829003601f168201915b50505050508160096011811061251a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060400160405280600581526020017f227d5d2c2000000000000000000000000000000000000000000000000000000081525081600a60118110612592577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506000816000601181106125d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015182600160118110612615577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600260118110612654577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160405160200161266b93929190615178565b604051602081830303815290604052905080826003601181106126b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151836004601181106126f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600560118110612735577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015185600660118110612774577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151866007601181106127b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151876008601181106127f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015188600960118110612831577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015189600a60118110612870577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160405160200161288d9998979695949392919061520e565b60405160208183030381529060405290508092505050919050565b60606128b261427f565b6040518060c0016040528060918152602001615bd86091913981600060078110612905577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250601a8360000151600a811061294b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612957906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612983906159a4565b80156129d05780601f106129a5576101008083540402835291602001916129d0565b820191906000526020600020905b8154815290600101906020018083116129b357829003601f168201915b505050505081600160078110612a0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060308360200151600c8110612a55577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612a61906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8d906159a4565b8015612ada5780601f10612aaf57610100808354040283529160200191612ada565b820191906000526020600020905b815481529060010190602001808311612abd57829003601f168201915b505050505081600260078110612b19577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060468360400151600a8110612b5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612b6b906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612b97906159a4565b8015612be45780601f10612bb957610100808354040283529160200191612be4565b820191906000526020600020905b815481529060010190602001808311612bc757829003601f168201915b505050505081600360078110612c23577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250605d8360600151600d8110612c69577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612c75906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca1906159a4565b8015612cee5780601f10612cc357610100808354040283529160200191612cee565b820191906000526020600020905b815481529060010190602001808311612cd157829003601f168201915b505050505081600460078110612d2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060758360800151600b8110612d73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018054612d7f906159a4565b80601f0160208091040260200160405190810160405280929190818152602001828054612dab906159a4565b8015612df85780601f10612dcd57610100808354040283529160200191612df8565b820191906000526020600020905b815481529060010190602001808311612ddb57829003601f168201915b505050505081600560078110612e37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250604051806060016040528060358152602001615ba36035913981600660078110612e92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250600081600060078110612ed6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015182600160078110612f15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600260078110612f54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600360078110612f93577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015185600460078110612fd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015186600560078110613011577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600660078110613050577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160405160200161306b97969594939291906151a9565b60405160208183030381529060405290508092505050919050565b606060008251905060008114156130af576040518060200160405280600081525091505061323f565b600060036002836130c091906157d9565b6130ca919061582f565b60046130d69190615860565b905060006020826130e791906157d9565b67ffffffffffffffff811115613126577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156131585781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001615c69604091399050600181016020830160005b868110156131fc5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050613183565b506003860660018114613216576002811461322657613231565b613d3d60f01b6002830352613231565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132b9838383613c3c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132fc576132f781613c41565b61333b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461333a576133398382613c8a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561337e5761337981613df7565b6133bd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133bc576133bb8282613f3a565b5b5b505050565b6133dc828260405180602001604052806000815250613fb9565b5050565b60006134018473ffffffffffffffffffffffffffffffffffffffff16614014565b1561356a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261342a61150e565b8786866040518563ffffffff1660e01b815260040161344c94939291906153d1565b602060405180830381600087803b15801561346657600080fd5b505af192505050801561349757506040513d601f19601f820116820180604052508101906134949190614547565b60015b61351a573d80600081146134c7576040519150601f19603f3d011682016040523d82523d6000602084013e6134cc565b606091505b50600081511415613512576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135099061547a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061356f565b600190505b949350505050565b6000806135aa61358684611c72565b604051602001613596919061528d565b604051602081830303815290604052614027565b90506000610113826135bc9190615a1f565b90506000602882101580156135d15750604b82105b156135db57600190505b604b82101580156135ec5750606e82105b156135f657600290505b606e82101580156136075750608c82105b1561361157600390505b608c8210158015613622575060b482105b1561362c57600490505b60b4821015801561363d575060dc82105b1561364757600590505b60dc8210158015613658575060f582105b1561366257600690505b60f58210158015613674575061010482105b1561367e57600790505b6101048210158015613691575061010e82105b1561369b57600890505b61010e82106136a957600990505b809350505050919050565b6000806136e76136c384611c72565b6040516020016136d39190615337565b604051602081830303815290604052614027565b90506000610136826136f99190615a1f565b905060006023821015801561370e5750604182105b1561371857600190505b604182101580156137295750606482105b1561373357600290505b606482101580156137445750608282105b1561374e57600390505b6082821015801561375f5750609b82105b1561376957600490505b609b821015801561377a575060af82105b1561378457600590505b60af8210158015613795575060c882105b1561379f57600690505b60c882101580156137b0575060dc82105b156137ba57600790505b60dc82101580156137cb575060eb82105b156137d557600890505b60eb82101580156137e6575060f582105b156137f057600990505b60f58210158015613802575061011882105b1561380c57600a90505b610118821061381a57600b90505b809350505050919050565b60008061385861383484611c72565b60405160200161384491906152af565b604051602081830303815290604052614027565b9050600060a5826138699190615a1f565b90506000600f821015801561387e5750601b82105b1561388857600190505b601b82101580156138995750602882105b156138a357600290505b602882101580156138b45750603c82105b156138be57600390505b603c82101580156138cf5750605082105b156138d957600490505b605082101580156138ea5750606482105b156138f457600590505b606482101580156139055750607882105b1561390f57600690505b607882101580156139205750608c82105b1561392a57600790505b608c821015801561393b5750609b82105b1561394557600890505b609b821061395257600990505b809350505050919050565b60008061399061396c84611c72565b60405160200161397c91906152d1565b604051602081830303815290604052614027565b9050600061012c826139a29190615a1f565b90506000601982101580156139b75750603782105b156139c157600190505b603782101580156139d25750605082105b156139dc57600290505b605082101580156139ed5750606e82105b156139f757600390505b606e8210158015613a085750608282105b15613a1257600490505b60828210158015613a235750609182105b15613a2d57600590505b60918210158015613a3e575060a082105b15613a4857600690505b60a08210158015613a59575060be82105b15613a6357600790505b60be8210158015613a74575060d782105b15613a7e57600890505b60d78210158015613a8f575060f582105b15613a9957600990505b60f58210158015613aaa575060ff82105b15613ab457600a90505b60ff8210158015613ac6575061011882105b15613ad057600b90505b6101188210613ade57600c90505b809350505050919050565b600080613b1c613af884611c72565b604051602001613b0891906152f3565b604051602081830303815290604052614027565b9050600060dc82613b2d9190615a1f565b90506000601e8210158015613b425750603c82105b15613b4c57600190505b603c8210158015613b5d5750605a82105b15613b6757600290505b605a8210158015613b785750606e82105b15613b8257600390505b606e8210158015613b935750608282105b15613b9d57600490505b60828210158015613bae5750609682105b15613bb857600590505b60968210158015613bc9575060a582105b15613bd357600690505b60a58210158015613be4575060b482105b15613bee57600790505b60b48210158015613bff575060c382105b15613c0957600890505b60c38210158015613c1a575060cd82105b15613c2457600990505b60cd8210613c3157600a90505b809350505050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613c9784610c4d565b613ca191906158ba565b9050600060076000848152602001908152602001600020549050818114613d86576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613e0b91906158ba565b9050600060096000848152602001908152602001600020549050600060088381548110613e61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613ea9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613f1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613f4583610c4d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b613fc3838361405a565b613fd060008484846133e0565b61400f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140069061547a565b60405180910390fd5b505050565b600080823b905060008111915050919050565b60008160405160200161403a9190615161565b6040516020818303038152906040528051906020012060001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156140ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140c1906155da565b60405180910390fd5b6140d3816114a2565b15614113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410a906154ba565b60405180910390fd5b61411f600083836132ae565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461416f91906157d9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518061022001604052806011905b60608152602001906001900390816142675790505090565b6040518060e001604052806007905b606081526020019060019003908161428e5790505090565b60006142b96142b484615766565b615735565b9050828152602081018484840111156142d157600080fd5b6142dc848285615962565b509392505050565b6000813590506142f381615b1d565b92915050565b60008135905061430881615b34565b92915050565b60008135905061431d81615b4b565b92915050565b60008151905061433281615b4b565b92915050565b600082601f83011261434957600080fd5b81356143598482602086016142a6565b91505092915050565b60008135905061437181615b62565b92915050565b60006020828403121561438957600080fd5b6000614397848285016142e4565b91505092915050565b600080604083850312156143b357600080fd5b60006143c1858286016142e4565b92505060206143d2858286016142e4565b9150509250929050565b6000806000606084860312156143f157600080fd5b60006143ff868287016142e4565b9350506020614410868287016142e4565b925050604061442186828701614362565b9150509250925092565b6000806000806080858703121561444157600080fd5b600061444f878288016142e4565b9450506020614460878288016142e4565b935050604061447187828801614362565b925050606085013567ffffffffffffffff81111561448e57600080fd5b61449a87828801614338565b91505092959194509250565b600080604083850312156144b957600080fd5b60006144c7858286016142e4565b92505060206144d8858286016142f9565b9150509250929050565b600080604083850312156144f557600080fd5b6000614503858286016142e4565b925050602061451485828601614362565b9150509250929050565b60006020828403121561453057600080fd5b600061453e8482850161430e565b91505092915050565b60006020828403121561455957600080fd5b600061456784828501614323565b91505092915050565b60006020828403121561458257600080fd5b600061459084828501614362565b91505092915050565b6145a2816158ee565b82525050565b6145b181615900565b82525050565b60006145c282615796565b6145cc81856157ac565b93506145dc818560208601615971565b6145e581615b0c565b840191505092915050565b60006145fb826157a1565b61460581856157bd565b9350614615818560208601615971565b61461e81615b0c565b840191505092915050565b6000614634826157a1565b61463e81856157ce565b935061464e818560208601615971565b80840191505092915050565b6000614667602b836157bd565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006146cd6032836157bd565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006147336026836157bd565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614799600b836157ce565b91507f4c415945522054485245450000000000000000000000000000000000000000006000830152600b82019050919050565b60006147d9600a836157ce565b91507f4c415945522046495645000000000000000000000000000000000000000000006000830152600a82019050919050565b6000614819601c836157bd565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006148596009836157ce565b91507f4c415945522053495800000000000000000000000000000000000000000000006000830152600982019050919050565b60006148996024836157bd565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148ff6019836157bd565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061493f602c836157bd565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006149a56038836157bd565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614a0b602a836157bd565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a716029836157bd565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ad7601f836157bd565b91507f4d696e74696e6720776f756c6420657863656564206d617820737570706c79006000830152602082019050919050565b6000614b176024836157ce565b91507f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360008301527f6536342c000000000000000000000000000000000000000000000000000000006020830152602482019050919050565b6000614b7d6031836157bd565b91507f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008301527f20696e2061207472616e73616374696f6e0000000000000000000000000000006020830152604082019050919050565b6000614be36002836157ce565b91507f227d0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b6000614c236020836157bd565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614c636017836157bd565b91507f45544820616d6f756e7420697320696e636f72726563740000000000000000006000830152602082019050919050565b6000614ca3602c836157bd565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614d096020836157bd565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614d496029836157bd565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614daf600b836157ce565b91507f4c4159455220534556454e0000000000000000000000000000000000000000006000830152600b82019050919050565b6000614def601c836157bd565b91507f4d757374206d696e74206174206c65617374206f6e6520746f6b656e000000006000830152602082019050919050565b6000614e2f6021836157bd565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e95601d836157ce565b91507f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006000830152601d82019050919050565b6000614ed56031836157bd565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614f3b602c836157bd565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614fa1600a836157ce565b91507f4c4159455220464f5552000000000000000000000000000000000000000000006000830152600a82019050919050565b6000614fe160bc836157ce565b91507f222c20226465736372697074696f6e223a2022426c617a7a204c61622069732060008301527f61206c61626f7261746f72792066756c6c206f66206578706572696d656e747360208301527f20646f6e6520627920447220426c617a7a2c20616e20696c6c7573747261746f60408301527f7220616c7465722065676f2e205468657365206578706572696d656e7473206160608301527f726520636f6d706c6574656c79206f6e2d636861696e20616e6420776572652060808301527f72616e646f6d6c792067656e657261746564206174206d696e742e220000000060a083015260bc82019050919050565b60006150df601c836157ce565b91507f7b226e616d65223a2022426c617a7a204c6162204578702e4e6f2023000000006000830152601c82019050919050565b600061511f601b836157bd565b91507f416c6c20746f6b656e732068617665206265656e206d696e74656400000000006000830152602082019050919050565b61515b81615958565b82525050565b600061516d8284614629565b915081905092915050565b60006151848286614629565b91506151908285614629565b915061519c8284614629565b9150819050949350505050565b60006151b5828a614629565b91506151c18289614629565b91506151cd8288614629565b91506151d98287614629565b91506151e58286614629565b91506151f18285614629565b91506151fd8284614629565b915081905098975050505050505050565b600061521a828c614629565b9150615226828b614629565b9150615232828a614629565b915061523e8289614629565b915061524a8288614629565b91506152568287614629565b91506152628286614629565b915061526e8285614629565b915061527a8284614629565b91508190509a9950505050505050505050565b60006152988261478c565b91506152a48284614629565b915081905092915050565b60006152ba826147cc565b91506152c68284614629565b915081905092915050565b60006152dc8261484c565b91506152e88284614629565b915081905092915050565b60006152fe82614da2565b915061530a8284614629565b915081905092915050565b600061532082614e88565b915061532c8284614629565b915081905092915050565b600061534282614f94565b915061534e8284614629565b915081905092915050565b6000615364826150d2565b91506153708286614629565b915061537b82614fd4565b91506153878285614629565b915061539282614b0a565b915061539e8284614629565b91506153a982614bd6565b9150819050949350505050565b60006020820190506153cb6000830184614599565b92915050565b60006080820190506153e66000830187614599565b6153f36020830186614599565b6154006040830185615152565b818103606083015261541281846145b7565b905095945050505050565b600060208201905061543260008301846145a8565b92915050565b6000602082019050818103600083015261545281846145f0565b905092915050565b600060208201905081810360008301526154738161465a565b9050919050565b60006020820190508181036000830152615493816146c0565b9050919050565b600060208201905081810360008301526154b381614726565b9050919050565b600060208201905081810360008301526154d38161480c565b9050919050565b600060208201905081810360008301526154f38161488c565b9050919050565b60006020820190508181036000830152615513816148f2565b9050919050565b6000602082019050818103600083015261553381614932565b9050919050565b6000602082019050818103600083015261555381614998565b9050919050565b60006020820190508181036000830152615573816149fe565b9050919050565b6000602082019050818103600083015261559381614a64565b9050919050565b600060208201905081810360008301526155b381614aca565b9050919050565b600060208201905081810360008301526155d381614b70565b9050919050565b600060208201905081810360008301526155f381614c16565b9050919050565b6000602082019050818103600083015261561381614c56565b9050919050565b6000602082019050818103600083015261563381614c96565b9050919050565b6000602082019050818103600083015261565381614cfc565b9050919050565b6000602082019050818103600083015261567381614d3c565b9050919050565b6000602082019050818103600083015261569381614de2565b9050919050565b600060208201905081810360008301526156b381614e22565b9050919050565b600060208201905081810360008301526156d381614ec8565b9050919050565b600060208201905081810360008301526156f381614f2e565b9050919050565b6000602082019050818103600083015261571381615112565b9050919050565b600060208201905061572f6000830184615152565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561575c5761575b615add565b5b8060405250919050565b600067ffffffffffffffff82111561578157615780615add565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006157e482615958565b91506157ef83615958565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561582457615823615a50565b5b828201905092915050565b600061583a82615958565b915061584583615958565b92508261585557615854615a7f565b5b828204905092915050565b600061586b82615958565b915061587683615958565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158af576158ae615a50565b5b828202905092915050565b60006158c582615958565b91506158d083615958565b9250828210156158e3576158e2615a50565b5b828203905092915050565b60006158f982615938565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561598f578082015181840152602081019050615974565b8381111561599e576000848401525b50505050565b600060028204905060018216806159bc57607f821691505b602082108114156159d0576159cf615aae565b5b50919050565b60006159e182615958565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a1457615a13615a50565b5b600182019050919050565b6000615a2a82615958565b9150615a3583615958565b925082615a4557615a44615a7f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615b26816158ee565b8114615b3157600080fd5b50565b615b3d81615900565b8114615b4857600080fd5b50565b615b548161590c565b8114615b5f57600080fd5b50565b615b6b81615958565b8114615b7657600080fd5b5056fe227d2c207b2274726169745f74797065223a20224163636573736f7279222c2276616c7565223a20223c7374796c653e23787b73686170652d72656e646572696e673a20637269737065646765733b7d3c2f7374796c653e3c2f7376673e3c7376672069643d22782220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d22302030203332203332223e3c706174682066696c6c3d22233934623561652220643d226d302c30683332763332682d33327a222f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f227d2c207b2274726169745f74797065223a2022546f70222c2276616c7565223a2022227d2c207b2274726169745f74797065223a20224a6172222c2276616c7565223a2022227d2c207b2274726169745f74797065223a202242617365222c2276616c7565223a20222c202261747472696275746573223a205b7b2274726169745f74797065223a2022536f7576656e6972222c2276616c7565223a2022a26469706673582212203966d3680bbcf6a9bbcd3c7e3e2b0c790043383a9eddf720d3ed44ca52e14a9e64736f6c63430008000033

Deployed Bytecode Sourcemap

21270:27885:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16879:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9938:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11021:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10602:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17375:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11725:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17111:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21454:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12072:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17496:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48314:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9691:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9475:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3501:94;;;;;;;;;;;;;:::i;:::-;;21421:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48418:125;;;:::i;:::-;;3278:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48218:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10046:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21381:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48064:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11250:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12265:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47936:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46536:683;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21343:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11553:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3603:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16879:224;16981:4;17020:35;17005:50;;;:11;:50;;;;:90;;;;17059:36;17083:11;17059:23;:36::i;:::-;17005:90;16998:97;;16879:224;;;:::o;9938:100::-;9992:13;10025:5;10018:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9938:100;:::o;11021:221::-;11097:7;11125:16;11133:7;11125;:16::i;:::-;11117:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11210:15;:24;11226:7;11210:24;;;;;;;;;;;;;;;;;;;;;11203:31;;11021:221;;;:::o;10602:411::-;10683:13;10699:23;10714:7;10699:14;:23::i;:::-;10683:39;;10747:5;10741:11;;:2;:11;;;;10733:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;10841:5;10825:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;10850:37;10867:5;10874:12;:10;:12::i;:::-;10850:16;:37::i;:::-;10825:62;10803:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;10984:21;10993:2;10997:7;10984:8;:21::i;:::-;10602:411;;;:::o;17375:113::-;17436:7;17463:10;:17;;;;17456:24;;17375:113;:::o;11725:339::-;11920:41;11939:12;:10;:12::i;:::-;11953:7;11920:18;:41::i;:::-;11912:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;12028:28;12038:4;12044:2;12048:7;12028:9;:28::i;:::-;11725:339;;;:::o;17111:256::-;17208:7;17244:23;17261:5;17244:16;:23::i;:::-;17236:5;:31;17228:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;17333:12;:19;17346:5;17333:19;;;;;;;;;;;;;;;:26;17353:5;17333:26;;;;;;;;;;;;17326:33;;17111:256;;;;:::o;21454:30::-;;;;:::o;12072:185::-;12210:39;12227:4;12233:2;12237:7;12210:39;;;;;;;;;;;;:16;:39::i;:::-;12072:185;;;:::o;17496:233::-;17571:7;17607:30;:28;:30::i;:::-;17599:5;:38;17591:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;17704:10;17715:5;17704:17;;;;;;;;;;;;;;;;;;;;;;;;17697:24;;17496:233;;;:::o;48314:96::-;3424:12;:10;:12::i;:::-;3413:23;;:7;:5;:7::i;:::-;:23;;;3405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48392:10:::1;48382:7;:20;;;;48314:96:::0;:::o;9691:239::-;9763:7;9783:13;9799:7;:16;9807:7;9799:16;;;;;;;;;;;;;;;;;;;;;9783:32;;9851:1;9834:19;;:5;:19;;;;9826:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9917:5;9910:12;;;9691:239;;;:::o;9475:208::-;9547:7;9592:1;9575:19;;:5;:19;;;;9567:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9659:9;:16;9669:5;9659:16;;;;;;;;;;;;;;;;9652:23;;9475:208;;;:::o;3501:94::-;3424:12;:10;:12::i;:::-;3413:23;;:7;:5;:7::i;:::-;:23;;;3405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3566:21:::1;3584:1;3566:9;:21::i;:::-;3501:94::o:0;21421:26::-;;;;:::o;48418:125::-;3424:12;:10;:12::i;:::-;3413:23;;:7;:5;:7::i;:::-;:23;;;3405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48493:12:::1;:10;:12::i;:::-;48485:26;;:49;48512:21;48485:49;;;;;;;;;;;;;;;;;;;;;;;48477:58;;;::::0;::::1;;48418:125::o:0;3278:87::-;3324:7;3351:6;;;;;;;;;;;3344:13;;3278:87;:::o;48218:88::-;3424:12;:10;:12::i;:::-;3413:23;;:7;:5;:7::i;:::-;:23;;;3405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48290:8:::1;48282:5;:16;;;;48218:88:::0;:::o;10046:104::-;10102:13;10135:7;10128:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10046:104;:::o;21381:33::-;;;;:::o;48064:146::-;48168:34;48173:13;48187:14;48168:4;:34::i;:::-;48064:146;;:::o;11250:295::-;11365:12;:10;:12::i;:::-;11353:24;;:8;:24;;;;11345:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;11465:8;11420:18;:32;11439:12;:10;:12::i;:::-;11420:32;;;;;;;;;;;;;;;:42;11453:8;11420:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;11518:8;11489:48;;11504:12;:10;:12::i;:::-;11489:48;;;11528:8;11489:48;;;;;;:::i;:::-;;;;;;;;11250:295;;:::o;12265:328::-;12440:41;12459:12;:10;:12::i;:::-;12473:7;12440:18;:41::i;:::-;12432:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;12546:39;12560:4;12566:2;12570:7;12579:5;12546:13;:39::i;:::-;12265:328;;;;:::o;47936:120::-;48015:33;48020:12;:10;:12::i;:::-;48033:14;48015:4;:33::i;:::-;47936:120;:::o;46536:683::-;46601:13;46627:27;46657:23;46672:7;46657:14;:23::i;:::-;46627:53;;46691:18;46712:396;46788:17;46797:7;46788:8;:17::i;:::-;46999:19;47009:8;46999:9;:19::i;:::-;47060:38;47080:16;47087:8;47080:6;:16::i;:::-;47060:13;:38::i;:::-;46739:366;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46712:13;:396::i;:::-;46691:417;;47183:4;47133:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;47119:70;;47207:4;47200:11;;;;46536:683;;;:::o;21343:31::-;;;;:::o;11553:164::-;11650:4;11674:18;:25;11693:5;11674:25;;;;;;;;;;;;;;;:35;11700:8;11674:35;;;;;;;;;;;;;;;;;;;;;;;;;11667:42;;11553:164;;;;:::o;3603:192::-;3424:12;:10;:12::i;:::-;3413:23;;:7;:5;:7::i;:::-;:23;;;3405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3712:1:::1;3692:22;;:8;:22;;;;3684:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3768:19;3778:8;3768:9;:19::i;:::-;3603:192:::0;:::o;9162:305::-;9264:4;9316:25;9301:40;;;:11;:40;;;;:105;;;;9373:33;9358:48;;;:11;:48;;;;9301:105;:158;;;;9423:36;9447:11;9423:23;:36::i;:::-;9301:158;9281:178;;9162:305;;;:::o;12924:127::-;12989:4;13041:1;13013:30;;:7;:16;13021:7;13013:16;;;;;;;;;;;;;;;;;;;;;:30;;;;13006:37;;12924:127;;;:::o;2829:98::-;2882:7;2909:10;2902:17;;2829:98;:::o;15154:174::-;15256:2;15229:15;:24;15245:7;15229:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;15312:7;15308:2;15274:46;;15283:23;15298:7;15283:14;:23::i;:::-;15274:46;;;;;;;;;;;;15154:174;;:::o;13059:348::-;13152:4;13177:16;13185:7;13177;:16::i;:::-;13169:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13253:13;13269:23;13284:7;13269:14;:23::i;:::-;13253:39;;13322:5;13311:16;;:7;:16;;;:51;;;;13355:7;13331:31;;:20;13343:7;13331:11;:20::i;:::-;:31;;;13311:51;:87;;;;13366:32;13383:5;13390:7;13366:16;:32::i;:::-;13311:87;13303:96;;;13059:348;;;;:::o;14620:526::-;14779:4;14752:31;;:23;14767:7;14752:14;:23::i;:::-;:31;;;14744:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14862:1;14848:16;;:2;:16;;;;14840:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14918:39;14939:4;14945:2;14949:7;14918:20;:39::i;:::-;14970:29;14987:1;14991:7;14970:8;:29::i;:::-;15031:1;15012:9;:15;15022:4;15012:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;15060:1;15043:9;:13;15053:2;15043:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;15091:2;15072:7;:16;15080:7;15072:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;15130:7;15126:2;15111:27;;15120:4;15111:27;;;;;;;;;;;;14620:526;;;:::o;3803:173::-;3859:16;3878:6;;;;;;;;;;;3859:25;;3904:8;3895:6;;:17;;;;;;;;;;;;;;;;;;3959:8;3928:40;;3949:8;3928:40;;;;;;;;;;;;3803:173;;:::o;47227:701::-;47329:9;;47313:13;:11;:13::i;:::-;:25;47305:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;47423:9;;47405:14;47389:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:43;;47381:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47505:7;;47487:14;:25;;47479:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47602:1;47585:14;:18;47577:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;47681:9;47663:14;47655:5;;:22;;;;:::i;:::-;:35;47647:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;47736:9;47731:190;47755:14;47751:1;:18;47731:190;;;47791:15;47827:1;47809:15;;:19;;;;:::i;:::-;47791:37;;47843:31;47853:11;47866:7;47843:9;:31::i;:::-;47908:1;47889:15;;:20;;;;;;;:::i;:::-;;;;;;;;47731:190;47771:3;;;;;:::i;:::-;;;;47731:190;;;;47227:701;;:::o;12601:315::-;12758:28;12768:4;12774:2;12778:7;12758:9;:28::i;:::-;12805:48;12828:4;12834:2;12838:7;12847:5;12805:22;:48::i;:::-;12797:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;12601:315;;;;:::o;40276:437::-;40340:18;;:::i;:::-;40381:27;;:::i;:::-;40443:22;40457:7;40443:13;:22::i;:::-;40421:8;:19;;:44;;;;;40497:21;40510:7;40497:12;:21::i;:::-;40476:8;:18;;:42;;;;;40550:21;40563:7;40550:12;:21::i;:::-;40529:8;:18;;:42;;;;;40602:20;40614:7;40602:11;:20::i;:::-;40582:8;:17;;:40;;;;;40655:22;40669:7;40655:13;:22::i;:::-;40633:8;:19;;:44;;;;;40697:8;40690:15;;;40276:437;;;:::o;48551:534::-;48607:13;48648:1;48639:5;:10;48635:53;;;48666:10;;;;;;;;;;;;;;;;;;;;;48635:53;48698:12;48713:5;48698:20;;48729:14;48754:78;48769:1;48761:4;:9;48754:78;;48787:8;;;;;:::i;:::-;;;;48818:2;48810:10;;;;;:::i;:::-;;;48754:78;;;48842:19;48874:6;48864:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48842:39;;48892:154;48908:1;48899:5;:10;48892:154;;48936:1;48926:11;;;;;:::i;:::-;;;49003:2;48995:5;:10;;;;:::i;:::-;48982:2;:24;;;;:::i;:::-;48969:39;;48952:6;48959;48952:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;49032:2;49023:11;;;;;:::i;:::-;;;48892:154;;;49070:6;49056:21;;;;;48551:534;;;;:::o;40717:1032::-;40788:13;40824:23;;:::i;:::-;40868:66;;;;;;;;;;;;;;;;;:5;40874:1;40868:8;;;;;;;;;;;;;;;;;;:66;;;;40956:10;40967:8;:19;;;40956:31;;;;;;;;;;;;;;;;40945:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;40951:1;40945:8;;;;;;;;;;;;;;;;;;:42;;;;40999:48;;;;;;;;;;;;;;;;;:5;41005:1;40999:8;;;;;;;;;;;;;;;;;;:48;;;;41069:11;41081:8;:18;;;41069:31;;;;;;;;;;;;;;;;41058:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;41064:1;41058:8;;;;;;;;;;;;;;;;;;:42;;;;41111:49;;;;;;;;;;;;;;;;;:5;41117:1;41111:8;;;;;;;;;;;;;;;;;;:49;;;;41182:10;41193:8;:18;;;41182:30;;;;;;;;;;;;;;;;41171:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;41177:1;41171:8;;;;;;;;;;;;;;;;;;:41;;;;41223:54;;;;;;;;;;;;;;;;;:5;41229:1;41223:8;;;;;;;;;;;;;;;;;;:54;;;;41299:10;41310:8;:17;;;41299:29;;;;;;;;;;;;;;;;41288:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;41294:1;41288:8;;;;;;;;;;;;;;;;;;:40;;;;41339:48;;;;;;;;;;;;;;;;;:5;41345:1;41339:8;;;;;;;;;;;;;;;;;;:48;;;;41409:12;41422:8;:19;;;41409:33;;;;;;;;;;;;;;;;41398:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;41404:1;41398:8;;;;;;;;;;;;;;;;;;:44;;;;41453:19;;;;;;;;;;;;;;;;;:5;41459:2;41453:9;;;;;;;;;;;;;;;;;;:19;;;;41493:20;41540:5;41546:1;41540:8;;;;;;;;;;;;;;;;;;;41550:5;41556:1;41550:8;;;;;;;;;;;;;;;;;;;41560:5;41566:1;41560:8;;;;;;;;;;;;;;;;;;;41523:46;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41493:77;;41628:6;41636:5;41642:1;41636:8;;;;;;;;;;;;;;;;;;;41646:5;41652:1;41646:8;;;;;;;;;;;;;;;;;;;41656:5;41662:1;41656:8;;;;;;;;;;;;;;;;;;;41666:5;41672:1;41666:8;;;;;;;;;;;;;;;;;;;41676:5;41682:1;41676:8;;;;;;;;;;;;;;;;;;;41686:5;41692:1;41686:8;;;;;;;;;;;;;;;;;;;41696:5;41702:1;41696:8;;;;;;;;;;;;;;;;;;;41706:5;41712:2;41706:9;;;;;;;;;;;;;;;;;;;41611:105;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41595:122;;41735:6;41728:13;;;;40717:1032;;;:::o;45732:797::-;45800:13;45826:22;;:::i;:::-;45861:158;;;;;;;;;;;;;;;;;:5;45867:1;45861:8;;;;;;;;;;;;;;;;;;:158;;;;46041:11;46053:8;:19;;;46041:32;;;;;;;;;;;;;;;;46030:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;46036:1;46030:8;;;;;;;;;;;;;;;;;;:43;;;;46095:12;46108:8;:18;;;46095:32;;;;;;;;;;;;;;;;46084:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;46090:1;46084:8;;;;;;;;;;;;;;;;;;:43;;;;46149:11;46161:8;:18;;;46149:31;;;;;;;;;;;;;;;;46138:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;46144:1;46138:8;;;;;;;;;;;;;;;;;;:42;;;;46202:11;46214:8;:17;;;46202:30;;;;;;;;;;;;;;;;46191:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;46197:1;46191:8;;;;;;;;;;;;;;;;;;:41;;;;46254:13;46268:8;:19;;;46254:34;;;;;;;;;;;;;;;;46243:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;46249:1;46243:8;;;;;;;;;;;;;;;;;;:45;;;;46299:66;;;;;;;;;;;;;;;;;:5;46305:1;46299:8;;;;;;;;;;;;;;;;;;:66;;;;46378:20;46425:5;46431:1;46425:8;;;;;;;;;;;;;;;;;;;46435:5;46441:1;46435:8;;;;;;;;;;;;;;;;;;;46445:5;46451:1;46445:8;;;;;;;;;;;;;;;;;;;46455:5;46461:1;46455:8;;;;;;;;;;;;;;;;;;;46465:5;46471:1;46465:8;;;;;;;;;;;;;;;;;;;46475:5;46481:1;46475:8;;;;;;;;;;;;;;;;;;;46485:5;46491:1;46485:8;;;;;;;;;;;;;;;;;;;46408:86;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46378:117;;46515:6;46508:13;;;;45732:797;;;:::o;49288:1523::-;49346:13;49372:11;49386:4;:11;49372:25;;49419:1;49412:3;:8;49408:23;;;49422:9;;;;;;;;;;;;;;;;;49408:23;49444:18;49482:1;49477;49471:3;:7;;;;:::i;:::-;49470:13;;;;:::i;:::-;49465:1;:19;;;;:::i;:::-;49444:40;;49497:19;49542:2;49529:10;:15;;;;:::i;:::-;49519:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49497:48;;49558:18;49579:5;;;;;;;;;;;;;;;;;49558:26;;49648:1;49641:5;49637:13;49693:2;49685:6;49681:15;49744:1;49712:777;49767:3;49764:1;49761:10;49712:777;;;49822:1;49819;49815:9;49810:14;;49880:8;49875:1;49869:4;49865:12;49859:19;49855:34;49960:4;49952:5;49948:2;49944:14;49940:25;49930:8;49926:40;49920:47;49999:3;49996:1;49992:11;49985:18;;50090:4;50081;50073:5;50069:2;50065:14;50061:25;50051:8;50047:40;50041:47;50037:58;50032:3;50028:68;50021:75;;50128:3;50125:1;50121:11;50114:18;;50218:4;50209;50201:5;50198:1;50194:13;50190:24;50180:8;50176:39;50170:46;50166:57;50161:3;50157:67;50150:74;;50256:3;50253:1;50249:11;50242:18;;50338:4;50329;50322:5;50318:16;50308:8;50304:31;50298:38;50294:49;50289:3;50285:59;50278:66;;50378:3;50373;50369:13;50362:20;;50420:3;50409:9;50402:22;50472:1;50461:9;50457:17;50444:30;;49791:698;;49712:777;;;49716:44;50521:1;50516:3;50512:11;50542:1;50537:84;;;;50640:1;50635:82;;;;50505:212;;50537:84;50598:6;50593:3;50589:16;50585:1;50574:9;50570:17;50563:43;50537:84;;50635:82;50696:4;50691:3;50687:14;50683:1;50672:9;50668:17;50661:41;50505:212;;50748:10;50740:6;50733:26;49606:1164;;50796:6;50782:21;;;;;;49288:1523;;;;:::o;8438:157::-;8523:4;8562:25;8547:40;;;:11;:40;;;;8540:47;;8438:157;;;:::o;17737:589::-;17881:45;17908:4;17914:2;17918:7;17881:26;:45::i;:::-;17959:1;17943:18;;:4;:18;;;17939:187;;;17978:40;18010:7;17978:31;:40::i;:::-;17939:187;;;18048:2;18040:10;;:4;:10;;;18036:90;;18067:47;18100:4;18106:7;18067:32;:47::i;:::-;18036:90;17939:187;18154:1;18140:16;;:2;:16;;;18136:183;;;18173:45;18210:7;18173:36;:45::i;:::-;18136:183;;;18246:4;18240:10;;:2;:10;;;18236:83;;18267:40;18295:2;18299:7;18267:27;:40::i;:::-;18236:83;18136:183;17737:589;;;:::o;13415:110::-;13491:26;13501:2;13505:7;13491:26;;;;;;;;;;;;:9;:26::i;:::-;13415:110;;:::o;15336:803::-;15491:4;15512:15;:2;:13;;;:15::i;:::-;15508:624;;;15564:2;15548:36;;;15585:12;:10;:12::i;:::-;15599:4;15605:7;15614:5;15548:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15544:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15811:1;15794:6;:13;:18;15790:272;;;15837:60;;;;;;;;;;:::i;:::-;;;;;;;;15790:272;16012:6;16006:13;15997:6;15993:2;15989:15;15982:38;15544:533;15681:45;;;15671:55;;;:6;:55;;;;15664:62;;;;;15508:624;16116:4;16109:11;;15336:803;;;;;;;:::o;41899:700::-;41962:7;41982:12;41997:66;42043:17;42052:7;42043:8;:17::i;:::-;42011:50;;;;;;;;:::i;:::-;;;;;;;;;;;;;41997:6;:66::i;:::-;41982:81;;42076:11;42097:3;42090:4;:10;;;;:::i;:::-;42076:24;;42111:10;42149:2;42142:3;:9;;:21;;;;;42161:2;42155:3;:8;42142:21;42138:38;;;42172:1;42167:6;;42138:38;42197:2;42190:3;:9;;:22;;;;;42209:3;42203;:9;42190:22;42186:39;;;42221:1;42216:6;;42186:39;42246:3;42239;:10;;:23;;;;;42259:3;42253;:9;42239:23;42235:40;;;42271:1;42266:6;;42235:40;42296:3;42289;:10;;:23;;;;;42309:3;42303;:9;42289:23;42285:40;;;42321:1;42316:6;;42285:40;42346:3;42339;:10;;:23;;;;;42359:3;42353;:9;42339:23;42335:40;;;42371:1;42366:6;;42335:40;42396:3;42389;:10;;:23;;;;;42409:3;42403;:9;42389:23;42385:40;;;42421:1;42416:6;;42385:40;42446:3;42439;:10;;:23;;;;;42459:3;42453;:9;42439:23;42435:40;;;42471:1;42466:6;;42435:40;42496:3;42489;:10;;:23;;;;;42509:3;42503;:9;42489:23;42485:40;;;42521:1;42516:6;;42485:40;42546:3;42539;:10;42535:27;;42558:1;42553:6;;42535:27;42589:2;42582:9;;;;;41899:700;;;:::o;42607:800::-;42669:7;42689:12;42704:65;42749:17;42758:7;42749:8;:17::i;:::-;42718:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;42704:6;:65::i;:::-;42689:80;;42782:11;42803:3;42796:4;:10;;;;:::i;:::-;42782:24;;42817:10;42855:2;42848:3;:9;;:21;;;;;42867:2;42861:3;:8;42848:21;42844:38;;;42878:1;42873:6;;42844:38;42903:2;42896:3;:9;;:22;;;;;42915:3;42909;:9;42896:22;42892:39;;;42927:1;42922:6;;42892:39;42952:3;42945;:10;;:23;;;;;42965:3;42959;:9;42945:23;42941:40;;;42977:1;42972:6;;42941:40;43002:3;42995;:10;;:23;;;;;43015:3;43009;:9;42995:23;42991:40;;;43027:1;43022:6;;42991:40;43052:3;43045;:10;;:23;;;;;43065:3;43059;:9;43045:23;43041:40;;;43077:1;43072:6;;43041:40;43102:3;43095;:10;;:23;;;;;43115:3;43109;:9;43095:23;43091:40;;;43127:1;43122:6;;43091:40;43152:3;43145;:10;;:23;;;;;43165:3;43159;:9;43145:23;43141:40;;;43177:1;43172:6;;43141:40;43202:3;43195;:10;;:23;;;;;43215:3;43209;:9;43195:23;43191:40;;;43227:1;43222:6;;43191:40;43252:3;43245;:10;;:23;;;;;43265:3;43259;:9;43245:23;43241:40;;;43277:1;43272:6;;43241:40;43302:3;43295;:10;;:23;;;;;43315:3;43309;:9;43295:23;43291:41;;;43327:2;43322:7;;43291:41;43353:3;43346;:10;43342:28;;43365:2;43360:7;;43342:28;43397:2;43390:9;;;;;42607:800;;;:::o;43414:702::-;43476:7;43496:12;43511:65;43556:17;43565:7;43556:8;:17::i;:::-;43525:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;43511:6;:65::i;:::-;43496:80;;43589:11;43610:3;43603:4;:10;;;;:::i;:::-;43589:24;;43624:10;43662:2;43655:3;:9;;:21;;;;;43674:2;43668:3;:8;43655:21;43651:38;;;43685:1;43680:6;;43651:38;43710:2;43703:3;:9;;:21;;;;;43722:2;43716:3;:8;43703:21;43699:38;;;43733:1;43728:6;;43699:38;43758:2;43751:3;:9;;:21;;;;;43770:2;43764:3;:8;43751:21;43747:38;;;43781:1;43776:6;;43747:38;43806:2;43799:3;:9;;:21;;;;;43818:2;43812:3;:8;43799:21;43795:38;;;43829:1;43824:6;;43795:38;43854:2;43847:3;:9;;:22;;;;;43866:3;43860;:9;43847:22;43843:39;;;43878:1;43873:6;;43843:39;43903:3;43896;:10;;:23;;;;;43916:3;43910;:9;43896:23;43892:40;;;43928:1;43923:6;;43892:40;43953:3;43946;:10;;:23;;;;;43966:3;43960;:9;43946:23;43942:40;;;43978:1;43973:6;;43942:40;44003:3;43996;:10;;:23;;;;;44016:3;44010;:9;43996:23;43992:40;;;44028:1;44023:6;;43992:40;44053:3;44046;:10;44042:27;;44065:1;44060:6;;44042:27;44106:2;44099:9;;;;;43414:702;;;:::o;44123:847::-;44184:7;44204:12;44219:64;44263:17;44272:7;44263:8;:17::i;:::-;44233:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;44219:6;:64::i;:::-;44204:79;;44296:11;44317:3;44310:4;:10;;;;:::i;:::-;44296:24;;44331:10;44369:2;44362:3;:9;;:21;;;;;44381:2;44375:3;:8;44362:21;44358:38;;;44392:1;44387:6;;44358:38;44417:2;44410:3;:9;;:21;;;;;44429:2;44423:3;:8;44410:21;44406:38;;;44440:1;44435:6;;44406:38;44465:2;44458:3;:9;;:22;;;;;44477:3;44471;:9;44458:22;44454:39;;;44489:1;44484:6;;44454:39;44514:3;44507;:10;;:23;;;;;44527:3;44521;:9;44507:23;44503:40;;;44539:1;44534:6;;44503:40;44564:3;44557;:10;;:23;;;;;44577:3;44571;:9;44557:23;44553:40;;;44589:1;44584:6;;44553:40;44614:3;44607;:10;;:23;;;;;44627:3;44621;:9;44607:23;44603:40;;;44639:1;44634:6;;44603:40;44664:3;44657;:10;;:23;;;;;44677:3;44671;:9;44657:23;44653:40;;;44689:1;44684:6;;44653:40;44714:3;44707;:10;;:23;;;;;44727:3;44721;:9;44707:23;44703:40;;;44739:1;44734:6;;44703:40;44764:3;44757;:10;;:23;;;;;44777:3;44771;:9;44757:23;44753:40;;;44789:1;44784:6;;44753:40;44814:3;44807;:10;;:23;;;;;44827:3;44821;:9;44807:23;44803:41;;;44839:2;44834:7;;44803:41;44865:3;44858;:10;;:23;;;;;44878:3;44872;:9;44858:23;44854:41;;;44890:2;44885:7;;44854:41;44916:3;44909;:10;44905:28;;44928:2;44923:7;;44905:28;44960:2;44953:9;;;;;44123:847;;;:::o;44975:750::-;45038:7;45058:12;45073:66;45119:17;45128:7;45119:8;:17::i;:::-;45087:50;;;;;;;;:::i;:::-;;;;;;;;;;;;;45073:6;:66::i;:::-;45058:81;;45152:11;45173:3;45166:4;:10;;;;:::i;:::-;45152:24;;45187:10;45225:2;45218:3;:9;;:21;;;;;45237:2;45231:3;:8;45218:21;45214:38;;;45248:1;45243:6;;45214:38;45273:2;45266:3;:9;;:21;;;;;45285:2;45279:3;:8;45266:21;45262:38;;;45296:1;45291:6;;45262:38;45321:2;45314:3;:9;;:22;;;;;45333:3;45327;:9;45314:22;45310:39;;;45345:1;45340:6;;45310:39;45370:3;45363;:10;;:23;;;;;45383:3;45377;:9;45363:23;45359:40;;;45395:1;45390:6;;45359:40;45420:3;45413;:10;;:23;;;;;45433:3;45427;:9;45413:23;45409:40;;;45445:1;45440:6;;45409:40;45470:3;45463;:10;;:23;;;;;45483:3;45477;:9;45463:23;45459:40;;;45495:1;45490:6;;45459:40;45521:3;45514;:10;;:23;;;;;45534:3;45528;:9;45514:23;45510:40;;;45546:1;45541:6;;45510:40;45571:3;45564;:10;;:23;;;;;45584:3;45578;:9;45564:23;45560:40;;;45596:1;45591:6;;45560:40;45621:3;45614;:10;;:23;;;;;45634:3;45628;:9;45614:23;45610:40;;;45646:1;45641:6;;45610:40;45671:3;45664;:10;45660:28;;45683:2;45678:7;;45660:28;45715:2;45708:9;;;;;44975:750;;;:::o;16147:126::-;;;;:::o;18563:164::-;18667:10;:17;;;;18640:15;:24;18656:7;18640:24;;;;;;;;;;;:44;;;;18695:10;18711:7;18695:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18563:164;:::o;18735:557::-;18829:22;18879:1;18854:22;18871:4;18854:16;:22::i;:::-;:26;;;;:::i;:::-;18829:51;;18891:18;18912:17;:26;18930:7;18912:26;;;;;;;;;;;;18891:47;;18969:14;18955:10;:28;18951:236;;19000:19;19022:12;:18;19035:4;19022:18;;;;;;;;;;;;;;;:34;19041:14;19022:34;;;;;;;;;;;;19000:56;;19106:11;19073:12;:18;19086:4;19073:18;;;;;;;;;;;;;;;:30;19092:10;19073:30;;;;;;;;;;;:44;;;;19165:10;19132:17;:30;19150:11;19132:30;;;;;;;;;;;:43;;;;18951:236;;19206:17;:26;19224:7;19206:26;;;;;;;;;;;19199:33;;;19250:12;:18;19263:4;19250:18;;;;;;;;;;;;;;;:34;19269:14;19250:34;;;;;;;;;;;19243:41;;;18735:557;;;;:::o;19300:425::-;19384:22;19429:1;19409:10;:17;;;;:21;;;;:::i;:::-;19384:46;;19441:18;19462:15;:24;19478:7;19462:24;;;;;;;;;;;;19441:45;;19497:19;19519:10;19530:14;19519:26;;;;;;;;;;;;;;;;;;;;;;;;19497:48;;19583:11;19558:10;19569;19558:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;19636:10;19605:15;:28;19621:11;19605:28;;;;;;;;;;;:41;;;;19666:15;:24;19682:7;19666:24;;;;;;;;;;;19659:31;;;19701:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19300:425;;;;:::o;18334:221::-;18419:14;18436:20;18453:2;18436:16;:20::i;:::-;18419:37;;18494:7;18467:12;:16;18480:2;18467:16;;;;;;;;;;;;;;;:24;18484:6;18467:24;;;;;;;;;;;:34;;;;18541:6;18512:17;:26;18530:7;18512:26;;;;;;;;;;;:35;;;;18334:221;;;:::o;13533:321::-;13663:18;13669:2;13673:7;13663:5;:18::i;:::-;13714:54;13745:1;13749:2;13753:7;13762:5;13714:22;:54::i;:::-;13692:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;13533:321;;;:::o;4874:198::-;4934:4;4953:12;5020:7;5008:20;5000:28;;5063:1;5056:4;:8;5049:15;;;4874:198;;;:::o;41757:138::-;41817:7;41879:5;41862:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;41852:34;;;;;;41844:43;;41837:50;;41757:138;;;:::o;13862:382::-;13956:1;13942:16;;:2;:16;;;;13934:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;14015:16;14023:7;14015;:16::i;:::-;14014:17;14006:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14077:45;14106:1;14110:2;14114:7;14077:20;:45::i;:::-;14152:1;14135:9;:13;14145:2;14135:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;14183:2;14164:7;:16;14172:7;14164:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;14228:7;14224:2;14203:33;;14220:1;14203:33;;;;;;;;;;;;13862:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:133::-;;581:6;568:20;559:29;;597:30;621:5;597:30;:::i;:::-;549:84;;;;:::o;639:137::-;;722:6;709:20;700:29;;738:32;764:5;738:32;:::i;:::-;690:86;;;;:::o;782:141::-;;869:6;863:13;854:22;;885:32;911:5;885:32;:::i;:::-;844:79;;;;:::o;942:271::-;;1046:3;1039:4;1031:6;1027:17;1023:27;1013:2;;1064:1;1061;1054:12;1013:2;1104:6;1091:20;1129:78;1203:3;1195:6;1188:4;1180:6;1176:17;1129:78;:::i;:::-;1120:87;;1003:210;;;;;:::o;1219:139::-;;1303:6;1290:20;1281:29;;1319:33;1346:5;1319:33;:::i;:::-;1271:87;;;;:::o;1364:262::-;;1472:2;1460:9;1451:7;1447:23;1443:32;1440:2;;;1488:1;1485;1478:12;1440:2;1531:1;1556:53;1601:7;1592:6;1581:9;1577:22;1556:53;:::i;:::-;1546:63;;1502:117;1430:196;;;;:::o;1632:407::-;;;1757:2;1745:9;1736:7;1732:23;1728:32;1725:2;;;1773:1;1770;1763:12;1725:2;1816:1;1841:53;1886:7;1877:6;1866:9;1862:22;1841:53;:::i;:::-;1831:63;;1787:117;1943:2;1969:53;2014:7;2005:6;1994:9;1990:22;1969:53;:::i;:::-;1959:63;;1914:118;1715:324;;;;;:::o;2045:552::-;;;;2187:2;2175:9;2166:7;2162:23;2158:32;2155:2;;;2203:1;2200;2193:12;2155:2;2246:1;2271:53;2316:7;2307:6;2296:9;2292:22;2271:53;:::i;:::-;2261:63;;2217:117;2373:2;2399:53;2444:7;2435:6;2424:9;2420:22;2399:53;:::i;:::-;2389:63;;2344:118;2501:2;2527:53;2572:7;2563:6;2552:9;2548:22;2527:53;:::i;:::-;2517:63;;2472:118;2145:452;;;;;:::o;2603:809::-;;;;;2771:3;2759:9;2750:7;2746:23;2742:33;2739:2;;;2788:1;2785;2778:12;2739:2;2831:1;2856:53;2901:7;2892:6;2881:9;2877:22;2856:53;:::i;:::-;2846:63;;2802:117;2958:2;2984:53;3029:7;3020:6;3009:9;3005:22;2984:53;:::i;:::-;2974:63;;2929:118;3086:2;3112:53;3157:7;3148:6;3137:9;3133:22;3112:53;:::i;:::-;3102:63;;3057:118;3242:2;3231:9;3227:18;3214:32;3273:18;3265:6;3262:30;3259:2;;;3305:1;3302;3295:12;3259:2;3333:62;3387:7;3378:6;3367:9;3363:22;3333:62;:::i;:::-;3323:72;;3185:220;2729:683;;;;;;;:::o;3418:401::-;;;3540:2;3528:9;3519:7;3515:23;3511:32;3508:2;;;3556:1;3553;3546:12;3508:2;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:50;3794:7;3785:6;3774:9;3770:22;3752:50;:::i;:::-;3742:60;;3697:115;3498:321;;;;;:::o;3825:407::-;;;3950:2;3938:9;3929:7;3925:23;3921:32;3918:2;;;3966:1;3963;3956:12;3918:2;4009:1;4034:53;4079:7;4070:6;4059:9;4055:22;4034:53;:::i;:::-;4024:63;;3980:117;4136:2;4162:53;4207:7;4198:6;4187:9;4183:22;4162:53;:::i;:::-;4152:63;;4107:118;3908:324;;;;;:::o;4238:260::-;;4345:2;4333:9;4324:7;4320:23;4316:32;4313:2;;;4361:1;4358;4351:12;4313:2;4404:1;4429:52;4473:7;4464:6;4453:9;4449:22;4429:52;:::i;:::-;4419:62;;4375:116;4303:195;;;;:::o;4504:282::-;;4622:2;4610:9;4601:7;4597:23;4593:32;4590:2;;;4638:1;4635;4628:12;4590:2;4681:1;4706:63;4761:7;4752:6;4741:9;4737:22;4706:63;:::i;:::-;4696:73;;4652:127;4580:206;;;;:::o;4792:262::-;;4900:2;4888:9;4879:7;4875:23;4871:32;4868:2;;;4916:1;4913;4906:12;4868:2;4959:1;4984:53;5029:7;5020:6;5009:9;5005:22;4984:53;:::i;:::-;4974:63;;4930:117;4858:196;;;;:::o;5060:118::-;5147:24;5165:5;5147:24;:::i;:::-;5142:3;5135:37;5125:53;;:::o;5184:109::-;5265:21;5280:5;5265:21;:::i;:::-;5260:3;5253:34;5243:50;;:::o;5299:360::-;;5413:38;5445:5;5413:38;:::i;:::-;5467:70;5530:6;5525:3;5467:70;:::i;:::-;5460:77;;5546:52;5591:6;5586:3;5579:4;5572:5;5568:16;5546:52;:::i;:::-;5623:29;5645:6;5623:29;:::i;:::-;5618:3;5614:39;5607:46;;5389:270;;;;;:::o;5665:364::-;;5781:39;5814:5;5781:39;:::i;:::-;5836:71;5900:6;5895:3;5836:71;:::i;:::-;5829:78;;5916:52;5961:6;5956:3;5949:4;5942:5;5938:16;5916:52;:::i;:::-;5993:29;6015:6;5993:29;:::i;:::-;5988:3;5984:39;5977:46;;5757:272;;;;;:::o;6035:377::-;;6169:39;6202:5;6169:39;:::i;:::-;6224:89;6306:6;6301:3;6224:89;:::i;:::-;6217:96;;6322:52;6367:6;6362:3;6355:4;6348:5;6344:16;6322:52;:::i;:::-;6399:6;6394:3;6390:16;6383:23;;6145:267;;;;;:::o;6418:375::-;;6581:67;6645:2;6640:3;6581:67;:::i;:::-;6574:74;;6678:34;6674:1;6669:3;6665:11;6658:55;6744:13;6739:2;6734:3;6730:12;6723:35;6784:2;6779:3;6775:12;6768:19;;6564:229;;;:::o;6799:382::-;;6962:67;7026:2;7021:3;6962:67;:::i;:::-;6955:74;;7059:34;7055:1;7050:3;7046:11;7039:55;7125:20;7120:2;7115:3;7111:12;7104:42;7172:2;7167:3;7163:12;7156:19;;6945:236;;;:::o;7187:370::-;;7350:67;7414:2;7409:3;7350:67;:::i;:::-;7343:74;;7447:34;7443:1;7438:3;7434:11;7427:55;7513:8;7508:2;7503:3;7499:12;7492:30;7548:2;7543:3;7539:12;7532:19;;7333:224;;;:::o;7563:345::-;;7744:85;7826:2;7821:3;7744:85;:::i;:::-;7737:92;;7859:13;7855:1;7850:3;7846:11;7839:34;7899:2;7894:3;7890:12;7883:19;;7727:181;;;:::o;7914:344::-;;8095:85;8177:2;8172:3;8095:85;:::i;:::-;8088:92;;8210:12;8206:1;8201:3;8197:11;8190:33;8249:2;8244:3;8240:12;8233:19;;8078:180;;;:::o;8264:326::-;;8427:67;8491:2;8486:3;8427:67;:::i;:::-;8420:74;;8524:30;8520:1;8515:3;8511:11;8504:51;8581:2;8576:3;8572:12;8565:19;;8410:180;;;:::o;8596:341::-;;8777:84;8859:1;8854:3;8777:84;:::i;:::-;8770:91;;8891:11;8887:1;8882:3;8878:11;8871:32;8929:1;8924:3;8920:11;8913:18;;8760:177;;;:::o;8943:368::-;;9106:67;9170:2;9165:3;9106:67;:::i;:::-;9099:74;;9203:34;9199:1;9194:3;9190:11;9183:55;9269:6;9264:2;9259:3;9255:12;9248:28;9302:2;9297:3;9293:12;9286:19;;9089:222;;;:::o;9317:323::-;;9480:67;9544:2;9539:3;9480:67;:::i;:::-;9473:74;;9577:27;9573:1;9568:3;9564:11;9557:48;9631:2;9626:3;9622:12;9615:19;;9463:177;;;:::o;9646:376::-;;9809:67;9873:2;9868:3;9809:67;:::i;:::-;9802:74;;9906:34;9902:1;9897:3;9893:11;9886:55;9972:14;9967:2;9962:3;9958:12;9951:36;10013:2;10008:3;10004:12;9997:19;;9792:230;;;:::o;10028:388::-;;10191:67;10255:2;10250:3;10191:67;:::i;:::-;10184:74;;10288:34;10284:1;10279:3;10275:11;10268:55;10354:26;10349:2;10344:3;10340:12;10333:48;10407:2;10402:3;10398:12;10391:19;;10174:242;;;:::o;10422:374::-;;10585:67;10649:2;10644:3;10585:67;:::i;:::-;10578:74;;10682:34;10678:1;10673:3;10669:11;10662:55;10748:12;10743:2;10738:3;10734:12;10727:34;10787:2;10782:3;10778:12;10771:19;;10568:228;;;:::o;10802:373::-;;10965:67;11029:2;11024:3;10965:67;:::i;:::-;10958:74;;11062:34;11058:1;11053:3;11049:11;11042:55;11128:11;11123:2;11118:3;11114:12;11107:33;11166:2;11161:3;11157:12;11150:19;;10948:227;;;:::o;11181:329::-;;11344:67;11408:2;11403:3;11344:67;:::i;:::-;11337:74;;11441:33;11437:1;11432:3;11428:11;11421:54;11501:2;11496:3;11492:12;11485:19;;11327:183;;;:::o;11516:436::-;;11697:85;11779:2;11774:3;11697:85;:::i;:::-;11690:92;;11812:66;11808:1;11803:3;11799:11;11792:87;11910:6;11905:2;11900:3;11896:12;11889:28;11943:2;11938:3;11934:12;11927:19;;11680:272;;;:::o;11958:381::-;;12121:67;12185:2;12180:3;12121:67;:::i;:::-;12114:74;;12218:34;12214:1;12209:3;12205:11;12198:55;12284:19;12279:2;12274:3;12270:12;12263:41;12330:2;12325:3;12321:12;12314:19;;12104:235;;;:::o;12345:396::-;;12526:84;12608:1;12603:3;12526:84;:::i;:::-;12519:91;;12640:66;12636:1;12631:3;12627:11;12620:87;12733:1;12728:3;12724:11;12717:18;;12509:232;;;:::o;12747:330::-;;12910:67;12974:2;12969:3;12910:67;:::i;:::-;12903:74;;13007:34;13003:1;12998:3;12994:11;12987:55;13068:2;13063:3;13059:12;13052:19;;12893:184;;;:::o;13083:321::-;;13246:67;13310:2;13305:3;13246:67;:::i;:::-;13239:74;;13343:25;13339:1;13334:3;13330:11;13323:46;13395:2;13390:3;13386:12;13379:19;;13229:175;;;:::o;13410:376::-;;13573:67;13637:2;13632:3;13573:67;:::i;:::-;13566:74;;13670:34;13666:1;13661:3;13657:11;13650:55;13736:14;13731:2;13726:3;13722:12;13715:36;13777:2;13772:3;13768:12;13761:19;;13556:230;;;:::o;13792:330::-;;13955:67;14019:2;14014:3;13955:67;:::i;:::-;13948:74;;14052:34;14048:1;14043:3;14039:11;14032:55;14113:2;14108:3;14104:12;14097:19;;13938:184;;;:::o;14128:373::-;;14291:67;14355:2;14350:3;14291:67;:::i;:::-;14284:74;;14388:34;14384:1;14379:3;14375:11;14368:55;14454:11;14449:2;14444:3;14440:12;14433:33;14492:2;14487:3;14483:12;14476:19;;14274:227;;;:::o;14507:345::-;;14688:85;14770:2;14765:3;14688:85;:::i;:::-;14681:92;;14803:13;14799:1;14794:3;14790:11;14783:34;14843:2;14838:3;14834:12;14827:19;;14671:181;;;:::o;14858:326::-;;15021:67;15085:2;15080:3;15021:67;:::i;:::-;15014:74;;15118:30;15114:1;15109:3;15105:11;15098:51;15175:2;15170:3;15166:12;15159:19;;15004:180;;;:::o;15190:365::-;;15353:67;15417:2;15412:3;15353:67;:::i;:::-;15346:74;;15450:34;15446:1;15441:3;15437:11;15430:55;15516:3;15511:2;15506:3;15502:12;15495:25;15546:2;15541:3;15537:12;15530:19;;15336:219;;;:::o;15561:363::-;;15742:85;15824:2;15819:3;15742:85;:::i;:::-;15735:92;;15857:31;15853:1;15848:3;15844:11;15837:52;15915:2;15910:3;15906:12;15899:19;;15725:199;;;:::o;15930:381::-;;16093:67;16157:2;16152:3;16093:67;:::i;:::-;16086:74;;16190:34;16186:1;16181:3;16177:11;16170:55;16256:19;16251:2;16246:3;16242:12;16235:41;16302:2;16297:3;16293:12;16286:19;;16076:235;;;:::o;16317:376::-;;16480:67;16544:2;16539:3;16480:67;:::i;:::-;16473:74;;16577:34;16573:1;16568:3;16564:11;16557:55;16643:14;16638:2;16633:3;16629:12;16622:36;16684:2;16679:3;16675:12;16668:19;;16463:230;;;:::o;16699:344::-;;16880:85;16962:2;16957:3;16880:85;:::i;:::-;16873:92;;16995:12;16991:1;16986:3;16982:11;16975:33;17034:2;17029:3;17025:12;17018:19;;16863:180;;;:::o;17049:764::-;;17230:86;17312:3;17307;17230:86;:::i;:::-;17223:93;;17346:66;17342:1;17337:3;17333:11;17326:87;17444:34;17439:2;17434:3;17430:12;17423:56;17510:34;17505:2;17500:3;17496:12;17489:56;17576:34;17571:2;17566:3;17562:12;17555:56;17643:34;17637:3;17632;17628:13;17621:57;17710:66;17704:3;17699;17695:13;17688:89;17803:3;17798;17794:13;17787:20;;17213:600;;;:::o;17819:398::-;;18000:85;18082:2;18077:3;18000:85;:::i;:::-;17993:92;;18115:66;18111:1;18106:3;18102:11;18095:87;18208:2;18203:3;18199:12;18192:19;;17983:234;;;:::o;18223:325::-;;18386:67;18450:2;18445:3;18386:67;:::i;:::-;18379:74;;18483:29;18479:1;18474:3;18470:11;18463:50;18539:2;18534:3;18530:12;18523:19;;18369:179;;;:::o;18554:118::-;18641:24;18659:5;18641:24;:::i;:::-;18636:3;18629:37;18619:53;;:::o;18678:275::-;;18832:95;18923:3;18914:6;18832:95;:::i;:::-;18825:102;;18944:3;18937:10;;18814:139;;;;:::o;18959:595::-;;19209:95;19300:3;19291:6;19209:95;:::i;:::-;19202:102;;19321:95;19412:3;19403:6;19321:95;:::i;:::-;19314:102;;19433:95;19524:3;19515:6;19433:95;:::i;:::-;19426:102;;19545:3;19538:10;;19191:363;;;;;;:::o;19560:1235::-;;20002:95;20093:3;20084:6;20002:95;:::i;:::-;19995:102;;20114:95;20205:3;20196:6;20114:95;:::i;:::-;20107:102;;20226:95;20317:3;20308:6;20226:95;:::i;:::-;20219:102;;20338:95;20429:3;20420:6;20338:95;:::i;:::-;20331:102;;20450:95;20541:3;20532:6;20450:95;:::i;:::-;20443:102;;20562:95;20653:3;20644:6;20562:95;:::i;:::-;20555:102;;20674:95;20765:3;20756:6;20674:95;:::i;:::-;20667:102;;20786:3;20779:10;;19984:811;;;;;;;;;;:::o;20801:1555::-;;21339:95;21430:3;21421:6;21339:95;:::i;:::-;21332:102;;21451:95;21542:3;21533:6;21451:95;:::i;:::-;21444:102;;21563:95;21654:3;21645:6;21563:95;:::i;:::-;21556:102;;21675:95;21766:3;21757:6;21675:95;:::i;:::-;21668:102;;21787:95;21878:3;21869:6;21787:95;:::i;:::-;21780:102;;21899:95;21990:3;21981:6;21899:95;:::i;:::-;21892:102;;22011:95;22102:3;22093:6;22011:95;:::i;:::-;22004:102;;22123:95;22214:3;22205:6;22123:95;:::i;:::-;22116:102;;22235:95;22326:3;22317:6;22235:95;:::i;:::-;22228:102;;22347:3;22340:10;;21321:1035;;;;;;;;;;;;:::o;22362:541::-;;22617:148;22761:3;22617:148;:::i;:::-;22610:155;;22782:95;22873:3;22864:6;22782:95;:::i;:::-;22775:102;;22894:3;22887:10;;22599:304;;;;:::o;22909:541::-;;23164:148;23308:3;23164:148;:::i;:::-;23157:155;;23329:95;23420:3;23411:6;23329:95;:::i;:::-;23322:102;;23441:3;23434:10;;23146:304;;;;:::o;23456:541::-;;23711:148;23855:3;23711:148;:::i;:::-;23704:155;;23876:95;23967:3;23958:6;23876:95;:::i;:::-;23869:102;;23988:3;23981:10;;23693:304;;;;:::o;24003:541::-;;24258:148;24402:3;24258:148;:::i;:::-;24251:155;;24423:95;24514:3;24505:6;24423:95;:::i;:::-;24416:102;;24535:3;24528:10;;24240:304;;;;:::o;24550:541::-;;24805:148;24949:3;24805:148;:::i;:::-;24798:155;;24970:95;25061:3;25052:6;24970:95;:::i;:::-;24963:102;;25082:3;25075:10;;24787:304;;;;:::o;25097:541::-;;25352:148;25496:3;25352:148;:::i;:::-;25345:155;;25517:95;25608:3;25599:6;25517:95;:::i;:::-;25510:102;;25629:3;25622:10;;25334:304;;;;:::o;25644:1659::-;;26298:148;26442:3;26298:148;:::i;:::-;26291:155;;26463:95;26554:3;26545:6;26463:95;:::i;:::-;26456:102;;26575:148;26719:3;26575:148;:::i;:::-;26568:155;;26740:95;26831:3;26822:6;26740:95;:::i;:::-;26733:102;;26852:148;26996:3;26852:148;:::i;:::-;26845:155;;27017:95;27108:3;27099:6;27017:95;:::i;:::-;27010:102;;27129:148;27273:3;27129:148;:::i;:::-;27122:155;;27294:3;27287:10;;26280:1023;;;;;;:::o;27309:222::-;;27440:2;27429:9;27425:18;27417:26;;27453:71;27521:1;27510:9;27506:17;27497:6;27453:71;:::i;:::-;27407:124;;;;:::o;27537:640::-;;27770:3;27759:9;27755:19;27747:27;;27784:71;27852:1;27841:9;27837:17;27828:6;27784:71;:::i;:::-;27865:72;27933:2;27922:9;27918:18;27909:6;27865:72;:::i;:::-;27947;28015:2;28004:9;28000:18;27991:6;27947:72;:::i;:::-;28066:9;28060:4;28056:20;28051:2;28040:9;28036:18;28029:48;28094:76;28165:4;28156:6;28094:76;:::i;:::-;28086:84;;27737:440;;;;;;;:::o;28183:210::-;;28308:2;28297:9;28293:18;28285:26;;28321:65;28383:1;28372:9;28368:17;28359:6;28321:65;:::i;:::-;28275:118;;;;:::o;28399:313::-;;28550:2;28539:9;28535:18;28527:26;;28599:9;28593:4;28589:20;28585:1;28574:9;28570:17;28563:47;28627:78;28700:4;28691:6;28627:78;:::i;:::-;28619:86;;28517:195;;;;:::o;28718:419::-;;28922:2;28911:9;28907:18;28899:26;;28971:9;28965:4;28961:20;28957:1;28946:9;28942:17;28935:47;28999:131;29125:4;28999:131;:::i;:::-;28991:139;;28889:248;;;:::o;29143:419::-;;29347:2;29336:9;29332:18;29324:26;;29396:9;29390:4;29386:20;29382:1;29371:9;29367:17;29360:47;29424:131;29550:4;29424:131;:::i;:::-;29416:139;;29314:248;;;:::o;29568:419::-;;29772:2;29761:9;29757:18;29749:26;;29821:9;29815:4;29811:20;29807:1;29796:9;29792:17;29785:47;29849:131;29975:4;29849:131;:::i;:::-;29841:139;;29739:248;;;:::o;29993:419::-;;30197:2;30186:9;30182:18;30174:26;;30246:9;30240:4;30236:20;30232:1;30221:9;30217:17;30210:47;30274:131;30400:4;30274:131;:::i;:::-;30266:139;;30164:248;;;:::o;30418:419::-;;30622:2;30611:9;30607:18;30599:26;;30671:9;30665:4;30661:20;30657:1;30646:9;30642:17;30635:47;30699:131;30825:4;30699:131;:::i;:::-;30691:139;;30589:248;;;:::o;30843:419::-;;31047:2;31036:9;31032:18;31024:26;;31096:9;31090:4;31086:20;31082:1;31071:9;31067:17;31060:47;31124:131;31250:4;31124:131;:::i;:::-;31116:139;;31014:248;;;:::o;31268:419::-;;31472:2;31461:9;31457:18;31449:26;;31521:9;31515:4;31511:20;31507:1;31496:9;31492:17;31485:47;31549:131;31675:4;31549:131;:::i;:::-;31541:139;;31439:248;;;:::o;31693:419::-;;31897:2;31886:9;31882:18;31874:26;;31946:9;31940:4;31936:20;31932:1;31921:9;31917:17;31910:47;31974:131;32100:4;31974:131;:::i;:::-;31966:139;;31864:248;;;:::o;32118:419::-;;32322:2;32311:9;32307:18;32299:26;;32371:9;32365:4;32361:20;32357:1;32346:9;32342:17;32335:47;32399:131;32525:4;32399:131;:::i;:::-;32391:139;;32289:248;;;:::o;32543:419::-;;32747:2;32736:9;32732:18;32724:26;;32796:9;32790:4;32786:20;32782:1;32771:9;32767:17;32760:47;32824:131;32950:4;32824:131;:::i;:::-;32816:139;;32714:248;;;:::o;32968:419::-;;33172:2;33161:9;33157:18;33149:26;;33221:9;33215:4;33211:20;33207:1;33196:9;33192:17;33185:47;33249:131;33375:4;33249:131;:::i;:::-;33241:139;;33139:248;;;:::o;33393:419::-;;33597:2;33586:9;33582:18;33574:26;;33646:9;33640:4;33636:20;33632:1;33621:9;33617:17;33610:47;33674:131;33800:4;33674:131;:::i;:::-;33666:139;;33564:248;;;:::o;33818:419::-;;34022:2;34011:9;34007:18;33999:26;;34071:9;34065:4;34061:20;34057:1;34046:9;34042:17;34035:47;34099:131;34225:4;34099:131;:::i;:::-;34091:139;;33989:248;;;:::o;34243:419::-;;34447:2;34436:9;34432:18;34424:26;;34496:9;34490:4;34486:20;34482:1;34471:9;34467:17;34460:47;34524:131;34650:4;34524:131;:::i;:::-;34516:139;;34414:248;;;:::o;34668:419::-;;34872:2;34861:9;34857:18;34849:26;;34921:9;34915:4;34911:20;34907:1;34896:9;34892:17;34885:47;34949:131;35075:4;34949:131;:::i;:::-;34941:139;;34839:248;;;:::o;35093:419::-;;35297:2;35286:9;35282:18;35274:26;;35346:9;35340:4;35336:20;35332:1;35321:9;35317:17;35310:47;35374:131;35500:4;35374:131;:::i;:::-;35366:139;;35264:248;;;:::o;35518:419::-;;35722:2;35711:9;35707:18;35699:26;;35771:9;35765:4;35761:20;35757:1;35746:9;35742:17;35735:47;35799:131;35925:4;35799:131;:::i;:::-;35791:139;;35689:248;;;:::o;35943:419::-;;36147:2;36136:9;36132:18;36124:26;;36196:9;36190:4;36186:20;36182:1;36171:9;36167:17;36160:47;36224:131;36350:4;36224:131;:::i;:::-;36216:139;;36114:248;;;:::o;36368:419::-;;36572:2;36561:9;36557:18;36549:26;;36621:9;36615:4;36611:20;36607:1;36596:9;36592:17;36585:47;36649:131;36775:4;36649:131;:::i;:::-;36641:139;;36539:248;;;:::o;36793:419::-;;36997:2;36986:9;36982:18;36974:26;;37046:9;37040:4;37036:20;37032:1;37021:9;37017:17;37010:47;37074:131;37200:4;37074:131;:::i;:::-;37066:139;;36964:248;;;:::o;37218:419::-;;37422:2;37411:9;37407:18;37399:26;;37471:9;37465:4;37461:20;37457:1;37446:9;37442:17;37435:47;37499:131;37625:4;37499:131;:::i;:::-;37491:139;;37389:248;;;:::o;37643:419::-;;37847:2;37836:9;37832:18;37824:26;;37896:9;37890:4;37886:20;37882:1;37871:9;37867:17;37860:47;37924:131;38050:4;37924:131;:::i;:::-;37916:139;;37814:248;;;:::o;38068:222::-;;38199:2;38188:9;38184:18;38176:26;;38212:71;38280:1;38269:9;38265:17;38256:6;38212:71;:::i;:::-;38166:124;;;;:::o;38296:283::-;;38362:2;38356:9;38346:19;;38404:4;38396:6;38392:17;38511:6;38499:10;38496:22;38475:18;38463:10;38460:34;38457:62;38454:2;;;38522:18;;:::i;:::-;38454:2;38562:10;38558:2;38551:22;38336:243;;;;:::o;38585:331::-;;38736:18;38728:6;38725:30;38722:2;;;38758:18;;:::i;:::-;38722:2;38843:4;38839:9;38832:4;38824:6;38820:17;38816:33;38808:41;;38904:4;38898;38894:15;38886:23;;38651:265;;;:::o;38922:98::-;;39007:5;39001:12;38991:22;;38980:40;;;:::o;39026:99::-;;39112:5;39106:12;39096:22;;39085:40;;;:::o;39131:168::-;;39248:6;39243:3;39236:19;39288:4;39283:3;39279:14;39264:29;;39226:73;;;;:::o;39305:169::-;;39423:6;39418:3;39411:19;39463:4;39458:3;39454:14;39439:29;;39401:73;;;;:::o;39480:148::-;;39619:3;39604:18;;39594:34;;;;:::o;39634:305::-;;39693:20;39711:1;39693:20;:::i;:::-;39688:25;;39727:20;39745:1;39727:20;:::i;:::-;39722:25;;39881:1;39813:66;39809:74;39806:1;39803:81;39800:2;;;39887:18;;:::i;:::-;39800:2;39931:1;39928;39924:9;39917:16;;39678:261;;;;:::o;39945:185::-;;40002:20;40020:1;40002:20;:::i;:::-;39997:25;;40036:20;40054:1;40036:20;:::i;:::-;40031:25;;40075:1;40065:2;;40080:18;;:::i;:::-;40065:2;40122:1;40119;40115:9;40110:14;;39987:143;;;;:::o;40136:348::-;;40199:20;40217:1;40199:20;:::i;:::-;40194:25;;40233:20;40251:1;40233:20;:::i;:::-;40228:25;;40421:1;40353:66;40349:74;40346:1;40343:81;40338:1;40331:9;40324:17;40320:105;40317:2;;;40428:18;;:::i;:::-;40317:2;40476:1;40473;40469:9;40458:20;;40184:300;;;;:::o;40490:191::-;;40550:20;40568:1;40550:20;:::i;:::-;40545:25;;40584:20;40602:1;40584:20;:::i;:::-;40579:25;;40623:1;40620;40617:8;40614:2;;;40628:18;;:::i;:::-;40614:2;40673:1;40670;40666:9;40658:17;;40535:146;;;;:::o;40687:96::-;;40753:24;40771:5;40753:24;:::i;:::-;40742:35;;40732:51;;;:::o;40789:90::-;;40866:5;40859:13;40852:21;40841:32;;40831:48;;;:::o;40885:149::-;;40961:66;40954:5;40950:78;40939:89;;40929:105;;;:::o;41040:126::-;;41117:42;41110:5;41106:54;41095:65;;41085:81;;;:::o;41172:77::-;;41238:5;41227:16;;41217:32;;;:::o;41255:154::-;41339:6;41334:3;41329;41316:30;41401:1;41392:6;41387:3;41383:16;41376:27;41306:103;;;:::o;41415:307::-;41483:1;41493:113;41507:6;41504:1;41501:13;41493:113;;;41592:1;41587:3;41583:11;41577:18;41573:1;41568:3;41564:11;41557:39;41529:2;41526:1;41522:10;41517:15;;41493:113;;;41624:6;41621:1;41618:13;41615:2;;;41704:1;41695:6;41690:3;41686:16;41679:27;41615:2;41464:258;;;;:::o;41728:320::-;;41809:1;41803:4;41799:12;41789:22;;41856:1;41850:4;41846:12;41877:18;41867:2;;41933:4;41925:6;41921:17;41911:27;;41867:2;41995;41987:6;41984:14;41964:18;41961:38;41958:2;;;42014:18;;:::i;:::-;41958:2;41779:269;;;;:::o;42054:233::-;;42116:24;42134:5;42116:24;:::i;:::-;42107:33;;42162:66;42155:5;42152:77;42149:2;;;42232:18;;:::i;:::-;42149:2;42279:1;42272:5;42268:13;42261:20;;42097:190;;;:::o;42293:176::-;;42342:20;42360:1;42342:20;:::i;:::-;42337:25;;42376:20;42394:1;42376:20;:::i;:::-;42371:25;;42415:1;42405:2;;42420:18;;:::i;:::-;42405:2;42461:1;42458;42454:9;42449:14;;42327:142;;;;:::o;42475:180::-;42523:77;42520:1;42513:88;42620:4;42617:1;42610:15;42644:4;42641:1;42634:15;42661:180;42709:77;42706:1;42699:88;42806:4;42803:1;42796:15;42830:4;42827:1;42820:15;42847:180;42895:77;42892:1;42885:88;42992:4;42989:1;42982:15;43016:4;43013:1;43006:15;43033:180;43081:77;43078:1;43071:88;43178:4;43175:1;43168:15;43202:4;43199:1;43192:15;43219:102;;43311:2;43307:7;43302:2;43295:5;43291:14;43287:28;43277:38;;43267:54;;;:::o;43327:122::-;43400:24;43418:5;43400:24;:::i;:::-;43393:5;43390:35;43380:2;;43439:1;43436;43429:12;43380:2;43370:79;:::o;43455:116::-;43525:21;43540:5;43525:21;:::i;:::-;43518:5;43515:32;43505:2;;43561:1;43558;43551:12;43505:2;43495:76;:::o;43577:120::-;43649:23;43666:5;43649:23;:::i;:::-;43642:5;43639:34;43629:2;;43687:1;43684;43677:12;43629:2;43619:78;:::o;43703:122::-;43776:24;43794:5;43776:24;:::i;:::-;43769:5;43766:35;43756:2;;43815:1;43812;43805:12;43756:2;43746:79;:::o

Swarm Source

ipfs://3966d3680bbcf6a9bbcd3c7e3e2b0c790043383a9eddf720d3ed44ca52e14a9e
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.