Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 59 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 17161091 | 478 days ago | IN | 0 ETH | 0.01856404 | ||||
Claim | 16837098 | 524 days ago | IN | 0 ETH | 0.00698435 | ||||
Claim | 16717693 | 541 days ago | IN | 0 ETH | 0.00575781 | ||||
Claim | 16717688 | 541 days ago | IN | 0 ETH | 0.0057736 | ||||
Claim | 16717683 | 541 days ago | IN | 0 ETH | 0.00534255 | ||||
Claim | 16717678 | 541 days ago | IN | 0 ETH | 0.00567032 | ||||
Claim | 16717670 | 541 days ago | IN | 0 ETH | 0.00598013 | ||||
Claim | 16717651 | 541 days ago | IN | 0 ETH | 0.00589376 | ||||
Claim | 16668092 | 548 days ago | IN | 0 ETH | 0.00742274 | ||||
Claim | 16668092 | 548 days ago | IN | 0 ETH | 0.00742296 | ||||
Claim | 16668092 | 548 days ago | IN | 0 ETH | 0.00792479 | ||||
Claim | 16661927 | 549 days ago | IN | 0 ETH | 0.00724656 | ||||
Claim | 16614324 | 555 days ago | IN | 0 ETH | 0.00543068 | ||||
Claim | 16614324 | 555 days ago | IN | 0 ETH | 0.00591536 | ||||
Claim | 16548668 | 564 days ago | IN | 0 ETH | 0.01299897 | ||||
Claim | 16507849 | 570 days ago | IN | 0 ETH | 0.00296666 | ||||
Claim | 16507848 | 570 days ago | IN | 0 ETH | 0.00538952 | ||||
Claim | 16473053 | 575 days ago | IN | 0 ETH | 0.00541935 | ||||
Claim | 16466816 | 576 days ago | IN | 0 ETH | 0.00440103 | ||||
Claim | 16466813 | 576 days ago | IN | 0 ETH | 0.0055022 | ||||
Claim | 16458686 | 577 days ago | IN | 0 ETH | 0.00783372 | ||||
Claim | 16457383 | 577 days ago | IN | 0 ETH | 0.00564077 | ||||
Claim | 16457355 | 577 days ago | IN | 0 ETH | 0.00529106 | ||||
Claim | 16457355 | 577 days ago | IN | 0 ETH | 0.0049802 | ||||
Claim | 16457295 | 577 days ago | IN | 0 ETH | 0.00534944 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BonesClubHeritageBridge
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-31 */ pragma solidity ^0.8.9; // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @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 ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) /** * @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 _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } } contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } } 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 make 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; } } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @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); } } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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; } } // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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); } } } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) /** * @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; } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) /** * @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); } } // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) /** * @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) } } } abstract contract BonesHeritageI is Ownable, IERC721 { function migrate(address _owner, uint256 _tokenId) external virtual; function exists(uint256 _tokenId) external view virtual returns (bool); function getMaxSupply() external virtual returns (uint256); function tokensOfOwner(address _owner) external view virtual returns (uint256[] memory); } /** * @dev BonesClubHeritageBridge contract for bridging shared OS 1155 into a custom 721 contract */ contract BonesClubHeritageBridge is ERC1155Holder, Ownable, ReentrancyGuard { using Strings for uint256; using Strings for uint16; uint32 public totalBridged; bytes32 public merkleRoot; uint256[] public idsReceived; uint16[] public idsBridged; bool public bridgingEnabled; mapping(uint256 => address) public idsAndSenders; mapping(address => uint256[]) public sendersAndIds; mapping(address => uint256[]) public oldsIdsBridgedBySender; IERC1155 public osContract; BonesHeritageI public bonesContract; event ReceivedFromOS(address indexed _sender, address indexed _receiver, uint256 indexed _tokenId, uint256 _amount); event ReceivedFrom721(address indexed _sender, address indexed _receiver, uint256 indexed _tokenId); event Minted721(address indexed _sender, uint256 indexed _tokenId); event ToggleBridging(bool _enabled); event Transferred1155(address indexed _to, uint256 indexed _tokenId); constructor() { bridgingEnabled = true; } function onERC1155Received( address _sender, address _receiver, uint256 _tokenId, uint256 _amount, bytes memory _data ) public override nonReentrant returns (bytes4) { require(msg.sender == address(osContract), "Forbidden"); require(bridgingEnabled, "Bridging is stopped"); triggerReceived1155(_receiver, _tokenId); emit ReceivedFromOS(msg.sender, _receiver, _tokenId, _amount); return super.onERC1155Received(_sender, _receiver, _tokenId, _amount, _data); } function onERC1155BatchReceived( address _sender, address _receiver, uint256[] calldata _tokenids, uint256[] calldata _amounts, bytes memory _data ) public override nonReentrant returns (bytes4) { require(msg.sender == address(osContract), "Forbidden"); require(bridgingEnabled, "Bridging is stopped"); for (uint256 i = 0; i < _tokenids.length; i++) { triggerReceived1155(_receiver, _tokenids[i]); emit ReceivedFromOS(msg.sender, _receiver, _tokenids[i], _amounts[i]); } return super.onERC1155BatchReceived(_sender, _receiver, _tokenids, _amounts, _data); } /***********External**************/ function claim( uint256 _oldId, uint16 _newId, bytes32 _leaf, bytes32[] calldata _merkleProof ) external nonReentrant { require(bridgingEnabled, "Bridging is stopped"); require(address(bonesContract) != address(0), "Invalid bonesContract"); //construct merkle node bytes32 node = keccak256((abi.encodePacked(_oldId.toString(), _newId.toString()))); require(node == _leaf, "Leaf not matching the node"); require(MerkleProof.verify(_merkleProof, merkleRoot, _leaf), "Invalid proof."); require(idsAndSenders[_oldId] == msg.sender, "Not owner of OS id"); totalBridged++; idsBridged.push(_newId); oldsIdsBridgedBySender[msg.sender].push(_oldId); mintOnClaiming(msg.sender, _newId); } function mint721(uint16 _tokenId, address _to) external onlyOwner { require(_to != address(0), "Mint to address 0"); require(!bonesContract.exists(_tokenId), "Token exists"); if (bonesContract.exists(_tokenId) && bonesContract.ownerOf(_tokenId) == address(this)) { bonesContract.safeTransferFrom(address(this), _to, _tokenId); return; } _mint721(_tokenId, _to); } function transfer721(uint256 _tokenId, address _owner) external onlyOwner { require(_owner != address(0), "Can not send to address 0"); bonesContract.safeTransferFrom(address(this), _owner, _tokenId); } /***********Private**************/ function _mint721(uint16 _tokenId, address _owner) private { bonesContract.migrate(_owner, uint16(_tokenId)); emit Minted721(_owner, _tokenId); } function triggerReceived1155(address _sender, uint256 _tokenId) internal { require(_sender != address(0), "Update from address 0"); idsReceived.push(_tokenId); idsAndSenders[_tokenId] = _sender; sendersAndIds[_sender].push(_tokenId); } function mintOnClaiming(address _sender, uint16 _tokenId) internal returns (bool) { require(_sender != address(0), "Can not mint to address 0"); require(_tokenId != 0, "New token id !exists"); require(!bonesContract.exists(_tokenId), "Token already minted"); bonesContract.migrate(_sender, _tokenId); emit Minted721(_sender, _tokenId); return true; } /***********Setters**************/ function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner { merkleRoot = _merkleRoot; } function setbonesContract(address _contract) external onlyOwner { require(_contract != address(0), "_contract !address 0"); bonesContract = BonesHeritageI(_contract); } function setOSContract(address _contract) external onlyOwner { require(_contract != address(0), "_contract !address 0"); osContract = IERC1155(_contract); } /***********Views**************/ function checkBalance(address _collector, uint256 _tokenId) external view returns (uint256) { require(_collector != address(0), "_collector is address 0"); return osContract.balanceOf(_collector, _tokenId); } function getTransferredByCollector(address _collector) external view returns (uint256[] memory) { require(_collector != address(0), "_collector is address 0"); return sendersAndIds[_collector]; } function getBridgedByCollector(address _collector) external view returns (uint256[] memory) { require(_collector != address(0), "_collector is address 0"); return oldsIdsBridgedBySender[_collector]; } /***********Getters**************/ function getTokenBridgedCount() external view returns (uint128) { return totalBridged; } function getBridgedTokens() external view returns (uint16[] memory) { return idsBridged; } function getIdsTransfered() external view returns (uint256[] memory) { return idsReceived; } function getbonesContract() external view returns (address) { return address(bonesContract); } function getOSContract() external view returns (address) { return address(osContract); } /***********Emergency**************/ function addReceived1155(address _address, uint256 _tokenId) external onlyOwner { require(_address != address(0), "Update from address 0"); triggerReceived1155(_address, _tokenId); } function transfer1155(uint256 _tokenId, address _owner) external onlyOwner nonReentrant { require(_owner != address(0), "Can not send to address 0"); osContract.safeTransferFrom(address(this), _owner, _tokenId, 1, ""); emit Transferred1155(_owner, _tokenId); } function toggleBridging(bool _enabled) external onlyOwner { bridgingEnabled = _enabled; emit ToggleBridging(_enabled); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Minted721","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":"_sender","type":"address"},{"indexed":true,"internalType":"address","name":"_receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ReceivedFrom721","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"address","name":"_receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ReceivedFromOS","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enabled","type":"bool"}],"name":"ToggleBridging","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transferred1155","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"addReceived1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bonesContract","outputs":[{"internalType":"contract BonesHeritageI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridgingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_collector","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_oldId","type":"uint256"},{"internalType":"uint16","name":"_newId","type":"uint16"},{"internalType":"bytes32","name":"_leaf","type":"bytes32"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_collector","type":"address"}],"name":"getBridgedByCollector","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBridgedTokens","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIdsTransfered","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOSContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenBridgedCount","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_collector","type":"address"}],"name":"getTransferredByCollector","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getbonesContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idsAndSenders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idsBridged","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idsReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_tokenId","type":"uint16"},{"internalType":"address","name":"_to","type":"address"}],"name":"mint721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"oldsIdsBridgedBySender","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256[]","name":"_tokenids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"osContract","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"sendersAndIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setOSContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setbonesContract","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":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"toggleBridging","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBridged","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"name":"transfer1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"name":"transfer721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5062000032620000266200005a60201b60201c565b6200006260201b60201c565b600180819055506001600660006101000a81548160ff02191690831515021790555062000126565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6143b280620001366000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638da5cb5b1161011a578063df34448a116100ad578063f23a6e611161007c578063f23a6e61146105b4578063f2fde38b146105e4578063f8d7268014610600578063fd9dc2a714610630578063ff0c35571461064c576101fb565b8063df34448a1461052e578063e40760a91461054a578063e58288f91461057a578063e9ccc2c314610598576101fb565b8063b805186d116100e9578063b805186d146104a6578063bc197c81146104c4578063c76c523c146104f4578063c8727cc514610510576101fb565b80638da5cb5b1461043057806397209f331461044e57806399dd4f191461046c5780639e927f241461048a576101fb565b8063455fa4e7116101925780636d044525116101615780636d044525146103d0578063715018a6146103ec57806379c2f3ab146103f65780637cb6475914610414576101fb565b8063455fa4e714610334578063492e423b146103525780634d7b9bd51461038257806367a1791a146103b2576101fb565b806330c5a4d0116101ce57806330c5a4d01461029c57806333d7e0c4146102b8578063344b9800146102e8578063379d783d14610318576101fb565b806301ffc9a7146102005780630740b682146102305780632e9ef2231461024e5780632eb4a7ab1461027e575b600080fd5b61021a60048036038101906102159190612bc2565b61067c565b6040516102279190612c0a565b60405180910390f35b6102386106f6565b6040516102459190612ced565b60405180910390f35b61026860048036038101906102639190612d6d565b61074e565b6040516102759190612ced565b60405180910390f35b610286610855565b6040516102939190612db3565b60405180910390f35b6102b660048036038101906102b19190612ec5565b61085b565b005b6102d260048036038101906102cd9190612f4d565b610c46565b6040516102df9190612f9c565b60405180910390f35b61030260048036038101906102fd9190612fb7565b610c77565b60405161030f9190612ff3565b60405180910390f35b610332600480360381019061032d919061303a565b610caf565b005b61033c610d7f565b6040516103499190612c0a565b60405180910390f35b61036c60048036038101906103679190612f4d565b610d92565b6040516103799190612f9c565b60405180910390f35b61039c60048036038101906103979190612f4d565b610dc3565b6040516103a99190612f9c565b60405180910390f35b6103ba610ee8565b6040516103c79190613086565b60405180910390f35b6103ea60048036038101906103e591906130a1565b610efe565b005b6103f461111b565b005b6103fe6111a3565b60405161040b9190613140565b60405180910390f35b61042e6004803603810190610429919061315b565b6111c9565b005b61043861124f565b6040516104459190613197565b60405180910390f35b610456611278565b6040516104639190613197565b60405180910390f35b6104746112a2565b60405161048191906131d3565b60405180910390f35b6104a4600480360381019061049f91906130a1565b6112c8565b005b6104ae611449565b6040516104bb9190613197565b60405180910390f35b6104de60048036038101906104d99190613385565b611473565b6040516104eb919061346c565b60405180910390f35b61050e60048036038101906105099190612f4d565b611722565b005b61051861181c565b6040516105259190613545565b60405180910390f35b61054860048036038101906105439190612d6d565b61189c565b005b610564600480360381019061055f9190612fb7565b6119cc565b6040516105719190612f9c565b60405180910390f35b6105826119f0565b60405161058f9190613592565b60405180910390f35b6105b260048036038101906105ad91906135ad565b611a10565b005b6105ce60048036038101906105c991906135ed565b611e1d565b6040516105db919061346c565b60405180910390f35b6105fe60048036038101906105f99190612d6d565b611fdb565b005b61061a60048036038101906106159190612fb7565b6120d3565b6040516106279190613197565b60405180910390f35b61064a60048036038101906106459190612d6d565b612106565b005b61066660048036038101906106619190612d6d565b612236565b6040516106739190612ced565b60405180910390f35b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ef57506106ee8261233d565b5b9050919050565b6060600480548060200260200160405190810160405280929190818152602001828054801561074457602002820191906000526020600020905b815481526020019060010190808311610730575b5050505050905090565b6060600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b7906136e1565b60405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561084957602002820191906000526020600020905b815481526020019060010190808311610835575b50505050509050919050565b60035481565b600260015414156108a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108989061374d565b60405180910390fd5b6002600181905550600660009054906101000a900460ff166108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ef906137b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561098a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098190613825565b60405180910390fd5b6000610995866123a7565b6109a28661ffff166123a7565b6040516020016109b39291906138bf565b604051602081830303815290604052805190602001209050838114610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a049061392f565b60405180910390fd5b610a5b838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060035486612508565b610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a919061399b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166007600088815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3290613a07565b60405180910390fd5b6002600081819054906101000a900463ffffffff1680929190610b5d90613a56565b91906101000a81548163ffffffff021916908363ffffffff1602179055505060058590806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff160217905550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020869080600181540180825580915050600190039060005260206000200160009091909190915055610c36338661251f565b5050600180819055505050505050565b60096020528160005260406000208181548110610c6257600080fd5b90600052602060002001600091509150505481565b60058181548110610c8757600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b610cb76127a4565b73ffffffffffffffffffffffffffffffffffffffff16610cd561124f565b73ffffffffffffffffffffffffffffffffffffffff1614610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290613acf565b60405180910390fd5b80600660006101000a81548160ff0219169083151502179055507f5f77fec7b37d43fa95bbc193db7a3afc40d28c336f0e982769baa2fa70b1c83181604051610d749190612c0a565b60405180910390a150565b600660009054906101000a900460ff1681565b60086020528160005260406000208181548110610dae57600080fd5b90600052602060002001600091509150505481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906136e1565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e84846040518363ffffffff1660e01b8152600401610e90929190613aef565b60206040518083038186803b158015610ea857600080fd5b505afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190613b2d565b905092915050565b600260009054906101000a900463ffffffff1681565b610f066127a4565b73ffffffffffffffffffffffffffffffffffffffff16610f2461124f565b73ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190613acf565b60405180910390fd5b60026001541415610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb79061374d565b60405180910390fd5b6002600181905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90613ba6565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30838560016040518563ffffffff1660e01b815260040161109a9493929190613c38565b600060405180830381600087803b1580156110b457600080fd5b505af11580156110c8573d6000803e3d6000fd5b50505050818173ffffffffffffffffffffffffffffffffffffffff167f0770a9f21b1123311db731c0cdc094cbe4bcc3b670f7407946c52fa84fae4ff960405160405180910390a3600180819055505050565b6111236127a4565b73ffffffffffffffffffffffffffffffffffffffff1661114161124f565b73ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e90613acf565b60405180910390fd5b6111a160006127ac565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111d16127a4565b73ffffffffffffffffffffffffffffffffffffffff166111ef61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90613acf565b60405180910390fd5b8060038190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112d06127a4565b73ffffffffffffffffffffffffffffffffffffffff166112ee61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613ba6565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b815260040161141393929190613c90565b600060405180830381600087803b15801561142d57600080fd5b505af1158015611441573d6000803e3d6000fd5b505050505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260015414156114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b29061374d565b60405180910390fd5b6002600181905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90613d13565b60405180910390fd5b600660009054906101000a900460ff166115a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611599906137b9565b60405180910390fd5b60005b8686905081101561167e576115d3888888848181106115c7576115c6613d33565b5b90506020020135612870565b8686828181106115e6576115e5613d33565b5b905060200201358873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3f4eede38e30700d02330e67f8b231a342d300cf02faf190f9704ab43078a96d88888681811061164f5761164e613d33565b5b905060200201356040516116639190612f9c565b60405180910390a4808061167690613d62565b9150506115a5565b5061170e8888888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050866129c5565b905060018081905550979650505050505050565b61172a6127a4565b73ffffffffffffffffffffffffffffffffffffffff1661174861124f565b73ffffffffffffffffffffffffffffffffffffffff161461179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180590613df7565b60405180910390fd5b6118188282612870565b5050565b6060600580548060200260200160405190810160405280929190818152602001828054801561189257602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116118595790505b5050505050905090565b6118a46127a4565b73ffffffffffffffffffffffffffffffffffffffff166118c261124f565b73ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90613e63565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600481815481106119dc57600080fd5b906000526020600020016000915090505481565b6000600260009054906101000a900463ffffffff1663ffffffff16905090565b611a186127a4565b73ffffffffffffffffffffffffffffffffffffffff16611a3661124f565b73ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390613ecf565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f558e79836040518263ffffffff1660e01b8152600401611b579190613f20565b60206040518083038186803b158015611b6f57600080fd5b505afa158015611b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba79190613f50565b15611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde90613fc9565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f558e79836040518263ffffffff1660e01b8152600401611c429190613f20565b60206040518083038186803b158015611c5a57600080fd5b505afa158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190613f50565b8015611d7357503073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611d0b9190613f20565b60206040518083038186803b158015611d2357600080fd5b505afa158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b9190613ffe565b73ffffffffffffffffffffffffffffffffffffffff16145b15611e0e57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401611dd79392919061402b565b600060405180830381600087803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b50505050611e19565b611e1882826129da565b5b5050565b600060026001541415611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c9061374d565b60405180910390fd5b6002600181905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef490613d13565b60405180910390fd5b600660009054906101000a900460ff16611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f43906137b9565b60405180910390fd5b611f568585612870565b838573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3f4eede38e30700d02330e67f8b231a342d300cf02faf190f9704ab43078a96d86604051611fb49190612f9c565b60405180910390a4611fc98686868686612ab5565b90506001808190555095945050505050565b611fe36127a4565b73ffffffffffffffffffffffffffffffffffffffff1661200161124f565b73ffffffffffffffffffffffffffffffffffffffff1614612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be906140d4565b60405180910390fd5b6120d0816127ac565b50565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61210e6127a4565b73ffffffffffffffffffffffffffffffffffffffff1661212c61124f565b73ffffffffffffffffffffffffffffffffffffffff1614612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e990613e63565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f906136e1565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561233157602002820191906000526020600020905b81548152602001906001019080831161231d575b50505050509050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008214156123ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612503565b600082905060005b6000821461242157808061240a90613d62565b915050600a8261241a9190614123565b91506123f7565b60008167ffffffffffffffff81111561243d5761243c61325a565b5b6040519080825280601f01601f19166020018201604052801561246f5781602001600182028036833780820191505090505b5090505b600085146124fc576001826124889190614154565b9150600a856124979190614188565b60306124a391906141b9565b60f81b8183815181106124b9576124b8613d33565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124f59190614123565b9450612473565b8093505050505b919050565b6000826125158584612aca565b1490509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125879061425b565b60405180910390fd5b60008261ffff1614156125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf906142c7565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f558e79836040518263ffffffff1660e01b81526004016126339190613f20565b60206040518083038186803b15801561264b57600080fd5b505afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190613f50565b156126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614333565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad68ebf784846040518363ffffffff1660e01b8152600401612720929190614353565b600060405180830381600087803b15801561273a57600080fd5b505af115801561274e573d6000803e3d6000fd5b505050508161ffff168373ffffffffffffffffffffffffffffffffffffffff167fff915c59d6b9d1c5eeb3d0a75163df9669794c791c89c8025a5e2914a75eed6a60405160405180910390a36001905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d790613df7565b60405180910390fd5b6004819080600181540180825580915050600190039060005260206000200160009091909190915055816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150555050565b600063bc197c8160e01b905095945050505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad68ebf782846040518363ffffffff1660e01b8152600401612a37929190614353565b600060405180830381600087803b158015612a5157600080fd5b505af1158015612a65573d6000803e3d6000fd5b505050508161ffff168173ffffffffffffffffffffffffffffffffffffffff167fff915c59d6b9d1c5eeb3d0a75163df9669794c791c89c8025a5e2914a75eed6a60405160405180910390a35050565b600063f23a6e6160e01b905095945050505050565b60008082905060005b8451811015612b34576000858281518110612af157612af0613d33565b5b60200260200101519050808311612b1357612b0c8382612b3f565b9250612b20565b612b1d8184612b3f565b92505b508080612b2c90613d62565b915050612ad3565b508091505092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612b9f81612b6a565b8114612baa57600080fd5b50565b600081359050612bbc81612b96565b92915050565b600060208284031215612bd857612bd7612b60565b5b6000612be684828501612bad565b91505092915050565b60008115159050919050565b612c0481612bef565b82525050565b6000602082019050612c1f6000830184612bfb565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b612c6481612c51565b82525050565b6000612c768383612c5b565b60208301905092915050565b6000602082019050919050565b6000612c9a82612c25565b612ca48185612c30565b9350612caf83612c41565b8060005b83811015612ce0578151612cc78882612c6a565b9750612cd283612c82565b925050600181019050612cb3565b5085935050505092915050565b60006020820190508181036000830152612d078184612c8f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d3a82612d0f565b9050919050565b612d4a81612d2f565b8114612d5557600080fd5b50565b600081359050612d6781612d41565b92915050565b600060208284031215612d8357612d82612b60565b5b6000612d9184828501612d58565b91505092915050565b6000819050919050565b612dad81612d9a565b82525050565b6000602082019050612dc86000830184612da4565b92915050565b612dd781612c51565b8114612de257600080fd5b50565b600081359050612df481612dce565b92915050565b600061ffff82169050919050565b612e1181612dfa565b8114612e1c57600080fd5b50565b600081359050612e2e81612e08565b92915050565b612e3d81612d9a565b8114612e4857600080fd5b50565b600081359050612e5a81612e34565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612e8557612e84612e60565b5b8235905067ffffffffffffffff811115612ea257612ea1612e65565b5b602083019150836020820283011115612ebe57612ebd612e6a565b5b9250929050565b600080600080600060808688031215612ee157612ee0612b60565b5b6000612eef88828901612de5565b9550506020612f0088828901612e1f565b9450506040612f1188828901612e4b565b935050606086013567ffffffffffffffff811115612f3257612f31612b65565b5b612f3e88828901612e6f565b92509250509295509295909350565b60008060408385031215612f6457612f63612b60565b5b6000612f7285828601612d58565b9250506020612f8385828601612de5565b9150509250929050565b612f9681612c51565b82525050565b6000602082019050612fb16000830184612f8d565b92915050565b600060208284031215612fcd57612fcc612b60565b5b6000612fdb84828501612de5565b91505092915050565b612fed81612dfa565b82525050565b60006020820190506130086000830184612fe4565b92915050565b61301781612bef565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000602082840312156130505761304f612b60565b5b600061305e84828501613025565b91505092915050565b600063ffffffff82169050919050565b61308081613067565b82525050565b600060208201905061309b6000830184613077565b92915050565b600080604083850312156130b8576130b7612b60565b5b60006130c685828601612de5565b92505060206130d785828601612d58565b9150509250929050565b6000819050919050565b60006131066131016130fc84612d0f565b6130e1565b612d0f565b9050919050565b6000613118826130eb565b9050919050565b600061312a8261310d565b9050919050565b61313a8161311f565b82525050565b60006020820190506131556000830184613131565b92915050565b60006020828403121561317157613170612b60565b5b600061317f84828501612e4b565b91505092915050565b61319181612d2f565b82525050565b60006020820190506131ac6000830184613188565b92915050565b60006131bd8261310d565b9050919050565b6131cd816131b2565b82525050565b60006020820190506131e860008301846131c4565b92915050565b60008083601f84011261320457613203612e60565b5b8235905067ffffffffffffffff81111561322157613220612e65565b5b60208301915083602082028301111561323d5761323c612e6a565b5b9250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61329282613249565b810181811067ffffffffffffffff821117156132b1576132b061325a565b5b80604052505050565b60006132c4612b56565b90506132d08282613289565b919050565b600067ffffffffffffffff8211156132f0576132ef61325a565b5b6132f982613249565b9050602081019050919050565b82818337600083830152505050565b6000613328613323846132d5565b6132ba565b90508281526020810184848401111561334457613343613244565b5b61334f848285613306565b509392505050565b600082601f83011261336c5761336b612e60565b5b813561337c848260208601613315565b91505092915050565b600080600080600080600060a0888a0312156133a4576133a3612b60565b5b60006133b28a828b01612d58565b97505060206133c38a828b01612d58565b965050604088013567ffffffffffffffff8111156133e4576133e3612b65565b5b6133f08a828b016131ee565b9550955050606088013567ffffffffffffffff81111561341357613412612b65565b5b61341f8a828b016131ee565b9350935050608088013567ffffffffffffffff81111561344257613441612b65565b5b61344e8a828b01613357565b91505092959891949750929550565b61346681612b6a565b82525050565b6000602082019050613481600083018461345d565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134bc81612dfa565b82525050565b60006134ce83836134b3565b60208301905092915050565b6000602082019050919050565b60006134f282613487565b6134fc8185613492565b9350613507836134a3565b8060005b8381101561353857815161351f88826134c2565b975061352a836134da565b92505060018101905061350b565b5085935050505092915050565b6000602082019050818103600083015261355f81846134e7565b905092915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61358c81613567565b82525050565b60006020820190506135a76000830184613583565b92915050565b600080604083850312156135c4576135c3612b60565b5b60006135d285828601612e1f565b92505060206135e385828601612d58565b9150509250929050565b600080600080600060a0868803121561360957613608612b60565b5b600061361788828901612d58565b955050602061362888828901612d58565b945050604061363988828901612de5565b935050606061364a88828901612de5565b925050608086013567ffffffffffffffff81111561366b5761366a612b65565b5b61367788828901613357565b9150509295509295909350565b600082825260208201905092915050565b7f5f636f6c6c6563746f7220697320616464726573732030000000000000000000600082015250565b60006136cb601783613684565b91506136d682613695565b602082019050919050565b600060208201905081810360008301526136fa816136be565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613737601f83613684565b915061374282613701565b602082019050919050565b600060208201905081810360008301526137668161372a565b9050919050565b7f4272696467696e672069732073746f7070656400000000000000000000000000600082015250565b60006137a3601383613684565b91506137ae8261376d565b602082019050919050565b600060208201905081810360008301526137d281613796565b9050919050565b7f496e76616c696420626f6e6573436f6e74726163740000000000000000000000600082015250565b600061380f601583613684565b915061381a826137d9565b602082019050919050565b6000602082019050818103600083015261383e81613802565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561387957808201518184015260208101905061385e565b83811115613888576000848401525b50505050565b600061389982613845565b6138a38185613850565b93506138b381856020860161385b565b80840191505092915050565b60006138cb828561388e565b91506138d7828461388e565b91508190509392505050565b7f4c656166206e6f74206d61746368696e6720746865206e6f6465000000000000600082015250565b6000613919601a83613684565b9150613924826138e3565b602082019050919050565b600060208201905081810360008301526139488161390c565b9050919050565b7f496e76616c69642070726f6f662e000000000000000000000000000000000000600082015250565b6000613985600e83613684565b91506139908261394f565b602082019050919050565b600060208201905081810360008301526139b481613978565b9050919050565b7f4e6f74206f776e6572206f66204f532069640000000000000000000000000000600082015250565b60006139f1601283613684565b91506139fc826139bb565b602082019050919050565b60006020820190508181036000830152613a20816139e4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a6182613067565b915063ffffffff821415613a7857613a77613a27565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ab9602083613684565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b6000604082019050613b046000830185613188565b613b116020830184612f8d565b9392505050565b600081519050613b2781612dce565b92915050565b600060208284031215613b4357613b42612b60565b5b6000613b5184828501613b18565b91505092915050565b7f43616e206e6f742073656e6420746f2061646472657373203000000000000000600082015250565b6000613b90601983613684565b9150613b9b82613b5a565b602082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b6000819050919050565b6000613beb613be6613be184613bc6565b6130e1565b612c51565b9050919050565b613bfb81613bd0565b82525050565b600082825260208201905092915050565b50565b6000613c22600083613c01565b9150613c2d82613c12565b600082019050919050565b600060a082019050613c4d6000830187613188565b613c5a6020830186613188565b613c676040830185612f8d565b613c746060830184613bf2565b8181036080830152613c8581613c15565b905095945050505050565b6000606082019050613ca56000830186613188565b613cb26020830185613188565b613cbf6040830184612f8d565b949350505050565b7f466f7262696464656e0000000000000000000000000000000000000000000000600082015250565b6000613cfd600983613684565b9150613d0882613cc7565b602082019050919050565b60006020820190508181036000830152613d2c81613cf0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613d6d82612c51565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613da057613d9f613a27565b5b600182019050919050565b7f5570646174652066726f6d206164647265737320300000000000000000000000600082015250565b6000613de1601583613684565b9150613dec82613dab565b602082019050919050565b60006020820190508181036000830152613e1081613dd4565b9050919050565b7f5f636f6e74726163742021616464726573732030000000000000000000000000600082015250565b6000613e4d601483613684565b9150613e5882613e17565b602082019050919050565b60006020820190508181036000830152613e7c81613e40565b9050919050565b7f4d696e7420746f20616464726573732030000000000000000000000000000000600082015250565b6000613eb9601183613684565b9150613ec482613e83565b602082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b6000613f0a613f05613f0084612dfa565b6130e1565b612c51565b9050919050565b613f1a81613eef565b82525050565b6000602082019050613f356000830184613f11565b92915050565b600081519050613f4a8161300e565b92915050565b600060208284031215613f6657613f65612b60565b5b6000613f7484828501613f3b565b91505092915050565b7f546f6b656e206578697374730000000000000000000000000000000000000000600082015250565b6000613fb3600c83613684565b9150613fbe82613f7d565b602082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b600081519050613ff881612d41565b92915050565b60006020828403121561401457614013612b60565b5b600061402284828501613fe9565b91505092915050565b60006060820190506140406000830186613188565b61404d6020830185613188565b61405a6040830184613f11565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140be602683613684565b91506140c982614062565b604082019050919050565b600060208201905081810360008301526140ed816140b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061412e82612c51565b915061413983612c51565b925082614149576141486140f4565b5b828204905092915050565b600061415f82612c51565b915061416a83612c51565b92508282101561417d5761417c613a27565b5b828203905092915050565b600061419382612c51565b915061419e83612c51565b9250826141ae576141ad6140f4565b5b828206905092915050565b60006141c482612c51565b91506141cf83612c51565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561420457614203613a27565b5b828201905092915050565b7f43616e206e6f74206d696e7420746f2061646472657373203000000000000000600082015250565b6000614245601983613684565b91506142508261420f565b602082019050919050565b6000602082019050818103600083015261427481614238565b9050919050565b7f4e657720746f6b656e2069642021657869737473000000000000000000000000600082015250565b60006142b1601483613684565b91506142bc8261427b565b602082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f546f6b656e20616c7265616479206d696e746564000000000000000000000000600082015250565b600061431d601483613684565b9150614328826142e7565b602082019050919050565b6000602082019050818103600083015261434c81614310565b9050919050565b60006040820190506143686000830185613188565b6143756020830184613f11565b939250505056fea2646970667358221220dc0b9b1150fab9ad3de5c548b6e45dc5f35e5da8c9c6980e56b7f428a107575264736f6c63430008090033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638da5cb5b1161011a578063df34448a116100ad578063f23a6e611161007c578063f23a6e61146105b4578063f2fde38b146105e4578063f8d7268014610600578063fd9dc2a714610630578063ff0c35571461064c576101fb565b8063df34448a1461052e578063e40760a91461054a578063e58288f91461057a578063e9ccc2c314610598576101fb565b8063b805186d116100e9578063b805186d146104a6578063bc197c81146104c4578063c76c523c146104f4578063c8727cc514610510576101fb565b80638da5cb5b1461043057806397209f331461044e57806399dd4f191461046c5780639e927f241461048a576101fb565b8063455fa4e7116101925780636d044525116101615780636d044525146103d0578063715018a6146103ec57806379c2f3ab146103f65780637cb6475914610414576101fb565b8063455fa4e714610334578063492e423b146103525780634d7b9bd51461038257806367a1791a146103b2576101fb565b806330c5a4d0116101ce57806330c5a4d01461029c57806333d7e0c4146102b8578063344b9800146102e8578063379d783d14610318576101fb565b806301ffc9a7146102005780630740b682146102305780632e9ef2231461024e5780632eb4a7ab1461027e575b600080fd5b61021a60048036038101906102159190612bc2565b61067c565b6040516102279190612c0a565b60405180910390f35b6102386106f6565b6040516102459190612ced565b60405180910390f35b61026860048036038101906102639190612d6d565b61074e565b6040516102759190612ced565b60405180910390f35b610286610855565b6040516102939190612db3565b60405180910390f35b6102b660048036038101906102b19190612ec5565b61085b565b005b6102d260048036038101906102cd9190612f4d565b610c46565b6040516102df9190612f9c565b60405180910390f35b61030260048036038101906102fd9190612fb7565b610c77565b60405161030f9190612ff3565b60405180910390f35b610332600480360381019061032d919061303a565b610caf565b005b61033c610d7f565b6040516103499190612c0a565b60405180910390f35b61036c60048036038101906103679190612f4d565b610d92565b6040516103799190612f9c565b60405180910390f35b61039c60048036038101906103979190612f4d565b610dc3565b6040516103a99190612f9c565b60405180910390f35b6103ba610ee8565b6040516103c79190613086565b60405180910390f35b6103ea60048036038101906103e591906130a1565b610efe565b005b6103f461111b565b005b6103fe6111a3565b60405161040b9190613140565b60405180910390f35b61042e6004803603810190610429919061315b565b6111c9565b005b61043861124f565b6040516104459190613197565b60405180910390f35b610456611278565b6040516104639190613197565b60405180910390f35b6104746112a2565b60405161048191906131d3565b60405180910390f35b6104a4600480360381019061049f91906130a1565b6112c8565b005b6104ae611449565b6040516104bb9190613197565b60405180910390f35b6104de60048036038101906104d99190613385565b611473565b6040516104eb919061346c565b60405180910390f35b61050e60048036038101906105099190612f4d565b611722565b005b61051861181c565b6040516105259190613545565b60405180910390f35b61054860048036038101906105439190612d6d565b61189c565b005b610564600480360381019061055f9190612fb7565b6119cc565b6040516105719190612f9c565b60405180910390f35b6105826119f0565b60405161058f9190613592565b60405180910390f35b6105b260048036038101906105ad91906135ad565b611a10565b005b6105ce60048036038101906105c991906135ed565b611e1d565b6040516105db919061346c565b60405180910390f35b6105fe60048036038101906105f99190612d6d565b611fdb565b005b61061a60048036038101906106159190612fb7565b6120d3565b6040516106279190613197565b60405180910390f35b61064a60048036038101906106459190612d6d565b612106565b005b61066660048036038101906106619190612d6d565b612236565b6040516106739190612ced565b60405180910390f35b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ef57506106ee8261233d565b5b9050919050565b6060600480548060200260200160405190810160405280929190818152602001828054801561074457602002820191906000526020600020905b815481526020019060010190808311610730575b5050505050905090565b6060600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b7906136e1565b60405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561084957602002820191906000526020600020905b815481526020019060010190808311610835575b50505050509050919050565b60035481565b600260015414156108a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108989061374d565b60405180910390fd5b6002600181905550600660009054906101000a900460ff166108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ef906137b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561098a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098190613825565b60405180910390fd5b6000610995866123a7565b6109a28661ffff166123a7565b6040516020016109b39291906138bf565b604051602081830303815290604052805190602001209050838114610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a049061392f565b60405180910390fd5b610a5b838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060035486612508565b610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a919061399b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166007600088815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3290613a07565b60405180910390fd5b6002600081819054906101000a900463ffffffff1680929190610b5d90613a56565b91906101000a81548163ffffffff021916908363ffffffff1602179055505060058590806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff160217905550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020869080600181540180825580915050600190039060005260206000200160009091909190915055610c36338661251f565b5050600180819055505050505050565b60096020528160005260406000208181548110610c6257600080fd5b90600052602060002001600091509150505481565b60058181548110610c8757600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b610cb76127a4565b73ffffffffffffffffffffffffffffffffffffffff16610cd561124f565b73ffffffffffffffffffffffffffffffffffffffff1614610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290613acf565b60405180910390fd5b80600660006101000a81548160ff0219169083151502179055507f5f77fec7b37d43fa95bbc193db7a3afc40d28c336f0e982769baa2fa70b1c83181604051610d749190612c0a565b60405180910390a150565b600660009054906101000a900460ff1681565b60086020528160005260406000208181548110610dae57600080fd5b90600052602060002001600091509150505481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906136e1565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e84846040518363ffffffff1660e01b8152600401610e90929190613aef565b60206040518083038186803b158015610ea857600080fd5b505afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190613b2d565b905092915050565b600260009054906101000a900463ffffffff1681565b610f066127a4565b73ffffffffffffffffffffffffffffffffffffffff16610f2461124f565b73ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190613acf565b60405180910390fd5b60026001541415610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb79061374d565b60405180910390fd5b6002600181905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90613ba6565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30838560016040518563ffffffff1660e01b815260040161109a9493929190613c38565b600060405180830381600087803b1580156110b457600080fd5b505af11580156110c8573d6000803e3d6000fd5b50505050818173ffffffffffffffffffffffffffffffffffffffff167f0770a9f21b1123311db731c0cdc094cbe4bcc3b670f7407946c52fa84fae4ff960405160405180910390a3600180819055505050565b6111236127a4565b73ffffffffffffffffffffffffffffffffffffffff1661114161124f565b73ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e90613acf565b60405180910390fd5b6111a160006127ac565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111d16127a4565b73ffffffffffffffffffffffffffffffffffffffff166111ef61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90613acf565b60405180910390fd5b8060038190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112d06127a4565b73ffffffffffffffffffffffffffffffffffffffff166112ee61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613ba6565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b815260040161141393929190613c90565b600060405180830381600087803b15801561142d57600080fd5b505af1158015611441573d6000803e3d6000fd5b505050505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260015414156114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b29061374d565b60405180910390fd5b6002600181905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90613d13565b60405180910390fd5b600660009054906101000a900460ff166115a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611599906137b9565b60405180910390fd5b60005b8686905081101561167e576115d3888888848181106115c7576115c6613d33565b5b90506020020135612870565b8686828181106115e6576115e5613d33565b5b905060200201358873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3f4eede38e30700d02330e67f8b231a342d300cf02faf190f9704ab43078a96d88888681811061164f5761164e613d33565b5b905060200201356040516116639190612f9c565b60405180910390a4808061167690613d62565b9150506115a5565b5061170e8888888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050866129c5565b905060018081905550979650505050505050565b61172a6127a4565b73ffffffffffffffffffffffffffffffffffffffff1661174861124f565b73ffffffffffffffffffffffffffffffffffffffff161461179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180590613df7565b60405180910390fd5b6118188282612870565b5050565b6060600580548060200260200160405190810160405280929190818152602001828054801561189257602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116118595790505b5050505050905090565b6118a46127a4565b73ffffffffffffffffffffffffffffffffffffffff166118c261124f565b73ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90613e63565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600481815481106119dc57600080fd5b906000526020600020016000915090505481565b6000600260009054906101000a900463ffffffff1663ffffffff16905090565b611a186127a4565b73ffffffffffffffffffffffffffffffffffffffff16611a3661124f565b73ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390613ecf565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f558e79836040518263ffffffff1660e01b8152600401611b579190613f20565b60206040518083038186803b158015611b6f57600080fd5b505afa158015611b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba79190613f50565b15611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde90613fc9565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f558e79836040518263ffffffff1660e01b8152600401611c429190613f20565b60206040518083038186803b158015611c5a57600080fd5b505afa158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190613f50565b8015611d7357503073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611d0b9190613f20565b60206040518083038186803b158015611d2357600080fd5b505afa158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b9190613ffe565b73ffffffffffffffffffffffffffffffffffffffff16145b15611e0e57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401611dd79392919061402b565b600060405180830381600087803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b50505050611e19565b611e1882826129da565b5b5050565b600060026001541415611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c9061374d565b60405180910390fd5b6002600181905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef490613d13565b60405180910390fd5b600660009054906101000a900460ff16611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f43906137b9565b60405180910390fd5b611f568585612870565b838573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3f4eede38e30700d02330e67f8b231a342d300cf02faf190f9704ab43078a96d86604051611fb49190612f9c565b60405180910390a4611fc98686868686612ab5565b90506001808190555095945050505050565b611fe36127a4565b73ffffffffffffffffffffffffffffffffffffffff1661200161124f565b73ffffffffffffffffffffffffffffffffffffffff1614612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be906140d4565b60405180910390fd5b6120d0816127ac565b50565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61210e6127a4565b73ffffffffffffffffffffffffffffffffffffffff1661212c61124f565b73ffffffffffffffffffffffffffffffffffffffff1614612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e990613e63565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f906136e1565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561233157602002820191906000526020600020905b81548152602001906001019080831161231d575b50505050509050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008214156123ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612503565b600082905060005b6000821461242157808061240a90613d62565b915050600a8261241a9190614123565b91506123f7565b60008167ffffffffffffffff81111561243d5761243c61325a565b5b6040519080825280601f01601f19166020018201604052801561246f5781602001600182028036833780820191505090505b5090505b600085146124fc576001826124889190614154565b9150600a856124979190614188565b60306124a391906141b9565b60f81b8183815181106124b9576124b8613d33565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124f59190614123565b9450612473565b8093505050505b919050565b6000826125158584612aca565b1490509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125879061425b565b60405180910390fd5b60008261ffff1614156125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf906142c7565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f558e79836040518263ffffffff1660e01b81526004016126339190613f20565b60206040518083038186803b15801561264b57600080fd5b505afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190613f50565b156126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614333565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad68ebf784846040518363ffffffff1660e01b8152600401612720929190614353565b600060405180830381600087803b15801561273a57600080fd5b505af115801561274e573d6000803e3d6000fd5b505050508161ffff168373ffffffffffffffffffffffffffffffffffffffff167fff915c59d6b9d1c5eeb3d0a75163df9669794c791c89c8025a5e2914a75eed6a60405160405180910390a36001905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d790613df7565b60405180910390fd5b6004819080600181540180825580915050600190039060005260206000200160009091909190915055816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150555050565b600063bc197c8160e01b905095945050505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad68ebf782846040518363ffffffff1660e01b8152600401612a37929190614353565b600060405180830381600087803b158015612a5157600080fd5b505af1158015612a65573d6000803e3d6000fd5b505050508161ffff168173ffffffffffffffffffffffffffffffffffffffff167fff915c59d6b9d1c5eeb3d0a75163df9669794c791c89c8025a5e2914a75eed6a60405160405180910390a35050565b600063f23a6e6160e01b905095945050505050565b60008082905060005b8451811015612b34576000858281518110612af157612af0613d33565b5b60200260200101519050808311612b1357612b0c8382612b3f565b9250612b20565b612b1d8184612b3f565b92505b508080612b2c90613d62565b915050612ad3565b508091505092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612b9f81612b6a565b8114612baa57600080fd5b50565b600081359050612bbc81612b96565b92915050565b600060208284031215612bd857612bd7612b60565b5b6000612be684828501612bad565b91505092915050565b60008115159050919050565b612c0481612bef565b82525050565b6000602082019050612c1f6000830184612bfb565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b612c6481612c51565b82525050565b6000612c768383612c5b565b60208301905092915050565b6000602082019050919050565b6000612c9a82612c25565b612ca48185612c30565b9350612caf83612c41565b8060005b83811015612ce0578151612cc78882612c6a565b9750612cd283612c82565b925050600181019050612cb3565b5085935050505092915050565b60006020820190508181036000830152612d078184612c8f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d3a82612d0f565b9050919050565b612d4a81612d2f565b8114612d5557600080fd5b50565b600081359050612d6781612d41565b92915050565b600060208284031215612d8357612d82612b60565b5b6000612d9184828501612d58565b91505092915050565b6000819050919050565b612dad81612d9a565b82525050565b6000602082019050612dc86000830184612da4565b92915050565b612dd781612c51565b8114612de257600080fd5b50565b600081359050612df481612dce565b92915050565b600061ffff82169050919050565b612e1181612dfa565b8114612e1c57600080fd5b50565b600081359050612e2e81612e08565b92915050565b612e3d81612d9a565b8114612e4857600080fd5b50565b600081359050612e5a81612e34565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612e8557612e84612e60565b5b8235905067ffffffffffffffff811115612ea257612ea1612e65565b5b602083019150836020820283011115612ebe57612ebd612e6a565b5b9250929050565b600080600080600060808688031215612ee157612ee0612b60565b5b6000612eef88828901612de5565b9550506020612f0088828901612e1f565b9450506040612f1188828901612e4b565b935050606086013567ffffffffffffffff811115612f3257612f31612b65565b5b612f3e88828901612e6f565b92509250509295509295909350565b60008060408385031215612f6457612f63612b60565b5b6000612f7285828601612d58565b9250506020612f8385828601612de5565b9150509250929050565b612f9681612c51565b82525050565b6000602082019050612fb16000830184612f8d565b92915050565b600060208284031215612fcd57612fcc612b60565b5b6000612fdb84828501612de5565b91505092915050565b612fed81612dfa565b82525050565b60006020820190506130086000830184612fe4565b92915050565b61301781612bef565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000602082840312156130505761304f612b60565b5b600061305e84828501613025565b91505092915050565b600063ffffffff82169050919050565b61308081613067565b82525050565b600060208201905061309b6000830184613077565b92915050565b600080604083850312156130b8576130b7612b60565b5b60006130c685828601612de5565b92505060206130d785828601612d58565b9150509250929050565b6000819050919050565b60006131066131016130fc84612d0f565b6130e1565b612d0f565b9050919050565b6000613118826130eb565b9050919050565b600061312a8261310d565b9050919050565b61313a8161311f565b82525050565b60006020820190506131556000830184613131565b92915050565b60006020828403121561317157613170612b60565b5b600061317f84828501612e4b565b91505092915050565b61319181612d2f565b82525050565b60006020820190506131ac6000830184613188565b92915050565b60006131bd8261310d565b9050919050565b6131cd816131b2565b82525050565b60006020820190506131e860008301846131c4565b92915050565b60008083601f84011261320457613203612e60565b5b8235905067ffffffffffffffff81111561322157613220612e65565b5b60208301915083602082028301111561323d5761323c612e6a565b5b9250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61329282613249565b810181811067ffffffffffffffff821117156132b1576132b061325a565b5b80604052505050565b60006132c4612b56565b90506132d08282613289565b919050565b600067ffffffffffffffff8211156132f0576132ef61325a565b5b6132f982613249565b9050602081019050919050565b82818337600083830152505050565b6000613328613323846132d5565b6132ba565b90508281526020810184848401111561334457613343613244565b5b61334f848285613306565b509392505050565b600082601f83011261336c5761336b612e60565b5b813561337c848260208601613315565b91505092915050565b600080600080600080600060a0888a0312156133a4576133a3612b60565b5b60006133b28a828b01612d58565b97505060206133c38a828b01612d58565b965050604088013567ffffffffffffffff8111156133e4576133e3612b65565b5b6133f08a828b016131ee565b9550955050606088013567ffffffffffffffff81111561341357613412612b65565b5b61341f8a828b016131ee565b9350935050608088013567ffffffffffffffff81111561344257613441612b65565b5b61344e8a828b01613357565b91505092959891949750929550565b61346681612b6a565b82525050565b6000602082019050613481600083018461345d565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134bc81612dfa565b82525050565b60006134ce83836134b3565b60208301905092915050565b6000602082019050919050565b60006134f282613487565b6134fc8185613492565b9350613507836134a3565b8060005b8381101561353857815161351f88826134c2565b975061352a836134da565b92505060018101905061350b565b5085935050505092915050565b6000602082019050818103600083015261355f81846134e7565b905092915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61358c81613567565b82525050565b60006020820190506135a76000830184613583565b92915050565b600080604083850312156135c4576135c3612b60565b5b60006135d285828601612e1f565b92505060206135e385828601612d58565b9150509250929050565b600080600080600060a0868803121561360957613608612b60565b5b600061361788828901612d58565b955050602061362888828901612d58565b945050604061363988828901612de5565b935050606061364a88828901612de5565b925050608086013567ffffffffffffffff81111561366b5761366a612b65565b5b61367788828901613357565b9150509295509295909350565b600082825260208201905092915050565b7f5f636f6c6c6563746f7220697320616464726573732030000000000000000000600082015250565b60006136cb601783613684565b91506136d682613695565b602082019050919050565b600060208201905081810360008301526136fa816136be565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613737601f83613684565b915061374282613701565b602082019050919050565b600060208201905081810360008301526137668161372a565b9050919050565b7f4272696467696e672069732073746f7070656400000000000000000000000000600082015250565b60006137a3601383613684565b91506137ae8261376d565b602082019050919050565b600060208201905081810360008301526137d281613796565b9050919050565b7f496e76616c696420626f6e6573436f6e74726163740000000000000000000000600082015250565b600061380f601583613684565b915061381a826137d9565b602082019050919050565b6000602082019050818103600083015261383e81613802565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561387957808201518184015260208101905061385e565b83811115613888576000848401525b50505050565b600061389982613845565b6138a38185613850565b93506138b381856020860161385b565b80840191505092915050565b60006138cb828561388e565b91506138d7828461388e565b91508190509392505050565b7f4c656166206e6f74206d61746368696e6720746865206e6f6465000000000000600082015250565b6000613919601a83613684565b9150613924826138e3565b602082019050919050565b600060208201905081810360008301526139488161390c565b9050919050565b7f496e76616c69642070726f6f662e000000000000000000000000000000000000600082015250565b6000613985600e83613684565b91506139908261394f565b602082019050919050565b600060208201905081810360008301526139b481613978565b9050919050565b7f4e6f74206f776e6572206f66204f532069640000000000000000000000000000600082015250565b60006139f1601283613684565b91506139fc826139bb565b602082019050919050565b60006020820190508181036000830152613a20816139e4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a6182613067565b915063ffffffff821415613a7857613a77613a27565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ab9602083613684565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b6000604082019050613b046000830185613188565b613b116020830184612f8d565b9392505050565b600081519050613b2781612dce565b92915050565b600060208284031215613b4357613b42612b60565b5b6000613b5184828501613b18565b91505092915050565b7f43616e206e6f742073656e6420746f2061646472657373203000000000000000600082015250565b6000613b90601983613684565b9150613b9b82613b5a565b602082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b6000819050919050565b6000613beb613be6613be184613bc6565b6130e1565b612c51565b9050919050565b613bfb81613bd0565b82525050565b600082825260208201905092915050565b50565b6000613c22600083613c01565b9150613c2d82613c12565b600082019050919050565b600060a082019050613c4d6000830187613188565b613c5a6020830186613188565b613c676040830185612f8d565b613c746060830184613bf2565b8181036080830152613c8581613c15565b905095945050505050565b6000606082019050613ca56000830186613188565b613cb26020830185613188565b613cbf6040830184612f8d565b949350505050565b7f466f7262696464656e0000000000000000000000000000000000000000000000600082015250565b6000613cfd600983613684565b9150613d0882613cc7565b602082019050919050565b60006020820190508181036000830152613d2c81613cf0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613d6d82612c51565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613da057613d9f613a27565b5b600182019050919050565b7f5570646174652066726f6d206164647265737320300000000000000000000000600082015250565b6000613de1601583613684565b9150613dec82613dab565b602082019050919050565b60006020820190508181036000830152613e1081613dd4565b9050919050565b7f5f636f6e74726163742021616464726573732030000000000000000000000000600082015250565b6000613e4d601483613684565b9150613e5882613e17565b602082019050919050565b60006020820190508181036000830152613e7c81613e40565b9050919050565b7f4d696e7420746f20616464726573732030000000000000000000000000000000600082015250565b6000613eb9601183613684565b9150613ec482613e83565b602082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b6000613f0a613f05613f0084612dfa565b6130e1565b612c51565b9050919050565b613f1a81613eef565b82525050565b6000602082019050613f356000830184613f11565b92915050565b600081519050613f4a8161300e565b92915050565b600060208284031215613f6657613f65612b60565b5b6000613f7484828501613f3b565b91505092915050565b7f546f6b656e206578697374730000000000000000000000000000000000000000600082015250565b6000613fb3600c83613684565b9150613fbe82613f7d565b602082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b600081519050613ff881612d41565b92915050565b60006020828403121561401457614013612b60565b5b600061402284828501613fe9565b91505092915050565b60006060820190506140406000830186613188565b61404d6020830185613188565b61405a6040830184613f11565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140be602683613684565b91506140c982614062565b604082019050919050565b600060208201905081810360008301526140ed816140b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061412e82612c51565b915061413983612c51565b925082614149576141486140f4565b5b828204905092915050565b600061415f82612c51565b915061416a83612c51565b92508282101561417d5761417c613a27565b5b828203905092915050565b600061419382612c51565b915061419e83612c51565b9250826141ae576141ad6140f4565b5b828206905092915050565b60006141c482612c51565b91506141cf83612c51565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561420457614203613a27565b5b828201905092915050565b7f43616e206e6f74206d696e7420746f2061646472657373203000000000000000600082015250565b6000614245601983613684565b91506142508261420f565b602082019050919050565b6000602082019050818103600083015261427481614238565b9050919050565b7f4e657720746f6b656e2069642021657869737473000000000000000000000000600082015250565b60006142b1601483613684565b91506142bc8261427b565b602082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f546f6b656e20616c7265616479206d696e746564000000000000000000000000600082015250565b600061431d601483613684565b9150614328826142e7565b602082019050919050565b6000602082019050818103600083015261434c81614310565b9050919050565b60006040820190506143686000830185613188565b6143756020830184613f11565b939250505056fea2646970667358221220dc0b9b1150fab9ad3de5c548b6e45dc5f35e5da8c9c6980e56b7f428a107575264736f6c63430008090033
Deployed Bytecode Sourcemap
31832:7414:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8329:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38201:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37706:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32019:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34209:833;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32273:59;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32088:26;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39100:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32123:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32214:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37239:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31984:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38800:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28242:103;;;:::i;:::-;;32341:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36701:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27591:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38431:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32374:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35499:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38315:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33479:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38585:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38089:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36813:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32053:28;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37979:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35050:441;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32909:562;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28500:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32159:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37012:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37480:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8329:223;8431:4;8470:34;8455:49;;;:11;:49;;;;:89;;;;8508:36;8532:11;8508:23;:36::i;:::-;8455:89;8448:96;;8329:223;;;:::o;38201:106::-;38252:16;38288:11;38281:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38201:106;:::o;37706:223::-;37780:16;37839:1;37817:24;;:10;:24;;;;37809:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37887:22;:34;37910:10;37887:34;;;;;;;;;;;;;;;37880:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37706:223;;;:::o;32019:25::-;;;;:::o;34209:833::-;9989:1;10585:7;;:19;;10577:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9989:1;10718:7;:18;;;;34387:15:::1;;;;;;;;;;;34379:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;34479:1;34445:36;;34453:13;;;;;;;;;;;34445:36;;;;34437:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34553:12;34596:17;:6;:15;:17::i;:::-;34615;:6;:15;;;:17::i;:::-;34579:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34568:67;;;;;;34553:82;;34664:5;34656:4;:13;34648:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;34719:51;34738:12;;34719:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34752:10;;34764:5;34719:18;:51::i;:::-;34711:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;34835:10;34810:35;;:13;:21;34824:6;34810:21;;;;;;;;;;;;;;;;;;;;;:35;;;34802:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34881:12;;:14;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;34906:10;34922:6;34906:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34940:22;:34;34963:10;34940:34;;;;;;;;;;;;;;;34980:6;34940:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35000:34;35015:10;35027:6;35000:14;:34::i;:::-;;34368:674;9945:1:::0;10897:7;:22;;;;34209:833;;;;;:::o;32273:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32088:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39100:143::-;27822:12;:10;:12::i;:::-;27811:23;;:7;:5;:7::i;:::-;:23;;;27803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39187:8:::1;39169:15;;:26;;;;;;;;;;;;;;;;;;39211:24;39226:8;39211:24;;;;;;:::i;:::-;;;;;;;;39100:143:::0;:::o;32123:27::-;;;;;;;;;;;;;:::o;32214:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37239:231::-;37322:7;37372:1;37350:24;;:10;:24;;;;37342:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37420:10;;;;;;;;;;;:20;;;37441:10;37453:8;37420:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37413:49;;37239:231;;;;:::o;31984:26::-;;;;;;;;;;;;;:::o;38800:292::-;27822:12;:10;:12::i;:::-;27811:23;;:7;:5;:7::i;:::-;:23;;;27803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9989:1:::1;10585:7;;:19;;10577:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9989:1;10718:7;:18;;;;38925:1:::2;38907:20;;:6;:20;;;;38899:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38968:10;;;;;;;;;;;:27;;;39004:4;39011:6;39019:8;39029:1;38968:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;39075:8;39067:6;39051:33;;;;;;;;;;;;9945:1:::1;10897:7:::0;:22:::1;;;;38800:292:::0;;:::o;28242:103::-;27822:12;:10;:12::i;:::-;27811:23;;:7;:5;:7::i;:::-;:23;;;27803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28307:30:::1;28334:1;28307:18;:30::i;:::-;28242:103::o:0;32341:26::-;;;;;;;;;;;;;:::o;36701:104::-;27822:12;:10;:12::i;:::-;27811:23;;:7;:5;:7::i;:::-;:23;;;27803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36786:11:::1;36773:10;:24;;;;36701:104:::0;:::o;27591:87::-;27637:7;27664:6;;;;;;;;;;;27657:13;;27591:87;:::o;38431:102::-;38479:7;38514:10;;;;;;;;;;;38499:26;;38431:102;:::o;32374:35::-;;;;;;;;;;;;;:::o;35499:225::-;27822:12;:10;:12::i;:::-;27811:23;;:7;:5;:7::i;:::-;:23;;;27803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35610:1:::1;35592:20;;:6;:20;;;;35584:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35653:13;;;;;;;;;;;:30;;;35692:4;35699:6;35707:8;35653:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35499:225:::0;;:::o;38315:108::-;38366:7;38401:13;;;;;;;;;;;38386:29;;38315:108;:::o;33479:679::-;33716:6;9989:1;10585:7;;:19;;10577:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9989:1;10718:7;:18;;;;33765:10:::1;;;;;;;;;;;33743:33;;:10;:33;;;33735:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;33809:15;;;;;;;;;;;33801:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;33866:9;33861:196;33885:9;;:16;;33881:1;:20;33861:196;;;33920:44;33940:9;33951;;33961:1;33951:12;;;;;;;:::i;:::-;;;;;;;;33920:19;:44::i;:::-;34019:9;;34029:1;34019:12;;;;;;;:::i;:::-;;;;;;;;34008:9;33981:64;;33996:10;33981:64;;;34033:8;;34042:1;34033:11;;;;;;;:::i;:::-;;;;;;;;33981:64;;;;;;:::i;:::-;;;;;;;;33903:3;;;;;:::i;:::-;;;;33861:196;;;;34074:76;34103:7;34112:9;34123;;34074:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34134:8;;34074:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34144:5;34074:28;:76::i;:::-;34067:83;;9945:1:::0;10897:7;:22;;;;33479:679;;;;;;;;;:::o;38585:207::-;27822:12;:10;:12::i;:::-;27811:23;;:7;:5;:7::i;:::-;:23;;;27803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38704:1:::1;38684:22;;:8;:22;;;;38676:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;38745:39;38765:8;38775;38745:19;:39::i;:::-;38585:207:::0;;:::o;38089:104::-;38140:15;38175:10;38168:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38089:104;:::o;36813:191::-;27822:12;:10;:12::i;:::-;27811:23;;:7;:5;:7::i;:::-;:23;;;27803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36917:1:::1;36896:23;;:9;:23;;;;36888:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;36986:9;36955:13;;:41;;;;;;;;;;;;;;;;;;36813:191:::0;:::o;32053:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37979:102::-;38034:7;38061:12;;;;;;;;;;;38054:19;;;;37979:102;:::o;35050:441::-;27822:12;:10;:12::i;:::-;27811:23;;:7;:5;:7::i;:::-;:23;;;27803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35150:1:::1;35135:17;;:3;:17;;;;35127:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;35194:13;;;;;;;;;;;:20;;;35215:8;35194:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35193:31;35185:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;35258:13;;;;;;;;;;;:20;;;35279:8;35258:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:82;;;;;35335:4;35292:48;;:13;;;;;;;;;;;:21;;;35314:8;35292:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;35258:82;35254:196;;;35357:13;;;;;;;;;;;:30;;;35396:4;35403:3;35408:8;35357:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35432:7;;35254:196;35460:23;35469:8;35479:3;35460:8;:23::i;:::-;27882:1;35050:441:::0;;:::o;32909:562::-;33117:6;9989:1;10585:7;;:19;;10577:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9989:1;10718:7;:18;;;;33166:10:::1;;;;;;;;;;;33144:33;;:10;:33;;;33136:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;33210:15;;;;;;;;;;;33202:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;33262:40;33282:9;33293:8;33262:19;:40::i;:::-;33358:8;33347:9;33320:56;;33335:10;33320:56;;;33368:7;33320:56;;;;;;:::i;:::-;;;;;;;;33394:69;33418:7;33427:9;33438:8;33448:7;33457:5;33394:23;:69::i;:::-;33387:76;;9945:1:::0;10897:7;:22;;;;32909:562;;;;;;;:::o;28500:201::-;27822:12;:10;:12::i;:::-;27811:23;;:7;:5;:7::i;:::-;:23;;;27803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28609:1:::1;28589:22;;:8;:22;;;;28581:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28665:28;28684:8;28665:18;:28::i;:::-;28500:201:::0;:::o;32159:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;37012:179::-;27822:12;:10;:12::i;:::-;27811:23;;:7;:5;:7::i;:::-;:23;;;27803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37113:1:::1;37092:23;;:9;:23;;;;37084:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;37173:9;37151:10;;:32;;;;;;;;;;;;;;;;;;37012:179:::0;:::o;37480:218::-;37558:16;37617:1;37595:24;;:10;:24;;;;37587:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37665:13;:25;37679:10;37665:25;;;;;;;;;;;;;;;37658:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37480:218;;;:::o;5658:157::-;5743:4;5782:25;5767:40;;;:11;:40;;;;5760:47;;5658:157;;;:::o;11214:723::-;11270:13;11500:1;11491:5;:10;11487:53;;;11518:10;;;;;;;;;;;;;;;;;;;;;11487:53;11550:12;11565:5;11550:20;;11581:14;11606:78;11621:1;11613:4;:9;11606:78;;11639:8;;;;;:::i;:::-;;;;11670:2;11662:10;;;;;:::i;:::-;;;11606:78;;;11694:19;11726:6;11716:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11694:39;;11744:154;11760:1;11751:5;:10;11744:154;;11788:1;11778:11;;;;;:::i;:::-;;;11855:2;11847:5;:10;;;;:::i;:::-;11834:2;:24;;;;:::i;:::-;11821:39;;11804:6;11811;11804:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11884:2;11875:11;;;;;:::i;:::-;;;11744:154;;;11922:6;11908:21;;;;;11214:723;;;;:::o;29880:190::-;30005:4;30058;30029:25;30042:5;30049:4;30029:12;:25::i;:::-;:33;30022:40;;29880:190;;;;;:::o;36238:413::-;36314:4;36358:1;36339:21;;:7;:21;;;;36331:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;36421:1;36409:8;:13;;;;36401:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36469:13;;;;;;;;;;;:20;;;36490:8;36469:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36468:31;36460:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36537:13;;;;;;;;;;;:21;;;36559:7;36568:8;36537:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36612:8;36593:28;;36603:7;36593:28;;;;;;;;;;;;36639:4;36632:11;;36238:413;;;;:::o;13567:98::-;13620:7;13647:10;13640:17;;13567:98;:::o;28861:191::-;28935:16;28954:6;;;;;;;;;;;28935:25;;28980:8;28971:6;;:17;;;;;;;;;;;;;;;;;;29035:8;29004:40;;29025:8;29004:40;;;;;;;;;;;;28924:128;28861:191;:::o;35952:278::-;36063:1;36044:21;;:7;:21;;;;36036:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36104:11;36121:8;36104:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36167:7;36141:13;:23;36155:8;36141:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;36185:13;:22;36199:7;36185:22;;;;;;;;;;;;;;;36213:8;36185:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35952:278;;:::o;8843:255::-;9028:6;9054:36;;;9047:43;;8843:255;;;;;;;:::o;35776:168::-;35846:13;;;;;;;;;;;:21;;;35868:6;35883:8;35846:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35927:8;35909:27;;35919:6;35909:27;;;;;;;;;;;;35776:168;;:::o;8608:227::-;8770:6;8796:31;;;8789:38;;8608:227;;;;;;;:::o;30432:675::-;30515:7;30535:20;30558:4;30535:27;;30578:9;30573:497;30597:5;:12;30593:1;:16;30573:497;;;30631:20;30654:5;30660:1;30654:8;;;;;;;;:::i;:::-;;;;;;;;30631:31;;30697:12;30681;:28;30677:382;;30824:42;30839:12;30853;30824:14;:42::i;:::-;30809:57;;30677:382;;;31001:42;31016:12;31030;31001:14;:42::i;:::-;30986:57;;30677:382;30616:454;30611:3;;;;;:::i;:::-;;;;30573:497;;;;31087:12;31080:19;;;30432:675;;;;:::o;31115:224::-;31183:13;31246:1;31240:4;31233:15;31275:1;31269:4;31262:15;31316:4;31310;31300:21;31291:30;;31115:224;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:114::-;1585:6;1619:5;1613:12;1603:22;;1518:114;;;:::o;1638:184::-;1737:11;1771:6;1766:3;1759:19;1811:4;1806:3;1802:14;1787:29;;1638:184;;;;:::o;1828:132::-;1895:4;1918:3;1910:11;;1948:4;1943:3;1939:14;1931:22;;1828:132;;;:::o;1966:77::-;2003:7;2032:5;2021:16;;1966:77;;;:::o;2049:108::-;2126:24;2144:5;2126:24;:::i;:::-;2121:3;2114:37;2049:108;;:::o;2163:179::-;2232:10;2253:46;2295:3;2287:6;2253:46;:::i;:::-;2331:4;2326:3;2322:14;2308:28;;2163:179;;;;:::o;2348:113::-;2418:4;2450;2445:3;2441:14;2433:22;;2348:113;;;:::o;2497:732::-;2616:3;2645:54;2693:5;2645:54;:::i;:::-;2715:86;2794:6;2789:3;2715:86;:::i;:::-;2708:93;;2825:56;2875:5;2825:56;:::i;:::-;2904:7;2935:1;2920:284;2945:6;2942:1;2939:13;2920:284;;;3021:6;3015:13;3048:63;3107:3;3092:13;3048:63;:::i;:::-;3041:70;;3134:60;3187:6;3134:60;:::i;:::-;3124:70;;2980:224;2967:1;2964;2960:9;2955:14;;2920:284;;;2924:14;3220:3;3213:10;;2621:608;;;2497:732;;;;:::o;3235:373::-;3378:4;3416:2;3405:9;3401:18;3393:26;;3465:9;3459:4;3455:20;3451:1;3440:9;3436:17;3429:47;3493:108;3596:4;3587:6;3493:108;:::i;:::-;3485:116;;3235:373;;;;:::o;3614:126::-;3651:7;3691:42;3684:5;3680:54;3669:65;;3614:126;;;:::o;3746:96::-;3783:7;3812:24;3830:5;3812:24;:::i;:::-;3801:35;;3746:96;;;:::o;3848:122::-;3921:24;3939:5;3921:24;:::i;:::-;3914:5;3911:35;3901:63;;3960:1;3957;3950:12;3901:63;3848:122;:::o;3976:139::-;4022:5;4060:6;4047:20;4038:29;;4076:33;4103:5;4076:33;:::i;:::-;3976:139;;;;:::o;4121:329::-;4180:6;4229:2;4217:9;4208:7;4204:23;4200:32;4197:119;;;4235:79;;:::i;:::-;4197:119;4355:1;4380:53;4425:7;4416:6;4405:9;4401:22;4380:53;:::i;:::-;4370:63;;4326:117;4121:329;;;;:::o;4456:77::-;4493:7;4522:5;4511:16;;4456:77;;;:::o;4539:118::-;4626:24;4644:5;4626:24;:::i;:::-;4621:3;4614:37;4539:118;;:::o;4663:222::-;4756:4;4794:2;4783:9;4779:18;4771:26;;4807:71;4875:1;4864:9;4860:17;4851:6;4807:71;:::i;:::-;4663:222;;;;:::o;4891:122::-;4964:24;4982:5;4964:24;:::i;:::-;4957:5;4954:35;4944:63;;5003:1;5000;4993:12;4944:63;4891:122;:::o;5019:139::-;5065:5;5103:6;5090:20;5081:29;;5119:33;5146:5;5119:33;:::i;:::-;5019:139;;;;:::o;5164:89::-;5200:7;5240:6;5233:5;5229:18;5218:29;;5164:89;;;:::o;5259:120::-;5331:23;5348:5;5331:23;:::i;:::-;5324:5;5321:34;5311:62;;5369:1;5366;5359:12;5311:62;5259:120;:::o;5385:137::-;5430:5;5468:6;5455:20;5446:29;;5484:32;5510:5;5484:32;:::i;:::-;5385:137;;;;:::o;5528:122::-;5601:24;5619:5;5601:24;:::i;:::-;5594:5;5591:35;5581:63;;5640:1;5637;5630:12;5581:63;5528:122;:::o;5656:139::-;5702:5;5740:6;5727:20;5718:29;;5756:33;5783:5;5756:33;:::i;:::-;5656:139;;;;:::o;5801:117::-;5910:1;5907;5900:12;5924:117;6033:1;6030;6023:12;6047:117;6156:1;6153;6146:12;6187:568;6260:8;6270:6;6320:3;6313:4;6305:6;6301:17;6297:27;6287:122;;6328:79;;:::i;:::-;6287:122;6441:6;6428:20;6418:30;;6471:18;6463:6;6460:30;6457:117;;;6493:79;;:::i;:::-;6457:117;6607:4;6599:6;6595:17;6583:29;;6661:3;6653:4;6645:6;6641:17;6631:8;6627:32;6624:41;6621:128;;;6668:79;;:::i;:::-;6621:128;6187:568;;;;;:::o;6761:993::-;6873:6;6881;6889;6897;6905;6954:3;6942:9;6933:7;6929:23;6925:33;6922:120;;;6961:79;;:::i;:::-;6922:120;7081:1;7106:53;7151:7;7142:6;7131:9;7127:22;7106:53;:::i;:::-;7096:63;;7052:117;7208:2;7234:52;7278:7;7269:6;7258:9;7254:22;7234:52;:::i;:::-;7224:62;;7179:117;7335:2;7361:53;7406:7;7397:6;7386:9;7382:22;7361:53;:::i;:::-;7351:63;;7306:118;7491:2;7480:9;7476:18;7463:32;7522:18;7514:6;7511:30;7508:117;;;7544:79;;:::i;:::-;7508:117;7657:80;7729:7;7720:6;7709:9;7705:22;7657:80;:::i;:::-;7639:98;;;;7434:313;6761:993;;;;;;;;:::o;7760:474::-;7828:6;7836;7885:2;7873:9;7864:7;7860:23;7856:32;7853:119;;;7891:79;;:::i;:::-;7853:119;8011:1;8036:53;8081:7;8072:6;8061:9;8057:22;8036:53;:::i;:::-;8026:63;;7982:117;8138:2;8164:53;8209:7;8200:6;8189:9;8185:22;8164:53;:::i;:::-;8154:63;;8109:118;7760:474;;;;;:::o;8240:118::-;8327:24;8345:5;8327:24;:::i;:::-;8322:3;8315:37;8240:118;;:::o;8364:222::-;8457:4;8495:2;8484:9;8480:18;8472:26;;8508:71;8576:1;8565:9;8561:17;8552:6;8508:71;:::i;:::-;8364:222;;;;:::o;8592:329::-;8651:6;8700:2;8688:9;8679:7;8675:23;8671:32;8668:119;;;8706:79;;:::i;:::-;8668:119;8826:1;8851:53;8896:7;8887:6;8876:9;8872:22;8851:53;:::i;:::-;8841:63;;8797:117;8592:329;;;;:::o;8927:115::-;9012:23;9029:5;9012:23;:::i;:::-;9007:3;9000:36;8927:115;;:::o;9048:218::-;9139:4;9177:2;9166:9;9162:18;9154:26;;9190:69;9256:1;9245:9;9241:17;9232:6;9190:69;:::i;:::-;9048:218;;;;:::o;9272:116::-;9342:21;9357:5;9342:21;:::i;:::-;9335:5;9332:32;9322:60;;9378:1;9375;9368:12;9322:60;9272:116;:::o;9394:133::-;9437:5;9475:6;9462:20;9453:29;;9491:30;9515:5;9491:30;:::i;:::-;9394:133;;;;:::o;9533:323::-;9589:6;9638:2;9626:9;9617:7;9613:23;9609:32;9606:119;;;9644:79;;:::i;:::-;9606:119;9764:1;9789:50;9831:7;9822:6;9811:9;9807:22;9789:50;:::i;:::-;9779:60;;9735:114;9533:323;;;;:::o;9862:93::-;9898:7;9938:10;9931:5;9927:22;9916:33;;9862:93;;;:::o;9961:115::-;10046:23;10063:5;10046:23;:::i;:::-;10041:3;10034:36;9961:115;;:::o;10082:218::-;10173:4;10211:2;10200:9;10196:18;10188:26;;10224:69;10290:1;10279:9;10275:17;10266:6;10224:69;:::i;:::-;10082:218;;;;:::o;10306:474::-;10374:6;10382;10431:2;10419:9;10410:7;10406:23;10402:32;10399:119;;;10437:79;;:::i;:::-;10399:119;10557:1;10582:53;10627:7;10618:6;10607:9;10603:22;10582:53;:::i;:::-;10572:63;;10528:117;10684:2;10710:53;10755:7;10746:6;10735:9;10731:22;10710:53;:::i;:::-;10700:63;;10655:118;10306:474;;;;;:::o;10786:60::-;10814:3;10835:5;10828:12;;10786:60;;;:::o;10852:142::-;10902:9;10935:53;10953:34;10962:24;10980:5;10962:24;:::i;:::-;10953:34;:::i;:::-;10935:53;:::i;:::-;10922:66;;10852:142;;;:::o;11000:126::-;11050:9;11083:37;11114:5;11083:37;:::i;:::-;11070:50;;11000:126;;;:::o;11132:142::-;11198:9;11231:37;11262:5;11231:37;:::i;:::-;11218:50;;11132:142;;;:::o;11280:163::-;11383:53;11430:5;11383:53;:::i;:::-;11378:3;11371:66;11280:163;;:::o;11449:254::-;11558:4;11596:2;11585:9;11581:18;11573:26;;11609:87;11693:1;11682:9;11678:17;11669:6;11609:87;:::i;:::-;11449:254;;;;:::o;11709:329::-;11768:6;11817:2;11805:9;11796:7;11792:23;11788:32;11785:119;;;11823:79;;:::i;:::-;11785:119;11943:1;11968:53;12013:7;12004:6;11993:9;11989:22;11968:53;:::i;:::-;11958:63;;11914:117;11709:329;;;;:::o;12044:118::-;12131:24;12149:5;12131:24;:::i;:::-;12126:3;12119:37;12044:118;;:::o;12168:222::-;12261:4;12299:2;12288:9;12284:18;12276:26;;12312:71;12380:1;12369:9;12365:17;12356:6;12312:71;:::i;:::-;12168:222;;;;:::o;12396:149::-;12469:9;12502:37;12533:5;12502:37;:::i;:::-;12489:50;;12396:149;;;:::o;12551:177::-;12661:60;12715:5;12661:60;:::i;:::-;12656:3;12649:73;12551:177;;:::o;12734:268::-;12850:4;12888:2;12877:9;12873:18;12865:26;;12901:94;12992:1;12981:9;12977:17;12968:6;12901:94;:::i;:::-;12734:268;;;;:::o;13025:568::-;13098:8;13108:6;13158:3;13151:4;13143:6;13139:17;13135:27;13125:122;;13166:79;;:::i;:::-;13125:122;13279:6;13266:20;13256:30;;13309:18;13301:6;13298:30;13295:117;;;13331:79;;:::i;:::-;13295:117;13445:4;13437:6;13433:17;13421:29;;13499:3;13491:4;13483:6;13479:17;13469:8;13465:32;13462:41;13459:128;;;13506:79;;:::i;:::-;13459:128;13025:568;;;;;:::o;13599:117::-;13708:1;13705;13698:12;13722:102;13763:6;13814:2;13810:7;13805:2;13798:5;13794:14;13790:28;13780:38;;13722:102;;;:::o;13830:180::-;13878:77;13875:1;13868:88;13975:4;13972:1;13965:15;13999:4;13996:1;13989:15;14016:281;14099:27;14121:4;14099:27;:::i;:::-;14091:6;14087:40;14229:6;14217:10;14214:22;14193:18;14181:10;14178:34;14175:62;14172:88;;;14240:18;;:::i;:::-;14172:88;14280:10;14276:2;14269:22;14059:238;14016:281;;:::o;14303:129::-;14337:6;14364:20;;:::i;:::-;14354:30;;14393:33;14421:4;14413:6;14393:33;:::i;:::-;14303:129;;;:::o;14438:307::-;14499:4;14589:18;14581:6;14578:30;14575:56;;;14611:18;;:::i;:::-;14575:56;14649:29;14671:6;14649:29;:::i;:::-;14641:37;;14733:4;14727;14723:15;14715:23;;14438:307;;;:::o;14751:154::-;14835:6;14830:3;14825;14812:30;14897:1;14888:6;14883:3;14879:16;14872:27;14751:154;;;:::o;14911:410::-;14988:5;15013:65;15029:48;15070:6;15029:48;:::i;:::-;15013:65;:::i;:::-;15004:74;;15101:6;15094:5;15087:21;15139:4;15132:5;15128:16;15177:3;15168:6;15163:3;15159:16;15156:25;15153:112;;;15184:79;;:::i;:::-;15153:112;15274:41;15308:6;15303:3;15298;15274:41;:::i;:::-;14994:327;14911:410;;;;;:::o;15340:338::-;15395:5;15444:3;15437:4;15429:6;15425:17;15421:27;15411:122;;15452:79;;:::i;:::-;15411:122;15569:6;15556:20;15594:78;15668:3;15660:6;15653:4;15645:6;15641:17;15594:78;:::i;:::-;15585:87;;15401:277;15340:338;;;;:::o;15684:1549::-;15842:6;15850;15858;15866;15874;15882;15890;15939:3;15927:9;15918:7;15914:23;15910:33;15907:120;;;15946:79;;:::i;:::-;15907:120;16066:1;16091:53;16136:7;16127:6;16116:9;16112:22;16091:53;:::i;:::-;16081:63;;16037:117;16193:2;16219:53;16264:7;16255:6;16244:9;16240:22;16219:53;:::i;:::-;16209:63;;16164:118;16349:2;16338:9;16334:18;16321:32;16380:18;16372:6;16369:30;16366:117;;;16402:79;;:::i;:::-;16366:117;16515:80;16587:7;16578:6;16567:9;16563:22;16515:80;:::i;:::-;16497:98;;;;16292:313;16672:2;16661:9;16657:18;16644:32;16703:18;16695:6;16692:30;16689:117;;;16725:79;;:::i;:::-;16689:117;16838:80;16910:7;16901:6;16890:9;16886:22;16838:80;:::i;:::-;16820:98;;;;16615:313;16995:3;16984:9;16980:19;16967:33;17027:18;17019:6;17016:30;17013:117;;;17049:79;;:::i;:::-;17013:117;17154:62;17208:7;17199:6;17188:9;17184:22;17154:62;:::i;:::-;17144:72;;16938:288;15684:1549;;;;;;;;;;:::o;17239:115::-;17324:23;17341:5;17324:23;:::i;:::-;17319:3;17312:36;17239:115;;:::o;17360:218::-;17451:4;17489:2;17478:9;17474:18;17466:26;;17502:69;17568:1;17557:9;17553:17;17544:6;17502:69;:::i;:::-;17360:218;;;;:::o;17584:113::-;17650:6;17684:5;17678:12;17668:22;;17584:113;;;:::o;17703:183::-;17801:11;17835:6;17830:3;17823:19;17875:4;17870:3;17866:14;17851:29;;17703:183;;;;:::o;17892:131::-;17958:4;17981:3;17973:11;;18011:4;18006:3;18002:14;17994:22;;17892:131;;;:::o;18029:105::-;18104:23;18121:5;18104:23;:::i;:::-;18099:3;18092:36;18029:105;;:::o;18140:175::-;18207:10;18228:44;18268:3;18260:6;18228:44;:::i;:::-;18304:4;18299:3;18295:14;18281:28;;18140:175;;;;:::o;18321:112::-;18390:4;18422;18417:3;18413:14;18405:22;;18321:112;;;:::o;18467:724::-;18584:3;18613:53;18660:5;18613:53;:::i;:::-;18682:85;18760:6;18755:3;18682:85;:::i;:::-;18675:92;;18791:55;18840:5;18791:55;:::i;:::-;18869:7;18900:1;18885:281;18910:6;18907:1;18904:13;18885:281;;;18986:6;18980:13;19013:61;19070:3;19055:13;19013:61;:::i;:::-;19006:68;;19097:59;19149:6;19097:59;:::i;:::-;19087:69;;18945:221;18932:1;18929;18925:9;18920:14;;18885:281;;;18889:14;19182:3;19175:10;;18589:602;;;18467:724;;;;:::o;19197:369::-;19338:4;19376:2;19365:9;19361:18;19353:26;;19425:9;19419:4;19415:20;19411:1;19400:9;19396:17;19389:47;19453:106;19554:4;19545:6;19453:106;:::i;:::-;19445:114;;19197:369;;;;:::o;19572:118::-;19609:7;19649:34;19642:5;19638:46;19627:57;;19572:118;;;:::o;19696:::-;19783:24;19801:5;19783:24;:::i;:::-;19778:3;19771:37;19696:118;;:::o;19820:222::-;19913:4;19951:2;19940:9;19936:18;19928:26;;19964:71;20032:1;20021:9;20017:17;20008:6;19964:71;:::i;:::-;19820:222;;;;:::o;20048:472::-;20115:6;20123;20172:2;20160:9;20151:7;20147:23;20143:32;20140:119;;;20178:79;;:::i;:::-;20140:119;20298:1;20323:52;20367:7;20358:6;20347:9;20343:22;20323:52;:::i;:::-;20313:62;;20269:116;20424:2;20450:53;20495:7;20486:6;20475:9;20471:22;20450:53;:::i;:::-;20440:63;;20395:118;20048:472;;;;;:::o;20526:1089::-;20630:6;20638;20646;20654;20662;20711:3;20699:9;20690:7;20686:23;20682:33;20679:120;;;20718:79;;:::i;:::-;20679:120;20838:1;20863:53;20908:7;20899:6;20888:9;20884:22;20863:53;:::i;:::-;20853:63;;20809:117;20965:2;20991:53;21036:7;21027:6;21016:9;21012:22;20991:53;:::i;:::-;20981:63;;20936:118;21093:2;21119:53;21164:7;21155:6;21144:9;21140:22;21119:53;:::i;:::-;21109:63;;21064:118;21221:2;21247:53;21292:7;21283:6;21272:9;21268:22;21247:53;:::i;:::-;21237:63;;21192:118;21377:3;21366:9;21362:19;21349:33;21409:18;21401:6;21398:30;21395:117;;;21431:79;;:::i;:::-;21395:117;21536:62;21590:7;21581:6;21570:9;21566:22;21536:62;:::i;:::-;21526:72;;21320:288;20526:1089;;;;;;;;:::o;21621:169::-;21705:11;21739:6;21734:3;21727:19;21779:4;21774:3;21770:14;21755:29;;21621:169;;;;:::o;21796:173::-;21936:25;21932:1;21924:6;21920:14;21913:49;21796:173;:::o;21975:366::-;22117:3;22138:67;22202:2;22197:3;22138:67;:::i;:::-;22131:74;;22214:93;22303:3;22214:93;:::i;:::-;22332:2;22327:3;22323:12;22316:19;;21975:366;;;:::o;22347:419::-;22513:4;22551:2;22540:9;22536:18;22528:26;;22600:9;22594:4;22590:20;22586:1;22575:9;22571:17;22564:47;22628:131;22754:4;22628:131;:::i;:::-;22620:139;;22347:419;;;:::o;22772:181::-;22912:33;22908:1;22900:6;22896:14;22889:57;22772:181;:::o;22959:366::-;23101:3;23122:67;23186:2;23181:3;23122:67;:::i;:::-;23115:74;;23198:93;23287:3;23198:93;:::i;:::-;23316:2;23311:3;23307:12;23300:19;;22959:366;;;:::o;23331:419::-;23497:4;23535:2;23524:9;23520:18;23512:26;;23584:9;23578:4;23574:20;23570:1;23559:9;23555:17;23548:47;23612:131;23738:4;23612:131;:::i;:::-;23604:139;;23331:419;;;:::o;23756:169::-;23896:21;23892:1;23884:6;23880:14;23873:45;23756:169;:::o;23931:366::-;24073:3;24094:67;24158:2;24153:3;24094:67;:::i;:::-;24087:74;;24170:93;24259:3;24170:93;:::i;:::-;24288:2;24283:3;24279:12;24272:19;;23931:366;;;:::o;24303:419::-;24469:4;24507:2;24496:9;24492:18;24484:26;;24556:9;24550:4;24546:20;24542:1;24531:9;24527:17;24520:47;24584:131;24710:4;24584:131;:::i;:::-;24576:139;;24303:419;;;:::o;24728:171::-;24868:23;24864:1;24856:6;24852:14;24845:47;24728:171;:::o;24905:366::-;25047:3;25068:67;25132:2;25127:3;25068:67;:::i;:::-;25061:74;;25144:93;25233:3;25144:93;:::i;:::-;25262:2;25257:3;25253:12;25246:19;;24905:366;;;:::o;25277:419::-;25443:4;25481:2;25470:9;25466:18;25458:26;;25530:9;25524:4;25520:20;25516:1;25505:9;25501:17;25494:47;25558:131;25684:4;25558:131;:::i;:::-;25550:139;;25277:419;;;:::o;25702:99::-;25754:6;25788:5;25782:12;25772:22;;25702:99;;;:::o;25807:148::-;25909:11;25946:3;25931:18;;25807:148;;;;:::o;25961:307::-;26029:1;26039:113;26053:6;26050:1;26047:13;26039:113;;;26138:1;26133:3;26129:11;26123:18;26119:1;26114:3;26110:11;26103:39;26075:2;26072:1;26068:10;26063:15;;26039:113;;;26170:6;26167:1;26164:13;26161:101;;;26250:1;26241:6;26236:3;26232:16;26225:27;26161:101;26010:258;25961:307;;;:::o;26274:377::-;26380:3;26408:39;26441:5;26408:39;:::i;:::-;26463:89;26545:6;26540:3;26463:89;:::i;:::-;26456:96;;26561:52;26606:6;26601:3;26594:4;26587:5;26583:16;26561:52;:::i;:::-;26638:6;26633:3;26629:16;26622:23;;26384:267;26274:377;;;;:::o;26657:435::-;26837:3;26859:95;26950:3;26941:6;26859:95;:::i;:::-;26852:102;;26971:95;27062:3;27053:6;26971:95;:::i;:::-;26964:102;;27083:3;27076:10;;26657:435;;;;;:::o;27098:176::-;27238:28;27234:1;27226:6;27222:14;27215:52;27098:176;:::o;27280:366::-;27422:3;27443:67;27507:2;27502:3;27443:67;:::i;:::-;27436:74;;27519:93;27608:3;27519:93;:::i;:::-;27637:2;27632:3;27628:12;27621:19;;27280:366;;;:::o;27652:419::-;27818:4;27856:2;27845:9;27841:18;27833:26;;27905:9;27899:4;27895:20;27891:1;27880:9;27876:17;27869:47;27933:131;28059:4;27933:131;:::i;:::-;27925:139;;27652:419;;;:::o;28077:164::-;28217:16;28213:1;28205:6;28201:14;28194:40;28077:164;:::o;28247:366::-;28389:3;28410:67;28474:2;28469:3;28410:67;:::i;:::-;28403:74;;28486:93;28575:3;28486:93;:::i;:::-;28604:2;28599:3;28595:12;28588:19;;28247:366;;;:::o;28619:419::-;28785:4;28823:2;28812:9;28808:18;28800:26;;28872:9;28866:4;28862:20;28858:1;28847:9;28843:17;28836:47;28900:131;29026:4;28900:131;:::i;:::-;28892:139;;28619:419;;;:::o;29044:168::-;29184:20;29180:1;29172:6;29168:14;29161:44;29044:168;:::o;29218:366::-;29360:3;29381:67;29445:2;29440:3;29381:67;:::i;:::-;29374:74;;29457:93;29546:3;29457:93;:::i;:::-;29575:2;29570:3;29566:12;29559:19;;29218:366;;;:::o;29590:419::-;29756:4;29794:2;29783:9;29779:18;29771:26;;29843:9;29837:4;29833:20;29829:1;29818:9;29814:17;29807:47;29871:131;29997:4;29871:131;:::i;:::-;29863:139;;29590:419;;;:::o;30015:180::-;30063:77;30060:1;30053:88;30160:4;30157:1;30150:15;30184:4;30181:1;30174:15;30201:175;30239:3;30262:23;30279:5;30262:23;:::i;:::-;30253:32;;30307:10;30300:5;30297:21;30294:47;;;30321:18;;:::i;:::-;30294:47;30368:1;30361:5;30357:13;30350:20;;30201:175;;;:::o;30382:182::-;30522:34;30518:1;30510:6;30506:14;30499:58;30382:182;:::o;30570:366::-;30712:3;30733:67;30797:2;30792:3;30733:67;:::i;:::-;30726:74;;30809:93;30898:3;30809:93;:::i;:::-;30927:2;30922:3;30918:12;30911:19;;30570:366;;;:::o;30942:419::-;31108:4;31146:2;31135:9;31131:18;31123:26;;31195:9;31189:4;31185:20;31181:1;31170:9;31166:17;31159:47;31223:131;31349:4;31223:131;:::i;:::-;31215:139;;30942:419;;;:::o;31367:332::-;31488:4;31526:2;31515:9;31511:18;31503:26;;31539:71;31607:1;31596:9;31592:17;31583:6;31539:71;:::i;:::-;31620:72;31688:2;31677:9;31673:18;31664:6;31620:72;:::i;:::-;31367:332;;;;;:::o;31705:143::-;31762:5;31793:6;31787:13;31778:22;;31809:33;31836:5;31809:33;:::i;:::-;31705:143;;;;:::o;31854:351::-;31924:6;31973:2;31961:9;31952:7;31948:23;31944:32;31941:119;;;31979:79;;:::i;:::-;31941:119;32099:1;32124:64;32180:7;32171:6;32160:9;32156:22;32124:64;:::i;:::-;32114:74;;32070:128;31854:351;;;;:::o;32211:175::-;32351:27;32347:1;32339:6;32335:14;32328:51;32211:175;:::o;32392:366::-;32534:3;32555:67;32619:2;32614:3;32555:67;:::i;:::-;32548:74;;32631:93;32720:3;32631:93;:::i;:::-;32749:2;32744:3;32740:12;32733:19;;32392:366;;;:::o;32764:419::-;32930:4;32968:2;32957:9;32953:18;32945:26;;33017:9;33011:4;33007:20;33003:1;32992:9;32988:17;32981:47;33045:131;33171:4;33045:131;:::i;:::-;33037:139;;32764:419;;;:::o;33189:85::-;33234:7;33263:5;33252:16;;33189:85;;;:::o;33280:158::-;33338:9;33371:61;33389:42;33398:32;33424:5;33398:32;:::i;:::-;33389:42;:::i;:::-;33371:61;:::i;:::-;33358:74;;33280:158;;;:::o;33444:147::-;33539:45;33578:5;33539:45;:::i;:::-;33534:3;33527:58;33444:147;;:::o;33597:168::-;33680:11;33714:6;33709:3;33702:19;33754:4;33749:3;33745:14;33730:29;;33597:168;;;;:::o;33771:114::-;;:::o;33891:362::-;34032:3;34053:65;34116:1;34111:3;34053:65;:::i;:::-;34046:72;;34127:93;34216:3;34127:93;:::i;:::-;34245:1;34240:3;34236:11;34229:18;;33891:362;;;:::o;34259:875::-;34544:4;34582:3;34571:9;34567:19;34559:27;;34596:71;34664:1;34653:9;34649:17;34640:6;34596:71;:::i;:::-;34677:72;34745:2;34734:9;34730:18;34721:6;34677:72;:::i;:::-;34759;34827:2;34816:9;34812:18;34803:6;34759:72;:::i;:::-;34841:80;34917:2;34906:9;34902:18;34893:6;34841:80;:::i;:::-;34969:9;34963:4;34959:20;34953:3;34942:9;34938:19;34931:49;34997:130;35122:4;34997:130;:::i;:::-;34989:138;;34259:875;;;;;;;:::o;35140:442::-;35289:4;35327:2;35316:9;35312:18;35304:26;;35340:71;35408:1;35397:9;35393:17;35384:6;35340:71;:::i;:::-;35421:72;35489:2;35478:9;35474:18;35465:6;35421:72;:::i;:::-;35503;35571:2;35560:9;35556:18;35547:6;35503:72;:::i;:::-;35140:442;;;;;;:::o;35588:159::-;35728:11;35724:1;35716:6;35712:14;35705:35;35588:159;:::o;35753:365::-;35895:3;35916:66;35980:1;35975:3;35916:66;:::i;:::-;35909:73;;35991:93;36080:3;35991:93;:::i;:::-;36109:2;36104:3;36100:12;36093:19;;35753:365;;;:::o;36124:419::-;36290:4;36328:2;36317:9;36313:18;36305:26;;36377:9;36371:4;36367:20;36363:1;36352:9;36348:17;36341:47;36405:131;36531:4;36405:131;:::i;:::-;36397:139;;36124:419;;;:::o;36549:180::-;36597:77;36594:1;36587:88;36694:4;36691:1;36684:15;36718:4;36715:1;36708:15;36735:233;36774:3;36797:24;36815:5;36797:24;:::i;:::-;36788:33;;36843:66;36836:5;36833:77;36830:103;;;36913:18;;:::i;:::-;36830:103;36960:1;36953:5;36949:13;36942:20;;36735:233;;;:::o;36974:171::-;37114:23;37110:1;37102:6;37098:14;37091:47;36974:171;:::o;37151:366::-;37293:3;37314:67;37378:2;37373:3;37314:67;:::i;:::-;37307:74;;37390:93;37479:3;37390:93;:::i;:::-;37508:2;37503:3;37499:12;37492:19;;37151:366;;;:::o;37523:419::-;37689:4;37727:2;37716:9;37712:18;37704:26;;37776:9;37770:4;37766:20;37762:1;37751:9;37747:17;37740:47;37804:131;37930:4;37804:131;:::i;:::-;37796:139;;37523:419;;;:::o;37948:170::-;38088:22;38084:1;38076:6;38072:14;38065:46;37948:170;:::o;38124:366::-;38266:3;38287:67;38351:2;38346:3;38287:67;:::i;:::-;38280:74;;38363:93;38452:3;38363:93;:::i;:::-;38481:2;38476:3;38472:12;38465:19;;38124:366;;;:::o;38496:419::-;38662:4;38700:2;38689:9;38685:18;38677:26;;38749:9;38743:4;38739:20;38735:1;38724:9;38720:17;38713:47;38777:131;38903:4;38777:131;:::i;:::-;38769:139;;38496:419;;;:::o;38921:167::-;39061:19;39057:1;39049:6;39045:14;39038:43;38921:167;:::o;39094:366::-;39236:3;39257:67;39321:2;39316:3;39257:67;:::i;:::-;39250:74;;39333:93;39422:3;39333:93;:::i;:::-;39451:2;39446:3;39442:12;39435:19;;39094:366;;;:::o;39466:419::-;39632:4;39670:2;39659:9;39655:18;39647:26;;39719:9;39713:4;39709:20;39705:1;39694:9;39690:17;39683:47;39747:131;39873:4;39747:131;:::i;:::-;39739:139;;39466:419;;;:::o;39891:140::-;39940:9;39973:52;39991:33;40000:23;40017:5;40000:23;:::i;:::-;39991:33;:::i;:::-;39973:52;:::i;:::-;39960:65;;39891:140;;;:::o;40037:129::-;40123:36;40153:5;40123:36;:::i;:::-;40118:3;40111:49;40037:129;;:::o;40172:220::-;40264:4;40302:2;40291:9;40287:18;40279:26;;40315:70;40382:1;40371:9;40367:17;40358:6;40315:70;:::i;:::-;40172:220;;;;:::o;40398:137::-;40452:5;40483:6;40477:13;40468:22;;40499:30;40523:5;40499:30;:::i;:::-;40398:137;;;;:::o;40541:345::-;40608:6;40657:2;40645:9;40636:7;40632:23;40628:32;40625:119;;;40663:79;;:::i;:::-;40625:119;40783:1;40808:61;40861:7;40852:6;40841:9;40837:22;40808:61;:::i;:::-;40798:71;;40754:125;40541:345;;;;:::o;40892:162::-;41032:14;41028:1;41020:6;41016:14;41009:38;40892:162;:::o;41060:366::-;41202:3;41223:67;41287:2;41282:3;41223:67;:::i;:::-;41216:74;;41299:93;41388:3;41299:93;:::i;:::-;41417:2;41412:3;41408:12;41401:19;;41060:366;;;:::o;41432:419::-;41598:4;41636:2;41625:9;41621:18;41613:26;;41685:9;41679:4;41675:20;41671:1;41660:9;41656:17;41649:47;41713:131;41839:4;41713:131;:::i;:::-;41705:139;;41432:419;;;:::o;41857:143::-;41914:5;41945:6;41939:13;41930:22;;41961:33;41988:5;41961:33;:::i;:::-;41857:143;;;;:::o;42006:351::-;42076:6;42125:2;42113:9;42104:7;42100:23;42096:32;42093:119;;;42131:79;;:::i;:::-;42093:119;42251:1;42276:64;42332:7;42323:6;42312:9;42308:22;42276:64;:::i;:::-;42266:74;;42222:128;42006:351;;;;:::o;42363:440::-;42511:4;42549:2;42538:9;42534:18;42526:26;;42562:71;42630:1;42619:9;42615:17;42606:6;42562:71;:::i;:::-;42643:72;42711:2;42700:9;42696:18;42687:6;42643:72;:::i;:::-;42725:71;42792:2;42781:9;42777:18;42768:6;42725:71;:::i;:::-;42363:440;;;;;;:::o;42809:225::-;42949:34;42945:1;42937:6;42933:14;42926:58;43018:8;43013:2;43005:6;43001:15;42994:33;42809:225;:::o;43040:366::-;43182:3;43203:67;43267:2;43262:3;43203:67;:::i;:::-;43196:74;;43279:93;43368:3;43279:93;:::i;:::-;43397:2;43392:3;43388:12;43381:19;;43040:366;;;:::o;43412:419::-;43578:4;43616:2;43605:9;43601:18;43593:26;;43665:9;43659:4;43655:20;43651:1;43640:9;43636:17;43629:47;43693:131;43819:4;43693:131;:::i;:::-;43685:139;;43412:419;;;:::o;43837:180::-;43885:77;43882:1;43875:88;43982:4;43979:1;43972:15;44006:4;44003:1;43996:15;44023:185;44063:1;44080:20;44098:1;44080:20;:::i;:::-;44075:25;;44114:20;44132:1;44114:20;:::i;:::-;44109:25;;44153:1;44143:35;;44158:18;;:::i;:::-;44143:35;44200:1;44197;44193:9;44188:14;;44023:185;;;;:::o;44214:191::-;44254:4;44274:20;44292:1;44274:20;:::i;:::-;44269:25;;44308:20;44326:1;44308:20;:::i;:::-;44303:25;;44347:1;44344;44341:8;44338:34;;;44352:18;;:::i;:::-;44338:34;44397:1;44394;44390:9;44382:17;;44214:191;;;;:::o;44411:176::-;44443:1;44460:20;44478:1;44460:20;:::i;:::-;44455:25;;44494:20;44512:1;44494:20;:::i;:::-;44489:25;;44533:1;44523:35;;44538:18;;:::i;:::-;44523:35;44579:1;44576;44572:9;44567:14;;44411:176;;;;:::o;44593:305::-;44633:3;44652:20;44670:1;44652:20;:::i;:::-;44647:25;;44686:20;44704:1;44686:20;:::i;:::-;44681:25;;44840:1;44772:66;44768:74;44765:1;44762:81;44759:107;;;44846:18;;:::i;:::-;44759:107;44890:1;44887;44883:9;44876:16;;44593:305;;;;:::o;44904:175::-;45044:27;45040:1;45032:6;45028:14;45021:51;44904:175;:::o;45085:366::-;45227:3;45248:67;45312:2;45307:3;45248:67;:::i;:::-;45241:74;;45324:93;45413:3;45324:93;:::i;:::-;45442:2;45437:3;45433:12;45426:19;;45085:366;;;:::o;45457:419::-;45623:4;45661:2;45650:9;45646:18;45638:26;;45710:9;45704:4;45700:20;45696:1;45685:9;45681:17;45674:47;45738:131;45864:4;45738:131;:::i;:::-;45730:139;;45457:419;;;:::o;45882:170::-;46022:22;46018:1;46010:6;46006:14;45999:46;45882:170;:::o;46058:366::-;46200:3;46221:67;46285:2;46280:3;46221:67;:::i;:::-;46214:74;;46297:93;46386:3;46297:93;:::i;:::-;46415:2;46410:3;46406:12;46399:19;;46058:366;;;:::o;46430:419::-;46596:4;46634:2;46623:9;46619:18;46611:26;;46683:9;46677:4;46673:20;46669:1;46658:9;46654:17;46647:47;46711:131;46837:4;46711:131;:::i;:::-;46703:139;;46430:419;;;:::o;46855:170::-;46995:22;46991:1;46983:6;46979:14;46972:46;46855:170;:::o;47031:366::-;47173:3;47194:67;47258:2;47253:3;47194:67;:::i;:::-;47187:74;;47270:93;47359:3;47270:93;:::i;:::-;47388:2;47383:3;47379:12;47372:19;;47031:366;;;:::o;47403:419::-;47569:4;47607:2;47596:9;47592:18;47584:26;;47656:9;47650:4;47646:20;47642:1;47631:9;47627:17;47620:47;47684:131;47810:4;47684:131;:::i;:::-;47676:139;;47403:419;;;:::o;47828:330::-;47948:4;47986:2;47975:9;47971:18;47963:26;;47999:71;48067:1;48056:9;48052:17;48043:6;47999:71;:::i;:::-;48080;48147:2;48136:9;48132:18;48123:6;48080:71;:::i;:::-;47828:330;;;;;:::o
Swarm Source
ipfs://dc0b9b1150fab9ad3de5c548b6e45dc5f35e5da8c9c6980e56b7f428a1075752
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.