Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw All | 17374288 | 466 days ago | IN | 0 ETH | 0.00138001 | ||||
Mint | 16679021 | 565 days ago | IN | 0.06 ETH | 0.0024337 | ||||
Mint | 16299006 | 618 days ago | IN | 0.18 ETH | 0.00165717 | ||||
Mint | 16298996 | 618 days ago | IN | 0.06 ETH | 0.00206057 | ||||
Set Base URI | 15534813 | 724 days ago | IN | 0 ETH | 0.00095464 | ||||
Withdraw All | 15460387 | 737 days ago | IN | 0 ETH | 0.0008425 | ||||
Mint | 15422281 | 743 days ago | IN | 0.06 ETH | 0.00072013 | ||||
Set Base URI | 15417565 | 743 days ago | IN | 0 ETH | 0.00067735 | ||||
Reserve Mint | 15415430 | 744 days ago | IN | 0 ETH | 0.00093174 | ||||
Set Base URI | 15415392 | 744 days ago | IN | 0 ETH | 0.00155283 | ||||
0x60806040 | 15415334 | 744 days ago | IN | 0 ETH | 0.04376531 |
Loading...
Loading
Contract Name:
ShatteredOrbs
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-26 */ /** *Submitted for verification at Etherscan.io on 2022-08-23 */ // SPDX-License-Identifier: MIT 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. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } /** * @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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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; } } /** * @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); } } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @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); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert('ERC721A: unable to get token of owner by index'); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: approve to caller'); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); require(quantity != 0, 'ERC721A: quantity must be greater than 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract ShatteredOrbs is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; uint256 public constant MAX_SUPPLY = 4444; uint256 public constant MAX_PRESALE_MINTS = 3; uint256 public constant PUBLIC_PRICE = 0.06 ether; // 60000000000000000 uint256 public constant PRESALE_PRICE = 0.04 ether; // 40000000000000000 uint256 public presaleStartTime; uint256 public presaleDuration; bytes32 public merkleRoot; mapping(address => uint256) private _allowed; string private _baseURIextended; constructor() ERC721A("Shattered Orbs", "SON") { presaleStartTime = 1648321200; // Sat Mar 26 2022 19:00:00 GMT+0000 presaleDuration = 24 hours; } modifier isValidMerkleProof(bytes32[] memory merkleProof, bytes32 root) { require(MerkleProof.verify(merkleProof, root, keccak256(abi.encodePacked(msg.sender))), "Address does not exist in list"); _; } function preSaleMint(bytes32[] calldata _proof, uint256 nMints) external payable isValidMerkleProof(_proof, merkleRoot) nonReentrant { require(msg.sender == tx.origin, "Can't mint through another contract"); require(block.timestamp >= presaleStartTime, "Presale not active"); require(nMints <= MAX_PRESALE_MINTS, "Exceeds max token purchase"); require(totalSupply() + nMints <= MAX_SUPPLY, "Mint exceeds total supply"); require(PRESALE_PRICE * nMints <= msg.value, "Sent incorrect ETH value"); require(_allowed[msg.sender] + nMints <= MAX_PRESALE_MINTS, "Exceeds presale mint limit"); // Keep track of mints for each address if (_allowed[msg.sender] > 0) { _allowed[msg.sender] = _allowed[msg.sender] + nMints; } else { _allowed[msg.sender] = nMints; } _safeMint(msg.sender, nMints); } function mint(uint256 nMints) external payable nonReentrant { require(msg.sender == tx.origin, "Can't mint through another contract"); require(block.timestamp >= (presaleStartTime + presaleDuration), "Public sale not active"); require(totalSupply() + nMints <= MAX_SUPPLY, "Mint exceeds total supply"); require(PUBLIC_PRICE * nMints <= msg.value, "Sent incorrect ETH value"); _safeMint(msg.sender, nMints); } function withdrawAll() external onlyOwner { require(address(this).balance > 0, "No funds to withdraw"); uint256 contractBalance = address(this).balance; _withdraw(msg.sender, contractBalance); } function reserveMint(uint256 nMints, uint256 batchSize) external onlyOwner { require(totalSupply() + nMints <= MAX_SUPPLY, "Mint exceeds total supply"); require(nMints % batchSize == 0, "Can only mint a multiple of batchSize"); for (uint256 i = 0; i < nMints / batchSize; i++) { _safeMint(msg.sender, batchSize); } } function setBaseURI(string calldata baseURI_) external onlyOwner { _baseURIextended = baseURI_; } function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, (tokenId + 1).toString(), '.json')) : ''; } function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner { merkleRoot = _merkleRoot; } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } function setPresaleStartTime(uint256 _presaleStartTime) external onlyOwner { presaleStartTime = _presaleStartTime; } function setPresaleDuration(uint256 _presaleDuration) external onlyOwner { presaleDuration = _presaleDuration; } function isPresaleActive() public view returns (bool) { return block.timestamp >= presaleStartTime && block.timestamp <= (presaleStartTime + presaleDuration); } function isPublicSaleActive() public view returns (bool) { return block.timestamp >= (presaleStartTime + presaleDuration); } function currentBlockTimeStamp() public view returns (uint256) { return block.timestamp; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PRESALE_MINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentBlockTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"uint256","name":"nMints","type":"uint256"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nMints","type":"uint256"},{"internalType":"uint256","name":"batchSize","type":"uint256"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleDuration","type":"uint256"}],"name":"setPresaleDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleStartTime","type":"uint256"}],"name":"setPresaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600e81526020017f536861747465726564204f7262730000000000000000000000000000000000008152506040518060400160405280600381526020017f534f4e0000000000000000000000000000000000000000000000000000000000815250816001908051906020019062000096929190620001c3565b508060029080519060200190620000af929190620001c3565b505050620000d2620000c6620000f560201b60201c565b620000fd60201b60201c565b600160088190555063623f62b060098190555062015180600a81905550620002d8565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001d19062000273565b90600052602060002090601f016020900481019282620001f5576000855562000241565b82601f106200021057805160ff191683800117855562000241565b8280016001018555821562000241579182015b828111156200024057825182559160200191906001019062000223565b5b50905062000250919062000254565b5090565b5b808211156200026f57600081600090555060010162000255565b5090565b600060028204905060018216806200028c57607f821691505b60208210811415620002a357620002a2620002a9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614f2c80620002e86000396000f3fe60806040526004361061021e5760003560e01c806362dc6e21116101235780639208383a116100ab578063a82524b21161006f578063a82524b21461079e578063b88d4fde146107c9578063c87b56dd146107f2578063e985e9c51461082f578063f2fde38b1461086c57610225565b80639208383a146106da5780639525002f1461070557806395d89b411461072e578063a0712d6814610759578063a22cb4651461077557610225565b8063715018a6116100f2578063715018a61461063c57806378179976146106535780637cb647591461066f578063853828b6146106985780638da5cb5b146106af57610225565b806362dc6e211461056c5780636352211e146105975780636ea409ba146105d457806370a08231146105ff57610225565b80632eb4a7ab116101a65780634f6ccce7116101755780634f6ccce71461048557806355f804b3146104c25780635868c32a146104eb57806360d938dc14610516578063611f3f101461054157610225565b80632eb4a7ab146103c95780632f745c59146103f457806332cb6b0c1461043157806342842e0e1461045c57610225565b8063095ea7b3116101ed578063095ea7b3146102f857806318160ddd146103215780631e84c4131461034c57806323b872dd14610377578063296cab55146103a057610225565b806301ffc9a71461022a5780630259dae71461026757806306fdde0314610290578063081812fc146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613647565b610895565b60405161025e9190613d9a565b60405180910390f35b34801561027357600080fd5b5061028e600480360381019061028991906136ee565b6109df565b005b34801561029c57600080fd5b506102a5610a65565b6040516102b29190613dd0565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd91906136ee565b610af7565b6040516102ef9190613d33565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a919061357a565b610b7c565b005b34801561032d57600080fd5b50610336610c95565b60405161034391906141d2565b60405180910390f35b34801561035857600080fd5b50610361610c9e565b60405161036e9190613d9a565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613464565b610cb8565b005b3480156103ac57600080fd5b506103c760048036038101906103c291906136ee565b610cc8565b005b3480156103d557600080fd5b506103de610d4e565b6040516103eb9190613db5565b60405180910390f35b34801561040057600080fd5b5061041b6004803603810190610416919061357a565b610d54565b60405161042891906141d2565b60405180910390f35b34801561043d57600080fd5b50610446610f46565b60405161045391906141d2565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190613464565b610f4c565b005b34801561049157600080fd5b506104ac60048036038101906104a791906136ee565b610f6c565b6040516104b991906141d2565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e491906136a1565b610fbf565b005b3480156104f757600080fd5b50610500611051565b60405161050d91906141d2565b60405180910390f35b34801561052257600080fd5b5061052b611057565b6040516105389190613d9a565b60405180910390f35b34801561054d57600080fd5b5061055661107f565b60405161056391906141d2565b60405180910390f35b34801561057857600080fd5b5061058161108a565b60405161058e91906141d2565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906136ee565b611095565b6040516105cb9190613d33565b60405180910390f35b3480156105e057600080fd5b506105e96110ab565b6040516105f691906141d2565b60405180910390f35b34801561060b57600080fd5b50610626600480360381019061062191906133f7565b6110b3565b60405161063391906141d2565b60405180910390f35b34801561064857600080fd5b5061065161119c565b005b61066d600480360381019061066891906135ba565b611224565b005b34801561067b57600080fd5b506106966004803603810190610691919061361a565b611691565b005b3480156106a457600080fd5b506106ad611717565b005b3480156106bb57600080fd5b506106c46117e8565b6040516106d19190613d33565b60405180910390f35b3480156106e657600080fd5b506106ef611812565b6040516106fc91906141d2565b60405180910390f35b34801561071157600080fd5b5061072c6004803603810190610727919061371b565b611817565b005b34801561073a57600080fd5b50610743611970565b6040516107509190613dd0565b60405180910390f35b610773600480360381019061076e91906136ee565b611a02565b005b34801561078157600080fd5b5061079c6004803603810190610797919061353a565b611bd1565b005b3480156107aa57600080fd5b506107b3611d52565b6040516107c091906141d2565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb91906134b7565b611d58565b005b3480156107fe57600080fd5b50610819600480360381019061081491906136ee565b611db4565b6040516108269190613dd0565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190613424565b611e68565b6040516108639190613d9a565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e91906133f7565b611efc565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857506109d782611ff4565b5b9050919050565b6109e761205e565b73ffffffffffffffffffffffffffffffffffffffff16610a056117e8565b73ffffffffffffffffffffffffffffffffffffffff1614610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5290613ff2565b60405180910390fd5b80600a8190555050565b606060018054610a7490614466565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa090614466565b8015610aed5780601f10610ac257610100808354040283529160200191610aed565b820191906000526020600020905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b6000610b0282612066565b610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890614192565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8782611095565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90614072565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1761205e565b73ffffffffffffffffffffffffffffffffffffffff161480610c465750610c4581610c4061205e565b611e68565b5b610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90613f52565b60405180910390fd5b610c90838383612073565b505050565b60008054905090565b6000600a54600954610cb09190614291565b421015905090565b610cc3838383612125565b505050565b610cd061205e565b73ffffffffffffffffffffffffffffffffffffffff16610cee6117e8565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90613ff2565b60405180910390fd5b8060098190555050565b600b5481565b6000610d5f836110b3565b8210610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613df2565b60405180910390fd5b6000610daa610c95565b905060008060005b83811015610f04576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ea457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ef65786841415610eed578195505050505050610f40565b83806001019450505b508080600101915050610db2565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3790614132565b60405180910390fd5b92915050565b61115c81565b610f6783838360405180602001604052806000815250611d58565b505050565b6000610f76610c95565b8210610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90613e92565b60405180910390fd5b819050919050565b610fc761205e565b73ffffffffffffffffffffffffffffffffffffffff16610fe56117e8565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290613ff2565b60405180910390fd5b8181600d919061104c929190613180565b505050565b600a5481565b6000600954421015801561107a5750600a546009546110769190614291565b4211155b905090565b66d529ae9e86000081565b668e1bc9bf04000081565b60006110a082612665565b600001519050919050565b600042905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90613f72565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6111a461205e565b73ffffffffffffffffffffffffffffffffffffffff166111c26117e8565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90613ff2565b60405180910390fd5b61122260006127ff565b565b828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5461129a82823360405160200161127f9190613cd4565b604051602081830303815290604052805190602001206128c5565b6112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090613f32565b60405180910390fd5b6002600854141561131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131690614152565b60405180910390fd5b60026008819055503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c906141b2565b60405180910390fd5b6009544210156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190613ef2565b60405180910390fd5b600383111561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613e72565b60405180910390fd5b61115c8361142a610c95565b6114349190614291565b1115611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90613f92565b60405180910390fd5b3483668e1bc9bf0400006114899190614318565b11156114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190613ed2565b60405180910390fd5b600383600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115179190614291565b1115611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90613e12565b60405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116335782600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115eb9190614291565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611678565b82600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61168233846128dc565b60016008819055505050505050565b61169961205e565b73ffffffffffffffffffffffffffffffffffffffff166116b76117e8565b73ffffffffffffffffffffffffffffffffffffffff161461170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490613ff2565b60405180910390fd5b80600b8190555050565b61171f61205e565b73ffffffffffffffffffffffffffffffffffffffff1661173d6117e8565b73ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90613ff2565b60405180910390fd5b600047116117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90613f12565b60405180910390fd5b60004790506117e533826128fa565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600381565b61181f61205e565b73ffffffffffffffffffffffffffffffffffffffff1661183d6117e8565b73ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613ff2565b60405180910390fd5b61115c8261189f610c95565b6118a99190614291565b11156118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613f92565b60405180910390fd5b600081836118f89190614536565b14611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90614112565b60405180910390fd5b60005b818361194791906142e7565b81101561196b5761195833836128dc565b8080611963906144c9565b91505061193b565b505050565b60606002805461197f90614466565b80601f01602080910402602001604051908101604052809291908181526020018280546119ab90614466565b80156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b5050505050905090565b60026008541415611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90614152565b60405180910390fd5b60026008819055503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906141b2565b60405180910390fd5b600a54600954611ace9190614291565b421015611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0790613fd2565b60405180910390fd5b61115c81611b1c610c95565b611b269190614291565b1115611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90613f92565b60405180910390fd5b348166d529ae9e860000611b7b9190614318565b1115611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390613ed2565b60405180910390fd5b611bc633826128dc565b600160088190555050565b611bd961205e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90614032565b60405180910390fd5b8060066000611c5461205e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d0161205e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d469190613d9a565b60405180910390a35050565b60095481565b611d63848484612125565b611d6f848484846129ab565b611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da5906140b2565b60405180910390fd5b50505050565b6060611dbf82612066565b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614012565b60405180910390fd5b6000611e08612b42565b9050600081511415611e295760405180602001604052806000815250611e60565b80611e3f600185611e3a9190614291565b612bd4565b604051602001611e50929190613cef565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f0461205e565b73ffffffffffffffffffffffffffffffffffffffff16611f226117e8565b73ffffffffffffffffffffffffffffffffffffffff1614611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f90613ff2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90613e32565b60405180910390fd5b611ff1816127ff565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061213082612665565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661215761205e565b73ffffffffffffffffffffffffffffffffffffffff1614806121b3575061217c61205e565b73ffffffffffffffffffffffffffffffffffffffff1661219b84610af7565b73ffffffffffffffffffffffffffffffffffffffff16145b806121cf57506121ce82600001516121c961205e565b611e68565b5b905080612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890614052565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227a90613fb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90613eb2565b60405180910390fd5b6123008585856001612d35565b6123106000848460000151612073565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125f55761255481612066565b156125f45782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461265e8585856001612d3b565b5050505050565b61266d613206565b61267682612066565b6126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90613e52565b60405180910390fd5b60008290505b600081106127be576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127af5780925050506127fa565b508080600190039150506126bb565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f190614172565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000826128d28584612d41565b1490509392505050565b6128f6828260405180602001604052806000815250612db6565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161292090613d1e565b60006040518083038185875af1925050503d806000811461295d576040519150601f19603f3d011682016040523d82523d6000602084013e612962565b606091505b50509050806129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299d90614092565b60405180910390fd5b505050565b60006129cc8473ffffffffffffffffffffffffffffffffffffffff16612dc8565b15612b35578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129f561205e565b8786866040518563ffffffff1660e01b8152600401612a179493929190613d4e565b602060405180830381600087803b158015612a3157600080fd5b505af1925050508015612a6257506040513d601f19601f82011682018060405250810190612a5f9190613674565b60015b612ae5573d8060008114612a92576040519150601f19603f3d011682016040523d82523d6000602084013e612a97565b606091505b50600081511415612add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad4906140b2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b3a565b600190505b949350505050565b6060600d8054612b5190614466565b80601f0160208091040260200160405190810160405280929190818152602001828054612b7d90614466565b8015612bca5780601f10612b9f57610100808354040283529160200191612bca565b820191906000526020600020905b815481529060010190602001808311612bad57829003601f168201915b5050505050905090565b60606000821415612c1c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d30565b600082905060005b60008214612c4e578080612c37906144c9565b915050600a82612c4791906142e7565b9150612c24565b60008167ffffffffffffffff811115612c6a57612c69614623565b5b6040519080825280601f01601f191660200182016040528015612c9c5781602001600182028036833780820191505090505b5090505b60008514612d2957600182612cb59190614372565b9150600a85612cc49190614536565b6030612cd09190614291565b60f81b818381518110612ce657612ce56145f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d2291906142e7565b9450612ca0565b8093505050505b919050565b50505050565b50505050565b60008082905060005b8451811015612dab576000858281518110612d6857612d676145f4565b5b60200260200101519050808311612d8a57612d838382612deb565b9250612d97565b612d948184612deb565b92505b508080612da3906144c9565b915050612d4a565b508091505092915050565b612dc38383836001612e02565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6f906140d2565b60405180910390fd5b6000841415612ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb3906140f2565b60405180910390fd5b612ec96000868387612d35565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561316357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561314e5761310e60008884886129ab565b61314d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613144906140b2565b60405180910390fd5b5b81806001019250508080600101915050613097565b5080600081905550506131796000868387612d3b565b5050505050565b82805461318c90614466565b90600052602060002090601f0160209004810192826131ae57600085556131f5565b82601f106131c757803560ff19168380011785556131f5565b828001600101855582156131f5579182015b828111156131f45782358255916020019190600101906131d9565b5b5090506132029190613240565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613259576000816000905550600101613241565b5090565b600061327061326b84614212565b6141ed565b90508281526020810184848401111561328c5761328b614661565b5b613297848285614424565b509392505050565b6000813590506132ae81614e83565b92915050565b60008083601f8401126132ca576132c9614657565b5b8235905067ffffffffffffffff8111156132e7576132e6614652565b5b6020830191508360208202830111156133035761330261465c565b5b9250929050565b60008135905061331981614e9a565b92915050565b60008135905061332e81614eb1565b92915050565b60008135905061334381614ec8565b92915050565b60008151905061335881614ec8565b92915050565b600082601f83011261337357613372614657565b5b813561338384826020860161325d565b91505092915050565b60008083601f8401126133a2576133a1614657565b5b8235905067ffffffffffffffff8111156133bf576133be614652565b5b6020830191508360018202830111156133db576133da61465c565b5b9250929050565b6000813590506133f181614edf565b92915050565b60006020828403121561340d5761340c61466b565b5b600061341b8482850161329f565b91505092915050565b6000806040838503121561343b5761343a61466b565b5b60006134498582860161329f565b925050602061345a8582860161329f565b9150509250929050565b60008060006060848603121561347d5761347c61466b565b5b600061348b8682870161329f565b935050602061349c8682870161329f565b92505060406134ad868287016133e2565b9150509250925092565b600080600080608085870312156134d1576134d061466b565b5b60006134df8782880161329f565b94505060206134f08782880161329f565b9350506040613501878288016133e2565b925050606085013567ffffffffffffffff81111561352257613521614666565b5b61352e8782880161335e565b91505092959194509250565b600080604083850312156135515761355061466b565b5b600061355f8582860161329f565b92505060206135708582860161330a565b9150509250929050565b600080604083850312156135915761359061466b565b5b600061359f8582860161329f565b92505060206135b0858286016133e2565b9150509250929050565b6000806000604084860312156135d3576135d261466b565b5b600084013567ffffffffffffffff8111156135f1576135f0614666565b5b6135fd868287016132b4565b93509350506020613610868287016133e2565b9150509250925092565b6000602082840312156136305761362f61466b565b5b600061363e8482850161331f565b91505092915050565b60006020828403121561365d5761365c61466b565b5b600061366b84828501613334565b91505092915050565b60006020828403121561368a5761368961466b565b5b600061369884828501613349565b91505092915050565b600080602083850312156136b8576136b761466b565b5b600083013567ffffffffffffffff8111156136d6576136d5614666565b5b6136e28582860161338c565b92509250509250929050565b6000602082840312156137045761370361466b565b5b6000613712848285016133e2565b91505092915050565b600080604083850312156137325761373161466b565b5b6000613740858286016133e2565b9250506020613751858286016133e2565b9150509250929050565b613764816143a6565b82525050565b61377b613776826143a6565b614512565b82525050565b61378a816143b8565b82525050565b613799816143c4565b82525050565b60006137aa82614243565b6137b48185614259565b93506137c4818560208601614433565b6137cd81614670565b840191505092915050565b60006137e38261424e565b6137ed8185614275565b93506137fd818560208601614433565b61380681614670565b840191505092915050565b600061381c8261424e565b6138268185614286565b9350613836818560208601614433565b80840191505092915050565b600061384f602283614275565b915061385a8261468e565b604082019050919050565b6000613872601a83614275565b915061387d826146dd565b602082019050919050565b6000613895602683614275565b91506138a082614706565b604082019050919050565b60006138b8602a83614275565b91506138c382614755565b604082019050919050565b60006138db601a83614275565b91506138e6826147a4565b602082019050919050565b60006138fe602383614275565b9150613909826147cd565b604082019050919050565b6000613921602583614275565b915061392c8261481c565b604082019050919050565b6000613944601883614275565b915061394f8261486b565b602082019050919050565b6000613967601283614275565b915061397282614894565b602082019050919050565b600061398a601483614275565b9150613995826148bd565b602082019050919050565b60006139ad601e83614275565b91506139b8826148e6565b602082019050919050565b60006139d0603983614275565b91506139db8261490f565b604082019050919050565b60006139f3602b83614275565b91506139fe8261495e565b604082019050919050565b6000613a16601983614275565b9150613a21826149ad565b602082019050919050565b6000613a39602683614275565b9150613a44826149d6565b604082019050919050565b6000613a5c600583614286565b9150613a6782614a25565b600582019050919050565b6000613a7f601683614275565b9150613a8a82614a4e565b602082019050919050565b6000613aa2602083614275565b9150613aad82614a77565b602082019050919050565b6000613ac5602f83614275565b9150613ad082614aa0565b604082019050919050565b6000613ae8601a83614275565b9150613af382614aef565b602082019050919050565b6000613b0b603283614275565b9150613b1682614b18565b604082019050919050565b6000613b2e602283614275565b9150613b3982614b67565b604082019050919050565b6000613b5160008361426a565b9150613b5c82614bb6565b600082019050919050565b6000613b74601083614275565b9150613b7f82614bb9565b602082019050919050565b6000613b97603383614275565b9150613ba282614be2565b604082019050919050565b6000613bba602183614275565b9150613bc582614c31565b604082019050919050565b6000613bdd602883614275565b9150613be882614c80565b604082019050919050565b6000613c00602583614275565b9150613c0b82614ccf565b604082019050919050565b6000613c23602e83614275565b9150613c2e82614d1e565b604082019050919050565b6000613c46601f83614275565b9150613c5182614d6d565b602082019050919050565b6000613c69602f83614275565b9150613c7482614d96565b604082019050919050565b6000613c8c602d83614275565b9150613c9782614de5565b604082019050919050565b6000613caf602383614275565b9150613cba82614e34565b604082019050919050565b613cce8161441a565b82525050565b6000613ce0828461376a565b60148201915081905092915050565b6000613cfb8285613811565b9150613d078284613811565b9150613d1282613a4f565b91508190509392505050565b6000613d2982613b44565b9150819050919050565b6000602082019050613d48600083018461375b565b92915050565b6000608082019050613d63600083018761375b565b613d70602083018661375b565b613d7d6040830185613cc5565b8181036060830152613d8f818461379f565b905095945050505050565b6000602082019050613daf6000830184613781565b92915050565b6000602082019050613dca6000830184613790565b92915050565b60006020820190508181036000830152613dea81846137d8565b905092915050565b60006020820190508181036000830152613e0b81613842565b9050919050565b60006020820190508181036000830152613e2b81613865565b9050919050565b60006020820190508181036000830152613e4b81613888565b9050919050565b60006020820190508181036000830152613e6b816138ab565b9050919050565b60006020820190508181036000830152613e8b816138ce565b9050919050565b60006020820190508181036000830152613eab816138f1565b9050919050565b60006020820190508181036000830152613ecb81613914565b9050919050565b60006020820190508181036000830152613eeb81613937565b9050919050565b60006020820190508181036000830152613f0b8161395a565b9050919050565b60006020820190508181036000830152613f2b8161397d565b9050919050565b60006020820190508181036000830152613f4b816139a0565b9050919050565b60006020820190508181036000830152613f6b816139c3565b9050919050565b60006020820190508181036000830152613f8b816139e6565b9050919050565b60006020820190508181036000830152613fab81613a09565b9050919050565b60006020820190508181036000830152613fcb81613a2c565b9050919050565b60006020820190508181036000830152613feb81613a72565b9050919050565b6000602082019050818103600083015261400b81613a95565b9050919050565b6000602082019050818103600083015261402b81613ab8565b9050919050565b6000602082019050818103600083015261404b81613adb565b9050919050565b6000602082019050818103600083015261406b81613afe565b9050919050565b6000602082019050818103600083015261408b81613b21565b9050919050565b600060208201905081810360008301526140ab81613b67565b9050919050565b600060208201905081810360008301526140cb81613b8a565b9050919050565b600060208201905081810360008301526140eb81613bad565b9050919050565b6000602082019050818103600083015261410b81613bd0565b9050919050565b6000602082019050818103600083015261412b81613bf3565b9050919050565b6000602082019050818103600083015261414b81613c16565b9050919050565b6000602082019050818103600083015261416b81613c39565b9050919050565b6000602082019050818103600083015261418b81613c5c565b9050919050565b600060208201905081810360008301526141ab81613c7f565b9050919050565b600060208201905081810360008301526141cb81613ca2565b9050919050565b60006020820190506141e76000830184613cc5565b92915050565b60006141f7614208565b90506142038282614498565b919050565b6000604051905090565b600067ffffffffffffffff82111561422d5761422c614623565b5b61423682614670565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061429c8261441a565b91506142a78361441a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142dc576142db614567565b5b828201905092915050565b60006142f28261441a565b91506142fd8361441a565b92508261430d5761430c614596565b5b828204905092915050565b60006143238261441a565b915061432e8361441a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561436757614366614567565b5b828202905092915050565b600061437d8261441a565b91506143888361441a565b92508282101561439b5761439a614567565b5b828203905092915050565b60006143b1826143fa565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614451578082015181840152602081019050614436565b83811115614460576000848401525b50505050565b6000600282049050600182168061447e57607f821691505b60208210811415614492576144916145c5565b5b50919050565b6144a182614670565b810181811067ffffffffffffffff821117156144c0576144bf614623565b5b80604052505050565b60006144d48261441a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561450757614506614567565b5b600182019050919050565b600061451d82614524565b9050919050565b600061452f82614681565b9050919050565b60006145418261441a565b915061454c8361441a565b92508261455c5761455b614596565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f457863656564732070726573616c65206d696e74206c696d6974000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820746f6b656e207075726368617365000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f53656e7420696e636f7272656374204554482076616c75650000000000000000600082015250565b7f50726573616c65206e6f74206163746976650000000000000000000000000000600082015250565b7f4e6f2066756e647320746f207769746864726177000000000000000000000000600082015250565b7f4164647265737320646f6573206e6f7420657869737420696e206c6973740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4d696e74206578636565647320746f74616c20737570706c7900000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f5075626c69632073616c65206e6f742061637469766500000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e742061206d756c7469706c65206f66206261746360008201527f6853697a65000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f43616e2774206d696e74207468726f75676820616e6f7468657220636f6e747260008201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b614e8c816143a6565b8114614e9757600080fd5b50565b614ea3816143b8565b8114614eae57600080fd5b50565b614eba816143c4565b8114614ec557600080fd5b50565b614ed1816143ce565b8114614edc57600080fd5b50565b614ee88161441a565b8114614ef357600080fd5b5056fea2646970667358221220e46a1d0027c46285b78e3c92124d8bbda700dbbfcd57b815ae707f7bf7b92ee664736f6c63430008070033
Deployed Bytecode
0x60806040526004361061021e5760003560e01c806362dc6e21116101235780639208383a116100ab578063a82524b21161006f578063a82524b21461079e578063b88d4fde146107c9578063c87b56dd146107f2578063e985e9c51461082f578063f2fde38b1461086c57610225565b80639208383a146106da5780639525002f1461070557806395d89b411461072e578063a0712d6814610759578063a22cb4651461077557610225565b8063715018a6116100f2578063715018a61461063c57806378179976146106535780637cb647591461066f578063853828b6146106985780638da5cb5b146106af57610225565b806362dc6e211461056c5780636352211e146105975780636ea409ba146105d457806370a08231146105ff57610225565b80632eb4a7ab116101a65780634f6ccce7116101755780634f6ccce71461048557806355f804b3146104c25780635868c32a146104eb57806360d938dc14610516578063611f3f101461054157610225565b80632eb4a7ab146103c95780632f745c59146103f457806332cb6b0c1461043157806342842e0e1461045c57610225565b8063095ea7b3116101ed578063095ea7b3146102f857806318160ddd146103215780631e84c4131461034c57806323b872dd14610377578063296cab55146103a057610225565b806301ffc9a71461022a5780630259dae71461026757806306fdde0314610290578063081812fc146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613647565b610895565b60405161025e9190613d9a565b60405180910390f35b34801561027357600080fd5b5061028e600480360381019061028991906136ee565b6109df565b005b34801561029c57600080fd5b506102a5610a65565b6040516102b29190613dd0565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd91906136ee565b610af7565b6040516102ef9190613d33565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a919061357a565b610b7c565b005b34801561032d57600080fd5b50610336610c95565b60405161034391906141d2565b60405180910390f35b34801561035857600080fd5b50610361610c9e565b60405161036e9190613d9a565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613464565b610cb8565b005b3480156103ac57600080fd5b506103c760048036038101906103c291906136ee565b610cc8565b005b3480156103d557600080fd5b506103de610d4e565b6040516103eb9190613db5565b60405180910390f35b34801561040057600080fd5b5061041b6004803603810190610416919061357a565b610d54565b60405161042891906141d2565b60405180910390f35b34801561043d57600080fd5b50610446610f46565b60405161045391906141d2565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190613464565b610f4c565b005b34801561049157600080fd5b506104ac60048036038101906104a791906136ee565b610f6c565b6040516104b991906141d2565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e491906136a1565b610fbf565b005b3480156104f757600080fd5b50610500611051565b60405161050d91906141d2565b60405180910390f35b34801561052257600080fd5b5061052b611057565b6040516105389190613d9a565b60405180910390f35b34801561054d57600080fd5b5061055661107f565b60405161056391906141d2565b60405180910390f35b34801561057857600080fd5b5061058161108a565b60405161058e91906141d2565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906136ee565b611095565b6040516105cb9190613d33565b60405180910390f35b3480156105e057600080fd5b506105e96110ab565b6040516105f691906141d2565b60405180910390f35b34801561060b57600080fd5b50610626600480360381019061062191906133f7565b6110b3565b60405161063391906141d2565b60405180910390f35b34801561064857600080fd5b5061065161119c565b005b61066d600480360381019061066891906135ba565b611224565b005b34801561067b57600080fd5b506106966004803603810190610691919061361a565b611691565b005b3480156106a457600080fd5b506106ad611717565b005b3480156106bb57600080fd5b506106c46117e8565b6040516106d19190613d33565b60405180910390f35b3480156106e657600080fd5b506106ef611812565b6040516106fc91906141d2565b60405180910390f35b34801561071157600080fd5b5061072c6004803603810190610727919061371b565b611817565b005b34801561073a57600080fd5b50610743611970565b6040516107509190613dd0565b60405180910390f35b610773600480360381019061076e91906136ee565b611a02565b005b34801561078157600080fd5b5061079c6004803603810190610797919061353a565b611bd1565b005b3480156107aa57600080fd5b506107b3611d52565b6040516107c091906141d2565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb91906134b7565b611d58565b005b3480156107fe57600080fd5b50610819600480360381019061081491906136ee565b611db4565b6040516108269190613dd0565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190613424565b611e68565b6040516108639190613d9a565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e91906133f7565b611efc565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857506109d782611ff4565b5b9050919050565b6109e761205e565b73ffffffffffffffffffffffffffffffffffffffff16610a056117e8565b73ffffffffffffffffffffffffffffffffffffffff1614610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5290613ff2565b60405180910390fd5b80600a8190555050565b606060018054610a7490614466565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa090614466565b8015610aed5780601f10610ac257610100808354040283529160200191610aed565b820191906000526020600020905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b6000610b0282612066565b610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890614192565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8782611095565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90614072565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1761205e565b73ffffffffffffffffffffffffffffffffffffffff161480610c465750610c4581610c4061205e565b611e68565b5b610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90613f52565b60405180910390fd5b610c90838383612073565b505050565b60008054905090565b6000600a54600954610cb09190614291565b421015905090565b610cc3838383612125565b505050565b610cd061205e565b73ffffffffffffffffffffffffffffffffffffffff16610cee6117e8565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90613ff2565b60405180910390fd5b8060098190555050565b600b5481565b6000610d5f836110b3565b8210610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613df2565b60405180910390fd5b6000610daa610c95565b905060008060005b83811015610f04576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ea457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ef65786841415610eed578195505050505050610f40565b83806001019450505b508080600101915050610db2565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3790614132565b60405180910390fd5b92915050565b61115c81565b610f6783838360405180602001604052806000815250611d58565b505050565b6000610f76610c95565b8210610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90613e92565b60405180910390fd5b819050919050565b610fc761205e565b73ffffffffffffffffffffffffffffffffffffffff16610fe56117e8565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290613ff2565b60405180910390fd5b8181600d919061104c929190613180565b505050565b600a5481565b6000600954421015801561107a5750600a546009546110769190614291565b4211155b905090565b66d529ae9e86000081565b668e1bc9bf04000081565b60006110a082612665565b600001519050919050565b600042905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90613f72565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6111a461205e565b73ffffffffffffffffffffffffffffffffffffffff166111c26117e8565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90613ff2565b60405180910390fd5b61122260006127ff565b565b828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5461129a82823360405160200161127f9190613cd4565b604051602081830303815290604052805190602001206128c5565b6112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090613f32565b60405180910390fd5b6002600854141561131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131690614152565b60405180910390fd5b60026008819055503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c906141b2565b60405180910390fd5b6009544210156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190613ef2565b60405180910390fd5b600383111561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613e72565b60405180910390fd5b61115c8361142a610c95565b6114349190614291565b1115611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90613f92565b60405180910390fd5b3483668e1bc9bf0400006114899190614318565b11156114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190613ed2565b60405180910390fd5b600383600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115179190614291565b1115611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90613e12565b60405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116335782600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115eb9190614291565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611678565b82600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61168233846128dc565b60016008819055505050505050565b61169961205e565b73ffffffffffffffffffffffffffffffffffffffff166116b76117e8565b73ffffffffffffffffffffffffffffffffffffffff161461170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490613ff2565b60405180910390fd5b80600b8190555050565b61171f61205e565b73ffffffffffffffffffffffffffffffffffffffff1661173d6117e8565b73ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90613ff2565b60405180910390fd5b600047116117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90613f12565b60405180910390fd5b60004790506117e533826128fa565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600381565b61181f61205e565b73ffffffffffffffffffffffffffffffffffffffff1661183d6117e8565b73ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613ff2565b60405180910390fd5b61115c8261189f610c95565b6118a99190614291565b11156118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613f92565b60405180910390fd5b600081836118f89190614536565b14611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90614112565b60405180910390fd5b60005b818361194791906142e7565b81101561196b5761195833836128dc565b8080611963906144c9565b91505061193b565b505050565b60606002805461197f90614466565b80601f01602080910402602001604051908101604052809291908181526020018280546119ab90614466565b80156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b5050505050905090565b60026008541415611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90614152565b60405180910390fd5b60026008819055503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906141b2565b60405180910390fd5b600a54600954611ace9190614291565b421015611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0790613fd2565b60405180910390fd5b61115c81611b1c610c95565b611b269190614291565b1115611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90613f92565b60405180910390fd5b348166d529ae9e860000611b7b9190614318565b1115611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390613ed2565b60405180910390fd5b611bc633826128dc565b600160088190555050565b611bd961205e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90614032565b60405180910390fd5b8060066000611c5461205e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d0161205e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d469190613d9a565b60405180910390a35050565b60095481565b611d63848484612125565b611d6f848484846129ab565b611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da5906140b2565b60405180910390fd5b50505050565b6060611dbf82612066565b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614012565b60405180910390fd5b6000611e08612b42565b9050600081511415611e295760405180602001604052806000815250611e60565b80611e3f600185611e3a9190614291565b612bd4565b604051602001611e50929190613cef565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f0461205e565b73ffffffffffffffffffffffffffffffffffffffff16611f226117e8565b73ffffffffffffffffffffffffffffffffffffffff1614611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f90613ff2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90613e32565b60405180910390fd5b611ff1816127ff565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061213082612665565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661215761205e565b73ffffffffffffffffffffffffffffffffffffffff1614806121b3575061217c61205e565b73ffffffffffffffffffffffffffffffffffffffff1661219b84610af7565b73ffffffffffffffffffffffffffffffffffffffff16145b806121cf57506121ce82600001516121c961205e565b611e68565b5b905080612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890614052565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227a90613fb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90613eb2565b60405180910390fd5b6123008585856001612d35565b6123106000848460000151612073565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125f55761255481612066565b156125f45782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461265e8585856001612d3b565b5050505050565b61266d613206565b61267682612066565b6126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90613e52565b60405180910390fd5b60008290505b600081106127be576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127af5780925050506127fa565b508080600190039150506126bb565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f190614172565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000826128d28584612d41565b1490509392505050565b6128f6828260405180602001604052806000815250612db6565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161292090613d1e565b60006040518083038185875af1925050503d806000811461295d576040519150601f19603f3d011682016040523d82523d6000602084013e612962565b606091505b50509050806129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299d90614092565b60405180910390fd5b505050565b60006129cc8473ffffffffffffffffffffffffffffffffffffffff16612dc8565b15612b35578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129f561205e565b8786866040518563ffffffff1660e01b8152600401612a179493929190613d4e565b602060405180830381600087803b158015612a3157600080fd5b505af1925050508015612a6257506040513d601f19601f82011682018060405250810190612a5f9190613674565b60015b612ae5573d8060008114612a92576040519150601f19603f3d011682016040523d82523d6000602084013e612a97565b606091505b50600081511415612add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad4906140b2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b3a565b600190505b949350505050565b6060600d8054612b5190614466565b80601f0160208091040260200160405190810160405280929190818152602001828054612b7d90614466565b8015612bca5780601f10612b9f57610100808354040283529160200191612bca565b820191906000526020600020905b815481529060010190602001808311612bad57829003601f168201915b5050505050905090565b60606000821415612c1c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d30565b600082905060005b60008214612c4e578080612c37906144c9565b915050600a82612c4791906142e7565b9150612c24565b60008167ffffffffffffffff811115612c6a57612c69614623565b5b6040519080825280601f01601f191660200182016040528015612c9c5781602001600182028036833780820191505090505b5090505b60008514612d2957600182612cb59190614372565b9150600a85612cc49190614536565b6030612cd09190614291565b60f81b818381518110612ce657612ce56145f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d2291906142e7565b9450612ca0565b8093505050505b919050565b50505050565b50505050565b60008082905060005b8451811015612dab576000858281518110612d6857612d676145f4565b5b60200260200101519050808311612d8a57612d838382612deb565b9250612d97565b612d948184612deb565b92505b508080612da3906144c9565b915050612d4a565b508091505092915050565b612dc38383836001612e02565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6f906140d2565b60405180910390fd5b6000841415612ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb3906140f2565b60405180910390fd5b612ec96000868387612d35565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561316357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561314e5761310e60008884886129ab565b61314d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613144906140b2565b60405180910390fd5b5b81806001019250508080600101915050613097565b5080600081905550506131796000868387612d3b565b5050505050565b82805461318c90614466565b90600052602060002090601f0160209004810192826131ae57600085556131f5565b82601f106131c757803560ff19168380011785556131f5565b828001600101855582156131f5579182015b828111156131f45782358255916020019190600101906131d9565b5b5090506132029190613240565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613259576000816000905550600101613241565b5090565b600061327061326b84614212565b6141ed565b90508281526020810184848401111561328c5761328b614661565b5b613297848285614424565b509392505050565b6000813590506132ae81614e83565b92915050565b60008083601f8401126132ca576132c9614657565b5b8235905067ffffffffffffffff8111156132e7576132e6614652565b5b6020830191508360208202830111156133035761330261465c565b5b9250929050565b60008135905061331981614e9a565b92915050565b60008135905061332e81614eb1565b92915050565b60008135905061334381614ec8565b92915050565b60008151905061335881614ec8565b92915050565b600082601f83011261337357613372614657565b5b813561338384826020860161325d565b91505092915050565b60008083601f8401126133a2576133a1614657565b5b8235905067ffffffffffffffff8111156133bf576133be614652565b5b6020830191508360018202830111156133db576133da61465c565b5b9250929050565b6000813590506133f181614edf565b92915050565b60006020828403121561340d5761340c61466b565b5b600061341b8482850161329f565b91505092915050565b6000806040838503121561343b5761343a61466b565b5b60006134498582860161329f565b925050602061345a8582860161329f565b9150509250929050565b60008060006060848603121561347d5761347c61466b565b5b600061348b8682870161329f565b935050602061349c8682870161329f565b92505060406134ad868287016133e2565b9150509250925092565b600080600080608085870312156134d1576134d061466b565b5b60006134df8782880161329f565b94505060206134f08782880161329f565b9350506040613501878288016133e2565b925050606085013567ffffffffffffffff81111561352257613521614666565b5b61352e8782880161335e565b91505092959194509250565b600080604083850312156135515761355061466b565b5b600061355f8582860161329f565b92505060206135708582860161330a565b9150509250929050565b600080604083850312156135915761359061466b565b5b600061359f8582860161329f565b92505060206135b0858286016133e2565b9150509250929050565b6000806000604084860312156135d3576135d261466b565b5b600084013567ffffffffffffffff8111156135f1576135f0614666565b5b6135fd868287016132b4565b93509350506020613610868287016133e2565b9150509250925092565b6000602082840312156136305761362f61466b565b5b600061363e8482850161331f565b91505092915050565b60006020828403121561365d5761365c61466b565b5b600061366b84828501613334565b91505092915050565b60006020828403121561368a5761368961466b565b5b600061369884828501613349565b91505092915050565b600080602083850312156136b8576136b761466b565b5b600083013567ffffffffffffffff8111156136d6576136d5614666565b5b6136e28582860161338c565b92509250509250929050565b6000602082840312156137045761370361466b565b5b6000613712848285016133e2565b91505092915050565b600080604083850312156137325761373161466b565b5b6000613740858286016133e2565b9250506020613751858286016133e2565b9150509250929050565b613764816143a6565b82525050565b61377b613776826143a6565b614512565b82525050565b61378a816143b8565b82525050565b613799816143c4565b82525050565b60006137aa82614243565b6137b48185614259565b93506137c4818560208601614433565b6137cd81614670565b840191505092915050565b60006137e38261424e565b6137ed8185614275565b93506137fd818560208601614433565b61380681614670565b840191505092915050565b600061381c8261424e565b6138268185614286565b9350613836818560208601614433565b80840191505092915050565b600061384f602283614275565b915061385a8261468e565b604082019050919050565b6000613872601a83614275565b915061387d826146dd565b602082019050919050565b6000613895602683614275565b91506138a082614706565b604082019050919050565b60006138b8602a83614275565b91506138c382614755565b604082019050919050565b60006138db601a83614275565b91506138e6826147a4565b602082019050919050565b60006138fe602383614275565b9150613909826147cd565b604082019050919050565b6000613921602583614275565b915061392c8261481c565b604082019050919050565b6000613944601883614275565b915061394f8261486b565b602082019050919050565b6000613967601283614275565b915061397282614894565b602082019050919050565b600061398a601483614275565b9150613995826148bd565b602082019050919050565b60006139ad601e83614275565b91506139b8826148e6565b602082019050919050565b60006139d0603983614275565b91506139db8261490f565b604082019050919050565b60006139f3602b83614275565b91506139fe8261495e565b604082019050919050565b6000613a16601983614275565b9150613a21826149ad565b602082019050919050565b6000613a39602683614275565b9150613a44826149d6565b604082019050919050565b6000613a5c600583614286565b9150613a6782614a25565b600582019050919050565b6000613a7f601683614275565b9150613a8a82614a4e565b602082019050919050565b6000613aa2602083614275565b9150613aad82614a77565b602082019050919050565b6000613ac5602f83614275565b9150613ad082614aa0565b604082019050919050565b6000613ae8601a83614275565b9150613af382614aef565b602082019050919050565b6000613b0b603283614275565b9150613b1682614b18565b604082019050919050565b6000613b2e602283614275565b9150613b3982614b67565b604082019050919050565b6000613b5160008361426a565b9150613b5c82614bb6565b600082019050919050565b6000613b74601083614275565b9150613b7f82614bb9565b602082019050919050565b6000613b97603383614275565b9150613ba282614be2565b604082019050919050565b6000613bba602183614275565b9150613bc582614c31565b604082019050919050565b6000613bdd602883614275565b9150613be882614c80565b604082019050919050565b6000613c00602583614275565b9150613c0b82614ccf565b604082019050919050565b6000613c23602e83614275565b9150613c2e82614d1e565b604082019050919050565b6000613c46601f83614275565b9150613c5182614d6d565b602082019050919050565b6000613c69602f83614275565b9150613c7482614d96565b604082019050919050565b6000613c8c602d83614275565b9150613c9782614de5565b604082019050919050565b6000613caf602383614275565b9150613cba82614e34565b604082019050919050565b613cce8161441a565b82525050565b6000613ce0828461376a565b60148201915081905092915050565b6000613cfb8285613811565b9150613d078284613811565b9150613d1282613a4f565b91508190509392505050565b6000613d2982613b44565b9150819050919050565b6000602082019050613d48600083018461375b565b92915050565b6000608082019050613d63600083018761375b565b613d70602083018661375b565b613d7d6040830185613cc5565b8181036060830152613d8f818461379f565b905095945050505050565b6000602082019050613daf6000830184613781565b92915050565b6000602082019050613dca6000830184613790565b92915050565b60006020820190508181036000830152613dea81846137d8565b905092915050565b60006020820190508181036000830152613e0b81613842565b9050919050565b60006020820190508181036000830152613e2b81613865565b9050919050565b60006020820190508181036000830152613e4b81613888565b9050919050565b60006020820190508181036000830152613e6b816138ab565b9050919050565b60006020820190508181036000830152613e8b816138ce565b9050919050565b60006020820190508181036000830152613eab816138f1565b9050919050565b60006020820190508181036000830152613ecb81613914565b9050919050565b60006020820190508181036000830152613eeb81613937565b9050919050565b60006020820190508181036000830152613f0b8161395a565b9050919050565b60006020820190508181036000830152613f2b8161397d565b9050919050565b60006020820190508181036000830152613f4b816139a0565b9050919050565b60006020820190508181036000830152613f6b816139c3565b9050919050565b60006020820190508181036000830152613f8b816139e6565b9050919050565b60006020820190508181036000830152613fab81613a09565b9050919050565b60006020820190508181036000830152613fcb81613a2c565b9050919050565b60006020820190508181036000830152613feb81613a72565b9050919050565b6000602082019050818103600083015261400b81613a95565b9050919050565b6000602082019050818103600083015261402b81613ab8565b9050919050565b6000602082019050818103600083015261404b81613adb565b9050919050565b6000602082019050818103600083015261406b81613afe565b9050919050565b6000602082019050818103600083015261408b81613b21565b9050919050565b600060208201905081810360008301526140ab81613b67565b9050919050565b600060208201905081810360008301526140cb81613b8a565b9050919050565b600060208201905081810360008301526140eb81613bad565b9050919050565b6000602082019050818103600083015261410b81613bd0565b9050919050565b6000602082019050818103600083015261412b81613bf3565b9050919050565b6000602082019050818103600083015261414b81613c16565b9050919050565b6000602082019050818103600083015261416b81613c39565b9050919050565b6000602082019050818103600083015261418b81613c5c565b9050919050565b600060208201905081810360008301526141ab81613c7f565b9050919050565b600060208201905081810360008301526141cb81613ca2565b9050919050565b60006020820190506141e76000830184613cc5565b92915050565b60006141f7614208565b90506142038282614498565b919050565b6000604051905090565b600067ffffffffffffffff82111561422d5761422c614623565b5b61423682614670565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061429c8261441a565b91506142a78361441a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142dc576142db614567565b5b828201905092915050565b60006142f28261441a565b91506142fd8361441a565b92508261430d5761430c614596565b5b828204905092915050565b60006143238261441a565b915061432e8361441a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561436757614366614567565b5b828202905092915050565b600061437d8261441a565b91506143888361441a565b92508282101561439b5761439a614567565b5b828203905092915050565b60006143b1826143fa565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614451578082015181840152602081019050614436565b83811115614460576000848401525b50505050565b6000600282049050600182168061447e57607f821691505b60208210811415614492576144916145c5565b5b50919050565b6144a182614670565b810181811067ffffffffffffffff821117156144c0576144bf614623565b5b80604052505050565b60006144d48261441a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561450757614506614567565b5b600182019050919050565b600061451d82614524565b9050919050565b600061452f82614681565b9050919050565b60006145418261441a565b915061454c8361441a565b92508261455c5761455b614596565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f457863656564732070726573616c65206d696e74206c696d6974000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820746f6b656e207075726368617365000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f53656e7420696e636f7272656374204554482076616c75650000000000000000600082015250565b7f50726573616c65206e6f74206163746976650000000000000000000000000000600082015250565b7f4e6f2066756e647320746f207769746864726177000000000000000000000000600082015250565b7f4164647265737320646f6573206e6f7420657869737420696e206c6973740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4d696e74206578636565647320746f74616c20737570706c7900000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f5075626c69632073616c65206e6f742061637469766500000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e742061206d756c7469706c65206f66206261746360008201527f6853697a65000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f43616e2774206d696e74207468726f75676820616e6f7468657220636f6e747260008201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b614e8c816143a6565b8114614e9757600080fd5b50565b614ea3816143b8565b8114614eae57600080fd5b50565b614eba816143c4565b8114614ec557600080fd5b50565b614ed1816143ce565b8114614edc57600080fd5b50565b614ee88161441a565b8114614ef357600080fd5b5056fea2646970667358221220e46a1d0027c46285b78e3c92124d8bbda700dbbfcd57b815ae707f7bf7b92ee664736f6c63430008070033
Deployed Bytecode Sourcemap
43662:4650:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30531:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47705:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32417:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33979:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33500:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28788:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48021:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34855:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47567:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44097:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29452:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43763:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35088:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28965:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46661:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44058:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47839:174;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43863:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43940:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32226:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48168:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30967:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23663:103;;;;;;;;;;;;;:::i;:::-;;44649:911;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47265:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46045:226;;;;;;;;;;;;;:::i;:::-;;23012:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43811:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46279:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32586:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45568:469;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34265:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44020:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35336:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46907:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34624:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23921:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30531:372;30633:4;30685:25;30670:40;;;:11;:40;;;;:105;;;;30742:33;30727:48;;;:11;:48;;;;30670:105;:172;;;;30807:35;30792:50;;;:11;:50;;;;30670:172;:225;;;;30859:36;30883:11;30859:23;:36::i;:::-;30670:225;30650:245;;30531:372;;;:::o;47705:126::-;23243:12;:10;:12::i;:::-;23232:23;;:7;:5;:7::i;:::-;:23;;;23224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47807:16:::1;47789:15;:34;;;;47705:126:::0;:::o;32417:100::-;32471:13;32504:5;32497:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32417:100;:::o;33979:214::-;34047:7;34075:16;34083:7;34075;:16::i;:::-;34067:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;34161:15;:24;34177:7;34161:24;;;;;;;;;;;;;;;;;;;;;34154:31;;33979:214;;;:::o;33500:413::-;33573:13;33589:24;33605:7;33589:15;:24::i;:::-;33573:40;;33638:5;33632:11;;:2;:11;;;;33624:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33733:5;33717:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33742:37;33759:5;33766:12;:10;:12::i;:::-;33742:16;:37::i;:::-;33717:62;33695:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33877:28;33886:2;33890:7;33899:5;33877:8;:28::i;:::-;33562:351;33500:413;;:::o;28788:100::-;28841:7;28868:12;;28861:19;;28788:100;:::o;48021:139::-;48072:4;48136:15;;48116:16;;:35;;;;:::i;:::-;48096:15;:56;;48089:63;;48021:139;:::o;34855:162::-;34981:28;34991:4;34997:2;35001:7;34981:9;:28::i;:::-;34855:162;;;:::o;47567:130::-;23243:12;:10;:12::i;:::-;23232:23;;:7;:5;:7::i;:::-;:23;;;23224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47672:17:::1;47653:16;:36;;;;47567:130:::0;:::o;44097:25::-;;;;:::o;29452:1007::-;29541:7;29577:16;29587:5;29577:9;:16::i;:::-;29569:5;:24;29561:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29643:22;29668:13;:11;:13::i;:::-;29643:38;;29692:19;29722:25;29911:9;29906:466;29926:14;29922:1;:18;29906:466;;;29966:31;30000:11;:14;30012:1;30000:14;;;;;;;;;;;29966:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30063:1;30037:28;;:9;:14;;;:28;;;30033:111;;30110:9;:14;;;30090:34;;30033:111;30187:5;30166:26;;:17;:26;;;30162:195;;;30236:5;30221:11;:20;30217:85;;;30277:1;30270:8;;;;;;;;;30217:85;30324:13;;;;;;;30162:195;29947:425;29942:3;;;;;;;29906:466;;;;30395:56;;;;;;;;;;:::i;:::-;;;;;;;;29452:1007;;;;;:::o;43763:41::-;43800:4;43763:41;:::o;35088:177::-;35218:39;35235:4;35241:2;35245:7;35218:39;;;;;;;;;;;;:16;:39::i;:::-;35088:177;;;:::o;28965:187::-;29032:7;29068:13;:11;:13::i;:::-;29060:5;:21;29052:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29139:5;29132:12;;28965:187;;;:::o;46661:111::-;23243:12;:10;:12::i;:::-;23232:23;;:7;:5;:7::i;:::-;:23;;;23224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46756:8:::1;;46737:16;:27;;;;;;;:::i;:::-;;46661:111:::0;;:::o;44058:30::-;;;;:::o;47839:174::-;47887:4;47930:16;;47911:15;:35;;:94;;;;;47989:15;;47970:16;;:34;;;;:::i;:::-;47950:15;:55;;47911:94;47904:101;;47839:174;:::o;43863:49::-;43902:10;43863:49;:::o;43940:50::-;43980:10;43940:50;:::o;32226:124::-;32290:7;32317:20;32329:7;32317:11;:20::i;:::-;:25;;;32310:32;;32226:124;;;:::o;48168:104::-;48222:7;48249:15;48242:22;;48168:104;:::o;30967:221::-;31031:7;31076:1;31059:19;;:5;:19;;;;31051:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;31152:12;:19;31165:5;31152:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31144:36;;31137:43;;30967:221;;;:::o;23663:103::-;23243:12;:10;:12::i;:::-;23232:23;;:7;:5;:7::i;:::-;:23;;;23224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23728:30:::1;23755:1;23728:18;:30::i;:::-;23663:103::o:0;44649:911::-;44749:6;;44411:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44757:10;;44502:78;44521:11;44534:4;44567:10;44550:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;44540:39;;;;;;44502:18;:78::i;:::-;44494:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;26133:1:::1;26731:7;;:19;;26723:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26133:1;26864:7;:18;;;;44815:9:::2;44801:23;;:10;:23;;;44793:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44902:16;;44883:15;:35;;44875:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43855:1;44960:6;:27;;44952:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43800:4;45053:6;45037:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;45029:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;45148:9;45138:6;43980:10;45122:22;;;;:::i;:::-;:35;;45114:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;43855:1;45228:6;45205:8;:20;45214:10;45205:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:50;;45197:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;45375:1;45352:8;:20;45361:10;45352:20;;;;;;;;;;;;;;;;:24;45348:163;;;45435:6;45412:8;:20;45421:10;45412:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;45389:8;:20;45398:10;45389:20;;;;;;;;;;;;;;;:52;;;;45348:163;;;45493:6;45470:8;:20;45479:10;45470:20;;;;;;;;;;;;;;;:29;;;;45348:163;45523:29;45533:10;45545:6;45523:9;:29::i;:::-;26089:1:::1;27043:7;:22;;;;44649:911:::0;;;;;:::o;47265:106::-;23243:12;:10;:12::i;:::-;23232:23;;:7;:5;:7::i;:::-;:23;;;23224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47352:11:::1;47339:10;:24;;;;47265:106:::0;:::o;46045:226::-;23243:12;:10;:12::i;:::-;23232:23;;:7;:5;:7::i;:::-;:23;;;23224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46130:1:::1;46106:21;:25;46098:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46167:23;46193:21;46167:47;;46225:38;46235:10;46247:15;46225:9;:38::i;:::-;46087:184;46045:226::o:0;23012:87::-;23058:7;23085:6;;;;;;;;;;;23078:13;;23012:87;:::o;43811:45::-;43855:1;43811:45;:::o;46279:372::-;23243:12;:10;:12::i;:::-;23232:23;;:7;:5;:7::i;:::-;:23;;;23224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43800:4:::1;46389:6;46373:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;46365:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46480:1;46467:9;46458:6;:18;;;;:::i;:::-;:23;46450:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46541:9;46536:108;46569:9;46560:6;:18;;;;:::i;:::-;46556:1;:22;46536:108;;;46600:32;46610:10;46622:9;46600;:32::i;:::-;46580:3;;;;;:::i;:::-;;;;46536:108;;;;46279:372:::0;;:::o;32586:104::-;32642:13;32675:7;32668:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32586:104;:::o;45568:469::-;26133:1;26731:7;;:19;;26723:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26133:1;26864:7;:18;;;;45661:9:::1;45647:23;;:10;:23;;;45639:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;45769:15;;45749:16;;:35;;;;:::i;:::-;45729:15;:56;;45721:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;43800:4;45847:6;45831:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;45823:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;45941:9;45931:6;43902:10;45916:21;;;;:::i;:::-;:34;;45908:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;46000:29;46010:10;46022:6;46000:9;:29::i;:::-;26089:1:::0;27043:7;:22;;;;45568:469;:::o;34265:288::-;34372:12;:10;:12::i;:::-;34360:24;;:8;:24;;;;34352:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34473:8;34428:18;:32;34447:12;:10;:12::i;:::-;34428:32;;;;;;;;;;;;;;;:42;34461:8;34428:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34526:8;34497:48;;34512:12;:10;:12::i;:::-;34497:48;;;34536:8;34497:48;;;;;;:::i;:::-;;;;;;;;34265:288;;:::o;44020:31::-;;;;:::o;35336:355::-;35495:28;35505:4;35511:2;35515:7;35495:9;:28::i;:::-;35556:48;35579:4;35585:2;35589:7;35598:5;35556:22;:48::i;:::-;35534:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;35336:355;;;;:::o;46907:350::-;46980:13;47014:16;47022:7;47014;:16::i;:::-;47006:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;47095:21;47119:10;:8;:10::i;:::-;47095:34;;47172:1;47153:7;47147:21;:26;;:102;;;;;;;;;;;;;;;;;47200:7;47209:24;47220:1;47210:7;:11;;;;:::i;:::-;47209:22;:24::i;:::-;47183:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47147:102;47140:109;;;46907:350;;;:::o;34624:164::-;34721:4;34745:18;:25;34764:5;34745:25;;;;;;;;;;;;;;;:35;34771:8;34745:35;;;;;;;;;;;;;;;;;;;;;;;;;34738:42;;34624:164;;;;:::o;23921:201::-;23243:12;:10;:12::i;:::-;23232:23;;:7;:5;:7::i;:::-;:23;;;23224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24030:1:::1;24010:22;;:8;:22;;;;24002:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24086:28;24105:8;24086:18;:28::i;:::-;23921:201:::0;:::o;21929:157::-;22014:4;22053:25;22038:40;;;:11;:40;;;;22031:47;;21929:157;;;:::o;19032:98::-;19085:7;19112:10;19105:17;;19032:98;:::o;35946:111::-;36003:4;36037:12;;36027:7;:22;36020:29;;35946:111;;;:::o;40866:196::-;41008:2;40981:15;:24;40997:7;40981:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41046:7;41042:2;41026:28;;41035:5;41026:28;;;;;;;;;;;;40866:196;;;:::o;38746:2002::-;38861:35;38899:20;38911:7;38899:11;:20::i;:::-;38861:58;;38932:22;38974:13;:18;;;38958:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;39033:12;:10;:12::i;:::-;39009:36;;:20;39021:7;39009:11;:20::i;:::-;:36;;;38958:87;:154;;;;39062:50;39079:13;:18;;;39099:12;:10;:12::i;:::-;39062:16;:50::i;:::-;38958:154;38932:181;;39134:17;39126:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;39249:4;39227:26;;:13;:18;;;:26;;;39219:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39329:1;39315:16;;:2;:16;;;;39307:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39386:43;39408:4;39414:2;39418:7;39427:1;39386:21;:43::i;:::-;39494:49;39511:1;39515:7;39524:13;:18;;;39494:8;:49::i;:::-;39869:1;39839:12;:18;39852:4;39839:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39913:1;39885:12;:16;39898:2;39885:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39959:2;39931:11;:20;39943:7;39931:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;40021:15;39976:11;:20;39988:7;39976:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40289:19;40321:1;40311:7;:11;40289:33;;40382:1;40341:43;;:11;:24;40353:11;40341:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40337:295;;;40409:20;40417:11;40409:7;:20::i;:::-;40405:212;;;40486:13;:18;;;40454:11;:24;40466:11;40454:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40569:13;:28;;;40527:11;:24;40539:11;40527:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40405:212;40337:295;39814:829;40679:7;40675:2;40660:27;;40669:4;40660:27;;;;;;;;;;;;40698:42;40719:4;40725:2;40729:7;40738:1;40698:20;:42::i;:::-;38850:1898;;38746:2002;;;:::o;31627:537::-;31688:21;;:::i;:::-;31730:16;31738:7;31730;:16::i;:::-;31722:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31836:12;31851:7;31836:22;;31831:245;31868:1;31860:4;:9;31831:245;;31898:31;31932:11;:17;31944:4;31932:17;;;;;;;;;;;31898:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31998:1;31972:28;;:9;:14;;;:28;;;31968:93;;32032:9;32025:16;;;;;;31968:93;31879:197;31871:6;;;;;;;;31831:245;;;;32099:57;;;;;;;;;;:::i;:::-;;;;;;;;31627:537;;;;:::o;24284:191::-;24358:16;24377:6;;;;;;;;;;;24358:25;;24403:8;24394:6;;:17;;;;;;;;;;;;;;;;;;24458:8;24427:40;;24448:8;24427:40;;;;;;;;;;;;24347:128;24284:191;:::o;868:190::-;993:4;1046;1017:25;1030:5;1037:4;1017:12;:25::i;:::-;:33;1010:40;;868:190;;;;;:::o;36065:104::-;36134:27;36144:2;36148:8;36134:27;;;;;;;;;;;;:9;:27::i;:::-;36065:104;;:::o;47379:180::-;47453:12;47471:8;:13;;47492:7;47471:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47452:52;;;47523:7;47515:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;47441:118;47379:180;;:::o;41627:804::-;41782:4;41803:15;:2;:13;;;:15::i;:::-;41799:625;;;41855:2;41839:36;;;41876:12;:10;:12::i;:::-;41890:4;41896:7;41905:5;41839:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41835:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42102:1;42085:6;:13;:18;42081:273;;;42128:61;;;;;;;;;;:::i;:::-;;;;;;;;42081:273;42304:6;42298:13;42289:6;42285:2;42281:15;42274:38;41835:534;41972:45;;;41962:55;;;:6;:55;;;;41955:62;;;;;41799:625;42408:4;42401:11;;41627:804;;;;;;;:::o;46780:117::-;46840:13;46873:16;46866:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46780:117;:::o;19472:723::-;19528:13;19758:1;19749:5;:10;19745:53;;;19776:10;;;;;;;;;;;;;;;;;;;;;19745:53;19808:12;19823:5;19808:20;;19839:14;19864:78;19879:1;19871:4;:9;19864:78;;19897:8;;;;;:::i;:::-;;;;19928:2;19920:10;;;;;:::i;:::-;;;19864:78;;;19952:19;19984:6;19974:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19952:39;;20002:154;20018:1;20009:5;:10;20002:154;;20046:1;20036:11;;;;;:::i;:::-;;;20113:2;20105:5;:10;;;;:::i;:::-;20092:2;:24;;;;:::i;:::-;20079:39;;20062:6;20069;20062:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;20142:2;20133:11;;;;;:::i;:::-;;;20002:154;;;20180:6;20166:21;;;;;19472:723;;;;:::o;42926:159::-;;;;;:::o;43497:158::-;;;;;:::o;1420:675::-;1503:7;1523:20;1546:4;1523:27;;1566:9;1561:497;1585:5;:12;1581:1;:16;1561:497;;;1619:20;1642:5;1648:1;1642:8;;;;;;;;:::i;:::-;;;;;;;;1619:31;;1685:12;1669;:28;1665:382;;1812:42;1827:12;1841;1812:14;:42::i;:::-;1797:57;;1665:382;;;1989:42;2004:12;2018;1989:14;:42::i;:::-;1974:57;;1665:382;1604:454;1599:3;;;;;:::i;:::-;;;;1561:497;;;;2075:12;2068:19;;;1420:675;;;;:::o;36532:163::-;36655:32;36661:2;36665:8;36675:5;36682:4;36655:5;:32::i;:::-;36532:163;;;:::o;11220:326::-;11280:4;11537:1;11515:7;:19;;;:23;11508:30;;11220:326;;;:::o;2103:224::-;2171:13;2234:1;2228:4;2221:15;2263:1;2257:4;2250:15;2304:4;2298;2288:21;2279:30;;2103:224;;;;:::o;36954:1538::-;37093:20;37116:12;;37093:35;;37161:1;37147:16;;:2;:16;;;;37139:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37232:1;37220:8;:13;;37212:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37291:61;37321:1;37325:2;37329:12;37343:8;37291:21;:61::i;:::-;37666:8;37630:12;:16;37643:2;37630:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37731:8;37690:12;:16;37703:2;37690:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37790:2;37757:11;:25;37769:12;37757:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37857:15;37807:11;:25;37819:12;37807:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37890:20;37913:12;37890:35;;37947:9;37942:415;37962:8;37958:1;:12;37942:415;;;38026:12;38022:2;38001:38;;38018:1;38001:38;;;;;;;;;;;;38062:4;38058:249;;;38125:59;38156:1;38160:2;38164:12;38178:5;38125:22;:59::i;:::-;38091:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;38058:249;38327:14;;;;;;;37972:3;;;;;;;37942:415;;;;38388:12;38373;:27;;;;37605:807;38424:60;38453:1;38457:2;38461:12;38475:8;38424:20;:60::i;:::-;37082:1410;36954:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:139::-;1344:5;1382:6;1369:20;1360:29;;1398:33;1425:5;1398:33;:::i;:::-;1298:139;;;;:::o;1443:137::-;1488:5;1526:6;1513:20;1504:29;;1542:32;1568:5;1542:32;:::i;:::-;1443:137;;;;:::o;1586:141::-;1642:5;1673:6;1667:13;1658:22;;1689:32;1715:5;1689:32;:::i;:::-;1586:141;;;;:::o;1746:338::-;1801:5;1850:3;1843:4;1835:6;1831:17;1827:27;1817:122;;1858:79;;:::i;:::-;1817:122;1975:6;1962:20;2000:78;2074:3;2066:6;2059:4;2051:6;2047:17;2000:78;:::i;:::-;1991:87;;1807:277;1746:338;;;;:::o;2104:553::-;2162:8;2172:6;2222:3;2215:4;2207:6;2203:17;2199:27;2189:122;;2230:79;;:::i;:::-;2189:122;2343:6;2330:20;2320:30;;2373:18;2365:6;2362:30;2359:117;;;2395:79;;:::i;:::-;2359:117;2509:4;2501:6;2497:17;2485:29;;2563:3;2555:4;2547:6;2543:17;2533:8;2529:32;2526:41;2523:128;;;2570:79;;:::i;:::-;2523:128;2104:553;;;;;:::o;2663:139::-;2709:5;2747:6;2734:20;2725:29;;2763:33;2790:5;2763:33;:::i;:::-;2663:139;;;;:::o;2808:329::-;2867:6;2916:2;2904:9;2895:7;2891:23;2887:32;2884:119;;;2922:79;;:::i;:::-;2884:119;3042:1;3067:53;3112:7;3103:6;3092:9;3088:22;3067:53;:::i;:::-;3057:63;;3013:117;2808:329;;;;:::o;3143:474::-;3211:6;3219;3268:2;3256:9;3247:7;3243:23;3239:32;3236:119;;;3274:79;;:::i;:::-;3236:119;3394:1;3419:53;3464:7;3455:6;3444:9;3440:22;3419:53;:::i;:::-;3409:63;;3365:117;3521:2;3547:53;3592:7;3583:6;3572:9;3568:22;3547:53;:::i;:::-;3537:63;;3492:118;3143:474;;;;;:::o;3623:619::-;3700:6;3708;3716;3765:2;3753:9;3744:7;3740:23;3736:32;3733:119;;;3771:79;;:::i;:::-;3733:119;3891:1;3916:53;3961:7;3952:6;3941:9;3937:22;3916:53;:::i;:::-;3906:63;;3862:117;4018:2;4044:53;4089:7;4080:6;4069:9;4065:22;4044:53;:::i;:::-;4034:63;;3989:118;4146:2;4172:53;4217:7;4208:6;4197:9;4193:22;4172:53;:::i;:::-;4162:63;;4117:118;3623:619;;;;;:::o;4248:943::-;4343:6;4351;4359;4367;4416:3;4404:9;4395:7;4391:23;4387:33;4384:120;;;4423:79;;:::i;:::-;4384:120;4543:1;4568:53;4613:7;4604:6;4593:9;4589:22;4568:53;:::i;:::-;4558:63;;4514:117;4670:2;4696:53;4741:7;4732:6;4721:9;4717:22;4696:53;:::i;:::-;4686:63;;4641:118;4798:2;4824:53;4869:7;4860:6;4849:9;4845:22;4824:53;:::i;:::-;4814:63;;4769:118;4954:2;4943:9;4939:18;4926:32;4985:18;4977:6;4974:30;4971:117;;;5007:79;;:::i;:::-;4971:117;5112:62;5166:7;5157:6;5146:9;5142:22;5112:62;:::i;:::-;5102:72;;4897:287;4248:943;;;;;;;:::o;5197:468::-;5262:6;5270;5319:2;5307:9;5298:7;5294:23;5290:32;5287:119;;;5325:79;;:::i;:::-;5287:119;5445:1;5470:53;5515:7;5506:6;5495:9;5491:22;5470:53;:::i;:::-;5460:63;;5416:117;5572:2;5598:50;5640:7;5631:6;5620:9;5616:22;5598:50;:::i;:::-;5588:60;;5543:115;5197:468;;;;;:::o;5671:474::-;5739:6;5747;5796:2;5784:9;5775:7;5771:23;5767:32;5764:119;;;5802:79;;:::i;:::-;5764:119;5922:1;5947:53;5992:7;5983:6;5972:9;5968:22;5947:53;:::i;:::-;5937:63;;5893:117;6049:2;6075:53;6120:7;6111:6;6100:9;6096:22;6075:53;:::i;:::-;6065:63;;6020:118;5671:474;;;;;:::o;6151:704::-;6246:6;6254;6262;6311:2;6299:9;6290:7;6286:23;6282:32;6279:119;;;6317:79;;:::i;:::-;6279:119;6465:1;6454:9;6450:17;6437:31;6495:18;6487:6;6484:30;6481:117;;;6517:79;;:::i;:::-;6481:117;6630:80;6702:7;6693:6;6682:9;6678:22;6630:80;:::i;:::-;6612:98;;;;6408:312;6759:2;6785:53;6830:7;6821:6;6810:9;6806:22;6785:53;:::i;:::-;6775:63;;6730:118;6151:704;;;;;:::o;6861:329::-;6920:6;6969:2;6957:9;6948:7;6944:23;6940:32;6937:119;;;6975:79;;:::i;:::-;6937:119;7095:1;7120:53;7165:7;7156:6;7145:9;7141:22;7120:53;:::i;:::-;7110:63;;7066:117;6861:329;;;;:::o;7196:327::-;7254:6;7303:2;7291:9;7282:7;7278:23;7274:32;7271:119;;;7309:79;;:::i;:::-;7271:119;7429:1;7454:52;7498:7;7489:6;7478:9;7474:22;7454:52;:::i;:::-;7444:62;;7400:116;7196:327;;;;:::o;7529:349::-;7598:6;7647:2;7635:9;7626:7;7622:23;7618:32;7615:119;;;7653:79;;:::i;:::-;7615:119;7773:1;7798:63;7853:7;7844:6;7833:9;7829:22;7798:63;:::i;:::-;7788:73;;7744:127;7529:349;;;;:::o;7884:529::-;7955:6;7963;8012:2;8000:9;7991:7;7987:23;7983:32;7980:119;;;8018:79;;:::i;:::-;7980:119;8166:1;8155:9;8151:17;8138:31;8196:18;8188:6;8185:30;8182:117;;;8218:79;;:::i;:::-;8182:117;8331:65;8388:7;8379:6;8368:9;8364:22;8331:65;:::i;:::-;8313:83;;;;8109:297;7884:529;;;;;:::o;8419:329::-;8478:6;8527:2;8515:9;8506:7;8502:23;8498:32;8495:119;;;8533:79;;:::i;:::-;8495:119;8653:1;8678:53;8723:7;8714:6;8703:9;8699:22;8678:53;:::i;:::-;8668:63;;8624:117;8419:329;;;;:::o;8754:474::-;8822:6;8830;8879:2;8867:9;8858:7;8854:23;8850:32;8847:119;;;8885:79;;:::i;:::-;8847:119;9005:1;9030:53;9075:7;9066:6;9055:9;9051:22;9030:53;:::i;:::-;9020:63;;8976:117;9132:2;9158:53;9203:7;9194:6;9183:9;9179:22;9158:53;:::i;:::-;9148:63;;9103:118;8754:474;;;;;:::o;9234:118::-;9321:24;9339:5;9321:24;:::i;:::-;9316:3;9309:37;9234:118;;:::o;9358:157::-;9463:45;9483:24;9501:5;9483:24;:::i;:::-;9463:45;:::i;:::-;9458:3;9451:58;9358:157;;:::o;9521:109::-;9602:21;9617:5;9602:21;:::i;:::-;9597:3;9590:34;9521:109;;:::o;9636:118::-;9723:24;9741:5;9723:24;:::i;:::-;9718:3;9711:37;9636:118;;:::o;9760:360::-;9846:3;9874:38;9906:5;9874:38;:::i;:::-;9928:70;9991:6;9986:3;9928:70;:::i;:::-;9921:77;;10007:52;10052:6;10047:3;10040:4;10033:5;10029:16;10007:52;:::i;:::-;10084:29;10106:6;10084:29;:::i;:::-;10079:3;10075:39;10068:46;;9850:270;9760:360;;;;:::o;10126:364::-;10214:3;10242:39;10275:5;10242:39;:::i;:::-;10297:71;10361:6;10356:3;10297:71;:::i;:::-;10290:78;;10377:52;10422:6;10417:3;10410:4;10403:5;10399:16;10377:52;:::i;:::-;10454:29;10476:6;10454:29;:::i;:::-;10449:3;10445:39;10438:46;;10218:272;10126:364;;;;:::o;10496:377::-;10602:3;10630:39;10663:5;10630:39;:::i;:::-;10685:89;10767:6;10762:3;10685:89;:::i;:::-;10678:96;;10783:52;10828:6;10823:3;10816:4;10809:5;10805:16;10783:52;:::i;:::-;10860:6;10855:3;10851:16;10844:23;;10606:267;10496:377;;;;:::o;10879:366::-;11021:3;11042:67;11106:2;11101:3;11042:67;:::i;:::-;11035:74;;11118:93;11207:3;11118:93;:::i;:::-;11236:2;11231:3;11227:12;11220:19;;10879:366;;;:::o;11251:::-;11393:3;11414:67;11478:2;11473:3;11414:67;:::i;:::-;11407:74;;11490:93;11579:3;11490:93;:::i;:::-;11608:2;11603:3;11599:12;11592:19;;11251:366;;;:::o;11623:::-;11765:3;11786:67;11850:2;11845:3;11786:67;:::i;:::-;11779:74;;11862:93;11951:3;11862:93;:::i;:::-;11980:2;11975:3;11971:12;11964:19;;11623:366;;;:::o;11995:::-;12137:3;12158:67;12222:2;12217:3;12158:67;:::i;:::-;12151:74;;12234:93;12323:3;12234:93;:::i;:::-;12352:2;12347:3;12343:12;12336:19;;11995:366;;;:::o;12367:::-;12509:3;12530:67;12594:2;12589:3;12530:67;:::i;:::-;12523:74;;12606:93;12695:3;12606:93;:::i;:::-;12724:2;12719:3;12715:12;12708:19;;12367:366;;;:::o;12739:::-;12881:3;12902:67;12966:2;12961:3;12902:67;:::i;:::-;12895:74;;12978:93;13067:3;12978:93;:::i;:::-;13096:2;13091:3;13087:12;13080:19;;12739:366;;;:::o;13111:::-;13253:3;13274:67;13338:2;13333:3;13274:67;:::i;:::-;13267:74;;13350:93;13439:3;13350:93;:::i;:::-;13468:2;13463:3;13459:12;13452:19;;13111:366;;;:::o;13483:::-;13625:3;13646:67;13710:2;13705:3;13646:67;:::i;:::-;13639:74;;13722:93;13811:3;13722:93;:::i;:::-;13840:2;13835:3;13831:12;13824:19;;13483:366;;;:::o;13855:::-;13997:3;14018:67;14082:2;14077:3;14018:67;:::i;:::-;14011:74;;14094:93;14183:3;14094:93;:::i;:::-;14212:2;14207:3;14203:12;14196:19;;13855:366;;;:::o;14227:::-;14369:3;14390:67;14454:2;14449:3;14390:67;:::i;:::-;14383:74;;14466:93;14555:3;14466:93;:::i;:::-;14584:2;14579:3;14575:12;14568:19;;14227:366;;;:::o;14599:::-;14741:3;14762:67;14826:2;14821:3;14762:67;:::i;:::-;14755:74;;14838:93;14927:3;14838:93;:::i;:::-;14956:2;14951:3;14947:12;14940:19;;14599:366;;;:::o;14971:::-;15113:3;15134:67;15198:2;15193:3;15134:67;:::i;:::-;15127:74;;15210:93;15299:3;15210:93;:::i;:::-;15328:2;15323:3;15319:12;15312:19;;14971:366;;;:::o;15343:::-;15485:3;15506:67;15570:2;15565:3;15506:67;:::i;:::-;15499:74;;15582:93;15671:3;15582:93;:::i;:::-;15700:2;15695:3;15691:12;15684:19;;15343:366;;;:::o;15715:::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:::-;16229:3;16250:67;16314:2;16309:3;16250:67;:::i;:::-;16243:74;;16326:93;16415:3;16326:93;:::i;:::-;16444:2;16439:3;16435:12;16428:19;;16087:366;;;:::o;16459:400::-;16619:3;16640:84;16722:1;16717:3;16640:84;:::i;:::-;16633:91;;16733:93;16822:3;16733:93;:::i;:::-;16851:1;16846:3;16842:11;16835:18;;16459:400;;;:::o;16865:366::-;17007:3;17028:67;17092:2;17087:3;17028:67;:::i;:::-;17021:74;;17104:93;17193:3;17104:93;:::i;:::-;17222:2;17217:3;17213:12;17206:19;;16865:366;;;:::o;17237:::-;17379:3;17400:67;17464:2;17459:3;17400:67;:::i;:::-;17393:74;;17476:93;17565:3;17476:93;:::i;:::-;17594:2;17589:3;17585:12;17578:19;;17237:366;;;:::o;17609:::-;17751:3;17772:67;17836:2;17831:3;17772:67;:::i;:::-;17765:74;;17848:93;17937:3;17848:93;:::i;:::-;17966:2;17961:3;17957:12;17950:19;;17609:366;;;:::o;17981:::-;18123:3;18144:67;18208:2;18203:3;18144:67;:::i;:::-;18137:74;;18220:93;18309:3;18220:93;:::i;:::-;18338:2;18333:3;18329:12;18322:19;;17981:366;;;:::o;18353:::-;18495:3;18516:67;18580:2;18575:3;18516:67;:::i;:::-;18509:74;;18592:93;18681:3;18592:93;:::i;:::-;18710:2;18705:3;18701:12;18694:19;;18353:366;;;:::o;18725:::-;18867:3;18888:67;18952:2;18947:3;18888:67;:::i;:::-;18881:74;;18964:93;19053:3;18964:93;:::i;:::-;19082:2;19077:3;19073:12;19066:19;;18725:366;;;:::o;19097:398::-;19256:3;19277:83;19358:1;19353:3;19277:83;:::i;:::-;19270:90;;19369:93;19458:3;19369:93;:::i;:::-;19487:1;19482:3;19478:11;19471:18;;19097:398;;;:::o;19501:366::-;19643:3;19664:67;19728:2;19723:3;19664:67;:::i;:::-;19657:74;;19740:93;19829:3;19740:93;:::i;:::-;19858:2;19853:3;19849:12;19842:19;;19501:366;;;:::o;19873:::-;20015:3;20036:67;20100:2;20095:3;20036:67;:::i;:::-;20029:74;;20112:93;20201:3;20112:93;:::i;:::-;20230:2;20225:3;20221:12;20214:19;;19873:366;;;:::o;20245:::-;20387:3;20408:67;20472:2;20467:3;20408:67;:::i;:::-;20401:74;;20484:93;20573:3;20484:93;:::i;:::-;20602:2;20597:3;20593:12;20586:19;;20245:366;;;:::o;20617:::-;20759:3;20780:67;20844:2;20839:3;20780:67;:::i;:::-;20773:74;;20856:93;20945:3;20856:93;:::i;:::-;20974:2;20969:3;20965:12;20958:19;;20617:366;;;:::o;20989:::-;21131:3;21152:67;21216:2;21211:3;21152:67;:::i;:::-;21145:74;;21228:93;21317:3;21228:93;:::i;:::-;21346:2;21341:3;21337:12;21330:19;;20989:366;;;:::o;21361:::-;21503:3;21524:67;21588:2;21583:3;21524:67;:::i;:::-;21517:74;;21600:93;21689:3;21600:93;:::i;:::-;21718:2;21713:3;21709:12;21702:19;;21361:366;;;:::o;21733:::-;21875:3;21896:67;21960:2;21955:3;21896:67;:::i;:::-;21889:74;;21972:93;22061:3;21972:93;:::i;:::-;22090:2;22085:3;22081:12;22074:19;;21733:366;;;:::o;22105:::-;22247:3;22268:67;22332:2;22327:3;22268:67;:::i;:::-;22261:74;;22344:93;22433:3;22344:93;:::i;:::-;22462:2;22457:3;22453:12;22446:19;;22105:366;;;:::o;22477:::-;22619:3;22640:67;22704:2;22699:3;22640:67;:::i;:::-;22633:74;;22716:93;22805:3;22716:93;:::i;:::-;22834:2;22829:3;22825:12;22818:19;;22477:366;;;:::o;22849:::-;22991:3;23012:67;23076:2;23071:3;23012:67;:::i;:::-;23005:74;;23088:93;23177:3;23088:93;:::i;:::-;23206:2;23201:3;23197:12;23190:19;;22849:366;;;:::o;23221:118::-;23308:24;23326:5;23308:24;:::i;:::-;23303:3;23296:37;23221:118;;:::o;23345:256::-;23457:3;23472:75;23543:3;23534:6;23472:75;:::i;:::-;23572:2;23567:3;23563:12;23556:19;;23592:3;23585:10;;23345:256;;;;:::o;23607:701::-;23888:3;23910:95;24001:3;23992:6;23910:95;:::i;:::-;23903:102;;24022:95;24113:3;24104:6;24022:95;:::i;:::-;24015:102;;24134:148;24278:3;24134:148;:::i;:::-;24127:155;;24299:3;24292:10;;23607:701;;;;;:::o;24314:379::-;24498:3;24520:147;24663:3;24520:147;:::i;:::-;24513:154;;24684:3;24677:10;;24314:379;;;:::o;24699:222::-;24792:4;24830:2;24819:9;24815:18;24807:26;;24843:71;24911:1;24900:9;24896:17;24887:6;24843:71;:::i;:::-;24699:222;;;;:::o;24927:640::-;25122:4;25160:3;25149:9;25145:19;25137:27;;25174:71;25242:1;25231:9;25227:17;25218:6;25174:71;:::i;:::-;25255:72;25323:2;25312:9;25308:18;25299:6;25255:72;:::i;:::-;25337;25405:2;25394:9;25390:18;25381:6;25337:72;:::i;:::-;25456:9;25450:4;25446:20;25441:2;25430:9;25426:18;25419:48;25484:76;25555:4;25546:6;25484:76;:::i;:::-;25476:84;;24927:640;;;;;;;:::o;25573:210::-;25660:4;25698:2;25687:9;25683:18;25675:26;;25711:65;25773:1;25762:9;25758:17;25749:6;25711:65;:::i;:::-;25573:210;;;;:::o;25789:222::-;25882:4;25920:2;25909:9;25905:18;25897:26;;25933:71;26001:1;25990:9;25986:17;25977:6;25933:71;:::i;:::-;25789:222;;;;:::o;26017:313::-;26130:4;26168:2;26157:9;26153:18;26145:26;;26217:9;26211:4;26207:20;26203:1;26192:9;26188:17;26181:47;26245:78;26318:4;26309:6;26245:78;:::i;:::-;26237:86;;26017:313;;;;:::o;26336:419::-;26502:4;26540:2;26529:9;26525:18;26517:26;;26589:9;26583:4;26579:20;26575:1;26564:9;26560:17;26553:47;26617:131;26743:4;26617:131;:::i;:::-;26609:139;;26336:419;;;:::o;26761:::-;26927:4;26965:2;26954:9;26950:18;26942:26;;27014:9;27008:4;27004:20;27000:1;26989:9;26985:17;26978:47;27042:131;27168:4;27042:131;:::i;:::-;27034:139;;26761:419;;;:::o;27186:::-;27352:4;27390:2;27379:9;27375:18;27367:26;;27439:9;27433:4;27429:20;27425:1;27414:9;27410:17;27403:47;27467:131;27593:4;27467:131;:::i;:::-;27459:139;;27186:419;;;:::o;27611:::-;27777:4;27815:2;27804:9;27800:18;27792:26;;27864:9;27858:4;27854:20;27850:1;27839:9;27835:17;27828:47;27892:131;28018:4;27892:131;:::i;:::-;27884:139;;27611:419;;;:::o;28036:::-;28202:4;28240:2;28229:9;28225:18;28217:26;;28289:9;28283:4;28279:20;28275:1;28264:9;28260:17;28253:47;28317:131;28443:4;28317:131;:::i;:::-;28309:139;;28036:419;;;:::o;28461:::-;28627:4;28665:2;28654:9;28650:18;28642:26;;28714:9;28708:4;28704:20;28700:1;28689:9;28685:17;28678:47;28742:131;28868:4;28742:131;:::i;:::-;28734:139;;28461:419;;;:::o;28886:::-;29052:4;29090:2;29079:9;29075:18;29067:26;;29139:9;29133:4;29129:20;29125:1;29114:9;29110:17;29103:47;29167:131;29293:4;29167:131;:::i;:::-;29159:139;;28886:419;;;:::o;29311:::-;29477:4;29515:2;29504:9;29500:18;29492:26;;29564:9;29558:4;29554:20;29550:1;29539:9;29535:17;29528:47;29592:131;29718:4;29592:131;:::i;:::-;29584:139;;29311:419;;;:::o;29736:::-;29902:4;29940:2;29929:9;29925:18;29917:26;;29989:9;29983:4;29979:20;29975:1;29964:9;29960:17;29953:47;30017:131;30143:4;30017:131;:::i;:::-;30009:139;;29736:419;;;:::o;30161:::-;30327:4;30365:2;30354:9;30350:18;30342:26;;30414:9;30408:4;30404:20;30400:1;30389:9;30385:17;30378:47;30442:131;30568:4;30442:131;:::i;:::-;30434:139;;30161:419;;;:::o;30586:::-;30752:4;30790:2;30779:9;30775:18;30767:26;;30839:9;30833:4;30829:20;30825:1;30814:9;30810:17;30803:47;30867:131;30993:4;30867:131;:::i;:::-;30859:139;;30586:419;;;:::o;31011:::-;31177:4;31215:2;31204:9;31200:18;31192:26;;31264:9;31258:4;31254:20;31250:1;31239:9;31235:17;31228:47;31292:131;31418:4;31292:131;:::i;:::-;31284:139;;31011:419;;;:::o;31436:::-;31602:4;31640:2;31629:9;31625:18;31617:26;;31689:9;31683:4;31679:20;31675:1;31664:9;31660:17;31653:47;31717:131;31843:4;31717:131;:::i;:::-;31709:139;;31436:419;;;:::o;31861:::-;32027:4;32065:2;32054:9;32050:18;32042:26;;32114:9;32108:4;32104:20;32100:1;32089:9;32085:17;32078:47;32142:131;32268:4;32142:131;:::i;:::-;32134:139;;31861:419;;;:::o;32286:::-;32452:4;32490:2;32479:9;32475:18;32467:26;;32539:9;32533:4;32529:20;32525:1;32514:9;32510:17;32503:47;32567:131;32693:4;32567:131;:::i;:::-;32559:139;;32286:419;;;:::o;32711:::-;32877:4;32915:2;32904:9;32900:18;32892:26;;32964:9;32958:4;32954:20;32950:1;32939:9;32935:17;32928:47;32992:131;33118:4;32992:131;:::i;:::-;32984:139;;32711:419;;;:::o;33136:::-;33302:4;33340:2;33329:9;33325:18;33317:26;;33389:9;33383:4;33379:20;33375:1;33364:9;33360:17;33353:47;33417:131;33543:4;33417:131;:::i;:::-;33409:139;;33136:419;;;:::o;33561:::-;33727:4;33765:2;33754:9;33750:18;33742:26;;33814:9;33808:4;33804:20;33800:1;33789:9;33785:17;33778:47;33842:131;33968:4;33842:131;:::i;:::-;33834:139;;33561:419;;;:::o;33986:::-;34152:4;34190:2;34179:9;34175:18;34167:26;;34239:9;34233:4;34229:20;34225:1;34214:9;34210:17;34203:47;34267:131;34393:4;34267:131;:::i;:::-;34259:139;;33986:419;;;:::o;34411:::-;34577:4;34615:2;34604:9;34600:18;34592:26;;34664:9;34658:4;34654:20;34650:1;34639:9;34635:17;34628:47;34692:131;34818:4;34692:131;:::i;:::-;34684:139;;34411:419;;;:::o;34836:::-;35002:4;35040:2;35029:9;35025:18;35017:26;;35089:9;35083:4;35079:20;35075:1;35064:9;35060:17;35053:47;35117:131;35243:4;35117:131;:::i;:::-;35109:139;;34836:419;;;:::o;35261:::-;35427:4;35465:2;35454:9;35450:18;35442:26;;35514:9;35508:4;35504:20;35500:1;35489:9;35485:17;35478:47;35542:131;35668:4;35542:131;:::i;:::-;35534:139;;35261:419;;;:::o;35686:::-;35852:4;35890:2;35879:9;35875:18;35867:26;;35939:9;35933:4;35929:20;35925:1;35914:9;35910:17;35903:47;35967:131;36093:4;35967:131;:::i;:::-;35959:139;;35686:419;;;:::o;36111:::-;36277:4;36315:2;36304:9;36300:18;36292:26;;36364:9;36358:4;36354:20;36350:1;36339:9;36335:17;36328:47;36392:131;36518:4;36392:131;:::i;:::-;36384:139;;36111:419;;;:::o;36536:::-;36702:4;36740:2;36729:9;36725:18;36717:26;;36789:9;36783:4;36779:20;36775:1;36764:9;36760:17;36753:47;36817:131;36943:4;36817:131;:::i;:::-;36809:139;;36536:419;;;:::o;36961:::-;37127:4;37165:2;37154:9;37150:18;37142:26;;37214:9;37208:4;37204:20;37200:1;37189:9;37185:17;37178:47;37242:131;37368:4;37242:131;:::i;:::-;37234:139;;36961:419;;;:::o;37386:::-;37552:4;37590:2;37579:9;37575:18;37567:26;;37639:9;37633:4;37629:20;37625:1;37614:9;37610:17;37603:47;37667:131;37793:4;37667:131;:::i;:::-;37659:139;;37386:419;;;:::o;37811:::-;37977:4;38015:2;38004:9;38000:18;37992:26;;38064:9;38058:4;38054:20;38050:1;38039:9;38035:17;38028:47;38092:131;38218:4;38092:131;:::i;:::-;38084:139;;37811:419;;;:::o;38236:::-;38402:4;38440:2;38429:9;38425:18;38417:26;;38489:9;38483:4;38479:20;38475:1;38464:9;38460:17;38453:47;38517:131;38643:4;38517:131;:::i;:::-;38509:139;;38236:419;;;:::o;38661:::-;38827:4;38865:2;38854:9;38850:18;38842:26;;38914:9;38908:4;38904:20;38900:1;38889:9;38885:17;38878:47;38942:131;39068:4;38942:131;:::i;:::-;38934:139;;38661:419;;;:::o;39086:::-;39252:4;39290:2;39279:9;39275:18;39267:26;;39339:9;39333:4;39329:20;39325:1;39314:9;39310:17;39303:47;39367:131;39493:4;39367:131;:::i;:::-;39359:139;;39086:419;;;:::o;39511:222::-;39604:4;39642:2;39631:9;39627:18;39619:26;;39655:71;39723:1;39712:9;39708:17;39699:6;39655:71;:::i;:::-;39511:222;;;;:::o;39739:129::-;39773:6;39800:20;;:::i;:::-;39790:30;;39829:33;39857:4;39849:6;39829:33;:::i;:::-;39739:129;;;:::o;39874:75::-;39907:6;39940:2;39934:9;39924:19;;39874:75;:::o;39955:307::-;40016:4;40106:18;40098:6;40095:30;40092:56;;;40128:18;;:::i;:::-;40092:56;40166:29;40188:6;40166:29;:::i;:::-;40158:37;;40250:4;40244;40240:15;40232:23;;39955:307;;;:::o;40268:98::-;40319:6;40353:5;40347:12;40337:22;;40268:98;;;:::o;40372:99::-;40424:6;40458:5;40452:12;40442:22;;40372:99;;;:::o;40477:168::-;40560:11;40594:6;40589:3;40582:19;40634:4;40629:3;40625:14;40610:29;;40477:168;;;;:::o;40651:147::-;40752:11;40789:3;40774:18;;40651:147;;;;:::o;40804:169::-;40888:11;40922:6;40917:3;40910:19;40962:4;40957:3;40953:14;40938:29;;40804:169;;;;:::o;40979:148::-;41081:11;41118:3;41103:18;;40979:148;;;;:::o;41133:305::-;41173:3;41192:20;41210:1;41192:20;:::i;:::-;41187:25;;41226:20;41244:1;41226:20;:::i;:::-;41221:25;;41380:1;41312:66;41308:74;41305:1;41302:81;41299:107;;;41386:18;;:::i;:::-;41299:107;41430:1;41427;41423:9;41416:16;;41133:305;;;;:::o;41444:185::-;41484:1;41501:20;41519:1;41501:20;:::i;:::-;41496:25;;41535:20;41553:1;41535:20;:::i;:::-;41530:25;;41574:1;41564:35;;41579:18;;:::i;:::-;41564:35;41621:1;41618;41614:9;41609:14;;41444:185;;;;:::o;41635:348::-;41675:7;41698:20;41716:1;41698:20;:::i;:::-;41693:25;;41732:20;41750:1;41732:20;:::i;:::-;41727:25;;41920:1;41852:66;41848:74;41845:1;41842:81;41837:1;41830:9;41823:17;41819:105;41816:131;;;41927:18;;:::i;:::-;41816:131;41975:1;41972;41968:9;41957:20;;41635:348;;;;:::o;41989:191::-;42029:4;42049:20;42067:1;42049:20;:::i;:::-;42044:25;;42083:20;42101:1;42083:20;:::i;:::-;42078:25;;42122:1;42119;42116:8;42113:34;;;42127:18;;:::i;:::-;42113:34;42172:1;42169;42165:9;42157:17;;41989:191;;;;:::o;42186:96::-;42223:7;42252:24;42270:5;42252:24;:::i;:::-;42241:35;;42186:96;;;:::o;42288:90::-;42322:7;42365:5;42358:13;42351:21;42340:32;;42288:90;;;:::o;42384:77::-;42421:7;42450:5;42439:16;;42384:77;;;:::o;42467:149::-;42503:7;42543:66;42536:5;42532:78;42521:89;;42467:149;;;:::o;42622:126::-;42659:7;42699:42;42692:5;42688:54;42677:65;;42622:126;;;:::o;42754:77::-;42791:7;42820:5;42809:16;;42754:77;;;:::o;42837:154::-;42921:6;42916:3;42911;42898:30;42983:1;42974:6;42969:3;42965:16;42958:27;42837:154;;;:::o;42997:307::-;43065:1;43075:113;43089:6;43086:1;43083:13;43075:113;;;43174:1;43169:3;43165:11;43159:18;43155:1;43150:3;43146:11;43139:39;43111:2;43108:1;43104:10;43099:15;;43075:113;;;43206:6;43203:1;43200:13;43197:101;;;43286:1;43277:6;43272:3;43268:16;43261:27;43197:101;43046:258;42997:307;;;:::o;43310:320::-;43354:6;43391:1;43385:4;43381:12;43371:22;;43438:1;43432:4;43428:12;43459:18;43449:81;;43515:4;43507:6;43503:17;43493:27;;43449:81;43577:2;43569:6;43566:14;43546:18;43543:38;43540:84;;;43596:18;;:::i;:::-;43540:84;43361:269;43310:320;;;:::o;43636:281::-;43719:27;43741:4;43719:27;:::i;:::-;43711:6;43707:40;43849:6;43837:10;43834:22;43813:18;43801:10;43798:34;43795:62;43792:88;;;43860:18;;:::i;:::-;43792:88;43900:10;43896:2;43889:22;43679:238;43636:281;;:::o;43923:233::-;43962:3;43985:24;44003:5;43985:24;:::i;:::-;43976:33;;44031:66;44024:5;44021:77;44018:103;;;44101:18;;:::i;:::-;44018:103;44148:1;44141:5;44137:13;44130:20;;43923:233;;;:::o;44162:100::-;44201:7;44230:26;44250:5;44230:26;:::i;:::-;44219:37;;44162:100;;;:::o;44268:94::-;44307:7;44336:20;44350:5;44336:20;:::i;:::-;44325:31;;44268:94;;;:::o;44368:176::-;44400:1;44417:20;44435:1;44417:20;:::i;:::-;44412:25;;44451:20;44469:1;44451:20;:::i;:::-;44446:25;;44490:1;44480:35;;44495:18;;:::i;:::-;44480:35;44536:1;44533;44529:9;44524:14;;44368:176;;;;:::o;44550:180::-;44598:77;44595:1;44588:88;44695:4;44692:1;44685:15;44719:4;44716:1;44709:15;44736:180;44784:77;44781:1;44774:88;44881:4;44878:1;44871:15;44905:4;44902:1;44895:15;44922:180;44970:77;44967:1;44960:88;45067:4;45064:1;45057:15;45091:4;45088:1;45081:15;45108:180;45156:77;45153:1;45146:88;45253:4;45250:1;45243:15;45277:4;45274:1;45267:15;45294:180;45342:77;45339:1;45332:88;45439:4;45436:1;45429:15;45463:4;45460:1;45453:15;45480:117;45589:1;45586;45579:12;45603:117;45712:1;45709;45702:12;45726:117;45835:1;45832;45825:12;45849:117;45958:1;45955;45948:12;45972:117;46081:1;46078;46071:12;46095:117;46204:1;46201;46194:12;46218:102;46259:6;46310:2;46306:7;46301:2;46294:5;46290:14;46286:28;46276:38;;46218:102;;;:::o;46326:94::-;46359:8;46407:5;46403:2;46399:14;46378:35;;46326:94;;;:::o;46426:221::-;46566:34;46562:1;46554:6;46550:14;46543:58;46635:4;46630:2;46622:6;46618:15;46611:29;46426:221;:::o;46653:176::-;46793:28;46789:1;46781:6;46777:14;46770:52;46653:176;:::o;46835:225::-;46975:34;46971:1;46963:6;46959:14;46952:58;47044:8;47039:2;47031:6;47027:15;47020:33;46835:225;:::o;47066:229::-;47206:34;47202:1;47194:6;47190:14;47183:58;47275:12;47270:2;47262:6;47258:15;47251:37;47066:229;:::o;47301:176::-;47441:28;47437:1;47429:6;47425:14;47418:52;47301:176;:::o;47483:222::-;47623:34;47619:1;47611:6;47607:14;47600:58;47692:5;47687:2;47679:6;47675:15;47668:30;47483:222;:::o;47711:224::-;47851:34;47847:1;47839:6;47835:14;47828:58;47920:7;47915:2;47907:6;47903:15;47896:32;47711:224;:::o;47941:174::-;48081:26;48077:1;48069:6;48065:14;48058:50;47941:174;:::o;48121:168::-;48261:20;48257:1;48249:6;48245:14;48238:44;48121:168;:::o;48295:170::-;48435:22;48431:1;48423:6;48419:14;48412:46;48295:170;:::o;48471:180::-;48611:32;48607:1;48599:6;48595:14;48588:56;48471:180;:::o;48657:244::-;48797:34;48793:1;48785:6;48781:14;48774:58;48866:27;48861:2;48853:6;48849:15;48842:52;48657:244;:::o;48907:230::-;49047:34;49043:1;49035:6;49031:14;49024:58;49116:13;49111:2;49103:6;49099:15;49092:38;48907:230;:::o;49143:175::-;49283:27;49279:1;49271:6;49267:14;49260:51;49143:175;:::o;49324:225::-;49464:34;49460:1;49452:6;49448:14;49441:58;49533:8;49528:2;49520:6;49516:15;49509:33;49324:225;:::o;49555:155::-;49695:7;49691:1;49683:6;49679:14;49672:31;49555:155;:::o;49716:172::-;49856:24;49852:1;49844:6;49840:14;49833:48;49716:172;:::o;49894:182::-;50034:34;50030:1;50022:6;50018:14;50011:58;49894:182;:::o;50082:234::-;50222:34;50218:1;50210:6;50206:14;50199:58;50291:17;50286:2;50278:6;50274:15;50267:42;50082:234;:::o;50322:176::-;50462:28;50458:1;50450:6;50446:14;50439:52;50322:176;:::o;50504:237::-;50644:34;50640:1;50632:6;50628:14;50621:58;50713:20;50708:2;50700:6;50696:15;50689:45;50504:237;:::o;50747:221::-;50887:34;50883:1;50875:6;50871:14;50864:58;50956:4;50951:2;50943:6;50939:15;50932:29;50747:221;:::o;50974:114::-;;:::o;51094:166::-;51234:18;51230:1;51222:6;51218:14;51211:42;51094:166;:::o;51266:238::-;51406:34;51402:1;51394:6;51390:14;51383:58;51475:21;51470:2;51462:6;51458:15;51451:46;51266:238;:::o;51510:220::-;51650:34;51646:1;51638:6;51634:14;51627:58;51719:3;51714:2;51706:6;51702:15;51695:28;51510:220;:::o;51736:227::-;51876:34;51872:1;51864:6;51860:14;51853:58;51945:10;51940:2;51932:6;51928:15;51921:35;51736:227;:::o;51969:224::-;52109:34;52105:1;52097:6;52093:14;52086:58;52178:7;52173:2;52165:6;52161:15;52154:32;51969:224;:::o;52199:233::-;52339:34;52335:1;52327:6;52323:14;52316:58;52408:16;52403:2;52395:6;52391:15;52384:41;52199:233;:::o;52438:181::-;52578:33;52574:1;52566:6;52562:14;52555:57;52438:181;:::o;52625:234::-;52765:34;52761:1;52753:6;52749:14;52742:58;52834:17;52829:2;52821:6;52817:15;52810:42;52625:234;:::o;52865:232::-;53005:34;53001:1;52993:6;52989:14;52982:58;53074:15;53069:2;53061:6;53057:15;53050:40;52865:232;:::o;53103:222::-;53243:34;53239:1;53231:6;53227:14;53220:58;53312:5;53307:2;53299:6;53295:15;53288:30;53103:222;:::o;53331:122::-;53404:24;53422:5;53404:24;:::i;:::-;53397:5;53394:35;53384:63;;53443:1;53440;53433:12;53384:63;53331:122;:::o;53459:116::-;53529:21;53544:5;53529:21;:::i;:::-;53522:5;53519:32;53509:60;;53565:1;53562;53555:12;53509:60;53459:116;:::o;53581:122::-;53654:24;53672:5;53654:24;:::i;:::-;53647:5;53644:35;53634:63;;53693:1;53690;53683:12;53634:63;53581:122;:::o;53709:120::-;53781:23;53798:5;53781:23;:::i;:::-;53774:5;53771:34;53761:62;;53819:1;53816;53809:12;53761:62;53709:120;:::o;53835:122::-;53908:24;53926:5;53908:24;:::i;:::-;53901:5;53898:35;53888:63;;53947:1;53944;53937:12;53888:63;53835:122;:::o
Swarm Source
ipfs://e46a1d0027c46285b78e3c92124d8bbda700dbbfcd57b815ae707f7bf7b92ee6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.