More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 40 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 20712092 | 32 days ago | IN | 0 ETH | 0.00019976 | ||||
Transfer From | 19216782 | 241 days ago | IN | 0 ETH | 0.00115405 | ||||
Transfer From | 16913041 | 564 days ago | IN | 0 ETH | 0.00146755 | ||||
Transfer From | 16793598 | 581 days ago | IN | 0 ETH | 0.00144841 | ||||
Transfer From | 16793597 | 581 days ago | IN | 0 ETH | 0.00208271 | ||||
Transfer From | 16714019 | 592 days ago | IN | 0 ETH | 0.00158819 | ||||
Transfer From | 16713979 | 592 days ago | IN | 0 ETH | 0.00154852 | ||||
Transfer From | 16713970 | 592 days ago | IN | 0 ETH | 0.00165502 | ||||
Transfer From | 16708282 | 593 days ago | IN | 0 ETH | 0.00086325 | ||||
Transfer From | 16708279 | 593 days ago | IN | 0 ETH | 0.00078669 | ||||
Public_Mint_Comm... | 16708246 | 593 days ago | IN | 0 ETH | 0.00140331 | ||||
Public_Mint_Comm... | 16708244 | 593 days ago | IN | 0 ETH | 0.00140453 | ||||
Transfer From | 16708216 | 593 days ago | IN | 0 ETH | 0.00083231 | ||||
Transfer From | 16708213 | 593 days ago | IN | 0 ETH | 0.00082348 | ||||
Transfer From | 16708208 | 593 days ago | IN | 0 ETH | 0.00087081 | ||||
Transfer From | 16708204 | 593 days ago | IN | 0 ETH | 0.00077051 | ||||
Transfer From | 16708191 | 593 days ago | IN | 0 ETH | 0.00085764 | ||||
Transfer From | 16708183 | 593 days ago | IN | 0 ETH | 0.00084692 | ||||
Transfer From | 16708179 | 593 days ago | IN | 0 ETH | 0.00086692 | ||||
Transfer From | 16708171 | 593 days ago | IN | 0 ETH | 0.00079423 | ||||
Transfer From | 16708167 | 593 days ago | IN | 0 ETH | 0.00116788 | ||||
Public_Mint_Epic | 16693894 | 595 days ago | IN | 0 ETH | 0.00249179 | ||||
Public_Mint_Rare | 16693890 | 595 days ago | IN | 0 ETH | 0.00255761 | ||||
Public_Mint_Lege... | 16693886 | 595 days ago | IN | 0 ETH | 0.0023443 | ||||
Public_Mint_Comm... | 16693881 | 595 days ago | IN | 0 ETH | 0.0023101 |
Loading...
Loading
Contract Name:
ApesCastle
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-19 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor(address __owner) { _transferOwnership(__owner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // all token uris string baseURI_ = "https://apescastle.com/upload/nft/"; uint256 internal mintCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Optional mapping for token URIs mapping(uint256 => string) internal _tokenURIs; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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 || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: address zero is not a valid owner" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _ownerOf(tokenId); require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @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) { _requireMinted(tokenId); string memory typeFile = ".json"; string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string( abi.encodePacked(baseURI, tokenId.toString(), typeFile) ) : ""; } /** * @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 overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return baseURI_; } /** * @dev See {IERC721-approve}. */ 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 token owner or approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_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 virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved" ); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ 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" ); } /** * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist */ function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } /** * @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`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _ownerOf(tokenId) != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ 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" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ 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, 1); // Check that tokenId was not minted by `_beforeTokenTransfer` hook require(!_exists(tokenId), "ERC721: token already minted"); unchecked { // Will not overflow unless all 2**256 token ids are minted to the same owner. // Given that tokens are minted one by one, it is impossible in practice that // this ever happens. Might change if we allow batch minting. // The ERC fails to describe this case. _balances[to] += 1; } _owners[tokenId] = to; mintCounter++; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId, 1); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId, 1); // Check that tokenId was not transferred by `_beforeTokenTransfer` hook require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner" ); // Clear approvals from the previous owner delete _tokenApprovals[tokenId]; unchecked { // `_balances[from]` cannot overflow for the same reason as described in `_burn`: // `from`'s balance is the number of token held, which is at least one before the current // transfer. // `_balances[to]` could overflow in the conditions described in `_mint`. That would require // all 2**256 token ids to be minted, which in practice is impossible. _balances[from] -= 1; _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`. * - When `from` is zero, the tokens will be minted for `to`. * - When `to` is zero, ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256, /* firstTokenId */ uint256 batchSize ) internal virtual { if (batchSize > 1) { if (from != address(0)) { _balances[from] -= batchSize; } if (to != address(0)) { _balances[to] += batchSize; } } } /** * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`. * - When `from` is zero, the tokens were minted for `to`. * - When `to` is zero, ``from``'s tokens were burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 firstTokenId, uint256 batchSize ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { _tokenURIs[tokenId] = _tokenURI; } } // File: ApesCastle.sol pragma solidity ^0.8.10; error PublicMintPhase1(uint256 Tids, uint256 TidsPh1); error TypeIsOver(uint256 TypeNow, uint256 AllType); error LessOrMoreAllowed(uint256 input); error MaxSupply(uint256 maxSupply, uint256 userTotal); contract ApesCastle is ERC721, ERC721URIStorage, Ownable { using Math for uint256; // status for public mint bool public publicMintStatus = true; // max total supply uint256 private MAX_SUPPLY = 55555; // The maximum amount you can do in one transaction minting uint256 public allowedAmountMax = 4; // for tokenUri with specific characters uint256 public LegendaryTId = 0; uint256 public EpicTId = 5556; uint256 public RareTId = 15556; uint256 public CommonTId = 30556; // price for public mint NFTs uint256 public constant Factor_Public_Legendary = 12; // 0.60 uint256 public constant Factor_Public_Epic = 8; // 0.40 uint256 public constant Factor_Public_Rare = 4; // 0.20 uint256 public constant Factor_Public_Common = 2; // 0.10 uint256 public constant PRICE_PUBLIC = 0.05 ether; bool public statusPh1Public = true; uint256 public tid_legendaryPh1Public = 19; uint256 public tid_epicPh1Public = 5652; uint256 public tid_rarePh1Public = 16018; uint256 public tid_commonPh1Public = 31086; address public marketingAddress_1 = 0x1A5A3205f13454491c2d0Aeaa9b5eFD551354dfB; address public marketingAddress_2 = 0x3bc03F9f17d0940223F52407551599dE23Aa010B; constructor(string memory _name, string memory _symbol, address _owner) ERC721(_name, _symbol) Ownable(_owner) {} // You can mint until the mint counter reaches the maximum supply modifier mintOpen() { require(mintCounter <= MAX_SUPPLY, "mint is end!"); _; } // owner functions // // set numbers first phase in public mint function setTIds_PublicMint_ph1( bool _st, uint256 p_legendray, uint256 p_epic, uint256 p_rare, uint256 p_common ) public onlyOwner { statusPh1Public = _st; tid_legendaryPh1Public = p_legendray; tid_epicPh1Public = p_epic; tid_rarePh1Public = p_rare; tid_commonPh1Public = p_common; } function setTId_PublicMint_ph1_status(bool _st) public onlyOwner { statusPh1Public = _st; } function setMarketingAddresses( address marketingAddress_1_, address marketingAddress_2_ ) public onlyOwner { marketingAddress_1 = marketingAddress_1_; marketingAddress_2 = marketingAddress_2_; } function setPublicMintStatus(bool _st) public onlyOwner { publicMintStatus = _st; } function withdrawAll() public onlyOwner { uint256 balance = address(this).balance; uint256 marketingShare_1 = balance.mul(50).div(100); uint256 marketingShare_2 = balance.mul(20).div(100); uint256 ownerShare = balance.mul(30).div(100); require(balance > 0); _withdraw(owner(), ownerShare); _withdraw(marketingAddress_1, marketingShare_1); _withdraw(marketingAddress_2, marketingShare_2); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } function setBaseURI(string memory uri) public onlyOwner { baseURI_ = uri; } // When the public mint is open, any address can mint with a maximum of 4 in one transaction function Public_Mint_Legendary(uint256 _count) public payable mintOpen { if (!((LegendaryTId + _count) - 1 < EpicTId)) { revert TypeIsOver({ TypeNow: (LegendaryTId + _count) - 1, AllType: EpicTId - (LegendaryTId - 1) }); } if (msg.sender == owner()) { for (uint256 i = 0; i < _count; i++) { _mint(msg.sender, LegendaryTId); LegendaryTId++; } return; } if (statusPh1Public) { if (!((LegendaryTId + _count) - 1 <= tid_legendaryPh1Public)) { revert PublicMintPhase1({ Tids: LegendaryTId, TidsPh1: tid_legendaryPh1Public }); } } if (!(_count > 0 )) { revert LessOrMoreAllowed({input: _count}); } if (!(_count <= allowedAmountMax)) {revert LessOrMoreAllowed({input: _count});} require(publicMintStatus, "@dev : public mint is not open"); require( msg.value == PRICE_PUBLIC * Factor_Public_Legendary * _count, "Value is over or under price." ); for (uint256 i = 0; i < _count; i++) { _mint(msg.sender, LegendaryTId); LegendaryTId++; } } function Public_Mint_Epic(uint256 _count) public payable mintOpen { if (!((EpicTId + _count) - 1 < RareTId)) { revert TypeIsOver({ TypeNow: (EpicTId + _count) - 1, AllType: RareTId - (EpicTId - 1) }); } if (msg.sender == owner()) { for (uint256 i = 0; i < _count; i++) { _mint(msg.sender, EpicTId); EpicTId++; } return; } if (statusPh1Public) { if (!((EpicTId + _count) - 1 <= tid_epicPh1Public)) { revert PublicMintPhase1({ Tids: EpicTId, TidsPh1: tid_epicPh1Public }); } } if (!(_count > 0 )) { revert LessOrMoreAllowed({input: _count}); } if (!(_count <= allowedAmountMax)) {revert LessOrMoreAllowed({input: _count});} require(publicMintStatus, "@dev : public mint is not open"); require( msg.value == PRICE_PUBLIC * Factor_Public_Epic * _count, "Value is over or under price." ); for (uint256 i = 0; i < _count; i++) { _mint(msg.sender, EpicTId); EpicTId++; } } function Public_Mint_Rare(uint256 _count) public payable mintOpen { if (!((RareTId + _count) - 1 < CommonTId)) { revert TypeIsOver({ TypeNow: (CommonTId + _count) - 1, AllType: CommonTId - (RareTId - 1) }); } if (msg.sender == owner()) { for (uint256 i = 0; i < _count; i++) { _mint(msg.sender, RareTId); RareTId++; } return; } if (statusPh1Public) { if (!((RareTId + _count) - 1 <= tid_rarePh1Public)) { revert PublicMintPhase1({ Tids: RareTId, TidsPh1: tid_rarePh1Public }); } } if (!(_count > 0 )) { revert LessOrMoreAllowed({input: _count}); } if (!(_count <= allowedAmountMax)) {revert LessOrMoreAllowed({input: _count});} require(publicMintStatus, "@dev : public mint is not open"); require( msg.value == PRICE_PUBLIC * Factor_Public_Rare * _count, "Value is over or under price." ); for (uint256 i = 0; i < _count; i++) { _mint(msg.sender, RareTId); RareTId++; } } function Public_Mint_Common(uint256 _count) public payable mintOpen { uint256 total = totalSupply(); if (!((CommonTId + _count) - 1 < MAX_SUPPLY)) { revert TypeIsOver({ TypeNow: (CommonTId + _count) - 1, AllType: MAX_SUPPLY - (CommonTId - 1) }); } if (msg.sender == owner()) { for (uint256 i = 0; i < _count; i++) { _mint(msg.sender, CommonTId); CommonTId++; } return; } if (statusPh1Public) { if (!((CommonTId + _count) - 1 <= tid_commonPh1Public)) { revert PublicMintPhase1({ Tids: CommonTId, TidsPh1: tid_commonPh1Public }); } } if (!(_count > 0 )) { revert LessOrMoreAllowed({input: _count}); } if (!(_count <= allowedAmountMax)) {revert LessOrMoreAllowed({input: _count});} if (!(_count + total <= MAX_SUPPLY)) { revert MaxSupply({ maxSupply: MAX_SUPPLY, userTotal: _count + total }); } require(publicMintStatus, "@dev : public mint is not open"); require( msg.value == PRICE_PUBLIC * Factor_Public_Common * _count, "Value is over or under price." ); for (uint256 i = 0; i < _count; i++) { _mint(msg.sender, CommonTId); CommonTId++; } } // The following functions are overrides required by Solidity. function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function totalSupply() public view returns (uint256) { return mintCounter; } function baseURI() public view returns (string memory) { return baseURI_; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"input","type":"uint256"}],"name":"LessOrMoreAllowed","type":"error"},{"inputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"userTotal","type":"uint256"}],"name":"MaxSupply","type":"error"},{"inputs":[{"internalType":"uint256","name":"Tids","type":"uint256"},{"internalType":"uint256","name":"TidsPh1","type":"uint256"}],"name":"PublicMintPhase1","type":"error"},{"inputs":[{"internalType":"uint256","name":"TypeNow","type":"uint256"},{"internalType":"uint256","name":"AllType","type":"uint256"}],"name":"TypeIsOver","type":"error"},{"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":"CommonTId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EpicTId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Factor_Public_Common","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Factor_Public_Epic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Factor_Public_Legendary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Factor_Public_Rare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LegendaryTId","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":"uint256","name":"_count","type":"uint256"}],"name":"Public_Mint_Common","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"Public_Mint_Epic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"Public_Mint_Legendary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"Public_Mint_Rare","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"RareTId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowedAmountMax","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"marketingAddress_1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress_2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingAddress_1_","type":"address"},{"internalType":"address","name":"marketingAddress_2_","type":"address"}],"name":"setMarketingAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_st","type":"bool"}],"name":"setPublicMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_st","type":"bool"}],"name":"setTId_PublicMint_ph1_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_st","type":"bool"},{"internalType":"uint256","name":"p_legendray","type":"uint256"},{"internalType":"uint256","name":"p_epic","type":"uint256"},{"internalType":"uint256","name":"p_rare","type":"uint256"},{"internalType":"uint256","name":"p_common","type":"uint256"}],"name":"setTIds_PublicMint_ph1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"statusPh1Public","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tid_commonPh1Public","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tid_epicPh1Public","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tid_legendaryPh1Public","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tid_rarePh1Public","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060600160405280602281526020016200540160229139600090816200002e9190620004ff565b506001600960146101000a81548160ff02191690831515021790555061d903600a556004600b556000600c556115b4600d55613cc4600e5561775c600f556001601060006101000a81548160ff0219169083151502179055506013601155611614601255613e9260135561796e601455731a5a3205f13454491c2d0aeaa9b5efd551354dfb601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733bc03f9f17d0940223f52407551599de23aa010b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200015557600080fd5b50604051620054233803806200542383398181016040528101906200017b9190620007af565b80838381600290816200018f9190620004ff565b508060039081620001a19190620004ff565b505050620001b581620001bf60201b60201c565b5050505062000849565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030757607f821691505b6020821081036200031d576200031c620002bf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000348565b62000393868362000348565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003e0620003da620003d484620003ab565b620003b5565b620003ab565b9050919050565b6000819050919050565b620003fc83620003bf565b620004146200040b82620003e7565b84845462000355565b825550505050565b600090565b6200042b6200041c565b62000438818484620003f1565b505050565b5b8181101562000460576200045460008262000421565b6001810190506200043e565b5050565b601f821115620004af57620004798162000323565b620004848462000338565b8101602085101562000494578190505b620004ac620004a38562000338565b8301826200043d565b50505b505050565b600082821c905092915050565b6000620004d460001984600802620004b4565b1980831691505092915050565b6000620004ef8383620004c1565b9150826002028217905092915050565b6200050a8262000285565b67ffffffffffffffff81111562000526576200052562000290565b5b620005328254620002ee565b6200053f82828562000464565b600060209050601f83116001811462000577576000841562000562578287015190505b6200056e8582620004e1565b865550620005de565b601f198416620005878662000323565b60005b82811015620005b1578489015182556001820191506020850194506020810190506200058a565b86831015620005d15784890151620005cd601f891682620004c1565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006208262000604565b810181811067ffffffffffffffff8211171562000642576200064162000290565b5b80604052505050565b600062000657620005e6565b905062000665828262000615565b919050565b600067ffffffffffffffff82111562000688576200068762000290565b5b620006938262000604565b9050602081019050919050565b60005b83811015620006c0578082015181840152602081019050620006a3565b60008484015250505050565b6000620006e3620006dd846200066a565b6200064b565b905082815260208101848484011115620007025762000701620005ff565b5b6200070f848285620006a0565b509392505050565b600082601f8301126200072f576200072e620005fa565b5b815162000741848260208601620006cc565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000777826200074a565b9050919050565b62000789816200076a565b81146200079557600080fd5b50565b600081519050620007a9816200077e565b92915050565b600080600060608486031215620007cb57620007ca620005f0565b5b600084015167ffffffffffffffff811115620007ec57620007eb620005f5565b5b620007fa8682870162000717565b935050602084015167ffffffffffffffff8111156200081e576200081d620005f5565b5b6200082c8682870162000717565b92505060406200083f8682870162000798565b9150509250925092565b614ba880620008596000396000f3fe60806040526004361061027d5760003560e01c80637255eb6b1161014f578063b61ff93c116100c1578063e82c1f3d1161007a578063e82c1f3d1461092b578063e985e9c514610947578063eb423bf514610984578063f2fde38b146109af578063f7025047146109d8578063f8cc6f0e14610a035761027d565b8063b61ff93c1461082a578063b7c5c71614610853578063b88d4fde1461086f578063ba2c736f14610898578063c2827508146108c3578063c87b56dd146108ee5761027d565b8063a22cb46511610113578063a22cb4651461072c578063a4d7fa2e14610755578063a56d773014610780578063a9b9eafb146107ab578063b158b698146107d6578063b5f21597146107ff5761027d565b80637255eb6b146106695780637bcdb54c14610694578063853828b6146106bf5780638da5cb5b146106d657806395d89b41146107015761027d565b8063366a5589116101f35780635f1968d2116101ac5780635f1968d2146105575780636352211e146105825780636af7c6cf146105bf5780636c0360eb146105ea57806370a0823114610615578063715018a6146106525761027d565b8063366a55891461046c578063398e10151461049557806342842e0e146104b15780634cab7e1e146104da5780635512e7b41461050357806355f804b31461052e5761027d565b806315d0dc971161024557806315d0dc971461037b57806318160ddd1461039757806321b98622146103c257806323b872dd146103ed57806326202370146104165780633005f3fe146104415761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063095ea7b3146103275780630e71bf7d14610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a491906135f4565b610a2e565b6040516102b6919061363c565b60405180910390f35b3480156102cb57600080fd5b506102d4610b10565b6040516102e191906136e7565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c919061373f565b610ba2565b60405161031e91906137ad565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906137f4565b610be8565b005b34801561035c57600080fd5b50610365610cff565b60405161037291906137ad565b60405180910390f35b6103956004803603810190610390919061373f565b610d25565b005b3480156103a357600080fd5b506103ac611081565b6040516103b99190613843565b60405180910390f35b3480156103ce57600080fd5b506103d761108b565b6040516103e49190613843565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f919061385e565b611090565b005b34801561042257600080fd5b5061042b6110f0565b604051610438919061363c565b60405180910390f35b34801561044d57600080fd5b50610456611103565b6040516104639190613843565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e91906138dd565b611109565b005b6104af60048036038101906104aa919061373f565b61112e565b005b3480156104bd57600080fd5b506104d860048036038101906104d3919061385e565b61148a565b005b3480156104e657600080fd5b5061050160048036038101906104fc919061390a565b6114aa565b005b34801561050f57600080fd5b50610518611538565b6040516105259190613843565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190613a7f565b61153d565b005b34801561056357600080fd5b5061056c611558565b6040516105799190613843565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061373f565b61155d565b6040516105b691906137ad565b60405180910390f35b3480156105cb57600080fd5b506105d46115e3565b6040516105e19190613843565b60405180910390f35b3480156105f657600080fd5b506105ff6115e9565b60405161060c91906136e7565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190613ac8565b61167b565b6040516106499190613843565b60405180910390f35b34801561065e57600080fd5b50610667611732565b005b34801561067557600080fd5b5061067e611746565b60405161068b9190613843565b60405180910390f35b3480156106a057600080fd5b506106a961174c565b6040516106b69190613843565b60405180910390f35b3480156106cb57600080fd5b506106d4611752565b005b3480156106e257600080fd5b506106eb61185c565b6040516106f891906137ad565b60405180910390f35b34801561070d57600080fd5b50610716611886565b60405161072391906136e7565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190613af5565b611918565b005b34801561076157600080fd5b5061076a61192e565b6040516107779190613843565b60405180910390f35b34801561078c57600080fd5b50610795611934565b6040516107a29190613843565b60405180910390f35b3480156107b757600080fd5b506107c061193f565b6040516107cd919061363c565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f89190613b35565b611952565b005b34801561080b57600080fd5b50610814611997565b6040516108219190613843565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906138dd565b61199c565b005b61086d6004803603810190610868919061373f565b6119c1565b005b34801561087b57600080fd5b5061089660048036038101906108919190613c51565b611d8c565b005b3480156108a457600080fd5b506108ad611dee565b6040516108ba9190613843565b60405180910390f35b3480156108cf57600080fd5b506108d8611df4565b6040516108e59190613843565b60405180910390f35b3480156108fa57600080fd5b506109156004803603810190610910919061373f565b611dfa565b60405161092291906136e7565b60405180910390f35b6109456004803603810190610940919061373f565b611e0c565b005b34801561095357600080fd5b5061096e6004803603810190610969919061390a565b612168565b60405161097b919061363c565b60405180910390f35b34801561099057600080fd5b506109996121fc565b6040516109a691906137ad565b60405180910390f35b3480156109bb57600080fd5b506109d660048036038101906109d19190613ac8565b612222565b005b3480156109e457600080fd5b506109ed6122a5565b6040516109fa9190613843565b60405180910390f35b348015610a0f57600080fd5b50610a186122ab565b604051610a259190613843565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b095750610b08826122b1565b5b9050919050565b606060028054610b1f90613d03565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b90613d03565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b6000610bad8261231b565b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf38261155d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a90613da6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c82612366565b73ffffffffffffffffffffffffffffffffffffffff161480610cb15750610cb081610cab612366565b612168565b5b610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790613e38565b60405180910390fd5b610cfa838361236e565b505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a546001541115610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390613ea4565b60405180910390fd5b600d54600182600c54610d7f9190613ef3565b610d899190613f27565b10610e0157600181600c54610d9e9190613ef3565b610da89190613f27565b6001600c54610db79190613f27565b600d54610dc49190613f27565b6040517f24656da3000000000000000000000000000000000000000000000000000000008152600401610df8929190613f5b565b60405180910390fd5b610e0961185c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610e835760005b81811015610e7d57610e5233600c54612427565b600c6000815480929190610e6590613f84565b91905055508080610e7590613f84565b915050610e3e565b5061107e565b601060009054906101000a900460ff1615610eff57601154600182600c54610eab9190613ef3565b610eb59190613f27565b1115610efe57600c546011546040517f9f7b595b000000000000000000000000000000000000000000000000000000008152600401610ef5929190613f5b565b60405180910390fd5b5b60008111610f4457806040517fd3ce7e5a000000000000000000000000000000000000000000000000000000008152600401610f3b9190613843565b60405180910390fd5b600b54811115610f8b57806040517fd3ce7e5a000000000000000000000000000000000000000000000000000000008152600401610f829190613843565b60405180910390fd5b600960149054906101000a900460ff16610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190614018565b60405180910390fd5b80600c66b1a2bc2ec50000610fef9190614038565b610ff99190614038565b341461103a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611031906140c6565b60405180910390fd5b60005b8181101561107c5761105133600c54612427565b600c600081548092919061106490613f84565b9190505550808061107490613f84565b91505061103d565b505b50565b6000600154905090565b600881565b6110a161109b612366565b8261265c565b6110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d790614158565b60405180910390fd5b6110eb8383836126f1565b505050565b600960149054906101000a900460ff1681565b60125481565b6111116129ea565b80601060006101000a81548160ff02191690831515021790555050565b600a546001541115611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90613ea4565b60405180910390fd5b600f54600182600e546111889190613ef3565b6111929190613f27565b1061120a57600181600f546111a79190613ef3565b6111b19190613f27565b6001600e546111c09190613f27565b600f546111cd9190613f27565b6040517f24656da3000000000000000000000000000000000000000000000000000000008152600401611201929190613f5b565b60405180910390fd5b61121261185c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361128c5760005b818110156112865761125b33600e54612427565b600e600081548092919061126e90613f84565b9190505550808061127e90613f84565b915050611247565b50611487565b601060009054906101000a900460ff161561130857601354600182600e546112b49190613ef3565b6112be9190613f27565b111561130757600e546013546040517f9f7b595b0000000000000000000000000000000000000000000000000000000081526004016112fe929190613f5b565b60405180910390fd5b5b6000811161134d57806040517fd3ce7e5a0000000000000000000000000000000000000000000000000000000081526004016113449190613843565b60405180910390fd5b600b5481111561139457806040517fd3ce7e5a00000000000000000000000000000000000000000000000000000000815260040161138b9190613843565b60405180910390fd5b600960149054906101000a900460ff166113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90614018565b60405180910390fd5b80600466b1a2bc2ec500006113f89190614038565b6114029190614038565b3414611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a906140c6565b60405180910390fd5b60005b818110156114855761145a33600e54612427565b600e600081548092919061146d90613f84565b9190505550808061147d90613f84565b915050611446565b505b50565b6114a583838360405180602001604052806000815250611d8c565b505050565b6114b26129ea565b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600c81565b6115456129ea565b80600090816115549190614324565b5050565b600481565b60008061156983612a68565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614442565b60405180910390fd5b80915050919050565b600c5481565b6060600080546115f890613d03565b80601f016020809104026020016040519081016040528092919081815260200182805461162490613d03565b80156116715780601f1061164657610100808354040283529160200191611671565b820191906000526020600020905b81548152906001019060200180831161165457829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906144d4565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61173a6129ea565b6117446000612aa5565b565b600f5481565b600b5481565b61175a6129ea565b60004790506000611788606461177a603285612b6b90919063ffffffff16565b612b8190919063ffffffff16565b905060006117b360646117a5601486612b6b90919063ffffffff16565b612b8190919063ffffffff16565b905060006117de60646117d0601e87612b6b90919063ffffffff16565b612b8190919063ffffffff16565b9050600084116117ed57600080fd5b6117fe6117f861185c565b82612b97565b61182a601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b97565b611856601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612b97565b50505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461189590613d03565b80601f01602080910402602001604051908101604052809291908181526020018280546118c190613d03565b801561190e5780601f106118e35761010080835404028352916020019161190e565b820191906000526020600020905b8154815290600101906020018083116118f157829003601f168201915b5050505050905090565b61192a611923612366565b8383612c48565b5050565b60115481565b66b1a2bc2ec5000081565b601060009054906101000a900460ff1681565b61195a6129ea565b84601060006101000a81548160ff021916908315150217905550836011819055508260128190555081601381905550806014819055505050505050565b600281565b6119a46129ea565b80600960146101000a81548160ff02191690831515021790555050565b600a546001541115611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90613ea4565b60405180910390fd5b6000611a12611081565b9050600a54600183600f54611a279190613ef3565b611a319190613f27565b10611aa957600182600f54611a469190613ef3565b611a509190613f27565b6001600f54611a5f9190613f27565b600a54611a6c9190613f27565b6040517f24656da3000000000000000000000000000000000000000000000000000000008152600401611aa0929190613f5b565b60405180910390fd5b611ab161185c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603611b2c5760005b82811015611b2557611afa33600f54612427565b600f6000815480929190611b0d90613f84565b91905055508080611b1d90613f84565b915050611ae6565b5050611d89565b601060009054906101000a900460ff1615611ba857601454600183600f54611b549190613ef3565b611b5e9190613f27565b1115611ba757600f546014546040517f9f7b595b000000000000000000000000000000000000000000000000000000008152600401611b9e929190613f5b565b60405180910390fd5b5b60008211611bed57816040517fd3ce7e5a000000000000000000000000000000000000000000000000000000008152600401611be49190613843565b60405180910390fd5b600b54821115611c3457816040517fd3ce7e5a000000000000000000000000000000000000000000000000000000008152600401611c2b9190613843565b60405180910390fd5b600a548183611c439190613ef3565b1115611c9557600a548183611c589190613ef3565b6040517f0c70564e000000000000000000000000000000000000000000000000000000008152600401611c8c929190613f5b565b60405180910390fd5b600960149054906101000a900460ff16611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614018565b60405180910390fd5b81600266b1a2bc2ec50000611cf99190614038565b611d039190614038565b3414611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906140c6565b60405180910390fd5b60005b82811015611d8657611d5b33600f54612427565b600f6000815480929190611d6e90613f84565b91905055508080611d7e90613f84565b915050611d47565b50505b50565b611d9d611d97612366565b8361265c565b611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd390614158565b60405180910390fd5b611de884848484612db4565b50505050565b600e5481565b60145481565b6060611e0582612e10565b9050919050565b600a546001541115611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a90613ea4565b60405180910390fd5b600e54600182600d54611e669190613ef3565b611e709190613f27565b10611ee857600181600d54611e859190613ef3565b611e8f9190613f27565b6001600d54611e9e9190613f27565b600e54611eab9190613f27565b6040517f24656da3000000000000000000000000000000000000000000000000000000008152600401611edf929190613f5b565b60405180910390fd5b611ef061185c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603611f6a5760005b81811015611f6457611f3933600d54612427565b600d6000815480929190611f4c90613f84565b91905055508080611f5c90613f84565b915050611f25565b50612165565b601060009054906101000a900460ff1615611fe657601254600182600d54611f929190613ef3565b611f9c9190613f27565b1115611fe557600d546012546040517f9f7b595b000000000000000000000000000000000000000000000000000000008152600401611fdc929190613f5b565b60405180910390fd5b5b6000811161202b57806040517fd3ce7e5a0000000000000000000000000000000000000000000000000000000081526004016120229190613843565b60405180910390fd5b600b5481111561207257806040517fd3ce7e5a0000000000000000000000000000000000000000000000000000000081526004016120699190613843565b60405180910390fd5b600960149054906101000a900460ff166120c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b890614018565b60405180910390fd5b80600866b1a2bc2ec500006120d69190614038565b6120e09190614038565b3414612121576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612118906140c6565b60405180910390fd5b60005b818110156121635761213833600d54612427565b600d600081548092919061214b90613f84565b9190505550808061215b90613f84565b915050612124565b505b50565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61222a6129ea565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229090614566565b60405180910390fd5b6122a281612aa5565b50565b60135481565b600d5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61232481612f19565b612363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235a90614442565b60405180910390fd5b50565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123e18361155d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d906145d2565b60405180910390fd5b61249f81612f19565b156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d69061463e565b60405180910390fd5b6124ed600083836001612f5a565b6124f681612f19565b15612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d9061463e565b60405180910390fd5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008154809291906125e990613f84565b9190505550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612658600083836001613080565b5050565b6000806126688361155d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126aa57506126a98185612168565b5b806126e857508373ffffffffffffffffffffffffffffffffffffffff166126d084610ba2565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127118261155d565b73ffffffffffffffffffffffffffffffffffffffff1614612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e906146d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90614762565b60405180910390fd5b6127e38383836001612f5a565b8273ffffffffffffffffffffffffffffffffffffffff166128038261155d565b73ffffffffffffffffffffffffffffffffffffffff1614612859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612850906146d0565b60405180910390fd5b6006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129e58383836001613080565b505050565b6129f2612366565b73ffffffffffffffffffffffffffffffffffffffff16612a1061185c565b73ffffffffffffffffffffffffffffffffffffffff1614612a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5d906147ce565b60405180910390fd5b565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612b799190614038565b905092915050565b60008183612b8f919061481d565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612bbd9061487f565b60006040518083038185875af1925050503d8060008114612bfa576040519150601f19603f3d011682016040523d82523d6000602084013e612bff565b606091505b5050905080612c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3a906148e0565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cad9061494c565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612da7919061363c565b60405180910390a3505050565b612dbf8484846126f1565b612dcb84848484613086565b612e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e01906149de565b60405180910390fd5b50505050565b60606000600860008481526020019081526020016000208054612e3290613d03565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5e90613d03565b8015612eab5780601f10612e8057610100808354040283529160200191612eab565b820191906000526020600020905b815481529060010190602001808311612e8e57829003601f168201915b505050505090506000612ebc61320d565b90506000815103612ed1578192505050612f14565b600082511115612f06578082604051602001612eee929190614a3a565b60405160208183030381529060405292505050612f14565b612f0f8461329f565b925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff16612f3b83612a68565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600181111561307a57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612fee5780600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fe69190613f27565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146130795780600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130719190613ef3565b925050819055505b5b50505050565b50505050565b60006130a78473ffffffffffffffffffffffffffffffffffffffff16613344565b15613200578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130d0612366565b8786866040518563ffffffff1660e01b81526004016130f29493929190614ab3565b6020604051808303816000875af192505050801561312e57506040513d601f19601f8201168201806040525081019061312b9190614b14565b60015b6131b0573d806000811461315e576040519150601f19603f3d011682016040523d82523d6000602084013e613163565b606091505b5060008151036131a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319f906149de565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613205565b600190505b949350505050565b60606000805461321c90613d03565b80601f016020809104026020016040519081016040528092919081815260200182805461324890613d03565b80156132955780601f1061326a57610100808354040283529160200191613295565b820191906000526020600020905b81548152906001019060200180831161327857829003601f168201915b5050505050905090565b60606132aa8261231b565b60006040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250905060006132ee61320d565b9050600081511161330e576040518060200160405280600081525061333b565b8061331885613367565b8360405160200161332b93929190614b41565b6040516020818303038152906040525b92505050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60606000600161337684613435565b01905060008167ffffffffffffffff81111561339557613394613954565b5b6040519080825280601f01601f1916602001820160405280156133c75781602001600182028036833780820191505090505b509050600082602001820190505b60011561342a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161341e5761341d6147ee565b5b049450600085036133d5575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613493577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613489576134886147ee565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106134d0576d04ee2d6d415b85acef810000000083816134c6576134c56147ee565b5b0492506020810190505b662386f26fc1000083106134ff57662386f26fc1000083816134f5576134f46147ee565b5b0492506010810190505b6305f5e1008310613528576305f5e100838161351e5761351d6147ee565b5b0492506008810190505b612710831061354d576127108381613543576135426147ee565b5b0492506004810190505b606483106135705760648381613566576135656147ee565b5b0492506002810190505b600a831061357f576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135d18161359c565b81146135dc57600080fd5b50565b6000813590506135ee816135c8565b92915050565b60006020828403121561360a57613609613592565b5b6000613618848285016135df565b91505092915050565b60008115159050919050565b61363681613621565b82525050565b6000602082019050613651600083018461362d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613691578082015181840152602081019050613676565b60008484015250505050565b6000601f19601f8301169050919050565b60006136b982613657565b6136c38185613662565b93506136d3818560208601613673565b6136dc8161369d565b840191505092915050565b6000602082019050818103600083015261370181846136ae565b905092915050565b6000819050919050565b61371c81613709565b811461372757600080fd5b50565b60008135905061373981613713565b92915050565b60006020828403121561375557613754613592565b5b60006137638482850161372a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137978261376c565b9050919050565b6137a78161378c565b82525050565b60006020820190506137c2600083018461379e565b92915050565b6137d18161378c565b81146137dc57600080fd5b50565b6000813590506137ee816137c8565b92915050565b6000806040838503121561380b5761380a613592565b5b6000613819858286016137df565b925050602061382a8582860161372a565b9150509250929050565b61383d81613709565b82525050565b60006020820190506138586000830184613834565b92915050565b60008060006060848603121561387757613876613592565b5b6000613885868287016137df565b9350506020613896868287016137df565b92505060406138a78682870161372a565b9150509250925092565b6138ba81613621565b81146138c557600080fd5b50565b6000813590506138d7816138b1565b92915050565b6000602082840312156138f3576138f2613592565b5b6000613901848285016138c8565b91505092915050565b6000806040838503121561392157613920613592565b5b600061392f858286016137df565b9250506020613940858286016137df565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61398c8261369d565b810181811067ffffffffffffffff821117156139ab576139aa613954565b5b80604052505050565b60006139be613588565b90506139ca8282613983565b919050565b600067ffffffffffffffff8211156139ea576139e9613954565b5b6139f38261369d565b9050602081019050919050565b82818337600083830152505050565b6000613a22613a1d846139cf565b6139b4565b905082815260208101848484011115613a3e57613a3d61394f565b5b613a49848285613a00565b509392505050565b600082601f830112613a6657613a6561394a565b5b8135613a76848260208601613a0f565b91505092915050565b600060208284031215613a9557613a94613592565b5b600082013567ffffffffffffffff811115613ab357613ab2613597565b5b613abf84828501613a51565b91505092915050565b600060208284031215613ade57613add613592565b5b6000613aec848285016137df565b91505092915050565b60008060408385031215613b0c57613b0b613592565b5b6000613b1a858286016137df565b9250506020613b2b858286016138c8565b9150509250929050565b600080600080600060a08688031215613b5157613b50613592565b5b6000613b5f888289016138c8565b9550506020613b708882890161372a565b9450506040613b818882890161372a565b9350506060613b928882890161372a565b9250506080613ba38882890161372a565b9150509295509295909350565b600067ffffffffffffffff821115613bcb57613bca613954565b5b613bd48261369d565b9050602081019050919050565b6000613bf4613bef84613bb0565b6139b4565b905082815260208101848484011115613c1057613c0f61394f565b5b613c1b848285613a00565b509392505050565b600082601f830112613c3857613c3761394a565b5b8135613c48848260208601613be1565b91505092915050565b60008060008060808587031215613c6b57613c6a613592565b5b6000613c79878288016137df565b9450506020613c8a878288016137df565b9350506040613c9b8782880161372a565b925050606085013567ffffffffffffffff811115613cbc57613cbb613597565b5b613cc887828801613c23565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d1b57607f821691505b602082108103613d2e57613d2d613cd4565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d90602183613662565b9150613d9b82613d34565b604082019050919050565b60006020820190508181036000830152613dbf81613d83565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613e22603d83613662565b9150613e2d82613dc6565b604082019050919050565b60006020820190508181036000830152613e5181613e15565b9050919050565b7f6d696e7420697320656e64210000000000000000000000000000000000000000600082015250565b6000613e8e600c83613662565b9150613e9982613e58565b602082019050919050565b60006020820190508181036000830152613ebd81613e81565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613efe82613709565b9150613f0983613709565b9250828201905080821115613f2157613f20613ec4565b5b92915050565b6000613f3282613709565b9150613f3d83613709565b9250828203905081811115613f5557613f54613ec4565b5b92915050565b6000604082019050613f706000830185613834565b613f7d6020830184613834565b9392505050565b6000613f8f82613709565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613fc157613fc0613ec4565b5b600182019050919050565b7f40646576203a207075626c6963206d696e74206973206e6f74206f70656e0000600082015250565b6000614002601e83613662565b915061400d82613fcc565b602082019050919050565b6000602082019050818103600083015261403181613ff5565b9050919050565b600061404382613709565b915061404e83613709565b925082820261405c81613709565b9150828204841483151761407357614072613ec4565b5b5092915050565b7f56616c7565206973206f766572206f7220756e6465722070726963652e000000600082015250565b60006140b0601d83613662565b91506140bb8261407a565b602082019050919050565b600060208201905081810360008301526140df816140a3565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614142602d83613662565b915061414d826140e6565b604082019050919050565b6000602082019050818103600083015261417181614135565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026141da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261419d565b6141e4868361419d565b95508019841693508086168417925050509392505050565b6000819050919050565b600061422161421c61421784613709565b6141fc565b613709565b9050919050565b6000819050919050565b61423b83614206565b61424f61424782614228565b8484546141aa565b825550505050565b600090565b614264614257565b61426f818484614232565b505050565b5b818110156142935761428860008261425c565b600181019050614275565b5050565b601f8211156142d8576142a981614178565b6142b28461418d565b810160208510156142c1578190505b6142d56142cd8561418d565b830182614274565b50505b505050565b600082821c905092915050565b60006142fb600019846008026142dd565b1980831691505092915050565b600061431483836142ea565b9150826002028217905092915050565b61432d82613657565b67ffffffffffffffff81111561434657614345613954565b5b6143508254613d03565b61435b828285614297565b600060209050601f83116001811461438e576000841561437c578287015190505b6143868582614308565b8655506143ee565b601f19841661439c86614178565b60005b828110156143c45784890151825560018201915060208501945060208101905061439f565b868310156143e157848901516143dd601f8916826142ea565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061442c601883613662565b9150614437826143f6565b602082019050919050565b6000602082019050818103600083015261445b8161441f565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006144be602983613662565b91506144c982614462565b604082019050919050565b600060208201905081810360008301526144ed816144b1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614550602683613662565b915061455b826144f4565b604082019050919050565b6000602082019050818103600083015261457f81614543565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006145bc602083613662565b91506145c782614586565b602082019050919050565b600060208201905081810360008301526145eb816145af565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614628601c83613662565b9150614633826145f2565b602082019050919050565b600060208201905081810360008301526146578161461b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006146ba602583613662565b91506146c58261465e565b604082019050919050565b600060208201905081810360008301526146e9816146ad565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061474c602483613662565b9150614757826146f0565b604082019050919050565b6000602082019050818103600083015261477b8161473f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147b8602083613662565b91506147c382614782565b602082019050919050565b600060208201905081810360008301526147e7816147ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061482882613709565b915061483383613709565b925082614843576148426147ee565b5b828204905092915050565b600081905092915050565b50565b600061486960008361484e565b915061487482614859565b600082019050919050565b600061488a8261485c565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006148ca601083613662565b91506148d582614894565b602082019050919050565b600060208201905081810360008301526148f9816148bd565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614936601983613662565b915061494182614900565b602082019050919050565b6000602082019050818103600083015261496581614929565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006149c8603283613662565b91506149d38261496c565b604082019050919050565b600060208201905081810360008301526149f7816149bb565b9050919050565b600081905092915050565b6000614a1482613657565b614a1e81856149fe565b9350614a2e818560208601613673565b80840191505092915050565b6000614a468285614a09565b9150614a528284614a09565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000614a8582614a5e565b614a8f8185614a69565b9350614a9f818560208601613673565b614aa88161369d565b840191505092915050565b6000608082019050614ac8600083018761379e565b614ad5602083018661379e565b614ae26040830185613834565b8181036060830152614af48184614a7a565b905095945050505050565b600081519050614b0e816135c8565b92915050565b600060208284031215614b2a57614b29613592565b5b6000614b3884828501614aff565b91505092915050565b6000614b4d8286614a09565b9150614b598285614a09565b9150614b658284614a09565b915081905094935050505056fea2646970667358221220c6d94a98b8f8e1d57af1c79951a90aceb25c27312cd1c4546b9d882c1bed007e64736f6c6343000811003368747470733a2f2f61706573636173746c652e636f6d2f75706c6f61642f6e66742f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000872f925f62bfc636ef633fc953f8f82dbc4f6f3000000000000000000000000000000000000000000000000000000000000000a41706573436173746c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034143500000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061027d5760003560e01c80637255eb6b1161014f578063b61ff93c116100c1578063e82c1f3d1161007a578063e82c1f3d1461092b578063e985e9c514610947578063eb423bf514610984578063f2fde38b146109af578063f7025047146109d8578063f8cc6f0e14610a035761027d565b8063b61ff93c1461082a578063b7c5c71614610853578063b88d4fde1461086f578063ba2c736f14610898578063c2827508146108c3578063c87b56dd146108ee5761027d565b8063a22cb46511610113578063a22cb4651461072c578063a4d7fa2e14610755578063a56d773014610780578063a9b9eafb146107ab578063b158b698146107d6578063b5f21597146107ff5761027d565b80637255eb6b146106695780637bcdb54c14610694578063853828b6146106bf5780638da5cb5b146106d657806395d89b41146107015761027d565b8063366a5589116101f35780635f1968d2116101ac5780635f1968d2146105575780636352211e146105825780636af7c6cf146105bf5780636c0360eb146105ea57806370a0823114610615578063715018a6146106525761027d565b8063366a55891461046c578063398e10151461049557806342842e0e146104b15780634cab7e1e146104da5780635512e7b41461050357806355f804b31461052e5761027d565b806315d0dc971161024557806315d0dc971461037b57806318160ddd1461039757806321b98622146103c257806323b872dd146103ed57806326202370146104165780633005f3fe146104415761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063095ea7b3146103275780630e71bf7d14610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a491906135f4565b610a2e565b6040516102b6919061363c565b60405180910390f35b3480156102cb57600080fd5b506102d4610b10565b6040516102e191906136e7565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c919061373f565b610ba2565b60405161031e91906137ad565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906137f4565b610be8565b005b34801561035c57600080fd5b50610365610cff565b60405161037291906137ad565b60405180910390f35b6103956004803603810190610390919061373f565b610d25565b005b3480156103a357600080fd5b506103ac611081565b6040516103b99190613843565b60405180910390f35b3480156103ce57600080fd5b506103d761108b565b6040516103e49190613843565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f919061385e565b611090565b005b34801561042257600080fd5b5061042b6110f0565b604051610438919061363c565b60405180910390f35b34801561044d57600080fd5b50610456611103565b6040516104639190613843565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e91906138dd565b611109565b005b6104af60048036038101906104aa919061373f565b61112e565b005b3480156104bd57600080fd5b506104d860048036038101906104d3919061385e565b61148a565b005b3480156104e657600080fd5b5061050160048036038101906104fc919061390a565b6114aa565b005b34801561050f57600080fd5b50610518611538565b6040516105259190613843565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190613a7f565b61153d565b005b34801561056357600080fd5b5061056c611558565b6040516105799190613843565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061373f565b61155d565b6040516105b691906137ad565b60405180910390f35b3480156105cb57600080fd5b506105d46115e3565b6040516105e19190613843565b60405180910390f35b3480156105f657600080fd5b506105ff6115e9565b60405161060c91906136e7565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190613ac8565b61167b565b6040516106499190613843565b60405180910390f35b34801561065e57600080fd5b50610667611732565b005b34801561067557600080fd5b5061067e611746565b60405161068b9190613843565b60405180910390f35b3480156106a057600080fd5b506106a961174c565b6040516106b69190613843565b60405180910390f35b3480156106cb57600080fd5b506106d4611752565b005b3480156106e257600080fd5b506106eb61185c565b6040516106f891906137ad565b60405180910390f35b34801561070d57600080fd5b50610716611886565b60405161072391906136e7565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190613af5565b611918565b005b34801561076157600080fd5b5061076a61192e565b6040516107779190613843565b60405180910390f35b34801561078c57600080fd5b50610795611934565b6040516107a29190613843565b60405180910390f35b3480156107b757600080fd5b506107c061193f565b6040516107cd919061363c565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f89190613b35565b611952565b005b34801561080b57600080fd5b50610814611997565b6040516108219190613843565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906138dd565b61199c565b005b61086d6004803603810190610868919061373f565b6119c1565b005b34801561087b57600080fd5b5061089660048036038101906108919190613c51565b611d8c565b005b3480156108a457600080fd5b506108ad611dee565b6040516108ba9190613843565b60405180910390f35b3480156108cf57600080fd5b506108d8611df4565b6040516108e59190613843565b60405180910390f35b3480156108fa57600080fd5b506109156004803603810190610910919061373f565b611dfa565b60405161092291906136e7565b60405180910390f35b6109456004803603810190610940919061373f565b611e0c565b005b34801561095357600080fd5b5061096e6004803603810190610969919061390a565b612168565b60405161097b919061363c565b60405180910390f35b34801561099057600080fd5b506109996121fc565b6040516109a691906137ad565b60405180910390f35b3480156109bb57600080fd5b506109d660048036038101906109d19190613ac8565b612222565b005b3480156109e457600080fd5b506109ed6122a5565b6040516109fa9190613843565b60405180910390f35b348015610a0f57600080fd5b50610a186122ab565b604051610a259190613843565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b095750610b08826122b1565b5b9050919050565b606060028054610b1f90613d03565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b90613d03565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b6000610bad8261231b565b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf38261155d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a90613da6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c82612366565b73ffffffffffffffffffffffffffffffffffffffff161480610cb15750610cb081610cab612366565b612168565b5b610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790613e38565b60405180910390fd5b610cfa838361236e565b505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a546001541115610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390613ea4565b60405180910390fd5b600d54600182600c54610d7f9190613ef3565b610d899190613f27565b10610e0157600181600c54610d9e9190613ef3565b610da89190613f27565b6001600c54610db79190613f27565b600d54610dc49190613f27565b6040517f24656da3000000000000000000000000000000000000000000000000000000008152600401610df8929190613f5b565b60405180910390fd5b610e0961185c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610e835760005b81811015610e7d57610e5233600c54612427565b600c6000815480929190610e6590613f84565b91905055508080610e7590613f84565b915050610e3e565b5061107e565b601060009054906101000a900460ff1615610eff57601154600182600c54610eab9190613ef3565b610eb59190613f27565b1115610efe57600c546011546040517f9f7b595b000000000000000000000000000000000000000000000000000000008152600401610ef5929190613f5b565b60405180910390fd5b5b60008111610f4457806040517fd3ce7e5a000000000000000000000000000000000000000000000000000000008152600401610f3b9190613843565b60405180910390fd5b600b54811115610f8b57806040517fd3ce7e5a000000000000000000000000000000000000000000000000000000008152600401610f829190613843565b60405180910390fd5b600960149054906101000a900460ff16610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190614018565b60405180910390fd5b80600c66b1a2bc2ec50000610fef9190614038565b610ff99190614038565b341461103a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611031906140c6565b60405180910390fd5b60005b8181101561107c5761105133600c54612427565b600c600081548092919061106490613f84565b9190505550808061107490613f84565b91505061103d565b505b50565b6000600154905090565b600881565b6110a161109b612366565b8261265c565b6110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d790614158565b60405180910390fd5b6110eb8383836126f1565b505050565b600960149054906101000a900460ff1681565b60125481565b6111116129ea565b80601060006101000a81548160ff02191690831515021790555050565b600a546001541115611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90613ea4565b60405180910390fd5b600f54600182600e546111889190613ef3565b6111929190613f27565b1061120a57600181600f546111a79190613ef3565b6111b19190613f27565b6001600e546111c09190613f27565b600f546111cd9190613f27565b6040517f24656da3000000000000000000000000000000000000000000000000000000008152600401611201929190613f5b565b60405180910390fd5b61121261185c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361128c5760005b818110156112865761125b33600e54612427565b600e600081548092919061126e90613f84565b9190505550808061127e90613f84565b915050611247565b50611487565b601060009054906101000a900460ff161561130857601354600182600e546112b49190613ef3565b6112be9190613f27565b111561130757600e546013546040517f9f7b595b0000000000000000000000000000000000000000000000000000000081526004016112fe929190613f5b565b60405180910390fd5b5b6000811161134d57806040517fd3ce7e5a0000000000000000000000000000000000000000000000000000000081526004016113449190613843565b60405180910390fd5b600b5481111561139457806040517fd3ce7e5a00000000000000000000000000000000000000000000000000000000815260040161138b9190613843565b60405180910390fd5b600960149054906101000a900460ff166113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90614018565b60405180910390fd5b80600466b1a2bc2ec500006113f89190614038565b6114029190614038565b3414611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a906140c6565b60405180910390fd5b60005b818110156114855761145a33600e54612427565b600e600081548092919061146d90613f84565b9190505550808061147d90613f84565b915050611446565b505b50565b6114a583838360405180602001604052806000815250611d8c565b505050565b6114b26129ea565b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600c81565b6115456129ea565b80600090816115549190614324565b5050565b600481565b60008061156983612a68565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614442565b60405180910390fd5b80915050919050565b600c5481565b6060600080546115f890613d03565b80601f016020809104026020016040519081016040528092919081815260200182805461162490613d03565b80156116715780601f1061164657610100808354040283529160200191611671565b820191906000526020600020905b81548152906001019060200180831161165457829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906144d4565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61173a6129ea565b6117446000612aa5565b565b600f5481565b600b5481565b61175a6129ea565b60004790506000611788606461177a603285612b6b90919063ffffffff16565b612b8190919063ffffffff16565b905060006117b360646117a5601486612b6b90919063ffffffff16565b612b8190919063ffffffff16565b905060006117de60646117d0601e87612b6b90919063ffffffff16565b612b8190919063ffffffff16565b9050600084116117ed57600080fd5b6117fe6117f861185c565b82612b97565b61182a601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b97565b611856601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612b97565b50505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461189590613d03565b80601f01602080910402602001604051908101604052809291908181526020018280546118c190613d03565b801561190e5780601f106118e35761010080835404028352916020019161190e565b820191906000526020600020905b8154815290600101906020018083116118f157829003601f168201915b5050505050905090565b61192a611923612366565b8383612c48565b5050565b60115481565b66b1a2bc2ec5000081565b601060009054906101000a900460ff1681565b61195a6129ea565b84601060006101000a81548160ff021916908315150217905550836011819055508260128190555081601381905550806014819055505050505050565b600281565b6119a46129ea565b80600960146101000a81548160ff02191690831515021790555050565b600a546001541115611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90613ea4565b60405180910390fd5b6000611a12611081565b9050600a54600183600f54611a279190613ef3565b611a319190613f27565b10611aa957600182600f54611a469190613ef3565b611a509190613f27565b6001600f54611a5f9190613f27565b600a54611a6c9190613f27565b6040517f24656da3000000000000000000000000000000000000000000000000000000008152600401611aa0929190613f5b565b60405180910390fd5b611ab161185c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603611b2c5760005b82811015611b2557611afa33600f54612427565b600f6000815480929190611b0d90613f84565b91905055508080611b1d90613f84565b915050611ae6565b5050611d89565b601060009054906101000a900460ff1615611ba857601454600183600f54611b549190613ef3565b611b5e9190613f27565b1115611ba757600f546014546040517f9f7b595b000000000000000000000000000000000000000000000000000000008152600401611b9e929190613f5b565b60405180910390fd5b5b60008211611bed57816040517fd3ce7e5a000000000000000000000000000000000000000000000000000000008152600401611be49190613843565b60405180910390fd5b600b54821115611c3457816040517fd3ce7e5a000000000000000000000000000000000000000000000000000000008152600401611c2b9190613843565b60405180910390fd5b600a548183611c439190613ef3565b1115611c9557600a548183611c589190613ef3565b6040517f0c70564e000000000000000000000000000000000000000000000000000000008152600401611c8c929190613f5b565b60405180910390fd5b600960149054906101000a900460ff16611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614018565b60405180910390fd5b81600266b1a2bc2ec50000611cf99190614038565b611d039190614038565b3414611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906140c6565b60405180910390fd5b60005b82811015611d8657611d5b33600f54612427565b600f6000815480929190611d6e90613f84565b91905055508080611d7e90613f84565b915050611d47565b50505b50565b611d9d611d97612366565b8361265c565b611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd390614158565b60405180910390fd5b611de884848484612db4565b50505050565b600e5481565b60145481565b6060611e0582612e10565b9050919050565b600a546001541115611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a90613ea4565b60405180910390fd5b600e54600182600d54611e669190613ef3565b611e709190613f27565b10611ee857600181600d54611e859190613ef3565b611e8f9190613f27565b6001600d54611e9e9190613f27565b600e54611eab9190613f27565b6040517f24656da3000000000000000000000000000000000000000000000000000000008152600401611edf929190613f5b565b60405180910390fd5b611ef061185c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603611f6a5760005b81811015611f6457611f3933600d54612427565b600d6000815480929190611f4c90613f84565b91905055508080611f5c90613f84565b915050611f25565b50612165565b601060009054906101000a900460ff1615611fe657601254600182600d54611f929190613ef3565b611f9c9190613f27565b1115611fe557600d546012546040517f9f7b595b000000000000000000000000000000000000000000000000000000008152600401611fdc929190613f5b565b60405180910390fd5b5b6000811161202b57806040517fd3ce7e5a0000000000000000000000000000000000000000000000000000000081526004016120229190613843565b60405180910390fd5b600b5481111561207257806040517fd3ce7e5a0000000000000000000000000000000000000000000000000000000081526004016120699190613843565b60405180910390fd5b600960149054906101000a900460ff166120c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b890614018565b60405180910390fd5b80600866b1a2bc2ec500006120d69190614038565b6120e09190614038565b3414612121576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612118906140c6565b60405180910390fd5b60005b818110156121635761213833600d54612427565b600d600081548092919061214b90613f84565b9190505550808061215b90613f84565b915050612124565b505b50565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61222a6129ea565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229090614566565b60405180910390fd5b6122a281612aa5565b50565b60135481565b600d5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61232481612f19565b612363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235a90614442565b60405180910390fd5b50565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123e18361155d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d906145d2565b60405180910390fd5b61249f81612f19565b156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d69061463e565b60405180910390fd5b6124ed600083836001612f5a565b6124f681612f19565b15612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d9061463e565b60405180910390fd5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008154809291906125e990613f84565b9190505550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612658600083836001613080565b5050565b6000806126688361155d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126aa57506126a98185612168565b5b806126e857508373ffffffffffffffffffffffffffffffffffffffff166126d084610ba2565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127118261155d565b73ffffffffffffffffffffffffffffffffffffffff1614612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e906146d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90614762565b60405180910390fd5b6127e38383836001612f5a565b8273ffffffffffffffffffffffffffffffffffffffff166128038261155d565b73ffffffffffffffffffffffffffffffffffffffff1614612859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612850906146d0565b60405180910390fd5b6006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129e58383836001613080565b505050565b6129f2612366565b73ffffffffffffffffffffffffffffffffffffffff16612a1061185c565b73ffffffffffffffffffffffffffffffffffffffff1614612a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5d906147ce565b60405180910390fd5b565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612b799190614038565b905092915050565b60008183612b8f919061481d565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612bbd9061487f565b60006040518083038185875af1925050503d8060008114612bfa576040519150601f19603f3d011682016040523d82523d6000602084013e612bff565b606091505b5050905080612c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3a906148e0565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cad9061494c565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612da7919061363c565b60405180910390a3505050565b612dbf8484846126f1565b612dcb84848484613086565b612e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e01906149de565b60405180910390fd5b50505050565b60606000600860008481526020019081526020016000208054612e3290613d03565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5e90613d03565b8015612eab5780601f10612e8057610100808354040283529160200191612eab565b820191906000526020600020905b815481529060010190602001808311612e8e57829003601f168201915b505050505090506000612ebc61320d565b90506000815103612ed1578192505050612f14565b600082511115612f06578082604051602001612eee929190614a3a565b60405160208183030381529060405292505050612f14565b612f0f8461329f565b925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff16612f3b83612a68565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600181111561307a57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612fee5780600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fe69190613f27565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146130795780600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130719190613ef3565b925050819055505b5b50505050565b50505050565b60006130a78473ffffffffffffffffffffffffffffffffffffffff16613344565b15613200578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130d0612366565b8786866040518563ffffffff1660e01b81526004016130f29493929190614ab3565b6020604051808303816000875af192505050801561312e57506040513d601f19601f8201168201806040525081019061312b9190614b14565b60015b6131b0573d806000811461315e576040519150601f19603f3d011682016040523d82523d6000602084013e613163565b606091505b5060008151036131a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319f906149de565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613205565b600190505b949350505050565b60606000805461321c90613d03565b80601f016020809104026020016040519081016040528092919081815260200182805461324890613d03565b80156132955780601f1061326a57610100808354040283529160200191613295565b820191906000526020600020905b81548152906001019060200180831161327857829003601f168201915b5050505050905090565b60606132aa8261231b565b60006040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250905060006132ee61320d565b9050600081511161330e576040518060200160405280600081525061333b565b8061331885613367565b8360405160200161332b93929190614b41565b6040516020818303038152906040525b92505050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60606000600161337684613435565b01905060008167ffffffffffffffff81111561339557613394613954565b5b6040519080825280601f01601f1916602001820160405280156133c75781602001600182028036833780820191505090505b509050600082602001820190505b60011561342a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161341e5761341d6147ee565b5b049450600085036133d5575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613493577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613489576134886147ee565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106134d0576d04ee2d6d415b85acef810000000083816134c6576134c56147ee565b5b0492506020810190505b662386f26fc1000083106134ff57662386f26fc1000083816134f5576134f46147ee565b5b0492506010810190505b6305f5e1008310613528576305f5e100838161351e5761351d6147ee565b5b0492506008810190505b612710831061354d576127108381613543576135426147ee565b5b0492506004810190505b606483106135705760648381613566576135656147ee565b5b0492506002810190505b600a831061357f576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135d18161359c565b81146135dc57600080fd5b50565b6000813590506135ee816135c8565b92915050565b60006020828403121561360a57613609613592565b5b6000613618848285016135df565b91505092915050565b60008115159050919050565b61363681613621565b82525050565b6000602082019050613651600083018461362d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613691578082015181840152602081019050613676565b60008484015250505050565b6000601f19601f8301169050919050565b60006136b982613657565b6136c38185613662565b93506136d3818560208601613673565b6136dc8161369d565b840191505092915050565b6000602082019050818103600083015261370181846136ae565b905092915050565b6000819050919050565b61371c81613709565b811461372757600080fd5b50565b60008135905061373981613713565b92915050565b60006020828403121561375557613754613592565b5b60006137638482850161372a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137978261376c565b9050919050565b6137a78161378c565b82525050565b60006020820190506137c2600083018461379e565b92915050565b6137d18161378c565b81146137dc57600080fd5b50565b6000813590506137ee816137c8565b92915050565b6000806040838503121561380b5761380a613592565b5b6000613819858286016137df565b925050602061382a8582860161372a565b9150509250929050565b61383d81613709565b82525050565b60006020820190506138586000830184613834565b92915050565b60008060006060848603121561387757613876613592565b5b6000613885868287016137df565b9350506020613896868287016137df565b92505060406138a78682870161372a565b9150509250925092565b6138ba81613621565b81146138c557600080fd5b50565b6000813590506138d7816138b1565b92915050565b6000602082840312156138f3576138f2613592565b5b6000613901848285016138c8565b91505092915050565b6000806040838503121561392157613920613592565b5b600061392f858286016137df565b9250506020613940858286016137df565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61398c8261369d565b810181811067ffffffffffffffff821117156139ab576139aa613954565b5b80604052505050565b60006139be613588565b90506139ca8282613983565b919050565b600067ffffffffffffffff8211156139ea576139e9613954565b5b6139f38261369d565b9050602081019050919050565b82818337600083830152505050565b6000613a22613a1d846139cf565b6139b4565b905082815260208101848484011115613a3e57613a3d61394f565b5b613a49848285613a00565b509392505050565b600082601f830112613a6657613a6561394a565b5b8135613a76848260208601613a0f565b91505092915050565b600060208284031215613a9557613a94613592565b5b600082013567ffffffffffffffff811115613ab357613ab2613597565b5b613abf84828501613a51565b91505092915050565b600060208284031215613ade57613add613592565b5b6000613aec848285016137df565b91505092915050565b60008060408385031215613b0c57613b0b613592565b5b6000613b1a858286016137df565b9250506020613b2b858286016138c8565b9150509250929050565b600080600080600060a08688031215613b5157613b50613592565b5b6000613b5f888289016138c8565b9550506020613b708882890161372a565b9450506040613b818882890161372a565b9350506060613b928882890161372a565b9250506080613ba38882890161372a565b9150509295509295909350565b600067ffffffffffffffff821115613bcb57613bca613954565b5b613bd48261369d565b9050602081019050919050565b6000613bf4613bef84613bb0565b6139b4565b905082815260208101848484011115613c1057613c0f61394f565b5b613c1b848285613a00565b509392505050565b600082601f830112613c3857613c3761394a565b5b8135613c48848260208601613be1565b91505092915050565b60008060008060808587031215613c6b57613c6a613592565b5b6000613c79878288016137df565b9450506020613c8a878288016137df565b9350506040613c9b8782880161372a565b925050606085013567ffffffffffffffff811115613cbc57613cbb613597565b5b613cc887828801613c23565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d1b57607f821691505b602082108103613d2e57613d2d613cd4565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d90602183613662565b9150613d9b82613d34565b604082019050919050565b60006020820190508181036000830152613dbf81613d83565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613e22603d83613662565b9150613e2d82613dc6565b604082019050919050565b60006020820190508181036000830152613e5181613e15565b9050919050565b7f6d696e7420697320656e64210000000000000000000000000000000000000000600082015250565b6000613e8e600c83613662565b9150613e9982613e58565b602082019050919050565b60006020820190508181036000830152613ebd81613e81565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613efe82613709565b9150613f0983613709565b9250828201905080821115613f2157613f20613ec4565b5b92915050565b6000613f3282613709565b9150613f3d83613709565b9250828203905081811115613f5557613f54613ec4565b5b92915050565b6000604082019050613f706000830185613834565b613f7d6020830184613834565b9392505050565b6000613f8f82613709565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613fc157613fc0613ec4565b5b600182019050919050565b7f40646576203a207075626c6963206d696e74206973206e6f74206f70656e0000600082015250565b6000614002601e83613662565b915061400d82613fcc565b602082019050919050565b6000602082019050818103600083015261403181613ff5565b9050919050565b600061404382613709565b915061404e83613709565b925082820261405c81613709565b9150828204841483151761407357614072613ec4565b5b5092915050565b7f56616c7565206973206f766572206f7220756e6465722070726963652e000000600082015250565b60006140b0601d83613662565b91506140bb8261407a565b602082019050919050565b600060208201905081810360008301526140df816140a3565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614142602d83613662565b915061414d826140e6565b604082019050919050565b6000602082019050818103600083015261417181614135565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026141da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261419d565b6141e4868361419d565b95508019841693508086168417925050509392505050565b6000819050919050565b600061422161421c61421784613709565b6141fc565b613709565b9050919050565b6000819050919050565b61423b83614206565b61424f61424782614228565b8484546141aa565b825550505050565b600090565b614264614257565b61426f818484614232565b505050565b5b818110156142935761428860008261425c565b600181019050614275565b5050565b601f8211156142d8576142a981614178565b6142b28461418d565b810160208510156142c1578190505b6142d56142cd8561418d565b830182614274565b50505b505050565b600082821c905092915050565b60006142fb600019846008026142dd565b1980831691505092915050565b600061431483836142ea565b9150826002028217905092915050565b61432d82613657565b67ffffffffffffffff81111561434657614345613954565b5b6143508254613d03565b61435b828285614297565b600060209050601f83116001811461438e576000841561437c578287015190505b6143868582614308565b8655506143ee565b601f19841661439c86614178565b60005b828110156143c45784890151825560018201915060208501945060208101905061439f565b868310156143e157848901516143dd601f8916826142ea565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061442c601883613662565b9150614437826143f6565b602082019050919050565b6000602082019050818103600083015261445b8161441f565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006144be602983613662565b91506144c982614462565b604082019050919050565b600060208201905081810360008301526144ed816144b1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614550602683613662565b915061455b826144f4565b604082019050919050565b6000602082019050818103600083015261457f81614543565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006145bc602083613662565b91506145c782614586565b602082019050919050565b600060208201905081810360008301526145eb816145af565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614628601c83613662565b9150614633826145f2565b602082019050919050565b600060208201905081810360008301526146578161461b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006146ba602583613662565b91506146c58261465e565b604082019050919050565b600060208201905081810360008301526146e9816146ad565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061474c602483613662565b9150614757826146f0565b604082019050919050565b6000602082019050818103600083015261477b8161473f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147b8602083613662565b91506147c382614782565b602082019050919050565b600060208201905081810360008301526147e7816147ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061482882613709565b915061483383613709565b925082614843576148426147ee565b5b828204905092915050565b600081905092915050565b50565b600061486960008361484e565b915061487482614859565b600082019050919050565b600061488a8261485c565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006148ca601083613662565b91506148d582614894565b602082019050919050565b600060208201905081810360008301526148f9816148bd565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614936601983613662565b915061494182614900565b602082019050919050565b6000602082019050818103600083015261496581614929565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006149c8603283613662565b91506149d38261496c565b604082019050919050565b600060208201905081810360008301526149f7816149bb565b9050919050565b600081905092915050565b6000614a1482613657565b614a1e81856149fe565b9350614a2e818560208601613673565b80840191505092915050565b6000614a468285614a09565b9150614a528284614a09565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000614a8582614a5e565b614a8f8185614a69565b9350614a9f818560208601613673565b614aa88161369d565b840191505092915050565b6000608082019050614ac8600083018761379e565b614ad5602083018661379e565b614ae26040830185613834565b8181036060830152614af48184614a7a565b905095945050505050565b600081519050614b0e816135c8565b92915050565b600060208284031215614b2a57614b29613592565b5b6000614b3884828501614aff565b91505092915050565b6000614b4d8286614a09565b9150614b598285614a09565b9150614b658284614a09565b915081905094935050505056fea2646970667358221220c6d94a98b8f8e1d57af1c79951a90aceb25c27312cd1c4546b9d882c1bed007e64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000872f925f62bfc636ef633fc953f8f82dbc4f6f3000000000000000000000000000000000000000000000000000000000000000a41706573436173746c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034143500000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): ApesCastle
Arg [1] : _symbol (string): ACP
Arg [2] : _owner (address): 0x0872f925f62Bfc636eF633fc953F8F82Dbc4F6F3
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000872f925f62bfc636ef633fc953f8f82dbc4f6f3
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 41706573436173746c6500000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4143500000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
36656:9497:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19316:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20431:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22139:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21657:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37780:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40083:1374;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45963:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37303:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22971:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36782:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37636:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38753:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42784:1315;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23414:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38866:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37236:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39888:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37364:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20091:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37049:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46061:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19735:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6219:103;;;;;;;;;;;;;:::i;:::-;;37160:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36959:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39220:472;;;;;;;;;;;;;:::i;:::-;;5571:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20600:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22432:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37587:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37488:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37546:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38361:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37425:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39115:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44107:1574;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23670:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37123:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37729:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45759:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41465:1311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22690:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37874:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6477:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37682:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37087:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19316:355;19463:4;19520:25;19505:40;;;:11;:40;;;;:105;;;;19577:33;19562:48;;;:11;:48;;;;19505:105;:158;;;;19627:36;19651:11;19627:23;:36::i;:::-;19505:158;19485:178;;19316:355;;;:::o;20431:100::-;20485:13;20518:5;20511:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20431:100;:::o;22139:221::-;22260:7;22285:23;22300:7;22285:14;:23::i;:::-;22328:15;:24;22344:7;22328:24;;;;;;;;;;;;;;;;;;;;;22321:31;;22139:221;;;:::o;21657:416::-;21738:13;21754:23;21769:7;21754:14;:23::i;:::-;21738:39;;21802:5;21796:11;;:2;:11;;;21788:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21896:5;21880:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21905:37;21922:5;21929:12;:10;:12::i;:::-;21905:16;:37::i;:::-;21880:62;21858:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;22044:21;22053:2;22057:7;22044:8;:21::i;:::-;21727:346;21657:416;;:::o;37780:87::-;;;;;;;;;;;;;:::o;40083:1374::-;38230:10;;38215:11;;:25;;38207:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;40201:7:::1;;40197:1;40187:6;40172:12;;:21;;;;:::i;:::-;40171:27;;;;:::i;:::-;:37;40165:218;;40298:1;40288:6;40273:12;;:21;;;;:::i;:::-;40272:27;;;;:::i;:::-;40353:1;40338:12;;:16;;;;:::i;:::-;40327:7;;:28;;;;:::i;:::-;40233:138;;;;;;;;;;;;:::i;:::-;;;;;;;;40165:218;40411:7;:5;:7::i;:::-;40397:21;;:10;:21;;::::0;40393:210:::1;;40440:9;40435:136;40459:6;40455:1;:10;40435:136;;;40491:31;40497:10;40509:12;;40491:5;:31::i;:::-;40541:12;;:14;;;;;;;;;:::i;:::-;;;;;;40467:3;;;;;:::i;:::-;;;;40435:136;;;;40585:7;;40393:210;40617:15;;;;;;;;;;;40613:283;;;40686:22;;40681:1;40671:6;40656:12;;:21;;;;:::i;:::-;40655:27;;;;:::i;:::-;:53;;40649:236;;40783:12;;40827:22;;40737:132;;;;;;;;;;;;:::i;:::-;;;;;;;;40649:236;40613:283;40921:1;40912:6;:10;40906:88;;40974:6;40948:34;;;;;;;;;;;:::i;:::-;;;;;;;;40906:88;41020:16;;41010:6;:26;;41004:88;;41082:6;41056:34;;;;;;;;;;;:::i;:::-;;;;;;;;41004:88;41112:16;;;;;;;;;;;41104:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;41250:6;37286:2;37527:10;41209:38;;;;:::i;:::-;:47;;;;:::i;:::-;41196:9;:60;41174:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;41331:9;41326:124;41350:6;41346:1;:10;41326:124;;;41378:31;41384:10;41396:12;;41378:5;:31::i;:::-;41424:12;;:14;;;;;;;;;:::i;:::-;;;;;;41358:3;;;;;:::i;:::-;;;;41326:124;;;;38268:1;40083:1374:::0;:::o;45963:90::-;46007:7;46034:11;;46027:18;;45963:90;:::o;37303:46::-;37348:1;37303:46;:::o;22971:372::-;23180:41;23199:12;:10;:12::i;:::-;23213:7;23180:18;:41::i;:::-;23158:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;23307:28;23317:4;23323:2;23327:7;23307:9;:28::i;:::-;22971:372;;;:::o;36782:35::-;;;;;;;;;;;;;:::o;37636:39::-;;;;:::o;38753:105::-;5457:13;:11;:13::i;:::-;38847:3:::1;38829:15;;:21;;;;;;;;;;;;;;;;;;38753:105:::0;:::o;42784:1315::-;38230:10;;38215:11;;:25;;38207:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;42892:9:::1;;42888:1;42878:6;42868:7;;:16;;;;:::i;:::-;42867:22;;;;:::i;:::-;:34;42861:209;;42988:1;42978:6;42966:9;;:18;;;;:::i;:::-;42965:24;;;;:::i;:::-;43040:1;43030:7;;:11;;;;:::i;:::-;43017:9;;:25;;;;:::i;:::-;42926:132;;;;;;;;;;;;:::i;:::-;;;;;;;;42861:209;43098:7;:5;:7::i;:::-;43084:21;;:10;:21;;::::0;43080:200:::1;;43127:9;43122:126;43146:6;43142:1;:10;43122:126;;;43178:26;43184:10;43196:7;;43178:5;:26::i;:::-;43223:7;;:9;;;;;;;;;:::i;:::-;;;;;;43154:3;;;;;:::i;:::-;;;;43122:126;;;;43262:7;;43080:200;43294:15;;;;;;;;;;;43290:263;;;43358:17;;43353:1;43343:6;43333:7;;:16;;;;:::i;:::-;43332:22;;;;:::i;:::-;:43;;43326:216;;43450:7;;43489:17;;43404:122;;;;;;;;;;;;:::i;:::-;;;;;;;;43326:216;43290:263;43578:1;43569:6;:10;43563:88;;43631:6;43605:34;;;;;;;;;;;:::i;:::-;;;;;;;;43563:88;43677:16;;43667:6;:26;;43661:88;;43739:6;43713:34;;;;;;;;;;;:::i;:::-;;;;;;;;43661:88;43769:16;;;;;;;;;;;43761:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43902:6;37409:1;37527:10;43866:33;;;;:::i;:::-;:42;;;;:::i;:::-;43853:9;:55;43831:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;43983:9;43978:114;44002:6;43998:1;:10;43978:114;;;44030:26;44036:10;44048:7;;44030:5;:26::i;:::-;44071:7;;:9;;;;;;;;;:::i;:::-;;;;;;44010:3;;;;;:::i;:::-;;;;43978:114;;;;38268:1;42784:1315:::0;:::o;23414:185::-;23552:39;23569:4;23575:2;23579:7;23552:39;;;;;;;;;;;;:16;:39::i;:::-;23414:185;;;:::o;38866:241::-;5457:13;:11;:13::i;:::-;39029:19:::1;39008:18;;:40;;;;;;;;;;;;;;;;;;39080:19;39059:18;;:40;;;;;;;;;;;;;;;;;;38866:241:::0;;:::o;37236:52::-;37286:2;37236:52;:::o;39888:89::-;5457:13;:11;:13::i;:::-;39966:3:::1;39955:8;:14;;;;;;:::i;:::-;;39888:89:::0;:::o;37364:46::-;37409:1;37364:46;:::o;20091:273::-;20208:7;20233:13;20249:17;20258:7;20249:8;:17::i;:::-;20233:33;;20302:1;20285:19;;:5;:19;;;20277:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20351:5;20344:12;;;20091:273;;;:::o;37049:31::-;;;;:::o;46061:89::-;46101:13;46134:8;46127:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46061:89;:::o;19735:294::-;19852:7;19916:1;19899:19;;:5;:19;;;19877:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20005:9;:16;20015:5;20005:16;;;;;;;;;;;;;;;;19998:23;;19735:294;;;:::o;6219:103::-;5457:13;:11;:13::i;:::-;6284:30:::1;6311:1;6284:18;:30::i;:::-;6219:103::o:0;37160:32::-;;;;:::o;36959:35::-;;;;:::o;39220:472::-;5457:13;:11;:13::i;:::-;39271:15:::1;39289:21;39271:39;;39323:24;39350;39370:3;39350:15;39362:2;39350:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;39323:51;;39385:24;39412;39432:3;39412:15;39424:2;39412:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;39385:51;;39447:18;39468:24;39488:3;39468:15;39480:2;39468:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;39447:45;;39523:1;39513:7;:11;39505:20;;;::::0;::::1;;39538:30;39548:7;:5;:7::i;:::-;39557:10;39538:9;:30::i;:::-;39579:47;39589:18;;;;;;;;;;;39609:16;39579:9;:47::i;:::-;39637;39647:18;;;;;;;;;;;39667:16;39637:9;:47::i;:::-;39260:432;;;;39220:472::o:0;5571:87::-;5617:7;5644:6;;;;;;;;;;;5637:13;;5571:87;:::o;20600:104::-;20656:13;20689:7;20682:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20600:104;:::o;22432:187::-;22559:52;22578:12;:10;:12::i;:::-;22592:8;22602;22559:18;:52::i;:::-;22432:187;;:::o;37587:42::-;;;;:::o;37488:49::-;37527:10;37488:49;:::o;37546:34::-;;;;;;;;;;;;;:::o;38361:384::-;5457:13;:11;:13::i;:::-;38572:3:::1;38554:15;;:21;;;;;;;;;;;;;;;;;;38611:11;38586:22;:36;;;;38653:6;38633:17;:26;;;;38690:6;38670:17;:26;;;;38729:8;38707:19;:30;;;;38361:384:::0;;;;;:::o;37425:48::-;37472:1;37425:48;:::o;39115:97::-;5457:13;:11;:13::i;:::-;39201:3:::1;39182:16;;:22;;;;;;;;;;;;;;;;;;39115:97:::0;:::o;44107:1574::-;38230:10;;38215:11;;:25;;38207:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;44186:13:::1;44202;:11;:13::i;:::-;44186:29;;44259:10;;44255:1;44245:6;44233:9;;:18;;;;:::i;:::-;44232:24;;;;:::i;:::-;:37;44226:215;;44356:1;44346:6;44334:9;;:18;;;;:::i;:::-;44333:24;;;;:::i;:::-;44411:1;44399:9;;:13;;;;:::i;:::-;44385:10;;:28;;;;:::i;:::-;44294:135;;;;;;;;;;;;:::i;:::-;;;;;;;;44226:215;44469:7;:5;:7::i;:::-;44455:21;;:10;:21;;::::0;44451:204:::1;;44498:9;44493:130;44517:6;44513:1;:10;44493:130;;;44549:28;44555:10;44567:9;;44549:5;:28::i;:::-;44596:9;;:11;;;;;;;;;:::i;:::-;;;;;;44525:3;;;;;:::i;:::-;;;;44493:130;;;;44637:7;;;44451:204;44671:15;;;;;;;;;;;44667:271;;;44737:19;;44732:1;44722:6;44710:9;;:18;;;;:::i;:::-;44709:24;;;;:::i;:::-;:47;;44703:224;;44831:9;;44872:19;;44785:126;;;;;;;;;;;;:::i;:::-;;;;;;;;44703:224;44667:271;44963:1;44954:6;:10;44948:88;;45016:6;44990:34;;;;;;;;;;;:::i;:::-;;;;;;;;44948:88;45062:16;;45052:6;:26;;45046:88;;45124:6;45098:34;;;;;;;;;;;:::i;:::-;;;;;;;;45046:88;45170:10;;45161:5;45152:6;:14;;;;:::i;:::-;:28;;45146:181;;45245:10;;45294:5;45285:6;:14;;;;:::i;:::-;45205:110;;;;;;;;;;;;:::i;:::-;;;;;;;;45146:181;45345:16;;;;;;;;;;;45337:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45480:6;37472:1;37527:10;45442:35;;;;:::i;:::-;:44;;;;:::i;:::-;45429:9;:57;45407:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;45561:9;45556:118;45580:6;45576:1;:10;45556:118;;;45608:28;45614:10;45626:9;;45608:5;:28::i;:::-;45651:9;;:11;;;;;;;;;:::i;:::-;;;;;;45588:3;;;;;:::i;:::-;;;;45556:118;;;;44175:1506;38268:1;44107:1574:::0;:::o;23670:359::-;23858:41;23877:12;:10;:12::i;:::-;23891:7;23858:18;:41::i;:::-;23836:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;23983:38;23997:4;24003:2;24007:7;24016:4;23983:13;:38::i;:::-;23670:359;;;;:::o;37123:30::-;;;;:::o;37729:42::-;;;;:::o;45759:196::-;45886:13;45924:23;45939:7;45924:14;:23::i;:::-;45917:30;;45759:196;;;:::o;41465:1311::-;38230:10;;38215:11;;:25;;38207:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;41573:7:::1;;41569:1;41559:6;41549:7;;:16;;;;:::i;:::-;41548:22;;;;:::i;:::-;:32;41542:203;;41665:1;41655:6;41645:7;;:16;;;;:::i;:::-;41644:22;;;;:::i;:::-;41715:1;41705:7;;:11;;;;:::i;:::-;41694:7;;:23;;;;:::i;:::-;41605:128;;;;;;;;;;;;:::i;:::-;;;;;;;;41542:203;41773:7;:5;:7::i;:::-;41759:21;;:10;:21;;::::0;41755:200:::1;;41802:9;41797:126;41821:6;41817:1;:10;41797:126;;;41853:26;41859:10;41871:7;;41853:5;:26::i;:::-;41898:7;;:9;;;;;;;;;:::i;:::-;;;;;;41829:3;;;;;:::i;:::-;;;;41797:126;;;;41937:7;;41755:200;41971:15;;;;;;;;;;;41967:263;;;42035:17;;42030:1;42020:6;42010:7;;:16;;;;:::i;:::-;42009:22;;;;:::i;:::-;:43;;42003:216;;42127:7;;42166:17;;42081:122;;;;;;;;;;;;:::i;:::-;;;;;;;;42003:216;41967:263;42255:1;42246:6;:10;42240:88;;42308:6;42282:34;;;;;;;;;;;:::i;:::-;;;;;;;;42240:88;42354:16;;42344:6;:26;;42338:88;;42416:6;42390:34;;;;;;;;;;;:::i;:::-;;;;;;;;42338:88;42446:16;;;;;;;;;;;42438:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;42579:6;37348:1;37527:10;42543:33;;;;:::i;:::-;:42;;;;:::i;:::-;42530:9;:55;42508:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;42660:9;42655:114;42679:6;42675:1;:10;42655:114;;;42707:26;42713:10;42725:7;;42707:5;:26::i;:::-;42748:7;;:9;;;;;;;;;:::i;:::-;;;;;;42687:3;;;;;:::i;:::-;;;;42655:114;;;;38268:1;41465:1311:::0;:::o;22690:214::-;22832:4;22861:18;:25;22880:5;22861:25;;;;;;;;;;;;;;;:35;22887:8;22861:35;;;;;;;;;;;;;;;;;;;;;;;;;22854:42;;22690:214;;;;:::o;37874:87::-;;;;;;;;;;;;;:::o;6477:201::-;5457:13;:11;:13::i;:::-;6586:1:::1;6566:22;;:8;:22;;::::0;6558:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6642:28;6661:8;6642:18;:28::i;:::-;6477:201:::0;:::o;37682:40::-;;;;:::o;37087:29::-;;;;:::o;11428:207::-;11558:4;11602:25;11587:40;;;:11;:40;;;;11580:47;;11428:207;;;:::o;31248:135::-;31330:16;31338:7;31330;:16::i;:::-;31322:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;31248:135;:::o;4623:98::-;4676:7;4703:10;4696:17;;4623:98;:::o;30527:174::-;30629:2;30602:15;:24;30618:7;30602:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30685:7;30681:2;30647:46;;30656:23;30671:7;30656:14;:23::i;:::-;30647:46;;;;;;;;;;;;30527:174;;:::o;27766:968::-;27860:1;27846:16;;:2;:16;;;27838:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27919:16;27927:7;27919;:16::i;:::-;27918:17;27910:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27981:48;28010:1;28014:2;28018:7;28027:1;27981:20;:48::i;:::-;28128:16;28136:7;28128;:16::i;:::-;28127:17;28119:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28543:1;28526:9;:13;28536:2;28526:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;28587:2;28568:7;:16;28576:7;28568:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28602:11;;:13;;;;;;;;;:::i;:::-;;;;;;28658:7;28654:2;28633:33;;28650:1;28633:33;;;;;;;;;;;;28679:47;28707:1;28711:2;28715:7;28724:1;28679:19;:47::i;:::-;27766:968;;:::o;26101:331::-;26230:4;26252:13;26268:23;26283:7;26268:14;:23::i;:::-;26252:39;;26321:5;26310:16;;:7;:16;;;:65;;;;26343:32;26360:5;26367:7;26343:16;:32::i;:::-;26310:65;:113;;;;26416:7;26392:31;;:20;26404:7;26392:11;:20::i;:::-;:31;;;26310:113;26302:122;;;26101:331;;;;:::o;29071:1337::-;29244:4;29217:31;;:23;29232:7;29217:14;:23::i;:::-;:31;;;29195:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;29346:1;29332:16;;:2;:16;;;29324:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29402:42;29423:4;29429:2;29433:7;29442:1;29402:20;:42::i;:::-;29588:4;29561:31;;:23;29576:7;29561:14;:23::i;:::-;:31;;;29539:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;29729:15;:24;29745:7;29729:24;;;;;;;;;;;;29722:31;;;;;;;;;;;30224:1;30205:9;:15;30215:4;30205:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;30257:1;30240:9;:13;30250:2;30240:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;30299:2;30280:7;:16;30288:7;30280:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30338:7;30334:2;30319:27;;30328:4;30319:27;;;;;;;;;;;;30359:41;30379:4;30385:2;30389:7;30398:1;30359:19;:41::i;:::-;29071:1337;;;:::o;5736:132::-;5811:12;:10;:12::i;:::-;5800:23;;:7;:5;:7::i;:::-;:23;;;5792:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5736:132::o;25374:117::-;25440:7;25467;:16;25475:7;25467:16;;;;;;;;;;;;;;;;;;;;;25460:23;;25374:117;;;:::o;6838:191::-;6912:16;6931:6;;;;;;;;;;;6912:25;;6957:8;6948:6;;:17;;;;;;;;;;;;;;;;;;7012:8;6981:40;;7002:8;6981:40;;;;;;;;;;;;6901:128;6838:191;:::o;420:98::-;478:7;509:1;505;:5;;;;:::i;:::-;498:12;;420:98;;;;:::o;526:::-;584:7;615:1;611;:5;;;;:::i;:::-;604:12;;526:98;;;;:::o;39700:180::-;39774:12;39792:8;:13;;39813:7;39792:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39773:52;;;39844:7;39836:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;39762:118;39700:180;;:::o;30844:315::-;30999:8;30990:17;;:5;:17;;;30982:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31086:8;31048:18;:25;31067:5;31048:25;;;;;;;;;;;;;;;:35;31074:8;31048:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31132:8;31110:41;;31125:5;31110:41;;;31142:8;31110:41;;;;;;:::i;:::-;;;;;;;;30844:315;;;:::o;24910:350::-;25066:28;25076:4;25082:2;25086:7;25066:9;:28::i;:::-;25127:47;25150:4;25156:2;25160:7;25169:4;25127:22;:47::i;:::-;25105:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;24910:350;;;;:::o;35438:638::-;35556:13;35587:23;35613:10;:19;35624:7;35613:19;;;;;;;;;;;35587:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35643:18;35664:10;:8;:10::i;:::-;35643:31;;35772:1;35756:4;35750:18;:23;35746:72;;35797:9;35790:16;;;;;;35746:72;35948:1;35928:9;35922:23;:27;35918:108;;;35997:4;36003:9;35980:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35966:48;;;;;;35918:108;36045:23;36060:7;36045:14;:23::i;:::-;36038:30;;;;35438:638;;;;:::o;25806:128::-;25871:4;25924:1;25895:31;;:17;25904:7;25895:8;:17::i;:::-;:31;;;;25888:38;;25806:128;;;:::o;33713:410::-;33903:1;33891:9;:13;33887:229;;;33941:1;33925:18;;:4;:18;;;33921:87;;33983:9;33964;:15;33974:4;33964:15;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;33921:87;34040:1;34026:16;;:2;:16;;;34022:83;;34080:9;34063;:13;34073:2;34063:13;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;34022:83;33887:229;33713:410;;;;:::o;34845:158::-;;;;;:::o;31947:1034::-;32101:4;32122:15;:2;:13;;;:15::i;:::-;32118:856;;;32191:2;32175:36;;;32234:12;:10;:12::i;:::-;32269:4;32296:7;32326:4;32175:174;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32154:765;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32549:1;32532:6;:13;:18;32528:376;;32575:108;;;;;;;;;;:::i;:::-;;;;;;;;32528:376;32854:6;32848:13;32839:6;32835:2;32831:15;32824:38;32154:765;32423:41;;;32413:51;;;:6;:51;;;;32406:58;;;;;32118:856;32958:4;32951:11;;31947:1034;;;;;;;:::o;21495:100::-;21546:13;21579:8;21572:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21495:100;:::o;20775:471::-;20893:13;20924:23;20939:7;20924:14;:23::i;:::-;20960:22;:32;;;;;;;;;;;;;;;;;;;21003:21;21027:10;:8;:10::i;:::-;21003:34;;21092:1;21074:7;21068:21;:25;:170;;;;;;;;;;;;;;;;;21159:7;21168:18;:7;:16;:18::i;:::-;21188:8;21142:55;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21068:170;21048:190;;;;20775:471;;;:::o;8267:326::-;8327:4;8584:1;8562:7;:19;;;:23;8555:30;;8267:326;;;:::o;3223:716::-;3279:13;3330:14;3367:1;3347:17;3358:5;3347:10;:17::i;:::-;:21;3330:38;;3383:20;3417:6;3406:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3383:41;;3439:11;3568:6;3564:2;3560:15;3552:6;3548:28;3541:35;;3605:288;3612:4;3605:288;;;3637:5;;;;;;;;3779:8;3774:2;3767:5;3763:14;3758:30;3753:3;3745:44;3835:2;3826:11;;;;;;:::i;:::-;;;;;3869:1;3860:5;:10;3605:288;3856:21;3605:288;3914:6;3907:13;;;;;3223:716;;;:::o;1393:922::-;1446:7;1466:14;1483:1;1466:18;;1533:6;1524:5;:15;1520:102;;1569:6;1560:15;;;;;;:::i;:::-;;;;;1604:2;1594:12;;;;1520:102;1649:6;1640:5;:15;1636:102;;1685:6;1676:15;;;;;;:::i;:::-;;;;;1720:2;1710:12;;;;1636:102;1765:6;1756:5;:15;1752:102;;1801:6;1792:15;;;;;;:::i;:::-;;;;;1836:2;1826:12;;;;1752:102;1881:5;1872;:14;1868:99;;1916:5;1907:14;;;;;;:::i;:::-;;;;;1950:1;1940:11;;;;1868:99;1994:5;1985;:14;1981:99;;2029:5;2020:14;;;;;;:::i;:::-;;;;;2063:1;2053:11;;;;1981:99;2107:5;2098;:14;2094:99;;2142:5;2133:14;;;;;;:::i;:::-;;;;;2176:1;2166:11;;;;2094:99;2220:5;2211;:14;2207:66;;2256:1;2246:11;;;;2207:66;2301:6;2294:13;;;1393:922;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:116::-;5937:21;5952:5;5937:21;:::i;:::-;5930:5;5927:32;5917:60;;5973:1;5970;5963:12;5917:60;5867:116;:::o;5989:133::-;6032:5;6070:6;6057:20;6048:29;;6086:30;6110:5;6086:30;:::i;:::-;5989:133;;;;:::o;6128:323::-;6184:6;6233:2;6221:9;6212:7;6208:23;6204:32;6201:119;;;6239:79;;:::i;:::-;6201:119;6359:1;6384:50;6426:7;6417:6;6406:9;6402:22;6384:50;:::i;:::-;6374:60;;6330:114;6128:323;;;;:::o;6457:474::-;6525:6;6533;6582:2;6570:9;6561:7;6557:23;6553:32;6550:119;;;6588:79;;:::i;:::-;6550:119;6708:1;6733:53;6778:7;6769:6;6758:9;6754:22;6733:53;:::i;:::-;6723:63;;6679:117;6835:2;6861:53;6906:7;6897:6;6886:9;6882:22;6861:53;:::i;:::-;6851:63;;6806:118;6457:474;;;;;:::o;6937:117::-;7046:1;7043;7036:12;7060:117;7169:1;7166;7159:12;7183:180;7231:77;7228:1;7221:88;7328:4;7325:1;7318:15;7352:4;7349:1;7342:15;7369:281;7452:27;7474:4;7452:27;:::i;:::-;7444:6;7440:40;7582:6;7570:10;7567:22;7546:18;7534:10;7531:34;7528:62;7525:88;;;7593:18;;:::i;:::-;7525:88;7633:10;7629:2;7622:22;7412:238;7369:281;;:::o;7656:129::-;7690:6;7717:20;;:::i;:::-;7707:30;;7746:33;7774:4;7766:6;7746:33;:::i;:::-;7656:129;;;:::o;7791:308::-;7853:4;7943:18;7935:6;7932:30;7929:56;;;7965:18;;:::i;:::-;7929:56;8003:29;8025:6;8003:29;:::i;:::-;7995:37;;8087:4;8081;8077:15;8069:23;;7791:308;;;:::o;8105:146::-;8202:6;8197:3;8192;8179:30;8243:1;8234:6;8229:3;8225:16;8218:27;8105:146;;;:::o;8257:425::-;8335:5;8360:66;8376:49;8418:6;8376:49;:::i;:::-;8360:66;:::i;:::-;8351:75;;8449:6;8442:5;8435:21;8487:4;8480:5;8476:16;8525:3;8516:6;8511:3;8507:16;8504:25;8501:112;;;8532:79;;:::i;:::-;8501:112;8622:54;8669:6;8664:3;8659;8622:54;:::i;:::-;8341:341;8257:425;;;;;:::o;8702:340::-;8758:5;8807:3;8800:4;8792:6;8788:17;8784:27;8774:122;;8815:79;;:::i;:::-;8774:122;8932:6;8919:20;8957:79;9032:3;9024:6;9017:4;9009:6;9005:17;8957:79;:::i;:::-;8948:88;;8764:278;8702:340;;;;:::o;9048:509::-;9117:6;9166:2;9154:9;9145:7;9141:23;9137:32;9134:119;;;9172:79;;:::i;:::-;9134:119;9320:1;9309:9;9305:17;9292:31;9350:18;9342:6;9339:30;9336:117;;;9372:79;;:::i;:::-;9336:117;9477:63;9532:7;9523:6;9512:9;9508:22;9477:63;:::i;:::-;9467:73;;9263:287;9048:509;;;;:::o;9563:329::-;9622:6;9671:2;9659:9;9650:7;9646:23;9642:32;9639:119;;;9677:79;;:::i;:::-;9639:119;9797:1;9822:53;9867:7;9858:6;9847:9;9843:22;9822:53;:::i;:::-;9812:63;;9768:117;9563:329;;;;:::o;9898:468::-;9963:6;9971;10020:2;10008:9;9999:7;9995:23;9991:32;9988:119;;;10026:79;;:::i;:::-;9988:119;10146:1;10171:53;10216:7;10207:6;10196:9;10192:22;10171:53;:::i;:::-;10161:63;;10117:117;10273:2;10299:50;10341:7;10332:6;10321:9;10317:22;10299:50;:::i;:::-;10289:60;;10244:115;9898:468;;;;;:::o;10372:905::-;10464:6;10472;10480;10488;10496;10545:3;10533:9;10524:7;10520:23;10516:33;10513:120;;;10552:79;;:::i;:::-;10513:120;10672:1;10697:50;10739:7;10730:6;10719:9;10715:22;10697:50;:::i;:::-;10687:60;;10643:114;10796:2;10822:53;10867:7;10858:6;10847:9;10843:22;10822:53;:::i;:::-;10812:63;;10767:118;10924:2;10950:53;10995:7;10986:6;10975:9;10971:22;10950:53;:::i;:::-;10940:63;;10895:118;11052:2;11078:53;11123:7;11114:6;11103:9;11099:22;11078:53;:::i;:::-;11068:63;;11023:118;11180:3;11207:53;11252:7;11243:6;11232:9;11228:22;11207:53;:::i;:::-;11197:63;;11151:119;10372:905;;;;;;;;:::o;11283:307::-;11344:4;11434:18;11426:6;11423:30;11420:56;;;11456:18;;:::i;:::-;11420:56;11494:29;11516:6;11494:29;:::i;:::-;11486:37;;11578:4;11572;11568:15;11560:23;;11283:307;;;:::o;11596:423::-;11673:5;11698:65;11714:48;11755:6;11714:48;:::i;:::-;11698:65;:::i;:::-;11689:74;;11786:6;11779:5;11772:21;11824:4;11817:5;11813:16;11862:3;11853:6;11848:3;11844:16;11841:25;11838:112;;;11869:79;;:::i;:::-;11838:112;11959:54;12006:6;12001:3;11996;11959:54;:::i;:::-;11679:340;11596:423;;;;;:::o;12038:338::-;12093:5;12142:3;12135:4;12127:6;12123:17;12119:27;12109:122;;12150:79;;:::i;:::-;12109:122;12267:6;12254:20;12292:78;12366:3;12358:6;12351:4;12343:6;12339:17;12292:78;:::i;:::-;12283:87;;12099:277;12038:338;;;;:::o;12382:943::-;12477:6;12485;12493;12501;12550:3;12538:9;12529:7;12525:23;12521:33;12518:120;;;12557:79;;:::i;:::-;12518:120;12677:1;12702:53;12747:7;12738:6;12727:9;12723:22;12702:53;:::i;:::-;12692:63;;12648:117;12804:2;12830:53;12875:7;12866:6;12855:9;12851:22;12830:53;:::i;:::-;12820:63;;12775:118;12932:2;12958:53;13003:7;12994:6;12983:9;12979:22;12958:53;:::i;:::-;12948:63;;12903:118;13088:2;13077:9;13073:18;13060:32;13119:18;13111:6;13108:30;13105:117;;;13141:79;;:::i;:::-;13105:117;13246:62;13300:7;13291:6;13280:9;13276:22;13246:62;:::i;:::-;13236:72;;13031:287;12382:943;;;;;;;:::o;13331:180::-;13379:77;13376:1;13369:88;13476:4;13473:1;13466:15;13500:4;13497:1;13490:15;13517:320;13561:6;13598:1;13592:4;13588:12;13578:22;;13645:1;13639:4;13635:12;13666:18;13656:81;;13722:4;13714:6;13710:17;13700:27;;13656:81;13784:2;13776:6;13773:14;13753:18;13750:38;13747:84;;13803:18;;:::i;:::-;13747:84;13568:269;13517:320;;;:::o;13843:220::-;13983:34;13979:1;13971:6;13967:14;13960:58;14052:3;14047:2;14039:6;14035:15;14028:28;13843:220;:::o;14069:366::-;14211:3;14232:67;14296:2;14291:3;14232:67;:::i;:::-;14225:74;;14308:93;14397:3;14308:93;:::i;:::-;14426:2;14421:3;14417:12;14410:19;;14069:366;;;:::o;14441:419::-;14607:4;14645:2;14634:9;14630:18;14622:26;;14694:9;14688:4;14684:20;14680:1;14669:9;14665:17;14658:47;14722:131;14848:4;14722:131;:::i;:::-;14714:139;;14441:419;;;:::o;14866:248::-;15006:34;15002:1;14994:6;14990:14;14983:58;15075:31;15070:2;15062:6;15058:15;15051:56;14866:248;:::o;15120:366::-;15262:3;15283:67;15347:2;15342:3;15283:67;:::i;:::-;15276:74;;15359:93;15448:3;15359:93;:::i;:::-;15477:2;15472:3;15468:12;15461:19;;15120:366;;;:::o;15492:419::-;15658:4;15696:2;15685:9;15681:18;15673:26;;15745:9;15739:4;15735:20;15731:1;15720:9;15716:17;15709:47;15773:131;15899:4;15773:131;:::i;:::-;15765:139;;15492:419;;;:::o;15917:162::-;16057:14;16053:1;16045:6;16041:14;16034:38;15917:162;:::o;16085:366::-;16227:3;16248:67;16312:2;16307:3;16248:67;:::i;:::-;16241:74;;16324:93;16413:3;16324:93;:::i;:::-;16442:2;16437:3;16433:12;16426:19;;16085:366;;;:::o;16457:419::-;16623:4;16661:2;16650:9;16646:18;16638:26;;16710:9;16704:4;16700:20;16696:1;16685:9;16681:17;16674:47;16738:131;16864:4;16738:131;:::i;:::-;16730:139;;16457:419;;;:::o;16882:180::-;16930:77;16927:1;16920:88;17027:4;17024:1;17017:15;17051:4;17048:1;17041:15;17068:191;17108:3;17127:20;17145:1;17127:20;:::i;:::-;17122:25;;17161:20;17179:1;17161:20;:::i;:::-;17156:25;;17204:1;17201;17197:9;17190:16;;17225:3;17222:1;17219:10;17216:36;;;17232:18;;:::i;:::-;17216:36;17068:191;;;;:::o;17265:194::-;17305:4;17325:20;17343:1;17325:20;:::i;:::-;17320:25;;17359:20;17377:1;17359:20;:::i;:::-;17354:25;;17403:1;17400;17396:9;17388:17;;17427:1;17421:4;17418:11;17415:37;;;17432:18;;:::i;:::-;17415:37;17265:194;;;;:::o;17465:332::-;17586:4;17624:2;17613:9;17609:18;17601:26;;17637:71;17705:1;17694:9;17690:17;17681:6;17637:71;:::i;:::-;17718:72;17786:2;17775:9;17771:18;17762:6;17718:72;:::i;:::-;17465:332;;;;;:::o;17803:233::-;17842:3;17865:24;17883:5;17865:24;:::i;:::-;17856:33;;17911:66;17904:5;17901:77;17898:103;;17981:18;;:::i;:::-;17898:103;18028:1;18021:5;18017:13;18010:20;;17803:233;;;:::o;18042:180::-;18182:32;18178:1;18170:6;18166:14;18159:56;18042:180;:::o;18228:366::-;18370:3;18391:67;18455:2;18450:3;18391:67;:::i;:::-;18384:74;;18467:93;18556:3;18467:93;:::i;:::-;18585:2;18580:3;18576:12;18569:19;;18228:366;;;:::o;18600:419::-;18766:4;18804:2;18793:9;18789:18;18781:26;;18853:9;18847:4;18843:20;18839:1;18828:9;18824:17;18817:47;18881:131;19007:4;18881:131;:::i;:::-;18873:139;;18600:419;;;:::o;19025:410::-;19065:7;19088:20;19106:1;19088:20;:::i;:::-;19083:25;;19122:20;19140:1;19122:20;:::i;:::-;19117:25;;19177:1;19174;19170:9;19199:30;19217:11;19199:30;:::i;:::-;19188:41;;19378:1;19369:7;19365:15;19362:1;19359:22;19339:1;19332:9;19312:83;19289:139;;19408:18;;:::i;:::-;19289:139;19073:362;19025:410;;;;:::o;19441:179::-;19581:31;19577:1;19569:6;19565:14;19558:55;19441:179;:::o;19626:366::-;19768:3;19789:67;19853:2;19848:3;19789:67;:::i;:::-;19782:74;;19865:93;19954:3;19865:93;:::i;:::-;19983:2;19978:3;19974:12;19967:19;;19626:366;;;:::o;19998:419::-;20164:4;20202:2;20191:9;20187:18;20179:26;;20251:9;20245:4;20241:20;20237:1;20226:9;20222:17;20215:47;20279:131;20405:4;20279:131;:::i;:::-;20271:139;;19998:419;;;:::o;20423:232::-;20563:34;20559:1;20551:6;20547:14;20540:58;20632:15;20627:2;20619:6;20615:15;20608:40;20423:232;:::o;20661:366::-;20803:3;20824:67;20888:2;20883:3;20824:67;:::i;:::-;20817:74;;20900:93;20989:3;20900:93;:::i;:::-;21018:2;21013:3;21009:12;21002:19;;20661:366;;;:::o;21033:419::-;21199:4;21237:2;21226:9;21222:18;21214:26;;21286:9;21280:4;21276:20;21272:1;21261:9;21257:17;21250:47;21314:131;21440:4;21314:131;:::i;:::-;21306:139;;21033:419;;;:::o;21458:141::-;21507:4;21530:3;21522:11;;21553:3;21550:1;21543:14;21587:4;21584:1;21574:18;21566:26;;21458:141;;;:::o;21605:93::-;21642:6;21689:2;21684;21677:5;21673:14;21669:23;21659:33;;21605:93;;;:::o;21704:107::-;21748:8;21798:5;21792:4;21788:16;21767:37;;21704:107;;;;:::o;21817:393::-;21886:6;21936:1;21924:10;21920:18;21959:97;21989:66;21978:9;21959:97;:::i;:::-;22077:39;22107:8;22096:9;22077:39;:::i;:::-;22065:51;;22149:4;22145:9;22138:5;22134:21;22125:30;;22198:4;22188:8;22184:19;22177:5;22174:30;22164:40;;21893:317;;21817:393;;;;;:::o;22216:60::-;22244:3;22265:5;22258:12;;22216:60;;;:::o;22282:142::-;22332:9;22365:53;22383:34;22392:24;22410:5;22392:24;:::i;:::-;22383:34;:::i;:::-;22365:53;:::i;:::-;22352:66;;22282:142;;;:::o;22430:75::-;22473:3;22494:5;22487:12;;22430:75;;;:::o;22511:269::-;22621:39;22652:7;22621:39;:::i;:::-;22682:91;22731:41;22755:16;22731:41;:::i;:::-;22723:6;22716:4;22710:11;22682:91;:::i;:::-;22676:4;22669:105;22587:193;22511:269;;;:::o;22786:73::-;22831:3;22786:73;:::o;22865:189::-;22942:32;;:::i;:::-;22983:65;23041:6;23033;23027:4;22983:65;:::i;:::-;22918:136;22865:189;;:::o;23060:186::-;23120:120;23137:3;23130:5;23127:14;23120:120;;;23191:39;23228:1;23221:5;23191:39;:::i;:::-;23164:1;23157:5;23153:13;23144:22;;23120:120;;;23060:186;;:::o;23252:543::-;23353:2;23348:3;23345:11;23342:446;;;23387:38;23419:5;23387:38;:::i;:::-;23471:29;23489:10;23471:29;:::i;:::-;23461:8;23457:44;23654:2;23642:10;23639:18;23636:49;;;23675:8;23660:23;;23636:49;23698:80;23754:22;23772:3;23754:22;:::i;:::-;23744:8;23740:37;23727:11;23698:80;:::i;:::-;23357:431;;23342:446;23252:543;;;:::o;23801:117::-;23855:8;23905:5;23899:4;23895:16;23874:37;;23801:117;;;;:::o;23924:169::-;23968:6;24001:51;24049:1;24045:6;24037:5;24034:1;24030:13;24001:51;:::i;:::-;23997:56;24082:4;24076;24072:15;24062:25;;23975:118;23924:169;;;;:::o;24098:295::-;24174:4;24320:29;24345:3;24339:4;24320:29;:::i;:::-;24312:37;;24382:3;24379:1;24375:11;24369:4;24366:21;24358:29;;24098:295;;;;:::o;24398:1395::-;24515:37;24548:3;24515:37;:::i;:::-;24617:18;24609:6;24606:30;24603:56;;;24639:18;;:::i;:::-;24603:56;24683:38;24715:4;24709:11;24683:38;:::i;:::-;24768:67;24828:6;24820;24814:4;24768:67;:::i;:::-;24862:1;24886:4;24873:17;;24918:2;24910:6;24907:14;24935:1;24930:618;;;;25592:1;25609:6;25606:77;;;25658:9;25653:3;25649:19;25643:26;25634:35;;25606:77;25709:67;25769:6;25762:5;25709:67;:::i;:::-;25703:4;25696:81;25565:222;24900:887;;24930:618;24982:4;24978:9;24970:6;24966:22;25016:37;25048:4;25016:37;:::i;:::-;25075:1;25089:208;25103:7;25100:1;25097:14;25089:208;;;25182:9;25177:3;25173:19;25167:26;25159:6;25152:42;25233:1;25225:6;25221:14;25211:24;;25280:2;25269:9;25265:18;25252:31;;25126:4;25123:1;25119:12;25114:17;;25089:208;;;25325:6;25316:7;25313:19;25310:179;;;25383:9;25378:3;25374:19;25368:26;25426:48;25468:4;25460:6;25456:17;25445:9;25426:48;:::i;:::-;25418:6;25411:64;25333:156;25310:179;25535:1;25531;25523:6;25519:14;25515:22;25509:4;25502:36;24937:611;;;24900:887;;24490:1303;;;24398:1395;;:::o;25799:174::-;25939:26;25935:1;25927:6;25923:14;25916:50;25799:174;:::o;25979:366::-;26121:3;26142:67;26206:2;26201:3;26142:67;:::i;:::-;26135:74;;26218:93;26307:3;26218:93;:::i;:::-;26336:2;26331:3;26327:12;26320:19;;25979:366;;;:::o;26351:419::-;26517:4;26555:2;26544:9;26540:18;26532:26;;26604:9;26598:4;26594:20;26590:1;26579:9;26575:17;26568:47;26632:131;26758:4;26632:131;:::i;:::-;26624:139;;26351:419;;;:::o;26776:228::-;26916:34;26912:1;26904:6;26900:14;26893:58;26985:11;26980:2;26972:6;26968:15;26961:36;26776:228;:::o;27010:366::-;27152:3;27173:67;27237:2;27232:3;27173:67;:::i;:::-;27166:74;;27249:93;27338:3;27249:93;:::i;:::-;27367:2;27362:3;27358:12;27351:19;;27010:366;;;:::o;27382:419::-;27548:4;27586:2;27575:9;27571:18;27563:26;;27635:9;27629:4;27625:20;27621:1;27610:9;27606:17;27599:47;27663:131;27789:4;27663:131;:::i;:::-;27655:139;;27382:419;;;:::o;27807:225::-;27947:34;27943:1;27935:6;27931:14;27924:58;28016:8;28011:2;28003:6;27999:15;27992:33;27807:225;:::o;28038:366::-;28180:3;28201:67;28265:2;28260:3;28201:67;:::i;:::-;28194:74;;28277:93;28366:3;28277:93;:::i;:::-;28395:2;28390:3;28386:12;28379:19;;28038:366;;;:::o;28410:419::-;28576:4;28614:2;28603:9;28599:18;28591:26;;28663:9;28657:4;28653:20;28649:1;28638:9;28634:17;28627:47;28691:131;28817:4;28691:131;:::i;:::-;28683:139;;28410:419;;;:::o;28835:182::-;28975:34;28971:1;28963:6;28959:14;28952:58;28835:182;:::o;29023:366::-;29165:3;29186:67;29250:2;29245:3;29186:67;:::i;:::-;29179:74;;29262:93;29351:3;29262:93;:::i;:::-;29380:2;29375:3;29371:12;29364:19;;29023:366;;;:::o;29395:419::-;29561:4;29599:2;29588:9;29584:18;29576:26;;29648:9;29642:4;29638:20;29634:1;29623:9;29619:17;29612:47;29676:131;29802:4;29676:131;:::i;:::-;29668:139;;29395:419;;;:::o;29820:178::-;29960:30;29956:1;29948:6;29944:14;29937:54;29820:178;:::o;30004:366::-;30146:3;30167:67;30231:2;30226:3;30167:67;:::i;:::-;30160:74;;30243:93;30332:3;30243:93;:::i;:::-;30361:2;30356:3;30352:12;30345:19;;30004:366;;;:::o;30376:419::-;30542:4;30580:2;30569:9;30565:18;30557:26;;30629:9;30623:4;30619:20;30615:1;30604:9;30600:17;30593:47;30657:131;30783:4;30657:131;:::i;:::-;30649:139;;30376:419;;;:::o;30801:224::-;30941:34;30937:1;30929:6;30925:14;30918:58;31010:7;31005:2;30997:6;30993:15;30986:32;30801:224;:::o;31031:366::-;31173:3;31194:67;31258:2;31253:3;31194:67;:::i;:::-;31187:74;;31270:93;31359:3;31270:93;:::i;:::-;31388:2;31383:3;31379:12;31372:19;;31031:366;;;:::o;31403:419::-;31569:4;31607:2;31596:9;31592:18;31584:26;;31656:9;31650:4;31646:20;31642:1;31631:9;31627:17;31620:47;31684:131;31810:4;31684:131;:::i;:::-;31676:139;;31403:419;;;:::o;31828:223::-;31968:34;31964:1;31956:6;31952:14;31945:58;32037:6;32032:2;32024:6;32020:15;32013:31;31828:223;:::o;32057:366::-;32199:3;32220:67;32284:2;32279:3;32220:67;:::i;:::-;32213:74;;32296:93;32385:3;32296:93;:::i;:::-;32414:2;32409:3;32405:12;32398:19;;32057:366;;;:::o;32429:419::-;32595:4;32633:2;32622:9;32618:18;32610:26;;32682:9;32676:4;32672:20;32668:1;32657:9;32653:17;32646:47;32710:131;32836:4;32710:131;:::i;:::-;32702:139;;32429:419;;;:::o;32854:182::-;32994:34;32990:1;32982:6;32978:14;32971:58;32854:182;:::o;33042:366::-;33184:3;33205:67;33269:2;33264:3;33205:67;:::i;:::-;33198:74;;33281:93;33370:3;33281:93;:::i;:::-;33399:2;33394:3;33390:12;33383:19;;33042:366;;;:::o;33414:419::-;33580:4;33618:2;33607:9;33603:18;33595:26;;33667:9;33661:4;33657:20;33653:1;33642:9;33638:17;33631:47;33695:131;33821:4;33695:131;:::i;:::-;33687:139;;33414:419;;;:::o;33839:180::-;33887:77;33884:1;33877:88;33984:4;33981:1;33974:15;34008:4;34005:1;33998:15;34025:185;34065:1;34082:20;34100:1;34082:20;:::i;:::-;34077:25;;34116:20;34134:1;34116:20;:::i;:::-;34111:25;;34155:1;34145:35;;34160:18;;:::i;:::-;34145:35;34202:1;34199;34195:9;34190:14;;34025:185;;;;:::o;34216:147::-;34317:11;34354:3;34339:18;;34216:147;;;;:::o;34369:114::-;;:::o;34489:398::-;34648:3;34669:83;34750:1;34745:3;34669:83;:::i;:::-;34662:90;;34761:93;34850:3;34761:93;:::i;:::-;34879:1;34874:3;34870:11;34863:18;;34489:398;;;:::o;34893:379::-;35077:3;35099:147;35242:3;35099:147;:::i;:::-;35092:154;;35263:3;35256:10;;34893:379;;;:::o;35278:166::-;35418:18;35414:1;35406:6;35402:14;35395:42;35278:166;:::o;35450:366::-;35592:3;35613:67;35677:2;35672:3;35613:67;:::i;:::-;35606:74;;35689:93;35778:3;35689:93;:::i;:::-;35807:2;35802:3;35798:12;35791:19;;35450:366;;;:::o;35822:419::-;35988:4;36026:2;36015:9;36011:18;36003:26;;36075:9;36069:4;36065:20;36061:1;36050:9;36046:17;36039:47;36103:131;36229:4;36103:131;:::i;:::-;36095:139;;35822:419;;;:::o;36247:175::-;36387:27;36383:1;36375:6;36371:14;36364:51;36247:175;:::o;36428:366::-;36570:3;36591:67;36655:2;36650:3;36591:67;:::i;:::-;36584:74;;36667:93;36756:3;36667:93;:::i;:::-;36785:2;36780:3;36776:12;36769:19;;36428:366;;;:::o;36800:419::-;36966:4;37004:2;36993:9;36989:18;36981:26;;37053:9;37047:4;37043:20;37039:1;37028:9;37024:17;37017:47;37081:131;37207:4;37081:131;:::i;:::-;37073:139;;36800:419;;;:::o;37225:237::-;37365:34;37361:1;37353:6;37349:14;37342:58;37434:20;37429:2;37421:6;37417:15;37410:45;37225:237;:::o;37468:366::-;37610:3;37631:67;37695:2;37690:3;37631:67;:::i;:::-;37624:74;;37707:93;37796:3;37707:93;:::i;:::-;37825:2;37820:3;37816:12;37809:19;;37468:366;;;:::o;37840:419::-;38006:4;38044:2;38033:9;38029:18;38021:26;;38093:9;38087:4;38083:20;38079:1;38068:9;38064:17;38057:47;38121:131;38247:4;38121:131;:::i;:::-;38113:139;;37840:419;;;:::o;38265:148::-;38367:11;38404:3;38389:18;;38265:148;;;;:::o;38419:390::-;38525:3;38553:39;38586:5;38553:39;:::i;:::-;38608:89;38690:6;38685:3;38608:89;:::i;:::-;38601:96;;38706:65;38764:6;38759:3;38752:4;38745:5;38741:16;38706:65;:::i;:::-;38796:6;38791:3;38787:16;38780:23;;38529:280;38419:390;;;;:::o;38815:435::-;38995:3;39017:95;39108:3;39099:6;39017:95;:::i;:::-;39010:102;;39129:95;39220:3;39211:6;39129:95;:::i;:::-;39122:102;;39241:3;39234:10;;38815:435;;;;;:::o;39256:98::-;39307:6;39341:5;39335:12;39325:22;;39256:98;;;:::o;39360:168::-;39443:11;39477:6;39472:3;39465:19;39517:4;39512:3;39508:14;39493:29;;39360:168;;;;:::o;39534:373::-;39620:3;39648:38;39680:5;39648:38;:::i;:::-;39702:70;39765:6;39760:3;39702:70;:::i;:::-;39695:77;;39781:65;39839:6;39834:3;39827:4;39820:5;39816:16;39781:65;:::i;:::-;39871:29;39893:6;39871:29;:::i;:::-;39866:3;39862:39;39855:46;;39624:283;39534:373;;;;:::o;39913:640::-;40108:4;40146:3;40135:9;40131:19;40123:27;;40160:71;40228:1;40217:9;40213:17;40204:6;40160:71;:::i;:::-;40241:72;40309:2;40298:9;40294:18;40285:6;40241:72;:::i;:::-;40323;40391:2;40380:9;40376:18;40367:6;40323:72;:::i;:::-;40442:9;40436:4;40432:20;40427:2;40416:9;40412:18;40405:48;40470:76;40541:4;40532:6;40470:76;:::i;:::-;40462:84;;39913:640;;;;;;;:::o;40559:141::-;40615:5;40646:6;40640:13;40631:22;;40662:32;40688:5;40662:32;:::i;:::-;40559:141;;;;:::o;40706:349::-;40775:6;40824:2;40812:9;40803:7;40799:23;40795:32;40792:119;;;40830:79;;:::i;:::-;40792:119;40950:1;40975:63;41030:7;41021:6;41010:9;41006:22;40975:63;:::i;:::-;40965:73;;40921:127;40706:349;;;;:::o;41061:595::-;41289:3;41311:95;41402:3;41393:6;41311:95;:::i;:::-;41304:102;;41423:95;41514:3;41505:6;41423:95;:::i;:::-;41416:102;;41535:95;41626:3;41617:6;41535:95;:::i;:::-;41528:102;;41647:3;41640:10;;41061:595;;;;;;:::o
Swarm Source
ipfs://c6d94a98b8f8e1d57af1c79951a90aceb25c27312cd1c4546b9d882c1bed007e
Loading...
Loading
Loading...
Loading
OVERVIEW
next tesMultichain Portfolio | 27 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.