More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 56 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 15794624 | 807 days ago | IN | 0 ETH | 0.00059896 | ||||
Whitelist Mint | 15588051 | 836 days ago | IN | 0.075 ETH | 0.00143121 | ||||
Public Mint | 15574922 | 838 days ago | IN | 0.05 ETH | 0.00619226 | ||||
Whitelist Mint | 15557632 | 840 days ago | IN | 0.025 ETH | 0.00137662 | ||||
Whitelist Mint | 15556967 | 840 days ago | IN | 0.025 ETH | 0.00094248 | ||||
Whitelist Mint | 15555651 | 841 days ago | IN | 0.075 ETH | 0.00192174 | ||||
Set Whitelist Me... | 15554405 | 841 days ago | IN | 0 ETH | 0.00024754 | ||||
Public Mint | 15551854 | 841 days ago | IN | 0.05 ETH | 0.00126803 | ||||
Whitelist Mint | 15545666 | 842 days ago | IN | 0.025 ETH | 0.00132071 | ||||
Whitelist Mint | 15545594 | 842 days ago | IN | 0.05 ETH | 0.00165745 | ||||
Whitelist Mint | 15545505 | 842 days ago | IN | 0.025 ETH | 0.0014278 | ||||
Whitelist Mint | 15545495 | 842 days ago | IN | 0.025 ETH | 0.0014566 | ||||
Whitelist Mint | 15545479 | 842 days ago | IN | 0.025 ETH | 0.00025832 | ||||
Set Whitelist Me... | 15545474 | 842 days ago | IN | 0 ETH | 0.00018575 | ||||
Set Whitelist Me... | 15545388 | 842 days ago | IN | 0 ETH | 0.00018557 | ||||
Whitelist Mint | 15545351 | 842 days ago | IN | 0.025 ETH | 0.00143196 | ||||
Whitelist Mint | 15544739 | 842 days ago | IN | 0.025 ETH | 0.00075063 | ||||
Whitelist Mint | 15542474 | 842 days ago | IN | 0.075 ETH | 0.00200421 | ||||
Whitelist Mint | 15541575 | 843 days ago | IN | 0.075 ETH | 0.00262568 | ||||
Whitelist Mint | 15541473 | 843 days ago | IN | 0.075 ETH | 0.00270968 | ||||
Whitelist Mint | 15539981 | 843 days ago | IN | 0.075 ETH | 0.00579529 | ||||
Whitelist Mint | 15539776 | 843 days ago | IN | 0.025 ETH | 0.00706589 | ||||
Whitelist Mint | 15539584 | 843 days ago | IN | 0.025 ETH | 0.00246703 | ||||
Whitelist Mint | 15539535 | 843 days ago | IN | 0.025 ETH | 0.0026209 | ||||
Whitelist Mint | 15539501 | 843 days ago | IN | 0.075 ETH | 0.0035158 |
Loading...
Loading
Contract Name:
UnknownCenter
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-15 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // 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/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // 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 v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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: UnknownCenter.sol pragma solidity ^0.8.0; library TransferHelper { function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } } interface IToken { function balanceOf(address account) external view returns (uint256); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); } interface UnknownNFT { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // 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); // ============================== // IERC721 // ============================== /** * @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 be 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: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * 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); // ============================== // IERC721Metadata // ============================== /** * @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); } contract UnknownCenter is Ownable, IERC721Receiver, ReentrancyGuard{ using SafeMath for uint256; struct UnknownCenterConfig { address NFTContractAddress; uint256 currentTokenId; } UnknownCenterConfig public UNC ; address public MRChen; bool public allowWhitelistMint; bool public allowPublicMint; uint256 public whitelistPrice; uint256 public publicPrice; uint256 public maximumBuyLimitPerMint ; uint256 public maximumBuyLimit ; bytes32 public whitelistMerkleRoot; mapping( address => uint256 ) public totalBuy; mapping( address => string ) public addressToInviteCode; mapping( string => address ) public inviteCodeToAddress; constructor() { UNC.currentTokenId = 3732; UNC.NFTContractAddress = 0x65DbbBe9ba77D197B443b30C07e2DC1b58db714d; MRChen = 0xD24dcc78ad3f410100A1e3c357347B44e4743bed; allowWhitelistMint = false; allowPublicMint = false; whitelistMerkleRoot = 0x4c5429d7e921cc666831753f7e633bd1dfdcc4a3f6b4201d796d274b193dcbca; whitelistPrice = 0.025 ether; publicPrice = 0.05 ether; maximumBuyLimitPerMint = 3; maximumBuyLimit = 3; } receive() external payable {} event WhitelistMint( address minter, uint256 quantity, string inviteCode ); event PublicMint( address minter, uint256 quantity, string inviteCode ); event InviteCode( address minter, string inviteCode ); modifier notContract() { require(!_isContract(msg.sender), "contract not allowed"); require(msg.sender == tx.origin, "proxy contract not allowed"); _; } modifier checkWhitelist( address adr, bytes32[] calldata proof, bytes32 root ) { require(isWhitelist(adr, proof, whitelistMerkleRoot), "not in whitelist"); _; } /* main function */ function leaf( address _account ) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_account)); } function isWhitelist( address adr, bytes32[] calldata proof, bytes32 root ) internal pure returns (bool) { return MerkleProof.verify(proof, root, leaf(adr)); } function whitelistMint( address to, bytes32[] calldata proof, uint256 quantity ) external payable notContract() nonReentrant() checkWhitelist(to, proof, whitelistMerkleRoot) returns (string memory, address) { require(allowWhitelistMint, "not allow to whitelist mint"); require( msg.sender == to, "not allow to gift" ); require( whitelistPrice * quantity == msg.value, "not enough ether" ); require(quantity >= 1 && quantity <= maximumBuyLimitPerMint, "quantity out of range"); require(totalBuy[to] + quantity <= maximumBuyLimit, "too many quantity"); uint256 firstTokenBuy = UNC.currentTokenId; for ( ; quantity > 0 ; quantity-- ) { UnknownNFT unknown = UnknownNFT(UNC.NFTContractAddress); require( unknown.ownerOf(UNC.currentTokenId) == address(this), "currnet token id is not in this contract" ); unknown.transferFrom(address(this), to, UNC.currentTokenId); totalBuy[to]++ ; UNC.currentTokenId++ ; } if ( bytes(addressToInviteCode[to]).length == 0 ) { string memory code = string(abi.encodePacked("UN", Strings.toString(firstTokenBuy))); addressToInviteCode[to] = code; inviteCodeToAddress[code] = to; emit InviteCode( to, addressToInviteCode[to] ); } return (addressToInviteCode[to], to); } function publicMint( address payable to, string calldata invite, uint256 quantity ) external payable notContract() nonReentrant() returns (string memory, address) { require(allowPublicMint, "not allow to public mint"); require( msg.sender == to, "not allow to gift" ); require( publicPrice * quantity == msg.value, "not enough ether" ); require(quantity >= 1 && quantity <= maximumBuyLimitPerMint, "quantity out of range"); require(totalBuy[to] + quantity <= maximumBuyLimit, "too many quantity"); address invitedAddress = inviteCodeToAddress[invite] ; require( invitedAddress != address(0), "invalid invite code" ); (, uint256 unknownNFTBalance) = checkInviteLevel(invitedAddress); if ( unknownNFTBalance != 0 ) { uint256 percentage = 0 ; bool first = true ; for ( uint256 b = unknownNFTBalance ; b > 0 && percentage < 50 ; b-- ) { if ( first ) { percentage = percentage + 10 ; first = false; } else { percentage = percentage + 5 ; } } bool sent = payable(invitedAddress).send(msg.value.div(100).mul(percentage)); require(sent, "eth send failed"); } uint256 firstTokenBuy = UNC.currentTokenId; for ( ; quantity > 0 ; quantity-- ) { UnknownNFT unknown = UnknownNFT(UNC.NFTContractAddress); require( unknown.ownerOf(UNC.currentTokenId) == address(this), "currnet token id is not in this contract" ); unknown.transferFrom(address(this), to, UNC.currentTokenId); totalBuy[to]++ ; UNC.currentTokenId++ ; } if ( bytes(addressToInviteCode[to]).length == 0 ) { string memory code = string(abi.encodePacked("UN", Strings.toString(firstTokenBuy))); addressToInviteCode[to] = code; inviteCodeToAddress[code] = to; emit InviteCode( to, addressToInviteCode[to] ); } return (addressToInviteCode[to], to); } /* main function */ /* prop */ function checkInviteLevel( address holder ) public view returns (uint256, uint256) { UnknownNFT unknown = UnknownNFT(UNC.NFTContractAddress); uint unknownBalance = unknown.balanceOf(holder); if ( unknownBalance < 1 ) { return ( 0, unknownBalance ) ; } else if ( unknownBalance >= 1 && unknownBalance <= 3 ) { return ( 1, unknownBalance ) ; } else if ( unknownBalance >= 4 && unknownBalance <= 6 ) { return ( 2, unknownBalance ) ; } else { return ( 3, unknownBalance ) ; } } function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } function _isContract( address _addr ) internal view returns (bool) { uint size; assembly { size := extcodesize(_addr) } return size > 0; } /* prop */ /* helper */ function withdraw() public onlyOwner { require(address(this).balance > 0, "insufficient balance"); payable(MRChen).transfer(address(this).balance); } function transferTokenOut( address to, uint256 tokenId ) public onlyOwner { UnknownNFT unknown = UnknownNFT(UNC.NFTContractAddress); require( unknown.ownerOf(tokenId) == address(this), "currnet token id is not in this contract" ); unknown.transferFrom(address(this), to, tokenId); } function transferTokenOut( address to, uint256 startTokenId, uint256 endTokenId ) public onlyOwner { UnknownNFT unknown = UnknownNFT(UNC.NFTContractAddress); for (; startTokenId <= endTokenId ; startTokenId++ ) { require( unknown.ownerOf(startTokenId) == address(this), "currnet token id is not in this contract" ); unknown.transferFrom(address(this), to, startTokenId); } } function withdrawToken( address token, address to ) external onlyOwner { uint256 tokenBalance = IToken(token).balanceOf(address(this)); TransferHelper.safeTransfer(token, to, tokenBalance); } /* helper */ /* setter */ function changeBossOMG( address newMRChen ) public onlyOwner { MRChen = newMRChen; } function setUnknownCenter( address newNFTContractAddress, uint256 newCurrentTokenId ) public onlyOwner { UNC.NFTContractAddress = newNFTContractAddress; UNC.currentTokenId = newCurrentTokenId; } function setWhitelistMerkleRoot( bytes32 newWhitelistMerkleRoot ) public onlyOwner { whitelistMerkleRoot = newWhitelistMerkleRoot; } function setAllowWhitelistMint( bool newAllowWhitelistMint ) public onlyOwner { allowWhitelistMint = newAllowWhitelistMint; } function setAllowPublicMint( bool newAllowPublicMint ) public onlyOwner { allowPublicMint = newAllowPublicMint; } function setWhitelistPrice( uint256 newWhitelistPrice ) public onlyOwner { whitelistPrice = newWhitelistPrice; } function setPublicPrice( uint256 newPublicPrice ) public onlyOwner { publicPrice = newPublicPrice; } function setMaximumBuyLimitPerMint( uint256 newMaximumBuyLimitPerMint ) public onlyOwner { maximumBuyLimitPerMint = newMaximumBuyLimitPerMint; } function setMaximumBuyLimit( uint256 newMaximumBuyLimit ) public onlyOwner { maximumBuyLimit = newMaximumBuyLimit; } /* setter */ }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"string","name":"inviteCode","type":"string"}],"name":"InviteCode","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":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"string","name":"inviteCode","type":"string"}],"name":"PublicMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"string","name":"inviteCode","type":"string"}],"name":"WhitelistMint","type":"event"},{"inputs":[],"name":"MRChen","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNC","outputs":[{"internalType":"address","name":"NFTContractAddress","type":"address"},{"internalType":"uint256","name":"currentTokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToInviteCode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowPublicMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowWhitelistMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMRChen","type":"address"}],"name":"changeBossOMG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkInviteLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"inviteCodeToAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumBuyLimitPerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"string","name":"invite","type":"string"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicMint","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newAllowPublicMint","type":"bool"}],"name":"setAllowPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newAllowWhitelistMint","type":"bool"}],"name":"setAllowWhitelistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaximumBuyLimit","type":"uint256"}],"name":"setMaximumBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaximumBuyLimitPerMint","type":"uint256"}],"name":"setMaximumBuyLimitPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPublicPrice","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newNFTContractAddress","type":"address"},{"internalType":"uint256","name":"newCurrentTokenId","type":"uint256"}],"name":"setUnknownCenter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newWhitelistMerkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWhitelistPrice","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferTokenOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"startTokenId","type":"uint256"},{"internalType":"uint256","name":"endTokenId","type":"uint256"}],"name":"transferTokenOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"whitelistMint","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5062000032620000266200018460201b60201c565b6200018c60201b60201c565b60018081905550610e946002600101819055507365dbbbe9ba77d197b443b30c07e2dc1b58db714d600260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d24dcc78ad3f410100a1e3c357347b44e4743bed600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460146101000a81548160ff0219169083151502179055506000600460156101000a81548160ff0219169083151502179055507f4c5429d7e921cc666831753f7e633bd1dfdcc4a3f6b4201d796d274b193dcbca60001b6009819055506658d15e1762800060058190555066b1a2bc2ec500006006819055506003600781905550600360088190555062000250565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6146b880620002606000396000f3fe6080604052600436106101e65760003560e01c80638f513fc911610102578063bf6b8c2811610095578063d3d6dc2b11610064578063d3d6dc2b146106bc578063f2fde38b146106f9578063fc1a1c3614610722578063ff7aa51f1461074d576101ed565b8063bf6b8c2814610616578063c627525514610641578063d0b659841461066a578063d0f284c414610693576101ed565b8063aa98e0c6116100d1578063aa98e0c614610568578063b411d22714610593578063b8e0287b146105c4578063bd32fb66146105ed576101ed565b80638f513fc9146104c0578063912db328146104e95780639edcc31014610512578063a945bf801461053d576101ed565b80633ccfd60b1161017a578063717d57d311610149578063717d57d3146103f15780637e097c481461041a5780638c0698b1146104575780638da5cb5b14610495576101ed565b80633ccfd60b1461035b5780635130d73414610372578063543cc622146103af578063715018a6146103da576101ed565b80631b7470e4116101b65780631b7470e4146102af5780631e6904f1146102d85780633710a25a146103095780633aeac4e114610332576101ed565b80622e0ae7146101f2578063106504ed1461021b578063150b7a0214610246578063174609f814610283576101ed565b366101ed57005b600080fd5b3480156101fe57600080fd5b5061021960048036038101906102149190613318565b610778565b005b34801561022757600080fd5b50610230610988565b60405161023d9190613d55565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190613221565b61098e565b60405161027a9190613ac8565b60405180910390f35b34801561028f57600080fd5b506102986109a2565b6040516102a6929190613a69565b60405180910390f35b3480156102bb57600080fd5b506102d660048036038101906102d19190613358565b6109d4565b005b6102f260048036038101906102ed91906132a4565b610c00565b604051610300929190613b05565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b91906133ab565b611409565b005b34801561033e57600080fd5b50610359600480360381019061035491906131e1565b6114a2565b005b34801561036757600080fd5b506103706115bb565b005b34801561037e57600080fd5b5061039960048036038101906103949190613113565b6116e5565b6040516103a69190613d55565b60405180910390f35b3480156103bb57600080fd5b506103c46116fd565b6040516103d19190613980565b60405180910390f35b3480156103e657600080fd5b506103ef611723565b005b3480156103fd57600080fd5b506104186004803603810190610413919061347b565b6117ab565b005b34801561042657600080fd5b50610441600480360381019061043c9190613432565b611831565b60405161044e9190613980565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613113565b61187a565b60405161048c929190613d70565b60405180910390f35b3480156104a157600080fd5b506104aa6119a4565b6040516104b79190613980565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e2919061347b565b6119cd565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613318565b611a53565b005b34801561051e57600080fd5b50610527611b21565b6040516105349190613a92565b60405180910390f35b34801561054957600080fd5b50610552611b34565b60405161055f9190613d55565b60405180910390f35b34801561057457600080fd5b5061057d611b3a565b60405161058a9190613aad565b60405180910390f35b6105ad60048036038101906105a8919061316d565b611b40565b6040516105bb929190613b05565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e6919061347b565b6124c5565b005b3480156105f957600080fd5b50610614600480360381019061060f9190613405565b61254b565b005b34801561062257600080fd5b5061062b6125d1565b6040516106389190613d55565b60405180910390f35b34801561064d57600080fd5b506106686004803603810190610663919061347b565b6125d7565b005b34801561067657600080fd5b50610691600480360381019061068c91906133ab565b61265d565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190613113565b6126f6565b005b3480156106c857600080fd5b506106e360048036038101906106de9190613113565b6127b6565b6040516106f09190613ae3565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b9190613113565b612856565b005b34801561072e57600080fd5b5061073761294e565b6040516107449190613d55565b60405180910390f35b34801561075957600080fd5b50610762612954565b60405161076f9190613a92565b60405180910390f35b610780612967565b73ffffffffffffffffffffffffffffffffffffffff1661079e6119a4565b73ffffffffffffffffffffffffffffffffffffffff16146107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90613bd5565b60405180910390fd5b6000600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161086e9190613d55565b60206040518083038186803b15801561088657600080fd5b505afa15801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190613140565b73ffffffffffffffffffffffffffffffffffffffff1614610914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90613cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3085856040518463ffffffff1660e01b815260040161095193929190613a02565b600060405180830381600087803b15801561096b57600080fd5b505af115801561097f573d6000803e3d6000fd5b50505050505050565b60075481565b600063150b7a0260e01b9050949350505050565b60028060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b6109dc612967565b73ffffffffffffffffffffffffffffffffffffffff166109fa6119a4565b73ffffffffffffffffffffffffffffffffffffffff1614610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4790613bd5565b60405180910390fd5b6000600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b818311610bfa573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401610ad29190613d55565b60206040518083038186803b158015610aea57600080fd5b505afa158015610afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b229190613140565b73ffffffffffffffffffffffffffffffffffffffff1614610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f90613cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3086866040518463ffffffff1660e01b8152600401610bb593929190613a02565b600060405180830381600087803b158015610bcf57600080fd5b505af1158015610be3573d6000803e3d6000fd5b505050508280610bf29061411c565b935050610a7b565b50505050565b60606000610c0d3361296f565b15610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490613bf5565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290613b35565b60405180910390fd5b60026001541415610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890613cf5565b60405180910390fd5b6002600181905550858585600954610d1d848484600954612982565b610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390613d15565b60405180910390fd5b600460149054906101000a900460ff16610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da290613b95565b60405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613c55565b60405180910390fd5b3487600554610e289190613ef9565b14610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90613d35565b60405180910390fd5b60018710158015610e7b57506007548711155b610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190613c95565b60405180910390fd5b60085487600a60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f089190613e72565b1115610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4090613cb5565b60405180910390fd5b600060026001015490505b600088111561117a576000600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e6002600101546040518263ffffffff1660e01b8152600401610fdc9190613d55565b60206040518083038186803b158015610ff457600080fd5b505afa158015611008573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102c9190613140565b73ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd308e6002600101546040518463ffffffff1660e01b81526004016110c493929190613a02565b600060405180830381600087803b1580156110de57600080fd5b505af11580156110f2573d6000803e3d6000fd5b50505050600a60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906111469061411c565b9190505550600260010160008154809291906111619061411c565b91905055505087806111729061408f565b985050610f54565b6000600b60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080546111c6906140b9565b905014156113245760006111d9826129e2565b6040516020016111e9919061395e565b604051602081830303815290604052905080600b60008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020908051906020019061124d929190612e3c565b508b600c8260405161125f9190613947565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc71852ca1865683575331e0b860fc1fe2418d1251a8d9502b8bff2738a942af18c600b60008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405161131a929190613a39565b60405180910390a1505b600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208b818054611370906140b9565b80601f016020809104026020016040519081016040528092919081815260200182805461139c906140b9565b80156113e95780601f106113be576101008083540402835291602001916113e9565b820191906000526020600020905b8154815290600101906020018083116113cc57829003601f168201915b505050505091509650965050505050506001808190555094509492505050565b611411612967565b73ffffffffffffffffffffffffffffffffffffffff1661142f6119a4565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90613bd5565b60405180910390fd5b80600460146101000a81548160ff02191690831515021790555050565b6114aa612967565b73ffffffffffffffffffffffffffffffffffffffff166114c86119a4565b73ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590613bd5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115599190613980565b60206040518083038186803b15801561157157600080fd5b505afa158015611585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a991906134a8565b90506115b6838383612b43565b505050565b6115c3612967565b73ffffffffffffffffffffffffffffffffffffffff166115e16119a4565b73ffffffffffffffffffffffffffffffffffffffff1614611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e90613bd5565b60405180910390fd5b6000471161167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167190613c15565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156116e2573d6000803e3d6000fd5b50565b600a6020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61172b612967565b73ffffffffffffffffffffffffffffffffffffffff166117496119a4565b73ffffffffffffffffffffffffffffffffffffffff161461179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690613bd5565b60405180910390fd5b6117a96000612c79565b565b6117b3612967565b73ffffffffffffffffffffffffffffffffffffffff166117d16119a4565b73ffffffffffffffffffffffffffffffffffffffff1614611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90613bd5565b60405180910390fd5b8060058190555050565b600c818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016118e29190613980565b60206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193291906134a8565b9050600181101561194b5760008193509350505061199f565b6001811015801561195d575060038111155b156119705760018193509350505061199f565b60048110158015611982575060068111155b156119955760028193509350505061199f565b6003819350935050505b915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119d5612967565b73ffffffffffffffffffffffffffffffffffffffff166119f36119a4565b73ffffffffffffffffffffffffffffffffffffffff1614611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090613bd5565b60405180910390fd5b8060078190555050565b611a5b612967565b73ffffffffffffffffffffffffffffffffffffffff16611a796119a4565b73ffffffffffffffffffffffffffffffffffffffff1614611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690613bd5565b60405180910390fd5b81600260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002600101819055505050565b600460159054906101000a900460ff1681565b60065481565b60095481565b60606000611b4d3361296f565b15611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490613bf5565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290613b35565b60405180910390fd5b60026001541415611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613cf5565b60405180910390fd5b6002600181905550600460159054906101000a900460ff16611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613c75565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90613c55565b60405180910390fd5b3483600654611d159190613ef9565b14611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c90613d35565b60405180910390fd5b60018310158015611d6857506007548311155b611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90613c95565b60405180910390fd5b60085483600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df59190613e72565b1115611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90613cb5565b60405180910390fd5b6000600c8686604051611e4a92919061392e565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290613bb5565b60405180910390fd5b6000611ef68261187a565b91505060008114612007576000806001905060008390505b600081118015611f1e5750603283105b15611f64578115611f4157600a83611f369190613e72565b925060009150611f51565b600583611f4e9190613e72565b92505b8080611f5c9061408f565b915050611f0e565b5060008473ffffffffffffffffffffffffffffffffffffffff166108fc611fa785611f99606434612d3d90919063ffffffff16565b612d5390919063ffffffff16565b9081150290604051600060405180830381858888f19350505050905080612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa90613c35565b60405180910390fd5b5050505b600060026001015490505b6000861115612238576000600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e6002600101546040518263ffffffff1660e01b815260040161209a9190613d55565b60206040518083038186803b1580156120b257600080fd5b505afa1580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190613140565b73ffffffffffffffffffffffffffffffffffffffff1614612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213790613cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd308c6002600101546040518463ffffffff1660e01b8152600401612182939291906139cb565b600060405180830381600087803b15801561219c57600080fd5b505af11580156121b0573d6000803e3d6000fd5b50505050600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906122049061411c565b91905055506002600101600081548092919061221f9061411c565b91905055505085806122309061408f565b965050612012565b6000600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054612284906140b9565b905014156123e2576000612297826129e2565b6040516020016122a7919061395e565b604051602081830303815290604052905080600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020908051906020019061230b929190612e3c565b5089600c8260405161231d9190613947565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc71852ca1865683575331e0b860fc1fe2418d1251a8d9502b8bff2738a942af18a600b60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040516123d892919061399b565b60405180910390a1505b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208981805461242e906140b9565b80601f016020809104026020016040519081016040528092919081815260200182805461245a906140b9565b80156124a75780601f1061247c576101008083540402835291602001916124a7565b820191906000526020600020905b81548152906001019060200180831161248a57829003601f168201915b50505050509150945094505050506001808190555094509492505050565b6124cd612967565b73ffffffffffffffffffffffffffffffffffffffff166124eb6119a4565b73ffffffffffffffffffffffffffffffffffffffff1614612541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253890613bd5565b60405180910390fd5b8060088190555050565b612553612967565b73ffffffffffffffffffffffffffffffffffffffff166125716119a4565b73ffffffffffffffffffffffffffffffffffffffff16146125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be90613bd5565b60405180910390fd5b8060098190555050565b60085481565b6125df612967565b73ffffffffffffffffffffffffffffffffffffffff166125fd6119a4565b73ffffffffffffffffffffffffffffffffffffffff1614612653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264a90613bd5565b60405180910390fd5b8060068190555050565b612665612967565b73ffffffffffffffffffffffffffffffffffffffff166126836119a4565b73ffffffffffffffffffffffffffffffffffffffff16146126d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d090613bd5565b60405180910390fd5b80600460156101000a81548160ff02191690831515021790555050565b6126fe612967565b73ffffffffffffffffffffffffffffffffffffffff1661271c6119a4565b73ffffffffffffffffffffffffffffffffffffffff1614612772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276990613bd5565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60205280600052604060002060009150905080546127d5906140b9565b80601f0160208091040260200160405190810160405280929190818152602001828054612801906140b9565b801561284e5780601f106128235761010080835404028352916020019161284e565b820191906000526020600020905b81548152906001019060200180831161283157829003601f168201915b505050505081565b61285e612967565b73ffffffffffffffffffffffffffffffffffffffff1661287c6119a4565b73ffffffffffffffffffffffffffffffffffffffff16146128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c990613bd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990613b75565b60405180910390fd5b61294b81612c79565b50565b60055481565b600460149054906101000a900460ff1681565b600033905090565b600080823b905060008111915050919050565b60006129d8848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050836129d388612d69565b612d99565b9050949350505050565b60606000821415612a2a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b3e565b600082905060005b60008214612a5c578080612a459061411c565b915050600a82612a559190613ec8565b9150612a32565b60008167ffffffffffffffff811115612a7857612a77614276565b5b6040519080825280601f01601f191660200182016040528015612aaa5781602001600182028036833780820191505090505b5090505b60008514612b3757600182612ac39190613f53565b9150600a85612ad29190614189565b6030612ade9190613e72565b60f81b818381518110612af457612af3614247565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b309190613ec8565b9450612aae565b8093505050505b919050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401612b75929190613a69565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612bc39190613917565b6000604051808303816000865af19150503d8060008114612c00576040519150601f19603f3d011682016040523d82523d6000602084013e612c05565b606091505b5091509150818015612c335750600081511480612c32575080806020019051810190612c3191906133d8565b5b5b612c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6990613b55565b60405180910390fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612d4b9190613ec8565b905092915050565b60008183612d619190613ef9565b905092915050565b600081604051602001612d7c91906138fc565b604051602081830303815290604052805190602001209050919050565b600082612da68584612db0565b1490509392505050565b60008082905060005b8451811015612e1a576000858281518110612dd757612dd6614247565b5b60200260200101519050808311612df957612df28382612e25565b9250612e06565b612e038184612e25565b92505b508080612e129061411c565b915050612db9565b508091505092915050565b600082600052816020526040600020905092915050565b828054612e48906140b9565b90600052602060002090601f016020900481019282612e6a5760008555612eb1565b82601f10612e8357805160ff1916838001178555612eb1565b82800160010185558215612eb1579182015b82811115612eb0578251825591602001919060010190612e95565b5b509050612ebe9190612ec2565b5090565b5b80821115612edb576000816000905550600101612ec3565b5090565b6000612ef2612eed84613dbe565b613d99565b905082815260208101848484011115612f0e57612f0d6142b4565b5b612f1984828561404d565b509392505050565b6000612f34612f2f84613def565b613d99565b905082815260208101848484011115612f5057612f4f6142b4565b5b612f5b84828561404d565b509392505050565b600081359050612f728161460f565b92915050565b600081519050612f878161460f565b92915050565b600081359050612f9c81614626565b92915050565b60008083601f840112612fb857612fb76142aa565b5b8235905067ffffffffffffffff811115612fd557612fd46142a5565b5b602083019150836020820283011115612ff157612ff06142af565b5b9250929050565b6000813590506130078161463d565b92915050565b60008151905061301c8161463d565b92915050565b60008135905061303181614654565b92915050565b600082601f83011261304c5761304b6142aa565b5b813561305c848260208601612edf565b91505092915050565b60008083601f84011261307b5761307a6142aa565b5b8235905067ffffffffffffffff811115613098576130976142a5565b5b6020830191508360018202830111156130b4576130b36142af565b5b9250929050565b600082601f8301126130d0576130cf6142aa565b5b81356130e0848260208601612f21565b91505092915050565b6000813590506130f88161466b565b92915050565b60008151905061310d8161466b565b92915050565b600060208284031215613129576131286142be565b5b600061313784828501612f63565b91505092915050565b600060208284031215613156576131556142be565b5b600061316484828501612f78565b91505092915050565b60008060008060608587031215613187576131866142be565b5b600061319587828801612f8d565b945050602085013567ffffffffffffffff8111156131b6576131b56142b9565b5b6131c287828801613065565b935093505060406131d5878288016130e9565b91505092959194509250565b600080604083850312156131f8576131f76142be565b5b600061320685828601612f63565b925050602061321785828601612f63565b9150509250929050565b6000806000806080858703121561323b5761323a6142be565b5b600061324987828801612f63565b945050602061325a87828801612f63565b935050604061326b878288016130e9565b925050606085013567ffffffffffffffff81111561328c5761328b6142b9565b5b61329887828801613037565b91505092959194509250565b600080600080606085870312156132be576132bd6142be565b5b60006132cc87828801612f63565b945050602085013567ffffffffffffffff8111156132ed576132ec6142b9565b5b6132f987828801612fa2565b9350935050604061330c878288016130e9565b91505092959194509250565b6000806040838503121561332f5761332e6142be565b5b600061333d85828601612f63565b925050602061334e858286016130e9565b9150509250929050565b600080600060608486031215613371576133706142be565b5b600061337f86828701612f63565b9350506020613390868287016130e9565b92505060406133a1868287016130e9565b9150509250925092565b6000602082840312156133c1576133c06142be565b5b60006133cf84828501612ff8565b91505092915050565b6000602082840312156133ee576133ed6142be565b5b60006133fc8482850161300d565b91505092915050565b60006020828403121561341b5761341a6142be565b5b600061342984828501613022565b91505092915050565b600060208284031215613448576134476142be565b5b600082013567ffffffffffffffff811115613466576134656142b9565b5b613472848285016130bb565b91505092915050565b600060208284031215613491576134906142be565b5b600061349f848285016130e9565b91505092915050565b6000602082840312156134be576134bd6142be565b5b60006134cc848285016130fe565b91505092915050565b6134de81614017565b82525050565b6134ed81613f87565b82525050565b6135046134ff82613f87565b614165565b82525050565b61351381613fab565b82525050565b61352281613fb7565b82525050565b61353181613fc1565b82525050565b600061354282613e35565b61354c8185613e4b565b935061355c81856020860161405c565b80840191505092915050565b60006135748385613e67565b935061358183858461404d565b82840190509392505050565b600061359882613e40565b6135a28185613e56565b93506135b281856020860161405c565b6135bb816142c3565b840191505092915050565b60006135d182613e40565b6135db8185613e67565b93506135eb81856020860161405c565b80840191505092915050565b60008154613604816140b9565b61360e8186613e56565b94506001821660008114613629576001811461363b5761366e565b60ff198316865260208601935061366e565b61364485613e20565b60005b8381101561366657815481890152600182019150602081019050613647565b808801955050505b50505092915050565b6000613684601a83613e56565b915061368f826142e1565b602082019050919050565b60006136a7601f83613e56565b91506136b28261430a565b602082019050919050565b60006136ca602683613e56565b91506136d582614333565b604082019050919050565b60006136ed601b83613e56565b91506136f882614382565b602082019050919050565b6000613710600283613e67565b915061371b826143ab565b600282019050919050565b6000613733601383613e56565b915061373e826143d4565b602082019050919050565b6000613756602083613e56565b9150613761826143fd565b602082019050919050565b6000613779601483613e56565b915061378482614426565b602082019050919050565b600061379c601483613e56565b91506137a78261444f565b602082019050919050565b60006137bf600f83613e56565b91506137ca82614478565b602082019050919050565b60006137e2601183613e56565b91506137ed826144a1565b602082019050919050565b6000613805601883613e56565b9150613810826144ca565b602082019050919050565b6000613828601583613e56565b9150613833826144f3565b602082019050919050565b600061384b601183613e56565b91506138568261451c565b602082019050919050565b600061386e602883613e56565b915061387982614545565b604082019050919050565b6000613891601f83613e56565b915061389c82614594565b602082019050919050565b60006138b4601083613e56565b91506138bf826145bd565b602082019050919050565b60006138d7601083613e56565b91506138e2826145e6565b602082019050919050565b6138f68161400d565b82525050565b600061390882846134f3565b60148201915081905092915050565b60006139238284613537565b915081905092915050565b600061393b828486613568565b91508190509392505050565b600061395382846135c6565b915081905092915050565b600061396982613703565b915061397582846135c6565b915081905092915050565b600060208201905061399560008301846134e4565b92915050565b60006040820190506139b060008301856134d5565b81810360208301526139c281846135f7565b90509392505050565b60006060820190506139e060008301866134e4565b6139ed60208301856134d5565b6139fa60408301846138ed565b949350505050565b6000606082019050613a1760008301866134e4565b613a2460208301856134e4565b613a3160408301846138ed565b949350505050565b6000604082019050613a4e60008301856134e4565b8181036020830152613a6081846135f7565b90509392505050565b6000604082019050613a7e60008301856134e4565b613a8b60208301846138ed565b9392505050565b6000602082019050613aa7600083018461350a565b92915050565b6000602082019050613ac26000830184613519565b92915050565b6000602082019050613add6000830184613528565b92915050565b60006020820190508181036000830152613afd818461358d565b905092915050565b60006040820190508181036000830152613b1f818561358d565b9050613b2e60208301846134e4565b9392505050565b60006020820190508181036000830152613b4e81613677565b9050919050565b60006020820190508181036000830152613b6e8161369a565b9050919050565b60006020820190508181036000830152613b8e816136bd565b9050919050565b60006020820190508181036000830152613bae816136e0565b9050919050565b60006020820190508181036000830152613bce81613726565b9050919050565b60006020820190508181036000830152613bee81613749565b9050919050565b60006020820190508181036000830152613c0e8161376c565b9050919050565b60006020820190508181036000830152613c2e8161378f565b9050919050565b60006020820190508181036000830152613c4e816137b2565b9050919050565b60006020820190508181036000830152613c6e816137d5565b9050919050565b60006020820190508181036000830152613c8e816137f8565b9050919050565b60006020820190508181036000830152613cae8161381b565b9050919050565b60006020820190508181036000830152613cce8161383e565b9050919050565b60006020820190508181036000830152613cee81613861565b9050919050565b60006020820190508181036000830152613d0e81613884565b9050919050565b60006020820190508181036000830152613d2e816138a7565b9050919050565b60006020820190508181036000830152613d4e816138ca565b9050919050565b6000602082019050613d6a60008301846138ed565b92915050565b6000604082019050613d8560008301856138ed565b613d9260208301846138ed565b9392505050565b6000613da3613db4565b9050613daf82826140eb565b919050565b6000604051905090565b600067ffffffffffffffff821115613dd957613dd8614276565b5b613de2826142c3565b9050602081019050919050565b600067ffffffffffffffff821115613e0a57613e09614276565b5b613e13826142c3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e7d8261400d565b9150613e888361400d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ebd57613ebc6141ba565b5b828201905092915050565b6000613ed38261400d565b9150613ede8361400d565b925082613eee57613eed6141e9565b5b828204905092915050565b6000613f048261400d565b9150613f0f8361400d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f4857613f476141ba565b5b828202905092915050565b6000613f5e8261400d565b9150613f698361400d565b925082821015613f7c57613f7b6141ba565b5b828203905092915050565b6000613f9282613fed565b9050919050565b6000613fa482613fed565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061402282614029565b9050919050565b60006140348261403b565b9050919050565b600061404682613fed565b9050919050565b82818337600083830152505050565b60005b8381101561407a57808201518184015260208101905061405f565b83811115614089576000848401525b50505050565b600061409a8261400d565b915060008214156140ae576140ad6141ba565b5b600182039050919050565b600060028204905060018216806140d157607f821691505b602082108114156140e5576140e4614218565b5b50919050565b6140f4826142c3565b810181811067ffffffffffffffff8211171561411357614112614276565b5b80604052505050565b60006141278261400d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561415a576141596141ba565b5b600182019050919050565b600061417082614177565b9050919050565b6000614182826142d4565b9050919050565b60006141948261400d565b915061419f8361400d565b9250826141af576141ae6141e9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f70726f787920636f6e7472616374206e6f7420616c6c6f776564000000000000600082015250565b7f5472616e7366657248656c7065723a205452414e534645525f4641494c454400600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420616c6c6f7720746f2077686974656c697374206d696e740000000000600082015250565b7f554e000000000000000000000000000000000000000000000000000000000000600082015250565b7f696e76616c696420696e7669746520636f646500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f636f6e7472616374206e6f7420616c6c6f776564000000000000000000000000600082015250565b7f696e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b7f6574682073656e64206661696c65640000000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f7720746f2067696674000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f7720746f207075626c6963206d696e740000000000000000600082015250565b7f7175616e74697479206f7574206f662072616e67650000000000000000000000600082015250565b7f746f6f206d616e79207175616e74697479000000000000000000000000000000600082015250565b7f637572726e657420746f6b656e206964206973206e6f7420696e20746869732060008201527f636f6e7472616374000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f6e6f7420696e2077686974656c69737400000000000000000000000000000000600082015250565b7f6e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b61461881613f87565b811461462357600080fd5b50565b61462f81613f99565b811461463a57600080fd5b50565b61464681613fab565b811461465157600080fd5b50565b61465d81613fb7565b811461466857600080fd5b50565b6146748161400d565b811461467f57600080fd5b5056fea2646970667358221220edacb2cb04f5abb768ec108a2823d173b1d80ebadba9dc5e91da25d3800a5fb164736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101e65760003560e01c80638f513fc911610102578063bf6b8c2811610095578063d3d6dc2b11610064578063d3d6dc2b146106bc578063f2fde38b146106f9578063fc1a1c3614610722578063ff7aa51f1461074d576101ed565b8063bf6b8c2814610616578063c627525514610641578063d0b659841461066a578063d0f284c414610693576101ed565b8063aa98e0c6116100d1578063aa98e0c614610568578063b411d22714610593578063b8e0287b146105c4578063bd32fb66146105ed576101ed565b80638f513fc9146104c0578063912db328146104e95780639edcc31014610512578063a945bf801461053d576101ed565b80633ccfd60b1161017a578063717d57d311610149578063717d57d3146103f15780637e097c481461041a5780638c0698b1146104575780638da5cb5b14610495576101ed565b80633ccfd60b1461035b5780635130d73414610372578063543cc622146103af578063715018a6146103da576101ed565b80631b7470e4116101b65780631b7470e4146102af5780631e6904f1146102d85780633710a25a146103095780633aeac4e114610332576101ed565b80622e0ae7146101f2578063106504ed1461021b578063150b7a0214610246578063174609f814610283576101ed565b366101ed57005b600080fd5b3480156101fe57600080fd5b5061021960048036038101906102149190613318565b610778565b005b34801561022757600080fd5b50610230610988565b60405161023d9190613d55565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190613221565b61098e565b60405161027a9190613ac8565b60405180910390f35b34801561028f57600080fd5b506102986109a2565b6040516102a6929190613a69565b60405180910390f35b3480156102bb57600080fd5b506102d660048036038101906102d19190613358565b6109d4565b005b6102f260048036038101906102ed91906132a4565b610c00565b604051610300929190613b05565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b91906133ab565b611409565b005b34801561033e57600080fd5b50610359600480360381019061035491906131e1565b6114a2565b005b34801561036757600080fd5b506103706115bb565b005b34801561037e57600080fd5b5061039960048036038101906103949190613113565b6116e5565b6040516103a69190613d55565b60405180910390f35b3480156103bb57600080fd5b506103c46116fd565b6040516103d19190613980565b60405180910390f35b3480156103e657600080fd5b506103ef611723565b005b3480156103fd57600080fd5b506104186004803603810190610413919061347b565b6117ab565b005b34801561042657600080fd5b50610441600480360381019061043c9190613432565b611831565b60405161044e9190613980565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613113565b61187a565b60405161048c929190613d70565b60405180910390f35b3480156104a157600080fd5b506104aa6119a4565b6040516104b79190613980565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e2919061347b565b6119cd565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613318565b611a53565b005b34801561051e57600080fd5b50610527611b21565b6040516105349190613a92565b60405180910390f35b34801561054957600080fd5b50610552611b34565b60405161055f9190613d55565b60405180910390f35b34801561057457600080fd5b5061057d611b3a565b60405161058a9190613aad565b60405180910390f35b6105ad60048036038101906105a8919061316d565b611b40565b6040516105bb929190613b05565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e6919061347b565b6124c5565b005b3480156105f957600080fd5b50610614600480360381019061060f9190613405565b61254b565b005b34801561062257600080fd5b5061062b6125d1565b6040516106389190613d55565b60405180910390f35b34801561064d57600080fd5b506106686004803603810190610663919061347b565b6125d7565b005b34801561067657600080fd5b50610691600480360381019061068c91906133ab565b61265d565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190613113565b6126f6565b005b3480156106c857600080fd5b506106e360048036038101906106de9190613113565b6127b6565b6040516106f09190613ae3565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b9190613113565b612856565b005b34801561072e57600080fd5b5061073761294e565b6040516107449190613d55565b60405180910390f35b34801561075957600080fd5b50610762612954565b60405161076f9190613a92565b60405180910390f35b610780612967565b73ffffffffffffffffffffffffffffffffffffffff1661079e6119a4565b73ffffffffffffffffffffffffffffffffffffffff16146107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90613bd5565b60405180910390fd5b6000600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161086e9190613d55565b60206040518083038186803b15801561088657600080fd5b505afa15801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190613140565b73ffffffffffffffffffffffffffffffffffffffff1614610914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90613cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3085856040518463ffffffff1660e01b815260040161095193929190613a02565b600060405180830381600087803b15801561096b57600080fd5b505af115801561097f573d6000803e3d6000fd5b50505050505050565b60075481565b600063150b7a0260e01b9050949350505050565b60028060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b6109dc612967565b73ffffffffffffffffffffffffffffffffffffffff166109fa6119a4565b73ffffffffffffffffffffffffffffffffffffffff1614610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4790613bd5565b60405180910390fd5b6000600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b818311610bfa573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401610ad29190613d55565b60206040518083038186803b158015610aea57600080fd5b505afa158015610afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b229190613140565b73ffffffffffffffffffffffffffffffffffffffff1614610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f90613cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3086866040518463ffffffff1660e01b8152600401610bb593929190613a02565b600060405180830381600087803b158015610bcf57600080fd5b505af1158015610be3573d6000803e3d6000fd5b505050508280610bf29061411c565b935050610a7b565b50505050565b60606000610c0d3361296f565b15610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490613bf5565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290613b35565b60405180910390fd5b60026001541415610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890613cf5565b60405180910390fd5b6002600181905550858585600954610d1d848484600954612982565b610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390613d15565b60405180910390fd5b600460149054906101000a900460ff16610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da290613b95565b60405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613c55565b60405180910390fd5b3487600554610e289190613ef9565b14610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90613d35565b60405180910390fd5b60018710158015610e7b57506007548711155b610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190613c95565b60405180910390fd5b60085487600a60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f089190613e72565b1115610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4090613cb5565b60405180910390fd5b600060026001015490505b600088111561117a576000600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e6002600101546040518263ffffffff1660e01b8152600401610fdc9190613d55565b60206040518083038186803b158015610ff457600080fd5b505afa158015611008573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102c9190613140565b73ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd308e6002600101546040518463ffffffff1660e01b81526004016110c493929190613a02565b600060405180830381600087803b1580156110de57600080fd5b505af11580156110f2573d6000803e3d6000fd5b50505050600a60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906111469061411c565b9190505550600260010160008154809291906111619061411c565b91905055505087806111729061408f565b985050610f54565b6000600b60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080546111c6906140b9565b905014156113245760006111d9826129e2565b6040516020016111e9919061395e565b604051602081830303815290604052905080600b60008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020908051906020019061124d929190612e3c565b508b600c8260405161125f9190613947565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc71852ca1865683575331e0b860fc1fe2418d1251a8d9502b8bff2738a942af18c600b60008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405161131a929190613a39565b60405180910390a1505b600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208b818054611370906140b9565b80601f016020809104026020016040519081016040528092919081815260200182805461139c906140b9565b80156113e95780601f106113be576101008083540402835291602001916113e9565b820191906000526020600020905b8154815290600101906020018083116113cc57829003601f168201915b505050505091509650965050505050506001808190555094509492505050565b611411612967565b73ffffffffffffffffffffffffffffffffffffffff1661142f6119a4565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90613bd5565b60405180910390fd5b80600460146101000a81548160ff02191690831515021790555050565b6114aa612967565b73ffffffffffffffffffffffffffffffffffffffff166114c86119a4565b73ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590613bd5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115599190613980565b60206040518083038186803b15801561157157600080fd5b505afa158015611585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a991906134a8565b90506115b6838383612b43565b505050565b6115c3612967565b73ffffffffffffffffffffffffffffffffffffffff166115e16119a4565b73ffffffffffffffffffffffffffffffffffffffff1614611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e90613bd5565b60405180910390fd5b6000471161167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167190613c15565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156116e2573d6000803e3d6000fd5b50565b600a6020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61172b612967565b73ffffffffffffffffffffffffffffffffffffffff166117496119a4565b73ffffffffffffffffffffffffffffffffffffffff161461179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690613bd5565b60405180910390fd5b6117a96000612c79565b565b6117b3612967565b73ffffffffffffffffffffffffffffffffffffffff166117d16119a4565b73ffffffffffffffffffffffffffffffffffffffff1614611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90613bd5565b60405180910390fd5b8060058190555050565b600c818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016118e29190613980565b60206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193291906134a8565b9050600181101561194b5760008193509350505061199f565b6001811015801561195d575060038111155b156119705760018193509350505061199f565b60048110158015611982575060068111155b156119955760028193509350505061199f565b6003819350935050505b915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119d5612967565b73ffffffffffffffffffffffffffffffffffffffff166119f36119a4565b73ffffffffffffffffffffffffffffffffffffffff1614611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090613bd5565b60405180910390fd5b8060078190555050565b611a5b612967565b73ffffffffffffffffffffffffffffffffffffffff16611a796119a4565b73ffffffffffffffffffffffffffffffffffffffff1614611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690613bd5565b60405180910390fd5b81600260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002600101819055505050565b600460159054906101000a900460ff1681565b60065481565b60095481565b60606000611b4d3361296f565b15611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490613bf5565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290613b35565b60405180910390fd5b60026001541415611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613cf5565b60405180910390fd5b6002600181905550600460159054906101000a900460ff16611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613c75565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90613c55565b60405180910390fd5b3483600654611d159190613ef9565b14611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c90613d35565b60405180910390fd5b60018310158015611d6857506007548311155b611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90613c95565b60405180910390fd5b60085483600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df59190613e72565b1115611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90613cb5565b60405180910390fd5b6000600c8686604051611e4a92919061392e565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290613bb5565b60405180910390fd5b6000611ef68261187a565b91505060008114612007576000806001905060008390505b600081118015611f1e5750603283105b15611f64578115611f4157600a83611f369190613e72565b925060009150611f51565b600583611f4e9190613e72565b92505b8080611f5c9061408f565b915050611f0e565b5060008473ffffffffffffffffffffffffffffffffffffffff166108fc611fa785611f99606434612d3d90919063ffffffff16565b612d5390919063ffffffff16565b9081150290604051600060405180830381858888f19350505050905080612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa90613c35565b60405180910390fd5b5050505b600060026001015490505b6000861115612238576000600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e6002600101546040518263ffffffff1660e01b815260040161209a9190613d55565b60206040518083038186803b1580156120b257600080fd5b505afa1580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190613140565b73ffffffffffffffffffffffffffffffffffffffff1614612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213790613cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd308c6002600101546040518463ffffffff1660e01b8152600401612182939291906139cb565b600060405180830381600087803b15801561219c57600080fd5b505af11580156121b0573d6000803e3d6000fd5b50505050600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906122049061411c565b91905055506002600101600081548092919061221f9061411c565b91905055505085806122309061408f565b965050612012565b6000600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054612284906140b9565b905014156123e2576000612297826129e2565b6040516020016122a7919061395e565b604051602081830303815290604052905080600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020908051906020019061230b929190612e3c565b5089600c8260405161231d9190613947565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc71852ca1865683575331e0b860fc1fe2418d1251a8d9502b8bff2738a942af18a600b60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040516123d892919061399b565b60405180910390a1505b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208981805461242e906140b9565b80601f016020809104026020016040519081016040528092919081815260200182805461245a906140b9565b80156124a75780601f1061247c576101008083540402835291602001916124a7565b820191906000526020600020905b81548152906001019060200180831161248a57829003601f168201915b50505050509150945094505050506001808190555094509492505050565b6124cd612967565b73ffffffffffffffffffffffffffffffffffffffff166124eb6119a4565b73ffffffffffffffffffffffffffffffffffffffff1614612541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253890613bd5565b60405180910390fd5b8060088190555050565b612553612967565b73ffffffffffffffffffffffffffffffffffffffff166125716119a4565b73ffffffffffffffffffffffffffffffffffffffff16146125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be90613bd5565b60405180910390fd5b8060098190555050565b60085481565b6125df612967565b73ffffffffffffffffffffffffffffffffffffffff166125fd6119a4565b73ffffffffffffffffffffffffffffffffffffffff1614612653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264a90613bd5565b60405180910390fd5b8060068190555050565b612665612967565b73ffffffffffffffffffffffffffffffffffffffff166126836119a4565b73ffffffffffffffffffffffffffffffffffffffff16146126d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d090613bd5565b60405180910390fd5b80600460156101000a81548160ff02191690831515021790555050565b6126fe612967565b73ffffffffffffffffffffffffffffffffffffffff1661271c6119a4565b73ffffffffffffffffffffffffffffffffffffffff1614612772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276990613bd5565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60205280600052604060002060009150905080546127d5906140b9565b80601f0160208091040260200160405190810160405280929190818152602001828054612801906140b9565b801561284e5780601f106128235761010080835404028352916020019161284e565b820191906000526020600020905b81548152906001019060200180831161283157829003601f168201915b505050505081565b61285e612967565b73ffffffffffffffffffffffffffffffffffffffff1661287c6119a4565b73ffffffffffffffffffffffffffffffffffffffff16146128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c990613bd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990613b75565b60405180910390fd5b61294b81612c79565b50565b60055481565b600460149054906101000a900460ff1681565b600033905090565b600080823b905060008111915050919050565b60006129d8848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050836129d388612d69565b612d99565b9050949350505050565b60606000821415612a2a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b3e565b600082905060005b60008214612a5c578080612a459061411c565b915050600a82612a559190613ec8565b9150612a32565b60008167ffffffffffffffff811115612a7857612a77614276565b5b6040519080825280601f01601f191660200182016040528015612aaa5781602001600182028036833780820191505090505b5090505b60008514612b3757600182612ac39190613f53565b9150600a85612ad29190614189565b6030612ade9190613e72565b60f81b818381518110612af457612af3614247565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b309190613ec8565b9450612aae565b8093505050505b919050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401612b75929190613a69565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612bc39190613917565b6000604051808303816000865af19150503d8060008114612c00576040519150601f19603f3d011682016040523d82523d6000602084013e612c05565b606091505b5091509150818015612c335750600081511480612c32575080806020019051810190612c3191906133d8565b5b5b612c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6990613b55565b60405180910390fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612d4b9190613ec8565b905092915050565b60008183612d619190613ef9565b905092915050565b600081604051602001612d7c91906138fc565b604051602081830303815290604052805190602001209050919050565b600082612da68584612db0565b1490509392505050565b60008082905060005b8451811015612e1a576000858281518110612dd757612dd6614247565b5b60200260200101519050808311612df957612df28382612e25565b9250612e06565b612e038184612e25565b92505b508080612e129061411c565b915050612db9565b508091505092915050565b600082600052816020526040600020905092915050565b828054612e48906140b9565b90600052602060002090601f016020900481019282612e6a5760008555612eb1565b82601f10612e8357805160ff1916838001178555612eb1565b82800160010185558215612eb1579182015b82811115612eb0578251825591602001919060010190612e95565b5b509050612ebe9190612ec2565b5090565b5b80821115612edb576000816000905550600101612ec3565b5090565b6000612ef2612eed84613dbe565b613d99565b905082815260208101848484011115612f0e57612f0d6142b4565b5b612f1984828561404d565b509392505050565b6000612f34612f2f84613def565b613d99565b905082815260208101848484011115612f5057612f4f6142b4565b5b612f5b84828561404d565b509392505050565b600081359050612f728161460f565b92915050565b600081519050612f878161460f565b92915050565b600081359050612f9c81614626565b92915050565b60008083601f840112612fb857612fb76142aa565b5b8235905067ffffffffffffffff811115612fd557612fd46142a5565b5b602083019150836020820283011115612ff157612ff06142af565b5b9250929050565b6000813590506130078161463d565b92915050565b60008151905061301c8161463d565b92915050565b60008135905061303181614654565b92915050565b600082601f83011261304c5761304b6142aa565b5b813561305c848260208601612edf565b91505092915050565b60008083601f84011261307b5761307a6142aa565b5b8235905067ffffffffffffffff811115613098576130976142a5565b5b6020830191508360018202830111156130b4576130b36142af565b5b9250929050565b600082601f8301126130d0576130cf6142aa565b5b81356130e0848260208601612f21565b91505092915050565b6000813590506130f88161466b565b92915050565b60008151905061310d8161466b565b92915050565b600060208284031215613129576131286142be565b5b600061313784828501612f63565b91505092915050565b600060208284031215613156576131556142be565b5b600061316484828501612f78565b91505092915050565b60008060008060608587031215613187576131866142be565b5b600061319587828801612f8d565b945050602085013567ffffffffffffffff8111156131b6576131b56142b9565b5b6131c287828801613065565b935093505060406131d5878288016130e9565b91505092959194509250565b600080604083850312156131f8576131f76142be565b5b600061320685828601612f63565b925050602061321785828601612f63565b9150509250929050565b6000806000806080858703121561323b5761323a6142be565b5b600061324987828801612f63565b945050602061325a87828801612f63565b935050604061326b878288016130e9565b925050606085013567ffffffffffffffff81111561328c5761328b6142b9565b5b61329887828801613037565b91505092959194509250565b600080600080606085870312156132be576132bd6142be565b5b60006132cc87828801612f63565b945050602085013567ffffffffffffffff8111156132ed576132ec6142b9565b5b6132f987828801612fa2565b9350935050604061330c878288016130e9565b91505092959194509250565b6000806040838503121561332f5761332e6142be565b5b600061333d85828601612f63565b925050602061334e858286016130e9565b9150509250929050565b600080600060608486031215613371576133706142be565b5b600061337f86828701612f63565b9350506020613390868287016130e9565b92505060406133a1868287016130e9565b9150509250925092565b6000602082840312156133c1576133c06142be565b5b60006133cf84828501612ff8565b91505092915050565b6000602082840312156133ee576133ed6142be565b5b60006133fc8482850161300d565b91505092915050565b60006020828403121561341b5761341a6142be565b5b600061342984828501613022565b91505092915050565b600060208284031215613448576134476142be565b5b600082013567ffffffffffffffff811115613466576134656142b9565b5b613472848285016130bb565b91505092915050565b600060208284031215613491576134906142be565b5b600061349f848285016130e9565b91505092915050565b6000602082840312156134be576134bd6142be565b5b60006134cc848285016130fe565b91505092915050565b6134de81614017565b82525050565b6134ed81613f87565b82525050565b6135046134ff82613f87565b614165565b82525050565b61351381613fab565b82525050565b61352281613fb7565b82525050565b61353181613fc1565b82525050565b600061354282613e35565b61354c8185613e4b565b935061355c81856020860161405c565b80840191505092915050565b60006135748385613e67565b935061358183858461404d565b82840190509392505050565b600061359882613e40565b6135a28185613e56565b93506135b281856020860161405c565b6135bb816142c3565b840191505092915050565b60006135d182613e40565b6135db8185613e67565b93506135eb81856020860161405c565b80840191505092915050565b60008154613604816140b9565b61360e8186613e56565b94506001821660008114613629576001811461363b5761366e565b60ff198316865260208601935061366e565b61364485613e20565b60005b8381101561366657815481890152600182019150602081019050613647565b808801955050505b50505092915050565b6000613684601a83613e56565b915061368f826142e1565b602082019050919050565b60006136a7601f83613e56565b91506136b28261430a565b602082019050919050565b60006136ca602683613e56565b91506136d582614333565b604082019050919050565b60006136ed601b83613e56565b91506136f882614382565b602082019050919050565b6000613710600283613e67565b915061371b826143ab565b600282019050919050565b6000613733601383613e56565b915061373e826143d4565b602082019050919050565b6000613756602083613e56565b9150613761826143fd565b602082019050919050565b6000613779601483613e56565b915061378482614426565b602082019050919050565b600061379c601483613e56565b91506137a78261444f565b602082019050919050565b60006137bf600f83613e56565b91506137ca82614478565b602082019050919050565b60006137e2601183613e56565b91506137ed826144a1565b602082019050919050565b6000613805601883613e56565b9150613810826144ca565b602082019050919050565b6000613828601583613e56565b9150613833826144f3565b602082019050919050565b600061384b601183613e56565b91506138568261451c565b602082019050919050565b600061386e602883613e56565b915061387982614545565b604082019050919050565b6000613891601f83613e56565b915061389c82614594565b602082019050919050565b60006138b4601083613e56565b91506138bf826145bd565b602082019050919050565b60006138d7601083613e56565b91506138e2826145e6565b602082019050919050565b6138f68161400d565b82525050565b600061390882846134f3565b60148201915081905092915050565b60006139238284613537565b915081905092915050565b600061393b828486613568565b91508190509392505050565b600061395382846135c6565b915081905092915050565b600061396982613703565b915061397582846135c6565b915081905092915050565b600060208201905061399560008301846134e4565b92915050565b60006040820190506139b060008301856134d5565b81810360208301526139c281846135f7565b90509392505050565b60006060820190506139e060008301866134e4565b6139ed60208301856134d5565b6139fa60408301846138ed565b949350505050565b6000606082019050613a1760008301866134e4565b613a2460208301856134e4565b613a3160408301846138ed565b949350505050565b6000604082019050613a4e60008301856134e4565b8181036020830152613a6081846135f7565b90509392505050565b6000604082019050613a7e60008301856134e4565b613a8b60208301846138ed565b9392505050565b6000602082019050613aa7600083018461350a565b92915050565b6000602082019050613ac26000830184613519565b92915050565b6000602082019050613add6000830184613528565b92915050565b60006020820190508181036000830152613afd818461358d565b905092915050565b60006040820190508181036000830152613b1f818561358d565b9050613b2e60208301846134e4565b9392505050565b60006020820190508181036000830152613b4e81613677565b9050919050565b60006020820190508181036000830152613b6e8161369a565b9050919050565b60006020820190508181036000830152613b8e816136bd565b9050919050565b60006020820190508181036000830152613bae816136e0565b9050919050565b60006020820190508181036000830152613bce81613726565b9050919050565b60006020820190508181036000830152613bee81613749565b9050919050565b60006020820190508181036000830152613c0e8161376c565b9050919050565b60006020820190508181036000830152613c2e8161378f565b9050919050565b60006020820190508181036000830152613c4e816137b2565b9050919050565b60006020820190508181036000830152613c6e816137d5565b9050919050565b60006020820190508181036000830152613c8e816137f8565b9050919050565b60006020820190508181036000830152613cae8161381b565b9050919050565b60006020820190508181036000830152613cce8161383e565b9050919050565b60006020820190508181036000830152613cee81613861565b9050919050565b60006020820190508181036000830152613d0e81613884565b9050919050565b60006020820190508181036000830152613d2e816138a7565b9050919050565b60006020820190508181036000830152613d4e816138ca565b9050919050565b6000602082019050613d6a60008301846138ed565b92915050565b6000604082019050613d8560008301856138ed565b613d9260208301846138ed565b9392505050565b6000613da3613db4565b9050613daf82826140eb565b919050565b6000604051905090565b600067ffffffffffffffff821115613dd957613dd8614276565b5b613de2826142c3565b9050602081019050919050565b600067ffffffffffffffff821115613e0a57613e09614276565b5b613e13826142c3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e7d8261400d565b9150613e888361400d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ebd57613ebc6141ba565b5b828201905092915050565b6000613ed38261400d565b9150613ede8361400d565b925082613eee57613eed6141e9565b5b828204905092915050565b6000613f048261400d565b9150613f0f8361400d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f4857613f476141ba565b5b828202905092915050565b6000613f5e8261400d565b9150613f698361400d565b925082821015613f7c57613f7b6141ba565b5b828203905092915050565b6000613f9282613fed565b9050919050565b6000613fa482613fed565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061402282614029565b9050919050565b60006140348261403b565b9050919050565b600061404682613fed565b9050919050565b82818337600083830152505050565b60005b8381101561407a57808201518184015260208101905061405f565b83811115614089576000848401525b50505050565b600061409a8261400d565b915060008214156140ae576140ad6141ba565b5b600182039050919050565b600060028204905060018216806140d157607f821691505b602082108114156140e5576140e4614218565b5b50919050565b6140f4826142c3565b810181811067ffffffffffffffff8211171561411357614112614276565b5b80604052505050565b60006141278261400d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561415a576141596141ba565b5b600182019050919050565b600061417082614177565b9050919050565b6000614182826142d4565b9050919050565b60006141948261400d565b915061419f8361400d565b9250826141af576141ae6141e9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f70726f787920636f6e7472616374206e6f7420616c6c6f776564000000000000600082015250565b7f5472616e7366657248656c7065723a205452414e534645525f4641494c454400600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420616c6c6f7720746f2077686974656c697374206d696e740000000000600082015250565b7f554e000000000000000000000000000000000000000000000000000000000000600082015250565b7f696e76616c696420696e7669746520636f646500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f636f6e7472616374206e6f7420616c6c6f776564000000000000000000000000600082015250565b7f696e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b7f6574682073656e64206661696c65640000000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f7720746f2067696674000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f7720746f207075626c6963206d696e740000000000000000600082015250565b7f7175616e74697479206f7574206f662072616e67650000000000000000000000600082015250565b7f746f6f206d616e79207175616e74697479000000000000000000000000000000600082015250565b7f637572726e657420746f6b656e206964206973206e6f7420696e20746869732060008201527f636f6e7472616374000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f6e6f7420696e2077686974656c69737400000000000000000000000000000000600082015250565b7f6e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b61461881613f87565b811461462357600080fd5b50565b61462f81613f99565b811461463a57600080fd5b50565b61464681613fab565b811461465157600080fd5b50565b61465d81613fb7565b811461466857600080fd5b50565b6146748161400d565b811461467f57600080fd5b5056fea2646970667358221220edacb2cb04f5abb768ec108a2823d173b1d80ebadba9dc5e91da25d3800a5fb164736f6c63430008070033
Deployed Bytecode Sourcemap
28038:10088:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35539:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28472:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34889:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28260:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35886:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30456:1482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;37185:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36362:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35359:172;;;;;;;;;;;;;:::i;:::-;;28596:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28298:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18269:103;;;;;;;;;;;;;:::i;:::-;;37495:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28712:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34241:640;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;17618:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37779:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36768:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28365:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28437:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28555:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31946:2242;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;37959:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37017:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28517:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37643:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37346:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36647:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28650:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18527:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28401:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28328:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35539:339;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35649:18:::1;35681:3;:22;;;;;;;;;;;;35649:55;;35760:4;35724:41;;:7;:15;;;35740:7;35724:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;35715:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;35822:7;:20;;;35851:4;35858:2;35862:7;35822:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35638:240;35539:339:::0;;:::o;28472:37::-;;;;:::o;34889:222::-;35041:6;35073:30;;;35066:37;;34889:222;;;;;;:::o;28260:30::-;;;;;;;;;;;;;;;;;;;;;;;:::o;35886:468::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36032:18:::1;36064:3;:22;;;;;;;;;;;;36032:55;;36098:249;36121:10;36105:12;:26;36098:249;;36216:4;36175:46;;:7;:15;;;36191:12;36175:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;36166:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36282:7;:20;;;36311:4;36318:2;36322:12;36282:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36134:14;;;;;:::i;:::-;;;;36098:249;;;36021:333;35886:468:::0;;;:::o;30456:1482::-;30691:13;30706:7;29687:23;29699:10;29687:11;:23::i;:::-;29686:24;29678:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29768:9;29754:23;;:10;:23;;;29746:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;14716:1:::1;15314:7;;:19;;15306:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14716:1;15447:7;:18;;;;30645:2:::2;30649:5;;30656:19;;29972:44;29984:3;29989:5;;29996:19;;29972:11;:44::i;:::-;29964:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30734:18:::3;;;;;;;;;;;30726:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30818:2;30804:16;;:10;:16;;;30795:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30892:9;30880:8;30863:14;;:25;;;;:::i;:::-;:38;30854:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30954:1;30942:8;:13;;:51;;;;;30971:22;;30959:8;:34;;30942:51;30934:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31065:15;;31053:8;31038;:12;31047:2;31038:12;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;:42;;31030:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;31115:21;31139:3;:18;;;31115:42;;31168:390;31187:1;31176:8;:12;31168:390;;;31219:18;31251:3;:22;;;;;;;;;;;;31219:55;;31345:4;31298:52;;:7;:15;;;31314:3;:18;;;31298:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;31289:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;31411:7;:20;;;31440:4;31447:2;31451:3;:18;;;31411:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;31495:8;:12;31504:2;31495:12;;;;;;;;;;;;;;;;:14;;;;;;;;;:::i;:::-;;;;;;31525:3;:18;;;:20;;;;;;;;;:::i;:::-;;;;;;31204:354;31191:10;;;;;:::i;:::-;;;;31168:390;;;31616:1;31581:19;:23;31601:2;31581:23;;;;;;;;;;;;;;;31575:37;;;;;:::i;:::-;;;:42;31570:312;;;31635:18;31686:31;31703:13;31686:16;:31::i;:::-;31663:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;31635:84;;31760:4;31734:19;:23;31754:2;31734:23;;;;;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;31807:2;31779:19;31799:4;31779:25;;;;;;:::i;:::-;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31829:41;31841:2;31845:19;:23;31865:2;31845:23;;;;;;;;;;;;;;;31829:41;;;;;;;:::i;:::-;;;;;;;;31620:262;31570:312;31902:19;:23;31922:2;31902:23;;;;;;;;;;;;;;;31927:2;31894:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15478:1:::2;;;;14672::::1;15626:7:::0;:22:::1;;;;30456:1482:::0;;;;;;;:::o;37185:153::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37309:21:::1;37288:18;;:42;;;;;;;;;;;;;;;;;;37185:153:::0;:::o;36362:237::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36467:20:::1;36497:5;36490:23;;;36522:4;36490:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36467:61;;36539:52;36567:5;36574:2;36578:12;36539:27;:52::i;:::-;36456:143;36362:237:::0;;:::o;35359:172::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35439:1:::1;35415:21;:25;35407:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35484:6;;;;;;;;;;;35476:24;;:47;35501:21;35476:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35359:172::o:0;28596:45::-;;;;;;;;;;;;;;;;;:::o;28298:21::-;;;;;;;;;;;;;:::o;18269:103::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18334:30:::1;18361:1;18334:18;:30::i;:::-;18269:103::o:0;37495:140::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37610:17:::1;37593:14;:34;;;;37495:140:::0;:::o;28712:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34241:640::-;34326:7;34335;34355:18;34387:3;:22;;;;;;;;;;;;34355:55;;34421:19;34443:7;:17;;;34461:6;34443:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34421:47;;34501:1;34484:14;:18;34479:395;;;34529:1;34532:14;34520:28;;;;;;;;34479:395;34599:1;34581:14;:19;;:42;;;;;34622:1;34604:14;:19;;34581:42;34576:298;;;34650:1;34653:14;34641:28;;;;;;;;34576:298;34720:1;34702:14;:19;;:42;;;;;34743:1;34725:14;:19;;34702:42;34697:177;;;34771:1;34774:14;34762:28;;;;;;;;34697:177;34842:1;34845:14;34833:28;;;;;;34241:640;;;;:::o;17618:87::-;17664:7;17691:6;;;;;;;;;;;17684:13;;17618:87;:::o;37779:172::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37918:25:::1;37893:22;:50;;;;37779:172:::0;:::o;36768:241::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36931:21:::1;36906:3;:22;;;:46;;;;;;;;;;;;;;;;;;36984:17;36963:3;:18;;:38;;;;36768:241:::0;;:::o;28365:27::-;;;;;;;;;;;;;:::o;28437:26::-;;;;:::o;28555:34::-;;;;:::o;31946:2242::-;32133:13;32148:7;29687:23;29699:10;29687:11;:23::i;:::-;29686:24;29678:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29768:9;29754:23;;:10;:23;;;29746:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;14716:1:::1;15314:7;;:19;;15306:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14716:1;15447:7;:18;;;;32176:15:::2;;;;;;;;;;;32168:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;32254:2;32240:16;;:10;:16;;;32231:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;32325:9;32313:8;32299:11;;:22;;;;:::i;:::-;:35;32290:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32387:1;32375:8;:13;;:51;;;;;32404:22;;32392:8;:34;;32375:51;32367:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32498:15;;32486:8;32471;:12;32480:2;32471:12;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;:42;;32463:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32548:22;32573:19;32593:6;;32573:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32548:52;;32649:1;32623:28;;:14;:28;;;;32614:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32692:25;32721:32;32738:14;32721:16;:32::i;:::-;32689:64;;;32792:1;32771:17;:22;32766:587;;32811:18;32849:10:::0;32862:4:::2;32849:17;;32888:9;32900:17;32888:29;;32882:320;32924:1;32920;:5;:24;;;;;32942:2;32929:10;:15;32920:24;32882:320;;;32977:5;32972:215;;;33034:2;33021:10;:15;;;;:::i;:::-;33008:28;;33068:5;33060:13;;32972:215;;;33165:1;33152:10;:14;;;;:::i;:::-;33139:27;;32972:215;32947:3;;;;;:::i;:::-;;;;32882:320;;;;33218:9;33238:14;33230:28;;:64;33259:34;33282:10;33259:18;33273:3;33259:9;:13;;:18;;;;:::i;:::-;:22;;:34;;;;:::i;:::-;33230:64;;;;;;;;;;;;;;;;;;;;;;;33218:76;;33317:4;33309:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;32796:557;;;32766:587;33365:21;33389:3;:18;;;33365:42;;33418:390;33437:1;33426:8;:12;33418:390;;;33469:18;33501:3;:22;;;;;;;;;;;;33469:55;;33595:4;33548:52;;:7;:15;;;33564:3;:18;;;33548:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;33539:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;33661:7;:20;;;33690:4;33697:2;33701:3;:18;;;33661:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;33745:8;:12;33754:2;33745:12;;;;;;;;;;;;;;;;:14;;;;;;;;;:::i;:::-;;;;;;33775:3;:18;;;:20;;;;;;;;;:::i;:::-;;;;;;33454:354;33441:10;;;;;:::i;:::-;;;;33418:390;;;33866:1;33831:19;:23;33851:2;33831:23;;;;;;;;;;;;;;;33825:37;;;;;:::i;:::-;;;:42;33820:312;;;33885:18;33936:31;33953:13;33936:16;:31::i;:::-;33913:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;33885:84;;34010:4;33984:19;:23;34004:2;33984:23;;;;;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;34057:2;34029:19;34049:4;34029:25;;;;;;:::i;:::-;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;34079:41;34091:2;34095:19;:23;34115:2;34095:23;;;;;;;;;;;;;;;34079:41;;;;;;;:::i;:::-;;;;;;;;33870:262;33820:312;34152:19;:23;34172:2;34152:23;;;;;;;;;;;;;;;34177:2;34144:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14672:1:::1;15626:7:::0;:22:::1;;;;31946:2242:::0;;;;;;;:::o;37959:144::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38077:18:::1;38059:15;:36;;;;37959:144:::0;:::o;37017:160::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37147:22:::1;37125:19;:44;;;;37017:160:::0;:::o;28517:30::-;;;;:::o;37643:128::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37749:14:::1;37735:11;:28;;;;37643:128:::0;:::o;37346:141::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37461:18:::1;37443:15;;:36;;;;;;;;;;;;;;;;;;37346:141:::0;:::o;36647:113::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36743:9:::1;36734:6;;:18;;;;;;;;;;;;;;;;;;36647:113:::0;:::o;28650:55::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18527:201::-;17849:12;:10;:12::i;:::-;17838:23;;:7;:5;:7::i;:::-;:23;;;17830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18636:1:::1;18616:22;;:8;:22;;;;18608:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18692:28;18711:8;18692:18;:28::i;:::-;18527:201:::0;:::o;28401:29::-;;;;:::o;28328:30::-;;;;;;;;;;;;;:::o;16342:98::-;16395:7;16422:10;16415:17;;16342:98;:::o;35123:190::-;35204:4;35221:9;35272:5;35260:18;35252:26;;35304:1;35297:4;:8;35290:15;;;35123:190;;;:::o;30243:205::-;30374:4;30398:42;30417:5;;30398:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30424:4;30430:9;30435:3;30430:4;:9::i;:::-;30398:18;:42::i;:::-;30391:49;;30243:205;;;;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;19187:361::-;19336:12;19350:17;19371:5;:10;;19405;19417:2;19421:5;19382:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19371:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19335:93;;;;19447:7;:57;;;;;19474:1;19459:4;:11;:16;:44;;;;19490:4;19479:24;;;;;;;;;;;;:::i;:::-;19459:44;19447:57;19439:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;19257:291;;19187:361;;;:::o;18888:191::-;18962:16;18981:6;;;;;;;;;;;18962:25;;19007:8;18998:6;;:17;;;;;;;;;;;;;;;;;;19062:8;19031:40;;19052:8;19031:40;;;;;;;;;;;;18951:128;18888:191;:::o;8822:98::-;8880:7;8911:1;8907;:5;;;;:::i;:::-;8900:12;;8822:98;;;;:::o;8423:::-;8481:7;8512:1;8508;:5;;;;:::i;:::-;8501:12;;8423:98;;;;:::o;30092:143::-;30163:7;30217:8;30200:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;30190:37;;;;;;30183:44;;30092:143;;;:::o;3344:190::-;3469:4;3522;3493:25;3506:5;3513:4;3493:12;:25::i;:::-;:33;3486:40;;3344:190;;;;;:::o;3895:675::-;3978:7;3998:20;4021:4;3998:27;;4041:9;4036:497;4060:5;:12;4056:1;:16;4036:497;;;4094:20;4117:5;4123:1;4117:8;;;;;;;;:::i;:::-;;;;;;;;4094:31;;4160:12;4144;:28;4140:382;;4287:42;4302:12;4316;4287:14;:42::i;:::-;4272:57;;4140:382;;;4464:42;4479:12;4493;4464:14;:42::i;:::-;4449:57;;4140:382;4079:454;4074:3;;;;;:::i;:::-;;;;4036:497;;;;4550:12;4543:19;;;3895:675;;;;:::o;4578:224::-;4646:13;4709:1;4703:4;4696:15;4738:1;4732:4;4725:15;4779:4;4773;4763:21;4754:30;;4578:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1135:155::-;1189:5;1227:6;1214:20;1205:29;;1243:41;1278:5;1243:41;:::i;:::-;1135:155;;;;:::o;1313:568::-;1386:8;1396:6;1446:3;1439:4;1431:6;1427:17;1423:27;1413:122;;1454:79;;:::i;:::-;1413:122;1567:6;1554:20;1544:30;;1597:18;1589:6;1586:30;1583:117;;;1619:79;;:::i;:::-;1583:117;1733:4;1725:6;1721:17;1709:29;;1787:3;1779:4;1771:6;1767:17;1757:8;1753:32;1750:41;1747:128;;;1794:79;;:::i;:::-;1747:128;1313:568;;;;;:::o;1887:133::-;1930:5;1968:6;1955:20;1946:29;;1984:30;2008:5;1984:30;:::i;:::-;1887:133;;;;:::o;2026:137::-;2080:5;2111:6;2105:13;2096:22;;2127:30;2151:5;2127:30;:::i;:::-;2026:137;;;;:::o;2169:139::-;2215:5;2253:6;2240:20;2231:29;;2269:33;2296:5;2269:33;:::i;:::-;2169:139;;;;:::o;2327:338::-;2382:5;2431:3;2424:4;2416:6;2412:17;2408:27;2398:122;;2439:79;;:::i;:::-;2398:122;2556:6;2543:20;2581:78;2655:3;2647:6;2640:4;2632:6;2628:17;2581:78;:::i;:::-;2572:87;;2388:277;2327:338;;;;:::o;2685:553::-;2743:8;2753:6;2803:3;2796:4;2788:6;2784:17;2780:27;2770:122;;2811:79;;:::i;:::-;2770:122;2924:6;2911:20;2901:30;;2954:18;2946:6;2943:30;2940:117;;;2976:79;;:::i;:::-;2940:117;3090:4;3082:6;3078:17;3066:29;;3144:3;3136:4;3128:6;3124:17;3114:8;3110:32;3107:41;3104:128;;;3151:79;;:::i;:::-;3104:128;2685:553;;;;;:::o;3258:340::-;3314:5;3363:3;3356:4;3348:6;3344:17;3340:27;3330:122;;3371:79;;:::i;:::-;3330:122;3488:6;3475:20;3513:79;3588:3;3580:6;3573:4;3565:6;3561:17;3513:79;:::i;:::-;3504:88;;3320:278;3258:340;;;;:::o;3604:139::-;3650:5;3688:6;3675:20;3666:29;;3704:33;3731:5;3704:33;:::i;:::-;3604:139;;;;:::o;3749:143::-;3806:5;3837:6;3831:13;3822:22;;3853:33;3880:5;3853:33;:::i;:::-;3749:143;;;;:::o;3898:329::-;3957:6;4006:2;3994:9;3985:7;3981:23;3977:32;3974:119;;;4012:79;;:::i;:::-;3974:119;4132:1;4157:53;4202:7;4193:6;4182:9;4178:22;4157:53;:::i;:::-;4147:63;;4103:117;3898:329;;;;:::o;4233:351::-;4303:6;4352:2;4340:9;4331:7;4327:23;4323:32;4320:119;;;4358:79;;:::i;:::-;4320:119;4478:1;4503:64;4559:7;4550:6;4539:9;4535:22;4503:64;:::i;:::-;4493:74;;4449:128;4233:351;;;;:::o;4590:835::-;4687:6;4695;4703;4711;4760:2;4748:9;4739:7;4735:23;4731:32;4728:119;;;4766:79;;:::i;:::-;4728:119;4886:1;4911:61;4964:7;4955:6;4944:9;4940:22;4911:61;:::i;:::-;4901:71;;4857:125;5049:2;5038:9;5034:18;5021:32;5080:18;5072:6;5069:30;5066:117;;;5102:79;;:::i;:::-;5066:117;5215:65;5272:7;5263:6;5252:9;5248:22;5215:65;:::i;:::-;5197:83;;;;4992:298;5329:2;5355:53;5400:7;5391:6;5380:9;5376:22;5355:53;:::i;:::-;5345:63;;5300:118;4590:835;;;;;;;:::o;5431:474::-;5499:6;5507;5556:2;5544:9;5535:7;5531:23;5527:32;5524:119;;;5562:79;;:::i;:::-;5524:119;5682:1;5707:53;5752:7;5743:6;5732:9;5728:22;5707:53;:::i;:::-;5697:63;;5653:117;5809:2;5835:53;5880:7;5871:6;5860:9;5856:22;5835:53;:::i;:::-;5825:63;;5780:118;5431:474;;;;;:::o;5911:943::-;6006:6;6014;6022;6030;6079:3;6067:9;6058:7;6054:23;6050:33;6047:120;;;6086:79;;:::i;:::-;6047:120;6206:1;6231:53;6276:7;6267:6;6256:9;6252:22;6231:53;:::i;:::-;6221:63;;6177:117;6333:2;6359:53;6404:7;6395:6;6384:9;6380:22;6359:53;:::i;:::-;6349:63;;6304:118;6461:2;6487:53;6532:7;6523:6;6512:9;6508:22;6487:53;:::i;:::-;6477:63;;6432:118;6617:2;6606:9;6602:18;6589:32;6648:18;6640:6;6637:30;6634:117;;;6670:79;;:::i;:::-;6634:117;6775:62;6829:7;6820:6;6809:9;6805:22;6775:62;:::i;:::-;6765:72;;6560:287;5911:943;;;;;;;:::o;6860:849::-;6964:6;6972;6980;6988;7037:2;7025:9;7016:7;7012:23;7008:32;7005:119;;;7043:79;;:::i;:::-;7005:119;7163:1;7188:53;7233:7;7224:6;7213:9;7209:22;7188:53;:::i;:::-;7178:63;;7134:117;7318:2;7307:9;7303:18;7290:32;7349:18;7341:6;7338:30;7335:117;;;7371:79;;:::i;:::-;7335:117;7484:80;7556:7;7547:6;7536:9;7532:22;7484:80;:::i;:::-;7466:98;;;;7261:313;7613:2;7639:53;7684:7;7675:6;7664:9;7660:22;7639:53;:::i;:::-;7629:63;;7584:118;6860:849;;;;;;;:::o;7715:474::-;7783:6;7791;7840:2;7828:9;7819:7;7815:23;7811:32;7808:119;;;7846:79;;:::i;:::-;7808:119;7966:1;7991:53;8036:7;8027:6;8016:9;8012:22;7991:53;:::i;:::-;7981:63;;7937:117;8093:2;8119:53;8164:7;8155:6;8144:9;8140:22;8119:53;:::i;:::-;8109:63;;8064:118;7715:474;;;;;:::o;8195:619::-;8272:6;8280;8288;8337:2;8325:9;8316:7;8312:23;8308:32;8305:119;;;8343:79;;:::i;:::-;8305:119;8463:1;8488:53;8533:7;8524:6;8513:9;8509:22;8488:53;:::i;:::-;8478:63;;8434:117;8590:2;8616:53;8661:7;8652:6;8641:9;8637:22;8616:53;:::i;:::-;8606:63;;8561:118;8718:2;8744:53;8789:7;8780:6;8769:9;8765:22;8744:53;:::i;:::-;8734:63;;8689:118;8195:619;;;;;:::o;8820:323::-;8876:6;8925:2;8913:9;8904:7;8900:23;8896:32;8893:119;;;8931:79;;:::i;:::-;8893:119;9051:1;9076:50;9118:7;9109:6;9098:9;9094:22;9076:50;:::i;:::-;9066:60;;9022:114;8820:323;;;;:::o;9149:345::-;9216:6;9265:2;9253:9;9244:7;9240:23;9236:32;9233:119;;;9271:79;;:::i;:::-;9233:119;9391:1;9416:61;9469:7;9460:6;9449:9;9445:22;9416:61;:::i;:::-;9406:71;;9362:125;9149:345;;;;:::o;9500:329::-;9559:6;9608:2;9596:9;9587:7;9583:23;9579:32;9576:119;;;9614:79;;:::i;:::-;9576:119;9734:1;9759:53;9804:7;9795:6;9784:9;9780:22;9759:53;:::i;:::-;9749:63;;9705:117;9500:329;;;;:::o;9835:509::-;9904:6;9953:2;9941:9;9932:7;9928:23;9924:32;9921:119;;;9959:79;;:::i;:::-;9921:119;10107:1;10096:9;10092:17;10079:31;10137:18;10129:6;10126:30;10123:117;;;10159:79;;:::i;:::-;10123:117;10264:63;10319:7;10310:6;10299:9;10295:22;10264:63;:::i;:::-;10254:73;;10050:287;9835:509;;;;:::o;10350:329::-;10409:6;10458:2;10446:9;10437:7;10433:23;10429:32;10426:119;;;10464:79;;:::i;:::-;10426:119;10584:1;10609:53;10654:7;10645:6;10634:9;10630:22;10609:53;:::i;:::-;10599:63;;10555:117;10350:329;;;;:::o;10685:351::-;10755:6;10804:2;10792:9;10783:7;10779:23;10775:32;10772:119;;;10810:79;;:::i;:::-;10772:119;10930:1;10955:64;11011:7;11002:6;10991:9;10987:22;10955:64;:::i;:::-;10945:74;;10901:128;10685:351;;;;:::o;11042:147::-;11137:45;11176:5;11137:45;:::i;:::-;11132:3;11125:58;11042:147;;:::o;11195:118::-;11282:24;11300:5;11282:24;:::i;:::-;11277:3;11270:37;11195:118;;:::o;11319:157::-;11424:45;11444:24;11462:5;11444:24;:::i;:::-;11424:45;:::i;:::-;11419:3;11412:58;11319:157;;:::o;11482:109::-;11563:21;11578:5;11563:21;:::i;:::-;11558:3;11551:34;11482:109;;:::o;11597:118::-;11684:24;11702:5;11684:24;:::i;:::-;11679:3;11672:37;11597:118;;:::o;11721:115::-;11806:23;11823:5;11806:23;:::i;:::-;11801:3;11794:36;11721:115;;:::o;11842:373::-;11946:3;11974:38;12006:5;11974:38;:::i;:::-;12028:88;12109:6;12104:3;12028:88;:::i;:::-;12021:95;;12125:52;12170:6;12165:3;12158:4;12151:5;12147:16;12125:52;:::i;:::-;12202:6;12197:3;12193:16;12186:23;;11950:265;11842:373;;;;:::o;12245:317::-;12361:3;12382:89;12464:6;12459:3;12382:89;:::i;:::-;12375:96;;12481:43;12517:6;12512:3;12505:5;12481:43;:::i;:::-;12549:6;12544:3;12540:16;12533:23;;12245:317;;;;;:::o;12568:364::-;12656:3;12684:39;12717:5;12684:39;:::i;:::-;12739:71;12803:6;12798:3;12739:71;:::i;:::-;12732:78;;12819:52;12864:6;12859:3;12852:4;12845:5;12841:16;12819:52;:::i;:::-;12896:29;12918:6;12896:29;:::i;:::-;12891:3;12887:39;12880:46;;12660:272;12568:364;;;;:::o;12938:377::-;13044:3;13072:39;13105:5;13072:39;:::i;:::-;13127:89;13209:6;13204:3;13127:89;:::i;:::-;13120:96;;13225:52;13270:6;13265:3;13258:4;13251:5;13247:16;13225:52;:::i;:::-;13302:6;13297:3;13293:16;13286:23;;13048:267;12938:377;;;;:::o;13345:802::-;13430:3;13467:5;13461:12;13496:36;13522:9;13496:36;:::i;:::-;13548:71;13612:6;13607:3;13548:71;:::i;:::-;13541:78;;13650:1;13639:9;13635:17;13666:1;13661:135;;;;13810:1;13805:336;;;;13628:513;;13661:135;13745:4;13741:9;13730;13726:25;13721:3;13714:38;13781:4;13776:3;13772:14;13765:21;;13661:135;;13805:336;13872:38;13904:5;13872:38;:::i;:::-;13932:1;13946:154;13960:6;13957:1;13954:13;13946:154;;;14034:7;14028:14;14024:1;14019:3;14015:11;14008:35;14084:1;14075:7;14071:15;14060:26;;13982:4;13979:1;13975:12;13970:17;;13946:154;;;14129:1;14124:3;14120:11;14113:18;;13812:329;;13628:513;;13434:713;;13345:802;;;;:::o;14153:366::-;14295:3;14316:67;14380:2;14375:3;14316:67;:::i;:::-;14309:74;;14392:93;14481:3;14392:93;:::i;:::-;14510:2;14505:3;14501:12;14494:19;;14153:366;;;:::o;14525:::-;14667:3;14688:67;14752:2;14747:3;14688:67;:::i;:::-;14681:74;;14764:93;14853:3;14764:93;:::i;:::-;14882:2;14877:3;14873:12;14866:19;;14525:366;;;:::o;14897:::-;15039:3;15060:67;15124:2;15119:3;15060:67;:::i;:::-;15053:74;;15136:93;15225:3;15136:93;:::i;:::-;15254:2;15249:3;15245:12;15238:19;;14897:366;;;:::o;15269:::-;15411:3;15432:67;15496:2;15491:3;15432:67;:::i;:::-;15425:74;;15508:93;15597:3;15508:93;:::i;:::-;15626:2;15621:3;15617:12;15610:19;;15269:366;;;:::o;15641:400::-;15801:3;15822:84;15904:1;15899:3;15822:84;:::i;:::-;15815:91;;15915:93;16004:3;15915:93;:::i;:::-;16033:1;16028:3;16024:11;16017:18;;15641:400;;;:::o;16047:366::-;16189:3;16210:67;16274:2;16269:3;16210:67;:::i;:::-;16203:74;;16286:93;16375:3;16286:93;:::i;:::-;16404:2;16399:3;16395:12;16388:19;;16047:366;;;:::o;16419:::-;16561:3;16582:67;16646:2;16641:3;16582:67;:::i;:::-;16575:74;;16658:93;16747:3;16658:93;:::i;:::-;16776:2;16771:3;16767:12;16760:19;;16419:366;;;:::o;16791:::-;16933:3;16954:67;17018:2;17013:3;16954:67;:::i;:::-;16947:74;;17030:93;17119:3;17030:93;:::i;:::-;17148:2;17143:3;17139:12;17132:19;;16791:366;;;:::o;17163:::-;17305:3;17326:67;17390:2;17385:3;17326:67;:::i;:::-;17319:74;;17402:93;17491:3;17402:93;:::i;:::-;17520:2;17515:3;17511:12;17504:19;;17163:366;;;:::o;17535:::-;17677:3;17698:67;17762:2;17757:3;17698:67;:::i;:::-;17691:74;;17774:93;17863:3;17774:93;:::i;:::-;17892:2;17887:3;17883:12;17876:19;;17535:366;;;:::o;17907:::-;18049:3;18070:67;18134:2;18129:3;18070:67;:::i;:::-;18063:74;;18146:93;18235:3;18146:93;:::i;:::-;18264:2;18259:3;18255:12;18248:19;;17907:366;;;:::o;18279:::-;18421:3;18442:67;18506:2;18501:3;18442:67;:::i;:::-;18435:74;;18518:93;18607:3;18518:93;:::i;:::-;18636:2;18631:3;18627:12;18620:19;;18279:366;;;:::o;18651:::-;18793:3;18814:67;18878:2;18873:3;18814:67;:::i;:::-;18807:74;;18890:93;18979:3;18890:93;:::i;:::-;19008:2;19003:3;18999:12;18992:19;;18651:366;;;:::o;19023:::-;19165:3;19186:67;19250:2;19245:3;19186:67;:::i;:::-;19179:74;;19262:93;19351:3;19262:93;:::i;:::-;19380:2;19375:3;19371:12;19364:19;;19023:366;;;:::o;19395:::-;19537:3;19558:67;19622:2;19617:3;19558:67;:::i;:::-;19551:74;;19634:93;19723:3;19634:93;:::i;:::-;19752:2;19747:3;19743:12;19736:19;;19395:366;;;:::o;19767:::-;19909:3;19930:67;19994:2;19989:3;19930:67;:::i;:::-;19923:74;;20006:93;20095:3;20006:93;:::i;:::-;20124:2;20119:3;20115:12;20108:19;;19767:366;;;:::o;20139:::-;20281:3;20302:67;20366:2;20361:3;20302:67;:::i;:::-;20295:74;;20378:93;20467:3;20378:93;:::i;:::-;20496:2;20491:3;20487:12;20480:19;;20139:366;;;:::o;20511:::-;20653:3;20674:67;20738:2;20733:3;20674:67;:::i;:::-;20667:74;;20750:93;20839:3;20750:93;:::i;:::-;20868:2;20863:3;20859:12;20852:19;;20511:366;;;:::o;20883:118::-;20970:24;20988:5;20970:24;:::i;:::-;20965:3;20958:37;20883:118;;:::o;21007:256::-;21119:3;21134:75;21205:3;21196:6;21134:75;:::i;:::-;21234:2;21229:3;21225:12;21218:19;;21254:3;21247:10;;21007:256;;;;:::o;21269:271::-;21399:3;21421:93;21510:3;21501:6;21421:93;:::i;:::-;21414:100;;21531:3;21524:10;;21269:271;;;;:::o;21546:295::-;21688:3;21710:105;21811:3;21802:6;21794;21710:105;:::i;:::-;21703:112;;21832:3;21825:10;;21546:295;;;;;:::o;21847:275::-;21979:3;22001:95;22092:3;22083:6;22001:95;:::i;:::-;21994:102;;22113:3;22106:10;;21847:275;;;;:::o;22128:541::-;22361:3;22383:148;22527:3;22383:148;:::i;:::-;22376:155;;22548:95;22639:3;22630:6;22548:95;:::i;:::-;22541:102;;22660:3;22653:10;;22128:541;;;;:::o;22675:222::-;22768:4;22806:2;22795:9;22791:18;22783:26;;22819:71;22887:1;22876:9;22872:17;22863:6;22819:71;:::i;:::-;22675:222;;;;:::o;22903:433::-;23049:4;23087:2;23076:9;23072:18;23064:26;;23100:79;23176:1;23165:9;23161:17;23152:6;23100:79;:::i;:::-;23226:9;23220:4;23216:20;23211:2;23200:9;23196:18;23189:48;23254:75;23324:4;23315:6;23254:75;:::i;:::-;23246:83;;22903:433;;;;;:::o;23342:458::-;23499:4;23537:2;23526:9;23522:18;23514:26;;23550:71;23618:1;23607:9;23603:17;23594:6;23550:71;:::i;:::-;23631:80;23707:2;23696:9;23692:18;23683:6;23631:80;:::i;:::-;23721:72;23789:2;23778:9;23774:18;23765:6;23721:72;:::i;:::-;23342:458;;;;;;:::o;23806:442::-;23955:4;23993:2;23982:9;23978:18;23970:26;;24006:71;24074:1;24063:9;24059:17;24050:6;24006:71;:::i;:::-;24087:72;24155:2;24144:9;24140:18;24131:6;24087:72;:::i;:::-;24169;24237:2;24226:9;24222:18;24213:6;24169:72;:::i;:::-;23806:442;;;;;;:::o;24254:417::-;24392:4;24430:2;24419:9;24415:18;24407:26;;24443:71;24511:1;24500:9;24496:17;24487:6;24443:71;:::i;:::-;24561:9;24555:4;24551:20;24546:2;24535:9;24531:18;24524:48;24589:75;24659:4;24650:6;24589:75;:::i;:::-;24581:83;;24254:417;;;;;:::o;24677:332::-;24798:4;24836:2;24825:9;24821:18;24813:26;;24849:71;24917:1;24906:9;24902:17;24893:6;24849:71;:::i;:::-;24930:72;24998:2;24987:9;24983:18;24974:6;24930:72;:::i;:::-;24677:332;;;;;:::o;25015:210::-;25102:4;25140:2;25129:9;25125:18;25117:26;;25153:65;25215:1;25204:9;25200:17;25191:6;25153:65;:::i;:::-;25015:210;;;;:::o;25231:222::-;25324:4;25362:2;25351:9;25347:18;25339:26;;25375:71;25443:1;25432:9;25428:17;25419:6;25375:71;:::i;:::-;25231:222;;;;:::o;25459:218::-;25550:4;25588:2;25577:9;25573:18;25565:26;;25601:69;25667:1;25656:9;25652:17;25643:6;25601:69;:::i;:::-;25459:218;;;;:::o;25683:313::-;25796:4;25834:2;25823:9;25819:18;25811:26;;25883:9;25877:4;25873:20;25869:1;25858:9;25854:17;25847:47;25911:78;25984:4;25975:6;25911:78;:::i;:::-;25903:86;;25683:313;;;;:::o;26002:423::-;26143:4;26181:2;26170:9;26166:18;26158:26;;26230:9;26224:4;26220:20;26216:1;26205:9;26201:17;26194:47;26258:78;26331:4;26322:6;26258:78;:::i;:::-;26250:86;;26346:72;26414:2;26403:9;26399:18;26390:6;26346:72;:::i;:::-;26002:423;;;;;:::o;26431:419::-;26597:4;26635:2;26624:9;26620:18;26612:26;;26684:9;26678:4;26674:20;26670:1;26659:9;26655:17;26648:47;26712:131;26838:4;26712:131;:::i;:::-;26704:139;;26431:419;;;:::o;26856:::-;27022:4;27060:2;27049:9;27045:18;27037:26;;27109:9;27103:4;27099:20;27095:1;27084:9;27080:17;27073:47;27137:131;27263:4;27137:131;:::i;:::-;27129:139;;26856:419;;;:::o;27281:::-;27447:4;27485:2;27474:9;27470:18;27462:26;;27534:9;27528:4;27524:20;27520:1;27509:9;27505:17;27498:47;27562:131;27688:4;27562:131;:::i;:::-;27554:139;;27281:419;;;:::o;27706:::-;27872:4;27910:2;27899:9;27895:18;27887:26;;27959:9;27953:4;27949:20;27945:1;27934:9;27930:17;27923:47;27987:131;28113:4;27987:131;:::i;:::-;27979:139;;27706:419;;;:::o;28131:::-;28297:4;28335:2;28324:9;28320:18;28312:26;;28384:9;28378:4;28374:20;28370:1;28359:9;28355:17;28348:47;28412:131;28538:4;28412:131;:::i;:::-;28404:139;;28131:419;;;:::o;28556:::-;28722:4;28760:2;28749:9;28745:18;28737:26;;28809:9;28803:4;28799:20;28795:1;28784:9;28780:17;28773:47;28837:131;28963:4;28837:131;:::i;:::-;28829:139;;28556:419;;;:::o;28981:::-;29147:4;29185:2;29174:9;29170:18;29162:26;;29234:9;29228:4;29224:20;29220:1;29209:9;29205:17;29198:47;29262:131;29388:4;29262:131;:::i;:::-;29254:139;;28981:419;;;:::o;29406:::-;29572:4;29610:2;29599:9;29595:18;29587:26;;29659:9;29653:4;29649:20;29645:1;29634:9;29630:17;29623:47;29687:131;29813:4;29687:131;:::i;:::-;29679:139;;29406:419;;;:::o;29831:::-;29997:4;30035:2;30024:9;30020:18;30012:26;;30084:9;30078:4;30074:20;30070:1;30059:9;30055:17;30048:47;30112:131;30238:4;30112:131;:::i;:::-;30104:139;;29831:419;;;:::o;30256:::-;30422:4;30460:2;30449:9;30445:18;30437:26;;30509:9;30503:4;30499:20;30495:1;30484:9;30480:17;30473:47;30537:131;30663:4;30537:131;:::i;:::-;30529:139;;30256:419;;;:::o;30681:::-;30847:4;30885:2;30874:9;30870:18;30862:26;;30934:9;30928:4;30924:20;30920:1;30909:9;30905:17;30898:47;30962:131;31088:4;30962:131;:::i;:::-;30954:139;;30681:419;;;:::o;31106:::-;31272:4;31310:2;31299:9;31295:18;31287:26;;31359:9;31353:4;31349:20;31345:1;31334:9;31330:17;31323:47;31387:131;31513:4;31387:131;:::i;:::-;31379:139;;31106:419;;;:::o;31531:::-;31697:4;31735:2;31724:9;31720:18;31712:26;;31784:9;31778:4;31774:20;31770:1;31759:9;31755:17;31748:47;31812:131;31938:4;31812:131;:::i;:::-;31804:139;;31531:419;;;:::o;31956:::-;32122:4;32160:2;32149:9;32145:18;32137:26;;32209:9;32203:4;32199:20;32195:1;32184:9;32180:17;32173:47;32237:131;32363:4;32237:131;:::i;:::-;32229:139;;31956:419;;;:::o;32381:::-;32547:4;32585:2;32574:9;32570:18;32562:26;;32634:9;32628:4;32624:20;32620:1;32609:9;32605:17;32598:47;32662:131;32788:4;32662:131;:::i;:::-;32654:139;;32381:419;;;:::o;32806:::-;32972:4;33010:2;32999:9;32995:18;32987:26;;33059:9;33053:4;33049:20;33045:1;33034:9;33030:17;33023:47;33087:131;33213:4;33087:131;:::i;:::-;33079:139;;32806:419;;;:::o;33231:::-;33397:4;33435:2;33424:9;33420:18;33412:26;;33484:9;33478:4;33474:20;33470:1;33459:9;33455:17;33448:47;33512:131;33638:4;33512:131;:::i;:::-;33504:139;;33231:419;;;:::o;33656:222::-;33749:4;33787:2;33776:9;33772:18;33764:26;;33800:71;33868:1;33857:9;33853:17;33844:6;33800:71;:::i;:::-;33656:222;;;;:::o;33884:332::-;34005:4;34043:2;34032:9;34028:18;34020:26;;34056:71;34124:1;34113:9;34109:17;34100:6;34056:71;:::i;:::-;34137:72;34205:2;34194:9;34190:18;34181:6;34137:72;:::i;:::-;33884:332;;;;;:::o;34222:129::-;34256:6;34283:20;;:::i;:::-;34273:30;;34312:33;34340:4;34332:6;34312:33;:::i;:::-;34222:129;;;:::o;34357:75::-;34390:6;34423:2;34417:9;34407:19;;34357:75;:::o;34438:307::-;34499:4;34589:18;34581:6;34578:30;34575:56;;;34611:18;;:::i;:::-;34575:56;34649:29;34671:6;34649:29;:::i;:::-;34641:37;;34733:4;34727;34723:15;34715:23;;34438:307;;;:::o;34751:308::-;34813:4;34903:18;34895:6;34892:30;34889:56;;;34925:18;;:::i;:::-;34889:56;34963:29;34985:6;34963:29;:::i;:::-;34955:37;;35047:4;35041;35037:15;35029:23;;34751:308;;;:::o;35065:141::-;35114:4;35137:3;35129:11;;35160:3;35157:1;35150:14;35194:4;35191:1;35181:18;35173:26;;35065:141;;;:::o;35212:98::-;35263:6;35297:5;35291:12;35281:22;;35212:98;;;:::o;35316:99::-;35368:6;35402:5;35396:12;35386:22;;35316:99;;;:::o;35421:147::-;35522:11;35559:3;35544:18;;35421:147;;;;:::o;35574:169::-;35658:11;35692:6;35687:3;35680:19;35732:4;35727:3;35723:14;35708:29;;35574:169;;;;:::o;35749:148::-;35851:11;35888:3;35873:18;;35749:148;;;;:::o;35903:305::-;35943:3;35962:20;35980:1;35962:20;:::i;:::-;35957:25;;35996:20;36014:1;35996:20;:::i;:::-;35991:25;;36150:1;36082:66;36078:74;36075:1;36072:81;36069:107;;;36156:18;;:::i;:::-;36069:107;36200:1;36197;36193:9;36186:16;;35903:305;;;;:::o;36214:185::-;36254:1;36271:20;36289:1;36271:20;:::i;:::-;36266:25;;36305:20;36323:1;36305:20;:::i;:::-;36300:25;;36344:1;36334:35;;36349:18;;:::i;:::-;36334:35;36391:1;36388;36384:9;36379:14;;36214:185;;;;:::o;36405:348::-;36445:7;36468:20;36486:1;36468:20;:::i;:::-;36463:25;;36502:20;36520:1;36502:20;:::i;:::-;36497:25;;36690:1;36622:66;36618:74;36615:1;36612:81;36607:1;36600:9;36593:17;36589:105;36586:131;;;36697:18;;:::i;:::-;36586:131;36745:1;36742;36738:9;36727:20;;36405:348;;;;:::o;36759:191::-;36799:4;36819:20;36837:1;36819:20;:::i;:::-;36814:25;;36853:20;36871:1;36853:20;:::i;:::-;36848:25;;36892:1;36889;36886:8;36883:34;;;36897:18;;:::i;:::-;36883:34;36942:1;36939;36935:9;36927:17;;36759:191;;;;:::o;36956:96::-;36993:7;37022:24;37040:5;37022:24;:::i;:::-;37011:35;;36956:96;;;:::o;37058:104::-;37103:7;37132:24;37150:5;37132:24;:::i;:::-;37121:35;;37058:104;;;:::o;37168:90::-;37202:7;37245:5;37238:13;37231:21;37220:32;;37168:90;;;:::o;37264:77::-;37301:7;37330:5;37319:16;;37264:77;;;:::o;37347:149::-;37383:7;37423:66;37416:5;37412:78;37401:89;;37347:149;;;:::o;37502:126::-;37539:7;37579:42;37572:5;37568:54;37557:65;;37502:126;;;:::o;37634:77::-;37671:7;37700:5;37689:16;;37634:77;;;:::o;37717:134::-;37775:9;37808:37;37839:5;37808:37;:::i;:::-;37795:50;;37717:134;;;:::o;37857:126::-;37907:9;37940:37;37971:5;37940:37;:::i;:::-;37927:50;;37857:126;;;:::o;37989:113::-;38039:9;38072:24;38090:5;38072:24;:::i;:::-;38059:37;;37989:113;;;:::o;38108:154::-;38192:6;38187:3;38182;38169:30;38254:1;38245:6;38240:3;38236:16;38229:27;38108:154;;;:::o;38268:307::-;38336:1;38346:113;38360:6;38357:1;38354:13;38346:113;;;38445:1;38440:3;38436:11;38430:18;38426:1;38421:3;38417:11;38410:39;38382:2;38379:1;38375:10;38370:15;;38346:113;;;38477:6;38474:1;38471:13;38468:101;;;38557:1;38548:6;38543:3;38539:16;38532:27;38468:101;38317:258;38268:307;;;:::o;38581:171::-;38620:3;38643:24;38661:5;38643:24;:::i;:::-;38634:33;;38689:4;38682:5;38679:15;38676:41;;;38697:18;;:::i;:::-;38676:41;38744:1;38737:5;38733:13;38726:20;;38581:171;;;:::o;38758:320::-;38802:6;38839:1;38833:4;38829:12;38819:22;;38886:1;38880:4;38876:12;38907:18;38897:81;;38963:4;38955:6;38951:17;38941:27;;38897:81;39025:2;39017:6;39014:14;38994:18;38991:38;38988:84;;;39044:18;;:::i;:::-;38988:84;38809:269;38758:320;;;:::o;39084:281::-;39167:27;39189:4;39167:27;:::i;:::-;39159:6;39155:40;39297:6;39285:10;39282:22;39261:18;39249:10;39246:34;39243:62;39240:88;;;39308:18;;:::i;:::-;39240:88;39348:10;39344:2;39337:22;39127:238;39084:281;;:::o;39371:233::-;39410:3;39433:24;39451:5;39433:24;:::i;:::-;39424:33;;39479:66;39472:5;39469:77;39466:103;;;39549:18;;:::i;:::-;39466:103;39596:1;39589:5;39585:13;39578:20;;39371:233;;;:::o;39610:100::-;39649:7;39678:26;39698:5;39678:26;:::i;:::-;39667:37;;39610:100;;;:::o;39716:94::-;39755:7;39784:20;39798:5;39784:20;:::i;:::-;39773:31;;39716:94;;;:::o;39816:176::-;39848:1;39865:20;39883:1;39865:20;:::i;:::-;39860:25;;39899:20;39917:1;39899:20;:::i;:::-;39894:25;;39938:1;39928:35;;39943:18;;:::i;:::-;39928:35;39984:1;39981;39977:9;39972:14;;39816:176;;;;:::o;39998:180::-;40046:77;40043:1;40036:88;40143:4;40140:1;40133:15;40167:4;40164:1;40157:15;40184:180;40232:77;40229:1;40222:88;40329:4;40326:1;40319:15;40353:4;40350:1;40343:15;40370:180;40418:77;40415:1;40408:88;40515:4;40512:1;40505:15;40539:4;40536:1;40529:15;40556:180;40604:77;40601:1;40594:88;40701:4;40698:1;40691:15;40725:4;40722:1;40715:15;40742:180;40790:77;40787:1;40780:88;40887:4;40884:1;40877:15;40911:4;40908:1;40901:15;40928:117;41037:1;41034;41027:12;41051:117;41160:1;41157;41150:12;41174:117;41283:1;41280;41273:12;41297:117;41406:1;41403;41396:12;41420:117;41529:1;41526;41519:12;41543:117;41652:1;41649;41642:12;41666:102;41707:6;41758:2;41754:7;41749:2;41742:5;41738:14;41734:28;41724:38;;41666:102;;;:::o;41774:94::-;41807:8;41855:5;41851:2;41847:14;41826:35;;41774:94;;;:::o;41874:176::-;42014:28;42010:1;42002:6;41998:14;41991:52;41874:176;:::o;42056:181::-;42196:33;42192:1;42184:6;42180:14;42173:57;42056:181;:::o;42243:225::-;42383:34;42379:1;42371:6;42367:14;42360:58;42452:8;42447:2;42439:6;42435:15;42428:33;42243:225;:::o;42474:177::-;42614:29;42610:1;42602:6;42598:14;42591:53;42474:177;:::o;42657:152::-;42797:4;42793:1;42785:6;42781:14;42774:28;42657:152;:::o;42815:169::-;42955:21;42951:1;42943:6;42939:14;42932:45;42815:169;:::o;42990:182::-;43130:34;43126:1;43118:6;43114:14;43107:58;42990:182;:::o;43178:170::-;43318:22;43314:1;43306:6;43302:14;43295:46;43178:170;:::o;43354:::-;43494:22;43490:1;43482:6;43478:14;43471:46;43354:170;:::o;43530:165::-;43670:17;43666:1;43658:6;43654:14;43647:41;43530:165;:::o;43701:167::-;43841:19;43837:1;43829:6;43825:14;43818:43;43701:167;:::o;43874:174::-;44014:26;44010:1;44002:6;43998:14;43991:50;43874:174;:::o;44054:171::-;44194:23;44190:1;44182:6;44178:14;44171:47;44054:171;:::o;44231:167::-;44371:19;44367:1;44359:6;44355:14;44348:43;44231:167;:::o;44404:227::-;44544:34;44540:1;44532:6;44528:14;44521:58;44613:10;44608:2;44600:6;44596:15;44589:35;44404:227;:::o;44637:181::-;44777:33;44773:1;44765:6;44761:14;44754:57;44637:181;:::o;44824:166::-;44964:18;44960:1;44952:6;44948:14;44941:42;44824:166;:::o;44996:::-;45136:18;45132:1;45124:6;45120:14;45113:42;44996:166;:::o;45168:122::-;45241:24;45259:5;45241:24;:::i;:::-;45234:5;45231:35;45221:63;;45280:1;45277;45270:12;45221:63;45168:122;:::o;45296:138::-;45377:32;45403:5;45377:32;:::i;:::-;45370:5;45367:43;45357:71;;45424:1;45421;45414:12;45357:71;45296:138;:::o;45440:116::-;45510:21;45525:5;45510:21;:::i;:::-;45503:5;45500:32;45490:60;;45546:1;45543;45536:12;45490:60;45440:116;:::o;45562:122::-;45635:24;45653:5;45635:24;:::i;:::-;45628:5;45625:35;45615:63;;45674:1;45671;45664:12;45615:63;45562:122;:::o;45690:::-;45763:24;45781:5;45763:24;:::i;:::-;45756:5;45753:35;45743:63;;45802:1;45799;45792:12;45743:63;45690:122;:::o
Swarm Source
ipfs://edacb2cb04f5abb768ec108a2823d173b1d80ebadba9dc5e91da25d3800a5fb1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.