ETH Price: $3,372.39 (+2.98%)
Gas: 3 Gwei

Token

Larva Wolf (LARVAWOLF)
 

Overview

Max Total Supply

485 LARVAWOLF

Holders

143

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
louisvuittonnft.eth
Balance
4 LARVAWOLF
0xe52ee356e4320dbc467d72a5e7931c1f24be2912
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
LarvaWolf

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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

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



contract LarvaWolf is ERC721Enumerable, ReentrancyGuard, Ownable {

	uint256 public maxSupply = 5000;
	uint256 public price = 0.05 ether;
	uint256 public maxMint = 10;
	uint256 public numTokensMinted;

	string[8] private baseColors = ['#AE8B61','#DBB181','#E8AA96','#FFC2C2','#EECFA0','#C9CDAF','#D5C6E1','#EAD9D9'];
	string[7] private thirdNames = ['Smile', 'GoldTooth', 'Handlebars', 'Zombie', 'Alien', 'Punk', 'Normal'];
	string[7] private thirdLayers = [
		'<path fill="#000" d="m20 18h1v1h-1v-1z"/>',
		'<path fill="#FFE600" d="m22 19h1v1h-1v-1z"/>',
		'<path fill="#A66E2C" d="m21 18h3v1h-3v-1zm-1 1h1v2h-1v-2zm4 0h1v2h-1v-2z" /><path fill="#C28946" d="m20 18h1v1h-1v-1zm4 0h1v1h-1v-1z" />',
		'<path fill="#7DA269" d="m3 27h13v1h-13v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm2-1h10v1h-10v-1zm2-1h8v1h-8v-1zm0-1h4v1h-4v-1zm0-1h3v1h-3v-1zm0-3h2v3h-2v-3zm0-2h5v2h-5v-2zm3 2h2v3h-2v-3zm1 3h6v1h-6v-1zm1-2h9v2h-9v-2zm4-1h2v1h-2v-1zm0 4h4v1h-4v-1zm4-1h1v1h-1v-1zm1-1h1v1h-1v-1zm0-1h2v1h-2v-1zm-14-8h6v5h-6v-5zm5 5h1v1h-1v-1zm-6-11h1v4h-1v-4zm1 4h1v2h-1v-2zm5-3h1v5h-1v-5z"/><path fill="#000" fill-opacity=".4" d="m3 27h1v1h-1v-1zm2-2h1v3h-1v-3zm2-2h1v5h-1v-5zm2-1h1v6h-1v-6zm1 5h1v1h-1v-1zm1-3h8v1h-8v-1zm1 1h5v1h-5v-1zm0-13h2v1h-2v-1zm3 0h2v1h-2v-1zm-3 2h1v1h-1v-1zm3 0h1v1h-1v-1zm6 6h1v1h-1v-1z"/><path fill="red" d="m12 13h1v1h-1v-1zm3 0h1v1h-1v-1z"/><path fill="#000" d="m13 13h1v1h-1v-1zm3 0h1v1h-1v-1zm5 6h3v1h-3v-1z"/>',
		'<path fill="#C8FBFB" d="m3 27h13v1h-13v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm2-1h10v1h-10v-1zm2-1h8v1h-8v-1zm0-1h4v1h-4v-1zm0-1h3v1h-3v-1zm0-3h2v3h-2v-3zm0-2h5v2h-5v-2zm3 2h2v3h-2v-3zm1 3h6v1h-6v-1zm1-2h9v2h-9v-2zm4-1h2v1h-2v-1zm0 4h4v1h-4v-1zm4-1h1v1h-1v-1zm1-1h1v1h-1v-1zm0-1h2v1h-2v-1zm-14-8h6v5h-6v-5zm5 5h1v1h-1v-1zm-6-11h1v4h-1v-4zm1 4h1v2h-1v-2zm5-3h1v5h-1v-5z"/><path fill="#75BDBD" d="m12 12h1v1h-1v-1zm3 0h1v1h-1v-1z"/><path fill="#000" d="m12 13h1v1h-1v-1zm1-1h1v1h-1v-1zm2 1h1v1h-1v-1zm1-1h1v1h-1v-1zm5 7h3v1h-3v-1z"/> <path fill="#9BE0E0" d="m3 27h1v1h-1v-1zm2-2h1v3h-1v-3zm2-2h1v5h-1v-5zm2-1h1v6h-1v-6zm1 5h1v1h-1v-1zm1-3h8v1h-8v-1zm1 1h5v1h-5v-1zm1-12h1v1h-1v-1zm3 0h1v1h-1v-1z"/>',
		'<path fill="#F8C8DC" d="m3 27h13v1h-13v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm2-1h10v1h-10v-1zm2-1h8v1h-8v-1zm0-1h4v1h-4v-1zm0-1h3v1h-3v-1zm0-3h2v3h-2v-3zm0-2h5v2h-5v-2zm3 2h2v3h-2v-3zm1 3h6v1h-6v-1zm1-2h9v2h-9v-2zm4-1h2v1h-2v-1zm0 4h4v1h-4v-1zm4-1h1v1h-1v-1zm1-1h1v1h-1v-1zm0-1h2v1h-2v-1zm-14-8h6v5h-6v-5zm5 5h1v1h-1v-1zm-6-11h1v4h-1v-4zm1 4h1v2h-1v-2zm5-3h1v5h-1v-5z" /><path fill="#FFC0CB" d="m12 12h2v1h-2v-1zm3 0h2v1h-2v-1zm-12 15h1v1h-1v-1zm2-2h1v3h-1v-3zm2-2h1v5h-1v-5zm2-1h1v6h-1v-6zm1 5h1v1h-1v-1zm1-3h8v1h-8v-1zm1 1h5v1h-5v-1z"/><path fill="#000" d="m12 13h2v1h-2v-1zm3 0h2v1h-2v-1zm6 6h3v1h-3v-1z"/>',
		''];
	string[8] private fourthNames = ['3D Glasses','VR','Dizzy Eyes','Eye Patch','Classic Shades','Regular Shades','Cyclop','None'];
	string[8] private fourthLayers = [
		'<path fill="#F0F0F0" d="m10 12h8v1h-8v-1zm7 1h1v2h-1v-2zm-6 1h6v1h-6v-1zm0-1h1v1h-1v-1zm3 0h1v1h-1v-1z" /><path fill="#FD3232" d="m15 13h2v1h-2v-1z" /><path fill="#328DFD" d="m12 13h2v1h-2v-1z" />',
		'<path fill="#000" d="m12 12h5v1h-5v-1zm-1-2h7v1h-7v-1zm-1 1h1v3h-1v-3zm1 3h7v1h-7v-1zm7-3h1v3h-1v-3z" /><path fill="#8D8D8D" d="m11 11h1v1h-1v-1zm6 0h1v1h-1v-1zm-6 2h1v1h-1v-1zm6 0h1v1h-1v-1z" /><path fill="#B4B4B4" d="m12 11h5v1h-5v-1zm0 2h5v1h-5v-1zm-1-1h1v1h-1v-1zm6 0h1v1h-1v-1z" />',
		'<path fill="#FFFFFF" d="m12 12h1v1h-1v-1zm1 1h1v1h-1v-1zm2-1h1v1h-1v-1zm1 1h1v1h-1v-1z" /><path fill="#8D8D8D" d="m12 13h1v1h-1v-1zm1-1h1v1h-1v-1zm2 1h1v1h-1v-1zm1-1h1v1h-1v-1z" />',
		'<path fill="#000" d="m10 11h8v1h-8v-1zm2 1h2v2h-2v-2z" />',
		'<path fill="#000" d="m11 12h8v1h-8v-1zm0 1h3v1h-3v-1zm5 0h3v1h-3v-1z" />',
		'<path fill="#000" d="m10 12h8v1h-8v-1zm2 1h2v1h-2v-1zm3 0h2v1h-2v-1z" />',
		'<path fill="#000" d="m12 12h5v1h-5v-1zm-1-2h7v1h-7v-1zm-1 1h1v3h-1v-3zm1 3h7v1h-7v-1zm7-3h1v3h-1v-3z" /><path fill="#8D8D8D" d="m11 11h1v1h-1v-1zm6 0h1v1h-1v-1zm-6 2h1v1h-1v-1zm6 0h1v1h-1v-1z" /><path fill="#B4B4B4" d="m12 11h5v1h-5v-1zm0 2h5v1h-5v-1zm-1-1h1v1h-1v-1zm6 0h1v1h-1v-1z" /><path fill="#FF0000" d="m12 12h20v1h-20v-1z" />',
		''];
	string[14] private fifthNames = ['Beanie','Cowboy Hat','Fedora','Police Cap','Do-rag','Knitted Cap','Bandana','Frumpy Hair','Hood','Messy Hair','Cap Forward','Cap','Top Hat','None'];
	string[14] private fifthLayers = [
		 '<path fill="#3CC300" d="m11 9h6v1h-6v-1z" /><path fill="#0060C3" d="m10 7h1v2h-1v-2zm1-1h1v2h-1v-2z" /><path fill="#D60404" d="m17 7h1v2h-1v-2zm-1-1h1v2h-1v-2z" /><path fill="#E4EB17" d="m12 6h4v2h-4v-2zm-1 2h6v1h-6v-1z" /><path fill="#000" d="m13 5h1v1h-1v-1z" /><path fill="#0060C3" d="m12 4h3v1h-3v-1z" />',
		'<path fill="#794B11" d="m8 9h12v1h-12v-1zm-1-1h14v1h-14v-1zm-1-1h1v1h-1v-1zm15 0h1v1h-1v-1zm-12-3h10v3h-10v-3zm1-1h2v1h-2v-1zm6 0h2v1h-2v-1z" /><path fill="#502F05" d="m9 7h10v1h-10v-1z" />',
	   '<path fill="#3D2F1E" d="m7 9h14v1h-14v-1zm1-1h12v1h-12v-1zm3-2h6v1h-6v-1zm1-2h4v2h-4v-2zm1-1h2v1h-2v-1z" /><path fill="#000" d="m10 7h8v1h-8v-1z" />',
		'<path fill="#000" d="m13 10h6v1h-6v-1zm-3-1h3v1h-3v-1zm-1-3h1v2h-1v-2zm1-1h3v1h-3v-1zm3-1h2v1h-2v-1zm2 1h3v1h-3v-1zm3 1h1v2h-1v-2zm-1 2h1v1h-1v-1zm-2 0h1v1h-1v-1zm-2 0h1v1h-1v-1zm-2 0h1v1h-1v-1zm7 1h1v1h-1v-1z" /><path fill="#FFFFFF" d="m10 8h1v1h-1v-1zm2 0h1v1h-1v-1zm2 0h1v1h-1v-1zm2 0h1v1h-1v-1z" /><path fill="#26314A" d="m13 9h5v1h-5v-1zm-3-3h8v2h-8v-2zm3-1h2v1h-2v-1z" /><path fill="#FFD800" d="m13 6h2v1h-2v-1z" />',
	  '<path fill="#000" d="m10 8h1v3h-1v-3zm1-1h1v1h-1v-1zm6 1h1v3h-1v-3zm-1 0h1v1h-1v-1zm-4-1h4v1h-4v-1z" /><path fill="#4C4C4C" d="m11 8h5v3h-5v-3zm5 1h1v2h-1v-2z" /><path fill="#636363" d="m11 9h1v1h-1v-1zm1-1h1v1h-1v-1z" />',
		'<path fill="#000" d="m9 8h1v2h-1v-2zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1zm7 2h1v2h-1v-2zm-1-1h1v1h-1v-1zm-1-1h1v1h-1v-1zm-4-1h4v1h-4v-1z" /><path fill="#CA4E11" d="m10 8h8v2h-8v-2zm1-1h6v1h-6v-1zm1-1h4v1h-4v-1z" /><path fill="#933709" d="m10 8h8v1h-8v-1zm1 1h1v1h-1v-1zm2 0h1v1h-1v-1zm2 0h1v1h-1v-1zm2 0h1v1h-1v-1z" />',
		'<path fill="#1637A4" d="m11 5h6v1h-6v-1zm6 1h1v2h-1v-2zm-1 2h1v1h-1v-1zm-3 1h3v1h-3v-1zm-2-1h2v1h-2v-1zm0-2h1v1h-1v-1zm-1 1h1v1h-1v-1zm-3 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1-1h1v1h-1v-1z" /><path fill="#142C7C" d="m8 10h1v1h-1v-1zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1z" /><path fill="#1A43C8" d="m12 6h5v1h-5v-1zm-1 1h6v1h-6v-1zm2 1h3v1h-3v-1zm-7 0h1v1h-1v-1zm2 0h1v1h-1v-1zm-1 1h1v3h-1v-3z" />',
		'<path fill="#000" d="m14 9h1v2h-1v-2zm-5-1h1v6h-1v-6zm1 0h8v1h-8v-1zm0-1h7v1h-7v-1zm1-1h6v1h-6v-1zm1-1h4v1h-4v-1zm-2 4h8v1h-8v-1z" /><path fill="#696969" d="m11 7h1v1h-1v-1zm1-1h1v1h-1v-1z" />',
		'<path fill="#000" d="m7 13h3v4h-3v-4zm1 4h2v2h-2v-2zm1 2h1v2h-1v-2zm-2 0h1v3h-1v-3zm1 2h1v1h-1v-1zm-3-8h1v5h-1v-5zm1 4h1v3h-1v-3zm0-5h1v1h-1v-1zm1-1h1v1h-1v-1zm1-3h1v3h-1v-3zm1 4h1v1h-1v-1zm1-1h1v1h-1v-1zm1-2h1v2h-1v-2zm1 0h6v1h-6v-1zm-3-2h2v1h-2v-1zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1zm1-1h3v1h-3v-1zm3 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm-2 0h1v5h-1v-5zm1 1h1v3h-1v-3zm-2 4h1v1h-1v-1zm3-1h1v1h-1v-1zm1-3h1v3h-1v-3zm-2 4h1v1h-1v-1zm-1 1h1v1h-1v-1z" /><path fill="#808080" d="m8 19h1v2h-1v-2zm-1-2h1v2h-1v-2zm-1-4h1v4h-1v-4zm1-1h2v1h-2v-1zm1-1h2v1h-2v-1zm1-1h2v1h-2v-1zm0-2h2v2h-2v-2zm3-3h3v4h-3v-4zm-1 1h1v3h-1v-3zm4 0h1v3h-1v-3zm1 1h1v2h-1v-2zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v3h-1v-3zm-1 3h1v1h-1v-1zm-1 1h1v1h-1v-1z" /><path fill="#D3D3D3" d="m11 7h1v1h-1v-1zm1-1h1v1h-1v-1z" />',
		'<path fill="#000" d="m14 9h1v2h-1v-2zm-2 0h1v1h-1v-1zm-2-2h6v2h-6v-2zm-1 3h3v1h-3v-1zm0-2h1v1h-1v-1zm2-2h8v1h-8v-1zm1-1h5v1h-5v-1zm5 2h2v2h-2v-2zm2 2h1v1h-1v-1zm0-4h1v2h-1v-2z" />',
		'<path fill="#000" d="m10 9h10v1h-10v-1zm3-1h1v1h-1v-1zm0-1h6v1h-6v-1zm6 1h1v2h-1v-2zm-9-1h1v3h-1v-3zm1-1h1v1h-1v-1zm6 0h1v1h-1v-1zm-5-1h5v1h-5v-1z" /><path fill="#515151" d="m11 7h2v2h-2v-2zm1-1h5v1h-5v-1zm2 2h5v1h-5v-1z" /><path fill="#353535" d="m11 7h1v1h-1v-1zm1-1h1v1h-1v-1z" />',
		'<path fill="#8119B7" d="m10 7h7v3h-7v-3zm1-1h6v1h-6v-1zm1-1h4v1h-4v-1zm5 4h4v1h-4v-1zm0-1h3v1h-3v-1z" /><path fill="#B261DC" d="m14 6h1v1h-1v-1zm1 1h1v1h-1v-1z" />',
		'<path fill="#000" d="m7 9h14v1h-14v-1zm1-1h12v1h-12v-1zm1-6h10v5h-10v-5zm1-1h8v1h-8v-1z" /><path fill="#DC1D1D" d="m9 7h10v1h-10v-1z" />',
		''];
	string[5] private sixthNames = ['Earring','Vape','Cigarette','Pipe','None'];
	string[5] private sixthLayers = [
		'<path fill="#FFD926" d="m9 5h1v1h-1v-1z"/>',
		'<path fill="#000" d="m24 18h6v1h-6v-1zm0 2h6v1h-6v-1zm6-1h1v1h-1v-1z" /><path fill="#595959" d="m24 19h5v1h-5v-1z" /><path fill="#0040FF" d="m29 19h1v1h-1v-1z" />',
		'<path fill="#000000" d="m24 18h6v1h-6v-1zm6 1h1v1h-1v-1zm-6 1h6v1h-6v-1z" /><path fill="#FFFFFF" d="m24 19h5v1h-5v-1z" /><path fill="#E7A600" d="m29 19h1v1h-1v-1z" /><path fill="#D7D1D1" d="m30 13h1v4h-1v-4z" />',
		'<path fill="#000" d="m22 20h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h3v1h-3v-1zm3-1h1v1h-1v-1zm1-2h1v2h-1v-2zm-3 0h3v1h-3v-1zm-1 1h2v1h-2v-1zm-1-1h1v1h-1v-1zm-1-1h1v1h-1v-1z" /><path fill="#fff" fill-opacity=".4" d="m29 19h1v1h-1v-1zm0-2h1v1h-1v-1zm0-2h1v1h-1v-1zm-1-2h3v1h-3v-1zm1-1h1v1h-1v-1z" /><path fill="#855114" d="m25 22h1v1h-1v-1zm-1-1h1v1h-1v-1zm-1-1h1v1h-1v-1zm5 2h2v1h-2v-1zm-2 1h3v1h-3v-1z" />',
		''];

	struct LarvaObject {
		uint256 baseColor;
		uint256 layerThree;
		uint256 layerFour;
		uint256 layerFive;
		uint256 layerSix;
	}

	function randomLarvaLad(uint256 tokenId) internal view returns (LarvaObject memory) {
		
		LarvaObject memory larvaLad;

		larvaLad.baseColor = getBaseColor(tokenId);
		larvaLad.layerThree = getLayerThree(tokenId);
		larvaLad.layerFour = getLayerFour(tokenId);
		larvaLad.layerFive = getLayerFive(tokenId);
		larvaLad.layerSix = getLayerSix(tokenId);

		return larvaLad;
	}
	
	function getTraits(LarvaObject memory larvaLad) internal view returns (string memory) {
		
		string[20] memory parts;
		
		parts[0] = ', "attributes": [{"trait_type": "Type","value": "';
		if (larvaLad.layerThree == 3) {
			parts[1] = 'Zombie"}, {"trait_type": "Mouth","value": "Zombie"},'; 
		}
		if (larvaLad.layerThree == 4) {
			parts[2] = 'Alien"}, {"trait_type": "Mouth","value": "Alien"},'; 
		}
		if (larvaLad.layerThree == 5) {
			parts[3] = 'Ape"}, {"trait_type": "Mouth","value": "Ape"},'; 
		}
		if (larvaLad.layerThree < 3 || larvaLad.layerThree > 5) {
			parts[4] = 'Normal"}, {"trait_type": "Mouth","value": "';
			parts[5] = thirdNames[larvaLad.layerThree];
			parts[6] = '"},';
		}
		parts[7] = ' {"trait_type": "Eyewear","value": "';
		parts[8] = fourthNames[larvaLad.layerFour];
		parts[9] = '"}, {"trait_type": "Headwear","value": "';
		parts[10] = fifthNames[larvaLad.layerFive];
		parts[11] = '"}, {"trait_type": "Accessory","value": "';
		parts[12] = sixthNames[larvaLad.layerSix];
		parts[13] = '"}], ';
		
		string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7]));
					  output = string(abi.encodePacked(output, parts[8], parts[9], parts[10], parts[11], parts[12], parts[13]));
		return output;
	}

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

	function getBaseColor(uint256 tokenId) internal pure returns (uint256) {
		uint256 rand = random(string(abi.encodePacked("BASE COLOR", toString(tokenId))));

		uint256 rn1 = rand % 79;
		uint256 bc = 0;

		if (rn1 >= 10 && rn1 < 20) { bc = 1; }
		if (rn1 >= 20 && rn1 < 30) { bc = 2; }
		if (rn1 >= 30 && rn1 < 40) { bc = 3; }
		if (rn1 >= 40 && rn1 < 50) { bc = 4; }
		if (rn1 >= 50 && rn1 < 60) { bc = 5; }
		if (rn1 >= 60 && rn1 < 70) { bc = 6; }
		if (rn1 >= 70) { bc = 7; }

		return bc;
	}

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

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

		if (rn3 >= 46 && rn3 < 64) { l3 = 1; }
		if (rn3 >= 64 && rn3 < 81) { l3 = 2; }
		if (rn3 >= 81 && rn3 < 85) { l3 = 3; }
		if (rn3 == 85) { l3 = 4; }
		if (rn3 >= 86 && rn3 < 88) { l3 = 5; }
		if (rn3 >= 88) { l3 = 6; }
		
		return l3;
	}

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

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

		if (rn4 >= 41 && rn4 < 81) { l4 = 1; }
		if (rn4 >= 81 && rn4 < 121) { l4 = 2; }
		if (rn4 >= 121 && rn4 < 161) { l4 = 3; }
		if (rn4 >= 161 && rn4 < 201) { l4 = 4; }
		if (rn4 >= 201 && rn4 < 261) { l4 = 5; }
		if (rn4 >= 261 && rn4 < 281) { l4 = 6; }
		if (rn4 >= 281) { l4 = 7; }
		
		return l4;
	}

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

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

		if (rn5 >= 10 && rn5 < 20) { l5 = 1; }
		if (rn5 >= 20 && rn5 < 30) { l5 = 2; }
		if (rn5 >= 30 && rn5 < 40) { l5 = 3; }
		if (rn5 >= 40 && rn5 < 50) { l5 = 4; }
		if (rn5 >= 50 && rn5 < 60) { l5 = 5; }
		if (rn5 >= 60 && rn5 < 70) { l5 = 6; }
		if (rn5 >= 70 && rn5 < 80) { l5 = 7; }
		if (rn5 >= 80 && rn5 < 90) { l5 = 8; }
		if (rn5 >= 90 && rn5 < 100) { l5 = 9; }
		if (rn5 >= 100 && rn5 < 110) { l5 = 10; }
		if (rn5 >= 110 && rn5 < 120) { l5 = 11; }
		if (rn5 >= 120 && rn5 < 130) { l5 = 12; }
		if (rn5 >= 130) { l5 = 13; }
		
		return l5;
	}

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

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

		if (rn6 >= 10 && rn6 < 20) { l6 = 1; }
		if (rn6 >= 20 && rn6 < 30) { l6 = 2; }
		if (rn6 >= 30 && rn6 < 40) { l6 = 3; }
		if (rn6 >= 40) { l6 = 4; }
		
		return l6;
	}

	function getSVG(LarvaObject memory larvaLad) internal view returns (string memory) {
		string[9] memory parts;

		parts[0] = '<svg id="x" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 32 32"><path fill="#638596" d="M0 0h32v32H0z"/>';
		parts[1] = '<path fill="';
		parts[2] = baseColors[larvaLad.baseColor];
		parts[3] = '" d="m3 27h13v1h-13v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm2-1h10v1h-10v-1zm2-1h8v1h-8v-1zm0-1h4v1h-4v-1zm0-1h3v1h-3v-1zm0-3h2v3h-2v-3zm0-2h5v2h-5v-2zm3 2h2v3h-2v-3zm1 3h6v1h-6v-1zm1-2h9v2h-9v-2zm4-1h2v1h-2v-1zm0 4h4v1h-4v-1zm4-1h1v1h-1v-1zm1-1h1v1h-1v-1zm0-1h2v1h-2v-1zm-14-8h6v5h-6v-5zm5 5h1v1h-1v-1zm-6-11h1v4h-1v-4zm1 4h1v2h-1v-2zm5-3h1v5h-1v-5z"/><path fill="#000" d="m2 27h1v2h-1v-2zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1zm1-1h2v1h-2v-1zm2-1h2v1h-2v-1zm1-14h1v14h-1v-14zm-1-5h1v5h-1v-5zm1 0h1v1h-1v-1zm1 1h1v4h-1v-4zm1 4h1v2h-1v-2zm1 1h3v1h-3v-1zm2-6h1v6h-1v-6zm1 0h1v2h-1v-2zm1 1h1v12h-1v-12zm-14 25h14v1h-14v-1zm13-1h1v1h-1v-1zm1-2h1v2h-1v-2zm1 0h1v1h-1v-1zm1-5h1v5h-1v-5zm-4 0h4v1h-4v-1zm-1-1h1v1h-1v-1zm-1-3h1v3h-1v-3zm3-1h1v2h-1v-2zm1 1h3v1h-3v-1zm2-1h3v1h-3v-1zm3-1h3v3h-3v-3zm3 2h3v1h-3v-1zm2 1h1v2h-1v-2zm-1 1h1v2h-1v-2zm-1 1h1v2h-1v-2zm-1 1h1v2h-1v-2zm-4 1h4v1h-4v-1zm1-2h3v1h-3v-1zm-9-6h1v1h-1v-1zm3 0h1v1h-1v-1z" /><path fill="#000" fill-opacity=".2" d="m13 13h1v1h-1v-1zm3 0h1v1h-1v-1z"/><path fill="#000" fill-opacity=".4" d="m3 27h1v1h-1v-1zm2-2h1v3h-1v-3zm2-2h1v5h-1v-5zm2-1h1v6h-1v-6zm1 5h1v1h-1v-1zm1-3h8v1h-8v-1zm1 1h5v1h-5v-1zm0-13h2v1h-2v-1zm3 0h2v1h-2v-1z"/>';
		parts[4] = thirdLayers[larvaLad.layerThree];
		parts[5] = fourthLayers[larvaLad.layerFour];
		parts[6] = fifthLayers[larvaLad.layerFive];
		parts[7] = sixthLayers[larvaLad.layerSix];
		parts[8] = '<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], parts[7], parts[8]));

		return output;
	}

	function tokenURI(uint256 tokenId) override public view returns (string memory) {
		LarvaObject memory larvaLad = randomLarvaLad(tokenId);
		string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Larva Wolf #', toString(tokenId), '", "description": "Larva Wolves are a FREE TO MINT collection brought to you by the founders of Wolf Club 86. They are a derivative of Larva Lads. The artwork and metadata are fully on-chain and are randomly generated"', getTraits(larvaLad), '"image": "data:image/svg+xml;base64,', Base64.encode(bytes(getSVG(larvaLad))), '"}'))));
		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("Larva Wolf", "LARVAWOLF") 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"}]

6080604052611388600c5566b1a2bc2ec50000600d55600a600e556040518061010001604052806040518060400160405280600781526020017f234145384236310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234442423138310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234538414139360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234646433243320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234545434641300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234339434441460000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234435433645310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234541443944390000000000000000000000000000000000000000000000000081525081525060109060086200020e92919062001090565b506040518060e001604052806040518060400160405280600581526020017f536d696c6500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f476f6c64546f6f7468000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f48616e646c65626172730000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f5a6f6d626965000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f416c69656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f50756e6b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4e6f726d616c00000000000000000000000000000000000000000000000000008152508152506018906007620003c7929190620010ea565b506040518060e0016040528060405180606001604052806029815260200162007e2a6029913981526020016040518060600160405280602c815260200162008da8602c913981526020016040518060c001604052806088815260200162007f6e6088913981526020016040518061032001604052806102f38152602001620080986102f3913981526020016040518061030001604052806102d98152602001620078036102d991398152602001604051806102c001604052806102838152602001620084a96102839139815260200160405180602001604052806000815250815250601f906007620004bb929190620010ea565b506040518061010001604052806040518060400160405280600a81526020017f334420476c61737365730000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f565200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f44697a7a7920457965730000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f457965205061746368000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f436c61737369632053686164657300000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f526567756c61722053686164657300000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4379636c6f70000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4e6f6e65000000000000000000000000000000000000000000000000000000008152508152506026906008620006b092919062001090565b5060405180610100016040528060405180610100016040528060c481526020016200743460c49139815260200160405180610140016040528061011e81526020016200838b61011e913981526020016040518060e0016040528060b4815260200162008fde60b4913981526020016040518060600160405280603981526020016200899260399139815260200160405180608001604052806048815260200162008bbb6048913981526020016040518060800160405280604881526020016200714560489139815260200160405180610180016040528061014d8152602001620089cb61014d9139815260200160405180602001604052806000815250815250602e906008620007c292919062001090565b50604051806101c001604052806040518060400160405280600681526020017f4265616e6965000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f436f77626f79204861740000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4665646f7261000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f506f6c696365204361700000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f446f2d726167000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4b6e69747465642043617000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f42616e64616e610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4672756d7079204861697200000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f486f6f640000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4d6573737920486169720000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f43617020466f727761726400000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f436170000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f546f70204861740000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4e6f6e6500000000000000000000000000000000000000000000000000000000815250815250603690600e62000b1992919062001144565b50604051806101c0016040528060405180610160016040528061013481526020016200724d610134913981526020016040518060e0016040528060bd81526020016200872c60bd913981526020016040518060c001604052806094815260200162009092609491398152602001604051806101e001604052806101a5815260200162008c036101a59139815260200160405180610100016040528060dd8152602001620074f860dd91398152602001604051806101600160405280610137815260200162008dd461013791398152602001604051806101a0016040528061017c8152602001620075ff61017c913981526020016040518060e0016040528060c081526020016200718d60c09139815260200160405180610380016040528061034e815260200162007adc61034e913981526020016040518060e0016040528060b381526020016200738160b39139815260200160405180610140016040528061011b815260200162007e5361011b913981526020016040518060e0016040528060a3815260200162008b1860a3913981526020016040518060c00160405280608881526020016200777b60889139815260200160405180602001604052806000815250815250604490600e62000cf192919062001144565b506040518060a001604052806040518060400160405280600781526020017f45617272696e670000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f566170650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f436967617265747465000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f506970650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4e6f6e6500000000000000000000000000000000000000000000000000000000815250815250605290600562000e349291906200119e565b506040518060a001604052806040518060600160405280602a8152602001620075d5602a913981526020016040518060e0016040528060a2815260200162007ff660a29139815260200160405180610100016040528060d3815260200162008f0b60d391398152602001604051806101e001604052806101a98152602001620087e96101a99139815260200160405180602001604052806000815250815250605790600562000ee59291906200119e565b5034801562000ef357600080fd5b506040518060400160405280600a81526020017f4c6172766120576f6c66000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f4c41525641574f4c460000000000000000000000000000000000000000000000815250816000908051906020019062000f78929190620011f8565b50806001908051906020019062000f91929190620011f8565b5050506001600a8190555062000fbc62000fb062000fc260201b60201c565b62000fca60201b60201c565b6200137b565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8260088101928215620010d7579160200282015b82811115620010d6578251829080519060200190620010c5929190620011f8565b5091602001919060010190620010a4565b5b509050620010e6919062001289565b5090565b826007810192821562001131579160200282015b82811115620011305782518290805190602001906200111f929190620011f8565b5091602001919060010190620010fe565b5b50905062001140919062001289565b5090565b82600e81019282156200118b579160200282015b828111156200118a57825182908051906020019062001179929190620011f8565b509160200191906001019062001158565b5b5090506200119a919062001289565b5090565b8260058101928215620011e5579160200282015b82811115620011e4578251829080519060200190620011d3929190620011f8565b5091602001919060010190620011b2565b5b509050620011f4919062001289565b5090565b828054620012069062001316565b90600052602060002090601f0160209004810192826200122a576000855562001276565b82601f106200124557805160ff191683800117855562001276565b8280016001018555821562001276579182015b828111156200127557825182559160200191906001019062001258565b5b509050620012859190620012b1565b5090565b5b80821115620012ad5760008181620012a39190620012d0565b506001016200128a565b5090565b5b80821115620012cc576000816000905550600101620012b2565b5090565b508054620012de9062001316565b6000825580601f10620012f2575062001313565b601f016020900490600052602060002090810190620013129190620012b1565b5b50565b600060028204905060018216806200132f57607f821691505b602082108114156200134657620013456200134c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615dba806200138b6000396000f3fe6080604052600436106101b75760003560e01c80637501f741116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146105cf578063d5abeb011461060c578063e985e9c514610637578063f2fde38b14610674576101b7565b8063a22cb46514610561578063b88d4fde1461058a578063c49b3d54146105b3576101b7565b806391b7f5ed116100c657806391b7f5ed146104c657806395d89b41146104ef578063a035b1fe1461051a578063a108f52914610545576101b7565b80637501f74114610466578063853828b6146104915780638da5cb5b1461049b576101b7565b80634230baee11610159578063547520fe11610133578063547520fe146103ac5780636352211e146103d557806370a0823114610412578063715018a61461044f576101b7565b80634230baee1461031b57806342842e0e146103465780634f6ccce71461036f576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b55780632f745c59146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190613d5e565b61069d565b6040516101f09190614612565b60405180910390f35b34801561020557600080fd5b5061020e610717565b60405161021b919061462d565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190613db8565b6107a9565b60405161025891906145ab565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190613d1e565b61082e565b005b34801561029657600080fd5b5061029f610946565b6040516102ac919061490f565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190613c08565b610953565b005b3480156102ea57600080fd5b5061030560048036038101906103009190613d1e565b6109b3565b604051610312919061490f565b60405180910390f35b34801561032757600080fd5b50610330610a58565b60405161033d919061490f565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613c08565b610a5e565b005b34801561037b57600080fd5b5061039660048036038101906103919190613db8565b610a7e565b6040516103a3919061490f565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613db8565b610aef565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613db8565b610b75565b60405161040991906145ab565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190613b9b565b610c27565b604051610446919061490f565b60405180910390f35b34801561045b57600080fd5b50610464610cdf565b005b34801561047257600080fd5b5061047b610d67565b604051610488919061490f565b60405180910390f35b610499610d6d565b005b3480156104a757600080fd5b506104b0610e30565b6040516104bd91906145ab565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190613db8565b610e5a565b005b3480156104fb57600080fd5b50610504610ee0565b604051610511919061462d565b60405180910390f35b34801561052657600080fd5b5061052f610f72565b60405161053c919061490f565b60405180910390f35b61055f600480360381019061055a9190613d1e565b610f78565b005b34801561056d57600080fd5b5061058860048036038101906105839190613cde565b610f86565b005b34801561059657600080fd5b506105b160048036038101906105ac9190613c5b565b611107565b005b6105cd60048036038101906105c89190613db8565b611169565b005b3480156105db57600080fd5b506105f660048036038101906105f19190613db8565b61117d565b604051610603919061462d565b60405180910390f35b34801561061857600080fd5b50610621611208565b60405161062e919061490f565b60405180910390f35b34801561064357600080fd5b5061065e60048036038101906106599190613bc8565b61120e565b60405161066b9190614612565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190613b9b565b6112a2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610710575061070f8261139a565b5b9050919050565b60606000805461072690614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461075290614b8e565b801561079f5780601f106107745761010080835404028352916020019161079f565b820191906000526020600020905b81548152906001019060200180831161078257829003601f168201915b5050505050905090565b60006107b48261147c565b6107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea9061480f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083982610b75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a19061488f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108c96114e8565b73ffffffffffffffffffffffffffffffffffffffff1614806108f857506108f7816108f26114e8565b61120e565b5b610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e9061472f565b60405180910390fd5b61094183836114f0565b505050565b6000600880549050905090565b61096461095e6114e8565b826115a9565b6109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a906148af565b60405180910390fd5b6109ae838383611687565b505050565b60006109be83610c27565b82106109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f69061464f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f5481565b610a7983838360405180602001604052806000815250611107565b505050565b6000610a88610946565b8210610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac0906148cf565b60405180910390fd5b60088281548110610add57610adc614d27565b5b90600052602060002001549050919050565b610af76114e8565b73ffffffffffffffffffffffffffffffffffffffff16610b15610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b629061482f565b60405180910390fd5b80600e8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c159061476f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f9061474f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ce76114e8565b73ffffffffffffffffffffffffffffffffffffffff16610d05610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d529061482f565b60405180910390fd5b610d6560006118e3565b565b600e5481565b610d756114e8565b73ffffffffffffffffffffffffffffffffffffffff16610d93610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de09061482f565b60405180910390fd5b610df16114e8565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e2e57600080fd5b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e626114e8565b73ffffffffffffffffffffffffffffffffffffffff16610e80610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd9061482f565b60405180910390fd5b80600d8190555050565b606060018054610eef90614b8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1b90614b8e565b8015610f685780601f10610f3d57610100808354040283529160200191610f68565b820191906000526020600020905b815481529060010190602001808311610f4b57829003601f168201915b5050505050905090565b600d5481565b610f8282826119a9565b5050565b610f8e6114e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff3906146ef565b60405180910390fd5b80600560006110096114e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110b66114e8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110fb9190614612565b60405180910390a35050565b6111186111126114e8565b836115a9565b611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e906148af565b60405180910390fd5b61116384848484611b7d565b50505050565b61117a6111746114e8565b826119a9565b50565b6060600061118a83611bd9565b905060006111da61119a85611c4c565b6111a384611dad565b6111b46111af866124fc565b612ac6565b6040516020016111c69392919061450a565b604051602081830303815290604052612ac6565b9050806040516020016111ed9190614567565b60405160208183030381529060405290508092505050919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112aa6114e8565b73ffffffffffffffffffffffffffffffffffffffff166112c8610e30565b73ffffffffffffffffffffffffffffffffffffffff161461131e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113159061482f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561138e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113859061468f565b60405180910390fd5b611397816118e3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061146557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611475575061147482612c5e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661156383610b75565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115b48261147c565b6115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea9061470f565b60405180910390fd5b60006115fe83610b75565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061166d57508373ffffffffffffffffffffffffffffffffffffffff16611655846107a9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061167e575061167d818561120e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116a782610b75565b73ffffffffffffffffffffffffffffffffffffffff16146116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f49061484f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561176d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611764906146cf565b60405180910390fd5b611778838383612cc8565b6117836000826114f0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117d39190614aa4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461182a91906149c3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600c546119b4610946565b106119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb906148ef565b60405180910390fd5b600c5481611a00610946565b611a0a91906149c3565b1115611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a429061478f565b60405180910390fd5b600e54811115611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a87906147af565b60405180910390fd5b60008111611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca9061486f565b60405180910390fd5b3481600d54611ae29190614a4a565b14611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b19906147ef565b60405180910390fd5b60005b81811015611b785760006001600f54611b3e91906149c3565b9050611b4a8482612ddc565b6001600f6000828254611b5d91906149c3565b92505081905550508080611b7090614bf1565b915050611b25565b505050565b611b88848484611687565b611b9484848484612dfa565b611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca9061466f565b60405180910390fd5b50505050565b611be1613a43565b611be9613a43565b611bf283612f91565b816000018181525050611c0483613093565b816020018181525050611c168361316d565b816040018181525050611c2883613274565b816060018181525050611c3a83613418565b81608001818152505080915050919050565b60606000821415611c94576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611da8565b600082905060005b60008214611cc6578080611caf90614bf1565b915050600a82611cbf9190614a19565b9150611c9c565b60008167ffffffffffffffff811115611ce257611ce1614d56565b5b6040519080825280601f01601f191660200182016040528015611d145781602001600182028036833780820191505090505b5090505b60008514611da157600182611d2d9190614aa4565b9150600a85611d3c9190614c3a565b6030611d4891906149c3565b60f81b818381518110611d5e57611d5d614d27565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611d9a9190614a19565b9450611d18565b8093505050505b919050565b6060611db7613a72565b60405180606001604052806031815260200161573b6031913981600060148110611de457611de3614d27565b5b6020020181905250600383602001511415611e2f576040518060600160405280603481526020016156926034913981600160148110611e2657611e25614d27565b5b60200201819052505b600483602001511415611e72576040518060600160405280603281526020016157fb6032913981600260148110611e6957611e68614d27565b5b60200201819052505b600583602001511415611eb5576040518060600160405280602e8152602001615880602e913981600360148110611eac57611eab614d27565b5b60200201819052505b600383602001511080611ecc575060058360200151115b15612017576040518060600160405280602b8152602001615855602b913981600460148110611efe57611efd614d27565b5b60200201819052506018836020015160078110611f1e57611f1d614d27565b5b018054611f2a90614b8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5690614b8e565b8015611fa35780601f10611f7857610100808354040283529160200191611fa3565b820191906000526020600020905b815481529060010190602001808311611f8657829003601f168201915b505050505081600560148110611fbc57611fbb614d27565b5b60200201819052506040518060400160405280600381526020017f227d2c00000000000000000000000000000000000000000000000000000000008152508160066014811061200e5761200d614d27565b5b60200201819052505b60405180606001604052806024815260200161566e602491398160076014811061204457612043614d27565b5b6020020181905250602683604001516008811061206457612063614d27565b5b01805461207090614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461209c90614b8e565b80156120e95780601f106120be576101008083540402835291602001916120e9565b820191906000526020600020905b8154815290600101906020018083116120cc57829003601f168201915b50505050508160086014811061210257612101614d27565b5b602002018190525060405180606001604052806028815260200161582d602891398160096014811061213757612136614d27565b5b602002018190525060368360600151600e811061215757612156614d27565b5b01805461216390614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461218f90614b8e565b80156121dc5780601f106121b1576101008083540402835291602001916121dc565b820191906000526020600020905b8154815290600101906020018083116121bf57829003601f168201915b505050505081600a601481106121f5576121f4614d27565b5b60200201819052506040518060600160405280602981526020016156456029913981600b6014811061222a57612229614d27565b5b6020020181905250605283608001516005811061224a57612249614d27565b5b01805461225690614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461228290614b8e565b80156122cf5780601f106122a4576101008083540402835291602001916122cf565b820191906000526020600020905b8154815290600101906020018083116122b257829003601f168201915b505050505081600c601481106122e8576122e7614d27565b5b60200201819052506040518060400160405280600581526020017f227d5d2c2000000000000000000000000000000000000000000000000000000081525081600d6014811061233a57612339614d27565b5b602002018190525060008160006014811061235857612357614d27565b5b60200201518260016014811061237157612370614d27565b5b60200201518360026014811061238a57612389614d27565b5b6020020151846003601481106123a3576123a2614d27565b5b6020020151856004601481106123bc576123bb614d27565b5b6020020151866005601481106123d5576123d4614d27565b5b6020020151876006601481106123ee576123ed614d27565b5b60200201518860076014811061240757612406614d27565b5b6020020151604051602001612423989796959493929190614391565b6040516020818303038152906040529050808260086014811061244957612448614d27565b5b60200201518360096014811061246257612461614d27565b5b602002015184600a6014811061247b5761247a614d27565b5b602002015185600b6014811061249457612493614d27565b5b602002015186600c601481106124ad576124ac614d27565b5b602002015187600d601481106124c6576124c5614d27565b5b60200201516040516020016124e1979695949392919061432c565b60405160208183030381529060405290508092505050919050565b6060612506613a9a565b6040518060c00160405280608f815260200161576c608f91398160006009811061253357612532614d27565b5b60200201819052506040518060400160405280600c81526020017f3c706174682066696c6c3d2200000000000000000000000000000000000000008152508160016009811061258557612584614d27565b5b602002018190525060108360000151600881106125a5576125a4614d27565b5b0180546125b190614b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546125dd90614b8e565b801561262a5780601f106125ff5761010080835404028352916020019161262a565b820191906000526020600020905b81548152906001019060200180831161260d57829003601f168201915b50505050508160026009811061264357612642614d27565b5b60200201819052506040518061050001604052806104d781526020016158ae6104d791398160036009811061267b5761267a614d27565b5b6020020181905250601f83602001516007811061269b5761269a614d27565b5b0180546126a790614b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546126d390614b8e565b80156127205780601f106126f557610100808354040283529160200191612720565b820191906000526020600020905b81548152906001019060200180831161270357829003601f168201915b50505050508160046009811061273957612738614d27565b5b6020020181905250602e83604001516008811061275957612758614d27565b5b01805461276590614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461279190614b8e565b80156127de5780601f106127b3576101008083540402835291602001916127de565b820191906000526020600020905b8154815290600101906020018083116127c157829003601f168201915b5050505050816005600981106127f7576127f6614d27565b5b602002018190525060448360600151600e811061281757612816614d27565b5b01805461282390614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461284f90614b8e565b801561289c5780601f106128715761010080835404028352916020019161289c565b820191906000526020600020905b81548152906001019060200180831161287f57829003601f168201915b5050505050816006600981106128b5576128b4614d27565b5b602002018190525060578360800151600581106128d5576128d4614d27565b5b0180546128e190614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461290d90614b8e565b801561295a5780601f1061292f5761010080835404028352916020019161295a565b820191906000526020600020905b81548152906001019060200180831161293d57829003601f168201915b50505050508160076009811061297357612972614d27565b5b60200201819052506040518060600160405280603581526020016156c660359139816008600981106129a8576129a7614d27565b5b60200201819052506000816000600981106129c6576129c5614d27565b5b6020020151826001600981106129df576129de614d27565b5b6020020151836002600981106129f8576129f7614d27565b5b602002015184600360098110612a1157612a10614d27565b5b602002015185600460098110612a2a57612a29614d27565b5b602002015186600560098110612a4357612a42614d27565b5b602002015187600660098110612a5c57612a5b614d27565b5b602002015188600760098110612a7557612a74614d27565b5b602002015189600860098110612a8e57612a8d614d27565b5b6020020151604051602001612aab99989796959493929190614403565b60405160208183030381529060405290508092505050919050565b60606000825190506000811415612aef5760405180602001604052806000815250915050612c59565b60006003600283612b0091906149c3565b612b0a9190614a19565b6004612b169190614a4a565b90506000602082612b2791906149c3565b67ffffffffffffffff811115612b4057612b3f614d56565b5b6040519080825280601f01601f191660200182016040528015612b725781602001600182028036833780820191505090505b50905060006040518060600160405280604081526020016156fb604091399050600181016020830160005b86811015612c165760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612b9d565b506003860660018114612c305760028114612c4057612c4b565b613d3d60f01b6002830352612c4b565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cd38383836134c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d1657612d11816134ce565b612d55565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d5457612d538382613517565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9857612d9381613684565b612dd7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612dd657612dd58282613755565b5b5b505050565b612df68282604051806020016040528060008152506137d4565b5050565b6000612e1b8473ffffffffffffffffffffffffffffffffffffffff1661382f565b15612f84578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e446114e8565b8786866040518563ffffffff1660e01b8152600401612e6694939291906145c6565b602060405180830381600087803b158015612e8057600080fd5b505af1925050508015612eb157506040513d601f19601f82011682018060405250810190612eae9190613d8b565b60015b612f34573d8060008114612ee1576040519150601f19603f3d011682016040523d82523d6000602084013e612ee6565b606091505b50600081511415612f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f239061466f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f89565b600190505b949350505050565b600080612fc4612fa084611c4c565b604051602001612fb091906144e8565b604051602081830303815290604052613842565b90506000604f82612fd59190614c3a565b90506000600a8210158015612fea5750601482105b15612ff457600190505b601482101580156130055750601e82105b1561300f57600290505b601e82101580156130205750602882105b1561302a57600390505b6028821015801561303b5750603282105b1561304557600490505b603282101580156130565750603c82105b1561306057600590505b603c82101580156130715750604682105b1561307b57600690505b6046821061308857600790505b809350505050919050565b6000806130c66130a284611c4c565b6040516020016130b29190614482565b604051602081830303815290604052613842565b9050600060aa826130d79190614c3a565b90506000602e82101580156130ec5750604082105b156130f657600190505b604082101580156131075750605182105b1561311157600290505b605182101580156131225750605582105b1561312c57600390505b605582141561313a57600490505b6056821015801561314b5750605882105b1561315557600590505b6058821061316257600690505b809350505050919050565b6000806131a061317c84611c4c565b60405160200161318c9190614589565b604051602081830303815290604052613842565b905060006101f4826131b29190614c3a565b90506000602982101580156131c75750605182105b156131d157600190505b605182101580156131e25750607982105b156131ec57600290505b607982101580156131fd575060a182105b1561320757600390505b60a18210158015613218575060c982105b1561322257600490505b60c98210158015613234575061010582105b1561323e57600590505b6101058210158015613251575061011982105b1561325b57600690505b610119821061326957600790505b809350505050919050565b6000806132a761328384611c4c565b60405160200161329391906144a4565b604051602081830303815290604052613842565b9050600060f0826132b89190614c3a565b90506000600a82101580156132cd5750601482105b156132d757600190505b601482101580156132e85750601e82105b156132f257600290505b601e82101580156133035750602882105b1561330d57600390505b6028821015801561331e5750603282105b1561332857600490505b603282101580156133395750603c82105b1561334357600590505b603c82101580156133545750604682105b1561335e57600690505b6046821015801561336f5750605082105b1561337957600790505b6050821015801561338a5750605a82105b1561339457600890505b605a82101580156133a55750606482105b156133af57600990505b606482101580156133c05750606e82105b156133ca57600a90505b606e82101580156133db5750607882105b156133e557600b90505b607882101580156133f65750608282105b1561340057600c90505b6082821061340d57600d90505b809350505050919050565b60008061344b61342784611c4c565b60405160200161343791906144c6565b604051602081830303815290604052613842565b9050600060788261345c9190614c3a565b90506000600a82101580156134715750601482105b1561347b57600190505b6014821015801561348c5750601e82105b1561349657600290505b601e82101580156134a75750602882105b156134b157600390505b602882106134be57600490505b809350505050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161352484610c27565b61352e9190614aa4565b9050600060076000848152602001908152602001600020549050818114613613576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136989190614aa4565b90506000600960008481526020019081526020016000205490506000600883815481106136c8576136c7614d27565b5b9060005260206000200154905080600883815481106136ea576136e9614d27565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061373957613738614cf8565b5b6001900381819060005260206000200160009055905550505050565b600061376083610c27565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6137de8383613875565b6137eb6000848484612dfa565b61382a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138219061466f565b60405180910390fd5b505050565b600080823b905060008111915050919050565b6000816040516020016138559190614315565b6040516020818303038152906040528051906020012060001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138dc906147cf565b60405180910390fd5b6138ee8161147c565b1561392e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613925906146af565b60405180910390fd5b61393a60008383612cc8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461398a91906149c3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518061028001604052806014905b6060815260200190600190039081613a825790505090565b6040518061012001604052806009905b6060815260200190600190039081613aaa5790505090565b6000613ad5613ad08461494f565b61492a565b905082815260208101848484011115613af157613af0614d8a565b5b613afc848285614b4c565b509392505050565b600081359050613b13816155e8565b92915050565b600081359050613b28816155ff565b92915050565b600081359050613b3d81615616565b92915050565b600081519050613b5281615616565b92915050565b600082601f830112613b6d57613b6c614d85565b5b8135613b7d848260208601613ac2565b91505092915050565b600081359050613b958161562d565b92915050565b600060208284031215613bb157613bb0614d94565b5b6000613bbf84828501613b04565b91505092915050565b60008060408385031215613bdf57613bde614d94565b5b6000613bed85828601613b04565b9250506020613bfe85828601613b04565b9150509250929050565b600080600060608486031215613c2157613c20614d94565b5b6000613c2f86828701613b04565b9350506020613c4086828701613b04565b9250506040613c5186828701613b86565b9150509250925092565b60008060008060808587031215613c7557613c74614d94565b5b6000613c8387828801613b04565b9450506020613c9487828801613b04565b9350506040613ca587828801613b86565b925050606085013567ffffffffffffffff811115613cc657613cc5614d8f565b5b613cd287828801613b58565b91505092959194509250565b60008060408385031215613cf557613cf4614d94565b5b6000613d0385828601613b04565b9250506020613d1485828601613b19565b9150509250929050565b60008060408385031215613d3557613d34614d94565b5b6000613d4385828601613b04565b9250506020613d5485828601613b86565b9150509250929050565b600060208284031215613d7457613d73614d94565b5b6000613d8284828501613b2e565b91505092915050565b600060208284031215613da157613da0614d94565b5b6000613daf84828501613b43565b91505092915050565b600060208284031215613dce57613dcd614d94565b5b6000613ddc84828501613b86565b91505092915050565b613dee81614ad8565b82525050565b613dfd81614aea565b82525050565b6000613e0e82614980565b613e188185614996565b9350613e28818560208601614b5b565b613e3181614d99565b840191505092915050565b6000613e478261498b565b613e5181856149a7565b9350613e61818560208601614b5b565b613e6a81614d99565b840191505092915050565b6000613e808261498b565b613e8a81856149b8565b9350613e9a818560208601614b5b565b80840191505092915050565b6000613eb3602b836149a7565b9150613ebe82614daa565b604082019050919050565b6000613ed66032836149a7565b9150613ee182614df9565b604082019050919050565b6000613ef96026836149a7565b9150613f0482614e48565b604082019050919050565b6000613f1c600b836149b8565b9150613f2782614e97565b600b82019050919050565b6000613f3f600a836149b8565b9150613f4a82614ec0565b600a82019050919050565b6000613f62601c836149a7565b9150613f6d82614ee9565b602082019050919050565b6000613f8560da836149b8565b9150613f9082614f12565b60da82019050919050565b6000613fa86009836149b8565b9150613fb38261501f565b600982019050919050565b6000613fcb6024836149a7565b9150613fd682615048565b604082019050919050565b6000613fee6019836149a7565b9150613ff982615097565b602082019050919050565b6000614011600a836149b8565b915061401c826150c0565b600a82019050919050565b6000614034602c836149a7565b915061403f826150e9565b604082019050919050565b60006140576038836149a7565b915061406282615138565b604082019050919050565b600061407a602a836149a7565b915061408582615187565b604082019050919050565b600061409d6029836149a7565b91506140a8826151d6565b604082019050919050565b60006140c0601f836149a7565b91506140cb82615225565b602082019050919050565b60006140e36024836149b8565b91506140ee8261524e565b602482019050919050565b60006141066031836149a7565b91506141118261529d565b604082019050919050565b60006141296002836149b8565b9150614134826152ec565b600282019050919050565b600061414c6020836149a7565b915061415782615315565b602082019050919050565b600061416f6017836149a7565b915061417a8261533e565b602082019050919050565b60006141926016836149b8565b915061419d82615367565b601682019050919050565b60006141b5602c836149a7565b91506141c082615390565b604082019050919050565b60006141d86020836149a7565b91506141e3826153df565b602082019050919050565b60006141fb6029836149a7565b915061420682615408565b604082019050919050565b600061421e601c836149a7565b915061422982615457565b602082019050919050565b60006142416021836149a7565b915061424c82615480565b604082019050919050565b6000614264601d836149b8565b915061426f826154cf565b601d82019050919050565b60006142876031836149a7565b9150614292826154f8565b604082019050919050565b60006142aa602c836149a7565b91506142b582615547565b604082019050919050565b60006142cd600a836149b8565b91506142d882615596565b600a82019050919050565b60006142f0601b836149a7565b91506142fb826155bf565b602082019050919050565b61430f81614b42565b82525050565b60006143218284613e75565b915081905092915050565b6000614338828a613e75565b91506143448289613e75565b91506143508288613e75565b915061435c8287613e75565b91506143688286613e75565b91506143748285613e75565b91506143808284613e75565b915081905098975050505050505050565b600061439d828b613e75565b91506143a9828a613e75565b91506143b58289613e75565b91506143c18288613e75565b91506143cd8287613e75565b91506143d98286613e75565b91506143e58285613e75565b91506143f18284613e75565b91508190509998505050505050505050565b600061440f828c613e75565b915061441b828b613e75565b9150614427828a613e75565b91506144338289613e75565b915061443f8288613e75565b915061444b8287613e75565b91506144578286613e75565b91506144638285613e75565b915061446f8284613e75565b91508190509a9950505050505050505050565b600061448d82613f0f565b91506144998284613e75565b915081905092915050565b60006144af82613f32565b91506144bb8284613e75565b915081905092915050565b60006144d182613f9b565b91506144dd8284613e75565b915081905092915050565b60006144f382614004565b91506144ff8284613e75565b915081905092915050565b600061451582614185565b91506145218286613e75565b915061452c82613f78565b91506145388285613e75565b9150614543826140d6565b915061454f8284613e75565b915061455a8261411c565b9150819050949350505050565b600061457282614257565b915061457e8284613e75565b915081905092915050565b6000614594826142c0565b91506145a08284613e75565b915081905092915050565b60006020820190506145c06000830184613de5565b92915050565b60006080820190506145db6000830187613de5565b6145e86020830186613de5565b6145f56040830185614306565b81810360608301526146078184613e03565b905095945050505050565b60006020820190506146276000830184613df4565b92915050565b600060208201905081810360008301526146478184613e3c565b905092915050565b6000602082019050818103600083015261466881613ea6565b9050919050565b6000602082019050818103600083015261468881613ec9565b9050919050565b600060208201905081810360008301526146a881613eec565b9050919050565b600060208201905081810360008301526146c881613f55565b9050919050565b600060208201905081810360008301526146e881613fbe565b9050919050565b6000602082019050818103600083015261470881613fe1565b9050919050565b6000602082019050818103600083015261472881614027565b9050919050565b600060208201905081810360008301526147488161404a565b9050919050565b600060208201905081810360008301526147688161406d565b9050919050565b6000602082019050818103600083015261478881614090565b9050919050565b600060208201905081810360008301526147a8816140b3565b9050919050565b600060208201905081810360008301526147c8816140f9565b9050919050565b600060208201905081810360008301526147e88161413f565b9050919050565b6000602082019050818103600083015261480881614162565b9050919050565b60006020820190508181036000830152614828816141a8565b9050919050565b60006020820190508181036000830152614848816141cb565b9050919050565b60006020820190508181036000830152614868816141ee565b9050919050565b6000602082019050818103600083015261488881614211565b9050919050565b600060208201905081810360008301526148a881614234565b9050919050565b600060208201905081810360008301526148c88161427a565b9050919050565b600060208201905081810360008301526148e88161429d565b9050919050565b60006020820190508181036000830152614908816142e3565b9050919050565b60006020820190506149246000830184614306565b92915050565b6000614934614945565b90506149408282614bc0565b919050565b6000604051905090565b600067ffffffffffffffff82111561496a57614969614d56565b5b61497382614d99565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006149ce82614b42565b91506149d983614b42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a0e57614a0d614c6b565b5b828201905092915050565b6000614a2482614b42565b9150614a2f83614b42565b925082614a3f57614a3e614c9a565b5b828204905092915050565b6000614a5582614b42565b9150614a6083614b42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a9957614a98614c6b565b5b828202905092915050565b6000614aaf82614b42565b9150614aba83614b42565b925082821015614acd57614acc614c6b565b5b828203905092915050565b6000614ae382614b22565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b79578082015181840152602081019050614b5e565b83811115614b88576000848401525b50505050565b60006002820490506001821680614ba657607f821691505b60208210811415614bba57614bb9614cc9565b5b50919050565b614bc982614d99565b810181811067ffffffffffffffff82111715614be857614be7614d56565b5b80604052505050565b6000614bfc82614b42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2f57614c2e614c6b565b5b600182019050919050565b6000614c4582614b42565b9150614c5083614b42565b925082614c6057614c5f614c9a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4c41594552205448524545000000000000000000000000000000000000000000600082015250565b7f4c41594552204649564500000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f222c20226465736372697074696f6e223a20224c6172766120576f6c7665732060008201527f6172652061204652454520544f204d494e5420636f6c6c656374696f6e20627260208201527f6f7567687420746f20796f752062792074686520666f756e64657273206f662060408201527f576f6c6620436c75622038362e2054686579206172652061206465726976617460608201527f697665206f66204c61727661204c6164732e2054686520617274776f726b206160808201527f6e64206d65746164617461206172652066756c6c79206f6e2d636861696e206160a08201527f6e64206172652072616e646f6d6c792067656e6572617465642200000000000060c082015250565b7f4c41594552205349580000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4241534520434f4c4f5200000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b7f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360008201527f6536342c00000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20696e2061207472616e73616374696f6e000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45544820616d6f756e7420697320696e636f7272656374000000000000000000600082015250565b7f7b226e616d65223a20224c6172766120576f6c66202300000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e6520746f6b656e00000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4c4159455220464f555200000000000000000000000000000000000000000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6155f181614ad8565b81146155fc57600080fd5b50565b61560881614aea565b811461561357600080fd5b50565b61561f81614af6565b811461562a57600080fd5b50565b61563681614b42565b811461564157600080fd5b5056fe227d2c207b2274726169745f74797065223a20224163636573736f7279222c2276616c7565223a2022207b2274726169745f74797065223a202245796577656172222c2276616c7565223a20225a6f6d626965227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a20225a6f6d626965227d2c3c7374796c653e23787b73686170652d72656e646572696e673a20637269737065646765733b7d3c2f7374796c653e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f2c202261747472696275746573223a205b7b2274726169745f74797065223a202254797065222c2276616c7565223a20223c7376672069643d22782220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d22302030203332203332223e3c706174682066696c6c3d22233633383539362220643d224d30203068333276333248307a222f3e416c69656e227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a2022416c69656e227d2c227d2c207b2274726169745f74797065223a20224865616477656172222c2276616c7565223a20224e6f726d616c227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a2022417065227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a2022417065227d2c2220643d226d332032376831337631682d3133762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d322d316831307631682d3130762d317a6d322d3168387631682d38762d317a6d302d3168347631682d34762d317a6d302d3168337631682d33762d317a6d302d3368327633682d32762d337a6d302d3268357632682d35762d327a6d33203268327633682d32762d337a6d31203368367631682d36762d317a6d312d3268397632682d39762d327a6d342d3168327631682d32762d317a6d30203468347631682d34762d317a6d342d3168317631682d31762d317a6d312d3168317631682d31762d317a6d302d3168327631682d32762d317a6d2d31342d3868367635682d36762d357a6d35203568317631682d31762d317a6d2d362d313168317634682d31762d347a6d31203468317632682d31762d327a6d352d3368317635682d31762d357a222f3e3c706174682066696c6c3d22233030302220643d226d3220323768317632682d31762d327a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168327631682d32762d317a6d322d3168327631682d32762d317a6d312d31346831763134682d31762d31347a6d2d312d3568317635682d31762d357a6d31203068317631682d31762d317a6d31203168317634682d31762d347a6d31203468317632682d31762d327a6d31203168337631682d33762d317a6d322d3668317636682d31762d367a6d31203068317632682d31762d327a6d3120316831763132682d31762d31327a6d2d31342032356831347631682d3134762d317a6d31332d3168317631682d31762d317a6d312d3268317632682d31762d327a6d31203068317631682d31762d317a6d312d3568317635682d31762d357a6d2d34203068347631682d34762d317a6d2d312d3168317631682d31762d317a6d2d312d3368317633682d31762d337a6d332d3168317632682d31762d327a6d31203168337631682d33762d317a6d322d3168337631682d33762d317a6d332d3168337633682d33762d337a6d33203268337631682d33762d317a6d32203168317632682d31762d327a6d2d31203168317632682d31762d327a6d2d31203168317632682d31762d327a6d2d31203168317632682d31762d327a6d2d34203168347631682d34762d317a6d312d3268337631682d33762d317a6d2d392d3668317631682d31762d317a6d33203068317631682d31762d317a22202f3e3c706174682066696c6c3d2223303030222066696c6c2d6f7061636974793d222e322220643d226d313320313368317631682d31762d317a6d33203068317631682d31762d317a222f3e3c706174682066696c6c3d2223303030222066696c6c2d6f7061636974793d222e342220643d226d3320323768317631682d31762d317a6d322d3268317633682d31762d337a6d322d3268317635682d31762d357a6d322d3168317636682d31762d367a6d31203568317631682d31762d317a6d312d3368387631682d38762d317a6d31203168357631682d35762d317a6d302d313368327631682d32762d317a6d33203068327631682d32762d317a222f3ea264697066735822122060ea47e9c05d32ad382f38078778bbc62187432af86d400309c8aeab12dfa21964736f6c634300080700333c706174682066696c6c3d22233030302220643d226d313020313268387631682d38762d317a6d32203168327631682d32762d317a6d33203068327631682d32762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d3134203968317632682d31762d327a6d2d352d3168317636682d31762d367a6d31203068387631682d38762d317a6d302d3168377631682d37762d317a6d312d3168367631682d36762d317a6d312d3168347631682d34762d317a6d2d32203468387631682d38762d317a22202f3e3c706174682066696c6c3d22233639363936392220643d226d3131203768317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233343433330302220643d226d3131203968367631682d36762d317a22202f3e3c706174682066696c6c3d22233030363043332220643d226d3130203768317632682d31762d327a6d312d3168317632682d31762d327a22202f3e3c706174682066696c6c3d22234436303430342220643d226d3137203768317632682d31762d327a6d2d312d3168317632682d31762d327a22202f3e3c706174682066696c6c3d22234534454231372220643d226d3132203668347632682d34762d327a6d2d31203268367631682d36762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d3133203568317631682d31762d317a22202f3e3c706174682066696c6c3d22233030363043332220643d226d3132203468337631682d33762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d3134203968317632682d31762d327a6d2d32203068317631682d31762d317a6d2d322d3268367632682d36762d327a6d2d31203368337631682d33762d317a6d302d3268317631682d31762d317a6d322d3268387631682d38762d317a6d312d3168357631682d35762d317a6d35203268327632682d32762d327a6d32203268317631682d31762d317a6d302d3468317632682d31762d327a22202f3e3c706174682066696c6c3d22234630463046302220643d226d313020313268387631682d38762d317a6d37203168317632682d31762d327a6d2d36203168367631682d36762d317a6d302d3168317631682d31762d317a6d33203068317631682d31762d317a22202f3e3c706174682066696c6c3d22234644333233322220643d226d313520313368327631682d32762d317a22202f3e3c706174682066696c6c3d22233332384446442220643d226d313220313368327631682d32762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d3130203868317633682d31762d337a6d312d3168317631682d31762d317a6d36203168317633682d31762d337a6d2d31203068317631682d31762d317a6d2d342d3168347631682d34762d317a22202f3e3c706174682066696c6c3d22233443344334432220643d226d3131203868357633682d35762d337a6d35203168317632682d31762d327a22202f3e3c706174682066696c6c3d22233633363336332220643d226d3131203968317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22234646443932362220643d226d39203568317631682d31762d317a222f3e3c706174682066696c6c3d22233136333741342220643d226d3131203568367631682d36762d317a6d36203168317632682d31762d327a6d2d31203268317631682d31762d317a6d2d33203168337631682d33762d317a6d2d322d3168327631682d32762d317a6d302d3268317631682d31762d317a6d2d31203168317631682d31762d317a6d2d33203168317631682d31762d317a6d31203168317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233134324337432220643d226d3820313068317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233141343343382220643d226d3132203668357631682d35762d317a6d2d31203168367631682d36762d317a6d32203168337631682d33762d317a6d2d37203068317631682d31762d317a6d32203068317631682d31762d317a6d2d31203168317633682d31762d337a22202f3e3c706174682066696c6c3d22233030302220643d226d3720396831347631682d3134762d317a6d312d316831327631682d3132762d317a6d312d366831307635682d3130762d357a6d312d3168387631682d38762d317a22202f3e3c706174682066696c6c3d22234443314431442220643d226d3920376831307631682d3130762d317a22202f3e3c706174682066696c6c3d22234338464246422220643d226d332032376831337631682d3133762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d322d316831307631682d3130762d317a6d322d3168387631682d38762d317a6d302d3168347631682d34762d317a6d302d3168337631682d33762d317a6d302d3368327633682d32762d337a6d302d3268357632682d35762d327a6d33203268327633682d32762d337a6d31203368367631682d36762d317a6d312d3268397632682d39762d327a6d342d3168327631682d32762d317a6d30203468347631682d34762d317a6d342d3168317631682d31762d317a6d312d3168317631682d31762d317a6d302d3168327631682d32762d317a6d2d31342d3868367635682d36762d357a6d35203568317631682d31762d317a6d2d362d313168317634682d31762d347a6d31203468317632682d31762d327a6d352d3368317635682d31762d357a222f3e3c706174682066696c6c3d22233735424442442220643d226d313220313268317631682d31762d317a6d33203068317631682d31762d317a222f3e3c706174682066696c6c3d22233030302220643d226d313220313368317631682d31762d317a6d312d3168317631682d31762d317a6d32203168317631682d31762d317a6d312d3168317631682d31762d317a6d35203768337631682d33762d317a222f3e203c706174682066696c6c3d22233942453045302220643d226d3320323768317631682d31762d317a6d322d3268317633682d31762d337a6d322d3268317635682d31762d357a6d322d3168317636682d31762d367a6d31203568317631682d31762d317a6d312d3368387631682d38762d317a6d31203168357631682d35762d317a6d312d313268317631682d31762d317a6d33203068317631682d31762d317a222f3e3c706174682066696c6c3d22233030302220643d226d3720313368337634682d33762d347a6d31203468327632682d32762d327a6d31203268317632682d31762d327a6d2d32203068317633682d31762d337a6d31203268317631682d31762d317a6d2d332d3868317635682d31762d357a6d31203468317633682d31762d337a6d302d3568317631682d31762d317a6d312d3168317631682d31762d317a6d312d3368317633682d31762d337a6d31203468317631682d31762d317a6d312d3168317631682d31762d317a6d312d3268317632682d31762d327a6d31203068367631682d36762d317a6d2d332d3268327631682d32762d317a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168337631682d33762d317a6d33203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d2d32203068317635682d31762d357a6d31203168317633682d31762d337a6d2d32203468317631682d31762d317a6d332d3168317631682d31762d317a6d312d3368317633682d31762d337a6d2d32203468317631682d31762d317a6d2d31203168317631682d31762d317a22202f3e3c706174682066696c6c3d22233830383038302220643d226d3820313968317632682d31762d327a6d2d312d3268317632682d31762d327a6d2d312d3468317634682d31762d347a6d312d3168327631682d32762d317a6d312d3168327631682d32762d317a6d312d3168327631682d32762d317a6d302d3268327632682d32762d327a6d332d3368337634682d33762d347a6d2d31203168317633682d31762d337a6d34203068317633682d31762d337a6d31203168317632682d31762d327a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317633682d31762d337a6d2d31203368317631682d31762d317a6d2d31203168317631682d31762d317a22202f3e3c706174682066696c6c3d22234433443344332220643d226d3131203768317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d323020313868317631682d31762d317a222f3e3c706174682066696c6c3d22233030302220643d226d313020396831307631682d3130762d317a6d332d3168317631682d31762d317a6d302d3168367631682d36762d317a6d36203168317632682d31762d327a6d2d392d3168317633682d31762d337a6d312d3168317631682d31762d317a6d36203068317631682d31762d317a6d2d352d3168357631682d35762d317a22202f3e3c706174682066696c6c3d22233531353135312220643d226d3131203768327632682d32762d327a6d312d3168357631682d35762d317a6d32203268357631682d35762d317a22202f3e3c706174682066696c6c3d22233335333533352220643d226d3131203768317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22234136364532432220643d226d323120313868337631682d33762d317a6d2d31203168317632682d31762d327a6d34203068317632682d31762d327a22202f3e3c706174682066696c6c3d22234332383934362220643d226d323020313868317631682d31762d317a6d34203068317631682d31762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d323420313868367631682d36762d317a6d30203268367631682d36762d317a6d362d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233539353935392220643d226d323420313968357631682d35762d317a22202f3e3c706174682066696c6c3d22233030343046462220643d226d323920313968317631682d31762d317a22202f3e3c706174682066696c6c3d22233744413236392220643d226d332032376831337631682d3133762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d322d316831307631682d3130762d317a6d322d3168387631682d38762d317a6d302d3168347631682d34762d317a6d302d3168337631682d33762d317a6d302d3368327633682d32762d337a6d302d3268357632682d35762d327a6d33203268327633682d32762d337a6d31203368367631682d36762d317a6d312d3268397632682d39762d327a6d342d3168327631682d32762d317a6d30203468347631682d34762d317a6d342d3168317631682d31762d317a6d312d3168317631682d31762d317a6d302d3168327631682d32762d317a6d2d31342d3868367635682d36762d357a6d35203568317631682d31762d317a6d2d362d313168317634682d31762d347a6d31203468317632682d31762d327a6d352d3368317635682d31762d357a222f3e3c706174682066696c6c3d2223303030222066696c6c2d6f7061636974793d222e342220643d226d3320323768317631682d31762d317a6d322d3268317633682d31762d337a6d322d3268317635682d31762d357a6d322d3168317636682d31762d367a6d31203568317631682d31762d317a6d312d3368387631682d38762d317a6d31203168357631682d35762d317a6d302d313368327631682d32762d317a6d33203068327631682d32762d317a6d2d33203268317631682d31762d317a6d33203068317631682d31762d317a6d36203668317631682d31762d317a222f3e3c706174682066696c6c3d227265642220643d226d313220313368317631682d31762d317a6d33203068317631682d31762d317a222f3e3c706174682066696c6c3d22233030302220643d226d313320313368317631682d31762d317a6d33203068317631682d31762d317a6d35203668337631682d33762d317a222f3e3c706174682066696c6c3d22233030302220643d226d313220313268357631682d35762d317a6d2d312d3268377631682d37762d317a6d2d31203168317633682d31762d337a6d31203368377631682d37762d317a6d372d3368317633682d31762d337a22202f3e3c706174682066696c6c3d22233844384438442220643d226d313120313168317631682d31762d317a6d36203068317631682d31762d317a6d2d36203268317631682d31762d317a6d36203068317631682d31762d317a22202f3e3c706174682066696c6c3d22234234423442342220643d226d313220313168357631682d35762d317a6d30203268357631682d35762d317a6d2d312d3168317631682d31762d317a6d36203068317631682d31762d317a22202f3e3c706174682066696c6c3d22234638433844432220643d226d332032376831337631682d3133762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d322d316831307631682d3130762d317a6d322d3168387631682d38762d317a6d302d3168347631682d34762d317a6d302d3168337631682d33762d317a6d302d3368327633682d32762d337a6d302d3268357632682d35762d327a6d33203268327633682d32762d337a6d31203368367631682d36762d317a6d312d3268397632682d39762d327a6d342d3168327631682d32762d317a6d30203468347631682d34762d317a6d342d3168317631682d31762d317a6d312d3168317631682d31762d317a6d302d3168327631682d32762d317a6d2d31342d3868367635682d36762d357a6d35203568317631682d31762d317a6d2d362d313168317634682d31762d347a6d31203468317632682d31762d327a6d352d3368317635682d31762d357a22202f3e3c706174682066696c6c3d22234646433043422220643d226d313220313268327631682d32762d317a6d33203068327631682d32762d317a6d2d313220313568317631682d31762d317a6d322d3268317633682d31762d337a6d322d3268317635682d31762d357a6d322d3168317636682d31762d367a6d31203568317631682d31762d317a6d312d3368387631682d38762d317a6d31203168357631682d35762d317a222f3e3c706174682066696c6c3d22233030302220643d226d313220313368327631682d32762d317a6d33203068327631682d32762d317a6d36203668337631682d33762d317a222f3e3c706174682066696c6c3d22233739344231312220643d226d3820396831327631682d3132762d317a6d2d312d316831347631682d3134762d317a6d2d312d3168317631682d31762d317a6d3135203068317631682d31762d317a6d2d31322d336831307633682d3130762d337a6d312d3168327631682d32762d317a6d36203068327631682d32762d317a22202f3e3c706174682066696c6c3d22233530324630352220643d226d3920376831307631682d3130762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d323220323068317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168337631682d33762d317a6d332d3168317631682d31762d317a6d312d3268317632682d31762d327a6d2d33203068337631682d33762d317a6d2d31203168327631682d32762d317a6d2d312d3168317631682d31762d317a6d2d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d2223666666222066696c6c2d6f7061636974793d222e342220643d226d323920313968317631682d31762d317a6d302d3268317631682d31762d317a6d302d3268317631682d31762d317a6d2d312d3268337631682d33762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233835353131342220643d226d323520323268317631682d31762d317a6d2d312d3168317631682d31762d317a6d2d312d3168317631682d31762d317a6d35203268327631682d32762d317a6d2d32203168337631682d33762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d313020313168387631682d38762d317a6d32203168327632682d32762d327a22202f3e3c706174682066696c6c3d22233030302220643d226d313220313268357631682d35762d317a6d2d312d3268377631682d37762d317a6d2d31203168317633682d31762d337a6d31203368377631682d37762d317a6d372d3368317633682d31762d337a22202f3e3c706174682066696c6c3d22233844384438442220643d226d313120313168317631682d31762d317a6d36203068317631682d31762d317a6d2d36203268317631682d31762d317a6d36203068317631682d31762d317a22202f3e3c706174682066696c6c3d22234234423442342220643d226d313220313168357631682d35762d317a6d30203268357631682d35762d317a6d2d312d3168317631682d31762d317a6d36203068317631682d31762d317a22202f3e3c706174682066696c6c3d22234646303030302220643d226d31322031326832307631682d3230762d317a22202f3e3c706174682066696c6c3d22233831313942372220643d226d3130203768377633682d37762d337a6d312d3168367631682d36762d317a6d312d3168347631682d34762d317a6d35203468347631682d34762d317a6d302d3168337631682d33762d317a22202f3e3c706174682066696c6c3d22234232363144432220643d226d3134203668317631682d31762d317a6d31203168317631682d31762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d313120313268387631682d38762d317a6d30203168337631682d33762d317a6d35203068337631682d33762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d313320313068367631682d36762d317a6d2d332d3168337631682d33762d317a6d2d312d3368317632682d31762d327a6d312d3168337631682d33762d317a6d332d3168327631682d32762d317a6d32203168337631682d33762d317a6d33203168317632682d31762d327a6d2d31203268317631682d31762d317a6d2d32203068317631682d31762d317a6d2d32203068317631682d31762d317a6d2d32203068317631682d31762d317a6d37203168317631682d31762d317a22202f3e3c706174682066696c6c3d22234646464646462220643d226d3130203868317631682d31762d317a6d32203068317631682d31762d317a6d32203068317631682d31762d317a6d32203068317631682d31762d317a22202f3e3c706174682066696c6c3d22233236333134412220643d226d3133203968357631682d35762d317a6d2d332d3368387632682d38762d327a6d332d3168327631682d32762d317a22202f3e3c706174682066696c6c3d22234646443830302220643d226d3133203668327631682d32762d317a22202f3e3c706174682066696c6c3d22234646453630302220643d226d323220313968317631682d31762d317a222f3e3c706174682066696c6c3d22233030302220643d226d39203868317632682d31762d327a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d37203268317632682d31762d327a6d2d312d3168317631682d31762d317a6d2d312d3168317631682d31762d317a6d2d342d3168347631682d34762d317a22202f3e3c706174682066696c6c3d22234341344531312220643d226d3130203868387632682d38762d327a6d312d3168367631682d36762d317a6d312d3168347631682d34762d317a22202f3e3c706174682066696c6c3d22233933333730392220643d226d3130203868387631682d38762d317a6d31203168317631682d31762d317a6d32203068317631682d31762d317a6d32203068317631682d31762d317a6d32203068317631682d31762d317a22202f3e3c706174682066696c6c3d22233030303030302220643d226d323420313868367631682d36762d317a6d36203168317631682d31762d317a6d2d36203168367631682d36762d317a22202f3e3c706174682066696c6c3d22234646464646462220643d226d323420313968357631682d35762d317a22202f3e3c706174682066696c6c3d22234537413630302220643d226d323920313968317631682d31762d317a22202f3e3c706174682066696c6c3d22234437443144312220643d226d333020313368317634682d31762d347a22202f3e3c706174682066696c6c3d22234646464646462220643d226d313220313268317631682d31762d317a6d31203168317631682d31762d317a6d322d3168317631682d31762d317a6d31203168317631682d31762d317a22202f3e3c706174682066696c6c3d22233844384438442220643d226d313220313368317631682d31762d317a6d312d3168317631682d31762d317a6d32203168317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233344324631452220643d226d3720396831347631682d3134762d317a6d312d316831327631682d3132762d317a6d332d3268367631682d36762d317a6d312d3268347632682d34762d327a6d312d3168327631682d32762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d3130203768387631682d38762d317a22202f3e

Deployed Bytecode

0x6080604052600436106101b75760003560e01c80637501f741116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146105cf578063d5abeb011461060c578063e985e9c514610637578063f2fde38b14610674576101b7565b8063a22cb46514610561578063b88d4fde1461058a578063c49b3d54146105b3576101b7565b806391b7f5ed116100c657806391b7f5ed146104c657806395d89b41146104ef578063a035b1fe1461051a578063a108f52914610545576101b7565b80637501f74114610466578063853828b6146104915780638da5cb5b1461049b576101b7565b80634230baee11610159578063547520fe11610133578063547520fe146103ac5780636352211e146103d557806370a0823114610412578063715018a61461044f576101b7565b80634230baee1461031b57806342842e0e146103465780634f6ccce71461036f576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b55780632f745c59146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190613d5e565b61069d565b6040516101f09190614612565b60405180910390f35b34801561020557600080fd5b5061020e610717565b60405161021b919061462d565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190613db8565b6107a9565b60405161025891906145ab565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190613d1e565b61082e565b005b34801561029657600080fd5b5061029f610946565b6040516102ac919061490f565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190613c08565b610953565b005b3480156102ea57600080fd5b5061030560048036038101906103009190613d1e565b6109b3565b604051610312919061490f565b60405180910390f35b34801561032757600080fd5b50610330610a58565b60405161033d919061490f565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613c08565b610a5e565b005b34801561037b57600080fd5b5061039660048036038101906103919190613db8565b610a7e565b6040516103a3919061490f565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613db8565b610aef565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613db8565b610b75565b60405161040991906145ab565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190613b9b565b610c27565b604051610446919061490f565b60405180910390f35b34801561045b57600080fd5b50610464610cdf565b005b34801561047257600080fd5b5061047b610d67565b604051610488919061490f565b60405180910390f35b610499610d6d565b005b3480156104a757600080fd5b506104b0610e30565b6040516104bd91906145ab565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190613db8565b610e5a565b005b3480156104fb57600080fd5b50610504610ee0565b604051610511919061462d565b60405180910390f35b34801561052657600080fd5b5061052f610f72565b60405161053c919061490f565b60405180910390f35b61055f600480360381019061055a9190613d1e565b610f78565b005b34801561056d57600080fd5b5061058860048036038101906105839190613cde565b610f86565b005b34801561059657600080fd5b506105b160048036038101906105ac9190613c5b565b611107565b005b6105cd60048036038101906105c89190613db8565b611169565b005b3480156105db57600080fd5b506105f660048036038101906105f19190613db8565b61117d565b604051610603919061462d565b60405180910390f35b34801561061857600080fd5b50610621611208565b60405161062e919061490f565b60405180910390f35b34801561064357600080fd5b5061065e60048036038101906106599190613bc8565b61120e565b60405161066b9190614612565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190613b9b565b6112a2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610710575061070f8261139a565b5b9050919050565b60606000805461072690614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461075290614b8e565b801561079f5780601f106107745761010080835404028352916020019161079f565b820191906000526020600020905b81548152906001019060200180831161078257829003601f168201915b5050505050905090565b60006107b48261147c565b6107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea9061480f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083982610b75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a19061488f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108c96114e8565b73ffffffffffffffffffffffffffffffffffffffff1614806108f857506108f7816108f26114e8565b61120e565b5b610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e9061472f565b60405180910390fd5b61094183836114f0565b505050565b6000600880549050905090565b61096461095e6114e8565b826115a9565b6109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a906148af565b60405180910390fd5b6109ae838383611687565b505050565b60006109be83610c27565b82106109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f69061464f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f5481565b610a7983838360405180602001604052806000815250611107565b505050565b6000610a88610946565b8210610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac0906148cf565b60405180910390fd5b60088281548110610add57610adc614d27565b5b90600052602060002001549050919050565b610af76114e8565b73ffffffffffffffffffffffffffffffffffffffff16610b15610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b629061482f565b60405180910390fd5b80600e8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c159061476f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f9061474f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ce76114e8565b73ffffffffffffffffffffffffffffffffffffffff16610d05610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d529061482f565b60405180910390fd5b610d6560006118e3565b565b600e5481565b610d756114e8565b73ffffffffffffffffffffffffffffffffffffffff16610d93610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de09061482f565b60405180910390fd5b610df16114e8565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e2e57600080fd5b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e626114e8565b73ffffffffffffffffffffffffffffffffffffffff16610e80610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd9061482f565b60405180910390fd5b80600d8190555050565b606060018054610eef90614b8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1b90614b8e565b8015610f685780601f10610f3d57610100808354040283529160200191610f68565b820191906000526020600020905b815481529060010190602001808311610f4b57829003601f168201915b5050505050905090565b600d5481565b610f8282826119a9565b5050565b610f8e6114e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff3906146ef565b60405180910390fd5b80600560006110096114e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110b66114e8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110fb9190614612565b60405180910390a35050565b6111186111126114e8565b836115a9565b611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e906148af565b60405180910390fd5b61116384848484611b7d565b50505050565b61117a6111746114e8565b826119a9565b50565b6060600061118a83611bd9565b905060006111da61119a85611c4c565b6111a384611dad565b6111b46111af866124fc565b612ac6565b6040516020016111c69392919061450a565b604051602081830303815290604052612ac6565b9050806040516020016111ed9190614567565b60405160208183030381529060405290508092505050919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112aa6114e8565b73ffffffffffffffffffffffffffffffffffffffff166112c8610e30565b73ffffffffffffffffffffffffffffffffffffffff161461131e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113159061482f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561138e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113859061468f565b60405180910390fd5b611397816118e3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061146557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611475575061147482612c5e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661156383610b75565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115b48261147c565b6115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea9061470f565b60405180910390fd5b60006115fe83610b75565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061166d57508373ffffffffffffffffffffffffffffffffffffffff16611655846107a9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061167e575061167d818561120e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116a782610b75565b73ffffffffffffffffffffffffffffffffffffffff16146116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f49061484f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561176d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611764906146cf565b60405180910390fd5b611778838383612cc8565b6117836000826114f0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117d39190614aa4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461182a91906149c3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600c546119b4610946565b106119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb906148ef565b60405180910390fd5b600c5481611a00610946565b611a0a91906149c3565b1115611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a429061478f565b60405180910390fd5b600e54811115611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a87906147af565b60405180910390fd5b60008111611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca9061486f565b60405180910390fd5b3481600d54611ae29190614a4a565b14611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b19906147ef565b60405180910390fd5b60005b81811015611b785760006001600f54611b3e91906149c3565b9050611b4a8482612ddc565b6001600f6000828254611b5d91906149c3565b92505081905550508080611b7090614bf1565b915050611b25565b505050565b611b88848484611687565b611b9484848484612dfa565b611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca9061466f565b60405180910390fd5b50505050565b611be1613a43565b611be9613a43565b611bf283612f91565b816000018181525050611c0483613093565b816020018181525050611c168361316d565b816040018181525050611c2883613274565b816060018181525050611c3a83613418565b81608001818152505080915050919050565b60606000821415611c94576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611da8565b600082905060005b60008214611cc6578080611caf90614bf1565b915050600a82611cbf9190614a19565b9150611c9c565b60008167ffffffffffffffff811115611ce257611ce1614d56565b5b6040519080825280601f01601f191660200182016040528015611d145781602001600182028036833780820191505090505b5090505b60008514611da157600182611d2d9190614aa4565b9150600a85611d3c9190614c3a565b6030611d4891906149c3565b60f81b818381518110611d5e57611d5d614d27565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611d9a9190614a19565b9450611d18565b8093505050505b919050565b6060611db7613a72565b60405180606001604052806031815260200161573b6031913981600060148110611de457611de3614d27565b5b6020020181905250600383602001511415611e2f576040518060600160405280603481526020016156926034913981600160148110611e2657611e25614d27565b5b60200201819052505b600483602001511415611e72576040518060600160405280603281526020016157fb6032913981600260148110611e6957611e68614d27565b5b60200201819052505b600583602001511415611eb5576040518060600160405280602e8152602001615880602e913981600360148110611eac57611eab614d27565b5b60200201819052505b600383602001511080611ecc575060058360200151115b15612017576040518060600160405280602b8152602001615855602b913981600460148110611efe57611efd614d27565b5b60200201819052506018836020015160078110611f1e57611f1d614d27565b5b018054611f2a90614b8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5690614b8e565b8015611fa35780601f10611f7857610100808354040283529160200191611fa3565b820191906000526020600020905b815481529060010190602001808311611f8657829003601f168201915b505050505081600560148110611fbc57611fbb614d27565b5b60200201819052506040518060400160405280600381526020017f227d2c00000000000000000000000000000000000000000000000000000000008152508160066014811061200e5761200d614d27565b5b60200201819052505b60405180606001604052806024815260200161566e602491398160076014811061204457612043614d27565b5b6020020181905250602683604001516008811061206457612063614d27565b5b01805461207090614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461209c90614b8e565b80156120e95780601f106120be576101008083540402835291602001916120e9565b820191906000526020600020905b8154815290600101906020018083116120cc57829003601f168201915b50505050508160086014811061210257612101614d27565b5b602002018190525060405180606001604052806028815260200161582d602891398160096014811061213757612136614d27565b5b602002018190525060368360600151600e811061215757612156614d27565b5b01805461216390614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461218f90614b8e565b80156121dc5780601f106121b1576101008083540402835291602001916121dc565b820191906000526020600020905b8154815290600101906020018083116121bf57829003601f168201915b505050505081600a601481106121f5576121f4614d27565b5b60200201819052506040518060600160405280602981526020016156456029913981600b6014811061222a57612229614d27565b5b6020020181905250605283608001516005811061224a57612249614d27565b5b01805461225690614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461228290614b8e565b80156122cf5780601f106122a4576101008083540402835291602001916122cf565b820191906000526020600020905b8154815290600101906020018083116122b257829003601f168201915b505050505081600c601481106122e8576122e7614d27565b5b60200201819052506040518060400160405280600581526020017f227d5d2c2000000000000000000000000000000000000000000000000000000081525081600d6014811061233a57612339614d27565b5b602002018190525060008160006014811061235857612357614d27565b5b60200201518260016014811061237157612370614d27565b5b60200201518360026014811061238a57612389614d27565b5b6020020151846003601481106123a3576123a2614d27565b5b6020020151856004601481106123bc576123bb614d27565b5b6020020151866005601481106123d5576123d4614d27565b5b6020020151876006601481106123ee576123ed614d27565b5b60200201518860076014811061240757612406614d27565b5b6020020151604051602001612423989796959493929190614391565b6040516020818303038152906040529050808260086014811061244957612448614d27565b5b60200201518360096014811061246257612461614d27565b5b602002015184600a6014811061247b5761247a614d27565b5b602002015185600b6014811061249457612493614d27565b5b602002015186600c601481106124ad576124ac614d27565b5b602002015187600d601481106124c6576124c5614d27565b5b60200201516040516020016124e1979695949392919061432c565b60405160208183030381529060405290508092505050919050565b6060612506613a9a565b6040518060c00160405280608f815260200161576c608f91398160006009811061253357612532614d27565b5b60200201819052506040518060400160405280600c81526020017f3c706174682066696c6c3d2200000000000000000000000000000000000000008152508160016009811061258557612584614d27565b5b602002018190525060108360000151600881106125a5576125a4614d27565b5b0180546125b190614b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546125dd90614b8e565b801561262a5780601f106125ff5761010080835404028352916020019161262a565b820191906000526020600020905b81548152906001019060200180831161260d57829003601f168201915b50505050508160026009811061264357612642614d27565b5b60200201819052506040518061050001604052806104d781526020016158ae6104d791398160036009811061267b5761267a614d27565b5b6020020181905250601f83602001516007811061269b5761269a614d27565b5b0180546126a790614b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546126d390614b8e565b80156127205780601f106126f557610100808354040283529160200191612720565b820191906000526020600020905b81548152906001019060200180831161270357829003601f168201915b50505050508160046009811061273957612738614d27565b5b6020020181905250602e83604001516008811061275957612758614d27565b5b01805461276590614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461279190614b8e565b80156127de5780601f106127b3576101008083540402835291602001916127de565b820191906000526020600020905b8154815290600101906020018083116127c157829003601f168201915b5050505050816005600981106127f7576127f6614d27565b5b602002018190525060448360600151600e811061281757612816614d27565b5b01805461282390614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461284f90614b8e565b801561289c5780601f106128715761010080835404028352916020019161289c565b820191906000526020600020905b81548152906001019060200180831161287f57829003601f168201915b5050505050816006600981106128b5576128b4614d27565b5b602002018190525060578360800151600581106128d5576128d4614d27565b5b0180546128e190614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461290d90614b8e565b801561295a5780601f1061292f5761010080835404028352916020019161295a565b820191906000526020600020905b81548152906001019060200180831161293d57829003601f168201915b50505050508160076009811061297357612972614d27565b5b60200201819052506040518060600160405280603581526020016156c660359139816008600981106129a8576129a7614d27565b5b60200201819052506000816000600981106129c6576129c5614d27565b5b6020020151826001600981106129df576129de614d27565b5b6020020151836002600981106129f8576129f7614d27565b5b602002015184600360098110612a1157612a10614d27565b5b602002015185600460098110612a2a57612a29614d27565b5b602002015186600560098110612a4357612a42614d27565b5b602002015187600660098110612a5c57612a5b614d27565b5b602002015188600760098110612a7557612a74614d27565b5b602002015189600860098110612a8e57612a8d614d27565b5b6020020151604051602001612aab99989796959493929190614403565b60405160208183030381529060405290508092505050919050565b60606000825190506000811415612aef5760405180602001604052806000815250915050612c59565b60006003600283612b0091906149c3565b612b0a9190614a19565b6004612b169190614a4a565b90506000602082612b2791906149c3565b67ffffffffffffffff811115612b4057612b3f614d56565b5b6040519080825280601f01601f191660200182016040528015612b725781602001600182028036833780820191505090505b50905060006040518060600160405280604081526020016156fb604091399050600181016020830160005b86811015612c165760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612b9d565b506003860660018114612c305760028114612c4057612c4b565b613d3d60f01b6002830352612c4b565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cd38383836134c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d1657612d11816134ce565b612d55565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d5457612d538382613517565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9857612d9381613684565b612dd7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612dd657612dd58282613755565b5b5b505050565b612df68282604051806020016040528060008152506137d4565b5050565b6000612e1b8473ffffffffffffffffffffffffffffffffffffffff1661382f565b15612f84578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e446114e8565b8786866040518563ffffffff1660e01b8152600401612e6694939291906145c6565b602060405180830381600087803b158015612e8057600080fd5b505af1925050508015612eb157506040513d601f19601f82011682018060405250810190612eae9190613d8b565b60015b612f34573d8060008114612ee1576040519150601f19603f3d011682016040523d82523d6000602084013e612ee6565b606091505b50600081511415612f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f239061466f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f89565b600190505b949350505050565b600080612fc4612fa084611c4c565b604051602001612fb091906144e8565b604051602081830303815290604052613842565b90506000604f82612fd59190614c3a565b90506000600a8210158015612fea5750601482105b15612ff457600190505b601482101580156130055750601e82105b1561300f57600290505b601e82101580156130205750602882105b1561302a57600390505b6028821015801561303b5750603282105b1561304557600490505b603282101580156130565750603c82105b1561306057600590505b603c82101580156130715750604682105b1561307b57600690505b6046821061308857600790505b809350505050919050565b6000806130c66130a284611c4c565b6040516020016130b29190614482565b604051602081830303815290604052613842565b9050600060aa826130d79190614c3a565b90506000602e82101580156130ec5750604082105b156130f657600190505b604082101580156131075750605182105b1561311157600290505b605182101580156131225750605582105b1561312c57600390505b605582141561313a57600490505b6056821015801561314b5750605882105b1561315557600590505b6058821061316257600690505b809350505050919050565b6000806131a061317c84611c4c565b60405160200161318c9190614589565b604051602081830303815290604052613842565b905060006101f4826131b29190614c3a565b90506000602982101580156131c75750605182105b156131d157600190505b605182101580156131e25750607982105b156131ec57600290505b607982101580156131fd575060a182105b1561320757600390505b60a18210158015613218575060c982105b1561322257600490505b60c98210158015613234575061010582105b1561323e57600590505b6101058210158015613251575061011982105b1561325b57600690505b610119821061326957600790505b809350505050919050565b6000806132a761328384611c4c565b60405160200161329391906144a4565b604051602081830303815290604052613842565b9050600060f0826132b89190614c3a565b90506000600a82101580156132cd5750601482105b156132d757600190505b601482101580156132e85750601e82105b156132f257600290505b601e82101580156133035750602882105b1561330d57600390505b6028821015801561331e5750603282105b1561332857600490505b603282101580156133395750603c82105b1561334357600590505b603c82101580156133545750604682105b1561335e57600690505b6046821015801561336f5750605082105b1561337957600790505b6050821015801561338a5750605a82105b1561339457600890505b605a82101580156133a55750606482105b156133af57600990505b606482101580156133c05750606e82105b156133ca57600a90505b606e82101580156133db5750607882105b156133e557600b90505b607882101580156133f65750608282105b1561340057600c90505b6082821061340d57600d90505b809350505050919050565b60008061344b61342784611c4c565b60405160200161343791906144c6565b604051602081830303815290604052613842565b9050600060788261345c9190614c3a565b90506000600a82101580156134715750601482105b1561347b57600190505b6014821015801561348c5750601e82105b1561349657600290505b601e82101580156134a75750602882105b156134b157600390505b602882106134be57600490505b809350505050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161352484610c27565b61352e9190614aa4565b9050600060076000848152602001908152602001600020549050818114613613576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136989190614aa4565b90506000600960008481526020019081526020016000205490506000600883815481106136c8576136c7614d27565b5b9060005260206000200154905080600883815481106136ea576136e9614d27565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061373957613738614cf8565b5b6001900381819060005260206000200160009055905550505050565b600061376083610c27565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6137de8383613875565b6137eb6000848484612dfa565b61382a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138219061466f565b60405180910390fd5b505050565b600080823b905060008111915050919050565b6000816040516020016138559190614315565b6040516020818303038152906040528051906020012060001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138dc906147cf565b60405180910390fd5b6138ee8161147c565b1561392e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613925906146af565b60405180910390fd5b61393a60008383612cc8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461398a91906149c3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518061028001604052806014905b6060815260200190600190039081613a825790505090565b6040518061012001604052806009905b6060815260200190600190039081613aaa5790505090565b6000613ad5613ad08461494f565b61492a565b905082815260208101848484011115613af157613af0614d8a565b5b613afc848285614b4c565b509392505050565b600081359050613b13816155e8565b92915050565b600081359050613b28816155ff565b92915050565b600081359050613b3d81615616565b92915050565b600081519050613b5281615616565b92915050565b600082601f830112613b6d57613b6c614d85565b5b8135613b7d848260208601613ac2565b91505092915050565b600081359050613b958161562d565b92915050565b600060208284031215613bb157613bb0614d94565b5b6000613bbf84828501613b04565b91505092915050565b60008060408385031215613bdf57613bde614d94565b5b6000613bed85828601613b04565b9250506020613bfe85828601613b04565b9150509250929050565b600080600060608486031215613c2157613c20614d94565b5b6000613c2f86828701613b04565b9350506020613c4086828701613b04565b9250506040613c5186828701613b86565b9150509250925092565b60008060008060808587031215613c7557613c74614d94565b5b6000613c8387828801613b04565b9450506020613c9487828801613b04565b9350506040613ca587828801613b86565b925050606085013567ffffffffffffffff811115613cc657613cc5614d8f565b5b613cd287828801613b58565b91505092959194509250565b60008060408385031215613cf557613cf4614d94565b5b6000613d0385828601613b04565b9250506020613d1485828601613b19565b9150509250929050565b60008060408385031215613d3557613d34614d94565b5b6000613d4385828601613b04565b9250506020613d5485828601613b86565b9150509250929050565b600060208284031215613d7457613d73614d94565b5b6000613d8284828501613b2e565b91505092915050565b600060208284031215613da157613da0614d94565b5b6000613daf84828501613b43565b91505092915050565b600060208284031215613dce57613dcd614d94565b5b6000613ddc84828501613b86565b91505092915050565b613dee81614ad8565b82525050565b613dfd81614aea565b82525050565b6000613e0e82614980565b613e188185614996565b9350613e28818560208601614b5b565b613e3181614d99565b840191505092915050565b6000613e478261498b565b613e5181856149a7565b9350613e61818560208601614b5b565b613e6a81614d99565b840191505092915050565b6000613e808261498b565b613e8a81856149b8565b9350613e9a818560208601614b5b565b80840191505092915050565b6000613eb3602b836149a7565b9150613ebe82614daa565b604082019050919050565b6000613ed66032836149a7565b9150613ee182614df9565b604082019050919050565b6000613ef96026836149a7565b9150613f0482614e48565b604082019050919050565b6000613f1c600b836149b8565b9150613f2782614e97565b600b82019050919050565b6000613f3f600a836149b8565b9150613f4a82614ec0565b600a82019050919050565b6000613f62601c836149a7565b9150613f6d82614ee9565b602082019050919050565b6000613f8560da836149b8565b9150613f9082614f12565b60da82019050919050565b6000613fa86009836149b8565b9150613fb38261501f565b600982019050919050565b6000613fcb6024836149a7565b9150613fd682615048565b604082019050919050565b6000613fee6019836149a7565b9150613ff982615097565b602082019050919050565b6000614011600a836149b8565b915061401c826150c0565b600a82019050919050565b6000614034602c836149a7565b915061403f826150e9565b604082019050919050565b60006140576038836149a7565b915061406282615138565b604082019050919050565b600061407a602a836149a7565b915061408582615187565b604082019050919050565b600061409d6029836149a7565b91506140a8826151d6565b604082019050919050565b60006140c0601f836149a7565b91506140cb82615225565b602082019050919050565b60006140e36024836149b8565b91506140ee8261524e565b602482019050919050565b60006141066031836149a7565b91506141118261529d565b604082019050919050565b60006141296002836149b8565b9150614134826152ec565b600282019050919050565b600061414c6020836149a7565b915061415782615315565b602082019050919050565b600061416f6017836149a7565b915061417a8261533e565b602082019050919050565b60006141926016836149b8565b915061419d82615367565b601682019050919050565b60006141b5602c836149a7565b91506141c082615390565b604082019050919050565b60006141d86020836149a7565b91506141e3826153df565b602082019050919050565b60006141fb6029836149a7565b915061420682615408565b604082019050919050565b600061421e601c836149a7565b915061422982615457565b602082019050919050565b60006142416021836149a7565b915061424c82615480565b604082019050919050565b6000614264601d836149b8565b915061426f826154cf565b601d82019050919050565b60006142876031836149a7565b9150614292826154f8565b604082019050919050565b60006142aa602c836149a7565b91506142b582615547565b604082019050919050565b60006142cd600a836149b8565b91506142d882615596565b600a82019050919050565b60006142f0601b836149a7565b91506142fb826155bf565b602082019050919050565b61430f81614b42565b82525050565b60006143218284613e75565b915081905092915050565b6000614338828a613e75565b91506143448289613e75565b91506143508288613e75565b915061435c8287613e75565b91506143688286613e75565b91506143748285613e75565b91506143808284613e75565b915081905098975050505050505050565b600061439d828b613e75565b91506143a9828a613e75565b91506143b58289613e75565b91506143c18288613e75565b91506143cd8287613e75565b91506143d98286613e75565b91506143e58285613e75565b91506143f18284613e75565b91508190509998505050505050505050565b600061440f828c613e75565b915061441b828b613e75565b9150614427828a613e75565b91506144338289613e75565b915061443f8288613e75565b915061444b8287613e75565b91506144578286613e75565b91506144638285613e75565b915061446f8284613e75565b91508190509a9950505050505050505050565b600061448d82613f0f565b91506144998284613e75565b915081905092915050565b60006144af82613f32565b91506144bb8284613e75565b915081905092915050565b60006144d182613f9b565b91506144dd8284613e75565b915081905092915050565b60006144f382614004565b91506144ff8284613e75565b915081905092915050565b600061451582614185565b91506145218286613e75565b915061452c82613f78565b91506145388285613e75565b9150614543826140d6565b915061454f8284613e75565b915061455a8261411c565b9150819050949350505050565b600061457282614257565b915061457e8284613e75565b915081905092915050565b6000614594826142c0565b91506145a08284613e75565b915081905092915050565b60006020820190506145c06000830184613de5565b92915050565b60006080820190506145db6000830187613de5565b6145e86020830186613de5565b6145f56040830185614306565b81810360608301526146078184613e03565b905095945050505050565b60006020820190506146276000830184613df4565b92915050565b600060208201905081810360008301526146478184613e3c565b905092915050565b6000602082019050818103600083015261466881613ea6565b9050919050565b6000602082019050818103600083015261468881613ec9565b9050919050565b600060208201905081810360008301526146a881613eec565b9050919050565b600060208201905081810360008301526146c881613f55565b9050919050565b600060208201905081810360008301526146e881613fbe565b9050919050565b6000602082019050818103600083015261470881613fe1565b9050919050565b6000602082019050818103600083015261472881614027565b9050919050565b600060208201905081810360008301526147488161404a565b9050919050565b600060208201905081810360008301526147688161406d565b9050919050565b6000602082019050818103600083015261478881614090565b9050919050565b600060208201905081810360008301526147a8816140b3565b9050919050565b600060208201905081810360008301526147c8816140f9565b9050919050565b600060208201905081810360008301526147e88161413f565b9050919050565b6000602082019050818103600083015261480881614162565b9050919050565b60006020820190508181036000830152614828816141a8565b9050919050565b60006020820190508181036000830152614848816141cb565b9050919050565b60006020820190508181036000830152614868816141ee565b9050919050565b6000602082019050818103600083015261488881614211565b9050919050565b600060208201905081810360008301526148a881614234565b9050919050565b600060208201905081810360008301526148c88161427a565b9050919050565b600060208201905081810360008301526148e88161429d565b9050919050565b60006020820190508181036000830152614908816142e3565b9050919050565b60006020820190506149246000830184614306565b92915050565b6000614934614945565b90506149408282614bc0565b919050565b6000604051905090565b600067ffffffffffffffff82111561496a57614969614d56565b5b61497382614d99565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006149ce82614b42565b91506149d983614b42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a0e57614a0d614c6b565b5b828201905092915050565b6000614a2482614b42565b9150614a2f83614b42565b925082614a3f57614a3e614c9a565b5b828204905092915050565b6000614a5582614b42565b9150614a6083614b42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a9957614a98614c6b565b5b828202905092915050565b6000614aaf82614b42565b9150614aba83614b42565b925082821015614acd57614acc614c6b565b5b828203905092915050565b6000614ae382614b22565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b79578082015181840152602081019050614b5e565b83811115614b88576000848401525b50505050565b60006002820490506001821680614ba657607f821691505b60208210811415614bba57614bb9614cc9565b5b50919050565b614bc982614d99565b810181811067ffffffffffffffff82111715614be857614be7614d56565b5b80604052505050565b6000614bfc82614b42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2f57614c2e614c6b565b5b600182019050919050565b6000614c4582614b42565b9150614c5083614b42565b925082614c6057614c5f614c9a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4c41594552205448524545000000000000000000000000000000000000000000600082015250565b7f4c41594552204649564500000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f222c20226465736372697074696f6e223a20224c6172766120576f6c7665732060008201527f6172652061204652454520544f204d494e5420636f6c6c656374696f6e20627260208201527f6f7567687420746f20796f752062792074686520666f756e64657273206f662060408201527f576f6c6620436c75622038362e2054686579206172652061206465726976617460608201527f697665206f66204c61727661204c6164732e2054686520617274776f726b206160808201527f6e64206d65746164617461206172652066756c6c79206f6e2d636861696e206160a08201527f6e64206172652072616e646f6d6c792067656e6572617465642200000000000060c082015250565b7f4c41594552205349580000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4241534520434f4c4f5200000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b7f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360008201527f6536342c00000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20696e2061207472616e73616374696f6e000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45544820616d6f756e7420697320696e636f7272656374000000000000000000600082015250565b7f7b226e616d65223a20224c6172766120576f6c66202300000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e6520746f6b656e00000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4c4159455220464f555200000000000000000000000000000000000000000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6155f181614ad8565b81146155fc57600080fd5b50565b61560881614aea565b811461561357600080fd5b50565b61561f81614af6565b811461562a57600080fd5b50565b61563681614b42565b811461564157600080fd5b5056fe227d2c207b2274726169745f74797065223a20224163636573736f7279222c2276616c7565223a2022207b2274726169745f74797065223a202245796577656172222c2276616c7565223a20225a6f6d626965227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a20225a6f6d626965227d2c3c7374796c653e23787b73686170652d72656e646572696e673a20637269737065646765733b7d3c2f7374796c653e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f2c202261747472696275746573223a205b7b2274726169745f74797065223a202254797065222c2276616c7565223a20223c7376672069643d22782220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d22302030203332203332223e3c706174682066696c6c3d22233633383539362220643d224d30203068333276333248307a222f3e416c69656e227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a2022416c69656e227d2c227d2c207b2274726169745f74797065223a20224865616477656172222c2276616c7565223a20224e6f726d616c227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a2022417065227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a2022417065227d2c2220643d226d332032376831337631682d3133762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d322d316831307631682d3130762d317a6d322d3168387631682d38762d317a6d302d3168347631682d34762d317a6d302d3168337631682d33762d317a6d302d3368327633682d32762d337a6d302d3268357632682d35762d327a6d33203268327633682d32762d337a6d31203368367631682d36762d317a6d312d3268397632682d39762d327a6d342d3168327631682d32762d317a6d30203468347631682d34762d317a6d342d3168317631682d31762d317a6d312d3168317631682d31762d317a6d302d3168327631682d32762d317a6d2d31342d3868367635682d36762d357a6d35203568317631682d31762d317a6d2d362d313168317634682d31762d347a6d31203468317632682d31762d327a6d352d3368317635682d31762d357a222f3e3c706174682066696c6c3d22233030302220643d226d3220323768317632682d31762d327a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168327631682d32762d317a6d322d3168327631682d32762d317a6d312d31346831763134682d31762d31347a6d2d312d3568317635682d31762d357a6d31203068317631682d31762d317a6d31203168317634682d31762d347a6d31203468317632682d31762d327a6d31203168337631682d33762d317a6d322d3668317636682d31762d367a6d31203068317632682d31762d327a6d3120316831763132682d31762d31327a6d2d31342032356831347631682d3134762d317a6d31332d3168317631682d31762d317a6d312d3268317632682d31762d327a6d31203068317631682d31762d317a6d312d3568317635682d31762d357a6d2d34203068347631682d34762d317a6d2d312d3168317631682d31762d317a6d2d312d3368317633682d31762d337a6d332d3168317632682d31762d327a6d31203168337631682d33762d317a6d322d3168337631682d33762d317a6d332d3168337633682d33762d337a6d33203268337631682d33762d317a6d32203168317632682d31762d327a6d2d31203168317632682d31762d327a6d2d31203168317632682d31762d327a6d2d31203168317632682d31762d327a6d2d34203168347631682d34762d317a6d312d3268337631682d33762d317a6d2d392d3668317631682d31762d317a6d33203068317631682d31762d317a22202f3e3c706174682066696c6c3d2223303030222066696c6c2d6f7061636974793d222e322220643d226d313320313368317631682d31762d317a6d33203068317631682d31762d317a222f3e3c706174682066696c6c3d2223303030222066696c6c2d6f7061636974793d222e342220643d226d3320323768317631682d31762d317a6d322d3268317633682d31762d337a6d322d3268317635682d31762d357a6d322d3168317636682d31762d367a6d31203568317631682d31762d317a6d312d3368387631682d38762d317a6d31203168357631682d35762d317a6d302d313368327631682d32762d317a6d33203068327631682d32762d317a222f3ea264697066735822122060ea47e9c05d32ad382f38078778bbc62187432af86d400309c8aeab12dfa21964736f6c63430008070033

Deployed Bytecode Sourcemap

17440:18457:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14904:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8836:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9805:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9440:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15370:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10455:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15124:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17614:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10757:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15479:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35198:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8613:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8415:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3125:85;;;;;;;;;;;;;:::i;:::-;;17583:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35290:116;;;:::i;:::-;;2932:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35114:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8932:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17546:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34972:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10016:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10917:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34856:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33537:680;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17511:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10295:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3215:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14904:215;15006:4;15039:35;15024:50;;;:11;:50;;;;:90;;;;15078:36;15102:11;15078:23;:36::i;:::-;15024:90;15017:97;;14904:215;;;:::o;8836:91::-;8890:13;8917:5;8910:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8836:91;:::o;9805:206::-;9881:7;9903:16;9911:7;9903;:16::i;:::-;9895:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9982:15;:24;9998:7;9982:24;;;;;;;;;;;;;;;;;;;;;9975:31;;9805:206;;;:::o;9440:360::-;9515:13;9531:23;9546:7;9531:14;:23::i;:::-;9515:39;;9573:5;9567:11;;:2;:11;;;;9559:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;9652:5;9636:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;9661:37;9678:5;9685:12;:10;:12::i;:::-;9661:16;:37::i;:::-;9636:62;9623:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;9774:21;9783:2;9787:7;9774:8;:21::i;:::-;9510:290;9440:360;;:::o;15370:104::-;15431:7;15452:10;:17;;;;15445:24;;15370:104;:::o;10455:297::-;10617:41;10636:12;:10;:12::i;:::-;10650:7;10617:18;:41::i;:::-;10609:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;10719:28;10729:4;10735:2;10739:7;10719:9;:28::i;:::-;10455:297;;;:::o;15124:241::-;15221:7;15251:23;15268:5;15251:16;:23::i;:::-;15243:5;:31;15235:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;15334:12;:19;15347:5;15334:19;;;;;;;;;;;;;;;:26;15354:5;15334:26;;;;;;;;;;;;15327:33;;15124:241;;;;:::o;17614:30::-;;;;:::o;10757:155::-;10868:39;10885:4;10891:2;10895:7;10868:39;;;;;;;;;;;;:16;:39::i;:::-;10757:155;;;:::o;15479:218::-;15554:7;15584:30;:28;:30::i;:::-;15576:5;:38;15568:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;15675:10;15686:5;15675:17;;;;;;;;:::i;:::-;;;;;;;;;;15668:24;;15479:218;;;:::o;35198:87::-;3060:12;:10;:12::i;:::-;3049:23;;:7;:5;:7::i;:::-;:23;;;3041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35270:10:::1;35260:7;:20;;;;35198:87:::0;:::o;8613:218::-;8685:7;8699:13;8715:7;:16;8723:7;8715:16;;;;;;;;;;;;;;;;;;;;;8699:32;;8761:1;8744:19;;:5;:19;;;;8736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8821:5;8814:12;;;8613:218;;;:::o;8415:193::-;8487:7;8526:1;8509:19;;:5;:19;;;;8501:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8587:9;:16;8597:5;8587:16;;;;;;;;;;;;;;;;8580:23;;8415:193;;;:::o;3125:85::-;3060:12;:10;:12::i;:::-;3049:23;;:7;:5;:7::i;:::-;:23;;;3041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3184:21:::1;3202:1;3184:9;:21::i;:::-;3125:85::o:0;17583:27::-;;;;:::o;35290:116::-;3060:12;:10;:12::i;:::-;3049:23;;:7;:5;:7::i;:::-;:23;;;3041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35359:12:::1;:10;:12::i;:::-;35351:26;;:49;35378:21;35351:49;;;;;;;;;;;;;;;;;;;;;;;35343:58;;;::::0;::::1;;35290:116::o:0;2932:78::-;2978:7;2999:6;;;;;;;;;;;2992:13;;2932:78;:::o;35114:79::-;3060:12;:10;:12::i;:::-;3049:23;;:7;:5;:7::i;:::-;:23;;;3041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35180:8:::1;35172:5;:16;;;;35114:79:::0;:::o;8932:95::-;8988:13;9015:7;9008:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8932:95;:::o;17546:33::-;;;;:::o;34972:137::-;35070:34;35075:13;35089:14;35070:4;:34::i;:::-;34972:137;;:::o;10016:274::-;10125:12;:10;:12::i;:::-;10113:24;;:8;:24;;;;10105:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10219:8;10174:18;:32;10193:12;:10;:12::i;:::-;10174:32;;;;;;;;;;;;;;;:42;10207:8;10174:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;10266:8;10237:48;;10252:12;:10;:12::i;:::-;10237:48;;;10276:8;10237:48;;;;;;:::i;:::-;;;;;;;;10016:274;;:::o;10917:286::-;11059:41;11078:12;:10;:12::i;:::-;11092:7;11059:18;:41::i;:::-;11051:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;11159:39;11173:4;11179:2;11183:7;11192:5;11159:13;:39::i;:::-;10917:286;;;;:::o;34856:111::-;34929:33;34934:12;:10;:12::i;:::-;34947:14;34929:4;:33::i;:::-;34856:111;:::o;33537:680::-;33602:13;33622:27;33652:23;33667:7;33652:14;:23::i;:::-;33622:53;;33680:18;33701:420;33771:17;33780:7;33771:8;:17::i;:::-;34012:19;34022:8;34012:9;:19::i;:::-;34073:38;34093:16;34100:8;34093:6;:16::i;:::-;34073:13;:38::i;:::-;33728:390;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33701:13;:420::i;:::-;33680:441;;34190:4;34140:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;34126:70;;34208:4;34201:11;;;;33537:680;;;:::o;17511:31::-;;;;:::o;10295:155::-;10392:4;10410:18;:25;10429:5;10410:25;;;;;;;;;;;;;;;:35;10436:8;10410:35;;;;;;;;;;;;;;;;;;;;;;;;;10403:42;;10295:155;;;;:::o;3215:177::-;3060:12;:10;:12::i;:::-;3049:23;;:7;:5;:7::i;:::-;:23;;;3041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3318:1:::1;3298:22;;:8;:22;;;;3290:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3368:19;3378:8;3368:9;:19::i;:::-;3215:177:::0;:::o;8141:269::-;8243:4;8280:25;8265:40;;;:11;:40;;;;:96;;;;8328:33;8313:48;;;:11;:48;;;;8265:96;:140;;;;8369:36;8393:11;8369:23;:36::i;:::-;8265:140;8254:151;;8141:269;;;:::o;11486:118::-;11551:4;11597:1;11569:30;;:7;:16;11577:7;11569:16;;;;;;;;;;;;;;;;;;;;;:30;;;;11562:37;;11486:118;;;:::o;2525:89::-;2578:7;2599:10;2592:17;;2525:89;:::o;13440:159::-;13536:2;13509:15;:24;13525:7;13509:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;13586:7;13582:2;13548:46;;13557:23;13572:7;13557:14;:23::i;:::-;13548:46;;;;;;;;;;;;13440:159;;:::o;11609:327::-;11702:4;11721:16;11729:7;11721;:16::i;:::-;11713:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11791:13;11807:23;11822:7;11807:14;:23::i;:::-;11791:39;;11854:5;11843:16;;:7;:16;;;:51;;;;11887:7;11863:31;;:20;11875:7;11863:11;:20::i;:::-;:31;;;11843:51;:87;;;;11898:32;11915:5;11922:7;11898:16;:32::i;:::-;11843:87;11835:96;;;11609:327;;;;:::o;12981:454::-;13113:4;13086:31;;:23;13101:7;13086:14;:23::i;:::-;:31;;;13078:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13190:1;13176:16;;:2;:16;;;;13168:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13240:39;13261:4;13267:2;13271:7;13240:20;:39::i;:::-;13286:29;13303:1;13307:7;13286:8;:29::i;:::-;13341:1;13322:9;:15;13332:4;13322:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;13364:1;13347:9;:13;13357:2;13347:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;13389:2;13370:7;:16;13378:7;13370:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;13422:7;13418:2;13403:27;;13412:4;13403:27;;;;;;;;;;;;12981:454;;;:::o;3397:152::-;3447:16;3466:6;;;;;;;;;;;3447:25;;3486:8;3477:6;;:17;;;;;;;;;;;;;;;;;;3535:8;3504:40;;3525:8;3504:40;;;;;;;;;;;;3442:107;3397:152;:::o;34222:629::-;34318:9;;34302:13;:11;:13::i;:::-;:25;34294:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34406:9;;34388:14;34372:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:43;;34364:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34482:7;;34464:14;:25;;34456:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34573:1;34556:14;:18;34548:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34646:9;34628:14;34620:5;;:22;;;;:::i;:::-;:35;34612:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34695:9;34690:157;34714:14;34710:1;:18;34690:157;;;34741:15;34777:1;34759:15;;:19;;;;:::i;:::-;34741:37;;34784:31;34794:11;34807:7;34784:9;:31::i;:::-;34840:1;34821:15;;:20;;;;;;;:::i;:::-;;;;;;;;34735:112;34730:3;;;;;:::i;:::-;;;;34690:157;;;;34222:629;;:::o;11208:273::-;11332:28;11342:4;11348:2;11352:7;11332:9;:28::i;:::-;11373:48;11396:4;11402:2;11406:7;11415:5;11373:22;:48::i;:::-;11365:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;11208:273;;;;:::o;26962:384::-;27026:18;;:::i;:::-;27055:27;;:::i;:::-;27110:21;27123:7;27110:12;:21::i;:::-;27089:8;:18;;:42;;;;;27158:22;27172:7;27158:13;:22::i;:::-;27136:8;:19;;:44;;;;;27206:21;27219:7;27206:12;:21::i;:::-;27185:8;:18;;:42;;;;;27253:21;27266:7;27253:12;:21::i;:::-;27232:8;:18;;:42;;;;;27299:20;27311:7;27299:11;:20::i;:::-;27279:8;:17;;:40;;;;;27333:8;27326:15;;;26962:384;;;:::o;35411:417::-;35467:13;35502:1;35493:5;:10;35489:38;;;35511:10;;;;;;;;;;;;;;;;;;;;;35489:38;35531:12;35546:5;35531:20;;35556:14;35575:54;35590:1;35582:4;:9;35575:54;;35599:8;;;;;:::i;:::-;;;;35621:2;35613:10;;;;;:::i;:::-;;;35575:54;;;35633:19;35665:6;35655:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35633:39;;35677:121;35693:1;35684:5;:10;35677:121;;35712:1;35702:11;;;;;:::i;:::-;;;35770:2;35762:5;:10;;;;:::i;:::-;35749:2;:24;;;;:::i;:::-;35736:39;;35719:6;35726;35719:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;35790:2;35781:11;;;;;:::i;:::-;;;35677:121;;;35816:6;35802:21;;;;;35411:417;;;;:::o;27352:1325::-;27423:13;27447:23;;:::i;:::-;27479:62;;;;;;;;;;;;;;;;;:5;27485:1;27479:8;;;;;;;:::i;:::-;;;;;:62;;;;27573:1;27550:8;:19;;;:24;27546:108;;;27582:65;;;;;;;;;;;;;;;;;:5;27588:1;27582:8;;;;;;;:::i;:::-;;;;;:65;;;;27546:108;27685:1;27662:8;:19;;;:24;27658:106;;;27694:63;;;;;;;;;;;;;;;;;:5;27700:1;27694:8;;;;;;;:::i;:::-;;;;;:63;;;;27658:106;27795:1;27772:8;:19;;;:24;27768:102;;;27804:59;;;;;;;;;;;;;;;;;:5;27810:1;27804:8;;;;;;;:::i;:::-;;;;;:59;;;;27768:102;27900:1;27878:8;:19;;;:23;:50;;;;27927:1;27905:8;:19;;;:23;27878:50;27874:194;;;27936:56;;;;;;;;;;;;;;;;;:5;27942:1;27936:8;;;;;;;:::i;:::-;;;;;:56;;;;28009:10;28020:8;:19;;;28009:31;;;;;;;:::i;:::-;;;27998:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;28004:1;27998:8;;;;;;;:::i;:::-;;;;;:42;;;;28046:16;;;;;;;;;;;;;;;;;:5;28052:1;28046:8;;;;;;;:::i;:::-;;;;;:16;;;;27874:194;28072:49;;;;;;;;;;;;;;;;;:5;28078:1;28072:8;;;;;;;:::i;:::-;;;;;:49;;;;28137:11;28149:8;:18;;;28137:31;;;;;;;:::i;:::-;;;28126:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;28132:1;28126:8;;;;;;;:::i;:::-;;;;;:42;;;;28173:53;;;;;;;;;;;;;;;;;:5;28179:1;28173:8;;;;;;;:::i;:::-;;;;;:53;;;;28243:10;28254:8;:18;;;28243:30;;;;;;;:::i;:::-;;;28231:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;28237:2;28231:9;;;;;;;:::i;:::-;;;;;:42;;;;28278:55;;;;;;;;;;;;;;;;;:5;28284:2;28278:9;;;;;;;:::i;:::-;;;;;:55;;;;28350:10;28361:8;:17;;;28350:29;;;;;;;:::i;:::-;;;28338:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;28344:2;28338:9;;;;;;;:::i;:::-;;;;;:41;;;;28384:19;;;;;;;;;;;;;;;;;:5;28390:2;28384:9;;;;;;;:::i;:::-;;;;;:19;;;;28412:20;28459:5;28465:1;28459:8;;;;;;;:::i;:::-;;;;;;28469:5;28475:1;28469:8;;;;;;;:::i;:::-;;;;;;28479:5;28485:1;28479:8;;;;;;;:::i;:::-;;;;;;28489:5;28495:1;28489:8;;;;;;;:::i;:::-;;;;;;28499:5;28505:1;28499:8;;;;;;;:::i;:::-;;;;;;28509:5;28515:1;28509:8;;;;;;;:::i;:::-;;;;;;28519:5;28525:1;28519:8;;;;;;;:::i;:::-;;;;;;28529:5;28535:1;28529:8;;;;;;;:::i;:::-;;;;;;28442:96;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28412:127;;28582:6;28590:5;28596:1;28590:8;;;;;;;:::i;:::-;;;;;;28600:5;28606:1;28600:8;;;;;;;:::i;:::-;;;;;;28610:5;28616:2;28610:9;;;;;;;:::i;:::-;;;;;;28621:5;28627:2;28621:9;;;;;;;:::i;:::-;;;;;;28632:5;28638:2;28632:9;;;;;;;:::i;:::-;;;;;;28643:5;28649:2;28643:9;;;;;;;:::i;:::-;;;;;;28565:88;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28549:105;;28666:6;28659:13;;;;27352:1325;;;:::o;31497:2035::-;31565:13;31585:22;;:::i;:::-;31614:156;;;;;;;;;;;;;;;;;:5;31620:1;31614:8;;;;;;;:::i;:::-;;;;;:156;;;;31775:25;;;;;;;;;;;;;;;;;:5;31781:1;31775:8;;;;;;;:::i;:::-;;;;;:25;;;;31816:10;31827:8;:18;;;31816:30;;;;;;;:::i;:::-;;;31805:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;31811:1;31805:8;;;;;;;:::i;:::-;;;;;:41;;;;31851:1252;;;;;;;;;;;;;;;;;:5;31857:1;31851:8;;;;;;;:::i;:::-;;;;;:1252;;;;33119:11;33131:8;:19;;;33119:32;;;;;;;:::i;:::-;;;33108:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;33114:1;33108:8;;;;;;;:::i;:::-;;;;;:43;;;;33167:12;33180:8;:18;;;33167:32;;;;;;;:::i;:::-;;;33156:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;33162:1;33156:8;;;;;;;:::i;:::-;;;;;:43;;;;33215:11;33227:8;:18;;;33215:31;;;;;;;:::i;:::-;;;33204:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;33210:1;33204:8;;;;;;;:::i;:::-;;;;;:42;;;;33262:11;33274:8;:17;;;33262:30;;;;;;;:::i;:::-;;;33251:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;33257:1;33251:8;;;;;;;:::i;:::-;;;;;:41;;;;33297:66;;;;;;;;;;;;;;;;;:5;33303:1;33297:8;;;;;;;:::i;:::-;;;;;:66;;;;33370:20;33417:5;33423:1;33417:8;;;;;;;:::i;:::-;;;;;;33427:5;33433:1;33427:8;;;;;;;:::i;:::-;;;;;;33437:5;33443:1;33437:8;;;;;;;:::i;:::-;;;;;;33447:5;33453:1;33447:8;;;;;;;:::i;:::-;;;;;;33457:5;33463:1;33457:8;;;;;;;:::i;:::-;;;;;;33467:5;33473:1;33467:8;;;;;;;:::i;:::-;;;;;;33477:5;33483:1;33477:8;;;;;;;:::i;:::-;;;;;;33487:5;33493:1;33487:8;;;;;;;:::i;:::-;;;;;;33497:5;33503:1;33497:8;;;;;;;:::i;:::-;;;;;;33400:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33370:137;;33521:6;33514:13;;;;31497:2035;;;:::o;36024:1184::-;36082:13;36102:11;36116:4;:11;36102:25;;36143:1;36136:3;:8;36132:23;;;36146:9;;;;;;;;;;;;;;;;;36132:23;36162:18;36200:1;36195;36189:3;:7;;;;:::i;:::-;36188:13;;;;:::i;:::-;36183:1;:19;;;;:::i;:::-;36162:40;;36209:19;36254:2;36241:10;:15;;;;:::i;:::-;36231:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36209:48;;36264:18;36285:5;;;;;;;;;;;;;;;;;36264:26;;36339:1;36332:5;36328:13;36375:2;36367:6;36363:15;36405:1;36385:594;36419:3;36416:1;36413:10;36385:594;;;36453:1;36450;36446:9;36441:14;;36499:8;36494:1;36488:4;36484:12;36478:19;36474:34;36567:4;36559:5;36555:2;36551:14;36547:25;36537:8;36533:40;36527:47;36594:3;36591:1;36587:11;36580:18;;36673:4;36664;36656:5;36652:2;36648:14;36644:25;36634:8;36630:40;36624:47;36620:58;36615:3;36611:68;36604:75;;36699:3;36696:1;36692:11;36685:18;;36777:4;36768;36760:5;36757:1;36753:13;36749:24;36739:8;36735:39;36729:46;36725:57;36720:3;36716:67;36709:74;;36803:3;36800:1;36796:11;36789:18;;36873:4;36864;36857:5;36853:16;36843:8;36839:31;36833:38;36829:49;36824:3;36820:59;36813:66;;36901:3;36896;36892:13;36885:20;;36931:3;36920:9;36913:22;36971:1;36960:9;36956:17;36943:30;;36434:545;;36385:594;;;36389:23;37002:1;36997:3;36993:11;37014:1;37009:63;;;;37082:1;37077:61;;;;36986:152;;37009:63;37058:6;37053:3;37049:16;37045:1;37034:9;37030:17;37023:43;37009:63;;37077:61;37126:4;37121:3;37117:14;37113:1;37102:9;37098:17;37091:41;36986:152;;37160:10;37152:6;37145:26;36306:870;;37196:6;37182:21;;;;;;36024:1184;;;;:::o;7471:148::-;7556:4;7589:25;7574:40;;;:11;:40;;;;7567:47;;7471:148;;;:::o;15702:487::-;15819:45;15846:4;15852:2;15856:7;15819:26;:45::i;:::-;15891:1;15875:18;;:4;:18;;;15871:157;;;15901:40;15933:7;15901:31;:40::i;:::-;15871:157;;;15965:2;15957:10;;:4;:10;;;15953:75;;15975:47;16008:4;16014:7;15975:32;:47::i;:::-;15953:75;15871:157;16050:1;16036:16;;:2;:16;;;16032:153;;;16060:45;16097:7;16060:36;:45::i;:::-;16032:153;;;16127:4;16121:10;;:2;:10;;;16117:68;;16139:40;16167:2;16171:7;16139:27;:40::i;:::-;16117:68;16032:153;15702:487;;;:::o;11941:101::-;12011:26;12021:2;12025:7;12011:26;;;;;;;;;;;;:9;:26::i;:::-;11941:101;;:::o;13604:608::-;13732:4;13747:15;:2;:13;;;:15::i;:::-;13743:465;;;13790:2;13774:36;;;13811:12;:10;:12::i;:::-;13825:4;13831:7;13840:5;13774:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13770:404;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14004:1;13987:6;:13;:18;13983:185;;;14015:60;;;;;;;;;;:::i;:::-;;;;;;;;13983:185;14145:6;14139:13;14130:6;14126:2;14122:15;14115:38;13770:404;13895:45;;;13885:55;;;:6;:55;;;;13878:62;;;;;13743:465;14198:4;14191:11;;13604:608;;;;;;;:::o;28816:510::-;28878:7;28892:12;28907:65;28952:17;28961:7;28952:8;:17::i;:::-;28921:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;28907:6;:65::i;:::-;28892:80;;28979:11;29000:2;28993:4;:9;;;;:::i;:::-;28979:23;;29007:10;29039:2;29032:3;:9;;:21;;;;;29051:2;29045:3;:8;29032:21;29028:38;;;29062:1;29057:6;;29028:38;29081:2;29074:3;:9;;:21;;;;;29093:2;29087:3;:8;29074:21;29070:38;;;29104:1;29099:6;;29070:38;29123:2;29116:3;:9;;:21;;;;;29135:2;29129:3;:8;29116:21;29112:38;;;29146:1;29141:6;;29112:38;29165:2;29158:3;:9;;:21;;;;;29177:2;29171:3;:8;29158:21;29154:38;;;29188:1;29183:6;;29154:38;29207:2;29200:3;:9;;:21;;;;;29219:2;29213:3;:8;29200:21;29196:38;;;29230:1;29225:6;;29196:38;29249:2;29242:3;:9;;:21;;;;;29261:2;29255:3;:8;29242:21;29238:38;;;29272:1;29267:6;;29238:38;29291:2;29284:3;:9;29280:26;;29302:1;29297:6;;29280:26;29319:2;29312:9;;;;;28816:510;;;:::o;29331:461::-;29394:7;29408:12;29423:66;29469:17;29478:7;29469:8;:17::i;:::-;29437:50;;;;;;;;:::i;:::-;;;;;;;;;;;;;29423:6;:66::i;:::-;29408:81;;29496:11;29517:3;29510:4;:10;;;;:::i;:::-;29496:24;;29525:10;29557:2;29550:3;:9;;:21;;;;;29569:2;29563:3;:8;29550:21;29546:38;;;29580:1;29575:6;;29546:38;29599:2;29592:3;:9;;:21;;;;;29611:2;29605:3;:8;29592:21;29588:38;;;29622:1;29617:6;;29588:38;29641:2;29634:3;:9;;:21;;;;;29653:2;29647:3;:8;29634:21;29630:38;;;29664:1;29659:6;;29630:38;29683:2;29676:3;:9;29672:26;;;29694:1;29689:6;;29672:26;29713:2;29706:3;:9;;:21;;;;;29725:2;29719:3;:8;29706:21;29702:38;;;29736:1;29731:6;;29702:38;29755:2;29748:3;:9;29744:26;;29766:1;29761:6;;29744:26;29785:2;29778:9;;;;;29331:461;;;:::o;29797:523::-;29859:7;29873:12;29888:65;29933:17;29942:7;29933:8;:17::i;:::-;29902:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;29888:6;:65::i;:::-;29873:80;;29960:11;29981:3;29974:4;:10;;;;:::i;:::-;29960:24;;29989:10;30021:2;30014:3;:9;;:21;;;;;30033:2;30027:3;:8;30014:21;30010:38;;;30044:1;30039:6;;30010:38;30063:2;30056:3;:9;;:22;;;;;30075:3;30069;:9;30056:22;30052:39;;;30087:1;30082:6;;30052:39;30106:3;30099;:10;;:23;;;;;30119:3;30113;:9;30099:23;30095:40;;;30131:1;30126:6;;30095:40;30150:3;30143;:10;;:23;;;;;30163:3;30157;:9;30143:23;30139:40;;;30175:1;30170:6;;30139:40;30194:3;30187;:10;;:23;;;;;30207:3;30201;:9;30187:23;30183:40;;;30219:1;30214:6;;30183:40;30238:3;30231;:10;;:23;;;;;30251:3;30245;:9;30231:23;30227:40;;;30263:1;30258:6;;30227:40;30282:3;30275;:10;30271:27;;30294:1;30289:6;;30271:27;30313:2;30306:9;;;;;29797:523;;;:::o;30325:777::-;30387:7;30401:12;30416:65;30461:17;30470:7;30461:8;:17::i;:::-;30430:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;30416:6;:65::i;:::-;30401:80;;30488:11;30509:3;30502:4;:10;;;;:::i;:::-;30488:24;;30517:10;30549:2;30542:3;:9;;:21;;;;;30561:2;30555:3;:8;30542:21;30538:38;;;30572:1;30567:6;;30538:38;30591:2;30584:3;:9;;:21;;;;;30603:2;30597:3;:8;30584:21;30580:38;;;30614:1;30609:6;;30580:38;30633:2;30626:3;:9;;:21;;;;;30645:2;30639:3;:8;30626:21;30622:38;;;30656:1;30651:6;;30622:38;30675:2;30668:3;:9;;:21;;;;;30687:2;30681:3;:8;30668:21;30664:38;;;30698:1;30693:6;;30664:38;30717:2;30710:3;:9;;:21;;;;;30729:2;30723:3;:8;30710:21;30706:38;;;30740:1;30735:6;;30706:38;30759:2;30752:3;:9;;:21;;;;;30771:2;30765:3;:8;30752:21;30748:38;;;30782:1;30777:6;;30748:38;30801:2;30794:3;:9;;:21;;;;;30813:2;30807:3;:8;30794:21;30790:38;;;30824:1;30819:6;;30790:38;30843:2;30836:3;:9;;:21;;;;;30855:2;30849:3;:8;30836:21;30832:38;;;30866:1;30861:6;;30832:38;30885:2;30878:3;:9;;:22;;;;;30897:3;30891;:9;30878:22;30874:39;;;30909:1;30904:6;;30874:39;30928:3;30921;:10;;:23;;;;;30941:3;30935;:9;30921:23;30917:41;;;30953:2;30948:7;;30917:41;30973:3;30966;:10;;:23;;;;;30986:3;30980;:9;30966:23;30962:41;;;30998:2;30993:7;;30962:41;31018:3;31011;:10;;:23;;;;;31031:3;31025;:9;31011:23;31007:41;;;31043:2;31038:7;;31007:41;31063:3;31056;:10;31052:28;;31075:2;31070:7;;31052:28;31095:2;31088:9;;;;;30325:777;;;:::o;31107:385::-;31168:7;31182:12;31197:64;31241:17;31250:7;31241:8;:17::i;:::-;31211:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;31197:6;:64::i;:::-;31182:79;;31268:11;31289:3;31282:4;:10;;;;:::i;:::-;31268:24;;31297:10;31329:2;31322:3;:9;;:21;;;;;31341:2;31335:3;:8;31322:21;31318:38;;;31352:1;31347:6;;31318:38;31371:2;31364:3;:9;;:21;;;;;31383:2;31377:3;:8;31364:21;31360:38;;;31394:1;31389:6;;31360:38;31413:2;31406:3;:9;;:21;;;;;31425:2;31419:3;:8;31406:21;31402:38;;;31436:1;31431:6;;31402:38;31455:2;31448:3;:9;31444:26;;31466:1;31461:6;;31444:26;31485:2;31478:9;;;;;31107:385;;;:::o;14217:105::-;;;;:::o;16399:149::-;16497:10;:17;;;;16470:15;:24;16486:7;16470:24;;;;;;;;;;;:44;;;;16519:10;16535:7;16519:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16399:149;:::o;16553:491::-;16641:22;16691:1;16666:22;16683:4;16666:16;:22::i;:::-;:26;;;;:::i;:::-;16641:51;;16697:18;16718:17;:26;16736:7;16718:26;;;;;;;;;;;;16697:47;;16769:14;16755:10;:28;16751:203;;16791:19;16813:12;:18;16826:4;16813:18;;;;;;;;;;;;;;;:34;16832:14;16813:34;;;;;;;;;;;;16791:56;;16888:11;16855:12;:18;16868:4;16855:18;;;;;;;;;;;;;;;:30;16874:10;16855:30;;;;;;;;;;;:44;;;;16938:10;16905:17;:30;16923:11;16905:30;;;;;;;;;;;:43;;;;16785:169;16751:203;16967:17;:26;16985:7;16967:26;;;;;;;;;;;16960:33;;;17005:12;:18;17018:4;17005:18;;;;;;;;;;;;;;;:34;17024:14;17005:34;;;;;;;;;;;16998:41;;;16634:410;;16553:491;;:::o;17049:380::-;17127:22;17172:1;17152:10;:17;;;;:21;;;;:::i;:::-;17127:46;;17178:18;17199:15;:24;17215:7;17199:24;;;;;;;;;;;;17178:45;;17228:19;17250:10;17261:14;17250:26;;;;;;;;:::i;:::-;;;;;;;;;;17228:48;;17308:11;17283:10;17294;17283:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;17355:10;17324:15;:28;17340:11;17324:28;;;;;;;;;;;:41;;;;17379:15;:24;17395:7;17379:24;;;;;;;;;;;17372:31;;;17408:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17120:309;;;17049:380;:::o;16194:200::-;16273:14;16290:20;16307:2;16290:16;:20::i;:::-;16273:37;;16342:7;16315:12;:16;16328:2;16315:16;;;;;;;;;;;;;;;:24;16332:6;16315:24;;;;;;;;;;;:34;;;;16383:6;16354:17;:26;16372:7;16354:26;;;;;;;;;;;:35;;;;16268:126;16194:200;;:::o;12047:261::-;12150:18;12156:2;12160:7;12150:5;:18::i;:::-;12186:54;12217:1;12221:2;12225:7;12234:5;12186:22;:54::i;:::-;12173:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;12047:261;;;:::o;4366:162::-;4426:4;4439:12;4491:7;4479:20;4471:28;;4522:1;4515:4;:8;4508:15;;;4366:162;;;:::o;28682:129::-;28742:7;28798:5;28781:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;28771:34;;;;;;28763:43;;28756:50;;28682:129;;;:::o;12313:343::-;12401:1;12387:16;;:2;:16;;;;12379:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;12454:16;12462:7;12454;:16::i;:::-;12453:17;12445:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;12510:45;12539:1;12543:2;12547:7;12510:20;:45::i;:::-;12579:1;12562:9;:13;12572:2;12562:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;12604:2;12585:7;:16;12593:7;12585:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;12643:7;12639:2;12618:33;;12635:1;12618:33;;;;;;;;;;;;12313:343;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;6470:364;;;;:::o;6840:377::-;6946:3;6974:39;7007:5;6974:39;:::i;:::-;7029:89;7111:6;7106:3;7029:89;:::i;:::-;7022:96;;7127:52;7172:6;7167:3;7160:4;7153:5;7149:16;7127:52;:::i;:::-;7204:6;7199:3;7195:16;7188:23;;6950:267;6840:377;;;;:::o;7223:366::-;7365:3;7386:67;7450:2;7445:3;7386:67;:::i;:::-;7379:74;;7462:93;7551:3;7462:93;:::i;:::-;7580:2;7575:3;7571:12;7564:19;;7223:366;;;:::o;7595:::-;7737:3;7758:67;7822:2;7817:3;7758:67;:::i;:::-;7751:74;;7834:93;7923:3;7834:93;:::i;:::-;7952:2;7947:3;7943:12;7936:19;;7595:366;;;:::o;7967:::-;8109:3;8130:67;8194:2;8189:3;8130:67;:::i;:::-;8123:74;;8206:93;8295:3;8206:93;:::i;:::-;8324:2;8319:3;8315:12;8308:19;;7967:366;;;:::o;8339:402::-;8499:3;8520:85;8602:2;8597:3;8520:85;:::i;:::-;8513:92;;8614:93;8703:3;8614:93;:::i;:::-;8732:2;8727:3;8723:12;8716:19;;8339:402;;;:::o;8747:::-;8907:3;8928:85;9010:2;9005:3;8928:85;:::i;:::-;8921:92;;9022:93;9111:3;9022:93;:::i;:::-;9140:2;9135:3;9131:12;9124:19;;8747:402;;;:::o;9155:366::-;9297:3;9318:67;9382:2;9377:3;9318:67;:::i;:::-;9311:74;;9394:93;9483:3;9394:93;:::i;:::-;9512:2;9507:3;9503:12;9496:19;;9155:366;;;:::o;9527:404::-;9687:3;9708:86;9790:3;9785;9708:86;:::i;:::-;9701:93;;9803;9892:3;9803:93;:::i;:::-;9921:3;9916;9912:13;9905:20;;9527:404;;;:::o;9937:400::-;10097:3;10118:84;10200:1;10195:3;10118:84;:::i;:::-;10111:91;;10211:93;10300:3;10211:93;:::i;:::-;10329:1;10324:3;10320:11;10313:18;;9937:400;;;:::o;10343:366::-;10485:3;10506:67;10570:2;10565:3;10506:67;:::i;:::-;10499:74;;10582:93;10671:3;10582:93;:::i;:::-;10700:2;10695:3;10691:12;10684:19;;10343:366;;;:::o;10715:::-;10857:3;10878:67;10942:2;10937:3;10878:67;:::i;:::-;10871:74;;10954:93;11043:3;10954:93;:::i;:::-;11072:2;11067:3;11063:12;11056:19;;10715:366;;;:::o;11087:402::-;11247:3;11268:85;11350:2;11345:3;11268:85;:::i;:::-;11261:92;;11362:93;11451:3;11362:93;:::i;:::-;11480:2;11475:3;11471:12;11464:19;;11087:402;;;:::o;11495:366::-;11637:3;11658:67;11722:2;11717:3;11658:67;:::i;:::-;11651:74;;11734:93;11823:3;11734:93;:::i;:::-;11852:2;11847:3;11843:12;11836:19;;11495:366;;;:::o;11867:::-;12009:3;12030:67;12094:2;12089:3;12030:67;:::i;:::-;12023:74;;12106:93;12195:3;12106:93;:::i;:::-;12224:2;12219:3;12215:12;12208:19;;11867:366;;;:::o;12239:::-;12381:3;12402:67;12466:2;12461:3;12402:67;:::i;:::-;12395:74;;12478:93;12567:3;12478:93;:::i;:::-;12596:2;12591:3;12587:12;12580:19;;12239:366;;;:::o;12611:::-;12753:3;12774:67;12838:2;12833:3;12774:67;:::i;:::-;12767:74;;12850:93;12939:3;12850:93;:::i;:::-;12968:2;12963:3;12959:12;12952:19;;12611:366;;;:::o;12983:::-;13125:3;13146:67;13210:2;13205:3;13146:67;:::i;:::-;13139:74;;13222:93;13311:3;13222:93;:::i;:::-;13340:2;13335:3;13331:12;13324:19;;12983:366;;;:::o;13355:402::-;13515:3;13536:85;13618:2;13613:3;13536:85;:::i;:::-;13529:92;;13630:93;13719:3;13630:93;:::i;:::-;13748:2;13743:3;13739:12;13732:19;;13355:402;;;:::o;13763:366::-;13905:3;13926:67;13990:2;13985:3;13926:67;:::i;:::-;13919:74;;14002:93;14091:3;14002:93;:::i;:::-;14120:2;14115:3;14111:12;14104:19;;13763:366;;;:::o;14135:400::-;14295:3;14316:84;14398:1;14393:3;14316:84;:::i;:::-;14309:91;;14409:93;14498:3;14409:93;:::i;:::-;14527:1;14522:3;14518:11;14511:18;;14135:400;;;:::o;14541:366::-;14683:3;14704:67;14768:2;14763:3;14704:67;:::i;:::-;14697:74;;14780:93;14869:3;14780:93;:::i;:::-;14898:2;14893:3;14889:12;14882:19;;14541:366;;;:::o;14913:::-;15055:3;15076:67;15140:2;15135:3;15076:67;:::i;:::-;15069:74;;15152:93;15241:3;15152:93;:::i;:::-;15270:2;15265:3;15261:12;15254:19;;14913:366;;;:::o;15285:402::-;15445:3;15466:85;15548:2;15543:3;15466:85;:::i;:::-;15459:92;;15560:93;15649:3;15560:93;:::i;:::-;15678:2;15673:3;15669:12;15662:19;;15285:402;;;:::o;15693:366::-;15835:3;15856:67;15920:2;15915:3;15856:67;:::i;:::-;15849:74;;15932:93;16021:3;15932:93;:::i;:::-;16050:2;16045:3;16041:12;16034:19;;15693:366;;;:::o;16065:::-;16207:3;16228:67;16292:2;16287:3;16228:67;:::i;:::-;16221:74;;16304:93;16393:3;16304:93;:::i;:::-;16422:2;16417:3;16413:12;16406:19;;16065:366;;;:::o;16437:::-;16579:3;16600:67;16664:2;16659:3;16600:67;:::i;:::-;16593:74;;16676:93;16765:3;16676:93;:::i;:::-;16794:2;16789:3;16785:12;16778:19;;16437:366;;;:::o;16809:::-;16951:3;16972:67;17036:2;17031:3;16972:67;:::i;:::-;16965:74;;17048:93;17137:3;17048:93;:::i;:::-;17166:2;17161:3;17157:12;17150:19;;16809:366;;;:::o;17181:::-;17323:3;17344:67;17408:2;17403:3;17344:67;:::i;:::-;17337:74;;17420:93;17509:3;17420:93;:::i;:::-;17538:2;17533:3;17529:12;17522:19;;17181:366;;;:::o;17553:402::-;17713:3;17734:85;17816:2;17811:3;17734:85;:::i;:::-;17727:92;;17828:93;17917:3;17828:93;:::i;:::-;17946:2;17941:3;17937:12;17930:19;;17553:402;;;:::o;17961:366::-;18103:3;18124:67;18188:2;18183:3;18124:67;:::i;:::-;18117:74;;18200:93;18289:3;18200:93;:::i;:::-;18318:2;18313:3;18309:12;18302:19;;17961:366;;;:::o;18333:::-;18475:3;18496:67;18560:2;18555:3;18496:67;:::i;:::-;18489:74;;18572:93;18661:3;18572:93;:::i;:::-;18690:2;18685:3;18681:12;18674:19;;18333:366;;;:::o;18705:402::-;18865:3;18886:85;18968:2;18963:3;18886:85;:::i;:::-;18879:92;;18980:93;19069:3;18980:93;:::i;:::-;19098:2;19093:3;19089:12;19082:19;;18705:402;;;:::o;19113:366::-;19255:3;19276:67;19340:2;19335:3;19276:67;:::i;:::-;19269:74;;19352:93;19441:3;19352:93;:::i;:::-;19470:2;19465:3;19461:12;19454:19;;19113:366;;;:::o;19485:118::-;19572:24;19590:5;19572:24;:::i;:::-;19567:3;19560:37;19485:118;;:::o;19609:275::-;19741:3;19763:95;19854:3;19845:6;19763:95;:::i;:::-;19756:102;;19875:3;19868:10;;19609:275;;;;:::o;19890:1235::-;20310:3;20332:95;20423:3;20414:6;20332:95;:::i;:::-;20325:102;;20444:95;20535:3;20526:6;20444:95;:::i;:::-;20437:102;;20556:95;20647:3;20638:6;20556:95;:::i;:::-;20549:102;;20668:95;20759:3;20750:6;20668:95;:::i;:::-;20661:102;;20780:95;20871:3;20862:6;20780:95;:::i;:::-;20773:102;;20892:95;20983:3;20974:6;20892:95;:::i;:::-;20885:102;;21004:95;21095:3;21086:6;21004:95;:::i;:::-;20997:102;;21116:3;21109:10;;19890:1235;;;;;;;;;;:::o;21131:1395::-;21599:3;21621:95;21712:3;21703:6;21621:95;:::i;:::-;21614:102;;21733:95;21824:3;21815:6;21733:95;:::i;:::-;21726:102;;21845:95;21936:3;21927:6;21845:95;:::i;:::-;21838:102;;21957:95;22048:3;22039:6;21957:95;:::i;:::-;21950:102;;22069:95;22160:3;22151:6;22069:95;:::i;:::-;22062:102;;22181:95;22272:3;22263:6;22181:95;:::i;:::-;22174:102;;22293:95;22384:3;22375:6;22293:95;:::i;:::-;22286:102;;22405:95;22496:3;22487:6;22405:95;:::i;:::-;22398:102;;22517:3;22510:10;;21131:1395;;;;;;;;;;;:::o;22532:1555::-;23048:3;23070:95;23161:3;23152:6;23070:95;:::i;:::-;23063:102;;23182:95;23273:3;23264:6;23182:95;:::i;:::-;23175:102;;23294:95;23385:3;23376:6;23294:95;:::i;:::-;23287:102;;23406:95;23497:3;23488:6;23406:95;:::i;:::-;23399:102;;23518:95;23609:3;23600:6;23518:95;:::i;:::-;23511:102;;23630:95;23721:3;23712:6;23630:95;:::i;:::-;23623:102;;23742:95;23833:3;23824:6;23742:95;:::i;:::-;23735:102;;23854:95;23945:3;23936:6;23854:95;:::i;:::-;23847:102;;23966:95;24057:3;24048:6;23966:95;:::i;:::-;23959:102;;24078:3;24071:10;;22532:1555;;;;;;;;;;;;:::o;24093:541::-;24326:3;24348:148;24492:3;24348:148;:::i;:::-;24341:155;;24513:95;24604:3;24595:6;24513:95;:::i;:::-;24506:102;;24625:3;24618:10;;24093:541;;;;:::o;24640:::-;24873:3;24895:148;25039:3;24895:148;:::i;:::-;24888:155;;25060:95;25151:3;25142:6;25060:95;:::i;:::-;25053:102;;25172:3;25165:10;;24640:541;;;;:::o;25187:::-;25420:3;25442:148;25586:3;25442:148;:::i;:::-;25435:155;;25607:95;25698:3;25689:6;25607:95;:::i;:::-;25600:102;;25719:3;25712:10;;25187:541;;;;:::o;25734:::-;25967:3;25989:148;26133:3;25989:148;:::i;:::-;25982:155;;26154:95;26245:3;26236:6;26154:95;:::i;:::-;26147:102;;26266:3;26259:10;;25734:541;;;;:::o;26281:1659::-;26913:3;26935:148;27079:3;26935:148;:::i;:::-;26928:155;;27100:95;27191:3;27182:6;27100:95;:::i;:::-;27093:102;;27212:148;27356:3;27212:148;:::i;:::-;27205:155;;27377:95;27468:3;27459:6;27377:95;:::i;:::-;27370:102;;27489:148;27633:3;27489:148;:::i;:::-;27482:155;;27654:95;27745:3;27736:6;27654:95;:::i;:::-;27647:102;;27766:148;27910:3;27766:148;:::i;:::-;27759:155;;27931:3;27924:10;;26281:1659;;;;;;:::o;27946:541::-;28179:3;28201:148;28345:3;28201:148;:::i;:::-;28194:155;;28366:95;28457:3;28448:6;28366:95;:::i;:::-;28359:102;;28478:3;28471:10;;27946:541;;;;:::o;28493:::-;28726:3;28748:148;28892:3;28748:148;:::i;:::-;28741:155;;28913:95;29004:3;28995:6;28913:95;:::i;:::-;28906:102;;29025:3;29018:10;;28493:541;;;;:::o;29040:222::-;29133:4;29171:2;29160:9;29156:18;29148:26;;29184:71;29252:1;29241:9;29237:17;29228:6;29184:71;:::i;:::-;29040:222;;;;:::o;29268:640::-;29463:4;29501:3;29490:9;29486:19;29478:27;;29515:71;29583:1;29572:9;29568:17;29559:6;29515:71;:::i;:::-;29596:72;29664:2;29653:9;29649:18;29640:6;29596:72;:::i;:::-;29678;29746:2;29735:9;29731:18;29722:6;29678:72;:::i;:::-;29797:9;29791:4;29787:20;29782:2;29771:9;29767:18;29760:48;29825:76;29896:4;29887:6;29825:76;:::i;:::-;29817:84;;29268:640;;;;;;;:::o;29914:210::-;30001:4;30039:2;30028:9;30024:18;30016:26;;30052:65;30114:1;30103:9;30099:17;30090:6;30052:65;:::i;:::-;29914:210;;;;:::o;30130:313::-;30243:4;30281:2;30270:9;30266:18;30258:26;;30330:9;30324:4;30320:20;30316:1;30305:9;30301:17;30294:47;30358:78;30431:4;30422:6;30358:78;:::i;:::-;30350:86;;30130:313;;;;:::o;30449:419::-;30615:4;30653:2;30642:9;30638:18;30630:26;;30702:9;30696:4;30692:20;30688:1;30677:9;30673:17;30666:47;30730:131;30856:4;30730:131;:::i;:::-;30722:139;;30449:419;;;:::o;30874:::-;31040:4;31078:2;31067:9;31063:18;31055:26;;31127:9;31121:4;31117:20;31113:1;31102:9;31098:17;31091:47;31155:131;31281:4;31155:131;:::i;:::-;31147:139;;30874:419;;;:::o;31299:::-;31465:4;31503:2;31492:9;31488:18;31480:26;;31552:9;31546:4;31542:20;31538:1;31527:9;31523:17;31516:47;31580:131;31706:4;31580:131;:::i;:::-;31572:139;;31299:419;;;:::o;31724:::-;31890:4;31928:2;31917:9;31913:18;31905:26;;31977:9;31971:4;31967:20;31963:1;31952:9;31948:17;31941:47;32005:131;32131:4;32005:131;:::i;:::-;31997:139;;31724:419;;;:::o;32149:::-;32315:4;32353:2;32342:9;32338:18;32330:26;;32402:9;32396:4;32392:20;32388:1;32377:9;32373:17;32366:47;32430:131;32556:4;32430:131;:::i;:::-;32422:139;;32149:419;;;:::o;32574:::-;32740:4;32778:2;32767:9;32763:18;32755:26;;32827:9;32821:4;32817:20;32813:1;32802:9;32798:17;32791:47;32855:131;32981:4;32855:131;:::i;:::-;32847:139;;32574:419;;;:::o;32999:::-;33165:4;33203:2;33192:9;33188:18;33180:26;;33252:9;33246:4;33242:20;33238:1;33227:9;33223:17;33216:47;33280:131;33406:4;33280:131;:::i;:::-;33272:139;;32999:419;;;:::o;33424:::-;33590:4;33628:2;33617:9;33613:18;33605:26;;33677:9;33671:4;33667:20;33663:1;33652:9;33648:17;33641:47;33705:131;33831:4;33705:131;:::i;:::-;33697:139;;33424:419;;;:::o;33849:::-;34015:4;34053:2;34042:9;34038:18;34030:26;;34102:9;34096:4;34092:20;34088:1;34077:9;34073:17;34066:47;34130:131;34256:4;34130:131;:::i;:::-;34122:139;;33849:419;;;:::o;34274:::-;34440:4;34478:2;34467:9;34463:18;34455:26;;34527:9;34521:4;34517:20;34513:1;34502:9;34498:17;34491:47;34555:131;34681:4;34555:131;:::i;:::-;34547:139;;34274:419;;;:::o;34699:::-;34865:4;34903:2;34892:9;34888:18;34880:26;;34952:9;34946:4;34942:20;34938:1;34927:9;34923:17;34916:47;34980:131;35106:4;34980:131;:::i;:::-;34972:139;;34699:419;;;:::o;35124:::-;35290:4;35328:2;35317:9;35313:18;35305:26;;35377:9;35371:4;35367:20;35363:1;35352:9;35348:17;35341:47;35405:131;35531:4;35405:131;:::i;:::-;35397:139;;35124:419;;;:::o;35549:::-;35715:4;35753:2;35742:9;35738:18;35730:26;;35802:9;35796:4;35792:20;35788:1;35777:9;35773:17;35766:47;35830:131;35956:4;35830:131;:::i;:::-;35822:139;;35549:419;;;:::o;35974:::-;36140:4;36178:2;36167:9;36163:18;36155:26;;36227:9;36221:4;36217:20;36213:1;36202:9;36198:17;36191:47;36255:131;36381:4;36255:131;:::i;:::-;36247:139;;35974:419;;;:::o;36399:::-;36565:4;36603:2;36592:9;36588:18;36580:26;;36652:9;36646:4;36642:20;36638:1;36627:9;36623:17;36616:47;36680:131;36806:4;36680:131;:::i;:::-;36672:139;;36399:419;;;:::o;36824:::-;36990:4;37028:2;37017:9;37013:18;37005:26;;37077:9;37071:4;37067:20;37063:1;37052:9;37048:17;37041:47;37105:131;37231:4;37105:131;:::i;:::-;37097:139;;36824:419;;;:::o;37249:::-;37415:4;37453:2;37442:9;37438:18;37430:26;;37502:9;37496:4;37492:20;37488:1;37477:9;37473:17;37466:47;37530:131;37656:4;37530:131;:::i;:::-;37522:139;;37249:419;;;:::o;37674:::-;37840:4;37878:2;37867:9;37863:18;37855:26;;37927:9;37921:4;37917:20;37913:1;37902:9;37898:17;37891:47;37955:131;38081:4;37955:131;:::i;:::-;37947:139;;37674:419;;;:::o;38099:::-;38265:4;38303:2;38292:9;38288:18;38280:26;;38352:9;38346:4;38342:20;38338:1;38327:9;38323:17;38316:47;38380:131;38506:4;38380:131;:::i;:::-;38372:139;;38099:419;;;:::o;38524:::-;38690:4;38728:2;38717:9;38713:18;38705:26;;38777:9;38771:4;38767:20;38763:1;38752:9;38748:17;38741:47;38805:131;38931:4;38805:131;:::i;:::-;38797:139;;38524:419;;;:::o;38949:::-;39115:4;39153:2;39142:9;39138:18;39130:26;;39202:9;39196:4;39192:20;39188:1;39177:9;39173:17;39166:47;39230:131;39356:4;39230:131;:::i;:::-;39222:139;;38949:419;;;:::o;39374:::-;39540:4;39578:2;39567:9;39563:18;39555:26;;39627:9;39621:4;39617:20;39613:1;39602:9;39598:17;39591:47;39655:131;39781:4;39655:131;:::i;:::-;39647:139;;39374:419;;;:::o;39799:222::-;39892:4;39930:2;39919:9;39915:18;39907:26;;39943:71;40011:1;40000:9;39996:17;39987:6;39943:71;:::i;:::-;39799:222;;;;:::o;40027:129::-;40061:6;40088:20;;:::i;:::-;40078:30;;40117:33;40145:4;40137:6;40117:33;:::i;:::-;40027:129;;;:::o;40162:75::-;40195:6;40228:2;40222:9;40212:19;;40162:75;:::o;40243:307::-;40304:4;40394:18;40386:6;40383:30;40380:56;;;40416:18;;:::i;:::-;40380:56;40454:29;40476:6;40454:29;:::i;:::-;40446:37;;40538:4;40532;40528:15;40520:23;;40243:307;;;:::o;40556:98::-;40607:6;40641:5;40635:12;40625:22;;40556:98;;;:::o;40660:99::-;40712:6;40746:5;40740:12;40730:22;;40660:99;;;:::o;40765:168::-;40848:11;40882:6;40877:3;40870:19;40922:4;40917:3;40913:14;40898:29;;40765:168;;;;:::o;40939:169::-;41023:11;41057:6;41052:3;41045:19;41097:4;41092:3;41088:14;41073:29;;40939:169;;;;:::o;41114:148::-;41216:11;41253:3;41238:18;;41114:148;;;;:::o;41268:305::-;41308:3;41327:20;41345:1;41327:20;:::i;:::-;41322:25;;41361:20;41379:1;41361:20;:::i;:::-;41356:25;;41515:1;41447:66;41443:74;41440:1;41437:81;41434:107;;;41521:18;;:::i;:::-;41434:107;41565:1;41562;41558:9;41551:16;;41268:305;;;;:::o;41579:185::-;41619:1;41636:20;41654:1;41636:20;:::i;:::-;41631:25;;41670:20;41688:1;41670:20;:::i;:::-;41665:25;;41709:1;41699:35;;41714:18;;:::i;:::-;41699:35;41756:1;41753;41749:9;41744:14;;41579:185;;;;:::o;41770:348::-;41810:7;41833:20;41851:1;41833:20;:::i;:::-;41828:25;;41867:20;41885:1;41867:20;:::i;:::-;41862:25;;42055:1;41987:66;41983:74;41980:1;41977:81;41972:1;41965:9;41958:17;41954:105;41951:131;;;42062:18;;:::i;:::-;41951:131;42110:1;42107;42103:9;42092:20;;41770:348;;;;:::o;42124:191::-;42164:4;42184:20;42202:1;42184:20;:::i;:::-;42179:25;;42218:20;42236:1;42218:20;:::i;:::-;42213:25;;42257:1;42254;42251:8;42248:34;;;42262:18;;:::i;:::-;42248:34;42307:1;42304;42300:9;42292:17;;42124:191;;;;:::o;42321:96::-;42358:7;42387:24;42405:5;42387:24;:::i;:::-;42376:35;;42321:96;;;:::o;42423:90::-;42457:7;42500:5;42493:13;42486:21;42475:32;;42423:90;;;:::o;42519:149::-;42555:7;42595:66;42588:5;42584:78;42573:89;;42519:149;;;:::o;42674:126::-;42711:7;42751:42;42744:5;42740:54;42729:65;;42674:126;;;:::o;42806:77::-;42843:7;42872:5;42861:16;;42806:77;;;:::o;42889:154::-;42973:6;42968:3;42963;42950:30;43035:1;43026:6;43021:3;43017:16;43010:27;42889:154;;;:::o;43049:307::-;43117:1;43127:113;43141:6;43138:1;43135:13;43127:113;;;43226:1;43221:3;43217:11;43211:18;43207:1;43202:3;43198:11;43191:39;43163:2;43160:1;43156:10;43151:15;;43127:113;;;43258:6;43255:1;43252:13;43249:101;;;43338:1;43329:6;43324:3;43320:16;43313:27;43249:101;43098:258;43049:307;;;:::o;43362:320::-;43406:6;43443:1;43437:4;43433:12;43423:22;;43490:1;43484:4;43480:12;43511:18;43501:81;;43567:4;43559:6;43555:17;43545:27;;43501:81;43629:2;43621:6;43618:14;43598:18;43595:38;43592:84;;;43648:18;;:::i;:::-;43592:84;43413:269;43362:320;;;:::o;43688:281::-;43771:27;43793:4;43771:27;:::i;:::-;43763:6;43759:40;43901:6;43889:10;43886:22;43865:18;43853:10;43850:34;43847:62;43844:88;;;43912:18;;:::i;:::-;43844:88;43952:10;43948:2;43941:22;43731:238;43688:281;;:::o;43975:233::-;44014:3;44037:24;44055:5;44037:24;:::i;:::-;44028:33;;44083:66;44076:5;44073:77;44070:103;;;44153:18;;:::i;:::-;44070:103;44200:1;44193:5;44189:13;44182:20;;43975:233;;;:::o;44214:176::-;44246:1;44263:20;44281:1;44263:20;:::i;:::-;44258:25;;44297:20;44315:1;44297:20;:::i;:::-;44292:25;;44336:1;44326:35;;44341:18;;:::i;:::-;44326:35;44382:1;44379;44375:9;44370:14;;44214:176;;;;:::o;44396:180::-;44444:77;44441:1;44434:88;44541:4;44538:1;44531:15;44565:4;44562:1;44555:15;44582:180;44630:77;44627:1;44620:88;44727:4;44724:1;44717:15;44751:4;44748:1;44741:15;44768:180;44816:77;44813:1;44806:88;44913:4;44910:1;44903:15;44937:4;44934:1;44927:15;44954:180;45002:77;44999:1;44992:88;45099:4;45096:1;45089:15;45123:4;45120:1;45113:15;45140:180;45188:77;45185:1;45178:88;45285:4;45282:1;45275:15;45309:4;45306:1;45299:15;45326:180;45374:77;45371:1;45364:88;45471:4;45468:1;45461:15;45495:4;45492:1;45485:15;45512:117;45621:1;45618;45611:12;45635:117;45744:1;45741;45734:12;45758:117;45867:1;45864;45857:12;45881:117;45990:1;45987;45980:12;46004:102;46045:6;46096:2;46092:7;46087:2;46080:5;46076:14;46072:28;46062:38;;46004:102;;;:::o;46112:230::-;46252:34;46248:1;46240:6;46236:14;46229:58;46321:13;46316:2;46308:6;46304:15;46297:38;46112:230;:::o;46348:237::-;46488:34;46484:1;46476:6;46472:14;46465:58;46557:20;46552:2;46544:6;46540:15;46533:45;46348:237;:::o;46591:225::-;46731:34;46727:1;46719:6;46715:14;46708:58;46800:8;46795:2;46787:6;46783:15;46776:33;46591:225;:::o;46822:161::-;46962:13;46958:1;46950:6;46946:14;46939:37;46822:161;:::o;46989:160::-;47129:12;47125:1;47117:6;47113:14;47106:36;46989:160;:::o;47155:178::-;47295:30;47291:1;47283:6;47279:14;47272:54;47155:178;:::o;47339:663::-;47479:66;47475:1;47467:6;47463:14;47456:90;47580:34;47575:2;47567:6;47563:15;47556:59;47649:34;47644:2;47636:6;47632:15;47625:59;47718:34;47713:2;47705:6;47701:15;47694:59;47788:34;47782:3;47774:6;47770:16;47763:60;47858:34;47852:3;47844:6;47840:16;47833:60;47928:66;47922:3;47914:6;47910:16;47903:92;47339:663;:::o;48008:159::-;48148:11;48144:1;48136:6;48132:14;48125:35;48008:159;:::o;48173:223::-;48313:34;48309:1;48301:6;48297:14;48290:58;48382:6;48377:2;48369:6;48365:15;48358:31;48173:223;:::o;48402:175::-;48542:27;48538:1;48530:6;48526:14;48519:51;48402:175;:::o;48583:160::-;48723:12;48719:1;48711:6;48707:14;48700:36;48583:160;:::o;48749:231::-;48889:34;48885:1;48877:6;48873:14;48866:58;48958:14;48953:2;48945:6;48941:15;48934:39;48749:231;:::o;48986:243::-;49126:34;49122:1;49114:6;49110:14;49103:58;49195:26;49190:2;49182:6;49178:15;49171:51;48986:243;:::o;49235:229::-;49375:34;49371:1;49363:6;49359:14;49352:58;49444:12;49439:2;49431:6;49427:15;49420:37;49235:229;:::o;49470:228::-;49610:34;49606:1;49598:6;49594:14;49587:58;49679:11;49674:2;49666:6;49662:15;49655:36;49470:228;:::o;49704:181::-;49844:33;49840:1;49832:6;49828:14;49821:57;49704:181;:::o;49891:255::-;50031:66;50027:1;50019:6;50015:14;50008:90;50132:6;50127:2;50119:6;50115:15;50108:31;49891:255;:::o;50152:236::-;50292:34;50288:1;50280:6;50276:14;50269:58;50361:19;50356:2;50348:6;50344:15;50337:44;50152:236;:::o;50394:214::-;50534:66;50530:1;50522:6;50518:14;50511:90;50394:214;:::o;50614:182::-;50754:34;50750:1;50742:6;50738:14;50731:58;50614:182;:::o;50802:173::-;50942:25;50938:1;50930:6;50926:14;50919:49;50802:173;:::o;50981:214::-;51121:66;51117:1;51109:6;51105:14;51098:90;50981:214;:::o;51201:231::-;51341:34;51337:1;51329:6;51325:14;51318:58;51410:14;51405:2;51397:6;51393:15;51386:39;51201:231;:::o;51438:182::-;51578:34;51574:1;51566:6;51562:14;51555:58;51438:182;:::o;51626:228::-;51766:34;51762:1;51754:6;51750:14;51743:58;51835:11;51830:2;51822:6;51818:15;51811:36;51626:228;:::o;51860:178::-;52000:30;51996:1;51988:6;51984:14;51977:54;51860:178;:::o;52044:220::-;52184:34;52180:1;52172:6;52168:14;52161:58;52253:3;52248:2;52240:6;52236:15;52229:28;52044:220;:::o;52270:179::-;52410:31;52406:1;52398:6;52394:14;52387:55;52270:179;:::o;52455:236::-;52595:34;52591:1;52583:6;52579:14;52572:58;52664:19;52659:2;52651:6;52647:15;52640:44;52455:236;:::o;52697:231::-;52837:34;52833:1;52825:6;52821:14;52814:58;52906:14;52901:2;52893:6;52889:15;52882:39;52697:231;:::o;52934:160::-;53074:12;53070:1;53062:6;53058:14;53051:36;52934:160;:::o;53100:177::-;53240:29;53236:1;53228:6;53224:14;53217:53;53100:177;:::o;53283:122::-;53356:24;53374:5;53356:24;:::i;:::-;53349:5;53346:35;53336:63;;53395:1;53392;53385:12;53336:63;53283:122;:::o;53411:116::-;53481:21;53496:5;53481:21;:::i;:::-;53474:5;53471:32;53461:60;;53517:1;53514;53507:12;53461:60;53411:116;:::o;53533:120::-;53605:23;53622:5;53605:23;:::i;:::-;53598:5;53595:34;53585:62;;53643:1;53640;53633:12;53585:62;53533:120;:::o;53659:122::-;53732:24;53750:5;53732:24;:::i;:::-;53725:5;53722:35;53712:63;;53771:1;53768;53761:12;53712:63;53659:122;:::o

Swarm Source

ipfs://60ea47e9c05d32ad382f38078778bbc62187432af86d400309c8aeab12dfa219
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.