ERC-721
Overview
Max Total Supply
771 ANGEL
Holders
195
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HeavenlyAngels
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-26 */ //SPDX-License-Identifier: MIT /* ██╗░░██╗███████╗░█████╗░██╗░░░██╗███████╗███╗░░██╗██╗░░░░░██╗░░░██╗ ██║░░██║██╔════╝██╔══██╗██║░░░██║██╔════╝████╗░██║██║░░░░░╚██╗░██╔╝ ███████║█████╗░░███████║╚██╗░██╔╝█████╗░░██╔██╗██║██║░░░░░░╚████╔╝░ ██╔══██║██╔══╝░░██╔══██║░╚████╔╝░██╔══╝░░██║╚████║██║░░░░░░░╚██╔╝░░ ██║░░██║███████╗██║░░██║░░╚██╔╝░░███████╗██║░╚███║███████╗░░░██║░░░ ╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝░░░╚═╝░░░╚══════╝╚═╝░░╚══╝╚══════╝░░░╚═╝░░░ ░█████╗░███╗░░██╗░██████╗░███████╗██╗░░░░░░██████╗ ██╔══██╗████╗░██║██╔════╝░██╔════╝██║░░░░░██╔════╝ ███████║██╔██╗██║██║░░██╗░█████╗░░██║░░░░░╚█████╗░ ██╔══██║██║╚████║██║░░╚██╗██╔══╝░░██║░░░░░░╚═══██╗ ██║░░██║██║░╚███║╚██████╔╝███████╗███████╗██████╔╝ ╚═╝░░╚═╝╚═╝░░╚══╝░╚═════╝░╚══════╝╚══════╝╚═════╝░ */ pragma solidity ^0.8.0; library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "#31"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "#32"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "#33"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "#34"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "#35"); require(isContract(target), "#36"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "#37"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "#38"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "#39"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "#40"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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 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; } /** * @dev ERC721 token with storage based token URI management. */ /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } /** * @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 internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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(), "#41"); _; } /** * @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 { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } address payable internal dev = payable(0xA0D0de1070948cF0CBD6Bdf4fB34D4D056bE7bC5); function _withdrawAll() internal virtual { uint256 balanceDev = address(this).balance*20/100; uint256 balanceNftgangs = address(this).balance-balanceDev; payable(dev).transfer(balanceDev); payable(_msgSender()).transfer(balanceNftgangs); } /** * @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), "#42"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "#43"); return string(buffer); } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "#44"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "#45"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "#46"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "#47"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "#48" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "#49"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "#50"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "#51"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "#52"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "#53"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "#54"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "#55"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "#56"); require(!_exists(tokenId), "#57"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "#58"); require(to != address(0), "#59"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("#60"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "#61"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } /**55 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract HeavenlyAngels is ERC721Enumerable, Ownable { uint public constant MAX_TOKEN = 8888; uint private constant MAX_RESERV = 150; uint private tokenIdReserv = 0; uint public tokenIdCount = tokenIdReserv + MAX_RESERV; uint public basePrice = 3*10**16; // 0.03 ETH string _baseTokenURI; bool public saleEnable = false; bool public saleEnableDLC = false; mapping (uint256 => bool) internal _whitelistMESP; mapping (uint256 => bool) internal _whitelistDLC; HeavenlyAngels internal MESP = HeavenlyAngels(0x3bB82ae28bA8d1744e749B54536F7b6E5f56F138); // 0x3bB82ae28bA8d1744e749B54536F7b6E5f56F138 HeavenlyAngels internal DLC = HeavenlyAngels(0xcCf24612B1338c3B5A2dA795E85efBD2D12B9A33); // 0xcCf24612B1338c3B5A2dA795E85efBD2D12B9A33 function setsaleEnable(bool _saleEnable) public onlyOwner { saleEnable = _saleEnable; } function setsaleEnableDLC(bool _saleEnableDLC) public onlyOwner { saleEnableDLC = _saleEnableDLC; } function setBasePrice(uint _basePrice) public onlyOwner { basePrice = _basePrice; } constructor(string memory baseURI) ERC721("HeavenlyAngels", "ANGEL") { setBaseURI(baseURI); } function mint(address _to, uint _count) public payable { require(msg.sender == _owner || saleEnable, "#1"); require(tokenIdCount <= MAX_TOKEN, "#2"); require(tokenIdCount + _count <= MAX_TOKEN, "#3"); require(_count <= 20, "Exceeds 20"); require(msg.value >= price(_count) || msg.sender == _owner , "#4"); for(uint i = 0; i < _count; i++){ _safeMint(_to, tokenIdCount); tokenIdCount++; } } function mintReserve(address _to, uint _count) public onlyOwner { require(tokenIdReserv < MAX_RESERV, "#5"); require(tokenIdReserv + _count <= MAX_RESERV, "#6"); require(_count <= 20, "#7"); for(uint i = 0; i < _count; i++){ _safeMint(_to, tokenIdReserv); tokenIdReserv++; } } function price(uint _count) public view virtual returns (uint256) { if(tokenIdCount < MAX_RESERV + 300 ){ return 0; }else{ return basePrice * _count; } } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function tokensOfOwner(address _owner) external view returns(uint256[] memory) { uint tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function withdrawAll() public payable onlyOwner { _withdrawAll(); } function MESPview(address _owner_) external view returns (uint256[] memory) { return MESP.tokensOfOwner(_owner_); } function CompletedMintForMESP(uint256 _mespid) public view virtual returns (bool) { return _whitelistMESP[_mespid]; } function TokenForMespAvailable(address _holder) public view virtual returns (uint256) { uint tokenCount = MESP.balanceOf(_holder); uint tokenAvailable = 0; uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = MESP.tokenOfOwnerByIndex(_holder, i); if (_whitelistMESP[tokensId[i]]) {} else { tokenAvailable++; } } return tokenAvailable; } function mintForMesp(uint _count) public { require(msg.sender == _owner || saleEnable, "#8"); require(tokenIdCount <= MAX_TOKEN, "#"); require(tokenIdCount + _count <= MAX_TOKEN, "#9"); require(TokenForMespAvailable(msg.sender) > 0, "#10"); require(_count <= TokenForMespAvailable(msg.sender), "#11"); //check MESP balance sender uint tokenCount = MESP.balanceOf(msg.sender); // mint counter per transaction uint tokenMintLimit = 0; //check ever token whitelist uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = MESP.tokenOfOwnerByIndex(msg.sender, i); //if not true in whitelist, to mint token if (_whitelistMESP[tokensId[i]]) {} else { if(tokenMintLimit < _count) { _safeMint(msg.sender, tokenIdCount); tokenIdCount++; tokenMintLimit++; _whitelistMESP[tokensId[i]] = true; } } } } function DLCview(address _owner_) external view returns (uint256[] memory) { return DLC.tokensOfOwner(_owner_); } function CompletedMintForDLC(uint256 _mespid) public view virtual returns (bool) { return _whitelistDLC[_mespid]; } function TokenForDLCAvailable(address _holder) public view virtual returns (uint256) { uint tokenCount = DLC.balanceOf(_holder); uint tokenAvailable = 0; uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = DLC.tokenOfOwnerByIndex(_holder, i); if (_whitelistDLC[tokensId[i]]) {} else { tokenAvailable++; } } return tokenAvailable; } function mintForDLC(uint _count) public { require(msg.sender == _owner || saleEnableDLC, "#12"); require(tokenIdCount <= MAX_TOKEN, "#13"); require(tokenIdCount + _count <= MAX_TOKEN, "#14"); require(TokenForDLCAvailable(msg.sender) > 0, "#15"); require(_count <= TokenForDLCAvailable(msg.sender), "#16"); //check DLC balance sender uint tokenCount = DLC.balanceOf(msg.sender); // mint counter per transaction uint tokenMintLimit = 0; //check ever token whitelist uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = DLC.tokenOfOwnerByIndex(msg.sender, i); //if not true in whitelist, to mint token if (_whitelistDLC[tokensId[i]]) {} else { if(tokenMintLimit < _count) { _safeMint(msg.sender, tokenIdCount); tokenIdCount++; tokenMintLimit++; _whitelistDLC[tokensId[i]] = true; } } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_mespid","type":"uint256"}],"name":"CompletedMintForDLC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mespid","type":"uint256"}],"name":"CompletedMintForMESP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner_","type":"address"}],"name":"DLCview","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner_","type":"address"}],"name":"MESPview","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"TokenForDLCAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"TokenForMespAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintForDLC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintForMesp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleEnableDLC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_basePrice","type":"uint256"}],"name":"setBasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_saleEnable","type":"bool"}],"name":"setsaleEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_saleEnableDLC","type":"bool"}],"name":"setsaleEnableDLC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405273a0d0de1070948cf0cbd6bdf4fb34d4d056be7bc5600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c556096600c546200006f91906200060e565b600d55666a94d74f430000600e556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff021916908315150217905550733bb82ae28ba8d1744e749b54536f7b6e5f56f138601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ccf24612b1338c3b5a2da795e85efbd2d12b9a33601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200016a57600080fd5b506040516200659438038062006594833981810160405281019062000190919062000504565b6040518060400160405280600e81526020017f48656176656e6c79416e67656c730000000000000000000000000000000000008152506040518060400160405280600581526020017f414e47454c000000000000000000000000000000000000000000000000000000815250816000908051906020019062000214929190620003d6565b5080600190805190602001906200022d929190620003d6565b505050600062000242620002f960201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002f2816200030160201b60201c565b50620007f2565b600033905090565b62000311620002f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000337620003ac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000387906200057c565b60405180910390fd5b80600f9080519060200190620003a8929190620003d6565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003e490620006ab565b90600052602060002090601f01602090048101928262000408576000855562000454565b82601f106200042357805160ff191683800117855562000454565b8280016001018555821562000454579182015b828111156200045357825182559160200191906001019062000436565b5b50905062000463919062000467565b5090565b5b808211156200048257600081600090555060010162000468565b5090565b60006200049d6200049784620005c7565b6200059e565b905082815260208101848484011115620004bc57620004bb620007a9565b5b620004c984828562000675565b509392505050565b600082601f830112620004e957620004e8620007a4565b5b8151620004fb84826020860162000486565b91505092915050565b6000602082840312156200051d576200051c620007b3565b5b600082015167ffffffffffffffff8111156200053e576200053d620007ae565b5b6200054c84828501620004d1565b91505092915050565b600062000564600383620005fd565b91506200057182620007c9565b602082019050919050565b60006020820190508181036000830152620005978162000555565b9050919050565b6000620005aa620005bd565b9050620005b88282620006e1565b919050565b6000604051905090565b600067ffffffffffffffff821115620005e557620005e462000775565b5b620005f082620007b8565b9050602081019050919050565b600082825260208201905092915050565b60006200061b826200066b565b915062000628836200066b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000660576200065f62000717565b5b828201905092915050565b6000819050919050565b60005b838110156200069557808201518184015260208101905062000678565b83811115620006a5576000848401525b50505050565b60006002820490506001821680620006c457607f821691505b60208210811415620006db57620006da62000746565b5b50919050565b620006ec82620007b8565b810181811067ffffffffffffffff821117156200070e576200070d62000775565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b615d9280620008026000396000f3fe6080604052600436106102465760003560e01c806370a0823111610139578063b1e6a485116100b6578063e8d26e531161007a578063e8d26e53146108ce578063e985e9c51461090b578063f127394c14610948578063f1c3e28f14610973578063f2fde38b1461099c578063fe4ca847146109c557610246565b8063b1e6a485146107e9578063b88d4fde14610814578063c7876ea41461083d578063c87b56dd14610868578063de4b3262146108a557610246565b80638e825be0116100fd5780638e825be01461070657806395d89b411461072f5780639d60dc3c1461075a578063a22cb46514610797578063b02636fd146107c057610246565b806370a0823114610640578063715018a61461067d5780638462151c14610694578063853828b6146106d15780638da5cb5b146106db57610246565b8063341d7791116101c757806361dd97a41161018b57806361dd97a4146105355780636352211e1461057257806369717525146105af5780636e1bd323146105d85780636f8457951461060357610246565b8063341d77911461044d57806340c10f191461048a57806342842e0e146104a65780634f6ccce7146104cf57806355f804b31461050c57610246565b806319cff8711161020e57806319cff8711461034457806323b872dd1461038157806326a49e37146103aa5780632c30dff8146103e75780632f745c591461041057610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806318160ddd14610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906143a5565b6109f0565b60405161027f9190614c22565b60405180910390f35b34801561029457600080fd5b5061029d610a6a565b6040516102aa9190614c3d565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190614448565b610afc565b6040516102e79190614b70565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906142ef565b610b81565b005b34801561032557600080fd5b5061032e610c99565b60405161033b919061513f565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190614448565b610ca6565b6040516103789190614c22565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906141d9565b610cd0565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190614448565b610d30565b6040516103de919061513f565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190614378565b610d69565b005b34801561041c57600080fd5b50610437600480360381019061043291906142ef565b610e02565b604051610444919061513f565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f9190614448565b610ea7565b6040516104819190614c22565b60405180910390f35b6104a4600480360381019061049f91906142ef565b610ed1565b005b3480156104b257600080fd5b506104cd60048036038101906104c891906141d9565b61113f565b005b3480156104db57600080fd5b506104f660048036038101906104f19190614448565b61115f565b604051610503919061513f565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e91906143ff565b6111d0565b005b34801561054157600080fd5b5061055c6004803603810190610557919061416c565b611266565b604051610569919061513f565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190614448565b6114ae565b6040516105a69190614b70565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190614448565b611560565b005b3480156105e457600080fd5b506105ed6119eb565b6040516105fa919061513f565b60405180910390f35b34801561060f57600080fd5b5061062a6004803603810190610625919061416c565b6119f1565b6040516106379190614c00565b60405180910390f35b34801561064c57600080fd5b506106676004803603810190610662919061416c565b611aaa565b604051610674919061513f565b60405180910390f35b34801561068957600080fd5b50610692611b62565b005b3480156106a057600080fd5b506106bb60048036038101906106b6919061416c565b611c9f565b6040516106c89190614c00565b60405180910390f35b6106d9611d4d565b005b3480156106e757600080fd5b506106f0611dd3565b6040516106fd9190614b70565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906142ef565b611dfd565b005b34801561073b57600080fd5b50610744611f9a565b6040516107519190614c3d565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c919061416c565b61202c565b60405161078e9190614c00565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b991906142af565b6120e5565b005b3480156107cc57600080fd5b506107e760048036038101906107e29190614378565b612266565b005b3480156107f557600080fd5b506107fe6122ff565b60405161080b9190614c22565b60405180910390f35b34801561082057600080fd5b5061083b6004803603810190610836919061422c565b612312565b005b34801561084957600080fd5b50610852612374565b60405161085f919061513f565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190614448565b61237a565b60405161089c9190614c3d565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c79190614448565b612421565b005b3480156108da57600080fd5b506108f560048036038101906108f0919061416c565b6124a7565b604051610902919061513f565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190614199565b6126ef565b60405161093f9190614c22565b60405180910390f35b34801561095457600080fd5b5061095d612783565b60405161096a919061513f565b60405180910390f35b34801561097f57600080fd5b5061099a60048036038101906109959190614448565b612789565b005b3480156109a857600080fd5b506109c360048036038101906109be919061416c565b612c14565b005b3480156109d157600080fd5b506109da612dc0565b6040516109e79190614c22565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a635750610a6282612dd3565b5b9050919050565b606060008054610a7990615454565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590615454565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905090565b6000610b0782612eb5565b610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90614dff565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8c826114ae565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf490614fbf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1c612f21565b73ffffffffffffffffffffffffffffffffffffffff161480610c4b5750610c4a81610c45612f21565b6126ef565b5b610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190614d3f565b60405180910390fd5b610c948383612f29565b505050565b6000600880549050905090565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b610ce1610cdb612f21565b82612fe2565b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790614e1f565b60405180910390fd5b610d2b8383836130c0565b505050565b600061012c6096610d419190615289565b600d541015610d535760009050610d64565b81600e54610d619190615310565b90505b919050565b610d71612f21565b73ffffffffffffffffffffffffffffffffffffffff16610d8f611dd3565b73ffffffffffffffffffffffffffffffffffffffff1614610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90614f1f565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6000610e0d83611aaa565b8210610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590614cff565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006011600083815260200190815260200160002060009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f395750601060009054906101000a900460ff165b610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90614edf565b60405180910390fd5b6122b8600d541115610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690614f3f565b60405180910390fd5b6122b881600d54610fd09190615289565b1115611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890614ebf565b60405180910390fd5b6014811115611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c9061501f565b60405180910390fd5b61105e81610d30565b341015806110b95750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90614e5f565b60405180910390fd5b60005b8181101561113a5761110f83600d5461331c565b600d6000815480929190611122906154b7565b91905055508080611132906154b7565b9150506110fb565b505050565b61115a83838360405180602001604052806000815250612312565b505050565b6000611169610c99565b82106111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a19061505f565b60405180910390fd5b600882815481106111be576111bd6155ed565b5b90600052602060002001549050919050565b6111d8612f21565b73ffffffffffffffffffffffffffffffffffffffff166111f6611dd3565b73ffffffffffffffffffffffffffffffffffffffff161461124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390614f1f565b60405180910390fd5b80600f9080519060200190611262929190613ecd565b5050565b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016112c49190614b70565b60206040518083038186803b1580156112dc57600080fd5b505afa1580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190614475565b90506000808267ffffffffffffffff8111156113335761133261561c565b5b6040519080825280602002602001820160405280156113615781602001602082028036833780820191505090505b50905060005b838110156114a257601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987836040518363ffffffff1660e01b81526004016113cc929190614bd7565b60206040518083038186803b1580156113e457600080fd5b505afa1580156113f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141c9190614475565b82828151811061142f5761142e6155ed565b5b60200260200101818152505060116000838381518110611452576114516155ed565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16156114805761148f565b828061148b906154b7565b9350505b808061149a906154b7565b915050611367565b50819350505050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e90614c5f565b60405180910390fd5b80915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115c85750601060009054906101000a900460ff165b611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90614e7f565b60405180910390fd5b6122b8600d54111561164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614fff565b60405180910390fd5b6122b881600d5461165f9190615289565b11156116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169790614ddf565b60405180910390fd5b60006116ab33611266565b116116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290614d7f565b60405180910390fd5b6116f433611266565b811115611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614cdf565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016117939190614b70565b60206040518083038186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e39190614475565b90506000808267ffffffffffffffff8111156118025761180161561c565b5b6040519080825280602002602001820160405280156118305781602001602082028036833780820191505090505b50905060005b838110156119e457601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5933836040518363ffffffff1660e01b815260040161189b929190614bd7565b60206040518083038186803b1580156118b357600080fd5b505afa1580156118c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118eb9190614475565b8282815181106118fe576118fd6155ed565b5b60200260200101818152505060116000838381518110611921576119206155ed565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161561194f576119d1565b848310156119d05761196333600d5461331c565b600d6000815480929190611976906154b7565b91905055508280611986906154b7565b9350506001601160008484815181106119a2576119a16155ed565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b80806119dc906154b7565b915050611836565b5050505050565b6122b881565b6060601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c836040518263ffffffff1660e01b8152600401611a4e9190614b70565b60006040518083038186803b158015611a6657600080fd5b505afa158015611a7a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611aa3919061432f565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b12906150df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b6a612f21565b73ffffffffffffffffffffffffffffffffffffffff16611b88611dd3565b73ffffffffffffffffffffffffffffffffffffffff1614611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590614f1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606000611cac83611aaa565b905060008167ffffffffffffffff811115611cca57611cc961561c565b5b604051908082528060200260200182016040528015611cf85781602001602082028036833780820191505090505b50905060005b82811015611d4257611d108582610e02565b828281518110611d2357611d226155ed565b5b6020026020010181815250508080611d3a906154b7565b915050611cfe565b508092505050919050565b611d55612f21565b73ffffffffffffffffffffffffffffffffffffffff16611d73611dd3565b73ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc090614f1f565b60405180910390fd5b611dd161333a565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e05612f21565b73ffffffffffffffffffffffffffffffffffffffff16611e23611dd3565b73ffffffffffffffffffffffffffffffffffffffff1614611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090614f1f565b60405180910390fd5b6096600c5410611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb5906150bf565b60405180910390fd5b609681600c54611ece9190615289565b1115611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0690614e3f565b60405180910390fd5b6014811115611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90614c7f565b60405180910390fd5b60005b81811015611f9557611f6a83600c5461331c565b600c6000815480929190611f7d906154b7565b91905055508080611f8d906154b7565b915050611f56565b505050565b606060018054611fa990615454565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd590615454565b80156120225780601f10611ff757610100808354040283529160200191612022565b820191906000526020600020905b81548152906001019060200180831161200557829003601f168201915b5050505050905090565b6060601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c836040518263ffffffff1660e01b81526004016120899190614b70565b60006040518083038186803b1580156120a157600080fd5b505afa1580156120b5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120de919061432f565b9050919050565b6120ed612f21565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290614d5f565b60405180910390fd5b8060056000612168612f21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612215612f21565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161225a9190614c22565b60405180910390a35050565b61226e612f21565b73ffffffffffffffffffffffffffffffffffffffff1661228c611dd3565b73ffffffffffffffffffffffffffffffffffffffff16146122e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d990614f1f565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b601060019054906101000a900460ff1681565b61232361231d612f21565b83612fe2565b612362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612359906150ff565b60405180910390fd5b61236e84848484613422565b50505050565b600e5481565b606061238582612eb5565b6123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb90614f7f565b60405180910390fd5b60006123ce61347e565b905060008151116123ee5760405180602001604052806000815250612419565b806123f884613510565b604051602001612409929190614b4c565b6040516020818303038152906040525b915050919050565b612429612f21565b73ffffffffffffffffffffffffffffffffffffffff16612447611dd3565b73ffffffffffffffffffffffffffffffffffffffff161461249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490614f1f565b60405180910390fd5b80600e8190555050565b600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016125059190614b70565b60206040518083038186803b15801561251d57600080fd5b505afa158015612531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125559190614475565b90506000808267ffffffffffffffff8111156125745761257361561c565b5b6040519080825280602002602001820160405280156125a25781602001602082028036833780820191505090505b50905060005b838110156126e357601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987836040518363ffffffff1660e01b815260040161260d929190614bd7565b60206040518083038186803b15801561262557600080fd5b505afa158015612639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265d9190614475565b8282815181106126705761266f6155ed565b5b60200260200101818152505060126000838381518110612693576126926155ed565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16156126c1576126d0565b82806126cc906154b7565b9350505b80806126db906154b7565b9150506125a8565b50819350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806127f15750601060019054906101000a900460ff165b612830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282790614f5f565b60405180910390fd5b6122b8600d541115612877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286e9061507f565b60405180910390fd5b6122b881600d546128889190615289565b11156128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c09061509f565b60405180910390fd5b60006128d4336124a7565b11612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90614f9f565b60405180910390fd5b61291d336124a7565b81111561295f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129569061503f565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016129bc9190614b70565b60206040518083038186803b1580156129d457600080fd5b505afa1580156129e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0c9190614475565b90506000808267ffffffffffffffff811115612a2b57612a2a61561c565b5b604051908082528060200260200182016040528015612a595781602001602082028036833780820191505090505b50905060005b83811015612c0d57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5933836040518363ffffffff1660e01b8152600401612ac4929190614bd7565b60206040518083038186803b158015612adc57600080fd5b505afa158015612af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b149190614475565b828281518110612b2757612b266155ed565b5b60200260200101818152505060126000838381518110612b4a57612b496155ed565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615612b7857612bfa565b84831015612bf957612b8c33600d5461331c565b600d6000815480929190612b9f906154b7565b91905055508280612baf906154b7565b935050600160126000848481518110612bcb57612bca6155ed565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b8080612c05906154b7565b915050612a5f565b5050505050565b612c1c612f21565b73ffffffffffffffffffffffffffffffffffffffff16612c3a611dd3565b73ffffffffffffffffffffffffffffffffffffffff1614612c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8790614f1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf790614c9f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e9e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612eae5750612ead82613671565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f9c836114ae565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612fed82612eb5565b61302c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302390614fdf565b60405180910390fd5b6000613037836114ae565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806130a657508373ffffffffffffffffffffffffffffffffffffffff1661308e84610afc565b73ffffffffffffffffffffffffffffffffffffffff16145b806130b757506130b681856126ef565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130e0826114ae565b73ffffffffffffffffffffffffffffffffffffffff1614613136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312d90614dbf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319d9061511f565b60405180910390fd5b6131b18383836136db565b6131bc600082612f29565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461320c919061536a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132639190615289565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6133368282604051806020016040528060008152506137ef565b5050565b6000606460144761334b9190615310565b61335591906152df565b905060008147613365919061536a565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156133cf573d6000803e3d6000fd5b506133d8612f21565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561341d573d6000803e3d6000fd5b505050565b61342d8484846130c0565b6134398484848461384a565b613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f90614d1f565b60405180910390fd5b50505050565b6060600f805461348d90615454565b80601f01602080910402602001604051908101604052809291908181526020018280546134b990615454565b80156135065780601f106134db57610100808354040283529160200191613506565b820191906000526020600020905b8154815290600101906020018083116134e957829003601f168201915b5050505050905090565b60606000821415613558576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061366c565b600082905060005b6000821461358a578080613573906154b7565b915050600a8261358391906152df565b9150613560565b60008167ffffffffffffffff8111156135a6576135a561561c565b5b6040519080825280601f01601f1916602001820160405280156135d85781602001600182028036833780820191505090505b5090505b60008514613665576001826135f1919061536a565b9150600a856136009190615500565b603061360c9190615289565b60f81b818381518110613622576136216155ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561365e91906152df565b94506135dc565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6136e68383836139e1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561372957613724816139e6565b613768565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613767576137668382613a2f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137ab576137a681613b9c565b6137ea565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146137e9576137e88282613c6d565b5b5b505050565b6137f98383613cec565b613806600084848461384a565b613845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383c90614cbf565b60405180910390fd5b505050565b600061386b8473ffffffffffffffffffffffffffffffffffffffff16613eba565b156139d4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613894612f21565b8786866040518563ffffffff1660e01b81526004016138b69493929190614b8b565b602060405180830381600087803b1580156138d057600080fd5b505af192505050801561390157506040513d601f19601f820116820180604052508101906138fe91906143d2565b60015b613984573d8060008114613931576040519150601f19603f3d011682016040523d82523d6000602084013e613936565b606091505b5060008151141561397c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397390614e9f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506139d9565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613a3c84611aaa565b613a46919061536a565b9050600060076000848152602001908152602001600020549050818114613b2b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613bb0919061536a565b9050600060096000848152602001908152602001600020549050600060088381548110613be057613bdf6155ed565b5b906000526020600020015490508060088381548110613c0257613c016155ed565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613c5157613c506155be565b5b6001900381819060005260206000200160009055905550505050565b6000613c7883611aaa565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d5390614eff565b60405180910390fd5b613d6581612eb5565b15613da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d9c90614d9f565b60405180910390fd5b613db1600083836136db565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e019190615289565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613ed990615454565b90600052602060002090601f016020900481019282613efb5760008555613f42565b82601f10613f1457805160ff1916838001178555613f42565b82800160010185558215613f42579182015b82811115613f41578251825591602001919060010190613f26565b5b509050613f4f9190613f53565b5090565b5b80821115613f6c576000816000905550600101613f54565b5090565b6000613f83613f7e8461517f565b61515a565b90508083825260208201905082856020860282011115613fa657613fa5615650565b5b60005b85811015613fd65781613fbc8882614157565b845260208401935060208301925050600181019050613fa9565b5050509392505050565b6000613ff3613fee846151ab565b61515a565b90508281526020810184848401111561400f5761400e615655565b5b61401a848285615412565b509392505050565b6000614035614030846151dc565b61515a565b90508281526020810184848401111561405157614050615655565b5b61405c848285615412565b509392505050565b60008135905061407381615d00565b92915050565b600082601f83011261408e5761408d61564b565b5b815161409e848260208601613f70565b91505092915050565b6000813590506140b681615d17565b92915050565b6000813590506140cb81615d2e565b92915050565b6000815190506140e081615d2e565b92915050565b600082601f8301126140fb576140fa61564b565b5b813561410b848260208601613fe0565b91505092915050565b600082601f8301126141295761412861564b565b5b8135614139848260208601614022565b91505092915050565b60008135905061415181615d45565b92915050565b60008151905061416681615d45565b92915050565b6000602082840312156141825761418161565f565b5b600061419084828501614064565b91505092915050565b600080604083850312156141b0576141af61565f565b5b60006141be85828601614064565b92505060206141cf85828601614064565b9150509250929050565b6000806000606084860312156141f2576141f161565f565b5b600061420086828701614064565b935050602061421186828701614064565b925050604061422286828701614142565b9150509250925092565b600080600080608085870312156142465761424561565f565b5b600061425487828801614064565b945050602061426587828801614064565b935050604061427687828801614142565b925050606085013567ffffffffffffffff8111156142975761429661565a565b5b6142a3878288016140e6565b91505092959194509250565b600080604083850312156142c6576142c561565f565b5b60006142d485828601614064565b92505060206142e5858286016140a7565b9150509250929050565b600080604083850312156143065761430561565f565b5b600061431485828601614064565b925050602061432585828601614142565b9150509250929050565b6000602082840312156143455761434461565f565b5b600082015167ffffffffffffffff8111156143635761436261565a565b5b61436f84828501614079565b91505092915050565b60006020828403121561438e5761438d61565f565b5b600061439c848285016140a7565b91505092915050565b6000602082840312156143bb576143ba61565f565b5b60006143c9848285016140bc565b91505092915050565b6000602082840312156143e8576143e761565f565b5b60006143f6848285016140d1565b91505092915050565b6000602082840312156144155761441461565f565b5b600082013567ffffffffffffffff8111156144335761443261565a565b5b61443f84828501614114565b91505092915050565b60006020828403121561445e5761445d61565f565b5b600061446c84828501614142565b91505092915050565b60006020828403121561448b5761448a61565f565b5b600061449984828501614157565b91505092915050565b60006144ae8383614b2e565b60208301905092915050565b6144c38161539e565b82525050565b60006144d48261521d565b6144de818561524b565b93506144e98361520d565b8060005b8381101561451a57815161450188826144a2565b975061450c8361523e565b9250506001810190506144ed565b5085935050505092915050565b614530816153b0565b82525050565b600061454182615228565b61454b818561525c565b935061455b818560208601615421565b61456481615664565b840191505092915050565b600061457a82615233565b614584818561526d565b9350614594818560208601615421565b61459d81615664565b840191505092915050565b60006145b382615233565b6145bd818561527e565b93506145cd818560208601615421565b80840191505092915050565b60006145e660038361526d565b91506145f182615675565b602082019050919050565b600061460960028361526d565b91506146148261569e565b602082019050919050565b600061462c60038361526d565b9150614637826156c7565b602082019050919050565b600061464f60038361526d565b915061465a826156f0565b602082019050919050565b600061467260038361526d565b915061467d82615719565b602082019050919050565b6000614695602b8361526d565b91506146a082615742565b604082019050919050565b60006146b860038361526d565b91506146c382615791565b602082019050919050565b60006146db60038361526d565b91506146e6826157ba565b602082019050919050565b60006146fe60038361526d565b9150614709826157e3565b602082019050919050565b600061472160038361526d565b915061472c8261580c565b602082019050919050565b600061474460038361526d565b915061474f82615835565b602082019050919050565b600061476760038361526d565b91506147728261585e565b602082019050919050565b600061478a60028361526d565b915061479582615887565b602082019050919050565b60006147ad60038361526d565b91506147b8826158b0565b602082019050919050565b60006147d060038361526d565b91506147db826158d9565b602082019050919050565b60006147f360028361526d565b91506147fe82615902565b602082019050919050565b600061481660028361526d565b91506148218261592b565b602082019050919050565b600061483960028361526d565b915061484482615954565b602082019050919050565b600061485c60038361526d565b91506148678261597d565b602082019050919050565b600061487f60028361526d565b915061488a826159a6565b602082019050919050565b60006148a260028361526d565b91506148ad826159cf565b602082019050919050565b60006148c560038361526d565b91506148d0826159f8565b602082019050919050565b60006148e860038361526d565b91506148f382615a21565b602082019050919050565b600061490b60028361526d565b915061491682615a4a565b602082019050919050565b600061492e60038361526d565b915061493982615a73565b602082019050919050565b600061495160038361526d565b915061495c82615a9c565b602082019050919050565b600061497460038361526d565b915061497f82615ac5565b602082019050919050565b600061499760038361526d565b91506149a282615aee565b602082019050919050565b60006149ba60038361526d565b91506149c582615b17565b602082019050919050565b60006149dd60018361526d565b91506149e882615b40565b602082019050919050565b6000614a00600a8361526d565b9150614a0b82615b69565b602082019050919050565b6000614a2360038361526d565b9150614a2e82615b92565b602082019050919050565b6000614a46602c8361526d565b9150614a5182615bbb565b604082019050919050565b6000614a6960038361526d565b9150614a7482615c0a565b602082019050919050565b6000614a8c60038361526d565b9150614a9782615c33565b602082019050919050565b6000614aaf60028361526d565b9150614aba82615c5c565b602082019050919050565b6000614ad260038361526d565b9150614add82615c85565b602082019050919050565b6000614af560038361526d565b9150614b0082615cae565b602082019050919050565b6000614b1860038361526d565b9150614b2382615cd7565b602082019050919050565b614b3781615408565b82525050565b614b4681615408565b82525050565b6000614b5882856145a8565b9150614b6482846145a8565b91508190509392505050565b6000602082019050614b8560008301846144ba565b92915050565b6000608082019050614ba060008301876144ba565b614bad60208301866144ba565b614bba6040830185614b3d565b8181036060830152614bcc8184614536565b905095945050505050565b6000604082019050614bec60008301856144ba565b614bf96020830184614b3d565b9392505050565b60006020820190508181036000830152614c1a81846144c9565b905092915050565b6000602082019050614c376000830184614527565b92915050565b60006020820190508181036000830152614c57818461456f565b905092915050565b60006020820190508181036000830152614c78816145d9565b9050919050565b60006020820190508181036000830152614c98816145fc565b9050919050565b60006020820190508181036000830152614cb88161461f565b9050919050565b60006020820190508181036000830152614cd881614642565b9050919050565b60006020820190508181036000830152614cf881614665565b9050919050565b60006020820190508181036000830152614d1881614688565b9050919050565b60006020820190508181036000830152614d38816146ab565b9050919050565b60006020820190508181036000830152614d58816146ce565b9050919050565b60006020820190508181036000830152614d78816146f1565b9050919050565b60006020820190508181036000830152614d9881614714565b9050919050565b60006020820190508181036000830152614db881614737565b9050919050565b60006020820190508181036000830152614dd88161475a565b9050919050565b60006020820190508181036000830152614df88161477d565b9050919050565b60006020820190508181036000830152614e18816147a0565b9050919050565b60006020820190508181036000830152614e38816147c3565b9050919050565b60006020820190508181036000830152614e58816147e6565b9050919050565b60006020820190508181036000830152614e7881614809565b9050919050565b60006020820190508181036000830152614e988161482c565b9050919050565b60006020820190508181036000830152614eb88161484f565b9050919050565b60006020820190508181036000830152614ed881614872565b9050919050565b60006020820190508181036000830152614ef881614895565b9050919050565b60006020820190508181036000830152614f18816148b8565b9050919050565b60006020820190508181036000830152614f38816148db565b9050919050565b60006020820190508181036000830152614f58816148fe565b9050919050565b60006020820190508181036000830152614f7881614921565b9050919050565b60006020820190508181036000830152614f9881614944565b9050919050565b60006020820190508181036000830152614fb881614967565b9050919050565b60006020820190508181036000830152614fd88161498a565b9050919050565b60006020820190508181036000830152614ff8816149ad565b9050919050565b60006020820190508181036000830152615018816149d0565b9050919050565b60006020820190508181036000830152615038816149f3565b9050919050565b6000602082019050818103600083015261505881614a16565b9050919050565b6000602082019050818103600083015261507881614a39565b9050919050565b6000602082019050818103600083015261509881614a5c565b9050919050565b600060208201905081810360008301526150b881614a7f565b9050919050565b600060208201905081810360008301526150d881614aa2565b9050919050565b600060208201905081810360008301526150f881614ac5565b9050919050565b6000602082019050818103600083015261511881614ae8565b9050919050565b6000602082019050818103600083015261513881614b0b565b9050919050565b60006020820190506151546000830184614b3d565b92915050565b6000615164615175565b90506151708282615486565b919050565b6000604051905090565b600067ffffffffffffffff82111561519a5761519961561c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156151c6576151c561561c565b5b6151cf82615664565b9050602081019050919050565b600067ffffffffffffffff8211156151f7576151f661561c565b5b61520082615664565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061529482615408565b915061529f83615408565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152d4576152d3615531565b5b828201905092915050565b60006152ea82615408565b91506152f583615408565b92508261530557615304615560565b5b828204905092915050565b600061531b82615408565b915061532683615408565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561535f5761535e615531565b5b828202905092915050565b600061537582615408565b915061538083615408565b92508282101561539357615392615531565b5b828203905092915050565b60006153a9826153e8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561543f578082015181840152602081019050615424565b8381111561544e576000848401525b50505050565b6000600282049050600182168061546c57607f821691505b602082108114156154805761547f61558f565b5b50919050565b61548f82615664565b810181811067ffffffffffffffff821117156154ae576154ad61561c565b5b80604052505050565b60006154c282615408565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154f5576154f4615531565b5b600182019050919050565b600061550b82615408565b915061551683615408565b92508261552657615525615560565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f2334350000000000000000000000000000000000000000000000000000000000600082015250565b7f2337000000000000000000000000000000000000000000000000000000000000600082015250565b7f2334320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335350000000000000000000000000000000000000000000000000000000000600082015250565b7f2331310000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f2335330000000000000000000000000000000000000000000000000000000000600082015250565b7f2334380000000000000000000000000000000000000000000000000000000000600082015250565b7f2335300000000000000000000000000000000000000000000000000000000000600082015250565b7f2331300000000000000000000000000000000000000000000000000000000000600082015250565b7f2335370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335380000000000000000000000000000000000000000000000000000000000600082015250565b7f2339000000000000000000000000000000000000000000000000000000000000600082015250565b7f2334390000000000000000000000000000000000000000000000000000000000600082015250565b7f2335310000000000000000000000000000000000000000000000000000000000600082015250565b7f2336000000000000000000000000000000000000000000000000000000000000600082015250565b7f2334000000000000000000000000000000000000000000000000000000000000600082015250565b7f2338000000000000000000000000000000000000000000000000000000000000600082015250565b7f2336300000000000000000000000000000000000000000000000000000000000600082015250565b7f2333000000000000000000000000000000000000000000000000000000000000600082015250565b7f2331000000000000000000000000000000000000000000000000000000000000600082015250565b7f2335360000000000000000000000000000000000000000000000000000000000600082015250565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b7f2332000000000000000000000000000000000000000000000000000000000000600082015250565b7f2331320000000000000000000000000000000000000000000000000000000000600082015250565b7f2334360000000000000000000000000000000000000000000000000000000000600082015250565b7f2331350000000000000000000000000000000000000000000000000000000000600082015250565b7f2334370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335340000000000000000000000000000000000000000000000000000000000600082015250565b7f2300000000000000000000000000000000000000000000000000000000000000600082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f2331360000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f2331330000000000000000000000000000000000000000000000000000000000600082015250565b7f2331340000000000000000000000000000000000000000000000000000000000600082015250565b7f2335000000000000000000000000000000000000000000000000000000000000600082015250565b7f2334340000000000000000000000000000000000000000000000000000000000600082015250565b7f2335320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335390000000000000000000000000000000000000000000000000000000000600082015250565b615d098161539e565b8114615d1457600080fd5b50565b615d20816153b0565b8114615d2b57600080fd5b50565b615d37816153bc565b8114615d4257600080fd5b50565b615d4e81615408565b8114615d5957600080fd5b5056fea2646970667358221220a0fd16dbb40a408f9a943fae991d567f9716be76b2ce2f07c86f3adeb09d702d64736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017687474703a2f2f617069332e64656174682e63796f752f000000000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c806370a0823111610139578063b1e6a485116100b6578063e8d26e531161007a578063e8d26e53146108ce578063e985e9c51461090b578063f127394c14610948578063f1c3e28f14610973578063f2fde38b1461099c578063fe4ca847146109c557610246565b8063b1e6a485146107e9578063b88d4fde14610814578063c7876ea41461083d578063c87b56dd14610868578063de4b3262146108a557610246565b80638e825be0116100fd5780638e825be01461070657806395d89b411461072f5780639d60dc3c1461075a578063a22cb46514610797578063b02636fd146107c057610246565b806370a0823114610640578063715018a61461067d5780638462151c14610694578063853828b6146106d15780638da5cb5b146106db57610246565b8063341d7791116101c757806361dd97a41161018b57806361dd97a4146105355780636352211e1461057257806369717525146105af5780636e1bd323146105d85780636f8457951461060357610246565b8063341d77911461044d57806340c10f191461048a57806342842e0e146104a65780634f6ccce7146104cf57806355f804b31461050c57610246565b806319cff8711161020e57806319cff8711461034457806323b872dd1461038157806326a49e37146103aa5780632c30dff8146103e75780632f745c591461041057610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806318160ddd14610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906143a5565b6109f0565b60405161027f9190614c22565b60405180910390f35b34801561029457600080fd5b5061029d610a6a565b6040516102aa9190614c3d565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190614448565b610afc565b6040516102e79190614b70565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906142ef565b610b81565b005b34801561032557600080fd5b5061032e610c99565b60405161033b919061513f565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190614448565b610ca6565b6040516103789190614c22565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906141d9565b610cd0565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190614448565b610d30565b6040516103de919061513f565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190614378565b610d69565b005b34801561041c57600080fd5b50610437600480360381019061043291906142ef565b610e02565b604051610444919061513f565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f9190614448565b610ea7565b6040516104819190614c22565b60405180910390f35b6104a4600480360381019061049f91906142ef565b610ed1565b005b3480156104b257600080fd5b506104cd60048036038101906104c891906141d9565b61113f565b005b3480156104db57600080fd5b506104f660048036038101906104f19190614448565b61115f565b604051610503919061513f565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e91906143ff565b6111d0565b005b34801561054157600080fd5b5061055c6004803603810190610557919061416c565b611266565b604051610569919061513f565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190614448565b6114ae565b6040516105a69190614b70565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190614448565b611560565b005b3480156105e457600080fd5b506105ed6119eb565b6040516105fa919061513f565b60405180910390f35b34801561060f57600080fd5b5061062a6004803603810190610625919061416c565b6119f1565b6040516106379190614c00565b60405180910390f35b34801561064c57600080fd5b506106676004803603810190610662919061416c565b611aaa565b604051610674919061513f565b60405180910390f35b34801561068957600080fd5b50610692611b62565b005b3480156106a057600080fd5b506106bb60048036038101906106b6919061416c565b611c9f565b6040516106c89190614c00565b60405180910390f35b6106d9611d4d565b005b3480156106e757600080fd5b506106f0611dd3565b6040516106fd9190614b70565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906142ef565b611dfd565b005b34801561073b57600080fd5b50610744611f9a565b6040516107519190614c3d565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c919061416c565b61202c565b60405161078e9190614c00565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b991906142af565b6120e5565b005b3480156107cc57600080fd5b506107e760048036038101906107e29190614378565b612266565b005b3480156107f557600080fd5b506107fe6122ff565b60405161080b9190614c22565b60405180910390f35b34801561082057600080fd5b5061083b6004803603810190610836919061422c565b612312565b005b34801561084957600080fd5b50610852612374565b60405161085f919061513f565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190614448565b61237a565b60405161089c9190614c3d565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c79190614448565b612421565b005b3480156108da57600080fd5b506108f560048036038101906108f0919061416c565b6124a7565b604051610902919061513f565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190614199565b6126ef565b60405161093f9190614c22565b60405180910390f35b34801561095457600080fd5b5061095d612783565b60405161096a919061513f565b60405180910390f35b34801561097f57600080fd5b5061099a60048036038101906109959190614448565b612789565b005b3480156109a857600080fd5b506109c360048036038101906109be919061416c565b612c14565b005b3480156109d157600080fd5b506109da612dc0565b6040516109e79190614c22565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a635750610a6282612dd3565b5b9050919050565b606060008054610a7990615454565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590615454565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905090565b6000610b0782612eb5565b610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90614dff565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8c826114ae565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf490614fbf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1c612f21565b73ffffffffffffffffffffffffffffffffffffffff161480610c4b5750610c4a81610c45612f21565b6126ef565b5b610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190614d3f565b60405180910390fd5b610c948383612f29565b505050565b6000600880549050905090565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b610ce1610cdb612f21565b82612fe2565b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790614e1f565b60405180910390fd5b610d2b8383836130c0565b505050565b600061012c6096610d419190615289565b600d541015610d535760009050610d64565b81600e54610d619190615310565b90505b919050565b610d71612f21565b73ffffffffffffffffffffffffffffffffffffffff16610d8f611dd3565b73ffffffffffffffffffffffffffffffffffffffff1614610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90614f1f565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6000610e0d83611aaa565b8210610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590614cff565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006011600083815260200190815260200160002060009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f395750601060009054906101000a900460ff165b610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90614edf565b60405180910390fd5b6122b8600d541115610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690614f3f565b60405180910390fd5b6122b881600d54610fd09190615289565b1115611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890614ebf565b60405180910390fd5b6014811115611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c9061501f565b60405180910390fd5b61105e81610d30565b341015806110b95750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90614e5f565b60405180910390fd5b60005b8181101561113a5761110f83600d5461331c565b600d6000815480929190611122906154b7565b91905055508080611132906154b7565b9150506110fb565b505050565b61115a83838360405180602001604052806000815250612312565b505050565b6000611169610c99565b82106111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a19061505f565b60405180910390fd5b600882815481106111be576111bd6155ed565b5b90600052602060002001549050919050565b6111d8612f21565b73ffffffffffffffffffffffffffffffffffffffff166111f6611dd3565b73ffffffffffffffffffffffffffffffffffffffff161461124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390614f1f565b60405180910390fd5b80600f9080519060200190611262929190613ecd565b5050565b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016112c49190614b70565b60206040518083038186803b1580156112dc57600080fd5b505afa1580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190614475565b90506000808267ffffffffffffffff8111156113335761133261561c565b5b6040519080825280602002602001820160405280156113615781602001602082028036833780820191505090505b50905060005b838110156114a257601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987836040518363ffffffff1660e01b81526004016113cc929190614bd7565b60206040518083038186803b1580156113e457600080fd5b505afa1580156113f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141c9190614475565b82828151811061142f5761142e6155ed565b5b60200260200101818152505060116000838381518110611452576114516155ed565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16156114805761148f565b828061148b906154b7565b9350505b808061149a906154b7565b915050611367565b50819350505050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e90614c5f565b60405180910390fd5b80915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115c85750601060009054906101000a900460ff165b611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90614e7f565b60405180910390fd5b6122b8600d54111561164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614fff565b60405180910390fd5b6122b881600d5461165f9190615289565b11156116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169790614ddf565b60405180910390fd5b60006116ab33611266565b116116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290614d7f565b60405180910390fd5b6116f433611266565b811115611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614cdf565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016117939190614b70565b60206040518083038186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e39190614475565b90506000808267ffffffffffffffff8111156118025761180161561c565b5b6040519080825280602002602001820160405280156118305781602001602082028036833780820191505090505b50905060005b838110156119e457601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5933836040518363ffffffff1660e01b815260040161189b929190614bd7565b60206040518083038186803b1580156118b357600080fd5b505afa1580156118c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118eb9190614475565b8282815181106118fe576118fd6155ed565b5b60200260200101818152505060116000838381518110611921576119206155ed565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161561194f576119d1565b848310156119d05761196333600d5461331c565b600d6000815480929190611976906154b7565b91905055508280611986906154b7565b9350506001601160008484815181106119a2576119a16155ed565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b80806119dc906154b7565b915050611836565b5050505050565b6122b881565b6060601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c836040518263ffffffff1660e01b8152600401611a4e9190614b70565b60006040518083038186803b158015611a6657600080fd5b505afa158015611a7a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611aa3919061432f565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b12906150df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b6a612f21565b73ffffffffffffffffffffffffffffffffffffffff16611b88611dd3565b73ffffffffffffffffffffffffffffffffffffffff1614611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590614f1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606000611cac83611aaa565b905060008167ffffffffffffffff811115611cca57611cc961561c565b5b604051908082528060200260200182016040528015611cf85781602001602082028036833780820191505090505b50905060005b82811015611d4257611d108582610e02565b828281518110611d2357611d226155ed565b5b6020026020010181815250508080611d3a906154b7565b915050611cfe565b508092505050919050565b611d55612f21565b73ffffffffffffffffffffffffffffffffffffffff16611d73611dd3565b73ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc090614f1f565b60405180910390fd5b611dd161333a565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e05612f21565b73ffffffffffffffffffffffffffffffffffffffff16611e23611dd3565b73ffffffffffffffffffffffffffffffffffffffff1614611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090614f1f565b60405180910390fd5b6096600c5410611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb5906150bf565b60405180910390fd5b609681600c54611ece9190615289565b1115611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0690614e3f565b60405180910390fd5b6014811115611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90614c7f565b60405180910390fd5b60005b81811015611f9557611f6a83600c5461331c565b600c6000815480929190611f7d906154b7565b91905055508080611f8d906154b7565b915050611f56565b505050565b606060018054611fa990615454565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd590615454565b80156120225780601f10611ff757610100808354040283529160200191612022565b820191906000526020600020905b81548152906001019060200180831161200557829003601f168201915b5050505050905090565b6060601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c836040518263ffffffff1660e01b81526004016120899190614b70565b60006040518083038186803b1580156120a157600080fd5b505afa1580156120b5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120de919061432f565b9050919050565b6120ed612f21565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290614d5f565b60405180910390fd5b8060056000612168612f21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612215612f21565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161225a9190614c22565b60405180910390a35050565b61226e612f21565b73ffffffffffffffffffffffffffffffffffffffff1661228c611dd3565b73ffffffffffffffffffffffffffffffffffffffff16146122e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d990614f1f565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b601060019054906101000a900460ff1681565b61232361231d612f21565b83612fe2565b612362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612359906150ff565b60405180910390fd5b61236e84848484613422565b50505050565b600e5481565b606061238582612eb5565b6123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb90614f7f565b60405180910390fd5b60006123ce61347e565b905060008151116123ee5760405180602001604052806000815250612419565b806123f884613510565b604051602001612409929190614b4c565b6040516020818303038152906040525b915050919050565b612429612f21565b73ffffffffffffffffffffffffffffffffffffffff16612447611dd3565b73ffffffffffffffffffffffffffffffffffffffff161461249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490614f1f565b60405180910390fd5b80600e8190555050565b600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016125059190614b70565b60206040518083038186803b15801561251d57600080fd5b505afa158015612531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125559190614475565b90506000808267ffffffffffffffff8111156125745761257361561c565b5b6040519080825280602002602001820160405280156125a25781602001602082028036833780820191505090505b50905060005b838110156126e357601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987836040518363ffffffff1660e01b815260040161260d929190614bd7565b60206040518083038186803b15801561262557600080fd5b505afa158015612639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265d9190614475565b8282815181106126705761266f6155ed565b5b60200260200101818152505060126000838381518110612693576126926155ed565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16156126c1576126d0565b82806126cc906154b7565b9350505b80806126db906154b7565b9150506125a8565b50819350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806127f15750601060019054906101000a900460ff165b612830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282790614f5f565b60405180910390fd5b6122b8600d541115612877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286e9061507f565b60405180910390fd5b6122b881600d546128889190615289565b11156128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c09061509f565b60405180910390fd5b60006128d4336124a7565b11612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90614f9f565b60405180910390fd5b61291d336124a7565b81111561295f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129569061503f565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016129bc9190614b70565b60206040518083038186803b1580156129d457600080fd5b505afa1580156129e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0c9190614475565b90506000808267ffffffffffffffff811115612a2b57612a2a61561c565b5b604051908082528060200260200182016040528015612a595781602001602082028036833780820191505090505b50905060005b83811015612c0d57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5933836040518363ffffffff1660e01b8152600401612ac4929190614bd7565b60206040518083038186803b158015612adc57600080fd5b505afa158015612af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b149190614475565b828281518110612b2757612b266155ed565b5b60200260200101818152505060126000838381518110612b4a57612b496155ed565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615612b7857612bfa565b84831015612bf957612b8c33600d5461331c565b600d6000815480929190612b9f906154b7565b91905055508280612baf906154b7565b935050600160126000848481518110612bcb57612bca6155ed565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b8080612c05906154b7565b915050612a5f565b5050505050565b612c1c612f21565b73ffffffffffffffffffffffffffffffffffffffff16612c3a611dd3565b73ffffffffffffffffffffffffffffffffffffffff1614612c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8790614f1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf790614c9f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e9e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612eae5750612ead82613671565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f9c836114ae565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612fed82612eb5565b61302c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302390614fdf565b60405180910390fd5b6000613037836114ae565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806130a657508373ffffffffffffffffffffffffffffffffffffffff1661308e84610afc565b73ffffffffffffffffffffffffffffffffffffffff16145b806130b757506130b681856126ef565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130e0826114ae565b73ffffffffffffffffffffffffffffffffffffffff1614613136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312d90614dbf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319d9061511f565b60405180910390fd5b6131b18383836136db565b6131bc600082612f29565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461320c919061536a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132639190615289565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6133368282604051806020016040528060008152506137ef565b5050565b6000606460144761334b9190615310565b61335591906152df565b905060008147613365919061536a565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156133cf573d6000803e3d6000fd5b506133d8612f21565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561341d573d6000803e3d6000fd5b505050565b61342d8484846130c0565b6134398484848461384a565b613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f90614d1f565b60405180910390fd5b50505050565b6060600f805461348d90615454565b80601f01602080910402602001604051908101604052809291908181526020018280546134b990615454565b80156135065780601f106134db57610100808354040283529160200191613506565b820191906000526020600020905b8154815290600101906020018083116134e957829003601f168201915b5050505050905090565b60606000821415613558576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061366c565b600082905060005b6000821461358a578080613573906154b7565b915050600a8261358391906152df565b9150613560565b60008167ffffffffffffffff8111156135a6576135a561561c565b5b6040519080825280601f01601f1916602001820160405280156135d85781602001600182028036833780820191505090505b5090505b60008514613665576001826135f1919061536a565b9150600a856136009190615500565b603061360c9190615289565b60f81b818381518110613622576136216155ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561365e91906152df565b94506135dc565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6136e68383836139e1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561372957613724816139e6565b613768565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613767576137668382613a2f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137ab576137a681613b9c565b6137ea565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146137e9576137e88282613c6d565b5b5b505050565b6137f98383613cec565b613806600084848461384a565b613845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383c90614cbf565b60405180910390fd5b505050565b600061386b8473ffffffffffffffffffffffffffffffffffffffff16613eba565b156139d4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613894612f21565b8786866040518563ffffffff1660e01b81526004016138b69493929190614b8b565b602060405180830381600087803b1580156138d057600080fd5b505af192505050801561390157506040513d601f19601f820116820180604052508101906138fe91906143d2565b60015b613984573d8060008114613931576040519150601f19603f3d011682016040523d82523d6000602084013e613936565b606091505b5060008151141561397c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397390614e9f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506139d9565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613a3c84611aaa565b613a46919061536a565b9050600060076000848152602001908152602001600020549050818114613b2b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613bb0919061536a565b9050600060096000848152602001908152602001600020549050600060088381548110613be057613bdf6155ed565b5b906000526020600020015490508060088381548110613c0257613c016155ed565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613c5157613c506155be565b5b6001900381819060005260206000200160009055905550505050565b6000613c7883611aaa565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d5390614eff565b60405180910390fd5b613d6581612eb5565b15613da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d9c90614d9f565b60405180910390fd5b613db1600083836136db565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e019190615289565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613ed990615454565b90600052602060002090601f016020900481019282613efb5760008555613f42565b82601f10613f1457805160ff1916838001178555613f42565b82800160010185558215613f42579182015b82811115613f41578251825591602001919060010190613f26565b5b509050613f4f9190613f53565b5090565b5b80821115613f6c576000816000905550600101613f54565b5090565b6000613f83613f7e8461517f565b61515a565b90508083825260208201905082856020860282011115613fa657613fa5615650565b5b60005b85811015613fd65781613fbc8882614157565b845260208401935060208301925050600181019050613fa9565b5050509392505050565b6000613ff3613fee846151ab565b61515a565b90508281526020810184848401111561400f5761400e615655565b5b61401a848285615412565b509392505050565b6000614035614030846151dc565b61515a565b90508281526020810184848401111561405157614050615655565b5b61405c848285615412565b509392505050565b60008135905061407381615d00565b92915050565b600082601f83011261408e5761408d61564b565b5b815161409e848260208601613f70565b91505092915050565b6000813590506140b681615d17565b92915050565b6000813590506140cb81615d2e565b92915050565b6000815190506140e081615d2e565b92915050565b600082601f8301126140fb576140fa61564b565b5b813561410b848260208601613fe0565b91505092915050565b600082601f8301126141295761412861564b565b5b8135614139848260208601614022565b91505092915050565b60008135905061415181615d45565b92915050565b60008151905061416681615d45565b92915050565b6000602082840312156141825761418161565f565b5b600061419084828501614064565b91505092915050565b600080604083850312156141b0576141af61565f565b5b60006141be85828601614064565b92505060206141cf85828601614064565b9150509250929050565b6000806000606084860312156141f2576141f161565f565b5b600061420086828701614064565b935050602061421186828701614064565b925050604061422286828701614142565b9150509250925092565b600080600080608085870312156142465761424561565f565b5b600061425487828801614064565b945050602061426587828801614064565b935050604061427687828801614142565b925050606085013567ffffffffffffffff8111156142975761429661565a565b5b6142a3878288016140e6565b91505092959194509250565b600080604083850312156142c6576142c561565f565b5b60006142d485828601614064565b92505060206142e5858286016140a7565b9150509250929050565b600080604083850312156143065761430561565f565b5b600061431485828601614064565b925050602061432585828601614142565b9150509250929050565b6000602082840312156143455761434461565f565b5b600082015167ffffffffffffffff8111156143635761436261565a565b5b61436f84828501614079565b91505092915050565b60006020828403121561438e5761438d61565f565b5b600061439c848285016140a7565b91505092915050565b6000602082840312156143bb576143ba61565f565b5b60006143c9848285016140bc565b91505092915050565b6000602082840312156143e8576143e761565f565b5b60006143f6848285016140d1565b91505092915050565b6000602082840312156144155761441461565f565b5b600082013567ffffffffffffffff8111156144335761443261565a565b5b61443f84828501614114565b91505092915050565b60006020828403121561445e5761445d61565f565b5b600061446c84828501614142565b91505092915050565b60006020828403121561448b5761448a61565f565b5b600061449984828501614157565b91505092915050565b60006144ae8383614b2e565b60208301905092915050565b6144c38161539e565b82525050565b60006144d48261521d565b6144de818561524b565b93506144e98361520d565b8060005b8381101561451a57815161450188826144a2565b975061450c8361523e565b9250506001810190506144ed565b5085935050505092915050565b614530816153b0565b82525050565b600061454182615228565b61454b818561525c565b935061455b818560208601615421565b61456481615664565b840191505092915050565b600061457a82615233565b614584818561526d565b9350614594818560208601615421565b61459d81615664565b840191505092915050565b60006145b382615233565b6145bd818561527e565b93506145cd818560208601615421565b80840191505092915050565b60006145e660038361526d565b91506145f182615675565b602082019050919050565b600061460960028361526d565b91506146148261569e565b602082019050919050565b600061462c60038361526d565b9150614637826156c7565b602082019050919050565b600061464f60038361526d565b915061465a826156f0565b602082019050919050565b600061467260038361526d565b915061467d82615719565b602082019050919050565b6000614695602b8361526d565b91506146a082615742565b604082019050919050565b60006146b860038361526d565b91506146c382615791565b602082019050919050565b60006146db60038361526d565b91506146e6826157ba565b602082019050919050565b60006146fe60038361526d565b9150614709826157e3565b602082019050919050565b600061472160038361526d565b915061472c8261580c565b602082019050919050565b600061474460038361526d565b915061474f82615835565b602082019050919050565b600061476760038361526d565b91506147728261585e565b602082019050919050565b600061478a60028361526d565b915061479582615887565b602082019050919050565b60006147ad60038361526d565b91506147b8826158b0565b602082019050919050565b60006147d060038361526d565b91506147db826158d9565b602082019050919050565b60006147f360028361526d565b91506147fe82615902565b602082019050919050565b600061481660028361526d565b91506148218261592b565b602082019050919050565b600061483960028361526d565b915061484482615954565b602082019050919050565b600061485c60038361526d565b91506148678261597d565b602082019050919050565b600061487f60028361526d565b915061488a826159a6565b602082019050919050565b60006148a260028361526d565b91506148ad826159cf565b602082019050919050565b60006148c560038361526d565b91506148d0826159f8565b602082019050919050565b60006148e860038361526d565b91506148f382615a21565b602082019050919050565b600061490b60028361526d565b915061491682615a4a565b602082019050919050565b600061492e60038361526d565b915061493982615a73565b602082019050919050565b600061495160038361526d565b915061495c82615a9c565b602082019050919050565b600061497460038361526d565b915061497f82615ac5565b602082019050919050565b600061499760038361526d565b91506149a282615aee565b602082019050919050565b60006149ba60038361526d565b91506149c582615b17565b602082019050919050565b60006149dd60018361526d565b91506149e882615b40565b602082019050919050565b6000614a00600a8361526d565b9150614a0b82615b69565b602082019050919050565b6000614a2360038361526d565b9150614a2e82615b92565b602082019050919050565b6000614a46602c8361526d565b9150614a5182615bbb565b604082019050919050565b6000614a6960038361526d565b9150614a7482615c0a565b602082019050919050565b6000614a8c60038361526d565b9150614a9782615c33565b602082019050919050565b6000614aaf60028361526d565b9150614aba82615c5c565b602082019050919050565b6000614ad260038361526d565b9150614add82615c85565b602082019050919050565b6000614af560038361526d565b9150614b0082615cae565b602082019050919050565b6000614b1860038361526d565b9150614b2382615cd7565b602082019050919050565b614b3781615408565b82525050565b614b4681615408565b82525050565b6000614b5882856145a8565b9150614b6482846145a8565b91508190509392505050565b6000602082019050614b8560008301846144ba565b92915050565b6000608082019050614ba060008301876144ba565b614bad60208301866144ba565b614bba6040830185614b3d565b8181036060830152614bcc8184614536565b905095945050505050565b6000604082019050614bec60008301856144ba565b614bf96020830184614b3d565b9392505050565b60006020820190508181036000830152614c1a81846144c9565b905092915050565b6000602082019050614c376000830184614527565b92915050565b60006020820190508181036000830152614c57818461456f565b905092915050565b60006020820190508181036000830152614c78816145d9565b9050919050565b60006020820190508181036000830152614c98816145fc565b9050919050565b60006020820190508181036000830152614cb88161461f565b9050919050565b60006020820190508181036000830152614cd881614642565b9050919050565b60006020820190508181036000830152614cf881614665565b9050919050565b60006020820190508181036000830152614d1881614688565b9050919050565b60006020820190508181036000830152614d38816146ab565b9050919050565b60006020820190508181036000830152614d58816146ce565b9050919050565b60006020820190508181036000830152614d78816146f1565b9050919050565b60006020820190508181036000830152614d9881614714565b9050919050565b60006020820190508181036000830152614db881614737565b9050919050565b60006020820190508181036000830152614dd88161475a565b9050919050565b60006020820190508181036000830152614df88161477d565b9050919050565b60006020820190508181036000830152614e18816147a0565b9050919050565b60006020820190508181036000830152614e38816147c3565b9050919050565b60006020820190508181036000830152614e58816147e6565b9050919050565b60006020820190508181036000830152614e7881614809565b9050919050565b60006020820190508181036000830152614e988161482c565b9050919050565b60006020820190508181036000830152614eb88161484f565b9050919050565b60006020820190508181036000830152614ed881614872565b9050919050565b60006020820190508181036000830152614ef881614895565b9050919050565b60006020820190508181036000830152614f18816148b8565b9050919050565b60006020820190508181036000830152614f38816148db565b9050919050565b60006020820190508181036000830152614f58816148fe565b9050919050565b60006020820190508181036000830152614f7881614921565b9050919050565b60006020820190508181036000830152614f9881614944565b9050919050565b60006020820190508181036000830152614fb881614967565b9050919050565b60006020820190508181036000830152614fd88161498a565b9050919050565b60006020820190508181036000830152614ff8816149ad565b9050919050565b60006020820190508181036000830152615018816149d0565b9050919050565b60006020820190508181036000830152615038816149f3565b9050919050565b6000602082019050818103600083015261505881614a16565b9050919050565b6000602082019050818103600083015261507881614a39565b9050919050565b6000602082019050818103600083015261509881614a5c565b9050919050565b600060208201905081810360008301526150b881614a7f565b9050919050565b600060208201905081810360008301526150d881614aa2565b9050919050565b600060208201905081810360008301526150f881614ac5565b9050919050565b6000602082019050818103600083015261511881614ae8565b9050919050565b6000602082019050818103600083015261513881614b0b565b9050919050565b60006020820190506151546000830184614b3d565b92915050565b6000615164615175565b90506151708282615486565b919050565b6000604051905090565b600067ffffffffffffffff82111561519a5761519961561c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156151c6576151c561561c565b5b6151cf82615664565b9050602081019050919050565b600067ffffffffffffffff8211156151f7576151f661561c565b5b61520082615664565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061529482615408565b915061529f83615408565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152d4576152d3615531565b5b828201905092915050565b60006152ea82615408565b91506152f583615408565b92508261530557615304615560565b5b828204905092915050565b600061531b82615408565b915061532683615408565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561535f5761535e615531565b5b828202905092915050565b600061537582615408565b915061538083615408565b92508282101561539357615392615531565b5b828203905092915050565b60006153a9826153e8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561543f578082015181840152602081019050615424565b8381111561544e576000848401525b50505050565b6000600282049050600182168061546c57607f821691505b602082108114156154805761547f61558f565b5b50919050565b61548f82615664565b810181811067ffffffffffffffff821117156154ae576154ad61561c565b5b80604052505050565b60006154c282615408565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154f5576154f4615531565b5b600182019050919050565b600061550b82615408565b915061551683615408565b92508261552657615525615560565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f2334350000000000000000000000000000000000000000000000000000000000600082015250565b7f2337000000000000000000000000000000000000000000000000000000000000600082015250565b7f2334320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335350000000000000000000000000000000000000000000000000000000000600082015250565b7f2331310000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f2335330000000000000000000000000000000000000000000000000000000000600082015250565b7f2334380000000000000000000000000000000000000000000000000000000000600082015250565b7f2335300000000000000000000000000000000000000000000000000000000000600082015250565b7f2331300000000000000000000000000000000000000000000000000000000000600082015250565b7f2335370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335380000000000000000000000000000000000000000000000000000000000600082015250565b7f2339000000000000000000000000000000000000000000000000000000000000600082015250565b7f2334390000000000000000000000000000000000000000000000000000000000600082015250565b7f2335310000000000000000000000000000000000000000000000000000000000600082015250565b7f2336000000000000000000000000000000000000000000000000000000000000600082015250565b7f2334000000000000000000000000000000000000000000000000000000000000600082015250565b7f2338000000000000000000000000000000000000000000000000000000000000600082015250565b7f2336300000000000000000000000000000000000000000000000000000000000600082015250565b7f2333000000000000000000000000000000000000000000000000000000000000600082015250565b7f2331000000000000000000000000000000000000000000000000000000000000600082015250565b7f2335360000000000000000000000000000000000000000000000000000000000600082015250565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b7f2332000000000000000000000000000000000000000000000000000000000000600082015250565b7f2331320000000000000000000000000000000000000000000000000000000000600082015250565b7f2334360000000000000000000000000000000000000000000000000000000000600082015250565b7f2331350000000000000000000000000000000000000000000000000000000000600082015250565b7f2334370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335340000000000000000000000000000000000000000000000000000000000600082015250565b7f2300000000000000000000000000000000000000000000000000000000000000600082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f2331360000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f2331330000000000000000000000000000000000000000000000000000000000600082015250565b7f2331340000000000000000000000000000000000000000000000000000000000600082015250565b7f2335000000000000000000000000000000000000000000000000000000000000600082015250565b7f2334340000000000000000000000000000000000000000000000000000000000600082015250565b7f2335320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335390000000000000000000000000000000000000000000000000000000000600082015250565b615d098161539e565b8114615d1457600080fd5b50565b615d20816153b0565b8114615d2b57600080fd5b50565b615d37816153bc565b8114615d4257600080fd5b50565b615d4e81615408565b8114615d5957600080fd5b5056fea2646970667358221220a0fd16dbb40a408f9a943fae991d567f9716be76b2ce2f07c86f3adeb09d702d64736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017687474703a2f2f617069332e64656174682e63796f752f000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): http://api3.death.cyou/
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [2] : 687474703a2f2f617069332e64656174682e63796f752f000000000000000000
Deployed Bytecode Sourcemap
40831:7367:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34704:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21899:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23239:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22852:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35357:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46193:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24066:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42991:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41750:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35025:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44056:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42112:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24396:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35547:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43342:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44199:559;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21631:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44774:1251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40891:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43912:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21400:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16934:148;;;;;;;;;;;;;:::i;:::-;;43452:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43804:90;;;:::i;:::-;;16313:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42623:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22068:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46051:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23491:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41635:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41192:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24618:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41079:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22243:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41877:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46334:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23835:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41018:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46905:1250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17635:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41155:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34704:237;34806:4;34845:35;34830:50;;;:11;:50;;;;:103;;;;34897:36;34921:11;34897:23;:36::i;:::-;34830:103;34823:110;;34704:237;;;:::o;21899:100::-;21953:13;21986:5;21979:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21899:100;:::o;23239:180::-;23315:7;23343:16;23351:7;23343;:16::i;:::-;23335:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;23387:15;:24;23403:7;23387:24;;;;;;;;;;;;;;;;;;;;;23380:31;;23239:180;;;:::o;22852:321::-;22933:13;22949:23;22964:7;22949:14;:23::i;:::-;22933:39;;22997:5;22991:11;;:2;:11;;;;22983:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;23047:5;23031:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;23056:44;23080:5;23087:12;:10;:12::i;:::-;23056:23;:44::i;:::-;23031:69;23023:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;23144:21;23153:2;23157:7;23144:8;:21::i;:::-;22922:251;22852:321;;:::o;35357:113::-;35418:7;35445:10;:17;;;;35438:24;;35357:113;:::o;46193:130::-;46268:4;46293:13;:22;46307:7;46293:22;;;;;;;;;;;;;;;;;;;;;46286:29;;46193:130;;;:::o;24066:259::-;24227:41;24246:12;:10;:12::i;:::-;24260:7;24227:18;:41::i;:::-;24219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24289:28;24299:4;24305:2;24309:7;24289:9;:28::i;:::-;24066:259;;;:::o;42991:217::-;43048:7;43100:3;40971;43087:16;;;;:::i;:::-;43072:12;;:31;43069:132;;;43128:1;43121:8;;;;43069:132;43181:6;43169:9;;:18;;;;:::i;:::-;43162:25;;42991:217;;;;:::o;41750:115::-;16544:12;:10;:12::i;:::-;16533:23;;:7;:5;:7::i;:::-;:23;;;16525:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41843:14:::1;41827:13;;:30;;;;;;;;;;;;;;;;;;41750:115:::0;:::o;35025:256::-;35122:7;35158:23;35175:5;35158:16;:23::i;:::-;35150:5;:31;35142:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35247:12;:19;35260:5;35247:19;;;;;;;;;;;;;;;:26;35267:5;35247:26;;;;;;;;;;;;35240:33;;35025:256;;;;:::o;44056:132::-;44132:4;44157:14;:23;44172:7;44157:23;;;;;;;;;;;;;;;;;;;;;44150:30;;44056:132;;;:::o;42112:492::-;42200:6;;;;;;;;;;;42186:20;;:10;:20;;;:34;;;;42210:10;;;;;;;;;;;42186:34;42178:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;40925:4;42246:12;;:25;;42238:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;40925:4;42312:6;42297:12;;:21;;;;:::i;:::-;:34;;42289:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;42367:2;42357:6;:12;;42349:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;42416:13;42422:6;42416:5;:13::i;:::-;42403:9;:26;;:50;;;;42447:6;;;;;;;;;;;42433:20;;:10;:20;;;42403:50;42395:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42484:6;42480:117;42500:6;42496:1;:10;42480:117;;;42527:28;42537:3;42542:12;;42527:9;:28::i;:::-;42571:12;;:14;;;;;;;;;:::i;:::-;;;;;;42508:3;;;;;:::i;:::-;;;;42480:117;;;;42112:492;;:::o;24396:151::-;24500:39;24517:4;24523:2;24527:7;24500:39;;;;;;;;;;;;:16;:39::i;:::-;24396:151;;;:::o;35547:233::-;35622:7;35658:30;:28;:30::i;:::-;35650:5;:38;35642:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35755:10;35766:5;35755:17;;;;;;;;:::i;:::-;;;;;;;;;;35748:24;;35547:233;;;:::o;43342:102::-;16544:12;:10;:12::i;:::-;16533:23;;:7;:5;:7::i;:::-;:23;;;16525:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;43429:7:::1;43413:13;:23;;;;;;;;;;;;:::i;:::-;;43342:102:::0;:::o;44199:559::-;44276:7;44296:15;44314:4;;;;;;;;;;;:14;;;44329:7;44314:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44296:41;;44348:19;44382:25;44424:10;44410:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44382:53;;44450:6;44446:267;44466:10;44462:1;:14;44446:267;;;44511:4;;;;;;;;;;;:24;;;44536:7;44545:1;44511:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44497:8;44506:1;44497:11;;;;;;;;:::i;:::-;;;;;;;:50;;;;;44580:14;:27;44595:8;44604:1;44595:11;;;;;;;;:::i;:::-;;;;;;;;44580:27;;;;;;;;;;;;;;;;;;;;;44576:112;;;;;;44654:16;;;;;:::i;:::-;;;;44576:112;44478:3;;;;;:::i;:::-;;;;44446:267;;;;44736:14;44729:21;;;;;44199:559;;;:::o;21631:201::-;21703:7;21723:13;21739:7;:16;21747:7;21739:16;;;;;;;;;;;;;;;;;;;;;21723:32;;21791:1;21774:19;;:5;:19;;;;21766:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;21819:5;21812:12;;;21631:201;;;:::o;44774:1251::-;44848:6;;;;;;;;;;;44834:20;;:10;:20;;;:34;;;;44858:10;;;;;;;;;;;44834:34;44826:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;40925:4;44894:12;;:25;;44886:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;40925:4;44959:6;44944:12;;:21;;;;:::i;:::-;:34;;44936:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45040:1;45004:33;45026:10;45004:21;:33::i;:::-;:37;44996:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;45078:33;45100:10;45078:21;:33::i;:::-;45068:6;:43;;45060:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45178:15;45196:4;;;;;;;;;;;:14;;;45211:10;45196:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45178:44;;45274:19;45356:25;45398:10;45384:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45356:53;;45424:6;45420:592;45440:10;45436:1;:14;45420:592;;;45485:4;;;;;;;;;;;:24;;;45510:10;45522:1;45485:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45471:8;45480:1;45471:11;;;;;;;;:::i;:::-;;;;;;;:53;;;;;45598:14;:27;45613:8;45622:1;45613:11;;;;;;;;:::i;:::-;;;;;;;;45598:27;;;;;;;;;;;;;;;;;;;;;45594:402;;;;;;45705:6;45688:14;:23;45685:292;;;45760:35;45770:10;45782:12;;45760:9;:35::i;:::-;45820:12;;:14;;;;;;;;;:::i;:::-;;;;;;45859:16;;;;;:::i;:::-;;;;45930:4;45900:14;:27;45915:8;45924:1;45915:11;;;;;;;;:::i;:::-;;;;;;;;45900:27;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;45685:292;45594:402;45452:3;;;;;:::i;:::-;;;;45420:592;;;;44815:1210;;;44774:1251;:::o;40891:38::-;40925:4;40891:38;:::o;43912:132::-;43971:16;44008:4;;;;;;;;;;;:18;;;44027:7;44008:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44001:34;;43912:132;;;:::o;21400:169::-;21472:7;21517:1;21500:19;;:5;:19;;;;21492:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;21545:9;:16;21555:5;21545:16;;;;;;;;;;;;;;;;21538:23;;21400:169;;;:::o;16934:148::-;16544:12;:10;:12::i;:::-;16533:23;;:7;:5;:7::i;:::-;:23;;;16525:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;17041:1:::1;17004:40;;17025:6;;;;;;;;;;;17004:40;;;;;;;;;;;;17072:1;17055:6;;:19;;;;;;;;;;;;;;;;;;16934:148::o:0;43452:344::-;43513:16;43542:15;43560:17;43570:6;43560:9;:17::i;:::-;43542:35;;43590:25;43632:10;43618:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43590:53;;43658:6;43654:107;43674:10;43670:1;:14;43654:107;;;43719:30;43739:6;43747:1;43719:19;:30::i;:::-;43705:8;43714:1;43705:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;43686:3;;;;;:::i;:::-;;;;43654:107;;;;43780:8;43773:15;;;;43452:344;;;:::o;43804:90::-;16544:12;:10;:12::i;:::-;16533:23;;:7;:5;:7::i;:::-;:23;;;16525:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;43863:14:::1;:12;:14::i;:::-;43804:90::o:0;16313:87::-;16359:7;16386:6;;;;;;;;;;;16379:13;;16313:87;:::o;42623:360::-;16544:12;:10;:12::i;:::-;16533:23;;:7;:5;:7::i;:::-;:23;;;16525:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;40971:3:::1;42706:13;;:26;42698:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;40971:3;42774:6;42758:13;;:22;;;;:::i;:::-;:36;;42750:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42830:2;42820:6;:12;;42812:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;42862:6;42858:118;42878:6;42874:1;:10;42858:118;;;42905:29;42915:3;42920:13;;42905:9;:29::i;:::-;42949:13;;:15;;;;;;;;;:::i;:::-;;;;;;42886:3;;;;;:::i;:::-;;;;42858:118;;;;42623:360:::0;;:::o;22068:104::-;22124:13;22157:7;22150:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22068:104;:::o;46051:130::-;46109:16;46146:3;;;;;;;;;;;:17;;;46164:7;46146:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46139:33;;46051:130;;;:::o;23491:273::-;23606:12;:10;:12::i;:::-;23594:24;;:8;:24;;;;23586:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;23684:8;23639:18;:32;23658:12;:10;:12::i;:::-;23639:32;;;;;;;;;;;;;;;:42;23672:8;23639:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23737:8;23708:48;;23723:12;:10;:12::i;:::-;23708:48;;;23747:8;23708:48;;;;;;:::i;:::-;;;;;;;;23491:273;;:::o;41635:103::-;16544:12;:10;:12::i;:::-;16533:23;;:7;:5;:7::i;:::-;:23;;;16525:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41719:11:::1;41706:10;;:24;;;;;;;;;;;;;;;;;;41635:103:::0;:::o;41192:33::-;;;;;;;;;;;;;:::o;24618:239::-;24750:41;24769:12;:10;:12::i;:::-;24783:7;24750:18;:41::i;:::-;24742:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24810:39;24824:4;24830:2;24834:7;24843:5;24810:13;:39::i;:::-;24618:239;;;;:::o;41079:33::-;;;;:::o;22243:316::-;22316:13;22350:16;22358:7;22350;:16::i;:::-;22342:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;22387:21;22411:10;:8;:10::i;:::-;22387:34;;22463:1;22445:7;22439:21;:25;:112;;;;;;;;;;;;;;;;;22504:7;22513:18;:7;:16;:18::i;:::-;22487:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22439:112;22432:119;;;22243:316;;;:::o;41877:99::-;16544:12;:10;:12::i;:::-;16533:23;;:7;:5;:7::i;:::-;:23;;;16525:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41958:10:::1;41946:9;:22;;;;41877:99:::0;:::o;46334:555::-;46410:7;46430:15;46448:3;;;;;;;;;;;:13;;;46462:7;46448:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46430:40;;46481:19;46515:25;46557:10;46543:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46515:53;;46583:6;46579:265;46599:10;46595:1;:14;46579:265;;;46644:3;;;;;;;;;;;:23;;;46668:7;46677:1;46644:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46630:8;46639:1;46630:11;;;;;;;;:::i;:::-;;;;;;;:49;;;;;46712:13;:26;46726:8;46735:1;46726:11;;;;;;;;:::i;:::-;;;;;;;;46712:26;;;;;;;;;;;;;;;;;;;;;46708:111;;;;;;46785:16;;;;;:::i;:::-;;;;46708:111;46611:3;;;;;:::i;:::-;;;;46579:265;;;;46867:14;46860:21;;;;;46334:555;;;:::o;23835:164::-;23932:4;23956:18;:25;23975:5;23956:25;;;;;;;;;;;;;;;:35;23982:8;23956:35;;;;;;;;;;;;;;;;;;;;;;;;;23949:42;;23835:164;;;;:::o;41018:54::-;;;;:::o;46905:1250::-;46978:6;;;;;;;;;;;46964:20;;:10;:20;;;:37;;;;46988:13;;;;;;;;;;;46964:37;46956:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;40925:4;47028:12;;:25;;47020:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;40925:4;47095:6;47080:12;;:21;;;;:::i;:::-;:34;;47072:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;47176:1;47141:32;47162:10;47141:20;:32::i;:::-;:36;47133:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;47214:32;47235:10;47214:20;:32::i;:::-;47204:6;:42;;47196:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47312:15;47330:3;;;;;;;;;;;:13;;;47344:10;47330:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47312:43;;47407:19;47489:25;47531:10;47517:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47489:53;;47557:6;47553:589;47573:10;47569:1;:14;47553:589;;;47618:3;;;;;;;;;;;:23;;;47642:10;47654:1;47618:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47604:8;47613:1;47604:11;;;;;;;;:::i;:::-;;;;;;;:52;;;;;47730:13;:26;47744:8;47753:1;47744:11;;;;;;;;:::i;:::-;;;;;;;;47730:26;;;;;;;;;;;;;;;;;;;;;47726:400;;;;;;47836:6;47819:14;:23;47816:291;;;47891:35;47901:10;47913:12;;47891:9;:35::i;:::-;47951:12;;:14;;;;;;;;;:::i;:::-;;;;;;47990:16;;;;;:::i;:::-;;;;48060:4;48031:13;:26;48045:8;48054:1;48045:11;;;;;;;;:::i;:::-;;;;;;;;48031:26;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;47816:291;47726:400;47585:3;;;;;:::i;:::-;;;;47553:589;;;;46945:1210;;;46905:1250;:::o;17635:209::-;16544:12;:10;:12::i;:::-;16533:23;;:7;:5;:7::i;:::-;:23;;;16525:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;17744:1:::1;17724:22;;:8;:22;;;;17716:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17799:8;17770:38;;17791:6;;;;;;;;;;;17770:38;;;;;;;;;;;;17828:8;17819:6;;:17;;;;;;;;;;;;;;;;;;17635:209:::0;:::o;41155:30::-;;;;;;;;;;;;;:::o;21044:292::-;21146:4;21185:25;21170:40;;;:11;:40;;;;:105;;;;21242:33;21227:48;;;:11;:48;;;;21170:105;:158;;;;21292:36;21316:11;21292:23;:36::i;:::-;21170:158;21163:165;;21044:292;;;:::o;26277:127::-;26342:4;26394:1;26366:30;;:7;:16;26374:7;26366:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26359:37;;26277:127;;;:::o;7081:98::-;7134:7;7161:10;7154:17;;7081:98;:::o;29948:174::-;30050:2;30023:15;:24;30039:7;30023:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30106:7;30102:2;30068:46;;30077:23;30092:7;30077:14;:23::i;:::-;30068:46;;;;;;;;;;;;29948:174;;:::o;26571:314::-;26664:4;26689:16;26697:7;26689;:16::i;:::-;26681:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;26724:13;26740:23;26755:7;26740:14;:23::i;:::-;26724:39;;26793:5;26782:16;;:7;:16;;;:51;;;;26826:7;26802:31;;:20;26814:7;26802:11;:20::i;:::-;:31;;;26782:51;:94;;;;26837:39;26861:5;26868:7;26837:23;:39::i;:::-;26782:94;26774:103;;;26571:314;;;;:::o;29357:473::-;29482:4;29455:31;;:23;29470:7;29455:14;:23::i;:::-;:31;;;29447:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;29527:1;29513:16;;:2;:16;;;;29505:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;29550:39;29571:4;29577:2;29581:7;29550:20;:39::i;:::-;29654:29;29671:1;29675:7;29654:8;:29::i;:::-;29715:1;29696:9;:15;29706:4;29696:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29744:1;29727:9;:13;29737:2;29727:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29775:2;29756:7;:16;29764:7;29756:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29814:7;29810:2;29795:27;;29804:4;29795:27;;;;;;;;;;;;29357:473;;;:::o;27227:110::-;27303:26;27313:2;27317:7;27303:26;;;;;;;;;;;;:9;:26::i;:::-;27227:110;;:::o;17187:283::-;17239:18;17285:3;17282:2;17260:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;17239:49;;17298:23;17346:10;17324:21;:32;;;;:::i;:::-;17298:58;;17377:3;;;;;;;;;;;17369:21;;:33;17391:10;17369:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17421:12;:10;:12::i;:::-;17413:30;;:47;17444:15;17413:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17229:241;;17187:283::o;25739:225::-;25853:28;25863:4;25869:2;25873:7;25853:9;:28::i;:::-;25900:48;25923:4;25929:2;25933:7;25942:5;25900:22;:48::i;:::-;25892:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25739:225;;;;:::o;43216:114::-;43276:13;43309;43302:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43216:114;:::o;18079:723::-;18135:13;18365:1;18356:5;:10;18352:53;;;18383:10;;;;;;;;;;;;;;;;;;;;;18352:53;18415:12;18430:5;18415:20;;18446:14;18471:78;18486:1;18478:4;:9;18471:78;;18504:8;;;;;:::i;:::-;;;;18535:2;18527:10;;;;;:::i;:::-;;;18471:78;;;18559:19;18591:6;18581:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18559:39;;18609:154;18625:1;18616:5;:10;18609:154;;18653:1;18643:11;;;;;:::i;:::-;;;18720:2;18712:5;:10;;;;:::i;:::-;18699:2;:24;;;;:::i;:::-;18686:39;;18669:6;18676;18669:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18749:2;18740:11;;;;;:::i;:::-;;;18609:154;;;18787:6;18773:21;;;;;18079:723;;;;:::o;8129:157::-;8214:4;8253:25;8238:40;;;:11;:40;;;;8231:47;;8129:157;;;:::o;36393:555::-;36503:45;36530:4;36536:2;36540:7;36503:26;:45::i;:::-;36581:1;36565:18;;:4;:18;;;36561:187;;;36600:40;36632:7;36600:31;:40::i;:::-;36561:187;;;36670:2;36662:10;;:4;:10;;;36658:90;;36689:47;36722:4;36728:7;36689:32;:47::i;:::-;36658:90;36561:187;36776:1;36762:16;;:2;:16;;;36758:183;;;36795:45;36832:7;36795:36;:45::i;:::-;36758:183;;;36868:4;36862:10;;:2;:10;;;36858:83;;36889:40;36917:2;36921:7;36889:27;:40::i;:::-;36858:83;36758:183;36393:555;;;:::o;27564:203::-;27660:18;27666:2;27670:7;27660:5;:18::i;:::-;27697:54;27728:1;27732:2;27736:7;27745:5;27697:22;:54::i;:::-;27689:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27564:203;;;:::o;30687:796::-;30808:4;30834:15;:2;:13;;;:15::i;:::-;30830:646;;;30886:2;30870:36;;;30907:12;:10;:12::i;:::-;30921:4;30927:7;30936:5;30870:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30866:555;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31133:1;31116:6;:13;:18;31112:294;;;31159:13;;;;;;;;;;:::i;:::-;;;;;;;;31112:294;31356:6;31350:13;31341:6;31337:2;31333:15;31326:38;30866:555;31003:45;;;30993:55;;;:6;:55;;;;30986:62;;;;;30830:646;31460:4;31453:11;;30687:796;;;;;;;:::o;32096:93::-;;;;:::o;37671:164::-;37775:10;:17;;;;37748:15;:24;37764:7;37748:24;;;;;;;;;;;:44;;;;37803:10;37819:7;37803:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37671:164;:::o;38462:988::-;38728:22;38778:1;38753:22;38770:4;38753:16;:22::i;:::-;:26;;;;:::i;:::-;38728:51;;38790:18;38811:17;:26;38829:7;38811:26;;;;;;;;;;;;38790:47;;38958:14;38944:10;:28;38940:328;;38989:19;39011:12;:18;39024:4;39011:18;;;;;;;;;;;;;;;:34;39030:14;39011:34;;;;;;;;;;;;38989:56;;39095:11;39062:12;:18;39075:4;39062:18;;;;;;;;;;;;;;;:30;39081:10;39062:30;;;;;;;;;;;:44;;;;39212:10;39179:17;:30;39197:11;39179:30;;;;;;;;;;;:43;;;;38974:294;38940:328;39364:17;:26;39382:7;39364:26;;;;;;;;;;;39357:33;;;39408:12;:18;39421:4;39408:18;;;;;;;;;;;;;;;:34;39427:14;39408:34;;;;;;;;;;;39401:41;;;38543:907;;38462:988;;:::o;39745:1079::-;39998:22;40043:1;40023:10;:17;;;;:21;;;;:::i;:::-;39998:46;;40055:18;40076:15;:24;40092:7;40076:24;;;;;;;;;;;;40055:45;;40427:19;40449:10;40460:14;40449:26;;;;;;;;:::i;:::-;;;;;;;;;;40427:48;;40513:11;40488:10;40499;40488:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40624:10;40593:15;:28;40609:11;40593:28;;;;;;;;;;;:41;;;;40765:15;:24;40781:7;40765:24;;;;;;;;;;;40758:31;;;40800:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39816:1008;;;39745:1079;:::o;37249:221::-;37334:14;37351:20;37368:2;37351:16;:20::i;:::-;37334:37;;37409:7;37382:12;:16;37395:2;37382:16;;;;;;;;;;;;;;;:24;37399:6;37382:24;;;;;;;;;;;:34;;;;37456:6;37427:17;:26;37445:7;37427:26;;;;;;;;;;;:35;;;;37323:147;37249:221;;:::o;28103:328::-;28197:1;28183:16;;:2;:16;;;;28175:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;28227:16;28235:7;28227;:16::i;:::-;28226:17;28218:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;28264:45;28293:1;28297:2;28301:7;28264:20;:45::i;:::-;28339:1;28322:9;:13;28332:2;28322:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28370:2;28351:7;:16;28359:7;28351:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28415:7;28411:2;28390:33;;28407:1;28390:33;;;;;;;;;;;;28103:328;;:::o;2264:239::-;2324:4;2349:12;2460:7;2448:20;2440:28;;2494:1;2487:4;:8;2480:15;;;2264:239;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:744:1:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:2;;;415:79;;:::i;:::-;361:2;528:1;513:249;538:6;535:1;532:13;513:249;;;606:3;635:48;679:3;667:10;635:48;:::i;:::-;630:3;623:61;713:4;708:3;704:14;697:21;;747:4;742:3;738:14;731:21;;573:189;560:1;557;553:9;548:14;;513:249;;;517:14;137:631;;;;;;;:::o;774:410::-;851:5;876:65;892:48;933:6;892:48;:::i;:::-;876:65;:::i;:::-;867:74;;964:6;957:5;950:21;1002:4;995:5;991:16;1040:3;1031:6;1026:3;1022:16;1019:25;1016:2;;;1047:79;;:::i;:::-;1016:2;1137:41;1171:6;1166:3;1161;1137:41;:::i;:::-;857:327;;;;;;:::o;1190:412::-;1268:5;1293:66;1309:49;1351:6;1309:49;:::i;:::-;1293:66;:::i;:::-;1284:75;;1382:6;1375:5;1368:21;1420:4;1413:5;1409:16;1458:3;1449:6;1444:3;1440:16;1437:25;1434:2;;;1465:79;;:::i;:::-;1434:2;1555:41;1589:6;1584:3;1579;1555:41;:::i;:::-;1274:328;;;;;;:::o;1608:139::-;1654:5;1692:6;1679:20;1670:29;;1708:33;1735:5;1708:33;:::i;:::-;1660:87;;;;:::o;1770:385::-;1852:5;1901:3;1894:4;1886:6;1882:17;1878:27;1868:2;;1909:79;;:::i;:::-;1868:2;2019:6;2013:13;2044:105;2145:3;2137:6;2130:4;2122:6;2118:17;2044:105;:::i;:::-;2035:114;;1858:297;;;;;:::o;2161:133::-;2204:5;2242:6;2229:20;2220:29;;2258:30;2282:5;2258:30;:::i;:::-;2210:84;;;;:::o;2300:137::-;2345:5;2383:6;2370:20;2361:29;;2399:32;2425:5;2399:32;:::i;:::-;2351:86;;;;:::o;2443:141::-;2499:5;2530:6;2524:13;2515:22;;2546:32;2572:5;2546:32;:::i;:::-;2505:79;;;;:::o;2603:338::-;2658:5;2707:3;2700:4;2692:6;2688:17;2684:27;2674:2;;2715:79;;:::i;:::-;2674:2;2832:6;2819:20;2857:78;2931:3;2923:6;2916:4;2908:6;2904:17;2857:78;:::i;:::-;2848:87;;2664:277;;;;;:::o;2961:340::-;3017:5;3066:3;3059:4;3051:6;3047:17;3043:27;3033:2;;3074:79;;:::i;:::-;3033:2;3191:6;3178:20;3216:79;3291:3;3283:6;3276:4;3268:6;3264:17;3216:79;:::i;:::-;3207:88;;3023:278;;;;;:::o;3307:139::-;3353:5;3391:6;3378:20;3369:29;;3407:33;3434:5;3407:33;:::i;:::-;3359:87;;;;:::o;3452:143::-;3509:5;3540:6;3534:13;3525:22;;3556:33;3583:5;3556:33;:::i;:::-;3515:80;;;;:::o;3601:329::-;3660:6;3709:2;3697:9;3688:7;3684:23;3680:32;3677:2;;;3715:79;;:::i;:::-;3677:2;3835:1;3860:53;3905:7;3896:6;3885:9;3881:22;3860:53;:::i;:::-;3850:63;;3806:117;3667:263;;;;:::o;3936:474::-;4004:6;4012;4061:2;4049:9;4040:7;4036:23;4032:32;4029:2;;;4067:79;;:::i;:::-;4029:2;4187:1;4212:53;4257:7;4248:6;4237:9;4233:22;4212:53;:::i;:::-;4202:63;;4158:117;4314:2;4340:53;4385:7;4376:6;4365:9;4361:22;4340:53;:::i;:::-;4330:63;;4285:118;4019:391;;;;;:::o;4416:619::-;4493:6;4501;4509;4558:2;4546:9;4537:7;4533:23;4529:32;4526:2;;;4564:79;;:::i;:::-;4526:2;4684:1;4709:53;4754:7;4745:6;4734:9;4730:22;4709:53;:::i;:::-;4699:63;;4655:117;4811:2;4837:53;4882:7;4873:6;4862:9;4858:22;4837:53;:::i;:::-;4827:63;;4782:118;4939:2;4965:53;5010:7;5001:6;4990:9;4986:22;4965:53;:::i;:::-;4955:63;;4910:118;4516:519;;;;;:::o;5041:943::-;5136:6;5144;5152;5160;5209:3;5197:9;5188:7;5184:23;5180:33;5177:2;;;5216:79;;:::i;:::-;5177:2;5336:1;5361:53;5406:7;5397:6;5386:9;5382:22;5361:53;:::i;:::-;5351:63;;5307:117;5463:2;5489:53;5534:7;5525:6;5514:9;5510:22;5489:53;:::i;:::-;5479:63;;5434:118;5591:2;5617:53;5662:7;5653:6;5642:9;5638:22;5617:53;:::i;:::-;5607:63;;5562:118;5747:2;5736:9;5732:18;5719:32;5778:18;5770:6;5767:30;5764:2;;;5800:79;;:::i;:::-;5764:2;5905:62;5959:7;5950:6;5939:9;5935:22;5905:62;:::i;:::-;5895:72;;5690:287;5167:817;;;;;;;:::o;5990:468::-;6055:6;6063;6112:2;6100:9;6091:7;6087:23;6083:32;6080:2;;;6118:79;;:::i;:::-;6080:2;6238:1;6263:53;6308:7;6299:6;6288:9;6284:22;6263:53;:::i;:::-;6253:63;;6209:117;6365:2;6391:50;6433:7;6424:6;6413:9;6409:22;6391:50;:::i;:::-;6381:60;;6336:115;6070:388;;;;;:::o;6464:474::-;6532:6;6540;6589:2;6577:9;6568:7;6564:23;6560:32;6557:2;;;6595:79;;:::i;:::-;6557:2;6715:1;6740:53;6785:7;6776:6;6765:9;6761:22;6740:53;:::i;:::-;6730:63;;6686:117;6842:2;6868:53;6913:7;6904:6;6893:9;6889:22;6868:53;:::i;:::-;6858:63;;6813:118;6547:391;;;;;:::o;6944:554::-;7039:6;7088:2;7076:9;7067:7;7063:23;7059:32;7056:2;;;7094:79;;:::i;:::-;7056:2;7235:1;7224:9;7220:17;7214:24;7265:18;7257:6;7254:30;7251:2;;;7287:79;;:::i;:::-;7251:2;7392:89;7473:7;7464:6;7453:9;7449:22;7392:89;:::i;:::-;7382:99;;7185:306;7046:452;;;;:::o;7504:323::-;7560:6;7609:2;7597:9;7588:7;7584:23;7580:32;7577:2;;;7615:79;;:::i;:::-;7577:2;7735:1;7760:50;7802:7;7793:6;7782:9;7778:22;7760:50;:::i;:::-;7750:60;;7706:114;7567:260;;;;:::o;7833:327::-;7891:6;7940:2;7928:9;7919:7;7915:23;7911:32;7908:2;;;7946:79;;:::i;:::-;7908:2;8066:1;8091:52;8135:7;8126:6;8115:9;8111:22;8091:52;:::i;:::-;8081:62;;8037:116;7898:262;;;;:::o;8166:349::-;8235:6;8284:2;8272:9;8263:7;8259:23;8255:32;8252:2;;;8290:79;;:::i;:::-;8252:2;8410:1;8435:63;8490:7;8481:6;8470:9;8466:22;8435:63;:::i;:::-;8425:73;;8381:127;8242:273;;;;:::o;8521:509::-;8590:6;8639:2;8627:9;8618:7;8614:23;8610:32;8607:2;;;8645:79;;:::i;:::-;8607:2;8793:1;8782:9;8778:17;8765:31;8823:18;8815:6;8812:30;8809:2;;;8845:79;;:::i;:::-;8809:2;8950:63;9005:7;8996:6;8985:9;8981:22;8950:63;:::i;:::-;8940:73;;8736:287;8597:433;;;;:::o;9036:329::-;9095:6;9144:2;9132:9;9123:7;9119:23;9115:32;9112:2;;;9150:79;;:::i;:::-;9112:2;9270:1;9295:53;9340:7;9331:6;9320:9;9316:22;9295:53;:::i;:::-;9285:63;;9241:117;9102:263;;;;:::o;9371:351::-;9441:6;9490:2;9478:9;9469:7;9465:23;9461:32;9458:2;;;9496:79;;:::i;:::-;9458:2;9616:1;9641:64;9697:7;9688:6;9677:9;9673:22;9641:64;:::i;:::-;9631:74;;9587:128;9448:274;;;;:::o;9728:179::-;9797:10;9818:46;9860:3;9852:6;9818:46;:::i;:::-;9896:4;9891:3;9887:14;9873:28;;9808:99;;;;:::o;9913:118::-;10000:24;10018:5;10000:24;:::i;:::-;9995:3;9988:37;9978:53;;:::o;10067:732::-;10186:3;10215:54;10263:5;10215:54;:::i;:::-;10285:86;10364:6;10359:3;10285:86;:::i;:::-;10278:93;;10395:56;10445:5;10395:56;:::i;:::-;10474:7;10505:1;10490:284;10515:6;10512:1;10509:13;10490:284;;;10591:6;10585:13;10618:63;10677:3;10662:13;10618:63;:::i;:::-;10611:70;;10704:60;10757:6;10704:60;:::i;:::-;10694:70;;10550:224;10537:1;10534;10530:9;10525:14;;10490:284;;;10494:14;10790:3;10783:10;;10191:608;;;;;;;:::o;10805:109::-;10886:21;10901:5;10886:21;:::i;:::-;10881:3;10874:34;10864:50;;:::o;10920:360::-;11006:3;11034:38;11066:5;11034:38;:::i;:::-;11088:70;11151:6;11146:3;11088:70;:::i;:::-;11081:77;;11167:52;11212:6;11207:3;11200:4;11193:5;11189:16;11167:52;:::i;:::-;11244:29;11266:6;11244:29;:::i;:::-;11239:3;11235:39;11228:46;;11010:270;;;;;:::o;11286:364::-;11374:3;11402:39;11435:5;11402:39;:::i;:::-;11457:71;11521:6;11516:3;11457:71;:::i;:::-;11450:78;;11537:52;11582:6;11577:3;11570:4;11563:5;11559:16;11537:52;:::i;:::-;11614:29;11636:6;11614:29;:::i;:::-;11609:3;11605:39;11598:46;;11378:272;;;;;:::o;11656:377::-;11762:3;11790:39;11823:5;11790:39;:::i;:::-;11845:89;11927:6;11922:3;11845:89;:::i;:::-;11838:96;;11943:52;11988:6;11983:3;11976:4;11969:5;11965:16;11943:52;:::i;:::-;12020:6;12015:3;12011:16;12004:23;;11766:267;;;;;:::o;12039:365::-;12181:3;12202:66;12266:1;12261:3;12202:66;:::i;:::-;12195:73;;12277:93;12366:3;12277:93;:::i;:::-;12395:2;12390:3;12386:12;12379:19;;12185:219;;;:::o;12410:365::-;12552:3;12573:66;12637:1;12632:3;12573:66;:::i;:::-;12566:73;;12648:93;12737:3;12648:93;:::i;:::-;12766:2;12761:3;12757:12;12750:19;;12556:219;;;:::o;12781:365::-;12923:3;12944:66;13008:1;13003:3;12944:66;:::i;:::-;12937:73;;13019:93;13108:3;13019:93;:::i;:::-;13137:2;13132:3;13128:12;13121:19;;12927:219;;;:::o;13152:365::-;13294:3;13315:66;13379:1;13374:3;13315:66;:::i;:::-;13308:73;;13390:93;13479:3;13390:93;:::i;:::-;13508:2;13503:3;13499:12;13492:19;;13298:219;;;:::o;13523:365::-;13665:3;13686:66;13750:1;13745:3;13686:66;:::i;:::-;13679:73;;13761:93;13850:3;13761:93;:::i;:::-;13879:2;13874:3;13870:12;13863:19;;13669:219;;;:::o;13894:366::-;14036:3;14057:67;14121:2;14116:3;14057:67;:::i;:::-;14050:74;;14133:93;14222:3;14133:93;:::i;:::-;14251:2;14246:3;14242:12;14235:19;;14040:220;;;:::o;14266:365::-;14408:3;14429:66;14493:1;14488:3;14429:66;:::i;:::-;14422:73;;14504:93;14593:3;14504:93;:::i;:::-;14622:2;14617:3;14613:12;14606:19;;14412:219;;;:::o;14637:365::-;14779:3;14800:66;14864:1;14859:3;14800:66;:::i;:::-;14793:73;;14875:93;14964:3;14875:93;:::i;:::-;14993:2;14988:3;14984:12;14977:19;;14783:219;;;:::o;15008:365::-;15150:3;15171:66;15235:1;15230:3;15171:66;:::i;:::-;15164:73;;15246:93;15335:3;15246:93;:::i;:::-;15364:2;15359:3;15355:12;15348:19;;15154:219;;;:::o;15379:365::-;15521:3;15542:66;15606:1;15601:3;15542:66;:::i;:::-;15535:73;;15617:93;15706:3;15617:93;:::i;:::-;15735:2;15730:3;15726:12;15719:19;;15525:219;;;:::o;15750:365::-;15892:3;15913:66;15977:1;15972:3;15913:66;:::i;:::-;15906:73;;15988:93;16077:3;15988:93;:::i;:::-;16106:2;16101:3;16097:12;16090:19;;15896:219;;;:::o;16121:365::-;16263:3;16284:66;16348:1;16343:3;16284:66;:::i;:::-;16277:73;;16359:93;16448:3;16359:93;:::i;:::-;16477:2;16472:3;16468:12;16461:19;;16267:219;;;:::o;16492:365::-;16634:3;16655:66;16719:1;16714:3;16655:66;:::i;:::-;16648:73;;16730:93;16819:3;16730:93;:::i;:::-;16848:2;16843:3;16839:12;16832:19;;16638:219;;;:::o;16863:365::-;17005:3;17026:66;17090:1;17085:3;17026:66;:::i;:::-;17019:73;;17101:93;17190:3;17101:93;:::i;:::-;17219:2;17214:3;17210:12;17203:19;;17009:219;;;:::o;17234:365::-;17376:3;17397:66;17461:1;17456:3;17397:66;:::i;:::-;17390:73;;17472:93;17561:3;17472:93;:::i;:::-;17590:2;17585:3;17581:12;17574:19;;17380:219;;;:::o;17605:365::-;17747:3;17768:66;17832:1;17827:3;17768:66;:::i;:::-;17761:73;;17843:93;17932:3;17843:93;:::i;:::-;17961:2;17956:3;17952:12;17945:19;;17751:219;;;:::o;17976:365::-;18118:3;18139:66;18203:1;18198:3;18139:66;:::i;:::-;18132:73;;18214:93;18303:3;18214:93;:::i;:::-;18332:2;18327:3;18323:12;18316:19;;18122:219;;;:::o;18347:365::-;18489:3;18510:66;18574:1;18569:3;18510:66;:::i;:::-;18503:73;;18585:93;18674:3;18585:93;:::i;:::-;18703:2;18698:3;18694:12;18687:19;;18493:219;;;:::o;18718:365::-;18860:3;18881:66;18945:1;18940:3;18881:66;:::i;:::-;18874:73;;18956:93;19045:3;18956:93;:::i;:::-;19074:2;19069:3;19065:12;19058:19;;18864:219;;;:::o;19089:365::-;19231:3;19252:66;19316:1;19311:3;19252:66;:::i;:::-;19245:73;;19327:93;19416:3;19327:93;:::i;:::-;19445:2;19440:3;19436:12;19429:19;;19235:219;;;:::o;19460:365::-;19602:3;19623:66;19687:1;19682:3;19623:66;:::i;:::-;19616:73;;19698:93;19787:3;19698:93;:::i;:::-;19816:2;19811:3;19807:12;19800:19;;19606:219;;;:::o;19831:365::-;19973:3;19994:66;20058:1;20053:3;19994:66;:::i;:::-;19987:73;;20069:93;20158:3;20069:93;:::i;:::-;20187:2;20182:3;20178:12;20171:19;;19977:219;;;:::o;20202:365::-;20344:3;20365:66;20429:1;20424:3;20365:66;:::i;:::-;20358:73;;20440:93;20529:3;20440:93;:::i;:::-;20558:2;20553:3;20549:12;20542:19;;20348:219;;;:::o;20573:365::-;20715:3;20736:66;20800:1;20795:3;20736:66;:::i;:::-;20729:73;;20811:93;20900:3;20811:93;:::i;:::-;20929:2;20924:3;20920:12;20913:19;;20719:219;;;:::o;20944:365::-;21086:3;21107:66;21171:1;21166:3;21107:66;:::i;:::-;21100:73;;21182:93;21271:3;21182:93;:::i;:::-;21300:2;21295:3;21291:12;21284:19;;21090:219;;;:::o;21315:365::-;21457:3;21478:66;21542:1;21537:3;21478:66;:::i;:::-;21471:73;;21553:93;21642:3;21553:93;:::i;:::-;21671:2;21666:3;21662:12;21655:19;;21461:219;;;:::o;21686:365::-;21828:3;21849:66;21913:1;21908:3;21849:66;:::i;:::-;21842:73;;21924:93;22013:3;21924:93;:::i;:::-;22042:2;22037:3;22033:12;22026:19;;21832:219;;;:::o;22057:365::-;22199:3;22220:66;22284:1;22279:3;22220:66;:::i;:::-;22213:73;;22295:93;22384:3;22295:93;:::i;:::-;22413:2;22408:3;22404:12;22397:19;;22203:219;;;:::o;22428:365::-;22570:3;22591:66;22655:1;22650:3;22591:66;:::i;:::-;22584:73;;22666:93;22755:3;22666:93;:::i;:::-;22784:2;22779:3;22775:12;22768:19;;22574:219;;;:::o;22799:365::-;22941:3;22962:66;23026:1;23021:3;22962:66;:::i;:::-;22955:73;;23037:93;23126:3;23037:93;:::i;:::-;23155:2;23150:3;23146:12;23139:19;;22945:219;;;:::o;23170:366::-;23312:3;23333:67;23397:2;23392:3;23333:67;:::i;:::-;23326:74;;23409:93;23498:3;23409:93;:::i;:::-;23527:2;23522:3;23518:12;23511:19;;23316:220;;;:::o;23542:365::-;23684:3;23705:66;23769:1;23764:3;23705:66;:::i;:::-;23698:73;;23780:93;23869:3;23780:93;:::i;:::-;23898:2;23893:3;23889:12;23882:19;;23688:219;;;:::o;23913:366::-;24055:3;24076:67;24140:2;24135:3;24076:67;:::i;:::-;24069:74;;24152:93;24241:3;24152:93;:::i;:::-;24270:2;24265:3;24261:12;24254:19;;24059:220;;;:::o;24285:365::-;24427:3;24448:66;24512:1;24507:3;24448:66;:::i;:::-;24441:73;;24523:93;24612:3;24523:93;:::i;:::-;24641:2;24636:3;24632:12;24625:19;;24431:219;;;:::o;24656:365::-;24798:3;24819:66;24883:1;24878:3;24819:66;:::i;:::-;24812:73;;24894:93;24983:3;24894:93;:::i;:::-;25012:2;25007:3;25003:12;24996:19;;24802:219;;;:::o;25027:365::-;25169:3;25190:66;25254:1;25249:3;25190:66;:::i;:::-;25183:73;;25265:93;25354:3;25265:93;:::i;:::-;25383:2;25378:3;25374:12;25367:19;;25173:219;;;:::o;25398:365::-;25540:3;25561:66;25625:1;25620:3;25561:66;:::i;:::-;25554:73;;25636:93;25725:3;25636:93;:::i;:::-;25754:2;25749:3;25745:12;25738:19;;25544:219;;;:::o;25769:365::-;25911:3;25932:66;25996:1;25991:3;25932:66;:::i;:::-;25925:73;;26007:93;26096:3;26007:93;:::i;:::-;26125:2;26120:3;26116:12;26109:19;;25915:219;;;:::o;26140:365::-;26282:3;26303:66;26367:1;26362:3;26303:66;:::i;:::-;26296:73;;26378:93;26467:3;26378:93;:::i;:::-;26496:2;26491:3;26487:12;26480:19;;26286:219;;;:::o;26511:108::-;26588:24;26606:5;26588:24;:::i;:::-;26583:3;26576:37;26566:53;;:::o;26625:118::-;26712:24;26730:5;26712:24;:::i;:::-;26707:3;26700:37;26690:53;;:::o;26749:435::-;26929:3;26951:95;27042:3;27033:6;26951:95;:::i;:::-;26944:102;;27063:95;27154:3;27145:6;27063:95;:::i;:::-;27056:102;;27175:3;27168:10;;26933:251;;;;;:::o;27190:222::-;27283:4;27321:2;27310:9;27306:18;27298:26;;27334:71;27402:1;27391:9;27387:17;27378:6;27334:71;:::i;:::-;27288:124;;;;:::o;27418:640::-;27613:4;27651:3;27640:9;27636:19;27628:27;;27665:71;27733:1;27722:9;27718:17;27709:6;27665:71;:::i;:::-;27746:72;27814:2;27803:9;27799:18;27790:6;27746:72;:::i;:::-;27828;27896:2;27885:9;27881:18;27872:6;27828:72;:::i;:::-;27947:9;27941:4;27937:20;27932:2;27921:9;27917:18;27910:48;27975:76;28046:4;28037:6;27975:76;:::i;:::-;27967:84;;27618:440;;;;;;;:::o;28064:332::-;28185:4;28223:2;28212:9;28208:18;28200:26;;28236:71;28304:1;28293:9;28289:17;28280:6;28236:71;:::i;:::-;28317:72;28385:2;28374:9;28370:18;28361:6;28317:72;:::i;:::-;28190:206;;;;;:::o;28402:373::-;28545:4;28583:2;28572:9;28568:18;28560:26;;28632:9;28626:4;28622:20;28618:1;28607:9;28603:17;28596:47;28660:108;28763:4;28754:6;28660:108;:::i;:::-;28652:116;;28550:225;;;;:::o;28781:210::-;28868:4;28906:2;28895:9;28891:18;28883:26;;28919:65;28981:1;28970:9;28966:17;28957:6;28919:65;:::i;:::-;28873:118;;;;:::o;28997:313::-;29110:4;29148:2;29137:9;29133:18;29125:26;;29197:9;29191:4;29187:20;29183:1;29172:9;29168:17;29161:47;29225:78;29298:4;29289:6;29225:78;:::i;:::-;29217:86;;29115:195;;;;:::o;29316:419::-;29482:4;29520:2;29509:9;29505:18;29497:26;;29569:9;29563:4;29559:20;29555:1;29544:9;29540:17;29533:47;29597:131;29723:4;29597:131;:::i;:::-;29589:139;;29487:248;;;:::o;29741:419::-;29907:4;29945:2;29934:9;29930:18;29922:26;;29994:9;29988:4;29984:20;29980:1;29969:9;29965:17;29958:47;30022:131;30148:4;30022:131;:::i;:::-;30014:139;;29912:248;;;:::o;30166:419::-;30332:4;30370:2;30359:9;30355:18;30347:26;;30419:9;30413:4;30409:20;30405:1;30394:9;30390:17;30383:47;30447:131;30573:4;30447:131;:::i;:::-;30439:139;;30337:248;;;:::o;30591:419::-;30757:4;30795:2;30784:9;30780:18;30772:26;;30844:9;30838:4;30834:20;30830:1;30819:9;30815:17;30808:47;30872:131;30998:4;30872:131;:::i;:::-;30864:139;;30762:248;;;:::o;31016:419::-;31182:4;31220:2;31209:9;31205:18;31197:26;;31269:9;31263:4;31259:20;31255:1;31244:9;31240:17;31233:47;31297:131;31423:4;31297:131;:::i;:::-;31289:139;;31187:248;;;:::o;31441:419::-;31607:4;31645:2;31634:9;31630:18;31622:26;;31694:9;31688:4;31684:20;31680:1;31669:9;31665:17;31658:47;31722:131;31848:4;31722:131;:::i;:::-;31714:139;;31612:248;;;:::o;31866:419::-;32032:4;32070:2;32059:9;32055:18;32047:26;;32119:9;32113:4;32109:20;32105:1;32094:9;32090:17;32083:47;32147:131;32273:4;32147:131;:::i;:::-;32139:139;;32037:248;;;:::o;32291:419::-;32457:4;32495:2;32484:9;32480:18;32472:26;;32544:9;32538:4;32534:20;32530:1;32519:9;32515:17;32508:47;32572:131;32698:4;32572:131;:::i;:::-;32564:139;;32462:248;;;:::o;32716:419::-;32882:4;32920:2;32909:9;32905:18;32897:26;;32969:9;32963:4;32959:20;32955:1;32944:9;32940:17;32933:47;32997:131;33123:4;32997:131;:::i;:::-;32989:139;;32887:248;;;:::o;33141:419::-;33307:4;33345:2;33334:9;33330:18;33322:26;;33394:9;33388:4;33384:20;33380:1;33369:9;33365:17;33358:47;33422:131;33548:4;33422:131;:::i;:::-;33414:139;;33312:248;;;:::o;33566:419::-;33732:4;33770:2;33759:9;33755:18;33747:26;;33819:9;33813:4;33809:20;33805:1;33794:9;33790:17;33783:47;33847:131;33973:4;33847:131;:::i;:::-;33839:139;;33737:248;;;:::o;33991:419::-;34157:4;34195:2;34184:9;34180:18;34172:26;;34244:9;34238:4;34234:20;34230:1;34219:9;34215:17;34208:47;34272:131;34398:4;34272:131;:::i;:::-;34264:139;;34162:248;;;:::o;34416:419::-;34582:4;34620:2;34609:9;34605:18;34597:26;;34669:9;34663:4;34659:20;34655:1;34644:9;34640:17;34633:47;34697:131;34823:4;34697:131;:::i;:::-;34689:139;;34587:248;;;:::o;34841:419::-;35007:4;35045:2;35034:9;35030:18;35022:26;;35094:9;35088:4;35084:20;35080:1;35069:9;35065:17;35058:47;35122:131;35248:4;35122:131;:::i;:::-;35114:139;;35012:248;;;:::o;35266:419::-;35432:4;35470:2;35459:9;35455:18;35447:26;;35519:9;35513:4;35509:20;35505:1;35494:9;35490:17;35483:47;35547:131;35673:4;35547:131;:::i;:::-;35539:139;;35437:248;;;:::o;35691:419::-;35857:4;35895:2;35884:9;35880:18;35872:26;;35944:9;35938:4;35934:20;35930:1;35919:9;35915:17;35908:47;35972:131;36098:4;35972:131;:::i;:::-;35964:139;;35862:248;;;:::o;36116:419::-;36282:4;36320:2;36309:9;36305:18;36297:26;;36369:9;36363:4;36359:20;36355:1;36344:9;36340:17;36333:47;36397:131;36523:4;36397:131;:::i;:::-;36389:139;;36287:248;;;:::o;36541:419::-;36707:4;36745:2;36734:9;36730:18;36722:26;;36794:9;36788:4;36784:20;36780:1;36769:9;36765:17;36758:47;36822:131;36948:4;36822:131;:::i;:::-;36814:139;;36712:248;;;:::o;36966:419::-;37132:4;37170:2;37159:9;37155:18;37147:26;;37219:9;37213:4;37209:20;37205:1;37194:9;37190:17;37183:47;37247:131;37373:4;37247:131;:::i;:::-;37239:139;;37137:248;;;:::o;37391:419::-;37557:4;37595:2;37584:9;37580:18;37572:26;;37644:9;37638:4;37634:20;37630:1;37619:9;37615:17;37608:47;37672:131;37798:4;37672:131;:::i;:::-;37664:139;;37562:248;;;:::o;37816:419::-;37982:4;38020:2;38009:9;38005:18;37997:26;;38069:9;38063:4;38059:20;38055:1;38044:9;38040:17;38033:47;38097:131;38223:4;38097:131;:::i;:::-;38089:139;;37987:248;;;:::o;38241:419::-;38407:4;38445:2;38434:9;38430:18;38422:26;;38494:9;38488:4;38484:20;38480:1;38469:9;38465:17;38458:47;38522:131;38648:4;38522:131;:::i;:::-;38514:139;;38412:248;;;:::o;38666:419::-;38832:4;38870:2;38859:9;38855:18;38847:26;;38919:9;38913:4;38909:20;38905:1;38894:9;38890:17;38883:47;38947:131;39073:4;38947:131;:::i;:::-;38939:139;;38837:248;;;:::o;39091:419::-;39257:4;39295:2;39284:9;39280:18;39272:26;;39344:9;39338:4;39334:20;39330:1;39319:9;39315:17;39308:47;39372:131;39498:4;39372:131;:::i;:::-;39364:139;;39262:248;;;:::o;39516:419::-;39682:4;39720:2;39709:9;39705:18;39697:26;;39769:9;39763:4;39759:20;39755:1;39744:9;39740:17;39733:47;39797:131;39923:4;39797:131;:::i;:::-;39789:139;;39687:248;;;:::o;39941:419::-;40107:4;40145:2;40134:9;40130:18;40122:26;;40194:9;40188:4;40184:20;40180:1;40169:9;40165:17;40158:47;40222:131;40348:4;40222:131;:::i;:::-;40214:139;;40112:248;;;:::o;40366:419::-;40532:4;40570:2;40559:9;40555:18;40547:26;;40619:9;40613:4;40609:20;40605:1;40594:9;40590:17;40583:47;40647:131;40773:4;40647:131;:::i;:::-;40639:139;;40537:248;;;:::o;40791:419::-;40957:4;40995:2;40984:9;40980:18;40972:26;;41044:9;41038:4;41034:20;41030:1;41019:9;41015:17;41008:47;41072:131;41198:4;41072:131;:::i;:::-;41064:139;;40962:248;;;:::o;41216:419::-;41382:4;41420:2;41409:9;41405:18;41397:26;;41469:9;41463:4;41459:20;41455:1;41444:9;41440:17;41433:47;41497:131;41623:4;41497:131;:::i;:::-;41489:139;;41387:248;;;:::o;41641:419::-;41807:4;41845:2;41834:9;41830:18;41822:26;;41894:9;41888:4;41884:20;41880:1;41869:9;41865:17;41858:47;41922:131;42048:4;41922:131;:::i;:::-;41914:139;;41812:248;;;:::o;42066:419::-;42232:4;42270:2;42259:9;42255:18;42247:26;;42319:9;42313:4;42309:20;42305:1;42294:9;42290:17;42283:47;42347:131;42473:4;42347:131;:::i;:::-;42339:139;;42237:248;;;:::o;42491:419::-;42657:4;42695:2;42684:9;42680:18;42672:26;;42744:9;42738:4;42734:20;42730:1;42719:9;42715:17;42708:47;42772:131;42898:4;42772:131;:::i;:::-;42764:139;;42662:248;;;:::o;42916:419::-;43082:4;43120:2;43109:9;43105:18;43097:26;;43169:9;43163:4;43159:20;43155:1;43144:9;43140:17;43133:47;43197:131;43323:4;43197:131;:::i;:::-;43189:139;;43087:248;;;:::o;43341:419::-;43507:4;43545:2;43534:9;43530:18;43522:26;;43594:9;43588:4;43584:20;43580:1;43569:9;43565:17;43558:47;43622:131;43748:4;43622:131;:::i;:::-;43614:139;;43512:248;;;:::o;43766:419::-;43932:4;43970:2;43959:9;43955:18;43947:26;;44019:9;44013:4;44009:20;44005:1;43994:9;43990:17;43983:47;44047:131;44173:4;44047:131;:::i;:::-;44039:139;;43937:248;;;:::o;44191:419::-;44357:4;44395:2;44384:9;44380:18;44372:26;;44444:9;44438:4;44434:20;44430:1;44419:9;44415:17;44408:47;44472:131;44598:4;44472:131;:::i;:::-;44464:139;;44362:248;;;:::o;44616:419::-;44782:4;44820:2;44809:9;44805:18;44797:26;;44869:9;44863:4;44859:20;44855:1;44844:9;44840:17;44833:47;44897:131;45023:4;44897:131;:::i;:::-;44889:139;;44787:248;;;:::o;45041:419::-;45207:4;45245:2;45234:9;45230:18;45222:26;;45294:9;45288:4;45284:20;45280:1;45269:9;45265:17;45258:47;45322:131;45448:4;45322:131;:::i;:::-;45314:139;;45212:248;;;:::o;45466:419::-;45632:4;45670:2;45659:9;45655:18;45647:26;;45719:9;45713:4;45709:20;45705:1;45694:9;45690:17;45683:47;45747:131;45873:4;45747:131;:::i;:::-;45739:139;;45637:248;;;:::o;45891:222::-;45984:4;46022:2;46011:9;46007:18;45999:26;;46035:71;46103:1;46092:9;46088:17;46079:6;46035:71;:::i;:::-;45989:124;;;;:::o;46119:129::-;46153:6;46180:20;;:::i;:::-;46170:30;;46209:33;46237:4;46229:6;46209:33;:::i;:::-;46160:88;;;:::o;46254:75::-;46287:6;46320:2;46314:9;46304:19;;46294:35;:::o;46335:311::-;46412:4;46502:18;46494:6;46491:30;46488:2;;;46524:18;;:::i;:::-;46488:2;46574:4;46566:6;46562:17;46554:25;;46634:4;46628;46624:15;46616:23;;46417:229;;;:::o;46652:307::-;46713:4;46803:18;46795:6;46792:30;46789:2;;;46825:18;;:::i;:::-;46789:2;46863:29;46885:6;46863:29;:::i;:::-;46855:37;;46947:4;46941;46937:15;46929:23;;46718:241;;;:::o;46965:308::-;47027:4;47117:18;47109:6;47106:30;47103:2;;;47139:18;;:::i;:::-;47103:2;47177:29;47199:6;47177:29;:::i;:::-;47169:37;;47261:4;47255;47251:15;47243:23;;47032:241;;;:::o;47279:132::-;47346:4;47369:3;47361:11;;47399:4;47394:3;47390:14;47382:22;;47351:60;;;:::o;47417:114::-;47484:6;47518:5;47512:12;47502:22;;47491:40;;;:::o;47537:98::-;47588:6;47622:5;47616:12;47606:22;;47595:40;;;:::o;47641:99::-;47693:6;47727:5;47721:12;47711:22;;47700:40;;;:::o;47746:113::-;47816:4;47848;47843:3;47839:14;47831:22;;47821:38;;;:::o;47865:184::-;47964:11;47998:6;47993:3;47986:19;48038:4;48033:3;48029:14;48014:29;;47976:73;;;;:::o;48055:168::-;48138:11;48172:6;48167:3;48160:19;48212:4;48207:3;48203:14;48188:29;;48150:73;;;;:::o;48229:169::-;48313:11;48347:6;48342:3;48335:19;48387:4;48382:3;48378:14;48363:29;;48325:73;;;;:::o;48404:148::-;48506:11;48543:3;48528:18;;48518:34;;;;:::o;48558:305::-;48598:3;48617:20;48635:1;48617:20;:::i;:::-;48612:25;;48651:20;48669:1;48651:20;:::i;:::-;48646:25;;48805:1;48737:66;48733:74;48730:1;48727:81;48724:2;;;48811:18;;:::i;:::-;48724:2;48855:1;48852;48848:9;48841:16;;48602:261;;;;:::o;48869:185::-;48909:1;48926:20;48944:1;48926:20;:::i;:::-;48921:25;;48960:20;48978:1;48960:20;:::i;:::-;48955:25;;48999:1;48989:2;;49004:18;;:::i;:::-;48989:2;49046:1;49043;49039:9;49034:14;;48911:143;;;;:::o;49060:348::-;49100:7;49123:20;49141:1;49123:20;:::i;:::-;49118:25;;49157:20;49175:1;49157:20;:::i;:::-;49152:25;;49345:1;49277:66;49273:74;49270:1;49267:81;49262:1;49255:9;49248:17;49244:105;49241:2;;;49352:18;;:::i;:::-;49241:2;49400:1;49397;49393:9;49382:20;;49108:300;;;;:::o;49414:191::-;49454:4;49474:20;49492:1;49474:20;:::i;:::-;49469:25;;49508:20;49526:1;49508:20;:::i;:::-;49503:25;;49547:1;49544;49541:8;49538:2;;;49552:18;;:::i;:::-;49538:2;49597:1;49594;49590:9;49582:17;;49459:146;;;;:::o;49611:96::-;49648:7;49677:24;49695:5;49677:24;:::i;:::-;49666:35;;49656:51;;;:::o;49713:90::-;49747:7;49790:5;49783:13;49776:21;49765:32;;49755:48;;;:::o;49809:149::-;49845:7;49885:66;49878:5;49874:78;49863:89;;49853:105;;;:::o;49964:126::-;50001:7;50041:42;50034:5;50030:54;50019:65;;50009:81;;;:::o;50096:77::-;50133:7;50162:5;50151:16;;50141:32;;;:::o;50179:154::-;50263:6;50258:3;50253;50240:30;50325:1;50316:6;50311:3;50307:16;50300:27;50230:103;;;:::o;50339:307::-;50407:1;50417:113;50431:6;50428:1;50425:13;50417:113;;;50516:1;50511:3;50507:11;50501:18;50497:1;50492:3;50488:11;50481:39;50453:2;50450:1;50446:10;50441:15;;50417:113;;;50548:6;50545:1;50542:13;50539:2;;;50628:1;50619:6;50614:3;50610:16;50603:27;50539:2;50388:258;;;;:::o;50652:320::-;50696:6;50733:1;50727:4;50723:12;50713:22;;50780:1;50774:4;50770:12;50801:18;50791:2;;50857:4;50849:6;50845:17;50835:27;;50791:2;50919;50911:6;50908:14;50888:18;50885:38;50882:2;;;50938:18;;:::i;:::-;50882:2;50703:269;;;;:::o;50978:281::-;51061:27;51083:4;51061:27;:::i;:::-;51053:6;51049:40;51191:6;51179:10;51176:22;51155:18;51143:10;51140:34;51137:62;51134:2;;;51202:18;;:::i;:::-;51134:2;51242:10;51238:2;51231:22;51021:238;;;:::o;51265:233::-;51304:3;51327:24;51345:5;51327:24;:::i;:::-;51318:33;;51373:66;51366:5;51363:77;51360:2;;;51443:18;;:::i;:::-;51360:2;51490:1;51483:5;51479:13;51472:20;;51308:190;;;:::o;51504:176::-;51536:1;51553:20;51571:1;51553:20;:::i;:::-;51548:25;;51587:20;51605:1;51587:20;:::i;:::-;51582:25;;51626:1;51616:2;;51631:18;;:::i;:::-;51616:2;51672:1;51669;51665:9;51660:14;;51538:142;;;;:::o;51686:180::-;51734:77;51731:1;51724:88;51831:4;51828:1;51821:15;51855:4;51852:1;51845:15;51872:180;51920:77;51917:1;51910:88;52017:4;52014:1;52007:15;52041:4;52038:1;52031:15;52058:180;52106:77;52103:1;52096:88;52203:4;52200:1;52193:15;52227:4;52224:1;52217:15;52244:180;52292:77;52289:1;52282:88;52389:4;52386:1;52379:15;52413:4;52410:1;52403:15;52430:180;52478:77;52475:1;52468:88;52575:4;52572:1;52565:15;52599:4;52596:1;52589:15;52616:180;52664:77;52661:1;52654:88;52761:4;52758:1;52751:15;52785:4;52782:1;52775:15;52802:117;52911:1;52908;52901:12;52925:117;53034:1;53031;53024:12;53048:117;53157:1;53154;53147:12;53171:117;53280:1;53277;53270:12;53294:117;53403:1;53400;53393:12;53417:102;53458:6;53509:2;53505:7;53500:2;53493:5;53489:14;53485:28;53475:38;;53465:54;;;:::o;53525:153::-;53665:5;53661:1;53653:6;53649:14;53642:29;53631:47;:::o;53684:152::-;53824:4;53820:1;53812:6;53808:14;53801:28;53790:46;:::o;53842:153::-;53982:5;53978:1;53970:6;53966:14;53959:29;53948:47;:::o;54001:153::-;54141:5;54137:1;54129:6;54125:14;54118:29;54107:47;:::o;54160:153::-;54300:5;54296:1;54288:6;54284:14;54277:29;54266:47;:::o;54319:230::-;54459:34;54455:1;54447:6;54443:14;54436:58;54528:13;54523:2;54515:6;54511:15;54504:38;54425:124;:::o;54555:153::-;54695:5;54691:1;54683:6;54679:14;54672:29;54661:47;:::o;54714:153::-;54854:5;54850:1;54842:6;54838:14;54831:29;54820:47;:::o;54873:153::-;55013:5;55009:1;55001:6;54997:14;54990:29;54979:47;:::o;55032:153::-;55172:5;55168:1;55160:6;55156:14;55149:29;55138:47;:::o;55191:153::-;55331:5;55327:1;55319:6;55315:14;55308:29;55297:47;:::o;55350:153::-;55490:5;55486:1;55478:6;55474:14;55467:29;55456:47;:::o;55509:152::-;55649:4;55645:1;55637:6;55633:14;55626:28;55615:46;:::o;55667:153::-;55807:5;55803:1;55795:6;55791:14;55784:29;55773:47;:::o;55826:153::-;55966:5;55962:1;55954:6;55950:14;55943:29;55932:47;:::o;55985:152::-;56125:4;56121:1;56113:6;56109:14;56102:28;56091:46;:::o;56143:152::-;56283:4;56279:1;56271:6;56267:14;56260:28;56249:46;:::o;56301:152::-;56441:4;56437:1;56429:6;56425:14;56418:28;56407:46;:::o;56459:153::-;56599:5;56595:1;56587:6;56583:14;56576:29;56565:47;:::o;56618:152::-;56758:4;56754:1;56746:6;56742:14;56735:28;56724:46;:::o;56776:152::-;56916:4;56912:1;56904:6;56900:14;56893:28;56882:46;:::o;56934:153::-;57074:5;57070:1;57062:6;57058:14;57051:29;57040:47;:::o;57093:153::-;57233:5;57229:1;57221:6;57217:14;57210:29;57199:47;:::o;57252:152::-;57392:4;57388:1;57380:6;57376:14;57369:28;57358:46;:::o;57410:153::-;57550:5;57546:1;57538:6;57534:14;57527:29;57516:47;:::o;57569:153::-;57709:5;57705:1;57697:6;57693:14;57686:29;57675:47;:::o;57728:153::-;57868:5;57864:1;57856:6;57852:14;57845:29;57834:47;:::o;57887:153::-;58027:5;58023:1;58015:6;58011:14;58004:29;57993:47;:::o;58046:153::-;58186:5;58182:1;58174:6;58170:14;58163:29;58152:47;:::o;58205:151::-;58345:3;58341:1;58333:6;58329:14;58322:27;58311:45;:::o;58362:160::-;58502:12;58498:1;58490:6;58486:14;58479:36;58468:54;:::o;58528:153::-;58668:5;58664:1;58656:6;58652:14;58645:29;58634:47;:::o;58687:231::-;58827:34;58823:1;58815:6;58811:14;58804:58;58896:14;58891:2;58883:6;58879:15;58872:39;58793:125;:::o;58924:153::-;59064:5;59060:1;59052:6;59048:14;59041:29;59030:47;:::o;59083:153::-;59223:5;59219:1;59211:6;59207:14;59200:29;59189:47;:::o;59242:152::-;59382:4;59378:1;59370:6;59366:14;59359:28;59348:46;:::o;59400:153::-;59540:5;59536:1;59528:6;59524:14;59517:29;59506:47;:::o;59559:153::-;59699:5;59695:1;59687:6;59683:14;59676:29;59665:47;:::o;59718:153::-;59858:5;59854:1;59846:6;59842:14;59835:29;59824:47;:::o;59877:122::-;59950:24;59968:5;59950:24;:::i;:::-;59943:5;59940:35;59930:2;;59989:1;59986;59979:12;59930:2;59920:79;:::o;60005:116::-;60075:21;60090:5;60075:21;:::i;:::-;60068:5;60065:32;60055:2;;60111:1;60108;60101:12;60055:2;60045:76;:::o;60127:120::-;60199:23;60216:5;60199:23;:::i;:::-;60192:5;60189:34;60179:2;;60237:1;60234;60227:12;60179:2;60169:78;:::o;60253:122::-;60326:24;60344:5;60326:24;:::i;:::-;60319:5;60316:35;60306:2;;60365:1;60362;60355:12;60306:2;60296:79;:::o
Swarm Source
ipfs://a0fd16dbb40a408f9a943fae991d567f9716be76b2ce2f07c86f3adeb09d702d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.