Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,211 GEAR
Holders
454
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 GEARLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GEAR
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-18 */ pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } 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); } 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; } 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); } 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); } 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); } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata { using Address for address; string private _name; string private _symbol; address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count = 0; uint length = _owners.length; for( uint i = 0; i < length; ++i ){ if( owner == _owners[i] ){ ++count; } } delete length; return count; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721P.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721P.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _owners.push(to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721P.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721P.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721P.ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract ERC721Enum is ERC721P, IERC721Enumerable { function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) { require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint count; for( uint i; i < _owners.length; ++i ){ if( owner == _owners[i] ){ if( count == index ) return i; else ++count; } } require(false, "ERC721Enum: owner ioob"); } function tokensOfOwner(address owner) public view returns (uint256[] memory) { require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint256 tokenCount = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(owner, i); } return tokenIds; } function totalSupply() public view virtual override returns (uint256) { return _owners.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob"); return index; } } library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } } contract GEAR is ERC721Enum, Ownable, ReentrancyGuard { using Strings for uint256; uint256 public SALE_NFT = 4214; uint256 public GIVEAWAY_NFT = 100; uint256 public OG_NFT = 130; uint256 public MAX_MINT_PRESALE = 3; uint256 public MAX_MINT_CHANCELIST = 3; uint256 public MAX_MINT_SALE = 5; uint256 public MAX_MINT_OG_SALE = 1; uint256 public MAX_BY_MINT_IN_TRANSACTION_PRESALE = 3; uint256 public MAX_BY_MINT_IN_TRANSACTION_CHANCELIST = 3; uint256 public MAX_BY_MINT_IN_TRANSACTION_SALE = 5; uint256 public MAX_BY_MINT_IN_TRANSACTION_OG_SALE = 1; uint256 public PRESALE_PRICE = 0.025 ether; uint256 public CHANCELIST_PRICE = 0.025 ether; uint256 public SALE_PRICE = 0.05 ether; uint256 public SALE_MINTED; uint256 public GIVEAWAY_MINTED; uint256 public OG_MINTED; bool public presaleEnable = false; bool public chanceListEnable = false; bool public saleEnable = false; bool public OGSaleEnable = false; string private baseURI; bytes32 public merkleRoot; bytes32 public merkleRootChancelist; bytes32 public merkleRootOGlist; struct User { uint256 salemint; uint256 presalemint; uint256 chancelistmint; uint256 ogmint; } mapping (address => User) public users; constructor() ERC721P('Gearverse', 'GEAR') {} function _baseURI() internal view virtual returns (string memory) { return baseURI; } function mintGiveawayNFT(address _to, uint256 _count) public onlyOwner nonReentrant{ uint256 totalSupply = totalSupply(); require( GIVEAWAY_MINTED + _count <= GIVEAWAY_NFT, "Max limit" ); for (uint256 i = 0; i < _count; i++) { _safeMint(_to, totalSupply + i); GIVEAWAY_MINTED++; } } function mintPreSaleNFT(uint256 _count, bytes32[] calldata merkleProof) public payable nonReentrant{ bytes32 node = keccak256(abi.encodePacked(msg.sender)); uint256 totalSupply = totalSupply(); require( presaleEnable, "Pre-sale is not enable" ); require( SALE_MINTED + _count <= SALE_NFT, "Exceeds max limit" ); require( MerkleProof.verify(merkleProof, merkleRoot, node), "MerkleDistributor: Invalid proof." ); require( users[msg.sender].presalemint + _count <= MAX_MINT_PRESALE, "Exceeds max mint limit per wallet" ); require( _count <= MAX_BY_MINT_IN_TRANSACTION_PRESALE, "Exceeds max mint limit per txn" ); require( msg.value >= PRESALE_PRICE * _count, "Value below price" ); for (uint256 i = 0; i < _count; i++) { _safeMint(msg.sender, totalSupply + i); SALE_MINTED++; } users[msg.sender].presalemint = users[msg.sender].presalemint + _count; } function mintChanceListNFT(uint256 _count, bytes32[] calldata merkleProof) public payable nonReentrant{ bytes32 node = keccak256(abi.encodePacked(msg.sender)); uint256 totalSupply = totalSupply(); require( chanceListEnable, "chancelist sale is not enable" ); require( SALE_MINTED + _count <= SALE_NFT, "Exceeds max limit" ); require( MerkleProof.verify(merkleProof, merkleRootChancelist, node), "MerkleDistributor: Invalid proof." ); require( users[msg.sender].chancelistmint + _count <= MAX_MINT_CHANCELIST, "Exceeds max mint limit per wallet" ); require( _count <= MAX_BY_MINT_IN_TRANSACTION_CHANCELIST, "Exceeds max mint limit per txn" ); require( msg.value >= CHANCELIST_PRICE * _count, "Value below price" ); for (uint256 i = 0; i < _count; i++) { _safeMint(msg.sender, totalSupply + i); SALE_MINTED++; } users[msg.sender].chancelistmint = users[msg.sender].chancelistmint + _count; } function mintSaleNFT(uint256 _count) public payable nonReentrant{ uint256 totalSupply = totalSupply(); require( saleEnable, "Sale is not enable" ); require( SALE_MINTED + _count <= SALE_NFT, "Exceeds max limit" ); require( users[msg.sender].salemint + _count <= MAX_MINT_SALE, "Exceeds max mint limit per wallet" ); require( _count <= MAX_BY_MINT_IN_TRANSACTION_SALE, "Exceeds max mint limit per txn" ); require( msg.value >= SALE_PRICE * _count, "Value below price" ); for (uint256 i = 0; i < _count; i++) { _safeMint(msg.sender, totalSupply + i); SALE_MINTED++; } users[msg.sender].salemint = users[msg.sender].salemint + _count; } function mintOGNFT(uint256 _count, bytes32[] calldata merkleProof) public nonReentrant{ bytes32 node = keccak256(abi.encodePacked(msg.sender)); uint256 totalSupply = totalSupply(); require( OGSaleEnable, "OG sale is not enable" ); require( OG_MINTED + _count <= OG_NFT, "Exceeds max limit" ); require( MerkleProof.verify(merkleProof, merkleRootOGlist, node), "MerkleDistributor: Invalid proof." ); require( users[msg.sender].ogmint + _count <= MAX_MINT_OG_SALE, "Exceeds max mint limit per wallet" ); require( _count <= MAX_BY_MINT_IN_TRANSACTION_OG_SALE, "Exceeds max mint limit per txn" ); for (uint256 i = 0; i < _count; i++) { _safeMint(msg.sender, totalSupply + i); OG_MINTED++; } users[msg.sender].ogmint = users[msg.sender].ogmint + _count; } function tokenURI(uint256 _tokenId) external view virtual override returns (string memory) { require(_exists(_tokenId), "ERC721Metadata: Nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json")) : ""; } function transferFrom(address _from, address _to, uint256 _tokenId) public override { ERC721P.transferFrom(_from, _to, _tokenId); } function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public override { ERC721P.safeTransferFrom(_from, _to, _tokenId, _data); } function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function updateSalePrice(uint256 newPrice) external onlyOwner { SALE_PRICE = newPrice; } function updatePreSalePrice(uint256 newPrice) external onlyOwner { PRESALE_PRICE = newPrice; } function updateChanceListPrice(uint256 newPrice) external onlyOwner { CHANCELIST_PRICE = newPrice; } function setSaleStatus(bool status) public onlyOwner { require(saleEnable != status); saleEnable = status; } function setPreSaleStatus(bool status) public onlyOwner { require(presaleEnable != status); presaleEnable = status; } function setChanceListStatus(bool status) public onlyOwner { require(chanceListEnable != status); chanceListEnable = status; } function setOGSaleStatus(bool status) public onlyOwner { require(OGSaleEnable != status); OGSaleEnable = status; } function updateSaleMintLimit(uint256 newLimit) external onlyOwner { require(SALE_NFT >= newLimit, "Incorrect value"); MAX_MINT_SALE = newLimit; } function updatePreSaleMintLimit(uint256 newLimit) external onlyOwner { require(SALE_NFT >= newLimit, "Incorrect value"); MAX_MINT_PRESALE = newLimit; } function updateChanceListMintLimit(uint256 newLimit) external onlyOwner { require(SALE_NFT >= newLimit, "Incorrect value"); MAX_MINT_CHANCELIST = newLimit; } function updateOGSaleMintLimit(uint256 newLimit) external onlyOwner { require(OG_NFT >= newLimit, "Incorrect value"); MAX_MINT_OG_SALE = newLimit; } function updateSaleSupply(uint256 newSupply) external onlyOwner { require(newSupply >= SALE_MINTED, "Incorrect value"); SALE_NFT = newSupply; } function updateGiveawaySupply(uint256 newSupply) external onlyOwner { require(newSupply >= GIVEAWAY_MINTED, "Incorrect value"); GIVEAWAY_NFT = newSupply; } function updateOGSupply(uint256 newSupply) external onlyOwner { require(newSupply >= OG_MINTED, "Incorrect value"); OG_NFT = newSupply; } function updateMintLimitPerTransectionPreSale(uint256 newLimit) external onlyOwner { require(SALE_NFT >= newLimit, "Incorrect value"); MAX_BY_MINT_IN_TRANSACTION_PRESALE = newLimit; } function updateMintLimitPerTransectionChanceList(uint256 newLimit) external onlyOwner { require(SALE_NFT >= newLimit, "Incorrect value"); MAX_BY_MINT_IN_TRANSACTION_CHANCELIST = newLimit; } function updateMintLimitPerTransectionSale(uint256 newLimit) external onlyOwner { require(SALE_NFT >= newLimit, "Incorrect value"); MAX_BY_MINT_IN_TRANSACTION_SALE = newLimit; } function updateMintLimitPerTransectionOGSale(uint256 newLimit) external onlyOwner { require(OG_NFT >= newLimit, "Incorrect value"); MAX_BY_MINT_IN_TRANSACTION_OG_SALE = newLimit; } function updateMerkleRoot(bytes32 newRoot) external onlyOwner { merkleRoot = newRoot; } function updateMerkleRootChanceList(bytes32 newRoot) external onlyOwner { merkleRootChancelist = newRoot; } function updateMerkleRootOGList(bytes32 newRoot) external onlyOwner { merkleRootOGlist = newRoot; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CHANCELIST_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GIVEAWAY_MINTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GIVEAWAY_NFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BY_MINT_IN_TRANSACTION_CHANCELIST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BY_MINT_IN_TRANSACTION_OG_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BY_MINT_IN_TRANSACTION_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BY_MINT_IN_TRANSACTION_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_CHANCELIST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_OG_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OGSaleEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OG_MINTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OG_NFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_MINTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_NFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chanceListEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRootChancelist","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRootOGlist","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintChanceListNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintGiveawayNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintOGNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintPreSaleNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintSaleNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleEnable","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":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setChanceListStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setOGSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setPreSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","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":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateChanceListMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updateChanceListPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"updateGiveawaySupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"updateMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"updateMerkleRootChanceList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"updateMerkleRootOGList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateMintLimitPerTransectionChanceList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateMintLimitPerTransectionOGSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateMintLimitPerTransectionPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateMintLimitPerTransectionSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateOGSaleMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"updateOGSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updatePreSaleMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updatePreSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateSaleMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updateSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"updateSaleSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"salemint","type":"uint256"},{"internalType":"uint256","name":"presalemint","type":"uint256"},{"internalType":"uint256","name":"chancelistmint","type":"uint256"},{"internalType":"uint256","name":"ogmint","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611076600755606460085560826009556003600a819055600b8190556005600c8190556001600d819055600e839055600f929092556010556011556658d15e17628000601281905560135566b1a2bc2ec500006014556018805463ffffffff191690553480156200007457600080fd5b50604080518082018252600981526847656172766572736560b81b60208083019182528351808501909452600484526323a2a0a960e11b908401528151919291620000c29160009162000156565b508051620000d890600190602084019062000156565b505050620000f5620000ef6200010060201b60201c565b62000104565b600160065562000239565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200016490620001fc565b90600052602060002090601f016020900481019282620001885760008555620001d3565b82601f10620001a357805160ff1916838001178555620001d3565b82800160010185558215620001d3579182015b82811115620001d3578251825591602001919060010190620001b6565b50620001e1929150620001e5565b5090565b5b80821115620001e15760008155600101620001e6565b6002810460018216806200021157607f821691505b602082108114156200023357634e487b7160e01b600052602260045260246000fd5b50919050565b613ab180620002496000396000f3fe6080604052600436106104265760003560e01c80636352211e11610229578063a22cb4651161012e578063d897833e116100b6578063f176baaa1161007a578063f176baaa14610bac578063f2fde38b14610bcc578063f439733514610bec578063fca4c40114610c0c578063fe4ca84714610c2157610426565b8063d897833e14610b24578063dce051cc14610b44578063e5d81c3a14610b64578063e985e9c514610b77578063ebd3292d14610b9757610426565b8063b4fb600e116100fd578063b4fb600e14610a8f578063b88d4fde14610aaf578063bd5830f414610acf578063c87b56dd14610aef578063ccfb63a414610b0f57610426565b8063a22cb46514610a17578063a87430ba14610a37578063a952686214610a67578063ae5cc17214610a7a57610426565b80637f205a74116101b1578063941e79fc11610180578063941e79fc146109a5578063945242c6146109c557806395d89b41146109d857806398294056146109ed578063995b8ef614610a0257610426565b80637f205a74146109395780638462151c1461094e5780638da5cb5b1461097b57806390b219121461099057610426565b8063711cc2ae116101f8578063711cc2ae146108c5578063715018a6146108da5780637e95eac4146108ef5780637ec0912e146109045780637ec18cf61461092457610426565b80636352211e1461085057806365fccb5214610870578063702bf30c1461089057806370a08231146108a557610426565b80632da04a9c1161032f57806342842e0e116102b75780634f6ccce7116102865780634f6ccce7146107c657806355f804b3146107e65780635d584ef6146108065780635e326b921461081b57806362dc6e211461083b57610426565b806342842e0e1461075c5780634783f0ef1461077c578063497865b31461079c5780634d7cea16146107b157610426565b8063379665bd116102fe578063379665bd146106dd578063386896ef146106fd5780633ccfd60b146107125780633e2e2a8014610727578063423986f21461074757610426565b80632da04a9c146106685780632eb4a7ab146106885780632f745c591461069d578063305004d9146106bd57610426565b806318160ddd116103b25780631dbf3736116103815780631dbf3736146105d357806323b872dd146105e8578063250a650e146106085780632521bcf414610628578063255948e21461064857610426565b806318160ddd1461056957806318e527db1461057e5780631ca81510146105935780631cb8b814146105b357610426565b8063095ea7b3116103f9578063095ea7b3146104d25780630990e534146104f45780630a6a82051461050957806313d0ab9d14610529578063162338231461054957610426565b806301ffc9a71461042b578063068ce6df1461046157806306fdde0314610483578063081812fc146104a5575b600080fd5b34801561043757600080fd5b5061044b610446366004612fb4565b610c36565b60405161045891906131d6565b60405180910390f35b34801561046d57600080fd5b50610476610c63565b60405161045891906131e1565b34801561048f57600080fd5b50610498610c69565b60405161045891906131ea565b3480156104b157600080fd5b506104c56104c0366004612f9c565b610cfb565b6040516104589190613141565b3480156104de57600080fd5b506104f26104ed366004612f59565b610d47565b005b34801561050057600080fd5b50610476610ddf565b34801561051557600080fd5b506104f2610524366004612f9c565b610de5565b34801561053557600080fd5b506104f2610544366004613032565b610e4b565b34801561055557600080fd5b506104f2610564366004612f82565b611046565b34801561057557600080fd5b506104766110bb565b34801561058a57600080fd5b506104766110c1565b34801561059f57600080fd5b506104f26105ae366004612f9c565b6110c7565b3480156105bf57600080fd5b506104f26105ce366004612f9c565b61110b565b3480156105df57600080fd5b50610476611171565b3480156105f457600080fd5b506104f2610603366004612e7c565b611177565b34801561061457600080fd5b506104f2610623366004612f82565b611182565b34801561063457600080fd5b506104f2610643366004612f9c565b6111fd565b34801561065457600080fd5b506104f2610663366004612f9c565b611241565b34801561067457600080fd5b506104f2610683366004612f9c565b6112a7565b34801561069457600080fd5b5061047661130d565b3480156106a957600080fd5b506104766106b8366004612f59565b611313565b3480156106c957600080fd5b506104f26106d8366004612f9c565b6113d6565b3480156106e957600080fd5b506104f26106f8366004612f9c565b61143c565b34801561070957600080fd5b506104766114a2565b34801561071e57600080fd5b506104f26114a8565b34801561073357600080fd5b506104f2610742366004612f9c565b61151a565b34801561075357600080fd5b5061044b611580565b34801561076857600080fd5b506104f2610777366004612e7c565b61158e565b34801561078857600080fd5b506104f2610797366004612f9c565b6115a9565b3480156107a857600080fd5b506104766115ed565b3480156107bd57600080fd5b506104766115f3565b3480156107d257600080fd5b506104766107e1366004612f9c565b6115f9565b3480156107f257600080fd5b506104f2610801366004612fec565b611625565b34801561081257600080fd5b50610476611677565b34801561082757600080fd5b506104f2610836366004612f82565b61167d565b34801561084757600080fd5b506104766116e5565b34801561085c57600080fd5b506104c561086b366004612f9c565b6116eb565b34801561087c57600080fd5b506104f261088b366004612f9c565b611743565b34801561089c57600080fd5b50610476611787565b3480156108b157600080fd5b506104766108c0366004612e30565b61178d565b3480156108d157600080fd5b5061047661182a565b3480156108e657600080fd5b506104f2611830565b3480156108fb57600080fd5b5061047661187b565b34801561091057600080fd5b506104f261091f366004612f9c565b611881565b34801561093057600080fd5b5061044b6118c5565b34801561094557600080fd5b506104766118ce565b34801561095a57600080fd5b5061096e610969366004612e30565b6118d4565b6040516104589190613192565b34801561098757600080fd5b506104c56119ba565b34801561099c57600080fd5b506104766119c9565b3480156109b157600080fd5b506104f26109c0366004612f9c565b6119cf565b6104f26109d3366004613032565b611a35565b3480156109e457600080fd5b50610498611c54565b3480156109f957600080fd5b5061044b611c63565b348015610a0e57600080fd5b50610476611c73565b348015610a2357600080fd5b506104f2610a32366004612f30565b611c79565b348015610a4357600080fd5b50610a57610a52366004612e30565b611d47565b6040516104589493929190613910565b6104f2610a75366004612f9c565b611d6e565b348015610a8657600080fd5b50610476611efb565b348015610a9b57600080fd5b506104f2610aaa366004612f9c565b611f01565b348015610abb57600080fd5b506104f2610aca366004612eb7565b611f67565b348015610adb57600080fd5b506104f2610aea366004612f9c565b611f79565b348015610afb57600080fd5b50610498610b0a366004612f9c565b611fbd565b348015610b1b57600080fd5b50610476612040565b348015610b3057600080fd5b506104f2610b3f366004612f82565b612046565b348015610b5057600080fd5b506104f2610b5f366004612f59565b6120be565b6104f2610b72366004613032565b6121ac565b348015610b8357600080fd5b5061044b610b92366004612e4a565b6123cd565b348015610ba357600080fd5b506104766123fb565b348015610bb857600080fd5b506104f2610bc7366004612f9c565b612401565b348015610bd857600080fd5b506104f2610be7366004612e30565b612467565b348015610bf857600080fd5b506104f2610c07366004612f9c565b6124d8565b348015610c1857600080fd5b5061047661253e565b348015610c2d57600080fd5b5061044b612544565b60006001600160e01b0319821663780e9d6360e01b1480610c5b5750610c5b82612553565b90505b919050565b60095481565b606060008054610c78906139b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca4906139b9565b8015610cf15780601f10610cc657610100808354040283529160200191610cf1565b820191906000526020600020905b815481529060010190602001808311610cd457829003601f168201915b5050505050905090565b6000610d0682612593565b610d2b5760405162461bcd60e51b8152600401610d229061361b565b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6000610d52826116eb565b9050806001600160a01b0316836001600160a01b03161415610d865760405162461bcd60e51b8152600401610d22906137a0565b806001600160a01b0316610d986125eb565b6001600160a01b03161480610db45750610db481610b926125eb565b610dd05760405162461bcd60e51b8152600401610d22906134cb565b610dda83836125ef565b505050565b60155481565b610ded6125eb565b6001600160a01b0316610dfe6119ba565b6001600160a01b031614610e245760405162461bcd60e51b8152600401610d2290613690565b806007541015610e465760405162461bcd60e51b8152600401610d2290613667565b600b55565b60026006541415610e6e5760405162461bcd60e51b8152600401610d22906138aa565b6002600655604051600090610e879033906020016130d7565b6040516020818303038152906040528051906020012090506000610ea96110bb565b6018549091506301000000900460ff16610ed55760405162461bcd60e51b8152600401610d22906138e1565b60095485601754610ee6919061392b565b1115610f045760405162461bcd60e51b8152600401610d22906135bb565b610f4584848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050601c54915085905061265d565b610f615760405162461bcd60e51b8152600401610d229061348a565b600d54336000908152601d6020526040902060030154610f8290879061392b565b1115610fa05760405162461bcd60e51b8152600401610d2290613832565b601154851115610fc25760405162461bcd60e51b8152600401610d2290613388565b60005b8581101561100857610fe033610fdb838561392b565b612718565b60178054906000610ff0836139f4565b91905055508080611000906139f4565b915050610fc5565b50336000908152601d602052604090206003015461102790869061392b565b336000908152601d602052604090206003015550506001600655505050565b61104e6125eb565b6001600160a01b031661105f6119ba565b6001600160a01b0316146110855760405162461bcd60e51b8152600401610d2290613690565b60185460ff61010090910416151581151514156110a157600080fd5b601880549115156101000261ff0019909216919091179055565b60025490565b600b5481565b6110cf6125eb565b6001600160a01b03166110e06119ba565b6001600160a01b0316146111065760405162461bcd60e51b8152600401610d2290613690565b601355565b6111136125eb565b6001600160a01b03166111246119ba565b6001600160a01b03161461114a5760405162461bcd60e51b8152600401610d2290613690565b80600954101561116c5760405162461bcd60e51b8152600401610d2290613667565b601155565b600f5481565b610dda838383612732565b61118a6125eb565b6001600160a01b031661119b6119ba565b6001600160a01b0316146111c15760405162461bcd60e51b8152600401610d2290613690565b60185460ff630100000090910416151581151514156111df57600080fd5b6018805491151563010000000263ff00000019909216919091179055565b6112056125eb565b6001600160a01b03166112166119ba565b6001600160a01b03161461123c5760405162461bcd60e51b8152600401610d2290613690565b601b55565b6112496125eb565b6001600160a01b031661125a6119ba565b6001600160a01b0316146112805760405162461bcd60e51b8152600401610d2290613690565b8060095410156112a25760405162461bcd60e51b8152600401610d2290613667565b600d55565b6112af6125eb565b6001600160a01b03166112c06119ba565b6001600160a01b0316146112e65760405162461bcd60e51b8152600401610d2290613690565b6017548110156113085760405162461bcd60e51b8152600401610d2290613667565b600955565b601a5481565b600061131e8361178d565b821061133c5760405162461bcd60e51b8152600401610d2290613739565b6000805b6002548110156113b7576002818154811061136b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03868116911614156113a7578382141561139b5791506113d09050565b6113a4826139f4565b91505b6113b0816139f4565b9050611340565b5060405162461bcd60e51b8152600401610d2290613739565b92915050565b6113de6125eb565b6001600160a01b03166113ef6119ba565b6001600160a01b0316146114155760405162461bcd60e51b8152600401610d2290613690565b8060075410156114375760405162461bcd60e51b8152600401610d2290613667565b600e55565b6114446125eb565b6001600160a01b03166114556119ba565b6001600160a01b03161461147b5760405162461bcd60e51b8152600401610d2290613690565b60165481101561149d5760405162461bcd60e51b8152600401610d2290613667565b600855565b60175481565b6114b06125eb565b6001600160a01b03166114c16119ba565b6001600160a01b0316146114e75760405162461bcd60e51b8152600401610d2290613690565b6040514790339082156108fc029083906000818181858888f19350505050158015611516573d6000803e3d6000fd5b5050565b6115226125eb565b6001600160a01b03166115336119ba565b6001600160a01b0316146115595760405162461bcd60e51b8152600401610d2290613690565b80600754101561157b5760405162461bcd60e51b8152600401610d2290613667565b601055565b601854610100900460ff1681565b610dda83838360405180602001604052806000815250611f67565b6115b16125eb565b6001600160a01b03166115c26119ba565b6001600160a01b0316146115e85760405162461bcd60e51b8152600401610d2290613690565b601a55565b60085481565b60165481565b60006116036110bb565b82106116215760405162461bcd60e51b8152600401610d2290613769565b5090565b61162d6125eb565b6001600160a01b031661163e6119ba565b6001600160a01b0316146116645760405162461bcd60e51b8152600401610d2290613690565b8051611516906019906020840190612d09565b601c5481565b6116856125eb565b6001600160a01b03166116966119ba565b6001600160a01b0316146116bc5760405162461bcd60e51b8152600401610d2290613690565b60185460ff16151581151514156116d257600080fd5b6018805460ff1916911515919091179055565b60125481565b6000806002838154811061170f57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316905080610c5b5760405162461bcd60e51b8152600401610d2290613572565b61174b6125eb565b6001600160a01b031661175c6119ba565b6001600160a01b0316146117825760405162461bcd60e51b8152600401610d2290613690565b601255565b600d5481565b60006001600160a01b0382166117b55760405162461bcd60e51b8152600401610d2290613528565b600254600090815b8181101561182157600281815481106117e657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03868116911614156118115761180e836139f4565b92505b61181a816139f4565b90506117bd565b50909392505050565b60105481565b6118386125eb565b6001600160a01b03166118496119ba565b6001600160a01b03161461186f5760405162461bcd60e51b8152600401610d2290613690565b611879600061276a565b565b600a5481565b6118896125eb565b6001600160a01b031661189a6119ba565b6001600160a01b0316146118c05760405162461bcd60e51b8152600401610d2290613690565b601455565b60185460ff1681565b60145481565b60606118df8261178d565b6000106118fe5760405162461bcd60e51b8152600401610d2290613739565b60006119098361178d565b905060008167ffffffffffffffff81111561193457634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561195d578160200160208202803683370190505b50905060005b828110156119b2576119758582611313565b82828151811061199557634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806119aa816139f4565b915050611963565b509392505050565b6005546001600160a01b031690565b601b5481565b6119d76125eb565b6001600160a01b03166119e86119ba565b6001600160a01b031614611a0e5760405162461bcd60e51b8152600401610d2290613690565b806007541015611a305760405162461bcd60e51b8152600401610d2290613667565b600a55565b60026006541415611a585760405162461bcd60e51b8152600401610d22906138aa565b6002600655604051600090611a719033906020016130d7565b6040516020818303038152906040528051906020012090506000611a936110bb565b60185490915060ff16611ab85760405162461bcd60e51b8152600401610d229061345a565b60075485601554611ac9919061392b565b1115611ae75760405162461bcd60e51b8152600401610d22906135bb565b611b2884848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050601a54915085905061265d565b611b445760405162461bcd60e51b8152600401610d229061348a565b600a54336000908152601d6020526040902060010154611b6590879061392b565b1115611b835760405162461bcd60e51b8152600401610d2290613832565b600e54851115611ba55760405162461bcd60e51b8152600401610d2290613388565b84601254611bb39190613957565b341015611bd25760405162461bcd60e51b8152600401610d229061370e565b60005b85811015611c1357611beb33610fdb838561392b565b60158054906000611bfb836139f4565b91905055508080611c0b906139f4565b915050611bd5565b50336000908152601d6020526040902060010154611c3290869061392b565b336000908152601d602052604090206001908101919091556006555050505050565b606060018054610c78906139b9565b6018546301000000900460ff1681565b60075481565b611c816125eb565b6001600160a01b0316826001600160a01b03161415611cb25760405162461bcd60e51b8152600401610d2290613351565b8060046000611cbf6125eb565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611d036125eb565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d3b91906131d6565b60405180910390a35050565b601d6020526000908152604090208054600182015460028301546003909301549192909184565b60026006541415611d915760405162461bcd60e51b8152600401610d22906138aa565b60026006556000611da06110bb565b60185490915062010000900460ff16611dcb5760405162461bcd60e51b8152600401610d22906133e2565b60075482601554611ddc919061392b565b1115611dfa5760405162461bcd60e51b8152600401610d22906135bb565b600c54336000908152601d6020526040902054611e1890849061392b565b1115611e365760405162461bcd60e51b8152600401610d2290613832565b601054821115611e585760405162461bcd60e51b8152600401610d2290613388565b81601454611e669190613957565b341015611e855760405162461bcd60e51b8152600401610d229061370e565b60005b82811015611ec657611e9e33610fdb838561392b565b60158054906000611eae836139f4565b91905055508080611ebe906139f4565b915050611e88565b50336000908152601d6020526040902054611ee290839061392b565b336000908152601d602052604090205550506001600655565b600c5481565b611f096125eb565b6001600160a01b0316611f1a6119ba565b6001600160a01b031614611f405760405162461bcd60e51b8152600401610d2290613690565b806007541015611f625760405162461bcd60e51b8152600401610d2290613667565b600f55565b611f73848484846127bc565b50505050565b611f816125eb565b6001600160a01b0316611f926119ba565b6001600160a01b031614611fb85760405162461bcd60e51b8152600401610d2290613690565b601c55565b6060611fc882612593565b611fe45760405162461bcd60e51b8152600401610d22906131fd565b6000611fee6127f5565b9050600081511161200e5760405180602001604052806000815250612039565b8061201884612804565b604051602001612029929190613102565b6040516020818303038152906040525b9392505050565b600e5481565b61204e6125eb565b6001600160a01b031661205f6119ba565b6001600160a01b0316146120855760405162461bcd60e51b8152600401610d2290613690565b60185460ff6201000090910416151581151514156120a257600080fd5b60188054911515620100000262ff000019909216919091179055565b6120c66125eb565b6001600160a01b03166120d76119ba565b6001600160a01b0316146120fd5760405162461bcd60e51b8152600401610d2290613690565b600260065414156121205760405162461bcd60e51b8152600401610d22906138aa565b6002600655600061212f6110bb565b905060085482601654612142919061392b565b11156121605760405162461bcd60e51b8152600401610d22906133bf565b60005b828110156121a15761217984610fdb838561392b565b60168054906000612189836139f4565b91905055508080612199906139f4565b915050612163565b505060016006555050565b600260065414156121cf5760405162461bcd60e51b8152600401610d22906138aa565b60026006556040516000906121e89033906020016130d7565b604051602081830303815290604052805190602001209050600061220a6110bb565b601854909150610100900460ff166122345760405162461bcd60e51b8152600401610d2290613873565b60075485601554612245919061392b565b11156122635760405162461bcd60e51b8152600401610d22906135bb565b6122a484848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050601b54915085905061265d565b6122c05760405162461bcd60e51b8152600401610d229061348a565b600b54336000908152601d60205260409020600201546122e190879061392b565b11156122ff5760405162461bcd60e51b8152600401610d2290613832565b600f548511156123215760405162461bcd60e51b8152600401610d2290613388565b8460135461232f9190613957565b34101561234e5760405162461bcd60e51b8152600401610d229061370e565b60005b8581101561238f5761236733610fdb838561392b565b60158054906000612377836139f4565b91905055508080612387906139f4565b915050612351565b50336000908152601d60205260409020600201546123ae90869061392b565b336000908152601d602052604090206002015550506001600655505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60135481565b6124096125eb565b6001600160a01b031661241a6119ba565b6001600160a01b0316146124405760405162461bcd60e51b8152600401610d2290613690565b8060075410156124625760405162461bcd60e51b8152600401610d2290613667565b600c55565b61246f6125eb565b6001600160a01b03166124806119ba565b6001600160a01b0316146124a65760405162461bcd60e51b8152600401610d2290613690565b6001600160a01b0381166124cc5760405162461bcd60e51b8152600401610d2290613290565b6124d58161276a565b50565b6124e06125eb565b6001600160a01b03166124f16119ba565b6001600160a01b0316146125175760405162461bcd60e51b8152600401610d2290613690565b6015548110156125395760405162461bcd60e51b8152600401610d2290613667565b600755565b60115481565b60185462010000900460ff1681565b60006001600160e01b031982166380ac58cd60e01b148061258457506001600160e01b03198216635b5e139f60e01b145b80610c5b5750610c5b82612927565b60025460009082108015610c5b575060006001600160a01b0316600283815481106125ce57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141592915050565b3390565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612624826116eb565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081815b855181101561270d57600086828151811061268d57634e487b7160e01b600052603260045260246000fd5b602002602001015190508083116126ce5782816040516020016126b19291906130f4565b6040516020818303038152906040528051906020012092506126fa565b80836040516020016126e19291906130f4565b6040516020818303038152906040528051906020012092505b5080612705816139f4565b915050612662565b509092149392505050565b611516828260405180602001604052806000815250612940565b61274361273d6125eb565b82612973565b61275f5760405162461bcd60e51b8152600401610d22906137e1565b610dda8383836129f0565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127cd6127c76125eb565b83612973565b6127e95760405162461bcd60e51b8152600401610d22906137e1565b611f7384848484612ae1565b606060198054610c78906139b9565b60608161282957506040805180820190915260018152600360fc1b6020820152610c5e565b8160005b8115612853578061283d816139f4565b915061284c9050600a83613943565b915061282d565b60008167ffffffffffffffff81111561287c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128a6576020820181803683370190505b5090505b841561291f576128bb600183613976565b91506128c8600a86613a0f565b6128d390603061392b565b60f81b8183815181106128f657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612918600a86613943565b94506128aa565b949350505050565b6001600160e01b031981166301ffc9a760e01b14919050565b61294a8383612b14565b6129576000848484612be8565b610dda5760405162461bcd60e51b8152600401610d229061323e565b600061297e82612593565b61299a5760405162461bcd60e51b8152600401610d229061340e565b60006129a5836116eb565b9050806001600160a01b0316846001600160a01b031614806129e05750836001600160a01b03166129d584610cfb565b6001600160a01b0316145b8061291f575061291f81856123cd565b826001600160a01b0316612a03826116eb565b6001600160a01b031614612a295760405162461bcd60e51b8152600401610d22906136c5565b6001600160a01b038216612a4f5760405162461bcd60e51b8152600401610d229061330d565b612a5a838383610dda565b612a656000826125ef565b8160028281548110612a8757634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b612aec8484846129f0565b612af884848484612be8565b611f735760405162461bcd60e51b8152600401610d229061323e565b6001600160a01b038216612b3a5760405162461bcd60e51b8152600401610d22906135e6565b612b4381612593565b15612b605760405162461bcd60e51b8152600401610d22906132d6565b612b6c60008383610dda565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612bfc846001600160a01b0316612d03565b15612cf857836001600160a01b031663150b7a02612c186125eb565b8786866040518563ffffffff1660e01b8152600401612c3a9493929190613155565b602060405180830381600087803b158015612c5457600080fd5b505af1925050508015612c84575060408051601f3d908101601f19168201909252612c8191810190612fd0565b60015b612cde573d808015612cb2576040519150601f19603f3d011682016040523d82523d6000602084013e612cb7565b606091505b508051612cd65760405162461bcd60e51b8152600401610d229061323e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061291f565b506001949350505050565b3b151590565b828054612d15906139b9565b90600052602060002090601f016020900481019282612d375760008555612d7d565b82601f10612d5057805160ff1916838001178555612d7d565b82800160010185558215612d7d579182015b82811115612d7d578251825591602001919060010190612d62565b506116219291505b808211156116215760008155600101612d85565b600067ffffffffffffffff80841115612db457612db4613a4f565b604051601f8501601f191681016020018281118282101715612dd857612dd8613a4f565b604052848152915081838501861015612df057600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b0381168114610c5e57600080fd5b80358015158114610c5e57600080fd5b600060208284031215612e41578081fd5b61203982612e09565b60008060408385031215612e5c578081fd5b612e6583612e09565b9150612e7360208401612e09565b90509250929050565b600080600060608486031215612e90578081fd5b612e9984612e09565b9250612ea760208501612e09565b9150604084013590509250925092565b60008060008060808587031215612ecc578081fd5b612ed585612e09565b9350612ee360208601612e09565b925060408501359150606085013567ffffffffffffffff811115612f05578182fd5b8501601f81018713612f15578182fd5b612f2487823560208401612d99565b91505092959194509250565b60008060408385031215612f42578182fd5b612f4b83612e09565b9150612e7360208401612e20565b60008060408385031215612f6b578182fd5b612f7483612e09565b946020939093013593505050565b600060208284031215612f93578081fd5b61203982612e20565b600060208284031215612fad578081fd5b5035919050565b600060208284031215612fc5578081fd5b813561203981613a65565b600060208284031215612fe1578081fd5b815161203981613a65565b600060208284031215612ffd578081fd5b813567ffffffffffffffff811115613013578182fd5b8201601f81018413613023578182fd5b61291f84823560208401612d99565b600080600060408486031215613046578283fd5b83359250602084013567ffffffffffffffff80821115613064578384fd5b818601915086601f830112613077578384fd5b813581811115613085578485fd5b8760208083028501011115613098578485fd5b6020830194508093505050509250925092565b600081518084526130c381602086016020860161398d565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b918252602082015260400190565b6000835161311481846020880161398d565b83519083019061312881836020880161398d565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613188908301846130ab565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156131ca578351835292840192918401916001016131ae565b50909695505050505050565b901515815260200190565b90815260200190565b60006020825261203960208301846130ab565b60208082526021908201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656040820152603760f91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601e908201527f45786365656473206d6178206d696e74206c696d6974207065722074786e0000604082015260600190565b60208082526009908201526813585e081b1a5b5a5d60ba1b604082015260600190565b60208082526012908201527153616c65206973206e6f7420656e61626c6560701b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601690820152755072652d73616c65206973206e6f7420656e61626c6560501b604082015260600190565b60208082526021908201527f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f666040820152601760f91b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b602080825260119082015270115e18d959591cc81b585e081b1a5b5a5d607a1b604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252600f908201526e496e636f72726563742076616c756560881b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526011908201527056616c75652062656c6f7720707269636560781b604082015260600190565b60208082526016908201527522a9219b9918a2b73ab69d1037bbb732b91034b7b7b160511b604082015260600190565b60208082526017908201527f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526021908201527f45786365656473206d6178206d696e74206c696d6974207065722077616c6c656040820152601d60fa1b606082015260800190565b6020808252601d908201527f6368616e63656c6973742073616c65206973206e6f7420656e61626c65000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601590820152744f472073616c65206973206e6f7420656e61626c6560581b604082015260600190565b93845260208401929092526040830152606082015260800190565b6000821982111561393e5761393e613a23565b500190565b60008261395257613952613a39565b500490565b600081600019048311821515161561397157613971613a23565b500290565b60008282101561398857613988613a23565b500390565b60005b838110156139a8578181015183820152602001613990565b83811115611f735750506000910152565b6002810460018216806139cd57607f821691505b602082108114156139ee57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613a0857613a08613a23565b5060010190565b600082613a1e57613a1e613a39565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146124d557600080fdfea26469706673582212207b4c6a83b1212267daaa82e17fbeca63859755acef3e05edf3ca17759cb82d3f64736f6c63430008000033
Deployed Bytecode
0x6080604052600436106104265760003560e01c80636352211e11610229578063a22cb4651161012e578063d897833e116100b6578063f176baaa1161007a578063f176baaa14610bac578063f2fde38b14610bcc578063f439733514610bec578063fca4c40114610c0c578063fe4ca84714610c2157610426565b8063d897833e14610b24578063dce051cc14610b44578063e5d81c3a14610b64578063e985e9c514610b77578063ebd3292d14610b9757610426565b8063b4fb600e116100fd578063b4fb600e14610a8f578063b88d4fde14610aaf578063bd5830f414610acf578063c87b56dd14610aef578063ccfb63a414610b0f57610426565b8063a22cb46514610a17578063a87430ba14610a37578063a952686214610a67578063ae5cc17214610a7a57610426565b80637f205a74116101b1578063941e79fc11610180578063941e79fc146109a5578063945242c6146109c557806395d89b41146109d857806398294056146109ed578063995b8ef614610a0257610426565b80637f205a74146109395780638462151c1461094e5780638da5cb5b1461097b57806390b219121461099057610426565b8063711cc2ae116101f8578063711cc2ae146108c5578063715018a6146108da5780637e95eac4146108ef5780637ec0912e146109045780637ec18cf61461092457610426565b80636352211e1461085057806365fccb5214610870578063702bf30c1461089057806370a08231146108a557610426565b80632da04a9c1161032f57806342842e0e116102b75780634f6ccce7116102865780634f6ccce7146107c657806355f804b3146107e65780635d584ef6146108065780635e326b921461081b57806362dc6e211461083b57610426565b806342842e0e1461075c5780634783f0ef1461077c578063497865b31461079c5780634d7cea16146107b157610426565b8063379665bd116102fe578063379665bd146106dd578063386896ef146106fd5780633ccfd60b146107125780633e2e2a8014610727578063423986f21461074757610426565b80632da04a9c146106685780632eb4a7ab146106885780632f745c591461069d578063305004d9146106bd57610426565b806318160ddd116103b25780631dbf3736116103815780631dbf3736146105d357806323b872dd146105e8578063250a650e146106085780632521bcf414610628578063255948e21461064857610426565b806318160ddd1461056957806318e527db1461057e5780631ca81510146105935780631cb8b814146105b357610426565b8063095ea7b3116103f9578063095ea7b3146104d25780630990e534146104f45780630a6a82051461050957806313d0ab9d14610529578063162338231461054957610426565b806301ffc9a71461042b578063068ce6df1461046157806306fdde0314610483578063081812fc146104a5575b600080fd5b34801561043757600080fd5b5061044b610446366004612fb4565b610c36565b60405161045891906131d6565b60405180910390f35b34801561046d57600080fd5b50610476610c63565b60405161045891906131e1565b34801561048f57600080fd5b50610498610c69565b60405161045891906131ea565b3480156104b157600080fd5b506104c56104c0366004612f9c565b610cfb565b6040516104589190613141565b3480156104de57600080fd5b506104f26104ed366004612f59565b610d47565b005b34801561050057600080fd5b50610476610ddf565b34801561051557600080fd5b506104f2610524366004612f9c565b610de5565b34801561053557600080fd5b506104f2610544366004613032565b610e4b565b34801561055557600080fd5b506104f2610564366004612f82565b611046565b34801561057557600080fd5b506104766110bb565b34801561058a57600080fd5b506104766110c1565b34801561059f57600080fd5b506104f26105ae366004612f9c565b6110c7565b3480156105bf57600080fd5b506104f26105ce366004612f9c565b61110b565b3480156105df57600080fd5b50610476611171565b3480156105f457600080fd5b506104f2610603366004612e7c565b611177565b34801561061457600080fd5b506104f2610623366004612f82565b611182565b34801561063457600080fd5b506104f2610643366004612f9c565b6111fd565b34801561065457600080fd5b506104f2610663366004612f9c565b611241565b34801561067457600080fd5b506104f2610683366004612f9c565b6112a7565b34801561069457600080fd5b5061047661130d565b3480156106a957600080fd5b506104766106b8366004612f59565b611313565b3480156106c957600080fd5b506104f26106d8366004612f9c565b6113d6565b3480156106e957600080fd5b506104f26106f8366004612f9c565b61143c565b34801561070957600080fd5b506104766114a2565b34801561071e57600080fd5b506104f26114a8565b34801561073357600080fd5b506104f2610742366004612f9c565b61151a565b34801561075357600080fd5b5061044b611580565b34801561076857600080fd5b506104f2610777366004612e7c565b61158e565b34801561078857600080fd5b506104f2610797366004612f9c565b6115a9565b3480156107a857600080fd5b506104766115ed565b3480156107bd57600080fd5b506104766115f3565b3480156107d257600080fd5b506104766107e1366004612f9c565b6115f9565b3480156107f257600080fd5b506104f2610801366004612fec565b611625565b34801561081257600080fd5b50610476611677565b34801561082757600080fd5b506104f2610836366004612f82565b61167d565b34801561084757600080fd5b506104766116e5565b34801561085c57600080fd5b506104c561086b366004612f9c565b6116eb565b34801561087c57600080fd5b506104f261088b366004612f9c565b611743565b34801561089c57600080fd5b50610476611787565b3480156108b157600080fd5b506104766108c0366004612e30565b61178d565b3480156108d157600080fd5b5061047661182a565b3480156108e657600080fd5b506104f2611830565b3480156108fb57600080fd5b5061047661187b565b34801561091057600080fd5b506104f261091f366004612f9c565b611881565b34801561093057600080fd5b5061044b6118c5565b34801561094557600080fd5b506104766118ce565b34801561095a57600080fd5b5061096e610969366004612e30565b6118d4565b6040516104589190613192565b34801561098757600080fd5b506104c56119ba565b34801561099c57600080fd5b506104766119c9565b3480156109b157600080fd5b506104f26109c0366004612f9c565b6119cf565b6104f26109d3366004613032565b611a35565b3480156109e457600080fd5b50610498611c54565b3480156109f957600080fd5b5061044b611c63565b348015610a0e57600080fd5b50610476611c73565b348015610a2357600080fd5b506104f2610a32366004612f30565b611c79565b348015610a4357600080fd5b50610a57610a52366004612e30565b611d47565b6040516104589493929190613910565b6104f2610a75366004612f9c565b611d6e565b348015610a8657600080fd5b50610476611efb565b348015610a9b57600080fd5b506104f2610aaa366004612f9c565b611f01565b348015610abb57600080fd5b506104f2610aca366004612eb7565b611f67565b348015610adb57600080fd5b506104f2610aea366004612f9c565b611f79565b348015610afb57600080fd5b50610498610b0a366004612f9c565b611fbd565b348015610b1b57600080fd5b50610476612040565b348015610b3057600080fd5b506104f2610b3f366004612f82565b612046565b348015610b5057600080fd5b506104f2610b5f366004612f59565b6120be565b6104f2610b72366004613032565b6121ac565b348015610b8357600080fd5b5061044b610b92366004612e4a565b6123cd565b348015610ba357600080fd5b506104766123fb565b348015610bb857600080fd5b506104f2610bc7366004612f9c565b612401565b348015610bd857600080fd5b506104f2610be7366004612e30565b612467565b348015610bf857600080fd5b506104f2610c07366004612f9c565b6124d8565b348015610c1857600080fd5b5061047661253e565b348015610c2d57600080fd5b5061044b612544565b60006001600160e01b0319821663780e9d6360e01b1480610c5b5750610c5b82612553565b90505b919050565b60095481565b606060008054610c78906139b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca4906139b9565b8015610cf15780601f10610cc657610100808354040283529160200191610cf1565b820191906000526020600020905b815481529060010190602001808311610cd457829003601f168201915b5050505050905090565b6000610d0682612593565b610d2b5760405162461bcd60e51b8152600401610d229061361b565b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6000610d52826116eb565b9050806001600160a01b0316836001600160a01b03161415610d865760405162461bcd60e51b8152600401610d22906137a0565b806001600160a01b0316610d986125eb565b6001600160a01b03161480610db45750610db481610b926125eb565b610dd05760405162461bcd60e51b8152600401610d22906134cb565b610dda83836125ef565b505050565b60155481565b610ded6125eb565b6001600160a01b0316610dfe6119ba565b6001600160a01b031614610e245760405162461bcd60e51b8152600401610d2290613690565b806007541015610e465760405162461bcd60e51b8152600401610d2290613667565b600b55565b60026006541415610e6e5760405162461bcd60e51b8152600401610d22906138aa565b6002600655604051600090610e879033906020016130d7565b6040516020818303038152906040528051906020012090506000610ea96110bb565b6018549091506301000000900460ff16610ed55760405162461bcd60e51b8152600401610d22906138e1565b60095485601754610ee6919061392b565b1115610f045760405162461bcd60e51b8152600401610d22906135bb565b610f4584848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050601c54915085905061265d565b610f615760405162461bcd60e51b8152600401610d229061348a565b600d54336000908152601d6020526040902060030154610f8290879061392b565b1115610fa05760405162461bcd60e51b8152600401610d2290613832565b601154851115610fc25760405162461bcd60e51b8152600401610d2290613388565b60005b8581101561100857610fe033610fdb838561392b565b612718565b60178054906000610ff0836139f4565b91905055508080611000906139f4565b915050610fc5565b50336000908152601d602052604090206003015461102790869061392b565b336000908152601d602052604090206003015550506001600655505050565b61104e6125eb565b6001600160a01b031661105f6119ba565b6001600160a01b0316146110855760405162461bcd60e51b8152600401610d2290613690565b60185460ff61010090910416151581151514156110a157600080fd5b601880549115156101000261ff0019909216919091179055565b60025490565b600b5481565b6110cf6125eb565b6001600160a01b03166110e06119ba565b6001600160a01b0316146111065760405162461bcd60e51b8152600401610d2290613690565b601355565b6111136125eb565b6001600160a01b03166111246119ba565b6001600160a01b03161461114a5760405162461bcd60e51b8152600401610d2290613690565b80600954101561116c5760405162461bcd60e51b8152600401610d2290613667565b601155565b600f5481565b610dda838383612732565b61118a6125eb565b6001600160a01b031661119b6119ba565b6001600160a01b0316146111c15760405162461bcd60e51b8152600401610d2290613690565b60185460ff630100000090910416151581151514156111df57600080fd5b6018805491151563010000000263ff00000019909216919091179055565b6112056125eb565b6001600160a01b03166112166119ba565b6001600160a01b03161461123c5760405162461bcd60e51b8152600401610d2290613690565b601b55565b6112496125eb565b6001600160a01b031661125a6119ba565b6001600160a01b0316146112805760405162461bcd60e51b8152600401610d2290613690565b8060095410156112a25760405162461bcd60e51b8152600401610d2290613667565b600d55565b6112af6125eb565b6001600160a01b03166112c06119ba565b6001600160a01b0316146112e65760405162461bcd60e51b8152600401610d2290613690565b6017548110156113085760405162461bcd60e51b8152600401610d2290613667565b600955565b601a5481565b600061131e8361178d565b821061133c5760405162461bcd60e51b8152600401610d2290613739565b6000805b6002548110156113b7576002818154811061136b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03868116911614156113a7578382141561139b5791506113d09050565b6113a4826139f4565b91505b6113b0816139f4565b9050611340565b5060405162461bcd60e51b8152600401610d2290613739565b92915050565b6113de6125eb565b6001600160a01b03166113ef6119ba565b6001600160a01b0316146114155760405162461bcd60e51b8152600401610d2290613690565b8060075410156114375760405162461bcd60e51b8152600401610d2290613667565b600e55565b6114446125eb565b6001600160a01b03166114556119ba565b6001600160a01b03161461147b5760405162461bcd60e51b8152600401610d2290613690565b60165481101561149d5760405162461bcd60e51b8152600401610d2290613667565b600855565b60175481565b6114b06125eb565b6001600160a01b03166114c16119ba565b6001600160a01b0316146114e75760405162461bcd60e51b8152600401610d2290613690565b6040514790339082156108fc029083906000818181858888f19350505050158015611516573d6000803e3d6000fd5b5050565b6115226125eb565b6001600160a01b03166115336119ba565b6001600160a01b0316146115595760405162461bcd60e51b8152600401610d2290613690565b80600754101561157b5760405162461bcd60e51b8152600401610d2290613667565b601055565b601854610100900460ff1681565b610dda83838360405180602001604052806000815250611f67565b6115b16125eb565b6001600160a01b03166115c26119ba565b6001600160a01b0316146115e85760405162461bcd60e51b8152600401610d2290613690565b601a55565b60085481565b60165481565b60006116036110bb565b82106116215760405162461bcd60e51b8152600401610d2290613769565b5090565b61162d6125eb565b6001600160a01b031661163e6119ba565b6001600160a01b0316146116645760405162461bcd60e51b8152600401610d2290613690565b8051611516906019906020840190612d09565b601c5481565b6116856125eb565b6001600160a01b03166116966119ba565b6001600160a01b0316146116bc5760405162461bcd60e51b8152600401610d2290613690565b60185460ff16151581151514156116d257600080fd5b6018805460ff1916911515919091179055565b60125481565b6000806002838154811061170f57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316905080610c5b5760405162461bcd60e51b8152600401610d2290613572565b61174b6125eb565b6001600160a01b031661175c6119ba565b6001600160a01b0316146117825760405162461bcd60e51b8152600401610d2290613690565b601255565b600d5481565b60006001600160a01b0382166117b55760405162461bcd60e51b8152600401610d2290613528565b600254600090815b8181101561182157600281815481106117e657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03868116911614156118115761180e836139f4565b92505b61181a816139f4565b90506117bd565b50909392505050565b60105481565b6118386125eb565b6001600160a01b03166118496119ba565b6001600160a01b03161461186f5760405162461bcd60e51b8152600401610d2290613690565b611879600061276a565b565b600a5481565b6118896125eb565b6001600160a01b031661189a6119ba565b6001600160a01b0316146118c05760405162461bcd60e51b8152600401610d2290613690565b601455565b60185460ff1681565b60145481565b60606118df8261178d565b6000106118fe5760405162461bcd60e51b8152600401610d2290613739565b60006119098361178d565b905060008167ffffffffffffffff81111561193457634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561195d578160200160208202803683370190505b50905060005b828110156119b2576119758582611313565b82828151811061199557634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806119aa816139f4565b915050611963565b509392505050565b6005546001600160a01b031690565b601b5481565b6119d76125eb565b6001600160a01b03166119e86119ba565b6001600160a01b031614611a0e5760405162461bcd60e51b8152600401610d2290613690565b806007541015611a305760405162461bcd60e51b8152600401610d2290613667565b600a55565b60026006541415611a585760405162461bcd60e51b8152600401610d22906138aa565b6002600655604051600090611a719033906020016130d7565b6040516020818303038152906040528051906020012090506000611a936110bb565b60185490915060ff16611ab85760405162461bcd60e51b8152600401610d229061345a565b60075485601554611ac9919061392b565b1115611ae75760405162461bcd60e51b8152600401610d22906135bb565b611b2884848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050601a54915085905061265d565b611b445760405162461bcd60e51b8152600401610d229061348a565b600a54336000908152601d6020526040902060010154611b6590879061392b565b1115611b835760405162461bcd60e51b8152600401610d2290613832565b600e54851115611ba55760405162461bcd60e51b8152600401610d2290613388565b84601254611bb39190613957565b341015611bd25760405162461bcd60e51b8152600401610d229061370e565b60005b85811015611c1357611beb33610fdb838561392b565b60158054906000611bfb836139f4565b91905055508080611c0b906139f4565b915050611bd5565b50336000908152601d6020526040902060010154611c3290869061392b565b336000908152601d602052604090206001908101919091556006555050505050565b606060018054610c78906139b9565b6018546301000000900460ff1681565b60075481565b611c816125eb565b6001600160a01b0316826001600160a01b03161415611cb25760405162461bcd60e51b8152600401610d2290613351565b8060046000611cbf6125eb565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611d036125eb565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d3b91906131d6565b60405180910390a35050565b601d6020526000908152604090208054600182015460028301546003909301549192909184565b60026006541415611d915760405162461bcd60e51b8152600401610d22906138aa565b60026006556000611da06110bb565b60185490915062010000900460ff16611dcb5760405162461bcd60e51b8152600401610d22906133e2565b60075482601554611ddc919061392b565b1115611dfa5760405162461bcd60e51b8152600401610d22906135bb565b600c54336000908152601d6020526040902054611e1890849061392b565b1115611e365760405162461bcd60e51b8152600401610d2290613832565b601054821115611e585760405162461bcd60e51b8152600401610d2290613388565b81601454611e669190613957565b341015611e855760405162461bcd60e51b8152600401610d229061370e565b60005b82811015611ec657611e9e33610fdb838561392b565b60158054906000611eae836139f4565b91905055508080611ebe906139f4565b915050611e88565b50336000908152601d6020526040902054611ee290839061392b565b336000908152601d602052604090205550506001600655565b600c5481565b611f096125eb565b6001600160a01b0316611f1a6119ba565b6001600160a01b031614611f405760405162461bcd60e51b8152600401610d2290613690565b806007541015611f625760405162461bcd60e51b8152600401610d2290613667565b600f55565b611f73848484846127bc565b50505050565b611f816125eb565b6001600160a01b0316611f926119ba565b6001600160a01b031614611fb85760405162461bcd60e51b8152600401610d2290613690565b601c55565b6060611fc882612593565b611fe45760405162461bcd60e51b8152600401610d22906131fd565b6000611fee6127f5565b9050600081511161200e5760405180602001604052806000815250612039565b8061201884612804565b604051602001612029929190613102565b6040516020818303038152906040525b9392505050565b600e5481565b61204e6125eb565b6001600160a01b031661205f6119ba565b6001600160a01b0316146120855760405162461bcd60e51b8152600401610d2290613690565b60185460ff6201000090910416151581151514156120a257600080fd5b60188054911515620100000262ff000019909216919091179055565b6120c66125eb565b6001600160a01b03166120d76119ba565b6001600160a01b0316146120fd5760405162461bcd60e51b8152600401610d2290613690565b600260065414156121205760405162461bcd60e51b8152600401610d22906138aa565b6002600655600061212f6110bb565b905060085482601654612142919061392b565b11156121605760405162461bcd60e51b8152600401610d22906133bf565b60005b828110156121a15761217984610fdb838561392b565b60168054906000612189836139f4565b91905055508080612199906139f4565b915050612163565b505060016006555050565b600260065414156121cf5760405162461bcd60e51b8152600401610d22906138aa565b60026006556040516000906121e89033906020016130d7565b604051602081830303815290604052805190602001209050600061220a6110bb565b601854909150610100900460ff166122345760405162461bcd60e51b8152600401610d2290613873565b60075485601554612245919061392b565b11156122635760405162461bcd60e51b8152600401610d22906135bb565b6122a484848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050601b54915085905061265d565b6122c05760405162461bcd60e51b8152600401610d229061348a565b600b54336000908152601d60205260409020600201546122e190879061392b565b11156122ff5760405162461bcd60e51b8152600401610d2290613832565b600f548511156123215760405162461bcd60e51b8152600401610d2290613388565b8460135461232f9190613957565b34101561234e5760405162461bcd60e51b8152600401610d229061370e565b60005b8581101561238f5761236733610fdb838561392b565b60158054906000612377836139f4565b91905055508080612387906139f4565b915050612351565b50336000908152601d60205260409020600201546123ae90869061392b565b336000908152601d602052604090206002015550506001600655505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60135481565b6124096125eb565b6001600160a01b031661241a6119ba565b6001600160a01b0316146124405760405162461bcd60e51b8152600401610d2290613690565b8060075410156124625760405162461bcd60e51b8152600401610d2290613667565b600c55565b61246f6125eb565b6001600160a01b03166124806119ba565b6001600160a01b0316146124a65760405162461bcd60e51b8152600401610d2290613690565b6001600160a01b0381166124cc5760405162461bcd60e51b8152600401610d2290613290565b6124d58161276a565b50565b6124e06125eb565b6001600160a01b03166124f16119ba565b6001600160a01b0316146125175760405162461bcd60e51b8152600401610d2290613690565b6015548110156125395760405162461bcd60e51b8152600401610d2290613667565b600755565b60115481565b60185462010000900460ff1681565b60006001600160e01b031982166380ac58cd60e01b148061258457506001600160e01b03198216635b5e139f60e01b145b80610c5b5750610c5b82612927565b60025460009082108015610c5b575060006001600160a01b0316600283815481106125ce57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141592915050565b3390565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612624826116eb565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081815b855181101561270d57600086828151811061268d57634e487b7160e01b600052603260045260246000fd5b602002602001015190508083116126ce5782816040516020016126b19291906130f4565b6040516020818303038152906040528051906020012092506126fa565b80836040516020016126e19291906130f4565b6040516020818303038152906040528051906020012092505b5080612705816139f4565b915050612662565b509092149392505050565b611516828260405180602001604052806000815250612940565b61274361273d6125eb565b82612973565b61275f5760405162461bcd60e51b8152600401610d22906137e1565b610dda8383836129f0565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127cd6127c76125eb565b83612973565b6127e95760405162461bcd60e51b8152600401610d22906137e1565b611f7384848484612ae1565b606060198054610c78906139b9565b60608161282957506040805180820190915260018152600360fc1b6020820152610c5e565b8160005b8115612853578061283d816139f4565b915061284c9050600a83613943565b915061282d565b60008167ffffffffffffffff81111561287c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128a6576020820181803683370190505b5090505b841561291f576128bb600183613976565b91506128c8600a86613a0f565b6128d390603061392b565b60f81b8183815181106128f657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612918600a86613943565b94506128aa565b949350505050565b6001600160e01b031981166301ffc9a760e01b14919050565b61294a8383612b14565b6129576000848484612be8565b610dda5760405162461bcd60e51b8152600401610d229061323e565b600061297e82612593565b61299a5760405162461bcd60e51b8152600401610d229061340e565b60006129a5836116eb565b9050806001600160a01b0316846001600160a01b031614806129e05750836001600160a01b03166129d584610cfb565b6001600160a01b0316145b8061291f575061291f81856123cd565b826001600160a01b0316612a03826116eb565b6001600160a01b031614612a295760405162461bcd60e51b8152600401610d22906136c5565b6001600160a01b038216612a4f5760405162461bcd60e51b8152600401610d229061330d565b612a5a838383610dda565b612a656000826125ef565b8160028281548110612a8757634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b612aec8484846129f0565b612af884848484612be8565b611f735760405162461bcd60e51b8152600401610d229061323e565b6001600160a01b038216612b3a5760405162461bcd60e51b8152600401610d22906135e6565b612b4381612593565b15612b605760405162461bcd60e51b8152600401610d22906132d6565b612b6c60008383610dda565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612bfc846001600160a01b0316612d03565b15612cf857836001600160a01b031663150b7a02612c186125eb565b8786866040518563ffffffff1660e01b8152600401612c3a9493929190613155565b602060405180830381600087803b158015612c5457600080fd5b505af1925050508015612c84575060408051601f3d908101601f19168201909252612c8191810190612fd0565b60015b612cde573d808015612cb2576040519150601f19603f3d011682016040523d82523d6000602084013e612cb7565b606091505b508051612cd65760405162461bcd60e51b8152600401610d229061323e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061291f565b506001949350505050565b3b151590565b828054612d15906139b9565b90600052602060002090601f016020900481019282612d375760008555612d7d565b82601f10612d5057805160ff1916838001178555612d7d565b82800160010185558215612d7d579182015b82811115612d7d578251825591602001919060010190612d62565b506116219291505b808211156116215760008155600101612d85565b600067ffffffffffffffff80841115612db457612db4613a4f565b604051601f8501601f191681016020018281118282101715612dd857612dd8613a4f565b604052848152915081838501861015612df057600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b0381168114610c5e57600080fd5b80358015158114610c5e57600080fd5b600060208284031215612e41578081fd5b61203982612e09565b60008060408385031215612e5c578081fd5b612e6583612e09565b9150612e7360208401612e09565b90509250929050565b600080600060608486031215612e90578081fd5b612e9984612e09565b9250612ea760208501612e09565b9150604084013590509250925092565b60008060008060808587031215612ecc578081fd5b612ed585612e09565b9350612ee360208601612e09565b925060408501359150606085013567ffffffffffffffff811115612f05578182fd5b8501601f81018713612f15578182fd5b612f2487823560208401612d99565b91505092959194509250565b60008060408385031215612f42578182fd5b612f4b83612e09565b9150612e7360208401612e20565b60008060408385031215612f6b578182fd5b612f7483612e09565b946020939093013593505050565b600060208284031215612f93578081fd5b61203982612e20565b600060208284031215612fad578081fd5b5035919050565b600060208284031215612fc5578081fd5b813561203981613a65565b600060208284031215612fe1578081fd5b815161203981613a65565b600060208284031215612ffd578081fd5b813567ffffffffffffffff811115613013578182fd5b8201601f81018413613023578182fd5b61291f84823560208401612d99565b600080600060408486031215613046578283fd5b83359250602084013567ffffffffffffffff80821115613064578384fd5b818601915086601f830112613077578384fd5b813581811115613085578485fd5b8760208083028501011115613098578485fd5b6020830194508093505050509250925092565b600081518084526130c381602086016020860161398d565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b918252602082015260400190565b6000835161311481846020880161398d565b83519083019061312881836020880161398d565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613188908301846130ab565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156131ca578351835292840192918401916001016131ae565b50909695505050505050565b901515815260200190565b90815260200190565b60006020825261203960208301846130ab565b60208082526021908201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656040820152603760f91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601e908201527f45786365656473206d6178206d696e74206c696d6974207065722074786e0000604082015260600190565b60208082526009908201526813585e081b1a5b5a5d60ba1b604082015260600190565b60208082526012908201527153616c65206973206e6f7420656e61626c6560701b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601690820152755072652d73616c65206973206e6f7420656e61626c6560501b604082015260600190565b60208082526021908201527f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f666040820152601760f91b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b602080825260119082015270115e18d959591cc81b585e081b1a5b5a5d607a1b604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252600f908201526e496e636f72726563742076616c756560881b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526011908201527056616c75652062656c6f7720707269636560781b604082015260600190565b60208082526016908201527522a9219b9918a2b73ab69d1037bbb732b91034b7b7b160511b604082015260600190565b60208082526017908201527f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526021908201527f45786365656473206d6178206d696e74206c696d6974207065722077616c6c656040820152601d60fa1b606082015260800190565b6020808252601d908201527f6368616e63656c6973742073616c65206973206e6f7420656e61626c65000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601590820152744f472073616c65206973206e6f7420656e61626c6560581b604082015260600190565b93845260208401929092526040830152606082015260800190565b6000821982111561393e5761393e613a23565b500190565b60008261395257613952613a39565b500490565b600081600019048311821515161561397157613971613a23565b500290565b60008282101561398857613988613a23565b500390565b60005b838110156139a8578181015183820152602001613990565b83811115611f735750506000910152565b6002810460018216806139cd57607f821691505b602082108114156139ee57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613a0857613a08613a23565b5060010190565b600082613a1e57613a1e613a39565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146124d557600080fdfea26469706673582212207b4c6a83b1212267daaa82e17fbeca63859755acef3e05edf3ca17759cb82d3f64736f6c63430008000033
Deployed Bytecode Sourcemap
30986:9711:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28308:225;;;;;;;;;;-1:-1:-1;28308:225:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31153:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22427:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23061:221::-;;;;;;;;;;-1:-1:-1;23061:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22643:412::-;;;;;;;;;;-1:-1:-1;22643:412:0;;;;;:::i;:::-;;:::i;:::-;;31717:26;;;;;;;;;;;;;:::i;38665:177::-;;;;;;;;;;-1:-1:-1;38665:177:0;;;;;:::i;:::-;;:::i;35577:871::-;;;;;;;;;;-1:-1:-1;35577:871:0;;;;;:::i;:::-;;:::i;38029:144::-;;;;;;;;;;-1:-1:-1;38029:144:0;;;;;:::i;:::-;;:::i;29469:110::-;;;;;;;;;;;;;:::i;31226:38::-;;;;;;;;;;;;;:::i;37637:114::-;;;;;;;;;;-1:-1:-1;37637:114:0;;;;;:::i;:::-;;:::i;40162:200::-;;;;;;;;;;-1:-1:-1;40162:200:0;;;;;:::i;:::-;;:::i;31403:56::-;;;;;;;;;;;;;:::i;36819:145::-;;;;;;;;;;-1:-1:-1;36819:145:0;;;;;:::i;:::-;;:::i;38179:132::-;;;;;;;;;;-1:-1:-1;38179:132:0;;;;;:::i;:::-;;:::i;40468:114::-;;;;;;;;;;-1:-1:-1;40468:114:0;;;;;:::i;:::-;;:::i;38848:168::-;;;;;;;;;;-1:-1:-1;38848:168:0;;;;;:::i;:::-;;:::i;39372:157::-;;;;;;;;;;-1:-1:-1;39372:157:0;;;;;:::i;:::-;;:::i;31994:25::-;;;;;;;;;;;;;:::i;28539:500::-;;;;;;;;;;-1:-1:-1;28539:500:0;;;;;:::i;:::-;;:::i;39535:203::-;;;;;;;;;;-1:-1:-1;39535:203:0;;;;;:::i;:::-;;:::i;39191:175::-;;;;;;;;;;-1:-1:-1;39191:175:0;;;;;:::i;:::-;;:::i;31781:24::-;;;;;;;;;;;;;:::i;37158:143::-;;;;;;;;;;;;;:::i;39959:197::-;;;;;;;;;;-1:-1:-1;39959:197:0;;;;;:::i;:::-;;:::i;31852:36::-;;;;;;;;;;;;;:::i;24104:185::-;;;;;;;;;;-1:-1:-1;24104:185:0;;;;;:::i;:::-;;:::i;40368:94::-;;;;;;;;;;-1:-1:-1;40368:94:0;;;;;:::i;:::-;;:::i;31116:33::-;;;;;;;;;;;;;:::i;31747:30::-;;;;;;;;;;;;;:::i;29585:194::-;;;;;;;;;;-1:-1:-1;29585:194:0;;;;;:::i;:::-;;:::i;37307:102::-;;;;;;;;;;-1:-1:-1;37307:102:0;;;;;:::i;:::-;;:::i;32062:31::-;;;;;;;;;;;;;:::i;37888:135::-;;;;;;;;;;-1:-1:-1;37888:135:0;;;;;:::i;:::-;;:::i;31577:42::-;;;;;;;;;;;;;:::i;22182:239::-;;;;;;;;;;-1:-1:-1;22182:239:0;;;;;:::i;:::-;;:::i;37523:108::-;;;;;;;;;;-1:-1:-1;37523:108:0;;;;;:::i;:::-;;:::i;31304:35::-;;;;;;;;;;;;;:::i;21754:422::-;;;;;;;;;;-1:-1:-1;21754:422:0;;;;;:::i;:::-;;:::i;31463:50::-;;;;;;;;;;;;;:::i;1363:94::-;;;;;;;;;;;;;:::i;31187:35::-;;;;;;;;;;;;;:::i;37415:102::-;;;;;;;;;;-1:-1:-1;37415:102:0;;;;;:::i;:::-;;:::i;31815:33::-;;;;;;;;;;;;;:::i;31672:38::-;;;;;;;;;;;;;:::i;29045:418::-;;;;;;;;;;-1:-1:-1;29045:418:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;712:87::-;;;;;;;;;;;;;:::i;32023:35::-;;;;;;;;;;;;;:::i;38488:171::-;;;;;;;;;;-1:-1:-1;38488:171:0;;;;;:::i;:::-;;:::i;32799:984::-;;;;;;:::i;:::-;;:::i;22533:104::-;;;;;;;;;;;;;:::i;31926:32::-;;;;;;;;;;;;;:::i;31082:30::-;;;;;;;;;;;;;:::i;23288:295::-;;;;;;;;;;-1:-1:-1;23288:295:0;;;;;:::i;:::-;;:::i;32220:38::-;;;;;;;;;;-1:-1:-1;32220:38:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;34820:751::-;;;;;;:::i;:::-;;:::i;31268:32::-;;;;;;;;;;;;;:::i;39744:209::-;;;;;;;;;;-1:-1:-1;39744:209:0;;;;;:::i;:::-;;:::i;36972:180::-;;;;;;;;;;-1:-1:-1;36972:180:0;;;;;:::i;:::-;;:::i;40588:106::-;;;;;;;;;;-1:-1:-1;40588:106:0;;;;;:::i;:::-;;:::i;36457:353::-;;;;;;;;;;-1:-1:-1;36457:353:0;;;;;:::i;:::-;;:::i;31346:53::-;;;;;;;;;;;;;:::i;37757:125::-;;;;;;;;;;-1:-1:-1;37757:125:0;;;;;:::i;:::-;;:::i;32426:367::-;;;;;;;;;;-1:-1:-1;32426:367:0;;;;;:::i;:::-;;:::i;33789:1025::-;;;;;;:::i;:::-;;:::i;23589:164::-;;;;;;;;;;-1:-1:-1;23589:164:0;;;;;:::i;:::-;;:::i;31623:45::-;;;;;;;;;;;;;:::i;38317:165::-;;;;;;;;;;-1:-1:-1;38317:165:0;;;;;:::i;:::-;;:::i;1612:192::-;;;;;;;;;;-1:-1:-1;1612:192:0;;;;;:::i;:::-;;:::i;39022:163::-;;;;;;;;;;-1:-1:-1;39022:163:0;;;;;:::i;:::-;;:::i;31517:53::-;;;;;;;;;;;;;:::i;31892:30::-;;;;;;;;;;;;;:::i;28308:225::-;28411:4;-1:-1:-1;;;;;;28435:50:0;;-1:-1:-1;;;28435:50:0;;:90;;;28489:36;28513:11;28489:23;:36::i;:::-;28428:97;;28308:225;;;;:::o;31153:27::-;;;;:::o;22427:100::-;22481:13;22514:5;22507:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22427:100;:::o;23061:221::-;23137:7;23165:16;23173:7;23165;:16::i;:::-;23157:73;;;;-1:-1:-1;;;23157:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;23250:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23250:24:0;;23061:221::o;22643:412::-;22724:13;22740:24;22756:7;22740:15;:24::i;:::-;22724:40;;22789:5;-1:-1:-1;;;;;22783:11:0;:2;-1:-1:-1;;;;;22783:11:0;;;22775:57;;;;-1:-1:-1;;;22775:57:0;;;;;;;:::i;:::-;22883:5;-1:-1:-1;;;;;22867:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;22867:21:0;;:62;;;;22892:37;22909:5;22916:12;:10;:12::i;22892:37::-;22845:168;;;;-1:-1:-1;;;22845:168:0;;;;;;;:::i;:::-;23026:21;23035:2;23039:7;23026:8;:21::i;:::-;22643:412;;;:::o;31717:26::-;;;;:::o;38665:177::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;38765:8:::1;38753;;:20;;38745:48;;;;-1:-1:-1::0;;;38745:48:0::1;;;;;;;:::i;:::-;38804:19;:30:::0;38665:177::o;35577:871::-;4823:1;5419:7;;:19;;5411:63;;;;-1:-1:-1;;;5411:63:0;;;;;;;:::i;:::-;4823:1;5552:7;:18;35693:28:::1;::::0;35668:12:::1;::::0;35693:28:::1;::::0;35710:10:::1;::::0;35693:28:::1;;;:::i;:::-;;;;;;;;;;;;;35683:39;;;;;;35668:54;;35727:19;35749:13;:11;:13::i;:::-;35780:12;::::0;35727:35;;-1:-1:-1;35780:12:0;;::::1;;;35767:60;;;;-1:-1:-1::0;;;35767:60:0::1;;;;;;;:::i;:::-;35873:6;;35863;35851:9;;:18;;;;:::i;:::-;:28;;35838:72;;;;-1:-1:-1::0;;;35838:72:0::1;;;;;;;:::i;:::-;35928:55;35947:11;;35928:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;35960:16:0::1;::::0;;-1:-1:-1;35978:4:0;;-1:-1:-1;35928:18:0::1;:55::i;:::-;35915:115;;;;-1:-1:-1::0;;;35915:115:0::1;;;;;;;:::i;:::-;36085:16;::::0;36054:10:::1;36048:17;::::0;;;:5:::1;:17;::::0;;;;:24:::1;;::::0;:33:::1;::::0;36075:6;;36048:33:::1;:::i;:::-;:53;;36035:112;;;;-1:-1:-1::0;;;36035:112:0::1;;;;;;;:::i;:::-;36175:34;;36165:6;:44;;36152:100;;;;-1:-1:-1::0;;;36152:100:0::1;;;;;;;:::i;:::-;36262:9;36257:119;36281:6;36277:1;:10;36257:119;;;36309:38;36319:10;36331:15;36345:1:::0;36331:11;:15:::1;:::i;:::-;36309:9;:38::i;:::-;36353:9;:11:::0;;;:9:::1;:11;::::0;::::1;:::i;:::-;;;;;;36289:3;;;;;:::i;:::-;;;;36257:119;;;-1:-1:-1::0;36413:10:0::1;36407:17;::::0;;;:5:::1;:17;::::0;;;;:24:::1;;::::0;:33:::1;::::0;36434:6;;36407:33:::1;:::i;:::-;36386:10;36380:17;::::0;;;:5:::1;:17;::::0;;;;:24:::1;;:60:::0;-1:-1:-1;;4779:1:0;5731:7;:22;-1:-1:-1;;;35577:871:0:o;38029:144::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;38103:16:::1;::::0;::::1;;::::0;;::::1;;:26;;::::0;::::1;;;;38095:35;;;::::0;::::1;;38140:16;:25:::0;;;::::1;;;;-1:-1:-1::0;;38140:25:0;;::::1;::::0;;;::::1;::::0;;38029:144::o;29469:110::-;29557:7;:14;29469:110;:::o;31226:38::-;;;;:::o;37637:114::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;37716:16:::1;:27:::0;37637:114::o;40162:200::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;40270:8:::1;40260:6;;:18;;40252:46;;;;-1:-1:-1::0;;;40252:46:0::1;;;;;;;:::i;:::-;40309:34;:45:::0;40162:200::o;31403:56::-;;;;:::o;36819:145::-;36914:42;36935:5;36942:3;36947:8;36914:20;:42::i;38179:132::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;38249:12:::1;::::0;::::1;::::0;;;::::1;;:22;;::::0;::::1;;;;38241:31;;;::::0;::::1;;38282:12;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;38282:21:0;;::::1;::::0;;;::::1;::::0;;38179:132::o;40468:114::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;40547:20:::1;:30:::0;40468:114::o;38848:168::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;38942:8:::1;38932:6;;:18;;38924:46;;;;-1:-1:-1::0;;;38924:46:0::1;;;;;;;:::i;:::-;38981:16;:27:::0;38848:168::o;39372:157::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;39463:9:::1;;39450;:22;;39442:50;;;;-1:-1:-1::0;;;39442:50:0::1;;;;;;;:::i;:::-;39503:6;:18:::0;39372:157::o;31994:25::-;;;;:::o;28539:500::-;28628:15;28672:24;28690:5;28672:17;:24::i;:::-;28664:5;:32;28656:67;;;;-1:-1:-1;;;28656:67:0;;;;;;;:::i;:::-;28734:10;28760:6;28755:226;28772:7;:14;28768:18;;28755:226;;;28821:7;28829:1;28821:10;;;;;;-1:-1:-1;;;28821:10:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28812:19:0;;;28821:10;;28812:19;28808:162;;;28865:5;28856;:14;28852:102;;;28901:1;-1:-1:-1;28894:8:0;;-1:-1:-1;28894:8:0;28852:102;28947:7;;;:::i;:::-;;;28852:102;28788:3;;;:::i;:::-;;;28755:226;;;-1:-1:-1;28991:40:0;;-1:-1:-1;;;28991:40:0;;;;;;;:::i;28539:500::-;;;;;:::o;39535:203::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;39646:8:::1;39634;;:20;;39626:48;;;;-1:-1:-1::0;;;39626:48:0::1;;;;;;;:::i;:::-;39685:34;:45:::0;39535:203::o;39191:175::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;39288:15:::1;;39275:9;:28;;39267:56;;;;-1:-1:-1::0;;;39267:56:0::1;;;;;;;:::i;:::-;39334:12;:24:::0;39191:175::o;31781:24::-;;;;:::o;37158:143::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;37256:37:::1;::::0;37224:21:::1;::::0;37264:10:::1;::::0;37256:37;::::1;;;::::0;37224:21;;37206:15:::1;37256:37:::0;37206:15;37256:37;37224:21;37264:10;37256:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;1003:1;37158:143::o:0;39959:197::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;40067:8:::1;40055;;:20;;40047:48;;;;-1:-1:-1::0;;;40047:48:0::1;;;;;;;:::i;:::-;40106:31;:42:::0;39959:197::o;31852:36::-;;;;;;;;;:::o;24104:185::-;24242:39;24259:4;24265:2;24269:7;24242:39;;;;;;;;;;;;:16;:39::i;40368:94::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;40437:10:::1;:20:::0;40368:94::o;31116:33::-;;;;:::o;31747:30::-;;;;:::o;29585:194::-;29660:7;29696:24;:22;:24::i;:::-;29688:5;:32;29680:68;;;;-1:-1:-1;;;29680:68:0;;;;;;;:::i;:::-;-1:-1:-1;29766:5:0;29585:194::o;37307:102::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;37381:20;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;32062:31::-:0;;;;:::o;37888:135::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;37959:13:::1;::::0;::::1;;:23;;::::0;::::1;;;;37951:32;;;::::0;::::1;;37993:13;:22:::0;;-1:-1:-1;;37993:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37888:135::o;31577:42::-;;;;:::o;22182:239::-;22254:7;22274:13;22290:7;22298;22290:16;;;;;;-1:-1:-1;;;22290:16:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22290:16:0;;-1:-1:-1;22325:19:0;22317:73;;;;-1:-1:-1;;;22317:73:0;;;;;;;:::i;37523:108::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;37599:13:::1;:24:::0;37523:108::o;31304:35::-;;;;:::o;21754:422::-;21826:7;-1:-1:-1;;;;;21854:19:0;;21846:74;;;;-1:-1:-1;;;21846:74:0;;;;;;;:::i;:::-;21970:7;:14;21931:10;;;21995:127;22016:6;22012:1;:10;21995:127;;;22057:7;22065:1;22057:10;;;;;;-1:-1:-1;;;22057:10:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22048:19:0;;;22057:10;;22048:19;22044:67;;;22088:7;;;:::i;:::-;;;22044:67;22024:3;;;:::i;:::-;;;21995:127;;;-1:-1:-1;22163:5:0;;21754:422;-1:-1:-1;;;21754:422:0:o;31463:50::-;;;;:::o;1363:94::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;1428:21:::1;1446:1;1428:9;:21::i;:::-;1363:94::o:0;31187:35::-;;;;:::o;37415:102::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;37488:10:::1;:21:::0;37415:102::o;31815:33::-;;;;;;:::o;31672:38::-;;;;:::o;29045:418::-;29104:16;29145:24;29163:5;29145:17;:24::i;:::-;29141:1;:28;29133:63;;;;-1:-1:-1;;;29133:63:0;;;;;;;:::i;:::-;29207:18;29228:16;29238:5;29228:9;:16::i;:::-;29207:37;;29255:25;29297:10;29283:25;;;;;;-1:-1:-1;;;29283:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29283:25:0;;29255:53;;29324:9;29319:111;29343:10;29339:1;:14;29319:111;;;29389:29;29409:5;29416:1;29389:19;:29::i;:::-;29375:8;29384:1;29375:11;;;;;;-1:-1:-1;;;29375:11:0;;;;;;;;;;;;;;;;;;:43;29355:3;;;;:::i;:::-;;;;29319:111;;;-1:-1:-1;29447:8:0;29045:418;-1:-1:-1;;;29045:418:0:o;712:87::-;785:6;;-1:-1:-1;;;;;785:6:0;712:87;:::o;32023:35::-;;;;:::o;38488:171::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;38585:8:::1;38573;;:20;;38565:48;;;;-1:-1:-1::0;;;38565:48:0::1;;;;;;;:::i;:::-;38624:16;:27:::0;38488:171::o;32799:984::-;4823:1;5419:7;;:19;;5411:63;;;;-1:-1:-1;;;5411:63:0;;;;;;;:::i;:::-;4823:1;5552:7;:18;32928:28:::1;::::0;32903:12:::1;::::0;32928:28:::1;::::0;32945:10:::1;::::0;32928:28:::1;;;:::i;:::-;;;;;;;;;;;;;32918:39;;;;;;32903:54;;32962:19;32984:13;:11;:13::i;:::-;33015;::::0;32962:35;;-1:-1:-1;33015:13:0::1;;33002:62;;;;-1:-1:-1::0;;;33002:62:0::1;;;;;;;:::i;:::-;33112:8;;33102:6;33088:11;;:20;;;;:::i;:::-;:32;;33075:76;;;;-1:-1:-1::0;;;33075:76:0::1;;;;;;;:::i;:::-;33169:49;33188:11;;33169:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;33201:10:0::1;::::0;;-1:-1:-1;33213:4:0;;-1:-1:-1;33169:18:0::1;:49::i;:::-;33156:109;;;;-1:-1:-1::0;;;33156:109:0::1;;;;;;;:::i;:::-;33325:16;::::0;33289:10:::1;33283:17;::::0;;;:5:::1;:17;::::0;;;;:29:::1;;::::0;:38:::1;::::0;33315:6;;33283:38:::1;:::i;:::-;:58;;33270:117;;;;-1:-1:-1::0;;;33270:117:0::1;;;;;;;:::i;:::-;33415:34;;33405:6;:44;;33392:100;;;;-1:-1:-1::0;;;33392:100:0::1;;;;;;;:::i;:::-;33539:6;33523:13;;:22;;;;:::i;:::-;33510:9;:35;;33497:78;;;;-1:-1:-1::0;;;33497:78:0::1;;;;;;;:::i;:::-;33585:9;33580:121;33604:6;33600:1;:10;33580:121;;;33632:38;33642:10;33654:15;33668:1:::0;33654:11;:15:::1;:::i;33632:38::-;33676:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;;;;;;33612:3;;;;;:::i;:::-;;;;33580:121;;;-1:-1:-1::0;33743:10:0::1;33737:17;::::0;;;:5:::1;:17;::::0;;;;:29:::1;;::::0;:38:::1;::::0;33769:6;;33737:38:::1;:::i;:::-;33711:10;33705:17;::::0;;;:5:::1;:17;::::0;;;;:29:::1;::::0;;::::1;:70:::0;;;;5731:7;:22;-1:-1:-1;;;;;32799:984:0:o;22533:104::-;22589:13;22622:7;22615:14;;;;;:::i;31926:32::-;;;;;;;;;:::o;31082:30::-;;;;:::o;23288:295::-;23403:12;:10;:12::i;:::-;-1:-1:-1;;;;;23391:24:0;:8;-1:-1:-1;;;;;23391:24:0;;;23383:62;;;;-1:-1:-1;;;23383:62:0;;;;;;;:::i;:::-;23503:8;23458:18;:32;23477:12;:10;:12::i;:::-;-1:-1:-1;;;;;23458:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;23458:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;23458:53:0;;;;;;;;;;;23542:12;:10;:12::i;:::-;-1:-1:-1;;;;;23527:48:0;;23566:8;23527:48;;;;;;:::i;:::-;;;;;;;;23288:295;;:::o;32220:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34820:751::-;4823:1;5419:7;;:19;;5411:63;;;;-1:-1:-1;;;5411:63:0;;;;;;;:::i;:::-;4823:1;5552:7;:18;34889:19:::1;34911:13;:11;:13::i;:::-;34942:10;::::0;34889:35;;-1:-1:-1;34942:10:0;;::::1;;;34929:55;;;;-1:-1:-1::0;;;34929:55:0::1;;;;;;;:::i;:::-;35032:8;;35022:6;35008:11;;:20;;;;:::i;:::-;:32;;34995:76;;;;-1:-1:-1::0;;;34995:76:0::1;;;;;;;:::i;:::-;35128:13;::::0;35095:10:::1;35089:17;::::0;;;:5:::1;:17;::::0;;;;:26;:35:::1;::::0;35118:6;;35089:35:::1;:::i;:::-;:52;;35076:111;;;;-1:-1:-1::0;;;35076:111:0::1;;;;;;;:::i;:::-;35215:31;;35205:6;:41;;35192:97;;;;-1:-1:-1::0;;;35192:97:0::1;;;;;;;:::i;:::-;35333:6;35320:10;;:19;;;;:::i;:::-;35307:9;:32;;35294:75;;;;-1:-1:-1::0;;;35294:75:0::1;;;;;;;:::i;:::-;35379:9;35374:121;35398:6;35394:1;:10;35374:121;;;35426:38;35436:10;35448:15;35462:1:::0;35448:11;:15:::1;:::i;35426:38::-;35470:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;;;;;;35406:3;;;;;:::i;:::-;;;;35374:121;;;-1:-1:-1::0;35534:10:0::1;35528:17;::::0;;;:5:::1;:17;::::0;;;;:26;:35:::1;::::0;35557:6;;35528:35:::1;:::i;:::-;35505:10;35499:17;::::0;;;:5:::1;:17;::::0;;;;:64;-1:-1:-1;;4779:1:0;5731:7;:22;34820:751::o;31268:32::-;;;;:::o;39744:209::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;39858:8:::1;39846;;:20;;39838:48;;;;-1:-1:-1::0;;;39838:48:0::1;;;;;;;:::i;:::-;39897:37;:48:::0;39744:209::o;36972:180::-;37091:53;37116:5;37123:3;37128:8;37138:5;37091:24;:53::i;:::-;36972:180;;;;:::o;40588:106::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;40663:16:::1;:26:::0;40588:106::o;36457:353::-;36533:13;36567:17;36575:8;36567:7;:17::i;:::-;36559:63;;;;-1:-1:-1;;;36559:63:0;;;;;;;:::i;:::-;36633:28;36664:10;:8;:10::i;:::-;36633:41;;36723:1;36698:14;36692:28;:32;:110;;;;;;;;;;;;;;;;;36751:14;36767:19;:8;:17;:19::i;:::-;36734:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36692:110;36685:117;36457:353;-1:-1:-1;;;36457:353:0:o;31346:53::-;;;;:::o;37757:125::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;37829:10:::1;::::0;::::1;::::0;;;::::1;;:20;;::::0;::::1;;;;37821:29;;;::::0;::::1;;37855:10;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;37855:19:0;;::::1;::::0;;;::::1;::::0;;37757:125::o;32426:367::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;4823:1:::1;5419:7;;:19;;5411:63;;;;-1:-1:-1::0;;;5411:63:0::1;;;;;;;:::i;:::-;4823:1;5552:7;:18:::0;32517:19:::2;32539:13;:11;:13::i;:::-;32517:35;;32613:12;;32603:6;32585:15;;:24;;;;:::i;:::-;:40;;32563:100;;;;-1:-1:-1::0;;;32563:100:0::2;;;;;;;:::i;:::-;32673:9;32668:118;32692:6;32688:1;:10;32668:118;;;32720:31;32730:3:::0;32735:15:::2;32749:1:::0;32735:11;:15:::2;:::i;32720:31::-;32757:15;:17:::0;;;:15:::2;:17;::::0;::::2;:::i;:::-;;;;;;32700:3;;;;;:::i;:::-;;;;32668:118;;;-1:-1:-1::0;;4779:1:0::1;5731:7;:22:::0;-1:-1:-1;;32426:367:0:o;33789:1025::-;4823:1;5419:7;;:19;;5411:63;;;;-1:-1:-1;;;5411:63:0;;;;;;;:::i;:::-;4823:1;5552:7;:18;33921:28:::1;::::0;33896:12:::1;::::0;33921:28:::1;::::0;33938:10:::1;::::0;33921:28:::1;;;:::i;:::-;;;;;;;;;;;;;33911:39;;;;;;33896:54;;33955:19;33977:13;:11;:13::i;:::-;34008:16;::::0;33955:35;;-1:-1:-1;34008:16:0::1;::::0;::::1;;;33995:72;;;;-1:-1:-1::0;;;33995:72:0::1;;;;;;;:::i;:::-;34115:8;;34105:6;34091:11;;:20;;;;:::i;:::-;:32;;34078:76;;;;-1:-1:-1::0;;;34078:76:0::1;;;;;;;:::i;:::-;34172:59;34191:11;;34172:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;34204:20:0::1;::::0;;-1:-1:-1;34226:4:0;;-1:-1:-1;34172:18:0::1;:59::i;:::-;34159:119;;;;-1:-1:-1::0;;;34159:119:0::1;;;;;;;:::i;:::-;34341:19;::::0;34302:10:::1;34296:17;::::0;;;:5:::1;:17;::::0;;;;:32:::1;;::::0;:41:::1;::::0;34331:6;;34296:41:::1;:::i;:::-;:64;;34283:123;;;;-1:-1:-1::0;;;34283:123:0::1;;;;;;;:::i;:::-;34434:37;;34424:6;:47;;34411:103;;;;-1:-1:-1::0;;;34411:103:0::1;;;;;;;:::i;:::-;34564:6;34545:16;;:25;;;;:::i;:::-;34532:9;:38;;34519:81;;;;-1:-1:-1::0;;;34519:81:0::1;;;;;;;:::i;:::-;34610:9;34605:121;34629:6;34625:1;:10;34605:121;;;34657:38;34667:10;34679:15;34693:1:::0;34679:11;:15:::1;:::i;34657:38::-;34701:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;;;;;;34637:3;;;;;:::i;:::-;;;;34605:121;;;-1:-1:-1::0;34771:10:0::1;34765:17;::::0;;;:5:::1;:17;::::0;;;;:32:::1;;::::0;:41:::1;::::0;34800:6;;34765:41:::1;:::i;:::-;34736:10;34730:17;::::0;;;:5:::1;:17;::::0;;;;:32:::1;;:76:::0;-1:-1:-1;;4779:1:0;5731:7;:22;-1:-1:-1;;;33789:1025:0:o;23589:164::-;-1:-1:-1;;;;;23710:25:0;;;23686:4;23710:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23589:164::o;31623:45::-;;;;:::o;38317:165::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;38411:8:::1;38399;;:20;;38391:48;;;;-1:-1:-1::0;;;38391:48:0::1;;;;;;;:::i;:::-;38450:13;:24:::0;38317:165::o;1612:192::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1701:22:0;::::1;1693:73;;;;-1:-1:-1::0;;;1693:73:0::1;;;;;;;:::i;:::-;1777:19;1787:8;1777:9;:19::i;:::-;1612:192:::0;:::o;39022:163::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;39115:11:::1;;39102:9;:24;;39094:52;;;;-1:-1:-1::0;;;39094:52:0::1;;;;;;;:::i;:::-;39157:8;:20:::0;39022:163::o;31517:53::-;;;;:::o;31892:30::-;;;;;;;;;:::o;21455:293::-;21557:4;-1:-1:-1;;;;;;21590:40:0;;-1:-1:-1;;;21590:40:0;;:101;;-1:-1:-1;;;;;;;21643:48:0;;-1:-1:-1;;;21643:48:0;21590:101;:150;;;;21704:36;21728:11;21704:23;:36::i;24950:155::-;25049:7;:14;25015:4;;25039:24;;:58;;;;;25095:1;-1:-1:-1;;;;;25067:30:0;:7;25075;25067:16;;;;;;-1:-1:-1;;;25067:16:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25067:16:0;:30;;;24950:155;-1:-1:-1;;24950:155:0:o;95:98::-;175:10;95:98;:::o;27123:175::-;27198:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;27198:29:0;-1:-1:-1;;;;;27198:29:0;;;;;;;;:24;;27252;27198;27252:15;:24::i;:::-;-1:-1:-1;;;;;27243:47:0;;;;;;;;;;;27123:175;;:::o;30147:832::-;30272:4;30312;30272;30329:525;30353:5;:12;30349:1;:16;30329:525;;;30387:20;30410:5;30416:1;30410:8;;;;;;-1:-1:-1;;;30410:8:0;;;;;;;;;;;;;;;30387:31;;30455:12;30439;:28;30435:408;;30609:12;30623;30592:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30582:55;;;;;;30567:70;;30435:408;;;30799:12;30813;30782:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30772:55;;;;;;30757:70;;30435:408;-1:-1:-1;30367:3:0;;;;:::i;:::-;;;;30329:525;;;-1:-1:-1;30951:20:0;;;;30147:832;-1:-1:-1;;;30147:832:0:o;25466:110::-;25542:26;25552:2;25556:7;25542:26;;;;;;;;;;;;:9;:26::i;23759:339::-;23954:41;23973:12;:10;:12::i;:::-;23987:7;23954:18;:41::i;:::-;23946:103;;;;-1:-1:-1;;;23946:103:0;;;;;;;:::i;:::-;24062:28;24072:4;24078:2;24082:7;24062:9;:28::i;1812:173::-;1887:6;;;-1:-1:-1;;;;;1904:17:0;;;-1:-1:-1;;;;;;1904:17:0;;;;;;;1937:40;;1887:6;;;1904:17;1887:6;;1937:40;;1868:16;;1937:40;1812:173;;:::o;24295:328::-;24470:41;24489:12;:10;:12::i;:::-;24503:7;24470:18;:41::i;:::-;24462:103;;;;-1:-1:-1;;;24462:103:0;;;;;;;:::i;:::-;24576:39;24590:4;24596:2;24600:7;24609:5;24576:13;:39::i;32321:99::-;32372:13;32405:7;32398:14;;;;;:::i;2180:723::-;2236:13;2457:10;2453:53;;-1:-1:-1;2484:10:0;;;;;;;;;;;;-1:-1:-1;;;2484:10:0;;;;;;2453:53;2531:5;2516:12;2572:78;2579:9;;2572:78;;2605:8;;;;:::i;:::-;;-1:-1:-1;2628:10:0;;-1:-1:-1;2636:2:0;2628:10;;:::i;:::-;;;2572:78;;;2660:19;2692:6;2682:17;;;;;;-1:-1:-1;;;2682:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2682:17:0;;2660:39;;2710:154;2717:10;;2710:154;;2744:11;2754:1;2744:11;;:::i;:::-;;-1:-1:-1;2813:10:0;2821:2;2813:5;:10;:::i;:::-;2800:24;;:2;:24;:::i;:::-;2787:39;;2770:6;2777;2770:14;;;;;;-1:-1:-1;;;2770:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;2770:56:0;;;;;;;;-1:-1:-1;2841:11:0;2850:2;2841:11;;:::i;:::-;;;2710:154;;;2888:6;2180:723;-1:-1:-1;;;;2180:723:0:o;20834:157::-;-1:-1:-1;;;;;;20943:40:0;;-1:-1:-1;;;20943:40:0;20834:157;;;:::o;25582:321::-;25712:18;25718:2;25722:7;25712:5;:18::i;:::-;25763:54;25794:1;25798:2;25802:7;25811:5;25763:22;:54::i;:::-;25741:154;;;;-1:-1:-1;;;25741:154:0;;;;;;;:::i;25111:349::-;25204:4;25229:16;25237:7;25229;:16::i;:::-;25221:73;;;;-1:-1:-1;;;25221:73:0;;;;;;;:::i;:::-;25305:13;25321:24;25337:7;25321:15;:24::i;:::-;25305:40;;25375:5;-1:-1:-1;;;;;25364:16:0;:7;-1:-1:-1;;;;;25364:16:0;;:51;;;;25408:7;-1:-1:-1;;;;;25384:31:0;:20;25396:7;25384:11;:20::i;:::-;-1:-1:-1;;;;;25384:31:0;;25364:51;:87;;;;25419:32;25436:5;25443:7;25419:16;:32::i;26600:517::-;26760:4;-1:-1:-1;;;;;26732:32:0;:24;26748:7;26732:15;:24::i;:::-;-1:-1:-1;;;;;26732:32:0;;26724:86;;;;-1:-1:-1;;;26724:86:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26829:16:0;;26821:65;;;;-1:-1:-1;;;26821:65:0;;;;;;;:::i;:::-;26899:39;26920:4;26926:2;26930:7;26899:20;:39::i;:::-;27003:29;27020:1;27024:7;27003:8;:29::i;:::-;27062:2;27043:7;27051;27043:16;;;;;;-1:-1:-1;;;27043:16:0;;;;;;;;;;;;;;;;;:21;;-1:-1:-1;;;;;;27043:21:0;-1:-1:-1;;;;;27043:21:0;;;;;;27082:27;;27101:7;;27082:27;;;;;;;;;;27043:16;27082:27;26600:517;;;:::o;24629:315::-;24786:28;24796:4;24802:2;24806:7;24786:9;:28::i;:::-;24833:48;24856:4;24862:2;24866:7;24875:5;24833:22;:48::i;:::-;24825:111;;;;-1:-1:-1;;;24825:111:0;;;;;;;:::i;25909:346::-;-1:-1:-1;;;;;25989:16:0;;25981:61;;;;-1:-1:-1;;;25981:61:0;;;;;;;:::i;:::-;26062:16;26070:7;26062;:16::i;:::-;26061:17;26053:58;;;;-1:-1:-1;;;26053:58:0;;;;;;;:::i;:::-;26124:45;26153:1;26157:2;26161:7;26124:20;:45::i;:::-;26180:7;:16;;;;;;;-1:-1:-1;26180:16:0;;;;;;;-1:-1:-1;;;;;;26180:16:0;-1:-1:-1;;;;;26180:16:0;;;;;;;;26214:33;;26239:7;;-1:-1:-1;26214:33:0;;-1:-1:-1;;26214:33:0;25909:346;;:::o;27304:799::-;27459:4;27480:15;:2;-1:-1:-1;;;;;27480:13:0;;:15::i;:::-;27476:620;;;27532:2;-1:-1:-1;;;;;27516:36:0;;27553:12;:10;:12::i;:::-;27567:4;27573:7;27582:5;27516:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27516:72:0;;;;;;;;-1:-1:-1;;27516:72:0;;;;;;;;;;;;:::i;:::-;;;27512:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27758:13:0;;27754:272;;27801:60;;-1:-1:-1;;;27801:60:0;;;;;;;:::i;27754:272::-;27976:6;27970:13;27961:6;27957:2;27953:15;27946:38;27512:529;-1:-1:-1;;;;;;27639:51:0;-1:-1:-1;;;27639:51:0;;-1:-1:-1;27632:58:0;;27476:620;-1:-1:-1;28080:4:0;27304:799;;;;;;:::o;13396:387::-;13719:20;13767:8;;;13396:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:162;873:20;;929:13;;922:21;912:32;;902:2;;958:1;955;948:12;973:198;;1085:2;1073:9;1064:7;1060:23;1056:32;1053:2;;;1106:6;1098;1091:22;1053:2;1134:31;1155:9;1134:31;:::i;1176:274::-;;;1305:2;1293:9;1284:7;1280:23;1276:32;1273:2;;;1326:6;1318;1311:22;1273:2;1354:31;1375:9;1354:31;:::i;:::-;1344:41;;1404:40;1440:2;1429:9;1425:18;1404:40;:::i;:::-;1394:50;;1263:187;;;;;:::o;1455:342::-;;;;1601:2;1589:9;1580:7;1576:23;1572:32;1569:2;;;1622:6;1614;1607:22;1569:2;1650:31;1671:9;1650:31;:::i;:::-;1640:41;;1700:40;1736:2;1725:9;1721:18;1700:40;:::i;:::-;1690:50;;1787:2;1776:9;1772:18;1759:32;1749:42;;1559:238;;;;;:::o;1802:702::-;;;;;1974:3;1962:9;1953:7;1949:23;1945:33;1942:2;;;1996:6;1988;1981:22;1942:2;2024:31;2045:9;2024:31;:::i;:::-;2014:41;;2074:40;2110:2;2099:9;2095:18;2074:40;:::i;:::-;2064:50;;2161:2;2150:9;2146:18;2133:32;2123:42;;2216:2;2205:9;2201:18;2188:32;2243:18;2235:6;2232:30;2229:2;;;2280:6;2272;2265:22;2229:2;2308:22;;2361:4;2353:13;;2349:27;-1:-1:-1;2339:2:1;;2395:6;2387;2380:22;2339:2;2423:75;2490:7;2485:2;2472:16;2467:2;2463;2459:11;2423:75;:::i;:::-;2413:85;;;1932:572;;;;;;;:::o;2509:268::-;;;2635:2;2623:9;2614:7;2610:23;2606:32;2603:2;;;2656:6;2648;2641:22;2603:2;2684:31;2705:9;2684:31;:::i;:::-;2674:41;;2734:37;2767:2;2756:9;2752:18;2734:37;:::i;2782:266::-;;;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:31;2981:9;2960:31;:::i;:::-;2950:41;3038:2;3023:18;;;;3010:32;;-1:-1:-1;;;2869:179:1:o;3053:192::-;;3162:2;3150:9;3141:7;3137:23;3133:32;3130:2;;;3183:6;3175;3168:22;3130:2;3211:28;3229:9;3211:28;:::i;3250:190::-;;3362:2;3350:9;3341:7;3337:23;3333:32;3330:2;;;3383:6;3375;3368:22;3330:2;-1:-1:-1;3411:23:1;;3320:120;-1:-1:-1;3320:120:1:o;3445:257::-;;3556:2;3544:9;3535:7;3531:23;3527:32;3524:2;;;3577:6;3569;3562:22;3524:2;3621:9;3608:23;3640:32;3666:5;3640:32;:::i;3707:261::-;;3829:2;3817:9;3808:7;3804:23;3800:32;3797:2;;;3850:6;3842;3835:22;3797:2;3887:9;3881:16;3906:32;3932:5;3906:32;:::i;3973:482::-;;4095:2;4083:9;4074:7;4070:23;4066:32;4063:2;;;4116:6;4108;4101:22;4063:2;4161:9;4148:23;4194:18;4186:6;4183:30;4180:2;;;4231:6;4223;4216:22;4180:2;4259:22;;4312:4;4304:13;;4300:27;-1:-1:-1;4290:2:1;;4346:6;4338;4331:22;4290:2;4374:75;4441:7;4436:2;4423:16;4418:2;4414;4410:11;4374:75;:::i;4655:734::-;;;;4819:2;4807:9;4798:7;4794:23;4790:32;4787:2;;;4840:6;4832;4825:22;4787:2;4881:9;4868:23;4858:33;;4942:2;4931:9;4927:18;4914:32;4965:18;5006:2;4998:6;4995:14;4992:2;;;5027:6;5019;5012:22;4992:2;5070:6;5059:9;5055:22;5045:32;;5115:7;5108:4;5104:2;5100:13;5096:27;5086:2;;5142:6;5134;5127:22;5086:2;5187;5174:16;5213:2;5205:6;5202:14;5199:2;;;5234:6;5226;5219:22;5199:2;5293:7;5288:2;5282;5274:6;5270:15;5266:2;5262:24;5258:33;5255:46;5252:2;;;5319:6;5311;5304:22;5252:2;5355;5351;5347:11;5337:21;;5377:6;5367:16;;;;;4777:612;;;;;:::o;5394:259::-;;5475:5;5469:12;5502:6;5497:3;5490:19;5518:63;5574:6;5567:4;5562:3;5558:14;5551:4;5544:5;5540:16;5518:63;:::i;:::-;5635:2;5614:15;-1:-1:-1;;5610:29:1;5601:39;;;;5642:4;5597:50;;5445:208;-1:-1:-1;;5445:208:1:o;5658:229::-;5807:2;5803:15;;;;-1:-1:-1;;5799:53:1;5787:66;;5878:2;5869:12;;5777:110::o;5892:247::-;6049:19;;;6093:2;6084:12;;6077:28;6130:2;6121:12;;6039:100::o;6144:637::-;;6462:6;6456:13;6478:53;6524:6;6519:3;6512:4;6504:6;6500:17;6478:53;:::i;:::-;6594:13;;6553:16;;;;6616:57;6594:13;6553:16;6650:4;6638:17;;6616:57;:::i;:::-;-1:-1:-1;;;6695:20:1;;6724:22;;;6773:1;6762:13;;6432:349;-1:-1:-1;;;;6432:349:1:o;6786:203::-;-1:-1:-1;;;;;6950:32:1;;;;6932:51;;6920:2;6905:18;;6887:102::o;6994:490::-;-1:-1:-1;;;;;7263:15:1;;;7245:34;;7315:15;;7310:2;7295:18;;7288:43;7362:2;7347:18;;7340:34;;;7410:3;7405:2;7390:18;;7383:31;;;6994:490;;7431:47;;7458:19;;7450:6;7431:47;:::i;:::-;7423:55;7197:287;-1:-1:-1;;;;;;7197:287:1:o;7489:635::-;7660:2;7712:21;;;7782:13;;7685:18;;;7804:22;;;7489:635;;7660:2;7883:15;;;;7857:2;7842:18;;;7489:635;7929:169;7943:6;7940:1;7937:13;7929:169;;;8004:13;;7992:26;;8073:15;;;;8038:12;;;;7965:1;7958:9;7929:169;;;-1:-1:-1;8115:3:1;;7640:484;-1:-1:-1;;;;;;7640:484:1:o;8129:187::-;8294:14;;8287:22;8269:41;;8257:2;8242:18;;8224:92::o;8321:177::-;8467:25;;;8455:2;8440:18;;8422:76::o;8503:221::-;;8652:2;8641:9;8634:21;8672:46;8714:2;8703:9;8699:18;8691:6;8672:46;:::i;8729:397::-;8931:2;8913:21;;;8970:2;8950:18;;;8943:30;9009:34;9004:2;8989:18;;8982:62;-1:-1:-1;;;9075:2:1;9060:18;;9053:31;9116:3;9101:19;;8903:223::o;9131:414::-;9333:2;9315:21;;;9372:2;9352:18;;;9345:30;9411:34;9406:2;9391:18;;9384:62;-1:-1:-1;;;9477:2:1;9462:18;;9455:48;9535:3;9520:19;;9305:240::o;9550:402::-;9752:2;9734:21;;;9791:2;9771:18;;;9764:30;9830:34;9825:2;9810:18;;9803:62;-1:-1:-1;;;9896:2:1;9881:18;;9874:36;9942:3;9927:19;;9724:228::o;9957:352::-;10159:2;10141:21;;;10198:2;10178:18;;;10171:30;10237;10232:2;10217:18;;10210:58;10300:2;10285:18;;10131:178::o;10314:400::-;10516:2;10498:21;;;10555:2;10535:18;;;10528:30;10594:34;10589:2;10574:18;;10567:62;-1:-1:-1;;;10660:2:1;10645:18;;10638:34;10704:3;10689:19;;10488:226::o;10719:349::-;10921:2;10903:21;;;10960:2;10940:18;;;10933:30;10999:27;10994:2;10979:18;;10972:55;11059:2;11044:18;;10893:175::o;11073:354::-;11275:2;11257:21;;;11314:2;11294:18;;;11287:30;11353:32;11348:2;11333:18;;11326:60;11418:2;11403:18;;11247:180::o;11432:332::-;11634:2;11616:21;;;11673:1;11653:18;;;11646:29;-1:-1:-1;;;11706:2:1;11691:18;;11684:39;11755:2;11740:18;;11606:158::o;11769:342::-;11971:2;11953:21;;;12010:2;11990:18;;;11983:30;-1:-1:-1;;;12044:2:1;12029:18;;12022:48;12102:2;12087:18;;11943:168::o;12116:408::-;12318:2;12300:21;;;12357:2;12337:18;;;12330:30;12396:34;12391:2;12376:18;;12369:62;-1:-1:-1;;;12462:2:1;12447:18;;12440:42;12514:3;12499:19;;12290:234::o;12529:346::-;12731:2;12713:21;;;12770:2;12750:18;;;12743:30;-1:-1:-1;;;12804:2:1;12789:18;;12782:52;12866:2;12851:18;;12703:172::o;12880:397::-;13082:2;13064:21;;;13121:2;13101:18;;;13094:30;13160:34;13155:2;13140:18;;13133:62;-1:-1:-1;;;13226:2:1;13211:18;;13204:31;13267:3;13252:19;;13054:223::o;13282:420::-;13484:2;13466:21;;;13523:2;13503:18;;;13496:30;13562:34;13557:2;13542:18;;13535:62;13633:26;13628:2;13613:18;;13606:54;13692:3;13677:19;;13456:246::o;13707:406::-;13909:2;13891:21;;;13948:2;13928:18;;;13921:30;13987:34;13982:2;13967:18;;13960:62;-1:-1:-1;;;14053:2:1;14038:18;;14031:40;14103:3;14088:19;;13881:232::o;14118:405::-;14320:2;14302:21;;;14359:2;14339:18;;;14332:30;14398:34;14393:2;14378:18;;14371:62;-1:-1:-1;;;14464:2:1;14449:18;;14442:39;14513:3;14498:19;;14292:231::o;14528:341::-;14730:2;14712:21;;;14769:2;14749:18;;;14742:30;-1:-1:-1;;;14803:2:1;14788:18;;14781:47;14860:2;14845:18;;14702:167::o;14874:356::-;15076:2;15058:21;;;15095:18;;;15088:30;15154:34;15149:2;15134:18;;15127:62;15221:2;15206:18;;15048:182::o;15235:408::-;15437:2;15419:21;;;15476:2;15456:18;;;15449:30;15515:34;15510:2;15495:18;;15488:62;-1:-1:-1;;;15581:2:1;15566:18;;15559:42;15633:3;15618:19;;15409:234::o;15648:339::-;15850:2;15832:21;;;15889:2;15869:18;;;15862:30;-1:-1:-1;;;15923:2:1;15908:18;;15901:45;15978:2;15963:18;;15822:165::o;15992:356::-;16194:2;16176:21;;;16213:18;;;16206:30;16272:34;16267:2;16252:18;;16245:62;16339:2;16324:18;;16166:182::o;16353:405::-;16555:2;16537:21;;;16594:2;16574:18;;;16567:30;16633:34;16628:2;16613:18;;16606:62;-1:-1:-1;;;16699:2:1;16684:18;;16677:39;16748:3;16733:19;;16527:231::o;16763:341::-;16965:2;16947:21;;;17004:2;16984:18;;;16977:30;-1:-1:-1;;;17038:2:1;17023:18;;17016:47;17095:2;17080:18;;16937:167::o;17109:346::-;17311:2;17293:21;;;17350:2;17330:18;;;17323:30;-1:-1:-1;;;17384:2:1;17369:18;;17362:52;17446:2;17431:18;;17283:172::o;17460:347::-;17662:2;17644:21;;;17701:2;17681:18;;;17674:30;17740:25;17735:2;17720:18;;17713:53;17798:2;17783:18;;17634:173::o;17812:397::-;18014:2;17996:21;;;18053:2;18033:18;;;18026:30;18092:34;18087:2;18072:18;;18065:62;-1:-1:-1;;;18158:2:1;18143:18;;18136:31;18199:3;18184:19;;17986:223::o;18214:413::-;18416:2;18398:21;;;18455:2;18435:18;;;18428:30;18494:34;18489:2;18474:18;;18467:62;-1:-1:-1;;;18560:2:1;18545:18;;18538:47;18617:3;18602:19;;18388:239::o;18632:397::-;18834:2;18816:21;;;18873:2;18853:18;;;18846:30;18912:34;18907:2;18892:18;;18885:62;-1:-1:-1;;;18978:2:1;18963:18;;18956:31;19019:3;19004:19;;18806:223::o;19034:353::-;19236:2;19218:21;;;19275:2;19255:18;;;19248:30;19314:31;19309:2;19294:18;;19287:59;19378:2;19363:18;;19208:179::o;19392:355::-;19594:2;19576:21;;;19633:2;19613:18;;;19606:30;19672:33;19667:2;19652:18;;19645:61;19738:2;19723:18;;19566:181::o;19752:345::-;19954:2;19936:21;;;19993:2;19973:18;;;19966:30;-1:-1:-1;;;20027:2:1;20012:18;;20005:51;20088:2;20073:18;;19926:171::o;20284:391::-;20515:25;;;20571:2;20556:18;;20549:34;;;;20614:2;20599:18;;20592:34;20657:2;20642:18;;20635:34;20502:3;20487:19;;20469:206::o;20680:128::-;;20751:1;20747:6;20744:1;20741:13;20738:2;;;20757:18;;:::i;:::-;-1:-1:-1;20793:9:1;;20728:80::o;20813:120::-;;20879:1;20869:2;;20884:18;;:::i;:::-;-1:-1:-1;20918:9:1;;20859:74::o;20938:168::-;;21044:1;21040;21036:6;21032:14;21029:1;21026:21;21021:1;21014:9;21007:17;21003:45;21000:2;;;21051:18;;:::i;:::-;-1:-1:-1;21091:9:1;;20990:116::o;21111:125::-;;21179:1;21176;21173:8;21170:2;;;21184:18;;:::i;:::-;-1:-1:-1;21221:9:1;;21160:76::o;21241:258::-;21313:1;21323:113;21337:6;21334:1;21331:13;21323:113;;;21413:11;;;21407:18;21394:11;;;21387:39;21359:2;21352:10;21323:113;;;21454:6;21451:1;21448:13;21445:2;;;-1:-1:-1;;21489:1:1;21471:16;;21464:27;21294:205::o;21504:380::-;21589:1;21579:12;;21636:1;21626:12;;;21647:2;;21701:4;21693:6;21689:17;21679:27;;21647:2;21754;21746:6;21743:14;21723:18;21720:38;21717:2;;;21800:10;21795:3;21791:20;21788:1;21781:31;21835:4;21832:1;21825:15;21863:4;21860:1;21853:15;21717:2;;21559:325;;;:::o;21889:135::-;;-1:-1:-1;;21949:17:1;;21946:2;;;21969:18;;:::i;:::-;-1:-1:-1;22016:1:1;22005:13;;21936:88::o;22029:112::-;;22087:1;22077:2;;22092:18;;:::i;:::-;-1:-1:-1;22126:9:1;;22067:74::o;22146:127::-;22207:10;22202:3;22198:20;22195:1;22188:31;22238:4;22235:1;22228:15;22262:4;22259:1;22252:15;22278:127;22339:10;22334:3;22330:20;22327:1;22320:31;22370:4;22367:1;22360:15;22394:4;22391:1;22384:15;22410:127;22471:10;22466:3;22462:20;22459:1;22452:31;22502:4;22499:1;22492:15;22526:4;22523:1;22516:15;22542:133;-1:-1:-1;;;;;;22618:32:1;;22608:43;;22598:2;;22665:1;22662;22655:12
Swarm Source
ipfs://7b4c6a83b1212267daaa82e17fbeca63859755acef3e05edf3ca17759cb82d3f
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.