Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 509 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw All | 14690338 | 932 days ago | IN | 0 ETH | 0.00361637 | ||||
Mint Preorder | 14674671 | 934 days ago | IN | 0 ETH | 0.00520099 | ||||
Set Status Preor... | 14671966 | 934 days ago | IN | 0 ETH | 0.00085984 | ||||
Preorder | 14668627 | 935 days ago | IN | 0.07 ETH | 0.00308582 | ||||
Cancel Preorder | 14668198 | 935 days ago | IN | 0 ETH | 0.00335199 | ||||
Cancel Preorder | 14667188 | 935 days ago | IN | 0 ETH | 0.00280478 | ||||
Cancel Preorder | 14666505 | 935 days ago | IN | 0 ETH | 0.00154548 | ||||
Cancel Preorder | 14664484 | 936 days ago | IN | 0 ETH | 0.00127557 | ||||
Cancel Preorder | 14664479 | 936 days ago | IN | 0 ETH | 0.00143676 | ||||
Cancel Preorder | 14662231 | 936 days ago | IN | 0 ETH | 0.00197566 | ||||
Set Status Preor... | 14661685 | 936 days ago | IN | 0 ETH | 0.00329668 | ||||
Set Base URI | 14660501 | 936 days ago | IN | 0 ETH | 0.00116344 | ||||
Set Status Preor... | 14660213 | 936 days ago | IN | 0 ETH | 0.00088364 | ||||
Cancel Preorder | 14660142 | 936 days ago | IN | 0 ETH | 0.00103695 | ||||
Cancel Preorder | 14660125 | 936 days ago | IN | 0 ETH | 0.00103492 | ||||
Preorder | 14660037 | 936 days ago | IN | 0.21 ETH | 0.0023163 | ||||
Preorder | 14659997 | 936 days ago | IN | 0.21 ETH | 0.00253149 | ||||
Cancel Preorder | 14659225 | 936 days ago | IN | 0 ETH | 0.00103461 | ||||
Cancel Preorder | 14654802 | 937 days ago | IN | 0 ETH | 0.00483474 | ||||
Cancel Preorder | 14648920 | 938 days ago | IN | 0 ETH | 0.00289777 | ||||
Cancel Preorder | 14646268 | 938 days ago | IN | 0 ETH | 0.00083052 | ||||
Cancel Preorder | 14645803 | 939 days ago | IN | 0 ETH | 0.00077917 | ||||
Cancel Preorder | 14645719 | 939 days ago | IN | 0 ETH | 0.00087213 | ||||
Cancel Preorder | 14643117 | 939 days ago | IN | 0 ETH | 0.00161696 | ||||
Cancel Preorder | 14641652 | 939 days ago | IN | 0 ETH | 0.00283157 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14690338 | 932 days ago | 8.855 ETH | ||||
14690338 | 932 days ago | 8.855 ETH | ||||
14668198 | 935 days ago | 0.21 ETH | ||||
14667188 | 935 days ago | 0.21 ETH | ||||
14666505 | 935 days ago | 0.21 ETH | ||||
14664484 | 936 days ago | 0.21 ETH | ||||
14664479 | 936 days ago | 0.14 ETH | ||||
14662231 | 936 days ago | 0.07 ETH | ||||
14660142 | 936 days ago | 0.21 ETH | ||||
14660125 | 936 days ago | 0.21 ETH | ||||
14659225 | 936 days ago | 0.07 ETH | ||||
14654802 | 937 days ago | 0.07 ETH | ||||
14648920 | 938 days ago | 0.21 ETH | ||||
14646268 | 938 days ago | 0.07 ETH | ||||
14645803 | 939 days ago | 0.14 ETH | ||||
14645719 | 939 days ago | 0.21 ETH | ||||
14643117 | 939 days ago | 0.21 ETH | ||||
14641652 | 939 days ago | 0.07 ETH | ||||
14641052 | 939 days ago | 0.21 ETH | ||||
14636142 | 940 days ago | 0.07 ETH | ||||
14636091 | 940 days ago | 0.21 ETH | ||||
14634386 | 940 days ago | 0.21 ETH | ||||
14632408 | 941 days ago | 0.21 ETH | ||||
14632402 | 941 days ago | 0.21 ETH | ||||
14632391 | 941 days ago | 0.21 ETH |
Loading...
Loading
Contract Name:
Taiketsu
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; 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); } } 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; } 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 ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface 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); } interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } 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 { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { mapping(address => mapping(uint256 => uint256)) private _ownedTokens; mapping(uint256 => uint256) private _ownedTokensIndex; uint256[] private _allTokens; mapping(uint256 => uint256) private _allTokensIndex; function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _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(); } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ 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())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ 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("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract ERC721Holder is IERC721Receiver { function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } contract Taiketsu is ERC721A, ERC721Holder, Ownable, ReentrancyGuard{ using Strings for uint256; uint public MAX_TOKENS = 10000; uint public MAX_TOKENS_IN_TX = 10; uint public PRICE_PUBLIC = 0.1 ether; uint public PRICE_PRESALE = 0.07 ether; uint public PRICE_PREORDER = 0.07 ether; uint public MAX_RESERVED_FOR_PREORDER = 5000; uint public MAX_PREORDERS = 3; uint public MAX_PRESALES = 3; uint public saleStatus = 0; // 0 - paused, 1 - public sales, 2 - pre-sales bool public preorderStatus = true; string private _baseTokenURI; mapping(address => uint256) private presales; mapping(address => uint256) private preorders; uint public preordersCounter; bytes32 public merkleRoot; constructor() ERC721A("Taiketsu", "Taiketsu", MAX_TOKENS_IN_TX, MAX_TOKENS) { } function mint(uint256 _count) public payable nonReentrant { require(totalSupply() < MAX_TOKENS, "Sale end"); require(saleStatus == 1, "Public sales is closed"); require(totalSupply() + _count <= MAX_TOKENS - preordersCounter, "Exceeds MAX limit"); require(_count <= MAX_TOKENS_IN_TX, "Exceeds TX limit"); require(msg.value == _count * PRICE_PUBLIC, "Value below price"); _safeMint(_msgSender(), _count); } function presale(uint256 _count, bytes32[] calldata _merkleProof) public payable nonReentrant { require(totalSupply() < MAX_TOKENS, "Sale end"); require(saleStatus == 2, "Presale is closed"); require(_count <= MAX_PRESALES - presales[_msgSender()], "Insufficient mints left"); require(_verify(_merkleProof, _msgSender()), "Invalid proof"); require(msg.value == PRICE_PRESALE * _count, "Value below price"); presales[_msgSender()] += _count; _safeMint(_msgSender(), _count); } function preorder(uint _count) public payable nonReentrant { require(totalSupply() < MAX_TOKENS, "Sale end"); require(preordersCounter < MAX_RESERVED_FOR_PREORDER, "Exceeds Pre-Orders limit"); require(preorderStatus, "Preorders is not active"); require(totalSupply() + _count <= MAX_TOKENS - preordersCounter, "Exceeds MAX limit"); require(preorders[msg.sender] + _count <= MAX_PREORDERS, "Exceeds preorder limit"); require(msg.value == _count * PRICE_PREORDER, "Value below price"); preorders[msg.sender] += _count; preordersCounter += _count; } function cancelPreorder() public { require(preorderStatus, "Preorders is not active"); require(preorders[msg.sender] > 0, "No preorders"); require(payable(msg.sender).send(preorders[msg.sender] * PRICE_PREORDER)); preordersCounter -= preorders[msg.sender]; preorders[msg.sender] = 0; } function mintPreorder() public { require(totalSupply() < MAX_TOKENS, "Sale end"); require(!preorderStatus, "Distribution closed"); require(preorders[msg.sender] > 0, "No preorders"); _safeMint(msg.sender, preorders[msg.sender]); preordersCounter -= preorders[msg.sender]; preorders[msg.sender] = 0; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function preordersAtAddress(address _address) external view returns(uint256) { return preorders[_address]; } function presalesAtAddress(address _address) external view returns(uint256) { return presales[_address]; } function tokensOfOwner(address _owner) external view returns(uint256[] memory) { uint tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function _verify(bytes32[] calldata merkleProof, address sender) private view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(sender)); return MerkleProof.verify(merkleProof, merkleRoot, leaf); } function ownerMint(address _to, uint256 _count) public onlyOwner { require(totalSupply() < MAX_TOKENS, "Sale end"); require(totalSupply() + _count <= MAX_TOKENS - preordersCounter, "Exceeds MAX limit"); require(_count <= MAX_TOKENS_IN_TX, "Exceeds TX limit"); _safeMint(_to, _count); } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function setStatusSales(uint _saleStatus) public onlyOwner { require(_saleStatus == 0 || _saleStatus == 1 || _saleStatus == 2); saleStatus = _saleStatus; } function setStatusPreorders(bool _preordersStatus) public onlyOwner { preorderStatus = _preordersStatus; } function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner { merkleRoot = _merkleRoot; } function withdrawAll() public payable { address cofounder = 0xD03c810C126B4f6E18e98A1EC29131605882Dc13; require(!preorderStatus); require(msg.sender == owner() || msg.sender == cofounder); uint256 cofounder_value = address(this).balance / 100 * 50; uint256 owner_value = address(this).balance - cofounder_value; require(payable(cofounder).send(cofounder_value)); require(payable(msg.sender).send(owner_value)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PREORDERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_RESERVED_FOR_PREORDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS_IN_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PREORDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PUBLIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelPreorder","outputs":[],"stateMutability":"nonpayable","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":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPreorder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"preorder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preorderStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"preordersAtAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preordersCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"presalesAtAddress","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":[],"name":"saleStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_preordersStatus","type":"bool"}],"name":"setStatusPreorders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_saleStatus","type":"uint256"}],"name":"setStatusSales","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c0604052600080556000600755612710600a55600a600b5567016345785d8a0000600c5566f8b0a10e470000600d5566f8b0a10e470000600e55611388600f556003601055600360115560006012556001601360006101000a81548160ff0219169083151502179055503480156200007757600080fd5b506040518060400160405280600881526020017f5461696b657473750000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f5461696b65747375000000000000000000000000000000000000000000000000815250600b54600a546000811162000130576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012790620003d8565b60405180910390fd5b6000821162000176576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016d90620003b6565b60405180910390fd5b83600190805190602001906200018e929190620002b8565b508260029080519060200190620001a7929190620002b8565b508160a08181525050806080818152505050505050620001dc620001d0620001ea60201b60201c565b620001f260201b60201c565b60016009819055506200050e565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002c6906200040b565b90600052602060002090601f016020900481019282620002ea576000855562000336565b82601f106200030557805160ff191683800117855562000336565b8280016001018555821562000336579182015b828111156200033557825182559160200191906001019062000318565b5b50905062000345919062000349565b5090565b5b80821115620003645760008160009055506001016200034a565b5090565b600062000377602783620003fa565b9150620003848262000470565b604082019050919050565b60006200039e602e83620003fa565b9150620003ab82620004bf565b604082019050919050565b60006020820190508181036000830152620003d18162000368565b9050919050565b60006020820190508181036000830152620003f3816200038f565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200042457607f821691505b602082108114156200043b576200043a62000441565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a051615cd16200053f600039600081816130a8015281816130d101526137f8015260005050615cd16000f3fe6080604052600436106102885760003560e01c806370a082311161015a578063b4c5206c116100c1578063e985e9c51161007a578063e985e9c5146109ac578063f2ac2234146109e9578063f2fde38b14610a00578063f47c84c514610a29578063f9020e3314610a54578063fe061c6614610a7f57610288565b8063b4c5206c146108b8578063b88d4fde146108d4578063bd11bfbe146108fd578063c13bd95c14610928578063c87b56dd14610944578063d7224ba01461098157610288565b80638da5cb5b116101135780638da5cb5b146107c757806395d89b41146107f2578063a0712d681461081d578063a22cb46514610839578063a56d773014610862578063afa6c7351461088d57610288565b806370a08231146106ec578063715018a6146107295780637cb647591461074057806383ebaa19146107695780638462151c14610780578063853828b6146107bd57610288565b80632f745c59116101fe5780634af01e56116101b75780634af01e56146105b65780634f6ccce7146105e157806352bad9121461061e578063533906bd1461065b57806355f804b3146106865780636352211e146106af57610288565b80632f745c591461049857806333000eac146104d55780633f4ec76b146104fe57806342842e0e14610527578063484b973c146105505780634a106b0f1461057957610288565b80630cb93d6b116102505780630cb93d6b14610386578063150b7a02146103b157806318160ddd146103ee57806323b872dd146104195780632bb269be146104425780632eb4a7ab1461046d57610288565b806301ffc9a71461028d5780630337a0ff146102ca57806306fdde03146102f5578063081812fc14610320578063095ea7b31461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061417a565b610aaa565b6040516102c191906149a2565b60405180910390f35b3480156102d657600080fd5b506102df610bf4565b6040516102ec9190614e55565b60405180910390f35b34801561030157600080fd5b5061030a610bfa565b60405161031791906149f3565b60405180910390f35b34801561032c57600080fd5b506103476004803603810190610342919061421d565b610c8c565b6040516103549190614919565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f91906140e0565b610d11565b005b34801561039257600080fd5b5061039b610e2a565b6040516103a89190614e55565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061401d565b610e30565b6040516103e591906149d8565b60405180910390f35b3480156103fa57600080fd5b50610403610e44565b6040516104109190614e55565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190613fca565b610e4d565b005b34801561044e57600080fd5b50610457610e5d565b6040516104649190614e55565b60405180910390f35b34801561047957600080fd5b50610482610e63565b60405161048f91906149bd565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba91906140e0565b610e69565b6040516104cc9190614e55565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190614120565b611067565b005b34801561050a57600080fd5b506105256004803603810190610520919061421d565b611100565b005b34801561053357600080fd5b5061054e60048036038101906105499190613fca565b6111a9565b005b34801561055c57600080fd5b50610577600480360381019061057291906140e0565b6111c9565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613f5d565b611347565b6040516105ad9190614e55565b60405180910390f35b3480156105c257600080fd5b506105cb611390565b6040516105d891906149a2565b60405180910390f35b3480156105ed57600080fd5b506106086004803603810190610603919061421d565b6113a3565b6040516106159190614e55565b60405180910390f35b34801561062a57600080fd5b5061064560048036038101906106409190613f5d565b6113f6565b6040516106529190614e55565b60405180910390f35b34801561066757600080fd5b5061067061143f565b60405161067d9190614e55565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a891906141d4565b611445565b005b3480156106bb57600080fd5b506106d660048036038101906106d1919061421d565b6114db565b6040516106e39190614919565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190613f5d565b6114f1565b6040516107209190614e55565b60405180910390f35b34801561073557600080fd5b5061073e6115da565b005b34801561074c57600080fd5b506107676004803603810190610762919061414d565b611662565b005b34801561077557600080fd5b5061077e6116e8565b005b34801561078c57600080fd5b506107a760048036038101906107a29190613f5d565b6118ed565b6040516107b49190614980565b60405180910390f35b6107c561199b565b005b3480156107d357600080fd5b506107dc611af1565b6040516107e99190614919565b60405180910390f35b3480156107fe57600080fd5b50610807611b1b565b60405161081491906149f3565b60405180910390f35b6108376004803603810190610832919061421d565b611bad565b005b34801561084557600080fd5b50610860600480360381019061085b91906140a0565b611d9f565b005b34801561086e57600080fd5b50610877611f20565b6040516108849190614e55565b60405180910390f35b34801561089957600080fd5b506108a2611f26565b6040516108af9190614e55565b60405180910390f35b6108d260048036038101906108cd919061421d565b611f2c565b005b3480156108e057600080fd5b506108fb60048036038101906108f6919061401d565b612216565b005b34801561090957600080fd5b50610912612272565b60405161091f9190614e55565b60405180910390f35b610942600480360381019061093d919061424a565b612278565b005b34801561095057600080fd5b5061096b6004803603810190610966919061421d565b612507565b60405161097891906149f3565b60405180910390f35b34801561098d57600080fd5b506109966125ae565b6040516109a39190614e55565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190613f8a565b6125b4565b6040516109e091906149a2565b60405180910390f35b3480156109f557600080fd5b506109fe612648565b005b348015610a0c57600080fd5b50610a276004803603810190610a229190613f5d565b612842565b005b348015610a3557600080fd5b50610a3e61293a565b604051610a4b9190614e55565b60405180910390f35b348015610a6057600080fd5b50610a69612940565b604051610a769190614e55565b60405180910390f35b348015610a8b57600080fd5b50610a94612946565b604051610aa19190614e55565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b7557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bdd57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bed5750610bec8261294c565b5b9050919050565b60175481565b606060018054610c0990615208565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3590615208565b8015610c825780601f10610c5757610100808354040283529160200191610c82565b820191906000526020600020905b815481529060010190602001808311610c6557829003601f168201915b5050505050905090565b6000610c97826129b6565b610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd90614df5565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d1c826114db565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490614cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dac6129c3565b73ffffffffffffffffffffffffffffffffffffffff161480610ddb5750610dda81610dd56129c3565b6125b4565b5b610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190614b95565b60405180910390fd5b610e258383836129cb565b505050565b600b5481565b600063150b7a0260e01b9050949350505050565b60008054905090565b610e58838383612a7d565b505050565b600f5481565b60185481565b6000610e74836114f1565b8210610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90614a15565b60405180910390fd5b6000610ebf610e44565b905060008060005b83811015611025576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fb957806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110115786841415611002578195505050505050611061565b838061100d9061526b565b9450505b50808061101d9061526b565b915050610ec7565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105890614d95565b60405180910390fd5b92915050565b61106f6129c3565b73ffffffffffffffffffffffffffffffffffffffff1661108d611af1565b73ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614c15565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b6111086129c3565b73ffffffffffffffffffffffffffffffffffffffff16611126611af1565b73ffffffffffffffffffffffffffffffffffffffff161461117c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390614c15565b60405180910390fd5b600081148061118b5750600181145b806111965750600281145b61119f57600080fd5b8060128190555050565b6111c483838360405180602001604052806000815250612216565b505050565b6111d16129c3565b73ffffffffffffffffffffffffffffffffffffffff166111ef611af1565b73ffffffffffffffffffffffffffffffffffffffff1614611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90614c15565b60405180910390fd5b600a54611250610e44565b10611290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128790614bd5565b60405180910390fd5b601754600a546112a091906150ce565b816112a9610e44565b6112b39190614fb9565b11156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90614e35565b60405180910390fd5b600b54811115611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614b75565b60405180910390fd5b6113438282613036565b5050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601360009054906101000a900460ff1681565b60006113ad610e44565b82106113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e590614ab5565b60405180910390fd5b819050919050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b61144d6129c3565b73ffffffffffffffffffffffffffffffffffffffff1661146b611af1565b73ffffffffffffffffffffffffffffffffffffffff16146114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890614c15565b60405180910390fd5b80601490805190602001906114d7929190613ccc565b5050565b60006114e682613054565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990614bb5565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115e26129c3565b73ffffffffffffffffffffffffffffffffffffffff16611600611af1565b73ffffffffffffffffffffffffffffffffffffffff1614611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90614c15565b60405180910390fd5b6116606000613257565b565b61166a6129c3565b73ffffffffffffffffffffffffffffffffffffffff16611688611af1565b73ffffffffffffffffffffffffffffffffffffffff16146116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590614c15565b60405180910390fd5b8060188190555050565b600a546116f3610e44565b10611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90614bd5565b60405180910390fd5b601360009054906101000a900460ff1615611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90614b55565b60405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90614b15565b60405180910390fd5b61184e33601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613036565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546017600082825461189f91906150ce565b925050819055506000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b606060006118fa836114f1565b905060008167ffffffffffffffff811115611918576119176153c5565b5b6040519080825280602002602001820160405280156119465781602001602082028036833780820191505090505b50905060005b828110156119905761195e8582610e69565b82828151811061197157611970615396565b5b60200260200101818152505080806119889061526b565b91505061194c565b508092505050919050565b600073d03c810c126b4f6e18e98a1ec29131605882dc139050601360009054906101000a900460ff16156119ce57600080fd5b6119d6611af1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a3a57508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a4357600080fd5b60006032606447611a54919061500f565b611a5e9190615040565b905060008147611a6e91906150ce565b90508273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050611aae57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050611aec57600080fd5b505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611b2a90615208565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5690615208565b8015611ba35780601f10611b7857610100808354040283529160200191611ba3565b820191906000526020600020905b815481529060010190602001808311611b8657829003601f168201915b5050505050905090565b60026009541415611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90614db5565b60405180910390fd5b6002600981905550600a54611c06610e44565b10611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d90614bd5565b60405180910390fd5b600160125414611c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8290614d55565b60405180910390fd5b601754600a54611c9b91906150ce565b81611ca4610e44565b611cae9190614fb9565b1115611cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce690614e35565b60405180910390fd5b600b54811115611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90614b75565b60405180910390fd5b600c5481611d429190615040565b3414611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a90614cb5565b60405180910390fd5b611d94611d8e6129c3565b82613036565b600160098190555050565b611da76129c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0c90614c55565b60405180910390fd5b8060066000611e226129c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ecf6129c3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f1491906149a2565b60405180910390a35050565b600c5481565b600d5481565b60026009541415611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6990614db5565b60405180910390fd5b6002600981905550600a54611f85610e44565b10611fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbc90614bd5565b60405180910390fd5b600f546017541061200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200290614af5565b60405180910390fd5b601360009054906101000a900460ff1661205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190614a35565b60405180910390fd5b601754600a5461206a91906150ce565b81612073610e44565b61207d9190614fb9565b11156120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b590614e35565b60405180910390fd5b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461210c9190614fb9565b111561214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214490614b35565b60405180910390fd5b600e548161215b9190615040565b341461219c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219390614cb5565b60405180910390fd5b80601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121eb9190614fb9565b9250508190555080601760008282546122049190614fb9565b92505081905550600160098190555050565b612221848484612a7d565b61222d8484848461331d565b61226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390614cf5565b60405180910390fd5b50505050565b60105481565b600260095414156122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590614db5565b60405180910390fd5b6002600981905550600a546122d1610e44565b10612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614bd5565b60405180910390fd5b600260125414612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90614a95565b60405180910390fd5b601560006123626129c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546011546123aa91906150ce565b8311156123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e390614c95565b60405180910390fd5b6123fe82826123f96129c3565b6134b4565b61243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614d75565b60405180910390fd5b82600d5461244b9190615040565b341461248c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248390614cb5565b60405180910390fd5b82601560006124996129c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124e29190614fb9565b925050819055506124fa6124f46129c3565b84613036565b6001600981905550505050565b6060612512826129b6565b612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890614c35565b60405180910390fd5b600061255b613538565b9050600081511161257b57604051806020016040528060008152506125a6565b80612585846135ca565b6040516020016125969291906148f5565b6040516020818303038152906040525b915050919050565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601360009054906101000a900460ff16612697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268e90614a35565b60405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090614b15565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600e54601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127809190615040565b9081150290604051600060405180830381858888f193505050506127a357600080fd5b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601760008282546127f491906150ce565b925050819055506000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b61284a6129c3565b73ffffffffffffffffffffffffffffffffffffffff16612868611af1565b73ffffffffffffffffffffffffffffffffffffffff16146128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b590614c15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561292e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292590614a55565b60405180910390fd5b61293781613257565b50565b600a5481565b60125481565b60115481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612a8882613054565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612aaf6129c3565b73ffffffffffffffffffffffffffffffffffffffff161480612b0b5750612ad46129c3565b73ffffffffffffffffffffffffffffffffffffffff16612af384610c8c565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b275750612b268260000151612b216129c3565b6125b4565b5b905080612b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6090614c75565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd290614bf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4290614ad5565b60405180910390fd5b612c58858585600161372b565b612c6860008484600001516129cb565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612cd6919061509a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612d7a9190614f73565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612e809190614fb9565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612fc657612ef6816129b6565b15612fc5576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461302e8686866001613731565b505050505050565b613050828260405180602001604052806000815250613737565b5050565b61305c613d52565b613065826129b6565b6130a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309b90614a75565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106131085760017f0000000000000000000000000000000000000000000000000000000000000000846130fb91906150ce565b6131059190614fb9565b90505b60008390505b818110613216576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461320257809350505050613252565b50808061320e906151de565b91505061310e565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324990614dd5565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061333e8473ffffffffffffffffffffffffffffffffffffffff16613c16565b156134a7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026133676129c3565b8786866040518563ffffffff1660e01b81526004016133899493929190614934565b602060405180830381600087803b1580156133a357600080fd5b505af19250505080156133d457506040513d601f19601f820116820180604052508101906133d191906141a7565b60015b613457573d8060008114613404576040519150601f19603f3d011682016040523d82523d6000602084013e613409565b606091505b5060008151141561344f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344690614cf5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506134ac565b600190505b949350505050565b600080826040516020016134c891906148da565b60405160208183030381529060405280519060200120905061352e858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060185483613c29565b9150509392505050565b60606014805461354790615208565b80601f016020809104026020016040519081016040528092919081815260200182805461357390615208565b80156135c05780601f10613595576101008083540402835291602001916135c0565b820191906000526020600020905b8154815290600101906020018083116135a357829003601f168201915b5050505050905090565b60606000821415613612576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613726565b600082905060005b6000821461364457808061362d9061526b565b915050600a8261363d919061500f565b915061361a565b60008167ffffffffffffffff8111156136605761365f6153c5565b5b6040519080825280601f01601f1916602001820160405280156136925781602001600182028036833780820191505090505b5090505b6000851461371f576001826136ab91906150ce565b9150600a856136ba91906152d8565b60306136c69190614fb9565b60f81b8183815181106136dc576136db615396565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613718919061500f565b9450613696565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156137ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a490614d35565b60405180910390fd5b6137b6816129b6565b156137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90614d15565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385090614e15565b60405180910390fd5b613866600085838661372b565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516139639190614f73565b6fffffffffffffffffffffffffffffffff16815260200185836020015161398a9190614f73565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613bf957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613b99600088848861331d565b613bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bcf90614cf5565b60405180910390fd5b8180613be39061526b565b9250508080613bf19061526b565b915050613b28565b5080600081905550613c0e6000878588613731565b505050505050565b600080823b905060008111915050919050565b600082613c368584613c40565b1490509392505050565b60008082905060005b8451811015613caa576000858281518110613c6757613c66615396565b5b60200260200101519050808311613c8957613c828382613cb5565b9250613c96565b613c938184613cb5565b92505b508080613ca29061526b565b915050613c49565b508091505092915050565b600082600052816020526040600020905092915050565b828054613cd890615208565b90600052602060002090601f016020900481019282613cfa5760008555613d41565b82601f10613d1357805160ff1916838001178555613d41565b82800160010185558215613d41579182015b82811115613d40578251825591602001919060010190613d25565b5b509050613d4e9190613d8c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613da5576000816000905550600101613d8d565b5090565b6000613dbc613db784614e95565b614e70565b905082815260208101848484011115613dd857613dd7615403565b5b613de384828561519c565b509392505050565b6000613dfe613df984614ec6565b614e70565b905082815260208101848484011115613e1a57613e19615403565b5b613e2584828561519c565b509392505050565b600081359050613e3c81615c28565b92915050565b60008083601f840112613e5857613e576153f9565b5b8235905067ffffffffffffffff811115613e7557613e746153f4565b5b602083019150836020820283011115613e9157613e906153fe565b5b9250929050565b600081359050613ea781615c3f565b92915050565b600081359050613ebc81615c56565b92915050565b600081359050613ed181615c6d565b92915050565b600081519050613ee681615c6d565b92915050565b600082601f830112613f0157613f006153f9565b5b8135613f11848260208601613da9565b91505092915050565b600082601f830112613f2f57613f2e6153f9565b5b8135613f3f848260208601613deb565b91505092915050565b600081359050613f5781615c84565b92915050565b600060208284031215613f7357613f7261540d565b5b6000613f8184828501613e2d565b91505092915050565b60008060408385031215613fa157613fa061540d565b5b6000613faf85828601613e2d565b9250506020613fc085828601613e2d565b9150509250929050565b600080600060608486031215613fe357613fe261540d565b5b6000613ff186828701613e2d565b935050602061400286828701613e2d565b925050604061401386828701613f48565b9150509250925092565b600080600080608085870312156140375761403661540d565b5b600061404587828801613e2d565b945050602061405687828801613e2d565b935050604061406787828801613f48565b925050606085013567ffffffffffffffff81111561408857614087615408565b5b61409487828801613eec565b91505092959194509250565b600080604083850312156140b7576140b661540d565b5b60006140c585828601613e2d565b92505060206140d685828601613e98565b9150509250929050565b600080604083850312156140f7576140f661540d565b5b600061410585828601613e2d565b925050602061411685828601613f48565b9150509250929050565b6000602082840312156141365761413561540d565b5b600061414484828501613e98565b91505092915050565b6000602082840312156141635761416261540d565b5b600061417184828501613ead565b91505092915050565b6000602082840312156141905761418f61540d565b5b600061419e84828501613ec2565b91505092915050565b6000602082840312156141bd576141bc61540d565b5b60006141cb84828501613ed7565b91505092915050565b6000602082840312156141ea576141e961540d565b5b600082013567ffffffffffffffff81111561420857614207615408565b5b61421484828501613f1a565b91505092915050565b6000602082840312156142335761423261540d565b5b600061424184828501613f48565b91505092915050565b6000806000604084860312156142635761426261540d565b5b600061427186828701613f48565b935050602084013567ffffffffffffffff81111561429257614291615408565b5b61429e86828701613e42565b92509250509250925092565b60006142b683836148bc565b60208301905092915050565b6142cb81615102565b82525050565b6142e26142dd82615102565b6152b4565b82525050565b60006142f382614f07565b6142fd8185614f35565b935061430883614ef7565b8060005b8381101561433957815161432088826142aa565b975061432b83614f28565b92505060018101905061430c565b5085935050505092915050565b61434f81615114565b82525050565b61435e81615120565b82525050565b61436d8161512a565b82525050565b600061437e82614f12565b6143888185614f46565b93506143988185602086016151ab565b6143a181615412565b840191505092915050565b60006143b782614f1d565b6143c18185614f57565b93506143d18185602086016151ab565b6143da81615412565b840191505092915050565b60006143f082614f1d565b6143fa8185614f68565b935061440a8185602086016151ab565b80840191505092915050565b6000614423602283614f57565b915061442e82615430565b604082019050919050565b6000614446601783614f57565b91506144518261547f565b602082019050919050565b6000614469602683614f57565b9150614474826154a8565b604082019050919050565b600061448c602a83614f57565b9150614497826154f7565b604082019050919050565b60006144af601183614f57565b91506144ba82615546565b602082019050919050565b60006144d2602383614f57565b91506144dd8261556f565b604082019050919050565b60006144f5602583614f57565b9150614500826155be565b604082019050919050565b6000614518601883614f57565b91506145238261560d565b602082019050919050565b600061453b600c83614f57565b915061454682615636565b602082019050919050565b600061455e601683614f57565b91506145698261565f565b602082019050919050565b6000614581601383614f57565b915061458c82615688565b602082019050919050565b60006145a4601083614f57565b91506145af826156b1565b602082019050919050565b60006145c7603983614f57565b91506145d2826156da565b604082019050919050565b60006145ea602b83614f57565b91506145f582615729565b604082019050919050565b600061460d600883614f57565b915061461882615778565b602082019050919050565b6000614630602683614f57565b915061463b826157a1565b604082019050919050565b6000614653602083614f57565b915061465e826157f0565b602082019050919050565b6000614676602f83614f57565b915061468182615819565b604082019050919050565b6000614699601a83614f57565b91506146a482615868565b602082019050919050565b60006146bc603283614f57565b91506146c782615891565b604082019050919050565b60006146df601783614f57565b91506146ea826158e0565b602082019050919050565b6000614702601183614f57565b915061470d82615909565b602082019050919050565b6000614725602283614f57565b915061473082615932565b604082019050919050565b6000614748603383614f57565b915061475382615981565b604082019050919050565b600061476b601d83614f57565b9150614776826159d0565b602082019050919050565b600061478e602183614f57565b9150614799826159f9565b604082019050919050565b60006147b1601683614f57565b91506147bc82615a48565b602082019050919050565b60006147d4600d83614f57565b91506147df82615a71565b602082019050919050565b60006147f7602e83614f57565b915061480282615a9a565b604082019050919050565b600061481a601f83614f57565b915061482582615ae9565b602082019050919050565b600061483d602f83614f57565b915061484882615b12565b604082019050919050565b6000614860602d83614f57565b915061486b82615b61565b604082019050919050565b6000614883602283614f57565b915061488e82615bb0565b604082019050919050565b60006148a6601183614f57565b91506148b182615bff565b602082019050919050565b6148c581615192565b82525050565b6148d481615192565b82525050565b60006148e682846142d1565b60148201915081905092915050565b600061490182856143e5565b915061490d82846143e5565b91508190509392505050565b600060208201905061492e60008301846142c2565b92915050565b600060808201905061494960008301876142c2565b61495660208301866142c2565b61496360408301856148cb565b81810360608301526149758184614373565b905095945050505050565b6000602082019050818103600083015261499a81846142e8565b905092915050565b60006020820190506149b76000830184614346565b92915050565b60006020820190506149d26000830184614355565b92915050565b60006020820190506149ed6000830184614364565b92915050565b60006020820190508181036000830152614a0d81846143ac565b905092915050565b60006020820190508181036000830152614a2e81614416565b9050919050565b60006020820190508181036000830152614a4e81614439565b9050919050565b60006020820190508181036000830152614a6e8161445c565b9050919050565b60006020820190508181036000830152614a8e8161447f565b9050919050565b60006020820190508181036000830152614aae816144a2565b9050919050565b60006020820190508181036000830152614ace816144c5565b9050919050565b60006020820190508181036000830152614aee816144e8565b9050919050565b60006020820190508181036000830152614b0e8161450b565b9050919050565b60006020820190508181036000830152614b2e8161452e565b9050919050565b60006020820190508181036000830152614b4e81614551565b9050919050565b60006020820190508181036000830152614b6e81614574565b9050919050565b60006020820190508181036000830152614b8e81614597565b9050919050565b60006020820190508181036000830152614bae816145ba565b9050919050565b60006020820190508181036000830152614bce816145dd565b9050919050565b60006020820190508181036000830152614bee81614600565b9050919050565b60006020820190508181036000830152614c0e81614623565b9050919050565b60006020820190508181036000830152614c2e81614646565b9050919050565b60006020820190508181036000830152614c4e81614669565b9050919050565b60006020820190508181036000830152614c6e8161468c565b9050919050565b60006020820190508181036000830152614c8e816146af565b9050919050565b60006020820190508181036000830152614cae816146d2565b9050919050565b60006020820190508181036000830152614cce816146f5565b9050919050565b60006020820190508181036000830152614cee81614718565b9050919050565b60006020820190508181036000830152614d0e8161473b565b9050919050565b60006020820190508181036000830152614d2e8161475e565b9050919050565b60006020820190508181036000830152614d4e81614781565b9050919050565b60006020820190508181036000830152614d6e816147a4565b9050919050565b60006020820190508181036000830152614d8e816147c7565b9050919050565b60006020820190508181036000830152614dae816147ea565b9050919050565b60006020820190508181036000830152614dce8161480d565b9050919050565b60006020820190508181036000830152614dee81614830565b9050919050565b60006020820190508181036000830152614e0e81614853565b9050919050565b60006020820190508181036000830152614e2e81614876565b9050919050565b60006020820190508181036000830152614e4e81614899565b9050919050565b6000602082019050614e6a60008301846148cb565b92915050565b6000614e7a614e8b565b9050614e86828261523a565b919050565b6000604051905090565b600067ffffffffffffffff821115614eb057614eaf6153c5565b5b614eb982615412565b9050602081019050919050565b600067ffffffffffffffff821115614ee157614ee06153c5565b5b614eea82615412565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f7e82615156565b9150614f8983615156565b9250826fffffffffffffffffffffffffffffffff03821115614fae57614fad615309565b5b828201905092915050565b6000614fc482615192565b9150614fcf83615192565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561500457615003615309565b5b828201905092915050565b600061501a82615192565b915061502583615192565b92508261503557615034615338565b5b828204905092915050565b600061504b82615192565b915061505683615192565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561508f5761508e615309565b5b828202905092915050565b60006150a582615156565b91506150b083615156565b9250828210156150c3576150c2615309565b5b828203905092915050565b60006150d982615192565b91506150e483615192565b9250828210156150f7576150f6615309565b5b828203905092915050565b600061510d82615172565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156151c95780820151818401526020810190506151ae565b838111156151d8576000848401525b50505050565b60006151e982615192565b915060008214156151fd576151fc615309565b5b600182039050919050565b6000600282049050600182168061522057607f821691505b6020821081141561523457615233615367565b5b50919050565b61524382615412565b810181811067ffffffffffffffff82111715615262576152616153c5565b5b80604052505050565b600061527682615192565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152a9576152a8615309565b5b600182019050919050565b60006152bf826152c6565b9050919050565b60006152d182615423565b9050919050565b60006152e382615192565b91506152ee83615192565b9250826152fe576152fd615338565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f5072656f7264657273206973206e6f7420616374697665000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f50726573616c6520697320636c6f736564000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473205072652d4f7264657273206c696d69740000000000000000600082015250565b7f4e6f207072656f72646572730000000000000000000000000000000000000000600082015250565b7f45786365656473207072656f72646572206c696d697400000000000000000000600082015250565b7f446973747269627574696f6e20636c6f73656400000000000000000000000000600082015250565b7f45786365656473205458206c696d697400000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e73756666696369656e74206d696e7473206c656674000000000000000000600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c657320697320636c6f73656400000000000000000000600082015250565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473204d4158206c696d6974000000000000000000000000000000600082015250565b615c3181615102565b8114615c3c57600080fd5b50565b615c4881615114565b8114615c5357600080fd5b50565b615c5f81615120565b8114615c6a57600080fd5b50565b615c768161512a565b8114615c8157600080fd5b50565b615c8d81615192565b8114615c9857600080fd5b5056fea2646970667358221220f8ae23696ec273a62377018bfdd2adad6050e952c58ae290ef48ca67f77e138664736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102885760003560e01c806370a082311161015a578063b4c5206c116100c1578063e985e9c51161007a578063e985e9c5146109ac578063f2ac2234146109e9578063f2fde38b14610a00578063f47c84c514610a29578063f9020e3314610a54578063fe061c6614610a7f57610288565b8063b4c5206c146108b8578063b88d4fde146108d4578063bd11bfbe146108fd578063c13bd95c14610928578063c87b56dd14610944578063d7224ba01461098157610288565b80638da5cb5b116101135780638da5cb5b146107c757806395d89b41146107f2578063a0712d681461081d578063a22cb46514610839578063a56d773014610862578063afa6c7351461088d57610288565b806370a08231146106ec578063715018a6146107295780637cb647591461074057806383ebaa19146107695780638462151c14610780578063853828b6146107bd57610288565b80632f745c59116101fe5780634af01e56116101b75780634af01e56146105b65780634f6ccce7146105e157806352bad9121461061e578063533906bd1461065b57806355f804b3146106865780636352211e146106af57610288565b80632f745c591461049857806333000eac146104d55780633f4ec76b146104fe57806342842e0e14610527578063484b973c146105505780634a106b0f1461057957610288565b80630cb93d6b116102505780630cb93d6b14610386578063150b7a02146103b157806318160ddd146103ee57806323b872dd146104195780632bb269be146104425780632eb4a7ab1461046d57610288565b806301ffc9a71461028d5780630337a0ff146102ca57806306fdde03146102f5578063081812fc14610320578063095ea7b31461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061417a565b610aaa565b6040516102c191906149a2565b60405180910390f35b3480156102d657600080fd5b506102df610bf4565b6040516102ec9190614e55565b60405180910390f35b34801561030157600080fd5b5061030a610bfa565b60405161031791906149f3565b60405180910390f35b34801561032c57600080fd5b506103476004803603810190610342919061421d565b610c8c565b6040516103549190614919565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f91906140e0565b610d11565b005b34801561039257600080fd5b5061039b610e2a565b6040516103a89190614e55565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061401d565b610e30565b6040516103e591906149d8565b60405180910390f35b3480156103fa57600080fd5b50610403610e44565b6040516104109190614e55565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190613fca565b610e4d565b005b34801561044e57600080fd5b50610457610e5d565b6040516104649190614e55565b60405180910390f35b34801561047957600080fd5b50610482610e63565b60405161048f91906149bd565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba91906140e0565b610e69565b6040516104cc9190614e55565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190614120565b611067565b005b34801561050a57600080fd5b506105256004803603810190610520919061421d565b611100565b005b34801561053357600080fd5b5061054e60048036038101906105499190613fca565b6111a9565b005b34801561055c57600080fd5b50610577600480360381019061057291906140e0565b6111c9565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613f5d565b611347565b6040516105ad9190614e55565b60405180910390f35b3480156105c257600080fd5b506105cb611390565b6040516105d891906149a2565b60405180910390f35b3480156105ed57600080fd5b506106086004803603810190610603919061421d565b6113a3565b6040516106159190614e55565b60405180910390f35b34801561062a57600080fd5b5061064560048036038101906106409190613f5d565b6113f6565b6040516106529190614e55565b60405180910390f35b34801561066757600080fd5b5061067061143f565b60405161067d9190614e55565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a891906141d4565b611445565b005b3480156106bb57600080fd5b506106d660048036038101906106d1919061421d565b6114db565b6040516106e39190614919565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190613f5d565b6114f1565b6040516107209190614e55565b60405180910390f35b34801561073557600080fd5b5061073e6115da565b005b34801561074c57600080fd5b506107676004803603810190610762919061414d565b611662565b005b34801561077557600080fd5b5061077e6116e8565b005b34801561078c57600080fd5b506107a760048036038101906107a29190613f5d565b6118ed565b6040516107b49190614980565b60405180910390f35b6107c561199b565b005b3480156107d357600080fd5b506107dc611af1565b6040516107e99190614919565b60405180910390f35b3480156107fe57600080fd5b50610807611b1b565b60405161081491906149f3565b60405180910390f35b6108376004803603810190610832919061421d565b611bad565b005b34801561084557600080fd5b50610860600480360381019061085b91906140a0565b611d9f565b005b34801561086e57600080fd5b50610877611f20565b6040516108849190614e55565b60405180910390f35b34801561089957600080fd5b506108a2611f26565b6040516108af9190614e55565b60405180910390f35b6108d260048036038101906108cd919061421d565b611f2c565b005b3480156108e057600080fd5b506108fb60048036038101906108f6919061401d565b612216565b005b34801561090957600080fd5b50610912612272565b60405161091f9190614e55565b60405180910390f35b610942600480360381019061093d919061424a565b612278565b005b34801561095057600080fd5b5061096b6004803603810190610966919061421d565b612507565b60405161097891906149f3565b60405180910390f35b34801561098d57600080fd5b506109966125ae565b6040516109a39190614e55565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190613f8a565b6125b4565b6040516109e091906149a2565b60405180910390f35b3480156109f557600080fd5b506109fe612648565b005b348015610a0c57600080fd5b50610a276004803603810190610a229190613f5d565b612842565b005b348015610a3557600080fd5b50610a3e61293a565b604051610a4b9190614e55565b60405180910390f35b348015610a6057600080fd5b50610a69612940565b604051610a769190614e55565b60405180910390f35b348015610a8b57600080fd5b50610a94612946565b604051610aa19190614e55565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b7557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bdd57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bed5750610bec8261294c565b5b9050919050565b60175481565b606060018054610c0990615208565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3590615208565b8015610c825780601f10610c5757610100808354040283529160200191610c82565b820191906000526020600020905b815481529060010190602001808311610c6557829003601f168201915b5050505050905090565b6000610c97826129b6565b610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd90614df5565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d1c826114db565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490614cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dac6129c3565b73ffffffffffffffffffffffffffffffffffffffff161480610ddb5750610dda81610dd56129c3565b6125b4565b5b610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190614b95565b60405180910390fd5b610e258383836129cb565b505050565b600b5481565b600063150b7a0260e01b9050949350505050565b60008054905090565b610e58838383612a7d565b505050565b600f5481565b60185481565b6000610e74836114f1565b8210610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90614a15565b60405180910390fd5b6000610ebf610e44565b905060008060005b83811015611025576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fb957806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110115786841415611002578195505050505050611061565b838061100d9061526b565b9450505b50808061101d9061526b565b915050610ec7565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105890614d95565b60405180910390fd5b92915050565b61106f6129c3565b73ffffffffffffffffffffffffffffffffffffffff1661108d611af1565b73ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614c15565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b6111086129c3565b73ffffffffffffffffffffffffffffffffffffffff16611126611af1565b73ffffffffffffffffffffffffffffffffffffffff161461117c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390614c15565b60405180910390fd5b600081148061118b5750600181145b806111965750600281145b61119f57600080fd5b8060128190555050565b6111c483838360405180602001604052806000815250612216565b505050565b6111d16129c3565b73ffffffffffffffffffffffffffffffffffffffff166111ef611af1565b73ffffffffffffffffffffffffffffffffffffffff1614611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90614c15565b60405180910390fd5b600a54611250610e44565b10611290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128790614bd5565b60405180910390fd5b601754600a546112a091906150ce565b816112a9610e44565b6112b39190614fb9565b11156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90614e35565b60405180910390fd5b600b54811115611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614b75565b60405180910390fd5b6113438282613036565b5050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601360009054906101000a900460ff1681565b60006113ad610e44565b82106113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e590614ab5565b60405180910390fd5b819050919050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b61144d6129c3565b73ffffffffffffffffffffffffffffffffffffffff1661146b611af1565b73ffffffffffffffffffffffffffffffffffffffff16146114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890614c15565b60405180910390fd5b80601490805190602001906114d7929190613ccc565b5050565b60006114e682613054565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990614bb5565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115e26129c3565b73ffffffffffffffffffffffffffffffffffffffff16611600611af1565b73ffffffffffffffffffffffffffffffffffffffff1614611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90614c15565b60405180910390fd5b6116606000613257565b565b61166a6129c3565b73ffffffffffffffffffffffffffffffffffffffff16611688611af1565b73ffffffffffffffffffffffffffffffffffffffff16146116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590614c15565b60405180910390fd5b8060188190555050565b600a546116f3610e44565b10611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90614bd5565b60405180910390fd5b601360009054906101000a900460ff1615611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90614b55565b60405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90614b15565b60405180910390fd5b61184e33601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613036565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546017600082825461189f91906150ce565b925050819055506000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b606060006118fa836114f1565b905060008167ffffffffffffffff811115611918576119176153c5565b5b6040519080825280602002602001820160405280156119465781602001602082028036833780820191505090505b50905060005b828110156119905761195e8582610e69565b82828151811061197157611970615396565b5b60200260200101818152505080806119889061526b565b91505061194c565b508092505050919050565b600073d03c810c126b4f6e18e98a1ec29131605882dc139050601360009054906101000a900460ff16156119ce57600080fd5b6119d6611af1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a3a57508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a4357600080fd5b60006032606447611a54919061500f565b611a5e9190615040565b905060008147611a6e91906150ce565b90508273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050611aae57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050611aec57600080fd5b505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611b2a90615208565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5690615208565b8015611ba35780601f10611b7857610100808354040283529160200191611ba3565b820191906000526020600020905b815481529060010190602001808311611b8657829003601f168201915b5050505050905090565b60026009541415611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90614db5565b60405180910390fd5b6002600981905550600a54611c06610e44565b10611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d90614bd5565b60405180910390fd5b600160125414611c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8290614d55565b60405180910390fd5b601754600a54611c9b91906150ce565b81611ca4610e44565b611cae9190614fb9565b1115611cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce690614e35565b60405180910390fd5b600b54811115611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90614b75565b60405180910390fd5b600c5481611d429190615040565b3414611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a90614cb5565b60405180910390fd5b611d94611d8e6129c3565b82613036565b600160098190555050565b611da76129c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0c90614c55565b60405180910390fd5b8060066000611e226129c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ecf6129c3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f1491906149a2565b60405180910390a35050565b600c5481565b600d5481565b60026009541415611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6990614db5565b60405180910390fd5b6002600981905550600a54611f85610e44565b10611fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbc90614bd5565b60405180910390fd5b600f546017541061200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200290614af5565b60405180910390fd5b601360009054906101000a900460ff1661205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190614a35565b60405180910390fd5b601754600a5461206a91906150ce565b81612073610e44565b61207d9190614fb9565b11156120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b590614e35565b60405180910390fd5b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461210c9190614fb9565b111561214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214490614b35565b60405180910390fd5b600e548161215b9190615040565b341461219c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219390614cb5565b60405180910390fd5b80601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121eb9190614fb9565b9250508190555080601760008282546122049190614fb9565b92505081905550600160098190555050565b612221848484612a7d565b61222d8484848461331d565b61226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390614cf5565b60405180910390fd5b50505050565b60105481565b600260095414156122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590614db5565b60405180910390fd5b6002600981905550600a546122d1610e44565b10612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614bd5565b60405180910390fd5b600260125414612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90614a95565b60405180910390fd5b601560006123626129c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546011546123aa91906150ce565b8311156123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e390614c95565b60405180910390fd5b6123fe82826123f96129c3565b6134b4565b61243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614d75565b60405180910390fd5b82600d5461244b9190615040565b341461248c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248390614cb5565b60405180910390fd5b82601560006124996129c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124e29190614fb9565b925050819055506124fa6124f46129c3565b84613036565b6001600981905550505050565b6060612512826129b6565b612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890614c35565b60405180910390fd5b600061255b613538565b9050600081511161257b57604051806020016040528060008152506125a6565b80612585846135ca565b6040516020016125969291906148f5565b6040516020818303038152906040525b915050919050565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601360009054906101000a900460ff16612697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268e90614a35565b60405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090614b15565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600e54601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127809190615040565b9081150290604051600060405180830381858888f193505050506127a357600080fd5b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601760008282546127f491906150ce565b925050819055506000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b61284a6129c3565b73ffffffffffffffffffffffffffffffffffffffff16612868611af1565b73ffffffffffffffffffffffffffffffffffffffff16146128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b590614c15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561292e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292590614a55565b60405180910390fd5b61293781613257565b50565b600a5481565b60125481565b60115481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612a8882613054565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612aaf6129c3565b73ffffffffffffffffffffffffffffffffffffffff161480612b0b5750612ad46129c3565b73ffffffffffffffffffffffffffffffffffffffff16612af384610c8c565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b275750612b268260000151612b216129c3565b6125b4565b5b905080612b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6090614c75565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd290614bf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4290614ad5565b60405180910390fd5b612c58858585600161372b565b612c6860008484600001516129cb565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612cd6919061509a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612d7a9190614f73565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612e809190614fb9565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612fc657612ef6816129b6565b15612fc5576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461302e8686866001613731565b505050505050565b613050828260405180602001604052806000815250613737565b5050565b61305c613d52565b613065826129b6565b6130a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309b90614a75565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a83106131085760017f000000000000000000000000000000000000000000000000000000000000000a846130fb91906150ce565b6131059190614fb9565b90505b60008390505b818110613216576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461320257809350505050613252565b50808061320e906151de565b91505061310e565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324990614dd5565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061333e8473ffffffffffffffffffffffffffffffffffffffff16613c16565b156134a7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026133676129c3565b8786866040518563ffffffff1660e01b81526004016133899493929190614934565b602060405180830381600087803b1580156133a357600080fd5b505af19250505080156133d457506040513d601f19601f820116820180604052508101906133d191906141a7565b60015b613457573d8060008114613404576040519150601f19603f3d011682016040523d82523d6000602084013e613409565b606091505b5060008151141561344f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344690614cf5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506134ac565b600190505b949350505050565b600080826040516020016134c891906148da565b60405160208183030381529060405280519060200120905061352e858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060185483613c29565b9150509392505050565b60606014805461354790615208565b80601f016020809104026020016040519081016040528092919081815260200182805461357390615208565b80156135c05780601f10613595576101008083540402835291602001916135c0565b820191906000526020600020905b8154815290600101906020018083116135a357829003601f168201915b5050505050905090565b60606000821415613612576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613726565b600082905060005b6000821461364457808061362d9061526b565b915050600a8261363d919061500f565b915061361a565b60008167ffffffffffffffff8111156136605761365f6153c5565b5b6040519080825280601f01601f1916602001820160405280156136925781602001600182028036833780820191505090505b5090505b6000851461371f576001826136ab91906150ce565b9150600a856136ba91906152d8565b60306136c69190614fb9565b60f81b8183815181106136dc576136db615396565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613718919061500f565b9450613696565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156137ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a490614d35565b60405180910390fd5b6137b6816129b6565b156137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90614d15565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a831115613859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385090614e15565b60405180910390fd5b613866600085838661372b565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516139639190614f73565b6fffffffffffffffffffffffffffffffff16815260200185836020015161398a9190614f73565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613bf957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613b99600088848861331d565b613bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bcf90614cf5565b60405180910390fd5b8180613be39061526b565b9250508080613bf19061526b565b915050613b28565b5080600081905550613c0e6000878588613731565b505050505050565b600080823b905060008111915050919050565b600082613c368584613c40565b1490509392505050565b60008082905060005b8451811015613caa576000858281518110613c6757613c66615396565b5b60200260200101519050808311613c8957613c828382613cb5565b9250613c96565b613c938184613cb5565b92505b508080613ca29061526b565b915050613c49565b508091505092915050565b600082600052816020526040600020905092915050565b828054613cd890615208565b90600052602060002090601f016020900481019282613cfa5760008555613d41565b82601f10613d1357805160ff1916838001178555613d41565b82800160010185558215613d41579182015b82811115613d40578251825591602001919060010190613d25565b5b509050613d4e9190613d8c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613da5576000816000905550600101613d8d565b5090565b6000613dbc613db784614e95565b614e70565b905082815260208101848484011115613dd857613dd7615403565b5b613de384828561519c565b509392505050565b6000613dfe613df984614ec6565b614e70565b905082815260208101848484011115613e1a57613e19615403565b5b613e2584828561519c565b509392505050565b600081359050613e3c81615c28565b92915050565b60008083601f840112613e5857613e576153f9565b5b8235905067ffffffffffffffff811115613e7557613e746153f4565b5b602083019150836020820283011115613e9157613e906153fe565b5b9250929050565b600081359050613ea781615c3f565b92915050565b600081359050613ebc81615c56565b92915050565b600081359050613ed181615c6d565b92915050565b600081519050613ee681615c6d565b92915050565b600082601f830112613f0157613f006153f9565b5b8135613f11848260208601613da9565b91505092915050565b600082601f830112613f2f57613f2e6153f9565b5b8135613f3f848260208601613deb565b91505092915050565b600081359050613f5781615c84565b92915050565b600060208284031215613f7357613f7261540d565b5b6000613f8184828501613e2d565b91505092915050565b60008060408385031215613fa157613fa061540d565b5b6000613faf85828601613e2d565b9250506020613fc085828601613e2d565b9150509250929050565b600080600060608486031215613fe357613fe261540d565b5b6000613ff186828701613e2d565b935050602061400286828701613e2d565b925050604061401386828701613f48565b9150509250925092565b600080600080608085870312156140375761403661540d565b5b600061404587828801613e2d565b945050602061405687828801613e2d565b935050604061406787828801613f48565b925050606085013567ffffffffffffffff81111561408857614087615408565b5b61409487828801613eec565b91505092959194509250565b600080604083850312156140b7576140b661540d565b5b60006140c585828601613e2d565b92505060206140d685828601613e98565b9150509250929050565b600080604083850312156140f7576140f661540d565b5b600061410585828601613e2d565b925050602061411685828601613f48565b9150509250929050565b6000602082840312156141365761413561540d565b5b600061414484828501613e98565b91505092915050565b6000602082840312156141635761416261540d565b5b600061417184828501613ead565b91505092915050565b6000602082840312156141905761418f61540d565b5b600061419e84828501613ec2565b91505092915050565b6000602082840312156141bd576141bc61540d565b5b60006141cb84828501613ed7565b91505092915050565b6000602082840312156141ea576141e961540d565b5b600082013567ffffffffffffffff81111561420857614207615408565b5b61421484828501613f1a565b91505092915050565b6000602082840312156142335761423261540d565b5b600061424184828501613f48565b91505092915050565b6000806000604084860312156142635761426261540d565b5b600061427186828701613f48565b935050602084013567ffffffffffffffff81111561429257614291615408565b5b61429e86828701613e42565b92509250509250925092565b60006142b683836148bc565b60208301905092915050565b6142cb81615102565b82525050565b6142e26142dd82615102565b6152b4565b82525050565b60006142f382614f07565b6142fd8185614f35565b935061430883614ef7565b8060005b8381101561433957815161432088826142aa565b975061432b83614f28565b92505060018101905061430c565b5085935050505092915050565b61434f81615114565b82525050565b61435e81615120565b82525050565b61436d8161512a565b82525050565b600061437e82614f12565b6143888185614f46565b93506143988185602086016151ab565b6143a181615412565b840191505092915050565b60006143b782614f1d565b6143c18185614f57565b93506143d18185602086016151ab565b6143da81615412565b840191505092915050565b60006143f082614f1d565b6143fa8185614f68565b935061440a8185602086016151ab565b80840191505092915050565b6000614423602283614f57565b915061442e82615430565b604082019050919050565b6000614446601783614f57565b91506144518261547f565b602082019050919050565b6000614469602683614f57565b9150614474826154a8565b604082019050919050565b600061448c602a83614f57565b9150614497826154f7565b604082019050919050565b60006144af601183614f57565b91506144ba82615546565b602082019050919050565b60006144d2602383614f57565b91506144dd8261556f565b604082019050919050565b60006144f5602583614f57565b9150614500826155be565b604082019050919050565b6000614518601883614f57565b91506145238261560d565b602082019050919050565b600061453b600c83614f57565b915061454682615636565b602082019050919050565b600061455e601683614f57565b91506145698261565f565b602082019050919050565b6000614581601383614f57565b915061458c82615688565b602082019050919050565b60006145a4601083614f57565b91506145af826156b1565b602082019050919050565b60006145c7603983614f57565b91506145d2826156da565b604082019050919050565b60006145ea602b83614f57565b91506145f582615729565b604082019050919050565b600061460d600883614f57565b915061461882615778565b602082019050919050565b6000614630602683614f57565b915061463b826157a1565b604082019050919050565b6000614653602083614f57565b915061465e826157f0565b602082019050919050565b6000614676602f83614f57565b915061468182615819565b604082019050919050565b6000614699601a83614f57565b91506146a482615868565b602082019050919050565b60006146bc603283614f57565b91506146c782615891565b604082019050919050565b60006146df601783614f57565b91506146ea826158e0565b602082019050919050565b6000614702601183614f57565b915061470d82615909565b602082019050919050565b6000614725602283614f57565b915061473082615932565b604082019050919050565b6000614748603383614f57565b915061475382615981565b604082019050919050565b600061476b601d83614f57565b9150614776826159d0565b602082019050919050565b600061478e602183614f57565b9150614799826159f9565b604082019050919050565b60006147b1601683614f57565b91506147bc82615a48565b602082019050919050565b60006147d4600d83614f57565b91506147df82615a71565b602082019050919050565b60006147f7602e83614f57565b915061480282615a9a565b604082019050919050565b600061481a601f83614f57565b915061482582615ae9565b602082019050919050565b600061483d602f83614f57565b915061484882615b12565b604082019050919050565b6000614860602d83614f57565b915061486b82615b61565b604082019050919050565b6000614883602283614f57565b915061488e82615bb0565b604082019050919050565b60006148a6601183614f57565b91506148b182615bff565b602082019050919050565b6148c581615192565b82525050565b6148d481615192565b82525050565b60006148e682846142d1565b60148201915081905092915050565b600061490182856143e5565b915061490d82846143e5565b91508190509392505050565b600060208201905061492e60008301846142c2565b92915050565b600060808201905061494960008301876142c2565b61495660208301866142c2565b61496360408301856148cb565b81810360608301526149758184614373565b905095945050505050565b6000602082019050818103600083015261499a81846142e8565b905092915050565b60006020820190506149b76000830184614346565b92915050565b60006020820190506149d26000830184614355565b92915050565b60006020820190506149ed6000830184614364565b92915050565b60006020820190508181036000830152614a0d81846143ac565b905092915050565b60006020820190508181036000830152614a2e81614416565b9050919050565b60006020820190508181036000830152614a4e81614439565b9050919050565b60006020820190508181036000830152614a6e8161445c565b9050919050565b60006020820190508181036000830152614a8e8161447f565b9050919050565b60006020820190508181036000830152614aae816144a2565b9050919050565b60006020820190508181036000830152614ace816144c5565b9050919050565b60006020820190508181036000830152614aee816144e8565b9050919050565b60006020820190508181036000830152614b0e8161450b565b9050919050565b60006020820190508181036000830152614b2e8161452e565b9050919050565b60006020820190508181036000830152614b4e81614551565b9050919050565b60006020820190508181036000830152614b6e81614574565b9050919050565b60006020820190508181036000830152614b8e81614597565b9050919050565b60006020820190508181036000830152614bae816145ba565b9050919050565b60006020820190508181036000830152614bce816145dd565b9050919050565b60006020820190508181036000830152614bee81614600565b9050919050565b60006020820190508181036000830152614c0e81614623565b9050919050565b60006020820190508181036000830152614c2e81614646565b9050919050565b60006020820190508181036000830152614c4e81614669565b9050919050565b60006020820190508181036000830152614c6e8161468c565b9050919050565b60006020820190508181036000830152614c8e816146af565b9050919050565b60006020820190508181036000830152614cae816146d2565b9050919050565b60006020820190508181036000830152614cce816146f5565b9050919050565b60006020820190508181036000830152614cee81614718565b9050919050565b60006020820190508181036000830152614d0e8161473b565b9050919050565b60006020820190508181036000830152614d2e8161475e565b9050919050565b60006020820190508181036000830152614d4e81614781565b9050919050565b60006020820190508181036000830152614d6e816147a4565b9050919050565b60006020820190508181036000830152614d8e816147c7565b9050919050565b60006020820190508181036000830152614dae816147ea565b9050919050565b60006020820190508181036000830152614dce8161480d565b9050919050565b60006020820190508181036000830152614dee81614830565b9050919050565b60006020820190508181036000830152614e0e81614853565b9050919050565b60006020820190508181036000830152614e2e81614876565b9050919050565b60006020820190508181036000830152614e4e81614899565b9050919050565b6000602082019050614e6a60008301846148cb565b92915050565b6000614e7a614e8b565b9050614e86828261523a565b919050565b6000604051905090565b600067ffffffffffffffff821115614eb057614eaf6153c5565b5b614eb982615412565b9050602081019050919050565b600067ffffffffffffffff821115614ee157614ee06153c5565b5b614eea82615412565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f7e82615156565b9150614f8983615156565b9250826fffffffffffffffffffffffffffffffff03821115614fae57614fad615309565b5b828201905092915050565b6000614fc482615192565b9150614fcf83615192565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561500457615003615309565b5b828201905092915050565b600061501a82615192565b915061502583615192565b92508261503557615034615338565b5b828204905092915050565b600061504b82615192565b915061505683615192565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561508f5761508e615309565b5b828202905092915050565b60006150a582615156565b91506150b083615156565b9250828210156150c3576150c2615309565b5b828203905092915050565b60006150d982615192565b91506150e483615192565b9250828210156150f7576150f6615309565b5b828203905092915050565b600061510d82615172565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156151c95780820151818401526020810190506151ae565b838111156151d8576000848401525b50505050565b60006151e982615192565b915060008214156151fd576151fc615309565b5b600182039050919050565b6000600282049050600182168061522057607f821691505b6020821081141561523457615233615367565b5b50919050565b61524382615412565b810181811067ffffffffffffffff82111715615262576152616153c5565b5b80604052505050565b600061527682615192565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152a9576152a8615309565b5b600182019050919050565b60006152bf826152c6565b9050919050565b60006152d182615423565b9050919050565b60006152e382615192565b91506152ee83615192565b9250826152fe576152fd615338565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f5072656f7264657273206973206e6f7420616374697665000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f50726573616c6520697320636c6f736564000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473205072652d4f7264657273206c696d69740000000000000000600082015250565b7f4e6f207072656f72646572730000000000000000000000000000000000000000600082015250565b7f45786365656473207072656f72646572206c696d697400000000000000000000600082015250565b7f446973747269627574696f6e20636c6f73656400000000000000000000000000600082015250565b7f45786365656473205458206c696d697400000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e73756666696369656e74206d696e7473206c656674000000000000000000600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c657320697320636c6f73656400000000000000000000600082015250565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473204d4158206c696d6974000000000000000000000000000000600082015250565b615c3181615102565b8114615c3c57600080fd5b50565b615c4881615114565b8114615c5357600080fd5b50565b615c5f81615120565b8114615c6a57600080fd5b50565b615c768161512a565b8114615c8157600080fd5b50565b615c8d81615192565b8114615c9857600080fd5b5056fea2646970667358221220f8ae23696ec273a62377018bfdd2adad6050e952c58ae290ef48ca67f77e138664736f6c63430008070033
Deployed Bytecode Sourcemap
40290:5568:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22923:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41008:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24649:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26174:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25737:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40446:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35277:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21484:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27024:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40620:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41045:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22115:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45147:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44961:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27229:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44517:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43796:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40824:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21647:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43666:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40574:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44851:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24472:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23349:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;761:94;;;;;;;;;;;;;:::i;:::-;;45275:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43179:359;;;;;;;;;;;;;:::i;:::-;;43928:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45387:466;;;:::i;:::-;;538:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24804:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41182:464;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26442:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40486:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40529:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42205:623;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27449:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40671:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41654:543;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24965:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31864:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26779:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42836:335;;;;;;;;;;;;;:::i;:::-;;863:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40409:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40744:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40707:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22923:370;23050:4;23095:25;23080:40;;;:11;:40;;;;:99;;;;23146:33;23131:48;;;:11;:48;;;;23080:99;:160;;;;23205:35;23190:50;;;:11;:50;;;;23080:160;:207;;;;23251:36;23275:11;23251:23;:36::i;:::-;23080:207;23066:221;;22923:370;;;:::o;41008:28::-;;;;:::o;24649:94::-;24703:13;24732:5;24725:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24649:94;:::o;26174:204::-;26242:7;26266:16;26274:7;26266;:16::i;:::-;26258:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26348:15;:24;26364:7;26348:24;;;;;;;;;;;;;;;;;;;;;26341:31;;26174:204;;;:::o;25737:379::-;25806:13;25822:24;25838:7;25822:15;:24::i;:::-;25806:40;;25867:5;25861:11;;:2;:11;;;;25853:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25952:5;25936:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25961:37;25978:5;25985:12;:10;:12::i;:::-;25961:16;:37::i;:::-;25936:62;25920:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;26082:28;26091:2;26095:7;26104:5;26082:8;:28::i;:::-;25799:317;25737:379;;:::o;40446:33::-;;;;:::o;35277:207::-;35420:6;35446:30;;;35439:37;;35277:207;;;;;;:::o;21484:94::-;21537:7;21560:12;;21553:19;;21484:94;:::o;27024:142::-;27132:28;27142:4;27148:2;27152:7;27132:9;:28::i;:::-;27024:142;;;:::o;40620:44::-;;;;:::o;41045:25::-;;;;:::o;22115:744::-;22224:7;22259:16;22269:5;22259:9;:16::i;:::-;22251:5;:24;22243:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22321:22;22346:13;:11;:13::i;:::-;22321:38;;22366:19;22396:25;22446:9;22441:350;22465:14;22461:1;:18;22441:350;;;22495:31;22529:11;:14;22541:1;22529:14;;;;;;;;;;;22495:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22582:1;22556:28;;:9;:14;;;:28;;;22552:89;;22617:9;:14;;;22597:34;;22552:89;22674:5;22653:26;;:17;:26;;;22649:135;;;22711:5;22696:11;:20;22692:59;;;22738:1;22731:8;;;;;;;;;22692:59;22761:13;;;;;:::i;:::-;;;;22649:135;22486:305;22481:3;;;;;:::i;:::-;;;;22441:350;;;;22797:56;;;;;;;;;;:::i;:::-;;;;;;;;22115:744;;;;;:::o;45147:120::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45243:16:::1;45226:14;;:33;;;;;;;;;;;;;;;;;;45147:120:::0;:::o;44961:178::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45054:1:::1;45039:11;:16;:36;;;;45074:1;45059:11;:16;45039:36;:56;;;;45094:1;45079:11;:16;45039:56;45031:65;;;::::0;::::1;;45120:11;45107:10;:24;;;;44961:178:::0;:::o;27229:157::-;27341:39;27358:4;27364:2;27368:7;27341:39;;;;;;;;;;;;:16;:39::i;:::-;27229:157;;;:::o;44517:326::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44617:10:::1;;44601:13;:11;:13::i;:::-;:26;44593:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;44698:16;;44685:10;;:29;;;;:::i;:::-;44675:6;44659:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:55;;44651:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;44765:16;;44755:6;:26;;44747:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44813:22;44823:3;44828:6;44813:9;:22::i;:::-;44517:326:::0;;:::o;43796:120::-;43863:7;43890:8;:18;43899:8;43890:18;;;;;;;;;;;;;;;;43883:25;;43796:120;;;:::o;40824:33::-;;;;;;;;;;;;;:::o;21647:177::-;21714:7;21746:13;:11;:13::i;:::-;21738:5;:21;21730:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21813:5;21806:12;;21647:177;;;:::o;43666:122::-;43734:7;43761:9;:19;43771:8;43761:19;;;;;;;;;;;;;;;;43754:26;;43666:122;;;:::o;40574:39::-;;;;:::o;44851:102::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44938:7:::1;44922:13;:23;;;;;;;;;;;;:::i;:::-;;44851:102:::0;:::o;24472:118::-;24536:7;24559:20;24571:7;24559:11;:20::i;:::-;:25;;;24552:32;;24472:118;;;:::o;23349:211::-;23413:7;23454:1;23437:19;;:5;:19;;;;23429:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23526:12;:19;23539:5;23526:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;23518:36;;23511:43;;23349:211;;;:::o;761:94::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;826:21:::1;844:1;826:9;:21::i;:::-;761:94::o:0;45275:104::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45360:11:::1;45347:10;:24;;;;45275:104:::0;:::o;43179:359::-;43245:10;;43229:13;:11;:13::i;:::-;:26;43221:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;43288:14;;;;;;;;;;;43287:15;43279:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;43369:1;43345:9;:21;43355:10;43345:21;;;;;;;;;;;;;;;;:25;43337:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;43398:44;43408:10;43420:9;:21;43430:10;43420:21;;;;;;;;;;;;;;;;43398:9;:44::i;:::-;43473:9;:21;43483:10;43473:21;;;;;;;;;;;;;;;;43453:16;;:41;;;;;;;:::i;:::-;;;;;;;;43529:1;43505:9;:21;43515:10;43505:21;;;;;;;;;;;;;;;:25;;;;43179:359::o;43928:340::-;43989:16;44018:15;44036:17;44046:6;44036:9;:17::i;:::-;44018:35;;44064:25;44106:10;44092:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44064:53;;44132:6;44128:107;44148:10;44144:1;:14;44128:107;;;44193:30;44213:6;44221:1;44193:19;:30::i;:::-;44179:8;44188:1;44179:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;44160:3;;;;;:::i;:::-;;;;44128:107;;;;44252:8;44245:15;;;;43928:340;;;:::o;45387:466::-;45434:17;45454:42;45434:62;;45514:14;;;;;;;;;;;45513:15;45505:24;;;;;;45560:7;:5;:7::i;:::-;45546:21;;:10;:21;;;:48;;;;45585:9;45571:23;;:10;:23;;;45546:48;45538:57;;;;;;45604:23;45660:2;45654:3;45630:21;:27;;;;:::i;:::-;:32;;;;:::i;:::-;45604:58;;45671:19;45717:15;45693:21;:39;;;;:::i;:::-;45671:61;;45757:9;45749:23;;:40;45773:15;45749:40;;;;;;;;;;;;;;;;;;;;;;;45741:49;;;;;;45815:10;45807:24;;:37;45832:11;45807:37;;;;;;;;;;;;;;;;;;;;;;;45799:46;;;;;;45425:428;;;45387:466::o;538:87::-;584:7;611:6;;;;;;;;;;;604:13;;538:87;:::o;24804:98::-;24860:13;24889:7;24882:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24804:98;:::o;41182:464::-;37142:1;37740:7;;:19;;37732:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37142:1;37873:7;:18;;;;41275:10:::1;;41259:13;:11;:13::i;:::-;:26;41251:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41331:1;41317:10;;:15;41309:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;41417:16;;41404:10;;:29;;;;:::i;:::-;41394:6;41378:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:55;;41370:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41484:16;;41474:6;:26;;41466:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41562:12;;41553:6;:21;;;;:::i;:::-;41540:9;:34;41532:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41607:31;41617:12;:10;:12::i;:::-;41631:6;41607:9;:31::i;:::-;37098:1:::0;38052:7;:22;;;;41182:464;:::o;26442:274::-;26545:12;:10;:12::i;:::-;26533:24;;:8;:24;;;;26525:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26642:8;26597:18;:32;26616:12;:10;:12::i;:::-;26597:32;;;;;;;;;;;;;;;:42;26630:8;26597:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26691:8;26662:48;;26677:12;:10;:12::i;:::-;26662:48;;;26701:8;26662:48;;;;;;:::i;:::-;;;;;;;;26442:274;;:::o;40486:36::-;;;;:::o;40529:38::-;;;;:::o;42205:623::-;37142:1;37740:7;;:19;;37732:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37142:1;37873:7;:18;;;;42299:10:::1;;42283:13;:11;:13::i;:::-;:26;42275:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;42360:25;;42341:16;;:44;42333:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42433:14;;;;;;;;;;;42425:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;42533:16;;42520:10;;:29;;;;:::i;:::-;42510:6;42494:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:55;;42486:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;42624:13;;42614:6;42590:9;:21;42600:10;42590:21;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;:47;;42582:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;42705:14;;42696:6;:23;;;;:::i;:::-;42683:9;:36;42675:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42777:6;42752:9;:21;42762:10;42752:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;42814:6;42794:16;;:26;;;;;;;:::i;:::-;;;;;;;;37098:1:::0;38052:7;:22;;;;42205:623;:::o;27449:311::-;27586:28;27596:4;27602:2;27606:7;27586:9;:28::i;:::-;27637:48;27660:4;27666:2;27670:7;27679:5;27637:22;:48::i;:::-;27621:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;27449:311;;;;:::o;40671:29::-;;;;:::o;41654:543::-;37142:1;37740:7;;:19;;37732:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37142:1;37873:7;:18;;;;41783:10:::1;;41767:13;:11;:13::i;:::-;:26;41759:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41839:1;41825:10;;:15;41817:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;41906:8;:22;41915:12;:10;:12::i;:::-;41906:22;;;;;;;;;;;;;;;;41891:12;;:37;;;;:::i;:::-;41881:6;:47;;41873:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;41975:35;41983:12;;41997;:10;:12::i;:::-;41975:7;:35::i;:::-;41967:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42076:6;42060:13;;:22;;;;:::i;:::-;42047:9;:35;42039:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42141:6;42115:8;:22;42124:12;:10;:12::i;:::-;42115:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;42158:31;42168:12;:10;:12::i;:::-;42182:6;42158:9;:31::i;:::-;37098:1:::0;38052:7;:22;;;;41654:543;;;:::o;24965:394::-;25063:13;25104:16;25112:7;25104;:16::i;:::-;25088:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25194:21;25218:10;:8;:10::i;:::-;25194:34;;25273:1;25255:7;25249:21;:25;:104;;;;;;;;;;;;;;;;;25310:7;25319:18;:7;:16;:18::i;:::-;25293:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25249:104;25235:118;;;24965:394;;;:::o;31864:43::-;;;;:::o;26779:186::-;26901:4;26924:18;:25;26943:5;26924:25;;;;;;;;;;;;;;;:35;26950:8;26924:35;;;;;;;;;;;;;;;;;;;;;;;;;26917:42;;26779:186;;;;:::o;42836:335::-;42888:14;;;;;;;;;;;42880:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;42973:1;42949:9;:21;42959:10;42949:21;;;;;;;;;;;;;;;;:25;42941:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;43018:10;43010:24;;:64;43059:14;;43035:9;:21;43045:10;43035:21;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;43010:64;;;;;;;;;;;;;;;;;;;;;;;43002:73;;;;;;43106:9;:21;43116:10;43106:21;;;;;;;;;;;;;;;;43086:16;;:41;;;;;;;:::i;:::-;;;;;;;;43162:1;43138:9;:21;43148:10;43138:21;;;;;;;;;;;;;;;:25;;;;42836:335::o;863:192::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;972:1:::1;952:22;;:8;:22;;;;944:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1028:19;1038:8;1028:9;:19::i;:::-;863:192:::0;:::o;40409:30::-;;;;:::o;40744:26::-;;;;:::o;40707:28::-;;;;:::o;2881:157::-;2966:4;3005:25;2990:40;;;:11;:40;;;;2983:47;;2881:157;;;:::o;27999:105::-;28056:4;28086:12;;28076:7;:22;28069:29;;27999:105;;;:::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;31686:172::-;31810:2;31783:15;:24;31799:7;31783:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31844:7;31840:2;31824:28;;31833:5;31824:28;;;;;;;;;;;;31686:172;;;:::o;30051:1529::-;30148:35;30186:20;30198:7;30186:11;:20::i;:::-;30148:58;;30215:22;30257:13;:18;;;30241:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;30310:12;:10;:12::i;:::-;30286:36;;:20;30298:7;30286:11;:20::i;:::-;:36;;;30241:81;:142;;;;30333:50;30350:13;:18;;;30370:12;:10;:12::i;:::-;30333:16;:50::i;:::-;30241:142;30215:169;;30409:17;30393:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;30541:4;30519:26;;:13;:18;;;:26;;;30503:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;30630:1;30616:16;;:2;:16;;;;30608:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30683:43;30705:4;30711:2;30715:7;30724:1;30683:21;:43::i;:::-;30783:49;30800:1;30804:7;30813:13;:18;;;30783:8;:49::i;:::-;30871:1;30841:12;:18;30854:4;30841:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30907:1;30879:12;:16;30892:2;30879:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30938:43;;;;;;;;30953:2;30938:43;;;;;;30964:15;30938:43;;;;;30915:11;:20;30927:7;30915:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31209:19;31241:1;31231:7;:11;;;;:::i;:::-;31209:33;;31294:1;31253:43;;:11;:24;31265:11;31253:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;31249:236;;;31311:20;31319:11;31311:7;:20::i;:::-;31307:171;;;31371:97;;;;;;;;31398:13;:18;;;31371:97;;;;;;31429:13;:28;;;31371:97;;;;;31344:11;:24;31356:11;31344:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31307:171;31249:236;31517:7;31513:2;31498:27;;31507:4;31498:27;;;;;;;;;;;;31532:42;31553:4;31559:2;31563:7;31572:1;31532:20;:42::i;:::-;30141:1439;;;30051:1529;;;:::o;28110:98::-;28175:27;28185:2;28189:8;28175:27;;;;;;;;;;;;:9;:27::i;:::-;28110:98;;:::o;23812:606::-;23888:21;;:::i;:::-;23929:16;23937:7;23929;:16::i;:::-;23921:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24001:26;24049:12;24038:7;:23;24034:93;;24118:1;24103:12;24093:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;24072:47;;24034:93;24140:12;24155:7;24140:22;;24135:212;24172:18;24164:4;:26;24135:212;;24209:31;24243:11;:17;24255:4;24243:17;;;;;;;;;;;24209:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24299:1;24273:28;;:9;:14;;;:28;;;24269:71;;24321:9;24314:16;;;;;;;24269:71;24200:147;24192:6;;;;;:::i;:::-;;;;24135:212;;;;24355:57;;;;;;;;;;:::i;:::-;;;;;;;;23812:606;;;;:::o;1063:173::-;1119:16;1138:6;;;;;;;;;;;1119:25;;1164:8;1155:6;;:17;;;;;;;;;;;;;;;;;;1219:8;1188:40;;1209:8;1188:40;;;;;;;;;;;;1108:128;1063:173;:::o;33401:690::-;33538:4;33555:15;:2;:13;;;:15::i;:::-;33551:535;;;33610:2;33594:36;;;33631:12;:10;:12::i;:::-;33645:4;33651:7;33660:5;33594:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33581:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33842:1;33825:6;:13;:18;33821:215;;;33858:61;;;;;;;;;;:::i;:::-;;;;;;;;33821:215;34004:6;33998:13;33989:6;33985:2;33981:15;33974:38;33581:464;33726:45;;;33716:55;;;:6;:55;;;;33709:62;;;;;33551:535;34074:4;34067:11;;33401:690;;;;;;;:::o;44276:229::-;44363:4;44380:12;44422:6;44405:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;44395:35;;;;;;44380:50;;44448:49;44467:11;;44448:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44480:10;;44492:4;44448:18;:49::i;:::-;44441:56;;;44276:229;;;;;:::o;43546:112::-;43606:13;43637;43630:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43546:112;:::o;3135:534::-;3191:13;3232:1;3223:5;:10;3219:53;;;3250:10;;;;;;;;;;;;;;;;;;;;;3219:53;3282:12;3297:5;3282:20;;3313:14;3338:78;3353:1;3345:4;:9;3338:78;;3371:8;;;;;:::i;:::-;;;;3402:2;3394:10;;;;;:::i;:::-;;;3338:78;;;3426:19;3458:6;3448:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3426:39;;3476:154;3492:1;3483:5;:10;3476:154;;3520:1;3510:11;;;;;:::i;:::-;;;3587:2;3579:5;:10;;;;:::i;:::-;3566:2;:24;;;;:::i;:::-;3553:39;;3536:6;3543;3536:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3616:2;3607:11;;;;;:::i;:::-;;;3476:154;;;3654:6;3640:21;;;;;3135:534;;;;:::o;34553:141::-;;;;;:::o;35080:140::-;;;;;:::o;28547:1272::-;28652:20;28675:12;;28652:35;;28716:1;28702:16;;:2;:16;;;;28694:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28893:21;28901:12;28893:7;:21::i;:::-;28892:22;28884:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28975:12;28963:8;:24;;28955:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29035:61;29065:1;29069:2;29073:12;29087:8;29035:21;:61::i;:::-;29105:30;29138:12;:16;29151:2;29138:16;;;;;;;;;;;;;;;29105:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29180:119;;;;;;;;29230:8;29200:11;:19;;;:39;;;;:::i;:::-;29180:119;;;;;;29283:8;29248:11;:24;;;:44;;;;:::i;:::-;29180:119;;;;;29161:12;:16;29174:2;29161:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29334:43;;;;;;;;29349:2;29334:43;;;;;;29360:15;29334:43;;;;;29306:11;:25;29318:12;29306:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29386:20;29409:12;29386:35;;29435:9;29430:281;29454:8;29450:1;:12;29430:281;;;29508:12;29504:2;29483:38;;29500:1;29483:38;;;;;;;;;;;;29548:59;29579:1;29583:2;29587:12;29601:5;29548:22;:59::i;:::-;29530:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;29689:14;;;;;:::i;:::-;;;;29464:3;;;;;:::i;:::-;;;;29430:281;;;;29734:12;29719;:27;;;;29753:60;29782:1;29786:2;29790:12;29804:8;29753:20;:60::i;:::-;28645:1174;;;28547:1272;;;:::o;4508:198::-;4568:4;4587:12;4654:7;4642:20;4634:28;;4697:1;4690:4;:8;4683:15;;;4508:198;;;:::o;38824:190::-;38949:4;39002;38973:25;38986:5;38993:4;38973:12;:25::i;:::-;:33;38966:40;;38824:190;;;;;:::o;39376:675::-;39459:7;39479:20;39502:4;39479:27;;39522:9;39517:497;39541:5;:12;39537:1;:16;39517:497;;;39575:20;39598:5;39604:1;39598:8;;;;;;;;:::i;:::-;;;;;;;;39575:31;;39641:12;39625;:28;39621:382;;39768:42;39783:12;39797;39768:14;:42::i;:::-;39753:57;;39621:382;;;39945:42;39960:12;39974;39945:14;:42::i;:::-;39930:57;;39621:382;39560:454;39555:3;;;;;:::i;:::-;;;;39517:497;;;;40031:12;40024:19;;;39376:675;;;;:::o;40059:224::-;40127:13;40190:1;40184:4;40177:15;40219:1;40213:4;40206:15;40260:4;40254;40244:21;40235:30;;40059:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:323::-;6412:6;6461:2;6449:9;6440:7;6436:23;6432:32;6429:119;;;6467:79;;:::i;:::-;6429:119;6587:1;6612:50;6654:7;6645:6;6634:9;6630:22;6612:50;:::i;:::-;6602:60;;6558:114;6356:323;;;;:::o;6685:329::-;6744:6;6793:2;6781:9;6772:7;6768:23;6764:32;6761:119;;;6799:79;;:::i;:::-;6761:119;6919:1;6944:53;6989:7;6980:6;6969:9;6965:22;6944:53;:::i;:::-;6934:63;;6890:117;6685:329;;;;:::o;7020:327::-;7078:6;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:52;7322:7;7313:6;7302:9;7298:22;7278:52;:::i;:::-;7268:62;;7224:116;7020:327;;;;:::o;7353:349::-;7422:6;7471:2;7459:9;7450:7;7446:23;7442:32;7439:119;;;7477:79;;:::i;:::-;7439:119;7597:1;7622:63;7677:7;7668:6;7657:9;7653:22;7622:63;:::i;:::-;7612:73;;7568:127;7353:349;;;;:::o;7708:509::-;7777:6;7826:2;7814:9;7805:7;7801:23;7797:32;7794:119;;;7832:79;;:::i;:::-;7794:119;7980:1;7969:9;7965:17;7952:31;8010:18;8002:6;7999:30;7996:117;;;8032:79;;:::i;:::-;7996:117;8137:63;8192:7;8183:6;8172:9;8168:22;8137:63;:::i;:::-;8127:73;;7923:287;7708:509;;;;:::o;8223:329::-;8282:6;8331:2;8319:9;8310:7;8306:23;8302:32;8299:119;;;8337:79;;:::i;:::-;8299:119;8457:1;8482:53;8527:7;8518:6;8507:9;8503:22;8482:53;:::i;:::-;8472:63;;8428:117;8223:329;;;;:::o;8558:704::-;8653:6;8661;8669;8718:2;8706:9;8697:7;8693:23;8689:32;8686:119;;;8724:79;;:::i;:::-;8686:119;8844:1;8869:53;8914:7;8905:6;8894:9;8890:22;8869:53;:::i;:::-;8859:63;;8815:117;8999:2;8988:9;8984:18;8971:32;9030:18;9022:6;9019:30;9016:117;;;9052:79;;:::i;:::-;9016:117;9165:80;9237:7;9228:6;9217:9;9213:22;9165:80;:::i;:::-;9147:98;;;;8942:313;8558:704;;;;;:::o;9268:179::-;9337:10;9358:46;9400:3;9392:6;9358:46;:::i;:::-;9436:4;9431:3;9427:14;9413:28;;9268:179;;;;:::o;9453:118::-;9540:24;9558:5;9540:24;:::i;:::-;9535:3;9528:37;9453:118;;:::o;9577:157::-;9682:45;9702:24;9720:5;9702:24;:::i;:::-;9682:45;:::i;:::-;9677:3;9670:58;9577:157;;:::o;9770:732::-;9889:3;9918:54;9966:5;9918:54;:::i;:::-;9988:86;10067:6;10062:3;9988:86;:::i;:::-;9981:93;;10098:56;10148:5;10098:56;:::i;:::-;10177:7;10208:1;10193:284;10218:6;10215:1;10212:13;10193:284;;;10294:6;10288:13;10321:63;10380:3;10365:13;10321:63;:::i;:::-;10314:70;;10407:60;10460:6;10407:60;:::i;:::-;10397:70;;10253:224;10240:1;10237;10233:9;10228:14;;10193:284;;;10197:14;10493:3;10486:10;;9894:608;;;9770:732;;;;:::o;10508:109::-;10589:21;10604:5;10589:21;:::i;:::-;10584:3;10577:34;10508:109;;:::o;10623:118::-;10710:24;10728:5;10710:24;:::i;:::-;10705:3;10698:37;10623:118;;:::o;10747:115::-;10832:23;10849:5;10832:23;:::i;:::-;10827:3;10820:36;10747:115;;:::o;10868:360::-;10954:3;10982:38;11014:5;10982:38;:::i;:::-;11036:70;11099:6;11094:3;11036:70;:::i;:::-;11029:77;;11115:52;11160:6;11155:3;11148:4;11141:5;11137:16;11115:52;:::i;:::-;11192:29;11214:6;11192:29;:::i;:::-;11187:3;11183:39;11176:46;;10958:270;10868:360;;;;:::o;11234:364::-;11322:3;11350:39;11383:5;11350:39;:::i;:::-;11405:71;11469:6;11464:3;11405:71;:::i;:::-;11398:78;;11485:52;11530:6;11525:3;11518:4;11511:5;11507:16;11485:52;:::i;:::-;11562:29;11584:6;11562:29;:::i;:::-;11557:3;11553:39;11546:46;;11326:272;11234:364;;;;:::o;11604:377::-;11710:3;11738:39;11771:5;11738:39;:::i;:::-;11793:89;11875:6;11870:3;11793:89;:::i;:::-;11786:96;;11891:52;11936:6;11931:3;11924:4;11917:5;11913:16;11891:52;:::i;:::-;11968:6;11963:3;11959:16;11952:23;;11714:267;11604:377;;;;:::o;11987:366::-;12129:3;12150:67;12214:2;12209:3;12150:67;:::i;:::-;12143:74;;12226:93;12315:3;12226:93;:::i;:::-;12344:2;12339:3;12335:12;12328:19;;11987:366;;;:::o;12359:::-;12501:3;12522:67;12586:2;12581:3;12522:67;:::i;:::-;12515:74;;12598:93;12687:3;12598:93;:::i;:::-;12716:2;12711:3;12707:12;12700:19;;12359:366;;;:::o;12731:::-;12873:3;12894:67;12958:2;12953:3;12894:67;:::i;:::-;12887:74;;12970:93;13059:3;12970:93;:::i;:::-;13088:2;13083:3;13079:12;13072:19;;12731:366;;;:::o;13103:::-;13245:3;13266:67;13330:2;13325:3;13266:67;:::i;:::-;13259:74;;13342:93;13431:3;13342:93;:::i;:::-;13460:2;13455:3;13451:12;13444:19;;13103:366;;;:::o;13475:::-;13617:3;13638:67;13702:2;13697:3;13638:67;:::i;:::-;13631:74;;13714:93;13803:3;13714:93;:::i;:::-;13832:2;13827:3;13823:12;13816:19;;13475:366;;;:::o;13847:::-;13989:3;14010:67;14074:2;14069:3;14010:67;:::i;:::-;14003:74;;14086:93;14175:3;14086:93;:::i;:::-;14204:2;14199:3;14195:12;14188:19;;13847:366;;;:::o;14219:::-;14361:3;14382:67;14446:2;14441:3;14382:67;:::i;:::-;14375:74;;14458:93;14547:3;14458:93;:::i;:::-;14576:2;14571:3;14567:12;14560:19;;14219:366;;;:::o;14591:::-;14733:3;14754:67;14818:2;14813:3;14754:67;:::i;:::-;14747:74;;14830:93;14919:3;14830:93;:::i;:::-;14948:2;14943:3;14939:12;14932:19;;14591:366;;;:::o;14963:::-;15105:3;15126:67;15190:2;15185:3;15126:67;:::i;:::-;15119:74;;15202:93;15291:3;15202:93;:::i;:::-;15320:2;15315:3;15311:12;15304:19;;14963:366;;;:::o;15335:::-;15477:3;15498:67;15562:2;15557:3;15498:67;:::i;:::-;15491:74;;15574:93;15663:3;15574:93;:::i;:::-;15692:2;15687:3;15683:12;15676:19;;15335:366;;;:::o;15707:::-;15849:3;15870:67;15934:2;15929:3;15870:67;:::i;:::-;15863:74;;15946:93;16035:3;15946:93;:::i;:::-;16064:2;16059:3;16055:12;16048:19;;15707:366;;;:::o;16079:::-;16221:3;16242:67;16306:2;16301:3;16242:67;:::i;:::-;16235:74;;16318:93;16407:3;16318:93;:::i;:::-;16436:2;16431:3;16427:12;16420:19;;16079:366;;;:::o;16451:::-;16593:3;16614:67;16678:2;16673:3;16614:67;:::i;:::-;16607:74;;16690:93;16779:3;16690:93;:::i;:::-;16808:2;16803:3;16799:12;16792:19;;16451:366;;;:::o;16823:::-;16965:3;16986:67;17050:2;17045:3;16986:67;:::i;:::-;16979:74;;17062:93;17151:3;17062:93;:::i;:::-;17180:2;17175:3;17171:12;17164:19;;16823:366;;;:::o;17195:365::-;17337:3;17358:66;17422:1;17417:3;17358:66;:::i;:::-;17351:73;;17433:93;17522:3;17433:93;:::i;:::-;17551:2;17546:3;17542:12;17535:19;;17195:365;;;:::o;17566:366::-;17708:3;17729:67;17793:2;17788:3;17729:67;:::i;:::-;17722:74;;17805:93;17894:3;17805:93;:::i;:::-;17923:2;17918:3;17914:12;17907:19;;17566:366;;;:::o;17938:::-;18080:3;18101:67;18165:2;18160:3;18101:67;:::i;:::-;18094:74;;18177:93;18266:3;18177:93;:::i;:::-;18295:2;18290:3;18286:12;18279:19;;17938:366;;;:::o;18310:::-;18452:3;18473:67;18537:2;18532:3;18473:67;:::i;:::-;18466:74;;18549:93;18638:3;18549:93;:::i;:::-;18667:2;18662:3;18658:12;18651:19;;18310:366;;;:::o;18682:::-;18824:3;18845:67;18909:2;18904:3;18845:67;:::i;:::-;18838:74;;18921:93;19010:3;18921:93;:::i;:::-;19039:2;19034:3;19030:12;19023:19;;18682:366;;;:::o;19054:::-;19196:3;19217:67;19281:2;19276:3;19217:67;:::i;:::-;19210:74;;19293:93;19382:3;19293:93;:::i;:::-;19411:2;19406:3;19402:12;19395:19;;19054:366;;;:::o;19426:::-;19568:3;19589:67;19653:2;19648:3;19589:67;:::i;:::-;19582:74;;19665:93;19754:3;19665:93;:::i;:::-;19783:2;19778:3;19774:12;19767:19;;19426:366;;;:::o;19798:::-;19940:3;19961:67;20025:2;20020:3;19961:67;:::i;:::-;19954:74;;20037:93;20126:3;20037:93;:::i;:::-;20155:2;20150:3;20146:12;20139:19;;19798:366;;;:::o;20170:::-;20312:3;20333:67;20397:2;20392:3;20333:67;:::i;:::-;20326:74;;20409:93;20498:3;20409:93;:::i;:::-;20527:2;20522:3;20518:12;20511:19;;20170:366;;;:::o;20542:::-;20684:3;20705:67;20769:2;20764:3;20705:67;:::i;:::-;20698:74;;20781:93;20870:3;20781:93;:::i;:::-;20899:2;20894:3;20890:12;20883:19;;20542:366;;;:::o;20914:::-;21056:3;21077:67;21141:2;21136:3;21077:67;:::i;:::-;21070:74;;21153:93;21242:3;21153:93;:::i;:::-;21271:2;21266:3;21262:12;21255:19;;20914:366;;;:::o;21286:::-;21428:3;21449:67;21513:2;21508:3;21449:67;:::i;:::-;21442:74;;21525:93;21614:3;21525:93;:::i;:::-;21643:2;21638:3;21634:12;21627:19;;21286:366;;;:::o;21658:::-;21800:3;21821:67;21885:2;21880:3;21821:67;:::i;:::-;21814:74;;21897:93;21986:3;21897:93;:::i;:::-;22015:2;22010:3;22006:12;21999:19;;21658:366;;;:::o;22030:::-;22172:3;22193:67;22257:2;22252:3;22193:67;:::i;:::-;22186:74;;22269:93;22358:3;22269:93;:::i;:::-;22387:2;22382:3;22378:12;22371:19;;22030:366;;;:::o;22402:::-;22544:3;22565:67;22629:2;22624:3;22565:67;:::i;:::-;22558:74;;22641:93;22730:3;22641:93;:::i;:::-;22759:2;22754:3;22750:12;22743:19;;22402:366;;;:::o;22774:::-;22916:3;22937:67;23001:2;22996:3;22937:67;:::i;:::-;22930:74;;23013:93;23102:3;23013:93;:::i;:::-;23131:2;23126:3;23122:12;23115:19;;22774:366;;;:::o;23146:::-;23288:3;23309:67;23373:2;23368:3;23309:67;:::i;:::-;23302:74;;23385:93;23474:3;23385:93;:::i;:::-;23503:2;23498:3;23494:12;23487:19;;23146:366;;;:::o;23518:::-;23660:3;23681:67;23745:2;23740:3;23681:67;:::i;:::-;23674:74;;23757:93;23846:3;23757:93;:::i;:::-;23875:2;23870:3;23866:12;23859:19;;23518:366;;;:::o;23890:::-;24032:3;24053:67;24117:2;24112:3;24053:67;:::i;:::-;24046:74;;24129:93;24218:3;24129:93;:::i;:::-;24247:2;24242:3;24238:12;24231:19;;23890:366;;;:::o;24262:::-;24404:3;24425:67;24489:2;24484:3;24425:67;:::i;:::-;24418:74;;24501:93;24590:3;24501:93;:::i;:::-;24619:2;24614:3;24610:12;24603:19;;24262:366;;;:::o;24634:108::-;24711:24;24729:5;24711:24;:::i;:::-;24706:3;24699:37;24634:108;;:::o;24748:118::-;24835:24;24853:5;24835:24;:::i;:::-;24830:3;24823:37;24748:118;;:::o;24872:256::-;24984:3;24999:75;25070:3;25061:6;24999:75;:::i;:::-;25099:2;25094:3;25090:12;25083:19;;25119:3;25112:10;;24872:256;;;;:::o;25134:435::-;25314:3;25336:95;25427:3;25418:6;25336:95;:::i;:::-;25329:102;;25448:95;25539:3;25530:6;25448:95;:::i;:::-;25441:102;;25560:3;25553:10;;25134:435;;;;;:::o;25575:222::-;25668:4;25706:2;25695:9;25691:18;25683:26;;25719:71;25787:1;25776:9;25772:17;25763:6;25719:71;:::i;:::-;25575:222;;;;:::o;25803:640::-;25998:4;26036:3;26025:9;26021:19;26013:27;;26050:71;26118:1;26107:9;26103:17;26094:6;26050:71;:::i;:::-;26131:72;26199:2;26188:9;26184:18;26175:6;26131:72;:::i;:::-;26213;26281:2;26270:9;26266:18;26257:6;26213:72;:::i;:::-;26332:9;26326:4;26322:20;26317:2;26306:9;26302:18;26295:48;26360:76;26431:4;26422:6;26360:76;:::i;:::-;26352:84;;25803:640;;;;;;;:::o;26449:373::-;26592:4;26630:2;26619:9;26615:18;26607:26;;26679:9;26673:4;26669:20;26665:1;26654:9;26650:17;26643:47;26707:108;26810:4;26801:6;26707:108;:::i;:::-;26699:116;;26449:373;;;;:::o;26828:210::-;26915:4;26953:2;26942:9;26938:18;26930:26;;26966:65;27028:1;27017:9;27013:17;27004:6;26966:65;:::i;:::-;26828:210;;;;:::o;27044:222::-;27137:4;27175:2;27164:9;27160:18;27152:26;;27188:71;27256:1;27245:9;27241:17;27232:6;27188:71;:::i;:::-;27044:222;;;;:::o;27272:218::-;27363:4;27401:2;27390:9;27386:18;27378:26;;27414:69;27480:1;27469:9;27465:17;27456:6;27414:69;:::i;:::-;27272:218;;;;:::o;27496:313::-;27609:4;27647:2;27636:9;27632:18;27624:26;;27696:9;27690:4;27686:20;27682:1;27671:9;27667:17;27660:47;27724:78;27797:4;27788:6;27724:78;:::i;:::-;27716:86;;27496:313;;;;:::o;27815:419::-;27981:4;28019:2;28008:9;28004:18;27996:26;;28068:9;28062:4;28058:20;28054:1;28043:9;28039:17;28032:47;28096:131;28222:4;28096:131;:::i;:::-;28088:139;;27815:419;;;:::o;28240:::-;28406:4;28444:2;28433:9;28429:18;28421:26;;28493:9;28487:4;28483:20;28479:1;28468:9;28464:17;28457:47;28521:131;28647:4;28521:131;:::i;:::-;28513:139;;28240:419;;;:::o;28665:::-;28831:4;28869:2;28858:9;28854:18;28846:26;;28918:9;28912:4;28908:20;28904:1;28893:9;28889:17;28882:47;28946:131;29072:4;28946:131;:::i;:::-;28938:139;;28665:419;;;:::o;29090:::-;29256:4;29294:2;29283:9;29279:18;29271:26;;29343:9;29337:4;29333:20;29329:1;29318:9;29314:17;29307:47;29371:131;29497:4;29371:131;:::i;:::-;29363:139;;29090:419;;;:::o;29515:::-;29681:4;29719:2;29708:9;29704:18;29696:26;;29768:9;29762:4;29758:20;29754:1;29743:9;29739:17;29732:47;29796:131;29922:4;29796:131;:::i;:::-;29788:139;;29515:419;;;:::o;29940:::-;30106:4;30144:2;30133:9;30129:18;30121:26;;30193:9;30187:4;30183:20;30179:1;30168:9;30164:17;30157:47;30221:131;30347:4;30221:131;:::i;:::-;30213:139;;29940:419;;;:::o;30365:::-;30531:4;30569:2;30558:9;30554:18;30546:26;;30618:9;30612:4;30608:20;30604:1;30593:9;30589:17;30582:47;30646:131;30772:4;30646:131;:::i;:::-;30638:139;;30365:419;;;:::o;30790:::-;30956:4;30994:2;30983:9;30979:18;30971:26;;31043:9;31037:4;31033:20;31029:1;31018:9;31014:17;31007:47;31071:131;31197:4;31071:131;:::i;:::-;31063:139;;30790:419;;;:::o;31215:::-;31381:4;31419:2;31408:9;31404:18;31396:26;;31468:9;31462:4;31458:20;31454:1;31443:9;31439:17;31432:47;31496:131;31622:4;31496:131;:::i;:::-;31488:139;;31215:419;;;:::o;31640:::-;31806:4;31844:2;31833:9;31829:18;31821:26;;31893:9;31887:4;31883:20;31879:1;31868:9;31864:17;31857:47;31921:131;32047:4;31921:131;:::i;:::-;31913:139;;31640:419;;;:::o;32065:::-;32231:4;32269:2;32258:9;32254:18;32246:26;;32318:9;32312:4;32308:20;32304:1;32293:9;32289:17;32282:47;32346:131;32472:4;32346:131;:::i;:::-;32338:139;;32065:419;;;:::o;32490:::-;32656:4;32694:2;32683:9;32679:18;32671:26;;32743:9;32737:4;32733:20;32729:1;32718:9;32714:17;32707:47;32771:131;32897:4;32771:131;:::i;:::-;32763:139;;32490:419;;;:::o;32915:::-;33081:4;33119:2;33108:9;33104:18;33096:26;;33168:9;33162:4;33158:20;33154:1;33143:9;33139:17;33132:47;33196:131;33322:4;33196:131;:::i;:::-;33188:139;;32915:419;;;:::o;33340:::-;33506:4;33544:2;33533:9;33529:18;33521:26;;33593:9;33587:4;33583:20;33579:1;33568:9;33564:17;33557:47;33621:131;33747:4;33621:131;:::i;:::-;33613:139;;33340:419;;;:::o;33765:::-;33931:4;33969:2;33958:9;33954:18;33946:26;;34018:9;34012:4;34008:20;34004:1;33993:9;33989:17;33982:47;34046:131;34172:4;34046:131;:::i;:::-;34038:139;;33765:419;;;:::o;34190:::-;34356:4;34394:2;34383:9;34379:18;34371:26;;34443:9;34437:4;34433:20;34429:1;34418:9;34414:17;34407:47;34471:131;34597:4;34471:131;:::i;:::-;34463:139;;34190:419;;;:::o;34615:::-;34781:4;34819:2;34808:9;34804:18;34796:26;;34868:9;34862:4;34858:20;34854:1;34843:9;34839:17;34832:47;34896:131;35022:4;34896:131;:::i;:::-;34888:139;;34615:419;;;:::o;35040:::-;35206:4;35244:2;35233:9;35229:18;35221:26;;35293:9;35287:4;35283:20;35279:1;35268:9;35264:17;35257:47;35321:131;35447:4;35321:131;:::i;:::-;35313:139;;35040:419;;;:::o;35465:::-;35631:4;35669:2;35658:9;35654:18;35646:26;;35718:9;35712:4;35708:20;35704:1;35693:9;35689:17;35682:47;35746:131;35872:4;35746:131;:::i;:::-;35738:139;;35465:419;;;:::o;35890:::-;36056:4;36094:2;36083:9;36079:18;36071:26;;36143:9;36137:4;36133:20;36129:1;36118:9;36114:17;36107:47;36171:131;36297:4;36171:131;:::i;:::-;36163:139;;35890:419;;;:::o;36315:::-;36481:4;36519:2;36508:9;36504:18;36496:26;;36568:9;36562:4;36558:20;36554:1;36543:9;36539:17;36532:47;36596:131;36722:4;36596:131;:::i;:::-;36588:139;;36315:419;;;:::o;36740:::-;36906:4;36944:2;36933:9;36929:18;36921:26;;36993:9;36987:4;36983:20;36979:1;36968:9;36964:17;36957:47;37021:131;37147:4;37021:131;:::i;:::-;37013:139;;36740:419;;;:::o;37165:::-;37331:4;37369:2;37358:9;37354:18;37346:26;;37418:9;37412:4;37408:20;37404:1;37393:9;37389:17;37382:47;37446:131;37572:4;37446:131;:::i;:::-;37438:139;;37165:419;;;:::o;37590:::-;37756:4;37794:2;37783:9;37779:18;37771:26;;37843:9;37837:4;37833:20;37829:1;37818:9;37814:17;37807:47;37871:131;37997:4;37871:131;:::i;:::-;37863:139;;37590:419;;;:::o;38015:::-;38181:4;38219:2;38208:9;38204:18;38196:26;;38268:9;38262:4;38258:20;38254:1;38243:9;38239:17;38232:47;38296:131;38422:4;38296:131;:::i;:::-;38288:139;;38015:419;;;:::o;38440:::-;38606:4;38644:2;38633:9;38629:18;38621:26;;38693:9;38687:4;38683:20;38679:1;38668:9;38664:17;38657:47;38721:131;38847:4;38721:131;:::i;:::-;38713:139;;38440:419;;;:::o;38865:::-;39031:4;39069:2;39058:9;39054:18;39046:26;;39118:9;39112:4;39108:20;39104:1;39093:9;39089:17;39082:47;39146:131;39272:4;39146:131;:::i;:::-;39138:139;;38865:419;;;:::o;39290:::-;39456:4;39494:2;39483:9;39479:18;39471:26;;39543:9;39537:4;39533:20;39529:1;39518:9;39514:17;39507:47;39571:131;39697:4;39571:131;:::i;:::-;39563:139;;39290:419;;;:::o;39715:::-;39881:4;39919:2;39908:9;39904:18;39896:26;;39968:9;39962:4;39958:20;39954:1;39943:9;39939:17;39932:47;39996:131;40122:4;39996:131;:::i;:::-;39988:139;;39715:419;;;:::o;40140:::-;40306:4;40344:2;40333:9;40329:18;40321:26;;40393:9;40387:4;40383:20;40379:1;40368:9;40364:17;40357:47;40421:131;40547:4;40421:131;:::i;:::-;40413:139;;40140:419;;;:::o;40565:::-;40731:4;40769:2;40758:9;40754:18;40746:26;;40818:9;40812:4;40808:20;40804:1;40793:9;40789:17;40782:47;40846:131;40972:4;40846:131;:::i;:::-;40838:139;;40565:419;;;:::o;40990:::-;41156:4;41194:2;41183:9;41179:18;41171:26;;41243:9;41237:4;41233:20;41229:1;41218:9;41214:17;41207:47;41271:131;41397:4;41271:131;:::i;:::-;41263:139;;40990:419;;;:::o;41415:::-;41581:4;41619:2;41608:9;41604:18;41596:26;;41668:9;41662:4;41658:20;41654:1;41643:9;41639:17;41632:47;41696:131;41822:4;41696:131;:::i;:::-;41688:139;;41415:419;;;:::o;41840:::-;42006:4;42044:2;42033:9;42029:18;42021:26;;42093:9;42087:4;42083:20;42079:1;42068:9;42064:17;42057:47;42121:131;42247:4;42121:131;:::i;:::-;42113:139;;41840:419;;;:::o;42265:222::-;42358:4;42396:2;42385:9;42381:18;42373:26;;42409:71;42477:1;42466:9;42462:17;42453:6;42409:71;:::i;:::-;42265:222;;;;:::o;42493:129::-;42527:6;42554:20;;:::i;:::-;42544:30;;42583:33;42611:4;42603:6;42583:33;:::i;:::-;42493:129;;;:::o;42628:75::-;42661:6;42694:2;42688:9;42678:19;;42628:75;:::o;42709:307::-;42770:4;42860:18;42852:6;42849:30;42846:56;;;42882:18;;:::i;:::-;42846:56;42920:29;42942:6;42920:29;:::i;:::-;42912:37;;43004:4;42998;42994:15;42986:23;;42709:307;;;:::o;43022:308::-;43084:4;43174:18;43166:6;43163:30;43160:56;;;43196:18;;:::i;:::-;43160:56;43234:29;43256:6;43234:29;:::i;:::-;43226:37;;43318:4;43312;43308:15;43300:23;;43022:308;;;:::o;43336:132::-;43403:4;43426:3;43418:11;;43456:4;43451:3;43447:14;43439:22;;43336:132;;;:::o;43474:114::-;43541:6;43575:5;43569:12;43559:22;;43474:114;;;:::o;43594:98::-;43645:6;43679:5;43673:12;43663:22;;43594:98;;;:::o;43698:99::-;43750:6;43784:5;43778:12;43768:22;;43698:99;;;:::o;43803:113::-;43873:4;43905;43900:3;43896:14;43888:22;;43803:113;;;:::o;43922:184::-;44021:11;44055:6;44050:3;44043:19;44095:4;44090:3;44086:14;44071:29;;43922:184;;;;:::o;44112:168::-;44195:11;44229:6;44224:3;44217:19;44269:4;44264:3;44260:14;44245:29;;44112:168;;;;:::o;44286:169::-;44370:11;44404:6;44399:3;44392:19;44444:4;44439:3;44435:14;44420:29;;44286:169;;;;:::o;44461:148::-;44563:11;44600:3;44585:18;;44461:148;;;;:::o;44615:273::-;44655:3;44674:20;44692:1;44674:20;:::i;:::-;44669:25;;44708:20;44726:1;44708:20;:::i;:::-;44703:25;;44830:1;44794:34;44790:42;44787:1;44784:49;44781:75;;;44836:18;;:::i;:::-;44781:75;44880:1;44877;44873:9;44866:16;;44615:273;;;;:::o;44894:305::-;44934:3;44953:20;44971:1;44953:20;:::i;:::-;44948:25;;44987:20;45005:1;44987:20;:::i;:::-;44982:25;;45141:1;45073:66;45069:74;45066:1;45063:81;45060:107;;;45147:18;;:::i;:::-;45060:107;45191:1;45188;45184:9;45177:16;;44894:305;;;;:::o;45205:185::-;45245:1;45262:20;45280:1;45262:20;:::i;:::-;45257:25;;45296:20;45314:1;45296:20;:::i;:::-;45291:25;;45335:1;45325:35;;45340:18;;:::i;:::-;45325:35;45382:1;45379;45375:9;45370:14;;45205:185;;;;:::o;45396:348::-;45436:7;45459:20;45477:1;45459:20;:::i;:::-;45454:25;;45493:20;45511:1;45493:20;:::i;:::-;45488:25;;45681:1;45613:66;45609:74;45606:1;45603:81;45598:1;45591:9;45584:17;45580:105;45577:131;;;45688:18;;:::i;:::-;45577:131;45736:1;45733;45729:9;45718:20;;45396:348;;;;:::o;45750:191::-;45790:4;45810:20;45828:1;45810:20;:::i;:::-;45805:25;;45844:20;45862:1;45844:20;:::i;:::-;45839:25;;45883:1;45880;45877:8;45874:34;;;45888:18;;:::i;:::-;45874:34;45933:1;45930;45926:9;45918:17;;45750:191;;;;:::o;45947:::-;45987:4;46007:20;46025:1;46007:20;:::i;:::-;46002:25;;46041:20;46059:1;46041:20;:::i;:::-;46036:25;;46080:1;46077;46074:8;46071:34;;;46085:18;;:::i;:::-;46071:34;46130:1;46127;46123:9;46115:17;;45947:191;;;;:::o;46144:96::-;46181:7;46210:24;46228:5;46210:24;:::i;:::-;46199:35;;46144:96;;;:::o;46246:90::-;46280:7;46323:5;46316:13;46309:21;46298:32;;46246:90;;;:::o;46342:77::-;46379:7;46408:5;46397:16;;46342:77;;;:::o;46425:149::-;46461:7;46501:66;46494:5;46490:78;46479:89;;46425:149;;;:::o;46580:118::-;46617:7;46657:34;46650:5;46646:46;46635:57;;46580:118;;;:::o;46704:126::-;46741:7;46781:42;46774:5;46770:54;46759:65;;46704:126;;;:::o;46836:77::-;46873:7;46902:5;46891:16;;46836:77;;;:::o;46919:154::-;47003:6;46998:3;46993;46980:30;47065:1;47056:6;47051:3;47047:16;47040:27;46919:154;;;:::o;47079:307::-;47147:1;47157:113;47171:6;47168:1;47165:13;47157:113;;;47256:1;47251:3;47247:11;47241:18;47237:1;47232:3;47228:11;47221:39;47193:2;47190:1;47186:10;47181:15;;47157:113;;;47288:6;47285:1;47282:13;47279:101;;;47368:1;47359:6;47354:3;47350:16;47343:27;47279:101;47128:258;47079:307;;;:::o;47392:171::-;47431:3;47454:24;47472:5;47454:24;:::i;:::-;47445:33;;47500:4;47493:5;47490:15;47487:41;;;47508:18;;:::i;:::-;47487:41;47555:1;47548:5;47544:13;47537:20;;47392:171;;;:::o;47569:320::-;47613:6;47650:1;47644:4;47640:12;47630:22;;47697:1;47691:4;47687:12;47718:18;47708:81;;47774:4;47766:6;47762:17;47752:27;;47708:81;47836:2;47828:6;47825:14;47805:18;47802:38;47799:84;;;47855:18;;:::i;:::-;47799:84;47620:269;47569:320;;;:::o;47895:281::-;47978:27;48000:4;47978:27;:::i;:::-;47970:6;47966:40;48108:6;48096:10;48093:22;48072:18;48060:10;48057:34;48054:62;48051:88;;;48119:18;;:::i;:::-;48051:88;48159:10;48155:2;48148:22;47938:238;47895:281;;:::o;48182:233::-;48221:3;48244:24;48262:5;48244:24;:::i;:::-;48235:33;;48290:66;48283:5;48280:77;48277:103;;;48360:18;;:::i;:::-;48277:103;48407:1;48400:5;48396:13;48389:20;;48182:233;;;:::o;48421:100::-;48460:7;48489:26;48509:5;48489:26;:::i;:::-;48478:37;;48421:100;;;:::o;48527:94::-;48566:7;48595:20;48609:5;48595:20;:::i;:::-;48584:31;;48527:94;;;:::o;48627:176::-;48659:1;48676:20;48694:1;48676:20;:::i;:::-;48671:25;;48710:20;48728:1;48710:20;:::i;:::-;48705:25;;48749:1;48739:35;;48754:18;;:::i;:::-;48739:35;48795:1;48792;48788:9;48783:14;;48627:176;;;;:::o;48809:180::-;48857:77;48854:1;48847:88;48954:4;48951:1;48944:15;48978:4;48975:1;48968:15;48995:180;49043:77;49040:1;49033:88;49140:4;49137:1;49130:15;49164:4;49161:1;49154:15;49181:180;49229:77;49226:1;49219:88;49326:4;49323:1;49316:15;49350:4;49347:1;49340:15;49367:180;49415:77;49412:1;49405:88;49512:4;49509:1;49502:15;49536:4;49533:1;49526:15;49553:180;49601:77;49598:1;49591:88;49698:4;49695:1;49688:15;49722:4;49719:1;49712:15;49739:117;49848:1;49845;49838:12;49862:117;49971:1;49968;49961:12;49985:117;50094:1;50091;50084:12;50108:117;50217:1;50214;50207:12;50231:117;50340:1;50337;50330:12;50354:117;50463:1;50460;50453:12;50477:102;50518:6;50569:2;50565:7;50560:2;50553:5;50549:14;50545:28;50535:38;;50477:102;;;:::o;50585:94::-;50618:8;50666:5;50662:2;50658:14;50637:35;;50585:94;;;:::o;50685:221::-;50825:34;50821:1;50813:6;50809:14;50802:58;50894:4;50889:2;50881:6;50877:15;50870:29;50685:221;:::o;50912:173::-;51052:25;51048:1;51040:6;51036:14;51029:49;50912:173;:::o;51091:225::-;51231:34;51227:1;51219:6;51215:14;51208:58;51300:8;51295:2;51287:6;51283:15;51276:33;51091:225;:::o;51322:229::-;51462:34;51458:1;51450:6;51446:14;51439:58;51531:12;51526:2;51518:6;51514:15;51507:37;51322:229;:::o;51557:167::-;51697:19;51693:1;51685:6;51681:14;51674:43;51557:167;:::o;51730:222::-;51870:34;51866:1;51858:6;51854:14;51847:58;51939:5;51934:2;51926:6;51922:15;51915:30;51730:222;:::o;51958:224::-;52098:34;52094:1;52086:6;52082:14;52075:58;52167:7;52162:2;52154:6;52150:15;52143:32;51958:224;:::o;52188:174::-;52328:26;52324:1;52316:6;52312:14;52305:50;52188:174;:::o;52368:162::-;52508:14;52504:1;52496:6;52492:14;52485:38;52368:162;:::o;52536:172::-;52676:24;52672:1;52664:6;52660:14;52653:48;52536:172;:::o;52714:169::-;52854:21;52850:1;52842:6;52838:14;52831:45;52714:169;:::o;52889:166::-;53029:18;53025:1;53017:6;53013:14;53006:42;52889:166;:::o;53061:244::-;53201:34;53197:1;53189:6;53185:14;53178:58;53270:27;53265:2;53257:6;53253:15;53246:52;53061:244;:::o;53311:230::-;53451:34;53447:1;53439:6;53435:14;53428:58;53520:13;53515:2;53507:6;53503:15;53496:38;53311:230;:::o;53547:158::-;53687:10;53683:1;53675:6;53671:14;53664:34;53547:158;:::o;53711:225::-;53851:34;53847:1;53839:6;53835:14;53828:58;53920:8;53915:2;53907:6;53903:15;53896:33;53711:225;:::o;53942:182::-;54082:34;54078:1;54070:6;54066:14;54059:58;53942:182;:::o;54130:234::-;54270:34;54266:1;54258:6;54254:14;54247:58;54339:17;54334:2;54326:6;54322:15;54315:42;54130:234;:::o;54370:176::-;54510:28;54506:1;54498:6;54494:14;54487:52;54370:176;:::o;54552:237::-;54692:34;54688:1;54680:6;54676:14;54669:58;54761:20;54756:2;54748:6;54744:15;54737:45;54552:237;:::o;54795:173::-;54935:25;54931:1;54923:6;54919:14;54912:49;54795:173;:::o;54974:167::-;55114:19;55110:1;55102:6;55098:14;55091:43;54974:167;:::o;55147:221::-;55287:34;55283:1;55275:6;55271:14;55264:58;55356:4;55351:2;55343:6;55339:15;55332:29;55147:221;:::o;55374:238::-;55514:34;55510:1;55502:6;55498:14;55491:58;55583:21;55578:2;55570:6;55566:15;55559:46;55374:238;:::o;55618:179::-;55758:31;55754:1;55746:6;55742:14;55735:55;55618:179;:::o;55803:220::-;55943:34;55939:1;55931:6;55927:14;55920:58;56012:3;56007:2;55999:6;55995:15;55988:28;55803:220;:::o;56029:172::-;56169:24;56165:1;56157:6;56153:14;56146:48;56029:172;:::o;56207:163::-;56347:15;56343:1;56335:6;56331:14;56324:39;56207:163;:::o;56376:233::-;56516:34;56512:1;56504:6;56500:14;56493:58;56585:16;56580:2;56572:6;56568:15;56561:41;56376:233;:::o;56615:181::-;56755:33;56751:1;56743:6;56739:14;56732:57;56615:181;:::o;56802:234::-;56942:34;56938:1;56930:6;56926:14;56919:58;57011:17;57006:2;56998:6;56994:15;56987:42;56802:234;:::o;57042:232::-;57182:34;57178:1;57170:6;57166:14;57159:58;57251:15;57246:2;57238:6;57234:15;57227:40;57042:232;:::o;57280:221::-;57420:34;57416:1;57408:6;57404:14;57397:58;57489:4;57484:2;57476:6;57472:15;57465:29;57280:221;:::o;57507:167::-;57647:19;57643:1;57635:6;57631:14;57624:43;57507:167;:::o;57680:122::-;57753:24;57771:5;57753:24;:::i;:::-;57746:5;57743:35;57733:63;;57792:1;57789;57782:12;57733:63;57680:122;:::o;57808:116::-;57878:21;57893:5;57878:21;:::i;:::-;57871:5;57868:32;57858:60;;57914:1;57911;57904:12;57858:60;57808:116;:::o;57930:122::-;58003:24;58021:5;58003:24;:::i;:::-;57996:5;57993:35;57983:63;;58042:1;58039;58032:12;57983:63;57930:122;:::o;58058:120::-;58130:23;58147:5;58130:23;:::i;:::-;58123:5;58120:34;58110:62;;58168:1;58165;58158:12;58110:62;58058:120;:::o;58184:122::-;58257:24;58275:5;58257:24;:::i;:::-;58250:5;58247:35;58237:63;;58296:1;58293;58286:12;58237:63;58184:122;:::o
Swarm Source
ipfs://f8ae23696ec273a62377018bfdd2adad6050e952c58ae290ef48ca67f77e1386
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.