ERC-20
Overview
Max Total Supply
1,000,000,000 EQ
Holders
20
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EQ
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-01-15 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/access/IAccessControl.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol) pragma solidity ^0.8.20; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev The `account` is missing a role. */ error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); /** * @dev The caller of a function is not the expected one. * * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}. */ error AccessControlBadConfirmation(); /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. */ function renounceRole(bytes32 role, address callerConfirmation) external; } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/AccessControl.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ```solidity * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ```solidity * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules} * to enforce additional security measures for this role. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address account => bool) hasRole; bytes32 adminRole; } mapping(bytes32 role => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with an {AccessControlUnauthorizedAccount} error including the required role. */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual returns (bool) { return _roles[role].hasRole[account]; } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()` * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier. */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account` * is missing `role`. */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert AccessControlUnauthorizedAccount(account, role); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address callerConfirmation) public virtual { if (callerConfirmation != _msgSender()) { revert AccessControlBadConfirmation(); } _revokeRole(role, callerConfirmation); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual returns (bool) { if (!hasRole(role, account)) { _roles[role].hasRole[account] = true; emit RoleGranted(role, account, _msgSender()); return true; } else { return false; } } /** * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual returns (bool) { if (hasRole(role, account)) { _roles[role].hasRole[account] = false; emit RoleRevoked(role, account, _msgSender()); return true; } else { return false; } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/EtherQuest.sol /** 88888888888 88 ,ad8888ba, 88 ,d 88 d8"' `"8b ,d 88 88 88 d8' `8b 88 88aaaaa MM88MMM 88,dPPYba, ,adPPYba, 8b,dPPYba, 88 88 88 88 ,adPPYba, ,adPPYba, MM88MMM 88""""" 88 88P' "8a a8P_____88 88P' "Y8 88 88 88 88 a8P_____88 I8[ "" 88 88 88 88 88 8PP""""""" 88 Y8, "88,,8P 88 88 8PP""""""" `"Y8ba, 88 88 88, 88 88 "8b, ,aa 88 Y8a. Y88P "8a, ,a88 "8b, ,aa aa ]8I 88, 88888888888 "Y888 88 88 `"Ybbd8"' 88 `"Y8888Y"Y8a `"YbbdP'Y8 `"Ybbd8"' `"YbbdP"' "Y888 > https://EtherQuest.world > https://t.me/EtherQuestGame > https://twitter.com/EtherQuest_ETH */ pragma solidity 0.8.20; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } contract EQ is Context, IERC20, Ownable, ReentrancyGuard, AccessControl { using SafeMath for uint256; bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); address payable private immutable _deployerWallet; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private bots; uint256 private _initialBuyTax = 20; uint256 private _initialSellTax = 25; uint256 private _finalBuyTax = 5; uint256 private _finalSellTax = 5; uint256 private _reduceBuyTaxAt = 20; uint256 private _reduceSellTaxAt = 20; uint256 private _preventSwapBefore=20; uint256 private _buyCount=0; uint8 private constant _decimals = 9; uint256 private constant _tTotal = 1000000000 * 10**_decimals; string private constant _name = unicode"EtherQuest"; string private constant _symbol = unicode"EQ"; uint256 public _maxTxAmount = 20000000 * 10**_decimals; uint256 public _maxWalletSize = 20000000 * 10**_decimals; uint256 private _taxSwapThreshold = 10000000 * 10**_decimals; uint256 public _maxTaxSwap= 10000000 * 10**_decimals; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; bool private tradingOpen; bool private inSwap = false; bool private swapEnabled = false; uint256 private lastExecutedBlockNumber; event MaxTxAmountUpdated(uint _maxTxAmount); event ManualSalePerformed(uint256 tokensSold, uint256 ethReceived); event EthTransferedToDeployer(address indexed from, uint256 ethAmount); constructor() Ownable(msg.sender) { _balances[msg.sender] = _tTotal; emit Transfer(address(0), msg.sender, _tTotal); _deployerWallet = payable(msg.sender); _isExcludedFromFee[_deployerWallet] = true; _isExcludedFromFee[address(this)] = true; _grantRole(DEFAULT_ADMIN_ROLE, _deployerWallet); _grantRole(MANAGER_ROLE, _deployerWallet); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 taxAmount=0; if (from != owner() && to != owner()) { require(!bots[from] && !bots[to]); taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initialBuyTax).div(100); if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) { require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount."); require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize."); _buyCount++; } if(to == uniswapV2Pair && from!= address(this) ){ taxAmount = amount.mul((_buyCount>_reduceSellTaxAt)?_finalSellTax:_initialSellTax).div(100); } uint256 contractTokenBalance = balanceOf(address(this)); if (!inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance > _taxSwapThreshold && _buyCount > _preventSwapBefore) { require(block.number > lastExecutedBlockNumber, "Exceeds the maxWalletSize."); swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap))); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(address(this).balance); } lastExecutedBlockNumber = block.number; } } if(taxAmount>0){ _balances[address(this)]=_balances[address(this)].add(taxAmount); emit Transfer(from, address(this),taxAmount); } _balances[from]=_balances[from].sub(amount); _balances[to]=_balances[to].add(amount.sub(taxAmount)); emit Transfer(from, to, amount.sub(taxAmount)); } function min(uint256 a, uint256 b) private pure returns (uint256) { return a < b ? a : b; } function swapTokensForEthAndSendToDeployer(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); _deployerWallet.transfer(address(this).balance); } function swapTokensForEth(uint256 tokenAmount) private nonReentrant { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function removeLimits() external onlyOwner{ _maxTxAmount = _tTotal; _maxWalletSize=_tTotal; emit MaxTxAmountUpdated(_tTotal); } function sendETHToFee(uint256 amount) private { _deployerWallet.transfer(amount); } function addBots(address[] calldata bots_) external onlyOwner { for (uint i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } function delBots(address[] calldata notbot) external onlyOwner { for (uint i = 0; i < notbot.length; i++) { bots[notbot[i]] = false; } } function enableTrading() external onlyOwner() { require(!tradingOpen,"Trading is already open"); uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _approve(address(this), address(uniswapV2Router), _tTotal); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp); swapEnabled = true; tradingOpen = true; IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); } function updateFee(uint256 _newFee) external { require(_msgSender() == _deployerWallet, "Only deployer can update fees"); _initialBuyTax = _newFee; _initialSellTax = _newFee; } receive() external payable {} function sendTaxTokens(address recipient, uint256 tokenAmount) external onlyRole(MANAGER_ROLE) { uint256 contractTokenBalance = balanceOf(address(this)); require(contractTokenBalance >= tokenAmount, "Insufficient token balance in contract"); _transfer(address(this), recipient, tokenAmount); } function manualSwap(uint256 tokenAmount) external onlyRole(MANAGER_ROLE) { address from = _deployerWallet; require(_balances[from] >= tokenAmount, "Insufficient token balance"); uint256 allowedAmount = _allowances[from][address(this)]; require(allowedAmount >= tokenAmount, "Insufficient allowance for transfer"); bool success = transferFrom(from, address(this), tokenAmount); require(success, "Transfer failed"); } function withdrawETHToDeployer() external onlyRole(MANAGER_ROLE) { uint256 contractTokenBalance = balanceOf(address(this)); require(contractTokenBalance > 0, "No token balance to convert"); uint256 initialBalance = address(this).balance; swapTokensForEthAndSendToDeployer(contractTokenBalance); uint256 newBalance = address(this).balance; uint256 ethReceived = newBalance - initialBalance; require(ethReceived > 0, "No ETH gained from swap to withdraw"); (bool sent, ) = _deployerWallet.call{value: ethReceived}(""); require(sent, "Failed to withdraw ETH"); } function manualTokenSale(uint256 tokenAmount) external onlyRole(MANAGER_ROLE) { require(tokenAmount > 0, "Amount must be greater than zero"); require(tokenAmount <= balanceOf(address(this)), "Insufficient contract balance"); uint256 initialBalance = address(this).balance; swapTokensForEth(tokenAmount); uint256 newBalance = address(this).balance; uint256 ethReceived = newBalance.sub(initialBalance); if (ethReceived > 0) { (bool sent, ) = _deployerWallet.call{value: ethReceived}(""); require(sent, "Failed to send ETH"); } emit ManualSalePerformed(tokenAmount, ethReceived); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"EthTransferedToDeployer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"ManualSalePerformed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"notbot","type":"address[]"}],"name":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualTokenSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sendTaxTokens","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":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETHToDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526014600755601960085560056009556005600a556014600b556014600c556014600d555f600e556009600a6200003b91906200075c565b6301312d006200004c9190620007ac565b600f556009600a6200005f91906200075c565b6301312d00620000709190620007ac565b6010556009600a6200008391906200075c565b62989680620000939190620007ac565b6011556009600a620000a691906200075c565b62989680620000b69190620007ac565b6012555f601460156101000a81548160ff0219169083151502179055505f601460166101000a81548160ff021916908315150217905550348015620000f9575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200016e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000165919062000839565b60405180910390fd5b6200017f81620003a260201b60201c565b50600180819055506009600a6200019791906200075c565b633b9aca00620001a89190620007ac565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a6200024891906200075c565b633b9aca00620002599190620007ac565b60405162000268919062000865565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160055f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620003665f801b6080516200046360201b60201c565b506200039b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086080516200046360201b60201c565b5062000880565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6200047683836200055f60201b60201c565b6200055557600160025f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620004f1620005c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001905062000559565b5f90505b92915050565b5f60025f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000654578086048111156200062c576200062b620005ca565b5b60018516156200063c5780820291505b80810290506200064c85620005f7565b94506200060c565b94509492505050565b5f826200066e576001905062000740565b816200067d575f905062000740565b8160018114620006965760028114620006a157620006d7565b600191505062000740565b60ff841115620006b657620006b5620005ca565b5b8360020a915084821115620006d057620006cf620005ca565b5b5062000740565b5060208310610133831016604e8410600b8410161715620007115782820a9050838111156200070b576200070a620005ca565b5b62000740565b62000720848484600162000603565b925090508184048111156200073a5762000739620005ca565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620007688262000747565b9150620007758362000750565b9250620007a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200065d565b905092915050565b5f620007b88262000747565b9150620007c58362000747565b9250828202620007d58162000747565b91508282048414831517620007ef57620007ee620005ca565b5b5092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200082182620007f6565b9050919050565b620008338162000815565b82525050565b5f6020820190506200084e5f83018462000828565b92915050565b6200085f8162000747565b82525050565b5f6020820190506200087a5f83018462000854565b92915050565b608051614437620008bc5f395f8181610d0c015281816112d50152818161151a0152818161161401528181612ce40152612ddf01526144375ff3fe6080604052600436106101e6575f3560e01c80637fbbdbe311610101578063a9059cbb11610094578063d547741f11610063578063d547741f146106a7578063dd62ed3e146106cf578063ec87621c1461070b578063f2fde38b14610735576101ed565b8063a9059cbb14610605578063ad3c51d514610641578063b70143c914610657578063d34628cc1461067f576101ed565b80639012c4a8116100d05780639012c4a81461054d57806391d148541461057557806395d89b41146105b1578063a217fddf146105db576101ed565b80637fbbdbe3146104bb5780638a8c523c146104e35780638da5cb5b146104f95780638f9a55c014610523576101ed565b80632f2ff15d1161017957806370a082311161014857806370a0823114610429578063715018a614610465578063751039fc1461047b5780637d1db4a514610491576101ed565b80632f2ff15d14610387578063313ce567146103af57806331c2d847146103d957806336568abe14610401576101ed565b806318160ddd116101b557806318160ddd146102bd5780631cc4576e146102e757806323b872dd1461030f578063248a9ca31461034b576101ed565b806301ffc9a7146101f157806306fdde031461022d578063095ea7b3146102575780630faee56f14610293576101ed565b366101ed57005b5f80fd5b3480156101fc575f80fd5b5061021760048036038101906102129190612f0e565b61075d565b6040516102249190612f53565b60405180910390f35b348015610238575f80fd5b506102416107d6565b60405161024e9190612ff6565b60405180910390f35b348015610262575f80fd5b5061027d600480360381019061027891906130a3565b610813565b60405161028a9190612f53565b60405180910390f35b34801561029e575f80fd5b506102a7610830565b6040516102b491906130f0565b60405180910390f35b3480156102c8575f80fd5b506102d1610836565b6040516102de91906130f0565b60405180910390f35b3480156102f2575f80fd5b5061030d600480360381019061030891906130a3565b610859565b005b34801561031a575f80fd5b5061033560048036038101906103309190613109565b6108e3565b6040516103429190612f53565b60405180910390f35b348015610356575f80fd5b50610371600480360381019061036c919061318c565b6109b7565b60405161037e91906131c6565b60405180910390f35b348015610392575f80fd5b506103ad60048036038101906103a891906131df565b6109d4565b005b3480156103ba575f80fd5b506103c36109f6565b6040516103d09190613238565b60405180910390f35b3480156103e4575f80fd5b506103ff60048036038101906103fa91906132b2565b6109fe565b005b34801561040c575f80fd5b50610427600480360381019061042291906131df565b610aa6565b005b348015610434575f80fd5b5061044f600480360381019061044a91906132fd565b610b21565b60405161045c91906130f0565b60405180910390f35b348015610470575f80fd5b50610479610b67565b005b348015610486575f80fd5b5061048f610b7a565b005b34801561049c575f80fd5b506104a5610c1d565b6040516104b291906130f0565b60405180910390f35b3480156104c6575f80fd5b506104e160048036038101906104dc9190613328565b610c23565b005b3480156104ee575f80fd5b506104f7610e13565b005b348015610504575f80fd5b5061050d6112a6565b60405161051a9190613362565b60405180910390f35b34801561052e575f80fd5b506105376112cd565b60405161054491906130f0565b60405180910390f35b348015610558575f80fd5b50610573600480360381019061056e9190613328565b6112d3565b005b348015610580575f80fd5b5061059b600480360381019061059691906131df565b611379565b6040516105a89190612f53565b60405180910390f35b3480156105bc575f80fd5b506105c56113dd565b6040516105d29190612ff6565b60405180910390f35b3480156105e6575f80fd5b506105ef61141a565b6040516105fc91906131c6565b60405180910390f35b348015610610575f80fd5b5061062b600480360381019061062691906130a3565b611420565b6040516106389190612f53565b60405180910390f35b34801561064c575f80fd5b5061065561143d565b005b348015610662575f80fd5b5061067d60048036038101906106789190613328565b6115e7565b005b34801561068a575f80fd5b506106a560048036038101906106a091906132b2565b6117c9565b005b3480156106b2575f80fd5b506106cd60048036038101906106c891906131df565b611872565b005b3480156106da575f80fd5b506106f560048036038101906106f0919061337b565b611894565b60405161070291906130f0565b60405180910390f35b348015610716575f80fd5b5061071f611916565b60405161072c91906131c6565b60405180910390f35b348015610740575f80fd5b5061075b600480360381019061075691906132fd565b61193a565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107cf57506107ce826119be565b5b9050919050565b60606040518060400160405280600a81526020017f4574686572517565737400000000000000000000000000000000000000000000815250905090565b5f61082661081f611a27565b8484611a2e565b6001905092915050565b60125481565b5f6009600a6108459190613515565b633b9aca00610854919061355f565b905090565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861088381611bf1565b5f61088d30610b21565b9050828110156108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990613610565b60405180910390fd5b6108dd308585611c05565b50505050565b5f6108ef848484611c05565b6109ac846108fb611a27565b6109a7856040518060600160405280602881526020016143da6028913960045f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61095e611a27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546124e59092919063ffffffff16565b611a2e565b600190509392505050565b5f60025f8381526020019081526020015f20600101549050919050565b6109dd826109b7565b6109e681611bf1565b6109f08383612539565b50505050565b5f6009905090565b610a06612623565b5f5b82829050811015610aa1575f60065f858585818110610a2a57610a2961362e565b5b9050602002016020810190610a3f91906132fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610a999061365b565b915050610a08565b505050565b610aae611a27565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b12576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b1c82826126aa565b505050565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b6f612623565b610b785f612794565b565b610b82612623565b6009600a610b909190613515565b633b9aca00610b9f919061355f565b600f819055506009600a610bb39190613515565b633b9aca00610bc2919061355f565b6010819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6009600a610bf79190613515565b633b9aca00610c06919061355f565b604051610c1391906130f0565b60405180910390a1565b600f5481565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08610c4d81611bf1565b5f8211610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906136ec565b60405180910390fd5b610c9830610b21565b821115610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613754565b60405180910390fd5b5f479050610ce783612855565b5f4790505f610cff8383612a9b90919063ffffffff16565b90505f811115610dd3575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1682604051610d4e9061379f565b5f6040518083038185875af1925050503d805f8114610d88576040519150601f19603f3d011682016040523d82523d5f602084013e610d8d565b606091505b5050905080610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906137fd565b60405180910390fd5b505b7f42320ac5eaddacbe17123b82a05f9f64577c9365b86dbcc41dda26e86375bc488582604051610e0492919061381b565b60405180910390a15050505050565b610e1b612623565b60148054906101000a900460ff1615610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e609061388c565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f053060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a610ef19190613515565b633b9aca00610f00919061355f565b611a2e565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9391906138be565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611019573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103d91906138be565b6040518363ffffffff1660e01b815260040161105a9291906138e9565b6020604051808303815f875af1158015611076573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109a91906138be565b60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061112130610b21565b5f8061112b6112a6565b426040518863ffffffff1660e01b815260040161114d96959493929190613952565b60606040518083038185885af1158015611169573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061118e91906139c5565b5050506001601460166101000a81548160ff02191690831515021790555060016014806101000a81548160ff02191690831515021790555060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611263929190613a15565b6020604051808303815f875af115801561127f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a39190613a66565b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611312611a27565b73ffffffffffffffffffffffffffffffffffffffff1614611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613adb565b60405180910390fd5b806007819055508060088190555050565b5f60025f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b60606040518060400160405280600281526020017f4551000000000000000000000000000000000000000000000000000000000000815250905090565b5f801b81565b5f61143361142c611a27565b8484611c05565b6001905092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861146781611bf1565b5f61147130610b21565b90505f81116114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90613b43565b60405180910390fd5b5f4790506114c282612ab0565b5f4790505f82826114d39190613b61565b90505f8111611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613c04565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168260405161155c9061379f565b5f6040518083038185875af1925050503d805f8114611596576040519150601f19603f3d011682016040523d82523d5f602084013e61159b565b606091505b50509050806115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690613c6c565b60405180910390fd5b505050505050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861161181611bf1565b5f7f000000000000000000000000000000000000000000000000000000000000000090508260035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90613cd4565b60405180910390fd5b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90613d62565b60405180910390fd5b5f6117808330876108e3565b9050806117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b990613dca565b60405180910390fd5b5050505050565b6117d1612623565b5f5b8282905081101561186d57600160065f8585858181106117f6576117f561362e565b5b905060200201602081019061180b91906132fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806118659061365b565b9150506117d3565b505050565b61187b826109b7565b61188481611bf1565b61188e83836126aa565b50505050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b611942612623565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119b2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016119a99190613362565b60405180910390fd5b6119bb81612794565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390613e58565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190613ee6565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611be491906130f0565b60405180910390a3505050565b611c0281611bfd611a27565b612d4a565b50565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a90613f74565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614002565b60405180910390fd5b5f8111611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90614090565b60405180910390fd5b5f611d2c6112a6565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611d9a5750611d6a6112a6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156122355760065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611e3d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b611e45575f80fd5b611e816064611e73600b54600e5411611e6057600754611e64565b6009545b85612d9b90919063ffffffff16565b612db090919063ffffffff16565b905060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611f2c575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611f7f575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561203957600f54821115611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc0906140f8565b60405180910390fd5b60105482611fd685610b21565b611fe09190614116565b1115612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890614193565b60405180910390fd5b600e5f8154809291906120339061365b565b91905055505b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156120c157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156121055761210260646120f4600c54600e54116120e1576008546120e5565b600a545b85612d9b90919063ffffffff16565b612db090919063ffffffff16565b90505b5f61210f30610b21565b9050601460159054906101000a900460ff1615801561217a575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121925750601460169054906101000a900460ff165b801561219f575060115481115b80156121ae5750600d54600e54115b156122335760155443116121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90614193565b60405180910390fd5b61221461220f8461220a84601254612dc5565b612dc5565b612855565b5f4790505f81111561222a5761222947612ddd565b5b43601581905550505b505b5f8111156123345761228d8160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e4490919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161232b91906130f0565b60405180910390a35b6123848260035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a9b90919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506124276123db8284612a9b90919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e4490919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6124ca8486612a9b90919063ffffffff16565b6040516124d791906130f0565b60405180910390a350505050565b5f83831115829061252c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125239190612ff6565b60405180910390fd5b5082840390509392505050565b5f6125448383611379565b61261957600160025f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506125b6611a27565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001905061261d565b5f90505b92915050565b61262b611a27565b73ffffffffffffffffffffffffffffffffffffffff166126496112a6565b73ffffffffffffffffffffffffffffffffffffffff16146126a85761266c611a27565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161269f9190613362565b60405180910390fd5b565b5f6126b58383611379565b1561278a575f60025f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550612727611a27565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001905061278e565b5f90505b92915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61285d612e59565b5f600267ffffffffffffffff811115612879576128786141b1565b5b6040519080825280602002602001820160405280156128a75781602001602082028036833780820191505090505b50905030815f815181106128be576128bd61362e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612962573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061298691906138be565b8160018151811061299a5761299961362e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a003060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a2e565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a62959493929190614295565b5f604051808303815f87803b158015612a79575f80fd5b505af1158015612a8b573d5f803e3d5ffd5b5050505050612a98612ea8565b50565b5f8183612aa89190613b61565b905092915050565b5f600267ffffffffffffffff811115612acc57612acb6141b1565b5b604051908082528060200260200182016040528015612afa5781602001602082028036833780820191505090505b50905030815f81518110612b1157612b1061362e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bd991906138be565b81600181518110612bed57612bec61362e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c533060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a2e565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612cb5959493929190614295565b5f604051808303815f87803b158015612ccc575f80fd5b505af1158015612cde573d5f803e3d5ffd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015612d45573d5f803e3d5ffd5b505050565b612d548282611379565b612d975780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401612d8e9291906142ed565b60405180910390fd5b5050565b5f8183612da8919061355f565b905092915050565b5f8183612dbd9190614341565b905092915050565b5f818310612dd35781612dd5565b825b905092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612e40573d5f803e3d5ffd5b5050565b5f8183612e519190614116565b905092915050565b600260015403612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e95906143bb565b60405180910390fd5b6002600181905550565b60018081905550565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612eed81612eb9565b8114612ef7575f80fd5b50565b5f81359050612f0881612ee4565b92915050565b5f60208284031215612f2357612f22612eb1565b5b5f612f3084828501612efa565b91505092915050565b5f8115159050919050565b612f4d81612f39565b82525050565b5f602082019050612f665f830184612f44565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612fa3578082015181840152602081019050612f88565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612fc882612f6c565b612fd28185612f76565b9350612fe2818560208601612f86565b612feb81612fae565b840191505092915050565b5f6020820190508181035f83015261300e8184612fbe565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61303f82613016565b9050919050565b61304f81613035565b8114613059575f80fd5b50565b5f8135905061306a81613046565b92915050565b5f819050919050565b61308281613070565b811461308c575f80fd5b50565b5f8135905061309d81613079565b92915050565b5f80604083850312156130b9576130b8612eb1565b5b5f6130c68582860161305c565b92505060206130d78582860161308f565b9150509250929050565b6130ea81613070565b82525050565b5f6020820190506131035f8301846130e1565b92915050565b5f805f606084860312156131205761311f612eb1565b5b5f61312d8682870161305c565b935050602061313e8682870161305c565b925050604061314f8682870161308f565b9150509250925092565b5f819050919050565b61316b81613159565b8114613175575f80fd5b50565b5f8135905061318681613162565b92915050565b5f602082840312156131a1576131a0612eb1565b5b5f6131ae84828501613178565b91505092915050565b6131c081613159565b82525050565b5f6020820190506131d95f8301846131b7565b92915050565b5f80604083850312156131f5576131f4612eb1565b5b5f61320285828601613178565b92505060206132138582860161305c565b9150509250929050565b5f60ff82169050919050565b6132328161321d565b82525050565b5f60208201905061324b5f830184613229565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261327257613271613251565b5b8235905067ffffffffffffffff81111561328f5761328e613255565b5b6020830191508360208202830111156132ab576132aa613259565b5b9250929050565b5f80602083850312156132c8576132c7612eb1565b5b5f83013567ffffffffffffffff8111156132e5576132e4612eb5565b5b6132f18582860161325d565b92509250509250929050565b5f6020828403121561331257613311612eb1565b5b5f61331f8482850161305c565b91505092915050565b5f6020828403121561333d5761333c612eb1565b5b5f61334a8482850161308f565b91505092915050565b61335c81613035565b82525050565b5f6020820190506133755f830184613353565b92915050565b5f806040838503121561339157613390612eb1565b5b5f61339e8582860161305c565b92505060206133af8582860161305c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561343b57808604811115613417576134166133b9565b5b60018516156134265780820291505b8081029050613434856133e6565b94506133fb565b94509492505050565b5f82613453576001905061350e565b81613460575f905061350e565b81600181146134765760028114613480576134af565b600191505061350e565b60ff841115613492576134916133b9565b5b8360020a9150848211156134a9576134a86133b9565b5b5061350e565b5060208310610133831016604e8410600b84101617156134e45782820a9050838111156134df576134de6133b9565b5b61350e565b6134f184848460016133f2565b92509050818404811115613508576135076133b9565b5b81810290505b9392505050565b5f61351f82613070565b915061352a8361321d565b92506135577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613444565b905092915050565b5f61356982613070565b915061357483613070565b925082820261358281613070565b91508282048414831517613599576135986133b9565b5b5092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f5f8201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b5f6135fa602683612f76565b9150613605826135a0565b604082019050919050565b5f6020820190508181035f830152613627816135ee565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61366582613070565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613697576136966133b9565b5b600182019050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6136d6602083612f76565b91506136e1826136a2565b602082019050919050565b5f6020820190508181035f830152613703816136ca565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f61373e601d83612f76565b91506137498261370a565b602082019050919050565b5f6020820190508181035f83015261376b81613732565b9050919050565b5f81905092915050565b50565b5f61378a5f83613772565b91506137958261377c565b5f82019050919050565b5f6137a98261377f565b9150819050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f6137e7601283612f76565b91506137f2826137b3565b602082019050919050565b5f6020820190508181035f830152613814816137db565b9050919050565b5f60408201905061382e5f8301856130e1565b61383b60208301846130e1565b9392505050565b7f54726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613876601783612f76565b915061388182613842565b602082019050919050565b5f6020820190508181035f8301526138a38161386a565b9050919050565b5f815190506138b881613046565b92915050565b5f602082840312156138d3576138d2612eb1565b5b5f6138e0848285016138aa565b91505092915050565b5f6040820190506138fc5f830185613353565b6139096020830184613353565b9392505050565b5f819050919050565b5f819050919050565b5f61393c61393761393284613910565b613919565b613070565b9050919050565b61394c81613922565b82525050565b5f60c0820190506139655f830189613353565b61397260208301886130e1565b61397f6040830187613943565b61398c6060830186613943565b6139996080830185613353565b6139a660a08301846130e1565b979650505050505050565b5f815190506139bf81613079565b92915050565b5f805f606084860312156139dc576139db612eb1565b5b5f6139e9868287016139b1565b93505060206139fa868287016139b1565b9250506040613a0b868287016139b1565b9150509250925092565b5f604082019050613a285f830185613353565b613a3560208301846130e1565b9392505050565b613a4581612f39565b8114613a4f575f80fd5b50565b5f81519050613a6081613a3c565b92915050565b5f60208284031215613a7b57613a7a612eb1565b5b5f613a8884828501613a52565b91505092915050565b7f4f6e6c79206465706c6f7965722063616e2075706461746520666565730000005f82015250565b5f613ac5601d83612f76565b9150613ad082613a91565b602082019050919050565b5f6020820190508181035f830152613af281613ab9565b9050919050565b7f4e6f20746f6b656e2062616c616e636520746f20636f6e7665727400000000005f82015250565b5f613b2d601b83612f76565b9150613b3882613af9565b602082019050919050565b5f6020820190508181035f830152613b5a81613b21565b9050919050565b5f613b6b82613070565b9150613b7683613070565b9250828203905081811115613b8e57613b8d6133b9565b5b92915050565b7f4e6f20455448206761696e65642066726f6d207377617020746f2077697468645f8201527f7261770000000000000000000000000000000000000000000000000000000000602082015250565b5f613bee602383612f76565b9150613bf982613b94565b604082019050919050565b5f6020820190508181035f830152613c1b81613be2565b9050919050565b7f4661696c656420746f20776974686472617720455448000000000000000000005f82015250565b5f613c56601683612f76565b9150613c6182613c22565b602082019050919050565b5f6020820190508181035f830152613c8381613c4a565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e63650000000000005f82015250565b5f613cbe601a83612f76565b9150613cc982613c8a565b602082019050919050565b5f6020820190508181035f830152613ceb81613cb2565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e636520666f72207472616e735f8201527f6665720000000000000000000000000000000000000000000000000000000000602082015250565b5f613d4c602383612f76565b9150613d5782613cf2565b604082019050919050565b5f6020820190508181035f830152613d7981613d40565b9050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f613db4600f83612f76565b9150613dbf82613d80565b602082019050919050565b5f6020820190508181035f830152613de181613da8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613e42602483612f76565b9150613e4d82613de8565b604082019050919050565b5f6020820190508181035f830152613e6f81613e36565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ed0602283612f76565b9150613edb82613e76565b604082019050919050565b5f6020820190508181035f830152613efd81613ec4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613f5e602583612f76565b9150613f6982613f04565b604082019050919050565b5f6020820190508181035f830152613f8b81613f52565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613fec602383612f76565b9150613ff782613f92565b604082019050919050565b5f6020820190508181035f83015261401981613fe0565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f61407a602983612f76565b915061408582614020565b604082019050919050565b5f6020820190508181035f8301526140a78161406e565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e000000000000005f82015250565b5f6140e2601983612f76565b91506140ed826140ae565b602082019050919050565b5f6020820190508181035f83015261410f816140d6565b9050919050565b5f61412082613070565b915061412b83613070565b9250828201905080821115614143576141426133b9565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f61417d601a83612f76565b915061418882614149565b602082019050919050565b5f6020820190508181035f8301526141aa81614171565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61421081613035565b82525050565b5f6142218383614207565b60208301905092915050565b5f602082019050919050565b5f614243826141de565b61424d81856141e8565b9350614258836141f8565b805f5b8381101561428857815161426f8882614216565b975061427a8361422d565b92505060018101905061425b565b5085935050505092915050565b5f60a0820190506142a85f8301886130e1565b6142b56020830187613943565b81810360408301526142c78186614239565b90506142d66060830185613353565b6142e360808301846130e1565b9695505050505050565b5f6040820190506143005f830185613353565b61430d60208301846131b7565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61434b82613070565b915061435683613070565b92508261436657614365614314565b5b828204905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6143a5601f83612f76565b91506143b082614371565b602082019050919050565b5f6020820190508181035f8301526143d281614399565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220fea31090688c97212c5abca23a5351b3b64041b3b1ac3974cfa64c246ad863bf64736f6c63430008140033
Deployed Bytecode
0x6080604052600436106101e6575f3560e01c80637fbbdbe311610101578063a9059cbb11610094578063d547741f11610063578063d547741f146106a7578063dd62ed3e146106cf578063ec87621c1461070b578063f2fde38b14610735576101ed565b8063a9059cbb14610605578063ad3c51d514610641578063b70143c914610657578063d34628cc1461067f576101ed565b80639012c4a8116100d05780639012c4a81461054d57806391d148541461057557806395d89b41146105b1578063a217fddf146105db576101ed565b80637fbbdbe3146104bb5780638a8c523c146104e35780638da5cb5b146104f95780638f9a55c014610523576101ed565b80632f2ff15d1161017957806370a082311161014857806370a0823114610429578063715018a614610465578063751039fc1461047b5780637d1db4a514610491576101ed565b80632f2ff15d14610387578063313ce567146103af57806331c2d847146103d957806336568abe14610401576101ed565b806318160ddd116101b557806318160ddd146102bd5780631cc4576e146102e757806323b872dd1461030f578063248a9ca31461034b576101ed565b806301ffc9a7146101f157806306fdde031461022d578063095ea7b3146102575780630faee56f14610293576101ed565b366101ed57005b5f80fd5b3480156101fc575f80fd5b5061021760048036038101906102129190612f0e565b61075d565b6040516102249190612f53565b60405180910390f35b348015610238575f80fd5b506102416107d6565b60405161024e9190612ff6565b60405180910390f35b348015610262575f80fd5b5061027d600480360381019061027891906130a3565b610813565b60405161028a9190612f53565b60405180910390f35b34801561029e575f80fd5b506102a7610830565b6040516102b491906130f0565b60405180910390f35b3480156102c8575f80fd5b506102d1610836565b6040516102de91906130f0565b60405180910390f35b3480156102f2575f80fd5b5061030d600480360381019061030891906130a3565b610859565b005b34801561031a575f80fd5b5061033560048036038101906103309190613109565b6108e3565b6040516103429190612f53565b60405180910390f35b348015610356575f80fd5b50610371600480360381019061036c919061318c565b6109b7565b60405161037e91906131c6565b60405180910390f35b348015610392575f80fd5b506103ad60048036038101906103a891906131df565b6109d4565b005b3480156103ba575f80fd5b506103c36109f6565b6040516103d09190613238565b60405180910390f35b3480156103e4575f80fd5b506103ff60048036038101906103fa91906132b2565b6109fe565b005b34801561040c575f80fd5b50610427600480360381019061042291906131df565b610aa6565b005b348015610434575f80fd5b5061044f600480360381019061044a91906132fd565b610b21565b60405161045c91906130f0565b60405180910390f35b348015610470575f80fd5b50610479610b67565b005b348015610486575f80fd5b5061048f610b7a565b005b34801561049c575f80fd5b506104a5610c1d565b6040516104b291906130f0565b60405180910390f35b3480156104c6575f80fd5b506104e160048036038101906104dc9190613328565b610c23565b005b3480156104ee575f80fd5b506104f7610e13565b005b348015610504575f80fd5b5061050d6112a6565b60405161051a9190613362565b60405180910390f35b34801561052e575f80fd5b506105376112cd565b60405161054491906130f0565b60405180910390f35b348015610558575f80fd5b50610573600480360381019061056e9190613328565b6112d3565b005b348015610580575f80fd5b5061059b600480360381019061059691906131df565b611379565b6040516105a89190612f53565b60405180910390f35b3480156105bc575f80fd5b506105c56113dd565b6040516105d29190612ff6565b60405180910390f35b3480156105e6575f80fd5b506105ef61141a565b6040516105fc91906131c6565b60405180910390f35b348015610610575f80fd5b5061062b600480360381019061062691906130a3565b611420565b6040516106389190612f53565b60405180910390f35b34801561064c575f80fd5b5061065561143d565b005b348015610662575f80fd5b5061067d60048036038101906106789190613328565b6115e7565b005b34801561068a575f80fd5b506106a560048036038101906106a091906132b2565b6117c9565b005b3480156106b2575f80fd5b506106cd60048036038101906106c891906131df565b611872565b005b3480156106da575f80fd5b506106f560048036038101906106f0919061337b565b611894565b60405161070291906130f0565b60405180910390f35b348015610716575f80fd5b5061071f611916565b60405161072c91906131c6565b60405180910390f35b348015610740575f80fd5b5061075b600480360381019061075691906132fd565b61193a565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107cf57506107ce826119be565b5b9050919050565b60606040518060400160405280600a81526020017f4574686572517565737400000000000000000000000000000000000000000000815250905090565b5f61082661081f611a27565b8484611a2e565b6001905092915050565b60125481565b5f6009600a6108459190613515565b633b9aca00610854919061355f565b905090565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861088381611bf1565b5f61088d30610b21565b9050828110156108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990613610565b60405180910390fd5b6108dd308585611c05565b50505050565b5f6108ef848484611c05565b6109ac846108fb611a27565b6109a7856040518060600160405280602881526020016143da6028913960045f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61095e611a27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546124e59092919063ffffffff16565b611a2e565b600190509392505050565b5f60025f8381526020019081526020015f20600101549050919050565b6109dd826109b7565b6109e681611bf1565b6109f08383612539565b50505050565b5f6009905090565b610a06612623565b5f5b82829050811015610aa1575f60065f858585818110610a2a57610a2961362e565b5b9050602002016020810190610a3f91906132fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610a999061365b565b915050610a08565b505050565b610aae611a27565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b12576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b1c82826126aa565b505050565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b6f612623565b610b785f612794565b565b610b82612623565b6009600a610b909190613515565b633b9aca00610b9f919061355f565b600f819055506009600a610bb39190613515565b633b9aca00610bc2919061355f565b6010819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6009600a610bf79190613515565b633b9aca00610c06919061355f565b604051610c1391906130f0565b60405180910390a1565b600f5481565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08610c4d81611bf1565b5f8211610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906136ec565b60405180910390fd5b610c9830610b21565b821115610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613754565b60405180910390fd5b5f479050610ce783612855565b5f4790505f610cff8383612a9b90919063ffffffff16565b90505f811115610dd3575f7f00000000000000000000000031c6833049b592a5796fb1f3dda771f97023f1c373ffffffffffffffffffffffffffffffffffffffff1682604051610d4e9061379f565b5f6040518083038185875af1925050503d805f8114610d88576040519150601f19603f3d011682016040523d82523d5f602084013e610d8d565b606091505b5050905080610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906137fd565b60405180910390fd5b505b7f42320ac5eaddacbe17123b82a05f9f64577c9365b86dbcc41dda26e86375bc488582604051610e0492919061381b565b60405180910390a15050505050565b610e1b612623565b60148054906101000a900460ff1615610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e609061388c565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f053060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a610ef19190613515565b633b9aca00610f00919061355f565b611a2e565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9391906138be565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611019573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103d91906138be565b6040518363ffffffff1660e01b815260040161105a9291906138e9565b6020604051808303815f875af1158015611076573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109a91906138be565b60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061112130610b21565b5f8061112b6112a6565b426040518863ffffffff1660e01b815260040161114d96959493929190613952565b60606040518083038185885af1158015611169573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061118e91906139c5565b5050506001601460166101000a81548160ff02191690831515021790555060016014806101000a81548160ff02191690831515021790555060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611263929190613a15565b6020604051808303815f875af115801561127f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a39190613a66565b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b7f00000000000000000000000031c6833049b592a5796fb1f3dda771f97023f1c373ffffffffffffffffffffffffffffffffffffffff16611312611a27565b73ffffffffffffffffffffffffffffffffffffffff1614611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613adb565b60405180910390fd5b806007819055508060088190555050565b5f60025f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b60606040518060400160405280600281526020017f4551000000000000000000000000000000000000000000000000000000000000815250905090565b5f801b81565b5f61143361142c611a27565b8484611c05565b6001905092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861146781611bf1565b5f61147130610b21565b90505f81116114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90613b43565b60405180910390fd5b5f4790506114c282612ab0565b5f4790505f82826114d39190613b61565b90505f8111611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613c04565b60405180910390fd5b5f7f00000000000000000000000031c6833049b592a5796fb1f3dda771f97023f1c373ffffffffffffffffffffffffffffffffffffffff168260405161155c9061379f565b5f6040518083038185875af1925050503d805f8114611596576040519150601f19603f3d011682016040523d82523d5f602084013e61159b565b606091505b50509050806115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690613c6c565b60405180910390fd5b505050505050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861161181611bf1565b5f7f00000000000000000000000031c6833049b592a5796fb1f3dda771f97023f1c390508260035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90613cd4565b60405180910390fd5b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90613d62565b60405180910390fd5b5f6117808330876108e3565b9050806117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b990613dca565b60405180910390fd5b5050505050565b6117d1612623565b5f5b8282905081101561186d57600160065f8585858181106117f6576117f561362e565b5b905060200201602081019061180b91906132fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806118659061365b565b9150506117d3565b505050565b61187b826109b7565b61188481611bf1565b61188e83836126aa565b50505050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b611942612623565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119b2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016119a99190613362565b60405180910390fd5b6119bb81612794565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390613e58565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190613ee6565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611be491906130f0565b60405180910390a3505050565b611c0281611bfd611a27565b612d4a565b50565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a90613f74565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614002565b60405180910390fd5b5f8111611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90614090565b60405180910390fd5b5f611d2c6112a6565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611d9a5750611d6a6112a6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156122355760065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611e3d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b611e45575f80fd5b611e816064611e73600b54600e5411611e6057600754611e64565b6009545b85612d9b90919063ffffffff16565b612db090919063ffffffff16565b905060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611f2c575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611f7f575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561203957600f54821115611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc0906140f8565b60405180910390fd5b60105482611fd685610b21565b611fe09190614116565b1115612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890614193565b60405180910390fd5b600e5f8154809291906120339061365b565b91905055505b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156120c157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156121055761210260646120f4600c54600e54116120e1576008546120e5565b600a545b85612d9b90919063ffffffff16565b612db090919063ffffffff16565b90505b5f61210f30610b21565b9050601460159054906101000a900460ff1615801561217a575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121925750601460169054906101000a900460ff165b801561219f575060115481115b80156121ae5750600d54600e54115b156122335760155443116121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90614193565b60405180910390fd5b61221461220f8461220a84601254612dc5565b612dc5565b612855565b5f4790505f81111561222a5761222947612ddd565b5b43601581905550505b505b5f8111156123345761228d8160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e4490919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161232b91906130f0565b60405180910390a35b6123848260035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a9b90919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506124276123db8284612a9b90919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e4490919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6124ca8486612a9b90919063ffffffff16565b6040516124d791906130f0565b60405180910390a350505050565b5f83831115829061252c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125239190612ff6565b60405180910390fd5b5082840390509392505050565b5f6125448383611379565b61261957600160025f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506125b6611a27565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001905061261d565b5f90505b92915050565b61262b611a27565b73ffffffffffffffffffffffffffffffffffffffff166126496112a6565b73ffffffffffffffffffffffffffffffffffffffff16146126a85761266c611a27565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161269f9190613362565b60405180910390fd5b565b5f6126b58383611379565b1561278a575f60025f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550612727611a27565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001905061278e565b5f90505b92915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61285d612e59565b5f600267ffffffffffffffff811115612879576128786141b1565b5b6040519080825280602002602001820160405280156128a75781602001602082028036833780820191505090505b50905030815f815181106128be576128bd61362e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612962573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061298691906138be565b8160018151811061299a5761299961362e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a003060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a2e565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a62959493929190614295565b5f604051808303815f87803b158015612a79575f80fd5b505af1158015612a8b573d5f803e3d5ffd5b5050505050612a98612ea8565b50565b5f8183612aa89190613b61565b905092915050565b5f600267ffffffffffffffff811115612acc57612acb6141b1565b5b604051908082528060200260200182016040528015612afa5781602001602082028036833780820191505090505b50905030815f81518110612b1157612b1061362e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bd991906138be565b81600181518110612bed57612bec61362e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c533060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a2e565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612cb5959493929190614295565b5f604051808303815f87803b158015612ccc575f80fd5b505af1158015612cde573d5f803e3d5ffd5b505050507f00000000000000000000000031c6833049b592a5796fb1f3dda771f97023f1c373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015612d45573d5f803e3d5ffd5b505050565b612d548282611379565b612d975780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401612d8e9291906142ed565b60405180910390fd5b5050565b5f8183612da8919061355f565b905092915050565b5f8183612dbd9190614341565b905092915050565b5f818310612dd35781612dd5565b825b905092915050565b7f00000000000000000000000031c6833049b592a5796fb1f3dda771f97023f1c373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612e40573d5f803e3d5ffd5b5050565b5f8183612e519190614116565b905092915050565b600260015403612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e95906143bb565b60405180910390fd5b6002600181905550565b60018081905550565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612eed81612eb9565b8114612ef7575f80fd5b50565b5f81359050612f0881612ee4565b92915050565b5f60208284031215612f2357612f22612eb1565b5b5f612f3084828501612efa565b91505092915050565b5f8115159050919050565b612f4d81612f39565b82525050565b5f602082019050612f665f830184612f44565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612fa3578082015181840152602081019050612f88565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612fc882612f6c565b612fd28185612f76565b9350612fe2818560208601612f86565b612feb81612fae565b840191505092915050565b5f6020820190508181035f83015261300e8184612fbe565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61303f82613016565b9050919050565b61304f81613035565b8114613059575f80fd5b50565b5f8135905061306a81613046565b92915050565b5f819050919050565b61308281613070565b811461308c575f80fd5b50565b5f8135905061309d81613079565b92915050565b5f80604083850312156130b9576130b8612eb1565b5b5f6130c68582860161305c565b92505060206130d78582860161308f565b9150509250929050565b6130ea81613070565b82525050565b5f6020820190506131035f8301846130e1565b92915050565b5f805f606084860312156131205761311f612eb1565b5b5f61312d8682870161305c565b935050602061313e8682870161305c565b925050604061314f8682870161308f565b9150509250925092565b5f819050919050565b61316b81613159565b8114613175575f80fd5b50565b5f8135905061318681613162565b92915050565b5f602082840312156131a1576131a0612eb1565b5b5f6131ae84828501613178565b91505092915050565b6131c081613159565b82525050565b5f6020820190506131d95f8301846131b7565b92915050565b5f80604083850312156131f5576131f4612eb1565b5b5f61320285828601613178565b92505060206132138582860161305c565b9150509250929050565b5f60ff82169050919050565b6132328161321d565b82525050565b5f60208201905061324b5f830184613229565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261327257613271613251565b5b8235905067ffffffffffffffff81111561328f5761328e613255565b5b6020830191508360208202830111156132ab576132aa613259565b5b9250929050565b5f80602083850312156132c8576132c7612eb1565b5b5f83013567ffffffffffffffff8111156132e5576132e4612eb5565b5b6132f18582860161325d565b92509250509250929050565b5f6020828403121561331257613311612eb1565b5b5f61331f8482850161305c565b91505092915050565b5f6020828403121561333d5761333c612eb1565b5b5f61334a8482850161308f565b91505092915050565b61335c81613035565b82525050565b5f6020820190506133755f830184613353565b92915050565b5f806040838503121561339157613390612eb1565b5b5f61339e8582860161305c565b92505060206133af8582860161305c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561343b57808604811115613417576134166133b9565b5b60018516156134265780820291505b8081029050613434856133e6565b94506133fb565b94509492505050565b5f82613453576001905061350e565b81613460575f905061350e565b81600181146134765760028114613480576134af565b600191505061350e565b60ff841115613492576134916133b9565b5b8360020a9150848211156134a9576134a86133b9565b5b5061350e565b5060208310610133831016604e8410600b84101617156134e45782820a9050838111156134df576134de6133b9565b5b61350e565b6134f184848460016133f2565b92509050818404811115613508576135076133b9565b5b81810290505b9392505050565b5f61351f82613070565b915061352a8361321d565b92506135577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613444565b905092915050565b5f61356982613070565b915061357483613070565b925082820261358281613070565b91508282048414831517613599576135986133b9565b5b5092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f5f8201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b5f6135fa602683612f76565b9150613605826135a0565b604082019050919050565b5f6020820190508181035f830152613627816135ee565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61366582613070565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613697576136966133b9565b5b600182019050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6136d6602083612f76565b91506136e1826136a2565b602082019050919050565b5f6020820190508181035f830152613703816136ca565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f61373e601d83612f76565b91506137498261370a565b602082019050919050565b5f6020820190508181035f83015261376b81613732565b9050919050565b5f81905092915050565b50565b5f61378a5f83613772565b91506137958261377c565b5f82019050919050565b5f6137a98261377f565b9150819050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f6137e7601283612f76565b91506137f2826137b3565b602082019050919050565b5f6020820190508181035f830152613814816137db565b9050919050565b5f60408201905061382e5f8301856130e1565b61383b60208301846130e1565b9392505050565b7f54726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613876601783612f76565b915061388182613842565b602082019050919050565b5f6020820190508181035f8301526138a38161386a565b9050919050565b5f815190506138b881613046565b92915050565b5f602082840312156138d3576138d2612eb1565b5b5f6138e0848285016138aa565b91505092915050565b5f6040820190506138fc5f830185613353565b6139096020830184613353565b9392505050565b5f819050919050565b5f819050919050565b5f61393c61393761393284613910565b613919565b613070565b9050919050565b61394c81613922565b82525050565b5f60c0820190506139655f830189613353565b61397260208301886130e1565b61397f6040830187613943565b61398c6060830186613943565b6139996080830185613353565b6139a660a08301846130e1565b979650505050505050565b5f815190506139bf81613079565b92915050565b5f805f606084860312156139dc576139db612eb1565b5b5f6139e9868287016139b1565b93505060206139fa868287016139b1565b9250506040613a0b868287016139b1565b9150509250925092565b5f604082019050613a285f830185613353565b613a3560208301846130e1565b9392505050565b613a4581612f39565b8114613a4f575f80fd5b50565b5f81519050613a6081613a3c565b92915050565b5f60208284031215613a7b57613a7a612eb1565b5b5f613a8884828501613a52565b91505092915050565b7f4f6e6c79206465706c6f7965722063616e2075706461746520666565730000005f82015250565b5f613ac5601d83612f76565b9150613ad082613a91565b602082019050919050565b5f6020820190508181035f830152613af281613ab9565b9050919050565b7f4e6f20746f6b656e2062616c616e636520746f20636f6e7665727400000000005f82015250565b5f613b2d601b83612f76565b9150613b3882613af9565b602082019050919050565b5f6020820190508181035f830152613b5a81613b21565b9050919050565b5f613b6b82613070565b9150613b7683613070565b9250828203905081811115613b8e57613b8d6133b9565b5b92915050565b7f4e6f20455448206761696e65642066726f6d207377617020746f2077697468645f8201527f7261770000000000000000000000000000000000000000000000000000000000602082015250565b5f613bee602383612f76565b9150613bf982613b94565b604082019050919050565b5f6020820190508181035f830152613c1b81613be2565b9050919050565b7f4661696c656420746f20776974686472617720455448000000000000000000005f82015250565b5f613c56601683612f76565b9150613c6182613c22565b602082019050919050565b5f6020820190508181035f830152613c8381613c4a565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e63650000000000005f82015250565b5f613cbe601a83612f76565b9150613cc982613c8a565b602082019050919050565b5f6020820190508181035f830152613ceb81613cb2565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e636520666f72207472616e735f8201527f6665720000000000000000000000000000000000000000000000000000000000602082015250565b5f613d4c602383612f76565b9150613d5782613cf2565b604082019050919050565b5f6020820190508181035f830152613d7981613d40565b9050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f613db4600f83612f76565b9150613dbf82613d80565b602082019050919050565b5f6020820190508181035f830152613de181613da8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613e42602483612f76565b9150613e4d82613de8565b604082019050919050565b5f6020820190508181035f830152613e6f81613e36565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ed0602283612f76565b9150613edb82613e76565b604082019050919050565b5f6020820190508181035f830152613efd81613ec4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613f5e602583612f76565b9150613f6982613f04565b604082019050919050565b5f6020820190508181035f830152613f8b81613f52565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613fec602383612f76565b9150613ff782613f92565b604082019050919050565b5f6020820190508181035f83015261401981613fe0565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f61407a602983612f76565b915061408582614020565b604082019050919050565b5f6020820190508181035f8301526140a78161406e565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e000000000000005f82015250565b5f6140e2601983612f76565b91506140ed826140ae565b602082019050919050565b5f6020820190508181035f83015261410f816140d6565b9050919050565b5f61412082613070565b915061412b83613070565b9250828201905080821115614143576141426133b9565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f61417d601a83612f76565b915061418882614149565b602082019050919050565b5f6020820190508181035f8301526141aa81614171565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61421081613035565b82525050565b5f6142218383614207565b60208301905092915050565b5f602082019050919050565b5f614243826141de565b61424d81856141e8565b9350614258836141f8565b805f5b8381101561428857815161426f8882614216565b975061427a8361422d565b92505060018101905061425b565b5085935050505092915050565b5f60a0820190506142a85f8301886130e1565b6142b56020830187613943565b81810360408301526142c78186614239565b90506142d66060830185613353565b6142e360808301846130e1565b9695505050505050565b5f6040820190506143005f830185613353565b61430d60208301846131b7565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61434b82613070565b915061435683613070565b92508261436657614365614314565b5b828204905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6143a5601f83612f76565b91506143b082614371565b602082019050919050565b5f6020820190508181035f8301526143d281614399565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220fea31090688c97212c5abca23a5351b3b64041b3b1ac3974cfa64c246ad863bf64736f6c63430008140033
Deployed Bytecode Sourcemap
31810:10793:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21851:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33959:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34617:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33036:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34236:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40437:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34961:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23131:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23563:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34145:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39314:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24700:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34339:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28822:103;;;;;;;;;;;;;:::i;:::-;;38860:159;;;;;;;;;;;;;:::i;:::-;;32845:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41907:693;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39494:673;;;;;;;;;;;;;:::i;:::-;;28147:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32906:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40175:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22147:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34050:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21459:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34786:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41254:645;;;;;;;;;;;;;:::i;:::-;;40770:476;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39138:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23994:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34466:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31922:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29080:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21851:204;21936:4;21975:32;21960:47;;;:11;:47;;;;:87;;;;22011:36;22035:11;22011:23;:36::i;:::-;21960:87;21953:94;;21851:204;;;:::o;33959:83::-;33996:13;34029:5;;;;;;;;;;;;;;;;;34022:12;;33959:83;:::o;34617:161::-;34692:4;34709:39;34718:12;:10;:12::i;:::-;34732:7;34741:6;34709:8;:39::i;:::-;34766:4;34759:11;;34617:161;;;;:::o;33036:52::-;;;;:::o;34236:95::-;34289:7;32650:1;32715:2;:13;;;;:::i;:::-;32702:10;:26;;;;:::i;:::-;34309:14;;34236:95;:::o;40437:325::-;31961:25;21743:16;21754:4;21743:10;:16::i;:::-;40543:28:::1;40574:24;40592:4;40574:9;:24::i;:::-;40543:55;;40641:11;40617:20;:35;;40609:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;40706:48;40724:4;40731:9;40742:11;40706:9;:48::i;:::-;40532:230;40437:325:::0;;;:::o;34961:313::-;35059:4;35076:36;35086:6;35094:9;35105:6;35076:9;:36::i;:::-;35123:121;35132:6;35140:12;:10;:12::i;:::-;35154:89;35192:6;35154:89;;;;;;;;;;;;;;;;;:11;:19;35166:6;35154:19;;;;;;;;;;;;;;;:33;35174:12;:10;:12::i;:::-;35154:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;35123:8;:121::i;:::-;35262:4;35255:11;;34961:313;;;;;:::o;23131:122::-;23196:7;23223:6;:12;23230:4;23223:12;;;;;;;;;;;:22;;;23216:29;;23131:122;;;:::o;23563:138::-;23637:18;23650:4;23637:12;:18::i;:::-;21743:16;21754:4;21743:10;:16::i;:::-;23668:25:::1;23679:4;23685:7;23668:10;:25::i;:::-;;23563:138:::0;;;:::o;34145:83::-;34186:5;32650:1;34204:16;;34145:83;:::o;39314:172::-;28033:13;:11;:13::i;:::-;39393:6:::1;39388:91;39409:6;;:13;;39405:1;:17;39388:91;;;39462:5;39444:4;:15;39449:6;;39456:1;39449:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39444:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;39424:3;;;;;:::i;:::-;;;;39388:91;;;;39314:172:::0;;:::o;24700:251::-;24816:12;:10;:12::i;:::-;24794:34;;:18;:34;;;24790:104;;24852:30;;;;;;;;;;;;;;24790:104;24906:37;24918:4;24924:18;24906:11;:37::i;:::-;;24700:251;;:::o;34339:119::-;34405:7;34432:9;:18;34442:7;34432:18;;;;;;;;;;;;;;;;34425:25;;34339:119;;;:::o;28822:103::-;28033:13;:11;:13::i;:::-;28887:30:::1;28914:1;28887:18;:30::i;:::-;28822:103::o:0;38860:159::-;28033:13;:11;:13::i;:::-;32650:1:::1;32715:2;:13;;;;:::i;:::-;32702:10;:26;;;;:::i;:::-;38913:12;:22;;;;32650:1;32715:2;:13;;;;:::i;:::-;32702:10;:26;;;;:::i;:::-;38946:14;:22;;;;38984:27;32650:1;32715:2;:13;;;;:::i;:::-;32702:10;:26;;;;:::i;:::-;38984:27;;;;;;:::i;:::-;;;;;;;;38860:159::o:0;32845:54::-;;;;:::o;41907:693::-;31961:25;21743:16;21754:4;21743:10;:16::i;:::-;42018:1:::1;42004:11;:15;41996:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42090:24;42108:4;42090:9;:24::i;:::-;42075:11;:39;;42067:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42159:22;42184:21;42159:46;;42216:29;42233:11;42216:16;:29::i;:::-;42256:18;42277:21;42256:42;;42309:19;42331:30;42346:14;42331:10;:14;;:30;;;;:::i;:::-;42309:52;;42390:1;42376:11;:15;42372:158;;;42409:9;42424:15;:20;;42452:11;42424:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42408:60;;;42491:4;42483:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;42393:137;42372:158;42547:45;42567:11;42580;42547:45;;;;;;;:::i;:::-;;;;;;;;41985:615;;;41907:693:::0;;:::o;39494:673::-;28033:13;:11;:13::i;:::-;39560:11:::1;::::0;::::1;;;;;;;;39559:12;39551:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;39646:42;39609:15;;:80;;;;;;;;;;;;;;;;;;39700:58;39717:4;39732:15;;;;;;;;;;;32650:1;32715:2;:13;;;;:::i;:::-;32702:10;:26;;;;:::i;:::-;39700:8;:58::i;:::-;39803:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39785:55;;;39849:4;39856:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39785:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39769:13;;:110;;;;;;;;;;;;;;;;;;39890:15;;;;;;;;;;;:31;;;39929:21;39960:4;39966:24;39984:4;39966:9;:24::i;:::-;39991:1;39993::::0;39995:7:::1;:5;:7::i;:::-;40003:15;39890:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40044:4;40030:11;;:18;;;;;;;;;;;;;;;;;;40073:4;40059:11;::::0;:18:::1;;;;;;;;;;;;;;;;;;40095:13;;;;;;;;;;;40088:29;;;40126:15;;;;;;;;;;;40144:14;40088:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39494:673::o:0;28147:87::-;28193:7;28220:6;;;;;;;;;;;28213:13;;28147:87;:::o;32906:56::-;;;;:::o;40175:210::-;40255:15;40239:31;;:12;:10;:12::i;:::-;:31;;;40231:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40332:7;40315:14;:24;;;;40368:7;40350:15;:25;;;;40175:210;:::o;22147:138::-;22224:4;22248:6;:12;22255:4;22248:12;;;;;;;;;;;:20;;:29;22269:7;22248:29;;;;;;;;;;;;;;;;;;;;;;;;;22241:36;;22147:138;;;;:::o;34050:87::-;34089:13;34122:7;;;;;;;;;;;;;;;;;34115:14;;34050:87;:::o;21459:49::-;21504:4;21459:49;;;:::o;34786:167::-;34864:4;34881:42;34891:12;:10;:12::i;:::-;34905:9;34916:6;34881:9;:42::i;:::-;34941:4;34934:11;;34786:167;;;;:::o;41254:645::-;31961:25;21743:16;21754:4;21743:10;:16::i;:::-;41330:28:::1;41361:24;41379:4;41361:9;:24::i;:::-;41330:55;;41427:1;41404:20;:24;41396:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41471:22;41496:21;41471:46;;41528:55;41562:20;41528:33;:55::i;:::-;41594:18;41615:21;41594:42;;41647:19;41682:14;41669:10;:27;;;;:::i;:::-;41647:49;;41729:1;41715:11;:15;41707:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41782:9;41797:15;:20;;41825:11;41797:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41781:60;;;41860:4;41852:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41319:580;;;;;41254:645:::0;:::o;40770:476::-;31961:25;21743:16;21754:4;21743:10;:16::i;:::-;40854:12:::1;40869:15;40854:30;;40922:11;40903:9;:15;40913:4;40903:15;;;;;;;;;;;;;;;;:30;;40895:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40975:21;40999:11;:17;41011:4;40999:17;;;;;;;;;;;;;;;:32;41025:4;40999:32;;;;;;;;;;;;;;;;40975:56;;41067:11;41050:13;:28;;41042:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41131:12;41146:46;41159:4;41173;41180:11;41146:12;:46::i;:::-;41131:61;;41211:7;41203:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;40843:403;;;40770:476:::0;;:::o;39138:168::-;28033:13;:11;:13::i;:::-;39216:6:::1;39211:88;39232:5;;:12;;39228:1;:16;39211:88;;;39283:4;39266;:14;39271:5;;39277:1;39271:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39266:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39246:3;;;;;:::i;:::-;;;;39211:88;;;;39138:168:::0;;:::o;23994:140::-;24069:18;24082:4;24069:12;:18::i;:::-;21743:16;21754:4;21743:10;:16::i;:::-;24100:26:::1;24112:4;24118:7;24100:11;:26::i;:::-;;23994:140:::0;;;:::o;34466:143::-;34547:7;34574:11;:18;34586:5;34574:18;;;;;;;;;;;;;;;:27;34593:7;34574:27;;;;;;;;;;;;;;;;34567:34;;34466:143;;;;:::o;31922:64::-;31961:25;31922:64;:::o;29080:220::-;28033:13;:11;:13::i;:::-;29185:1:::1;29165:22;;:8;:22;;::::0;29161:93:::1;;29239:1;29211:31;;;;;;;;;;;:::i;:::-;;;;;;;;29161:93;29264:28;29283:8;29264:18;:28::i;:::-;29080:220:::0;:::o;8653:148::-;8729:4;8768:25;8753:40;;;:11;:40;;;;8746:47;;8653:148;;;:::o;19021:98::-;19074:7;19101:10;19094:17;;19021:98;:::o;35288:335::-;35398:1;35381:19;;:5;:19;;;35373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35479:1;35460:21;;:7;:21;;;35452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35561:6;35531:11;:18;35543:5;35531:18;;;;;;;;;;;;;;;:27;35550:7;35531:27;;;;;;;;;;;;;;;:36;;;;35599:7;35583:32;;35592:5;35583:32;;;35608:6;35583:32;;;;;;:::i;:::-;;;;;;;;35288:335;;;:::o;22500:105::-;22567:30;22578:4;22584:12;:10;:12::i;:::-;22567:10;:30::i;:::-;22500:105;:::o;35631:2056::-;35735:1;35719:18;;:4;:18;;;35711:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35812:1;35798:16;;:2;:16;;;35790:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35882:1;35873:6;:10;35865:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35940:17;35982:7;:5;:7::i;:::-;35974:15;;:4;:15;;;;:32;;;;;35999:7;:5;:7::i;:::-;35993:13;;:2;:13;;;;35974:32;35970:1361;;;36032:4;:10;36037:4;36032:10;;;;;;;;;;;;;;;;;;;;;;;;;36031:11;:24;;;;;36047:4;:8;36052:2;36047:8;;;;;;;;;;;;;;;;;;;;;;;;;36046:9;36031:24;36023:33;;;;;;36083:76;36155:3;36083:67;36105:15;;36095:9;;:25;36094:55;;36135:14;;36094:55;;;36122:12;;36094:55;36083:6;:10;;:67;;;;:::i;:::-;:71;;:76;;;;:::i;:::-;36071:88;;36188:13;;;;;;;;;;;36180:21;;:4;:21;;;:55;;;;;36219:15;;;;;;;;;;;36205:30;;:2;:30;;;;36180:55;:83;;;;;36241:18;:22;36260:2;36241:22;;;;;;;;;;;;;;;;;;;;;;;;;36239:24;36180:83;36176:313;;;36303:12;;36293:6;:22;;36285:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36398:14;;36388:6;36372:13;36382:2;36372:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;36364:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;36462:9;;:11;;;;;;;;;:::i;:::-;;;;;;36176:313;36514:13;;;;;;;;;;;36508:19;;:2;:19;;;:43;;;;;36546:4;36531:20;;:4;:20;;;;36508:43;36505:174;;;36584:79;36659:3;36584:70;36606:16;;36596:9;;:26;36595:58;;36638:15;;36595:58;;;36624:13;;36595:58;36584:6;:10;;:70;;;;:::i;:::-;:74;;:79;;;;:::i;:::-;36572:91;;36505:174;36695:28;36726:24;36744:4;36726:9;:24::i;:::-;36695:55;;36770:6;;;;;;;;;;;36769:7;:30;;;;;36786:13;;;;;;;;;;;36780:19;;:2;:19;;;36769:30;:45;;;;;36803:11;;;;;;;;;;;36769:45;:89;;;;;36841:17;;36818:20;:40;36769:89;:123;;;;;36874:18;;36862:9;;:30;36769:123;36765:555;;;36932:23;;36917:12;:38;36909:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;37001:69;37018:51;37022:6;37030:38;37034:20;37056:11;;37030:3;:38::i;:::-;37018:3;:51::i;:::-;37001:16;:69::i;:::-;37085:26;37114:21;37085:50;;37175:1;37154:18;:22;37150:98;;;37197:35;37210:21;37197:12;:35::i;:::-;37150:98;37292:12;37266:23;:38;;;;36894:426;36765:555;36008:1323;35970:1361;37356:1;37346:9;:11;37343:161;;;37396:39;37425:9;37396;:24;37414:4;37396:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;37371:9;:24;37389:4;37371:24;;;;;;;;;;;;;;;:64;;;;37476:4;37453:39;;37462:4;37453:39;;;37482:9;37453:39;;;;;;:::i;:::-;;;;;;;;37343:161;37530:27;37550:6;37530:9;:15;37540:4;37530:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;37514:9;:15;37524:4;37514:15;;;;;;;;;;;;;;;:43;;;;37582:40;37600:21;37611:9;37600:6;:10;;:21;;;;:::i;:::-;37582:9;:13;37592:2;37582:13;;;;;;;;;;;;;;;;:17;;:40;;;;:::i;:::-;37568:9;:13;37578:2;37568:13;;;;;;;;;;;;;;;:54;;;;37653:2;37638:41;;37647:4;37638:41;;;37657:21;37668:9;37657:6;:10;;:21;;;;:::i;:::-;37638:41;;;;;;:::i;:::-;;;;;;;;35700:1987;35631:2056;;;:::o;5155:206::-;5241:7;5299:1;5294;:6;;5302:12;5286:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5341:1;5337;:5;5330:12;;5155:206;;;;;:::o;25577:324::-;25654:4;25676:22;25684:4;25690:7;25676;:22::i;:::-;25671:223;;25747:4;25715:6;:12;25722:4;25715:12;;;;;;;;;;;:20;;:29;25736:7;25715:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;25798:12;:10;:12::i;:::-;25771:40;;25789:7;25771:40;;25783:4;25771:40;;;;;;;;;;25833:4;25826:11;;;;25671:223;25877:5;25870:12;;25577:324;;;;;:::o;28312:166::-;28383:12;:10;:12::i;:::-;28372:23;;:7;:5;:7::i;:::-;:23;;;28368:103;;28446:12;:10;:12::i;:::-;28419:40;;;;;;;;;;;:::i;:::-;;;;;;;;28368:103;28312:166::o;26145:325::-;26223:4;26244:22;26252:4;26258:7;26244;:22::i;:::-;26240:223;;;26315:5;26283:6;:12;26290:4;26283:12;;;;;;;;;;;:20;;:29;26304:7;26283:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;26367:12;:10;:12::i;:::-;26340:40;;26358:7;26340:40;;26352:4;26340:40;;;;;;;;;;26402:4;26395:11;;;;26240:223;26446:5;26439:12;;26145:325;;;;;:::o;29460:191::-;29534:16;29553:6;;;;;;;;;;;29534:25;;29579:8;29570:6;;:17;;;;;;;;;;;;;;;;;;29634:8;29603:40;;29624:8;29603:40;;;;;;;;;;;;29523:128;29460:191;:::o;38368:484::-;14543:21;:19;:21::i;:::-;38447::::1;38485:1;38471:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38447:40;;38516:4;38498;38503:1;38498:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38542:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38532:4;38537:1;38532:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;38575:62;38592:4;38607:15;;;;;;;;;;;38625:11;38575:8;:62::i;:::-;38648:15;;;;;;;;;;;:66;;;38729:11;38755:1;38771:4;38798;38818:15;38648:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38436:416;14587:20:::0;:18;:20::i;:::-;38368:484;:::o;3257:98::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;37810:550::-;37893:21;37931:1;37917:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37893:40;;37962:4;37944;37949:1;37944:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37988:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37978:4;37983:1;37978:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38021:62;38038:4;38053:15;;;;;;;;;;;38071:11;38021:8;:62::i;:::-;38094:15;;;;;;;;;;;:66;;;38171:11;38197:1;38213:4;38240;38260:15;38094:192;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38303:15;:24;;:47;38328:21;38303:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37882:478;37810:550;:::o;22741:201::-;22830:22;22838:4;22844:7;22830;:22::i;:::-;22825:110;;22909:7;22918:4;22876:47;;;;;;;;;;;;:::i;:::-;;;;;;;;22825:110;22741:201;;:::o;3614:98::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;4013:::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;37697:105::-;37754:7;37785:1;37781;:5;:13;;37793:1;37781:13;;;37789:1;37781:13;37774:20;;37697:105;;;;:::o;39027:103::-;39084:15;:24;;:32;39109:6;39084:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39027:103;:::o;2876:98::-;2934:7;2965:1;2961;:5;;;;:::i;:::-;2954:12;;2876:98;;;;:::o;14623:293::-;14025:1;14757:7;;:19;14749:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14025:1;14890:7;:18;;;;14623:293::o;14924:213::-;13981:1;15107:7;:22;;;;14924:213::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:126::-;2897:7;2937:42;2930:5;2926:54;2915:65;;2860:126;;;:::o;2992:96::-;3029:7;3058:24;3076:5;3058:24;:::i;:::-;3047:35;;2992:96;;;:::o;3094:122::-;3167:24;3185:5;3167:24;:::i;:::-;3160:5;3157:35;3147:63;;3206:1;3203;3196:12;3147:63;3094:122;:::o;3222:139::-;3268:5;3306:6;3293:20;3284:29;;3322:33;3349:5;3322:33;:::i;:::-;3222:139;;;;:::o;3367:77::-;3404:7;3433:5;3422:16;;3367:77;;;:::o;3450:122::-;3523:24;3541:5;3523:24;:::i;:::-;3516:5;3513:35;3503:63;;3562:1;3559;3552:12;3503:63;3450:122;:::o;3578:139::-;3624:5;3662:6;3649:20;3640:29;;3678:33;3705:5;3678:33;:::i;:::-;3578:139;;;;:::o;3723:474::-;3791:6;3799;3848:2;3836:9;3827:7;3823:23;3819:32;3816:119;;;3854:79;;:::i;:::-;3816:119;3974:1;3999:53;4044:7;4035:6;4024:9;4020:22;3999:53;:::i;:::-;3989:63;;3945:117;4101:2;4127:53;4172:7;4163:6;4152:9;4148:22;4127:53;:::i;:::-;4117:63;;4072:118;3723:474;;;;;:::o;4203:118::-;4290:24;4308:5;4290:24;:::i;:::-;4285:3;4278:37;4203:118;;:::o;4327:222::-;4420:4;4458:2;4447:9;4443:18;4435:26;;4471:71;4539:1;4528:9;4524:17;4515:6;4471:71;:::i;:::-;4327:222;;;;:::o;4555:619::-;4632:6;4640;4648;4697:2;4685:9;4676:7;4672:23;4668:32;4665:119;;;4703:79;;:::i;:::-;4665:119;4823:1;4848:53;4893:7;4884:6;4873:9;4869:22;4848:53;:::i;:::-;4838:63;;4794:117;4950:2;4976:53;5021:7;5012:6;5001:9;4997:22;4976:53;:::i;:::-;4966:63;;4921:118;5078:2;5104:53;5149:7;5140:6;5129:9;5125:22;5104:53;:::i;:::-;5094:63;;5049:118;4555:619;;;;;:::o;5180:77::-;5217:7;5246:5;5235:16;;5180:77;;;:::o;5263:122::-;5336:24;5354:5;5336:24;:::i;:::-;5329:5;5326:35;5316:63;;5375:1;5372;5365:12;5316:63;5263:122;:::o;5391:139::-;5437:5;5475:6;5462:20;5453:29;;5491:33;5518:5;5491:33;:::i;:::-;5391:139;;;;:::o;5536:329::-;5595:6;5644:2;5632:9;5623:7;5619:23;5615:32;5612:119;;;5650:79;;:::i;:::-;5612:119;5770:1;5795:53;5840:7;5831:6;5820:9;5816:22;5795:53;:::i;:::-;5785:63;;5741:117;5536:329;;;;:::o;5871:118::-;5958:24;5976:5;5958:24;:::i;:::-;5953:3;5946:37;5871:118;;:::o;5995:222::-;6088:4;6126:2;6115:9;6111:18;6103:26;;6139:71;6207:1;6196:9;6192:17;6183:6;6139:71;:::i;:::-;5995:222;;;;:::o;6223:474::-;6291:6;6299;6348:2;6336:9;6327:7;6323:23;6319:32;6316:119;;;6354:79;;:::i;:::-;6316:119;6474:1;6499:53;6544:7;6535:6;6524:9;6520:22;6499:53;:::i;:::-;6489:63;;6445:117;6601:2;6627:53;6672:7;6663:6;6652:9;6648:22;6627:53;:::i;:::-;6617:63;;6572:118;6223:474;;;;;:::o;6703:86::-;6738:7;6778:4;6771:5;6767:16;6756:27;;6703:86;;;:::o;6795:112::-;6878:22;6894:5;6878:22;:::i;:::-;6873:3;6866:35;6795:112;;:::o;6913:214::-;7002:4;7040:2;7029:9;7025:18;7017:26;;7053:67;7117:1;7106:9;7102:17;7093:6;7053:67;:::i;:::-;6913:214;;;;:::o;7133:117::-;7242:1;7239;7232:12;7256:117;7365:1;7362;7355:12;7379:117;7488:1;7485;7478:12;7519:568;7592:8;7602:6;7652:3;7645:4;7637:6;7633:17;7629:27;7619:122;;7660:79;;:::i;:::-;7619:122;7773:6;7760:20;7750:30;;7803:18;7795:6;7792:30;7789:117;;;7825:79;;:::i;:::-;7789:117;7939:4;7931:6;7927:17;7915:29;;7993:3;7985:4;7977:6;7973:17;7963:8;7959:32;7956:41;7953:128;;;8000:79;;:::i;:::-;7953:128;7519:568;;;;;:::o;8093:559::-;8179:6;8187;8236:2;8224:9;8215:7;8211:23;8207:32;8204:119;;;8242:79;;:::i;:::-;8204:119;8390:1;8379:9;8375:17;8362:31;8420:18;8412:6;8409:30;8406:117;;;8442:79;;:::i;:::-;8406:117;8555:80;8627:7;8618:6;8607:9;8603:22;8555:80;:::i;:::-;8537:98;;;;8333:312;8093:559;;;;;:::o;8658:329::-;8717:6;8766:2;8754:9;8745:7;8741:23;8737:32;8734:119;;;8772:79;;:::i;:::-;8734:119;8892:1;8917:53;8962:7;8953:6;8942:9;8938:22;8917:53;:::i;:::-;8907:63;;8863:117;8658:329;;;;:::o;8993:::-;9052:6;9101:2;9089:9;9080:7;9076:23;9072:32;9069:119;;;9107:79;;:::i;:::-;9069:119;9227:1;9252:53;9297:7;9288:6;9277:9;9273:22;9252:53;:::i;:::-;9242:63;;9198:117;8993:329;;;;:::o;9328:118::-;9415:24;9433:5;9415:24;:::i;:::-;9410:3;9403:37;9328:118;;:::o;9452:222::-;9545:4;9583:2;9572:9;9568:18;9560:26;;9596:71;9664:1;9653:9;9649:17;9640:6;9596:71;:::i;:::-;9452:222;;;;:::o;9680:474::-;9748:6;9756;9805:2;9793:9;9784:7;9780:23;9776:32;9773:119;;;9811:79;;:::i;:::-;9773:119;9931:1;9956:53;10001:7;9992:6;9981:9;9977:22;9956:53;:::i;:::-;9946:63;;9902:117;10058:2;10084:53;10129:7;10120:6;10109:9;10105:22;10084:53;:::i;:::-;10074:63;;10029:118;9680:474;;;;;:::o;10160:180::-;10208:77;10205:1;10198:88;10305:4;10302:1;10295:15;10329:4;10326:1;10319:15;10346:102;10388:8;10435:5;10432:1;10428:13;10407:34;;10346:102;;;:::o;10454:848::-;10515:5;10522:4;10546:6;10537:15;;10570:5;10561:14;;10584:712;10605:1;10595:8;10592:15;10584:712;;;10700:4;10695:3;10691:14;10685:4;10682:24;10679:50;;;10709:18;;:::i;:::-;10679:50;10759:1;10749:8;10745:16;10742:451;;;11174:4;11167:5;11163:16;11154:25;;10742:451;11224:4;11218;11214:15;11206:23;;11254:32;11277:8;11254:32;:::i;:::-;11242:44;;10584:712;;;10454:848;;;;;;;:::o;11308:1073::-;11362:5;11553:8;11543:40;;11574:1;11565:10;;11576:5;;11543:40;11602:4;11592:36;;11619:1;11610:10;;11621:5;;11592:36;11688:4;11736:1;11731:27;;;;11772:1;11767:191;;;;11681:277;;11731:27;11749:1;11740:10;;11751:5;;;11767:191;11812:3;11802:8;11799:17;11796:43;;;11819:18;;:::i;:::-;11796:43;11868:8;11865:1;11861:16;11852:25;;11903:3;11896:5;11893:14;11890:40;;;11910:18;;:::i;:::-;11890:40;11943:5;;;11681:277;;12067:2;12057:8;12054:16;12048:3;12042:4;12039:13;12035:36;12017:2;12007:8;12004:16;11999:2;11993:4;11990:12;11986:35;11970:111;11967:246;;;12123:8;12117:4;12113:19;12104:28;;12158:3;12151:5;12148:14;12145:40;;;12165:18;;:::i;:::-;12145:40;12198:5;;11967:246;12238:42;12276:3;12266:8;12260:4;12257:1;12238:42;:::i;:::-;12223:57;;;;12312:4;12307:3;12303:14;12296:5;12293:25;12290:51;;;12321:18;;:::i;:::-;12290:51;12370:4;12363:5;12359:16;12350:25;;11308:1073;;;;;;:::o;12387:281::-;12445:5;12469:23;12487:4;12469:23;:::i;:::-;12461:31;;12513:25;12529:8;12513:25;:::i;:::-;12501:37;;12557:104;12594:66;12584:8;12578:4;12557:104;:::i;:::-;12548:113;;12387:281;;;;:::o;12674:410::-;12714:7;12737:20;12755:1;12737:20;:::i;:::-;12732:25;;12771:20;12789:1;12771:20;:::i;:::-;12766:25;;12826:1;12823;12819:9;12848:30;12866:11;12848:30;:::i;:::-;12837:41;;13027:1;13018:7;13014:15;13011:1;13008:22;12988:1;12981:9;12961:83;12938:139;;13057:18;;:::i;:::-;12938:139;12722:362;12674:410;;;;:::o;13090:225::-;13230:34;13226:1;13218:6;13214:14;13207:58;13299:8;13294:2;13286:6;13282:15;13275:33;13090:225;:::o;13321:366::-;13463:3;13484:67;13548:2;13543:3;13484:67;:::i;:::-;13477:74;;13560:93;13649:3;13560:93;:::i;:::-;13678:2;13673:3;13669:12;13662:19;;13321:366;;;:::o;13693:419::-;13859:4;13897:2;13886:9;13882:18;13874:26;;13946:9;13940:4;13936:20;13932:1;13921:9;13917:17;13910:47;13974:131;14100:4;13974:131;:::i;:::-;13966:139;;13693:419;;;:::o;14118:180::-;14166:77;14163:1;14156:88;14263:4;14260:1;14253:15;14287:4;14284:1;14277:15;14304:233;14343:3;14366:24;14384:5;14366:24;:::i;:::-;14357:33;;14412:66;14405:5;14402:77;14399:103;;14482:18;;:::i;:::-;14399:103;14529:1;14522:5;14518:13;14511:20;;14304:233;;;:::o;14543:182::-;14683:34;14679:1;14671:6;14667:14;14660:58;14543:182;:::o;14731:366::-;14873:3;14894:67;14958:2;14953:3;14894:67;:::i;:::-;14887:74;;14970:93;15059:3;14970:93;:::i;:::-;15088:2;15083:3;15079:12;15072:19;;14731:366;;;:::o;15103:419::-;15269:4;15307:2;15296:9;15292:18;15284:26;;15356:9;15350:4;15346:20;15342:1;15331:9;15327:17;15320:47;15384:131;15510:4;15384:131;:::i;:::-;15376:139;;15103:419;;;:::o;15528:179::-;15668:31;15664:1;15656:6;15652:14;15645:55;15528:179;:::o;15713:366::-;15855:3;15876:67;15940:2;15935:3;15876:67;:::i;:::-;15869:74;;15952:93;16041:3;15952:93;:::i;:::-;16070:2;16065:3;16061:12;16054:19;;15713:366;;;:::o;16085:419::-;16251:4;16289:2;16278:9;16274:18;16266:26;;16338:9;16332:4;16328:20;16324:1;16313:9;16309:17;16302:47;16366:131;16492:4;16366:131;:::i;:::-;16358:139;;16085:419;;;:::o;16510:147::-;16611:11;16648:3;16633:18;;16510:147;;;;:::o;16663:114::-;;:::o;16783:398::-;16942:3;16963:83;17044:1;17039:3;16963:83;:::i;:::-;16956:90;;17055:93;17144:3;17055:93;:::i;:::-;17173:1;17168:3;17164:11;17157:18;;16783:398;;;:::o;17187:379::-;17371:3;17393:147;17536:3;17393:147;:::i;:::-;17386:154;;17557:3;17550:10;;17187:379;;;:::o;17572:168::-;17712:20;17708:1;17700:6;17696:14;17689:44;17572:168;:::o;17746:366::-;17888:3;17909:67;17973:2;17968:3;17909:67;:::i;:::-;17902:74;;17985:93;18074:3;17985:93;:::i;:::-;18103:2;18098:3;18094:12;18087:19;;17746:366;;;:::o;18118:419::-;18284:4;18322:2;18311:9;18307:18;18299:26;;18371:9;18365:4;18361:20;18357:1;18346:9;18342:17;18335:47;18399:131;18525:4;18399:131;:::i;:::-;18391:139;;18118:419;;;:::o;18543:332::-;18664:4;18702:2;18691:9;18687:18;18679:26;;18715:71;18783:1;18772:9;18768:17;18759:6;18715:71;:::i;:::-;18796:72;18864:2;18853:9;18849:18;18840:6;18796:72;:::i;:::-;18543:332;;;;;:::o;18881:173::-;19021:25;19017:1;19009:6;19005:14;18998:49;18881:173;:::o;19060:366::-;19202:3;19223:67;19287:2;19282:3;19223:67;:::i;:::-;19216:74;;19299:93;19388:3;19299:93;:::i;:::-;19417:2;19412:3;19408:12;19401:19;;19060:366;;;:::o;19432:419::-;19598:4;19636:2;19625:9;19621:18;19613:26;;19685:9;19679:4;19675:20;19671:1;19660:9;19656:17;19649:47;19713:131;19839:4;19713:131;:::i;:::-;19705:139;;19432:419;;;:::o;19857:143::-;19914:5;19945:6;19939:13;19930:22;;19961:33;19988:5;19961:33;:::i;:::-;19857:143;;;;:::o;20006:351::-;20076:6;20125:2;20113:9;20104:7;20100:23;20096:32;20093:119;;;20131:79;;:::i;:::-;20093:119;20251:1;20276:64;20332:7;20323:6;20312:9;20308:22;20276:64;:::i;:::-;20266:74;;20222:128;20006:351;;;;:::o;20363:332::-;20484:4;20522:2;20511:9;20507:18;20499:26;;20535:71;20603:1;20592:9;20588:17;20579:6;20535:71;:::i;:::-;20616:72;20684:2;20673:9;20669:18;20660:6;20616:72;:::i;:::-;20363:332;;;;;:::o;20701:85::-;20746:7;20775:5;20764:16;;20701:85;;;:::o;20792:60::-;20820:3;20841:5;20834:12;;20792:60;;;:::o;20858:158::-;20916:9;20949:61;20967:42;20976:32;21002:5;20976:32;:::i;:::-;20967:42;:::i;:::-;20949:61;:::i;:::-;20936:74;;20858:158;;;:::o;21022:147::-;21117:45;21156:5;21117:45;:::i;:::-;21112:3;21105:58;21022:147;;:::o;21175:807::-;21424:4;21462:3;21451:9;21447:19;21439:27;;21476:71;21544:1;21533:9;21529:17;21520:6;21476:71;:::i;:::-;21557:72;21625:2;21614:9;21610:18;21601:6;21557:72;:::i;:::-;21639:80;21715:2;21704:9;21700:18;21691:6;21639:80;:::i;:::-;21729;21805:2;21794:9;21790:18;21781:6;21729:80;:::i;:::-;21819:73;21887:3;21876:9;21872:19;21863:6;21819:73;:::i;:::-;21902;21970:3;21959:9;21955:19;21946:6;21902:73;:::i;:::-;21175:807;;;;;;;;;:::o;21988:143::-;22045:5;22076:6;22070:13;22061:22;;22092:33;22119:5;22092:33;:::i;:::-;21988:143;;;;:::o;22137:663::-;22225:6;22233;22241;22290:2;22278:9;22269:7;22265:23;22261:32;22258:119;;;22296:79;;:::i;:::-;22258:119;22416:1;22441:64;22497:7;22488:6;22477:9;22473:22;22441:64;:::i;:::-;22431:74;;22387:128;22554:2;22580:64;22636:7;22627:6;22616:9;22612:22;22580:64;:::i;:::-;22570:74;;22525:129;22693:2;22719:64;22775:7;22766:6;22755:9;22751:22;22719:64;:::i;:::-;22709:74;;22664:129;22137:663;;;;;:::o;22806:332::-;22927:4;22965:2;22954:9;22950:18;22942:26;;22978:71;23046:1;23035:9;23031:17;23022:6;22978:71;:::i;:::-;23059:72;23127:2;23116:9;23112:18;23103:6;23059:72;:::i;:::-;22806:332;;;;;:::o;23144:116::-;23214:21;23229:5;23214:21;:::i;:::-;23207:5;23204:32;23194:60;;23250:1;23247;23240:12;23194:60;23144:116;:::o;23266:137::-;23320:5;23351:6;23345:13;23336:22;;23367:30;23391:5;23367:30;:::i;:::-;23266:137;;;;:::o;23409:345::-;23476:6;23525:2;23513:9;23504:7;23500:23;23496:32;23493:119;;;23531:79;;:::i;:::-;23493:119;23651:1;23676:61;23729:7;23720:6;23709:9;23705:22;23676:61;:::i;:::-;23666:71;;23622:125;23409:345;;;;:::o;23760:179::-;23900:31;23896:1;23888:6;23884:14;23877:55;23760:179;:::o;23945:366::-;24087:3;24108:67;24172:2;24167:3;24108:67;:::i;:::-;24101:74;;24184:93;24273:3;24184:93;:::i;:::-;24302:2;24297:3;24293:12;24286:19;;23945:366;;;:::o;24317:419::-;24483:4;24521:2;24510:9;24506:18;24498:26;;24570:9;24564:4;24560:20;24556:1;24545:9;24541:17;24534:47;24598:131;24724:4;24598:131;:::i;:::-;24590:139;;24317:419;;;:::o;24742:177::-;24882:29;24878:1;24870:6;24866:14;24859:53;24742:177;:::o;24925:366::-;25067:3;25088:67;25152:2;25147:3;25088:67;:::i;:::-;25081:74;;25164:93;25253:3;25164:93;:::i;:::-;25282:2;25277:3;25273:12;25266:19;;24925:366;;;:::o;25297:419::-;25463:4;25501:2;25490:9;25486:18;25478:26;;25550:9;25544:4;25540:20;25536:1;25525:9;25521:17;25514:47;25578:131;25704:4;25578:131;:::i;:::-;25570:139;;25297:419;;;:::o;25722:194::-;25762:4;25782:20;25800:1;25782:20;:::i;:::-;25777:25;;25816:20;25834:1;25816:20;:::i;:::-;25811:25;;25860:1;25857;25853:9;25845:17;;25884:1;25878:4;25875:11;25872:37;;;25889:18;;:::i;:::-;25872:37;25722:194;;;;:::o;25922:222::-;26062:34;26058:1;26050:6;26046:14;26039:58;26131:5;26126:2;26118:6;26114:15;26107:30;25922:222;:::o;26150:366::-;26292:3;26313:67;26377:2;26372:3;26313:67;:::i;:::-;26306:74;;26389:93;26478:3;26389:93;:::i;:::-;26507:2;26502:3;26498:12;26491:19;;26150:366;;;:::o;26522:419::-;26688:4;26726:2;26715:9;26711:18;26703:26;;26775:9;26769:4;26765:20;26761:1;26750:9;26746:17;26739:47;26803:131;26929:4;26803:131;:::i;:::-;26795:139;;26522:419;;;:::o;26947:172::-;27087:24;27083:1;27075:6;27071:14;27064:48;26947:172;:::o;27125:366::-;27267:3;27288:67;27352:2;27347:3;27288:67;:::i;:::-;27281:74;;27364:93;27453:3;27364:93;:::i;:::-;27482:2;27477:3;27473:12;27466:19;;27125:366;;;:::o;27497:419::-;27663:4;27701:2;27690:9;27686:18;27678:26;;27750:9;27744:4;27740:20;27736:1;27725:9;27721:17;27714:47;27778:131;27904:4;27778:131;:::i;:::-;27770:139;;27497:419;;;:::o;27922:176::-;28062:28;28058:1;28050:6;28046:14;28039:52;27922:176;:::o;28104:366::-;28246:3;28267:67;28331:2;28326:3;28267:67;:::i;:::-;28260:74;;28343:93;28432:3;28343:93;:::i;:::-;28461:2;28456:3;28452:12;28445:19;;28104:366;;;:::o;28476:419::-;28642:4;28680:2;28669:9;28665:18;28657:26;;28729:9;28723:4;28719:20;28715:1;28704:9;28700:17;28693:47;28757:131;28883:4;28757:131;:::i;:::-;28749:139;;28476:419;;;:::o;28901:222::-;29041:34;29037:1;29029:6;29025:14;29018:58;29110:5;29105:2;29097:6;29093:15;29086:30;28901:222;:::o;29129:366::-;29271:3;29292:67;29356:2;29351:3;29292:67;:::i;:::-;29285:74;;29368:93;29457:3;29368:93;:::i;:::-;29486:2;29481:3;29477:12;29470:19;;29129:366;;;:::o;29501:419::-;29667:4;29705:2;29694:9;29690:18;29682:26;;29754:9;29748:4;29744:20;29740:1;29729:9;29725:17;29718:47;29782:131;29908:4;29782:131;:::i;:::-;29774:139;;29501:419;;;:::o;29926:165::-;30066:17;30062:1;30054:6;30050:14;30043:41;29926:165;:::o;30097:366::-;30239:3;30260:67;30324:2;30319:3;30260:67;:::i;:::-;30253:74;;30336:93;30425:3;30336:93;:::i;:::-;30454:2;30449:3;30445:12;30438:19;;30097:366;;;:::o;30469:419::-;30635:4;30673:2;30662:9;30658:18;30650:26;;30722:9;30716:4;30712:20;30708:1;30697:9;30693:17;30686:47;30750:131;30876:4;30750:131;:::i;:::-;30742:139;;30469:419;;;:::o;30894:223::-;31034:34;31030:1;31022:6;31018:14;31011:58;31103:6;31098:2;31090:6;31086:15;31079:31;30894:223;:::o;31123:366::-;31265:3;31286:67;31350:2;31345:3;31286:67;:::i;:::-;31279:74;;31362:93;31451:3;31362:93;:::i;:::-;31480:2;31475:3;31471:12;31464:19;;31123:366;;;:::o;31495:419::-;31661:4;31699:2;31688:9;31684:18;31676:26;;31748:9;31742:4;31738:20;31734:1;31723:9;31719:17;31712:47;31776:131;31902:4;31776:131;:::i;:::-;31768:139;;31495:419;;;:::o;31920:221::-;32060:34;32056:1;32048:6;32044:14;32037:58;32129:4;32124:2;32116:6;32112:15;32105:29;31920:221;:::o;32147:366::-;32289:3;32310:67;32374:2;32369:3;32310:67;:::i;:::-;32303:74;;32386:93;32475:3;32386:93;:::i;:::-;32504:2;32499:3;32495:12;32488:19;;32147:366;;;:::o;32519:419::-;32685:4;32723:2;32712:9;32708:18;32700:26;;32772:9;32766:4;32762:20;32758:1;32747:9;32743:17;32736:47;32800:131;32926:4;32800:131;:::i;:::-;32792:139;;32519:419;;;:::o;32944:224::-;33084:34;33080:1;33072:6;33068:14;33061:58;33153:7;33148:2;33140:6;33136:15;33129:32;32944:224;:::o;33174:366::-;33316:3;33337:67;33401:2;33396:3;33337:67;:::i;:::-;33330:74;;33413:93;33502:3;33413:93;:::i;:::-;33531:2;33526:3;33522:12;33515:19;;33174:366;;;:::o;33546:419::-;33712:4;33750:2;33739:9;33735:18;33727:26;;33799:9;33793:4;33789:20;33785:1;33774:9;33770:17;33763:47;33827:131;33953:4;33827:131;:::i;:::-;33819:139;;33546:419;;;:::o;33971:222::-;34111:34;34107:1;34099:6;34095:14;34088:58;34180:5;34175:2;34167:6;34163:15;34156:30;33971:222;:::o;34199:366::-;34341:3;34362:67;34426:2;34421:3;34362:67;:::i;:::-;34355:74;;34438:93;34527:3;34438:93;:::i;:::-;34556:2;34551:3;34547:12;34540:19;;34199:366;;;:::o;34571:419::-;34737:4;34775:2;34764:9;34760:18;34752:26;;34824:9;34818:4;34814:20;34810:1;34799:9;34795:17;34788:47;34852:131;34978:4;34852:131;:::i;:::-;34844:139;;34571:419;;;:::o;34996:228::-;35136:34;35132:1;35124:6;35120:14;35113:58;35205:11;35200:2;35192:6;35188:15;35181:36;34996:228;:::o;35230:366::-;35372:3;35393:67;35457:2;35452:3;35393:67;:::i;:::-;35386:74;;35469:93;35558:3;35469:93;:::i;:::-;35587:2;35582:3;35578:12;35571:19;;35230:366;;;:::o;35602:419::-;35768:4;35806:2;35795:9;35791:18;35783:26;;35855:9;35849:4;35845:20;35841:1;35830:9;35826:17;35819:47;35883:131;36009:4;35883:131;:::i;:::-;35875:139;;35602:419;;;:::o;36027:175::-;36167:27;36163:1;36155:6;36151:14;36144:51;36027:175;:::o;36208:366::-;36350:3;36371:67;36435:2;36430:3;36371:67;:::i;:::-;36364:74;;36447:93;36536:3;36447:93;:::i;:::-;36565:2;36560:3;36556:12;36549:19;;36208:366;;;:::o;36580:419::-;36746:4;36784:2;36773:9;36769:18;36761:26;;36833:9;36827:4;36823:20;36819:1;36808:9;36804:17;36797:47;36861:131;36987:4;36861:131;:::i;:::-;36853:139;;36580:419;;;:::o;37005:191::-;37045:3;37064:20;37082:1;37064:20;:::i;:::-;37059:25;;37098:20;37116:1;37098:20;:::i;:::-;37093:25;;37141:1;37138;37134:9;37127:16;;37162:3;37159:1;37156:10;37153:36;;;37169:18;;:::i;:::-;37153:36;37005:191;;;;:::o;37202:176::-;37342:28;37338:1;37330:6;37326:14;37319:52;37202:176;:::o;37384:366::-;37526:3;37547:67;37611:2;37606:3;37547:67;:::i;:::-;37540:74;;37623:93;37712:3;37623:93;:::i;:::-;37741:2;37736:3;37732:12;37725:19;;37384:366;;;:::o;37756:419::-;37922:4;37960:2;37949:9;37945:18;37937:26;;38009:9;38003:4;37999:20;37995:1;37984:9;37980:17;37973:47;38037:131;38163:4;38037:131;:::i;:::-;38029:139;;37756:419;;;:::o;38181:180::-;38229:77;38226:1;38219:88;38326:4;38323:1;38316:15;38350:4;38347:1;38340:15;38367:114;38434:6;38468:5;38462:12;38452:22;;38367:114;;;:::o;38487:184::-;38586:11;38620:6;38615:3;38608:19;38660:4;38655:3;38651:14;38636:29;;38487:184;;;;:::o;38677:132::-;38744:4;38767:3;38759:11;;38797:4;38792:3;38788:14;38780:22;;38677:132;;;:::o;38815:108::-;38892:24;38910:5;38892:24;:::i;:::-;38887:3;38880:37;38815:108;;:::o;38929:179::-;38998:10;39019:46;39061:3;39053:6;39019:46;:::i;:::-;39097:4;39092:3;39088:14;39074:28;;38929:179;;;;:::o;39114:113::-;39184:4;39216;39211:3;39207:14;39199:22;;39114:113;;;:::o;39263:732::-;39382:3;39411:54;39459:5;39411:54;:::i;:::-;39481:86;39560:6;39555:3;39481:86;:::i;:::-;39474:93;;39591:56;39641:5;39591:56;:::i;:::-;39670:7;39701:1;39686:284;39711:6;39708:1;39705:13;39686:284;;;39787:6;39781:13;39814:63;39873:3;39858:13;39814:63;:::i;:::-;39807:70;;39900:60;39953:6;39900:60;:::i;:::-;39890:70;;39746:224;39733:1;39730;39726:9;39721:14;;39686:284;;;39690:14;39986:3;39979:10;;39387:608;;;39263:732;;;;:::o;40001:831::-;40264:4;40302:3;40291:9;40287:19;40279:27;;40316:71;40384:1;40373:9;40369:17;40360:6;40316:71;:::i;:::-;40397:80;40473:2;40462:9;40458:18;40449:6;40397:80;:::i;:::-;40524:9;40518:4;40514:20;40509:2;40498:9;40494:18;40487:48;40552:108;40655:4;40646:6;40552:108;:::i;:::-;40544:116;;40670:72;40738:2;40727:9;40723:18;40714:6;40670:72;:::i;:::-;40752:73;40820:3;40809:9;40805:19;40796:6;40752:73;:::i;:::-;40001:831;;;;;;;;:::o;40838:332::-;40959:4;40997:2;40986:9;40982:18;40974:26;;41010:71;41078:1;41067:9;41063:17;41054:6;41010:71;:::i;:::-;41091:72;41159:2;41148:9;41144:18;41135:6;41091:72;:::i;:::-;40838:332;;;;;:::o;41176:180::-;41224:77;41221:1;41214:88;41321:4;41318:1;41311:15;41345:4;41342:1;41335:15;41362:185;41402:1;41419:20;41437:1;41419:20;:::i;:::-;41414:25;;41453:20;41471:1;41453:20;:::i;:::-;41448:25;;41492:1;41482:35;;41497:18;;:::i;:::-;41482:35;41539:1;41536;41532:9;41527:14;;41362:185;;;;:::o;41553:181::-;41693:33;41689:1;41681:6;41677:14;41670:57;41553:181;:::o;41740:366::-;41882:3;41903:67;41967:2;41962:3;41903:67;:::i;:::-;41896:74;;41979:93;42068:3;41979:93;:::i;:::-;42097:2;42092:3;42088:12;42081:19;;41740:366;;;:::o;42112:419::-;42278:4;42316:2;42305:9;42301:18;42293:26;;42365:9;42359:4;42355:20;42351:1;42340:9;42336:17;42329:47;42393:131;42519:4;42393:131;:::i;:::-;42385:139;;42112:419;;;:::o
Swarm Source
ipfs://fea31090688c97212c5abca23a5351b3b64041b3b1ac3974cfa64c246ad863bf
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.